モバイルでの経路探索と衝突回避


8

現在、モバイルプラットフォーム(iphone5 +)用のDiabloのようなゲームを開発しています。

単純なA *検索でパスが見つかりますが、衝突回避を考慮する必要があります。

同時に約50体のモンスターが活躍するので、パフォーマンスは非常に重要です。

私はうまくいくかもしれないいくつかの方法を見つけました。

  1. NavMesh + RVO

    リキャスト/迂回ライブラリが上うまく機能pathfinding部分が、その群衆シミュレーションは、迅速(30の物質については5ms以上)の限界に達します。

    別のライブラリRVO2は問題ないようです(50エージェントで2ミリ秒未満)。ただし、ライブラリにはライセンスの問題があります。

  2. フローフィールド +物理エンジン

    多くのRTSゲームはこの方法を使用していますが、衝突を解決するには物理エンジンが必要なようです。多くのエージェントが共通の目標を共有していない場合、この方法は従来のA *パスファインディングよりもコストがかかる可能性があります。

  3. ステアリング動作 +物理エンジン

    ステアリング動作には多くの概念が含まれていますが、機能するsimple avoidance behavior可能性はあると思います(正面に何かがある場合は左/右に曲がるだけです)が、この方法でも物理エンジンが連携する必要があります。

どちらを使用するかはまだわかりません。おそらく他のパスファインディングと衝突回避の方法が存在します。

PS Halo:Spartan StrikeはHavok AI(RVOベース?)を使用しますが、そのゲームには多くの敵がいなかったので、最初の方法(NavMesh + RVO)がモバイルプラットフォームでうまく機能するかどうか疑問に思います。


GPUには50を超える処理ユニットがあるため、各モンスターのGPUでA-starを実行すると、neエージェントの通常のCPUと同じくらい高速に実行されます。
Pieter Geerkens、2015

@PieterGeerkensパスファインディングパーツがモバイルで正常に機能します(リクエストあたり0.1ミリ秒未満)。ただし、衝突回避パーツは機能しません。また、レンダリングタスクがたくさんあるので、GPUには衝突を回避する時間がないと思います。
lostyzd 2015

回答:


4

これはかなり興味深い質問です。私はできることで貢献したいと思います。

最初に、作成しようとしているゲームの境界を明確に定義し、それらの質問を定義する必要があると思います(一部は既に回答されている場合があります)。

  • モンスターアグロはどこまで?
  • あなたのターゲットは同時に何匹のモンスターですか?
  • あなたの地形はどのように編成されていますか?タイル張りですか?
  • どのくらいの衝突回避が必要ですか?

starcraft 2でパスファインディングがどのように行われるかについて、ここからの回答を引用します。

Starcraft IIは、マップ地形と建物の制約付きDelaunay三角形分割を使用して、navmeshを生成します。単位半径を考慮して、ファンネルフィルター付きのA *がこのメッシュに沿ってパスするために使用されます。次に、ローカルステアリングレイヤーと衝突回避レイヤーがその上に追加されます。これには、特定の場合にユニットを迂回する代わりにユニットを移動させることができる協調的な「アイドルユニットを押し出す」機能が含まれます。さらに、並行して移動するユニットは、相互に影響を及ぼさないことが保証されるため、衝突回避の目的で無視されます。[...] SC2は6つの操縦力を使用します:追従、群れ、グループ化、分離、回避、到着。

だからあなたの3つの命題に戻る:

  1. NavMesh + RVO- >ライセンスの問題がある場合、それはオプションではありません。しかし、それは最も簡単な実装かもしれません。
  2. フローフィールド+物理エンジン ->正直に依存しますが、セミダイナミック環境では、必要に応じて本当に計算が集中しているようです
  3. 操縦行動+物理エンジン ->操縦行動は、私に行くべき道のようです。そうすれば、たとえばモンスターのタイプに応じて、ゲームにかなり良い群れの動作を定義できます。そして、それは暴徒の数とうまく調和します。ただし、衝突検出については、物理学から離れます。単純な回避動作で十分です。速度を下げたり、速度を上げたり、回転させたりするなどです。

ステアリング動作に関するいくつかの注記では、必要な領域で必要なだけステアリング力を定義できます。群れ/引き寄せ/反発には少なくとも3つは必要ですが、おそらくもっと興味深いでしょう。

次に、ステアリング動作を実行して、ニーズに合っているかどうかを確認するライブラリーを見つけてみてください(このように本当にわかりませんが、存在します)。

ライブラリがあなたのニーズに合わない場合、あなたはいくつかの楽しみのために準備ができています!しかし、群れ行動を自分で実装するのに十分なリソースとアルゴリズムがあります。例1 例2

自分で実装することを選択した場合は、エージェントのスコープが、たとえば群れ内の場所によって縮小されるため、実行すべきいくつかの素晴らしい最適化があることを知ってください。とにかく、いくつかのアルゴリズムに含まれるべきです。

まあそれは私の知識の中で最高です、とにかくわかりません


回答ありがとうございます。ステアリング動作は、高密度のシーンでうまく機能しますか?このチュートリアルのデモには、多くの衝突と振動があります。
lostyzd 2015

1

敵のパスがあまり動的でない場合(動的とは、すべてのカップルエージェントが異なるターゲットを攻撃しており、それらのターゲットへのパスをカップルフレームごとに更新する必要がある場合)

次に、パフォーマンスを重視する場合は、フローフィールドとステアリング動作を組み合わせて実行します。エージェントを空間分割するなど、より複雑なテーマがいくつか含まれているため、ネイバーを見つけるのは簡単ですが、パフォーマンスには最善の策です。(A *検索を削除し、フローフィールドを使用してエージェントに指示する)

これらの2つのアルゴリズムを組み合わせることは、一般に、動的パスがあまりないエージェントが密集したシーンに対して最も最適化されたソリューションと見なされます。

それが重くなる可能性があるので、私はあなたの最終的なオプションに関係なく物理学を避けます。

エージェント間の衝突はステアリング動作でほぼ完全に処理でき、フローフィールドはパスを計算する50エージェントの重みを減らします。ただし、フローフィールドは、マップサイズが大きく、グリッドサイズが小さいほど、ターゲット選択をより動的にする必要があるため、ますます高価になることに注意してください。


フローフィールドの考え方が気に入っています。しかし、私の知る限りでは、惑星消滅スタークラフトはどちらも衝突を回避するために物理学を使用しているため、物理システムなしで流れ場を作成できるかどうかはわかりません。
lostyzd 2015

彼らはできる、あなたがする必要があるのは、流れ場の操縦行動を作成することだけです。その唯一の機能は、フローベクトルの現在のグリッド位置を確認することです。フローフィールドが行うのは、エージェントに指示することだけです。他のステアリング動作が衝突を処理します。
Saevax 2015
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.