Upload
tomioka-yuusei
View
974
Download
0
Embed Size (px)
Citation preview
自作三次元経路探索アルゴリズムのお話
経路探索アルゴリズム例
• A*( エースター )–各点 ( ノード )を評価し最短経路を導く–障害物を避ける経路を必ず見つける–処理が重く評価を行う指標が必要
• 幅優先探索–始点から近い順に各点を辿る–障害物を避ける経路を必ず見つける–全ての経路を探索するため計算量が莫大
経路探索の問題点
計算量のせいで処理が重い!–三次元となるとなおさら–重くて複数同時に処理を回せない
理由は?
「計算対象 (ノード )」が多すぎるのではないか
解決策 (for Unity)
• Bounds(バウンス )を用いる– AABB(軸平行境界ボックス )–「バウンディングボックス」ともいう–オブジェクトを囲んでいる (下画像の紫部 )
目的:計算対象を減らす
解決策 (for Unity)
• Raycast(レイキャスト )を用いる–不可視の光線を飛ばし衝突判定を行う– Debug.DrawRay(引数色々 )で描画可能–「 SphereCast( スフィアキャスト )」も存在する
目的:計算対象を減らす
アルゴリズム
1. 自座標から目標座標へ Rayを飛ばす目的:計算対象を減らす
自分障害物 目標
間に障害物がなければ直線的に移動
Ray
目標
アルゴリズム
2. 障害物が存在する際、障害物の Bouns情報を取得
目的:計算対象を減らす
自分
障害物
!))) 目標
自分
障害物
Bouds情報
アルゴリズム
3. Bouns情報からノードを 4つ作成目的:計算対象を減らす
障害物
上
1. 情報からボックスの角の座標を取得2. 中心から離れるベクトル方向へ座標
ずらし (障害物から離れさせる )3. 自分の現在高さへ調整
||計算対象が 4つのみで良くなった!
アルゴリズム
4. ノードを絞り込む目的:計算対象を減らす
障害物
• 自分から見えないもの• ほぼ正面にあるもの
除外条件
自
相
除外対象
(例 )
アルゴリズム
5. 距離の合計から最も短いルートを選択目的:計算対象を減らす
自
相障害物を跨ぐような経路は考慮しないよう配慮する
結果 1
結果 2
結果 3
メリット
• 動作がかなり軽い• 三次元的な経路探索が可能
デメリット
• 複雑な形状や穴が開いた障害物に対応不可• 障害物が隣り合っていると探索が上手くいかないときがある (再探索で対応可能 )• 上下の経路作成に未対応