Game Engine Gems 1 "High-Level Pathfinding"の概要
記事を一通り読んでから気づいたのですが(汗), この記事はアルゴリズムが文章のみで説明されており, いまいちわかりにくので, あまりよくない内容かもしれないです. 本当はアルゴリズムの擬似コードとか書いて欲しかったですね. でも, 折角読んだので概要を書いておきます.
- 例えば2DのRTSにおいて経路探索を行う探索空間(search space)の要素数が100万個以上のタイルから構成されているとき, Actorの詳細なパスをリアルタイムに計算するとゲームのパフォーマンスに影響を与えてしまいます.
- そこで詳細な経路探索ではなく, 探索空間の要素数を減らしたHigh-Levelな経路探索を行うことで問題を解決します.
- High-Level Pathfindingは以下の3つのPhaseから構成されています.
- Preprocess Phase
- Fuzzy Pathing Phase
- Detailed Paths Phase
以下では, 3つのPhaseについて順に説明していきます.
- Preprocess Phase
- Design Time
- タイルの地形の種類や, Actorが各種類のタイルを移動する際のルールを決めます(例えば, 忍者しか壁に登れないなど).
- Terrain Analysis
- 各タイルを繰り返し走査して, 隣接した同じ種類の地形をグループ化してPath regionとします.
- このPath regionの中のタイル数が多すぎると経路探索のパフォーマンスに影響するので, gridによってPath regionを分割します.
- 例えば, 1000x1000タイルのマップがあるとき, gridを10x10としたりします.
- Adjacent Regions
- グラフノードとしてのPath regionsを使ってパス探索を行うために, ノード間にグラフのアークを構築します.
- 具体的な処理としては, 各タイルに対して, 上・下・左・右方向を調べてそれらのタイルが異なるRegionにあるとき, それらのタイル間にグラフのアークを生成します.
- Design Time
- Fuzzy Pathing Phase
- Path regionをグラフノードとして, A*でグラフ探索を行います.
- このとき各Path regionの地形の種類をActorが実際に移動できるか否かやPath region間の移動コストを計算します.
- Detailed Paths Phase
- 移動予定の一連のPath region内のbeacon point(Path regionの重心)に向かって経路移動を繰り返します.