正方格子マップの(文字通り)角を切り取る手法


7

私のゲームには、変形可能な地形とあらゆる方向に移動できるユニットがありますが、不均一な地形によって速度が低下するレベルが含まれます。通常のAスターはほとんどの場合問題なく機能しますが、汎用パスファインダーがどのように機能しても、ユニットを直接パスに送信しない平坦な土地を除きます。シータスターは、レベル全体がかなり平らな場合は機能しますが、最初に不均一な地形を考慮する必要がある場合は、はるかに遅くなります。

マンハッタンの距離ベースのAスターアルゴリズムは高速で、他のパス検索またはステアリングアルゴリズムが引き継ぐのに十分なヒントを与えると思いますが、先を見て、いつ決定するためにどのタイプのアルゴリズムを使用するかわかりませんパスを放棄し、より直接的なルートをたどり、後でパスのどこに戻るかを指定します。

(勾配、障害物、道路などを考慮するように調整されている場合、シータスターは効率が悪すぎるようです。http//aigamedev.com/open/で地雷原の回避についてコメントに提案された解決策を参照してくださいチュートリアル/ theta-star-any-angle-paths /

編集:私は、同様のグリッドでA-starを既に実装してテストしたことについては触れませんでした。(私はこの質問で誤って何かを削除したと思います。)障害物が最も直接的なパスをブロックしている場合(基本的にパス検出が有用な場合)、私が検討したいくつかのより明白なコスト/ヒューリスティック関数は、グリッド上の現実的なパスになりません。 )(例の画像)。シータスターアルゴリズムで使用されるコスト関数への変更は理想的な解決策のように見えますが(グリッドの使用の制約を考慮すると)、タイルの移動コストが同じであると想定されます(さらに時間がかかります)。

マンハッタン距離を使用する背後にある私の最初の理由は、障害物レイアウトや地形が変化した場合に高速経路探索アルゴリズムを使用することがより重要だったため、経路探索アルゴリズムから「コーナーカット」アルゴリズムを外部委託することでした。ユニットが到着したときに、経路探索アルゴリズムのすべての検索の順列よりも「コーナーカット」アルゴリズムを1回実行する方が理にかなっています(結果はとにかく廃棄される可能性があります)。マンハッタン距離での4近隣検索代替パスのボックスが表示され、元のパスと最短パスによって形成される直角三角形を特定できるため、これも興味深いものです。

より適切な質問は、「90度の曲がり角のあるパスでショートカットをすばやく特定する方法は何ですか?」


2
傾斜などに応じてタイル間のコストを変更できます。そのように単純にしてみませんか?
Kromster、2011

1
パスのスムージングを調べてみてください。これがガマストラの興味深い記事です。
bummzack

回答:


4

A *にチャンスを与えましたか?さまざまなタイプのテレインのコストに適切に重み付けすると、使用可能なノードが与えられた場合に最適なパスが見つかります。ただし、正方形のグリッドを指定した場合、オープンプレーン上に直線は見つかりません。これは、問題があるようです。

平野を横切る直線のパスを作成できるようにしたい場合は、新しいパスが同等またはそれ以下のコスト(つまり、距離が同じかそれより短く、起伏の多い地形を通過しない場所)でパスのエッジをセグメントに折りたたむことができます。パス内のノードの2つのペア(ABとBC)をそれぞれ取り、ACがより良いルートであるかどうかを確認します。ACが同等またはそれ以下のコストの場合、リストからBを削除します。リストが変更されなくなる反復までリストを繰り返します。これで平野の問題が解決します。ACが合法であることを確認し、任意の距離でのコストを計算するには、追加の処理を行う必要があります。または、単純な障害物回避を同時に使用して、ユニットにパスを一般的なガイドラインとして使用させ、ノードのいくつかの位置に移動させることもできます。

また、ノードがトラバースするオプションをA *に増やすことで、パスの品質を大幅に向上させることもできます。たとえば、ax√2のコストで対角線を追加するだけで、単純な4方向のトラバーサルよりもはるかに優れたパスが生成されます。

先を見通して、パスを放棄するタイミング、より直接的なルートをたどり、後でパスに戻る場所を決定するために使用するアルゴリズムの種類がわかりません。

A *はこれをすでに処理しています。現在探索されているノードが最低コスト+ヒューリスティックではなくなるとすぐに、最低コスト+ヒューリスティックノードに移動します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.