NavMeshesで使用されているヒューリスティックは何ですか?


7

プログラマーがNavMeshesのA *パスファインディングで使用するヒューリスティックは何ですか?

NavMesh =ナビゲーションメッシュ。ウェイポイントの代わりにメッシュを使用する一種のパスファインディング。


質問を明確にしてください。「NavMeshes」(製品名™のように大文字で表記されています)と言ったときの意味がわかりません。A *の代わりに、より近似的なパスを生成しますが、より高速なアルゴリズムを求めていますか?
Ricket


おっと、ありがとう!私はそれらのことを聞いたが、私は:)凝縮名を認識していなかったので、それを使って何をやったことがない
Ricket

回答:


9

好きなものを選んでください:

http://theory.stanford.edu/~amitp/GameProgramming/Heuristics.html

そのリンクには、速度と精度のどちらかについて、多くのヒューリスティックが記述されています。常にトレードオフがあるので、開発者はゲームのパフォーマンスへの影響を最小限に抑える最も正確なヒューリスティックを使用すると思います。


これらはグリッドマップ用です。ナビゲーションメッシュは、1つのポリゴンから別のポリゴンに移動するために異なるヒューリスティックを使用すると思います。おそらく、エッジのサイズなどに基づいて次の最適なポリゴンを選択するための何らかの形のジオメトリヒューリスティック。
Shawn Mclean 2011年

3
同意しましたが、次のポリゴンへのコストを支援するために、ヒューリスティックを使用して最終的な絶対宛先までの最短経路を推定します。彼らは、距離を「許容ヒューリスティック」であると過小評価する必要があります。グリッドマップがグラフであるのと同じように、ナビゲーションメッシュは依然としてグラフです。したがって、これらのヒューリスティックのほとんどが適用可能であると考えます。どちらが最も適用可能かを確認するのは開発者の責任です。
レイデイ

1

使用する非常に大まかな(ただし非常に高速な)ヒューリスティックは(マンハッタン距離)です。

vec1 = start vector
vec2 = end vector

heuristic = abs(vec2.x - vec1.x) + abs(vec2.y - vec1.y))

これにより、コストがかかる可能性のある平方根(ピタゴラス距離)を回避できます。


マンハッタンの距離ですね
レイ・デイ

そうだと思ったので、編集してないのではないかと思います。
共産主義者ダック

長さの2乗(平方根をとらないピタゴラス距離)を使用することもできます。これは高速で、おそらくマンハッタンの距離よりもヒューリスティックです(キャラクターが水平方向と垂直方向にしか移動できない場合を除く)
bummzack

@bummzack:Amitのヒューリスティックページの「ユークリッド距離、二乗」セクションをお読みください。距離の2乗は許容されるヒューリスティックではなく、最適ではないパスになります。

1
平方距離は、短距離では小さすぎ(A *は時間を浪費します)、長距離では長すぎます(A *はより悪いパスを見つけます)。ヒューリスティックな過大な距離を設定することには十分な理由がありますが、sqrtを回避することはその1つではありません。高速sqrt近似を使用するか、対角距離を使用するか、ナビゲーショングラフが明示的である場合は、ユークリッド/ピタゴラス距離を一度計算して、ノード間のエッジと一緒に保存します。
amitp '27年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.