nav,即navigation,現行3D游戲主流尋路方式,起源的思路是和A*完全不同的,因為navmesh不需要一張二維表,只需要利用模型阻擋生成一張近似尋路用的“mesh”。
細節不多提及,參見http://www.ai-blog.net/archives/000152.html中的示例,
A*尋路中,可以借用他的思想做出效果非常好的優化,在游戲中測試512×512的尋路速度在幾個毫秒內即可完成。
在生成阻擋點信息時,將整塊沒有阻擋點的凸多邊形(這里全部使用四邊形)合並為一塊navmesh,生成若干mesh再使用navigation思路進行首次路徑生成。測試512×512游戲實際場景的mesh數量一般低於1萬塊。比起512×512的數值,優化非常驚人。然后儲存連通表,再次優化掉一半左右的無用導航格。
假設紅色為阻擋點,生成后的網格應該如下:
navmesh的計算方法,射線法(line-of-sight)參見:http://blog.csdn.net/budtang/article/details/5959606
1、無阻擋凸多邊形生成能去最大就去最大,比如如果存在64×64和一個8×8的塊,就不應該被划分為64×56和64×8的塊。2、生成后保存大塊連通表數據。3、無法計算動態阻擋,navmesh信息需要提前計算存入文件,遍歷生成mesh比尋路更耗時。