一種虛擬現實場景中尋路的方法
【技術領域】
[0001]本申請涉及計算機三維虛擬場景模擬技術領域,尤其涉及一種虛擬現實場景中尋路的方法。
【背景技術】
[0002]尋路問題是各類游戲中角色尋路、三維虛擬場景中運動目標的路徑規(guī)劃、機器人尋路、車載導航系統、車輛路徑問題(VRP,vehicle routing problem)等多領域中的關鍵技術之一,相關的尋路算法的研宄與應用也是長期的研宄熱點。
[0003]現有技術中常見的尋路算法包括廣度優(yōu)先搜索(BFS,Breadth First Search),深度優(yōu)先搜索(DFS,Depth First Search),啟發(fā)式搜索算法等等。深度優(yōu)先是按照一定的順序前查找完一個分支,再查找另一個分支,直到找到目標或到達步數為止;廣度優(yōu)先一般是找周圍所有點記錄下來,然后在對每個點找它們周圍所有未找過的點,然后再如此循環(huán)下去直到找到目標為止。啟發(fā)式搜索一般是對每個搜索位置進行評估,找到最好的位置,再從這個位置如此循環(huán)進行搜索直到目標。
[0004]現有技術中常用的A* (A-Star)尋路算法屬于啟發(fā)式搜索方法,公式表示為:f (η)=g (n) +h (η)。
[0005]其中,f (η)是從初始點經由節(jié)點η到目標點的估價函數;
[0006]g(n)是在狀態(tài)空間中從初始節(jié)點到η節(jié)點的實際代價;
[0007]h(n)是從η到目標節(jié)點最佳路徑的估計代價。
[0008]保證找到最短路徑(最優(yōu)解的)條件,關鍵在于估價函數h(n)的選取:估價值h(n)〈 = η到目標節(jié)點的距離實際值,這種情況下,搜索的點數多,搜索范圍大,效率低。但能得到最優(yōu)解。并且如果h(n) [(!(!!沁即距離估計!^!!)等于最短距離,那么搜索將嚴格沿著最短路徑進行,此時的搜索效率是最高的。
[0009]A*尋路算法的檢索過程如圖1所示,首先將場景劃分為一定大小的柵格方塊,方塊中的數字相當于坐標。假設物體要從方塊A運動到方塊B,深灰色方塊表示尋路過程中搜索到的方塊,淺灰色方塊表示實際經過的方塊,灰色實線表示A*尋到的最優(yōu)解。傳統的A*尋路是一種“面”的尋路方式,這樣多次的重復計算,會在短時間內占用非常多的系統資源,而且隨著尋路越長,這種消耗是平方數上升的。其他的尋路算法雖然對傳統的A*有優(yōu)化,但是都是這種基于“面”的算法,尋路過程中對計算機資源占用較高。
[0010]目前,在游戲中使用的尋路系統大多分兩個方案:短距離尋路,泛指當距離不超過一個計算機屏幕的尋路,使用改良的A*尋路;長距離尋路,比如大于一個到兩個計算機屏幕的尋路,使用相應配套的數據解析尋路,比如在虛擬世界內設置幾個導航的燈塔,或者在制作地圖的時候添加固定的尋路點。這樣做法的劣勢在于多維護了一部分遠距離尋路的數據,多維護了一套不通用的遠距離尋路算法。由于不同公司的特定數據不一致,那么遠距離尋路算法同樣不會一致。這大大增加的開發(fā)量,延長開發(fā)時間,增加維護成本,大大提高了項目風險。
【發(fā)明內容】
[0011]本申請?zhí)峁┝艘环N虛擬現實場景中尋路的方法,對于遠近距離可以采用統一的方法,并且占用資源較少。
[0012]本申請實施例提供的一種虛擬現實場景中尋路的方法,包括:
[0013]A、記錄當前點作為起始點坐標,記錄終點坐標,以從起始點指向終點的方向作為尋路方向;
[0014]B、判斷當前尋路方向上的下一個網格類型屬于類型2還是類型3,若屬于類型2,執(zhí)行步驟C ;若屬于類型3,則執(zhí)行步驟D ;類型2表示周圍無阻擋的搜索節(jié)點;類型3表示周圍有阻擋的搜索節(jié)點;
[0015]C、沿著當前尋路方向移動一個網格,然后返回步驟B ;
[0016]D、分出兩個尋路分支,分別沿著順時針風向以及逆時針方向試圖繞過阻擋點,這時建立兩個線程,分別維護尋路偏轉角度和旋轉系數;
[0017]E、判斷是否有一個尋路分支繞過阻擋點,若是,執(zhí)行步驟207;否則,若兩個分支均已停止,則結束本流程,若還至少存在一個進行中的尋路分支,執(zhí)行步驟F ;
[0018]F、對于任一個尋路分支,按照當前方向朝著可移動的網格移動,并計算當前的尋路偏轉角度和旋轉系數;如果尋路偏轉角度越來越大,則試圖向著減小尋路偏轉角度的方向偏轉,如果不能,表示終點不可達,停止該尋路分支;檢查旋轉系數的值,若超出閾值則停止該尋路分支;然后返回步驟E ;
[0019]G、終止另一個尋路分支;
[0020]H、判斷是否到達終點,若是,結束本流程,否則返回步驟A。
[0021]較佳地,步驟E所述判斷依據是下一個尋路節(jié)點坐標比阻擋點離終點近,或者偏轉角度變小,表明已經繞過該阻擋點。
[0022]從以上技術方案可以看出,通過人們現實找位置的方法得到靈感,在系統內部維護了一個尋路偏轉角度和旋轉系數,不斷地前進和矯正玩家的方向,直到到達目標點或者目標點不可達為止。本申請方案提高了遠距離尋路的效率,并且對于短距離尋路和長距離尋路通用,從而簡化了開發(fā)和維護成本。并且提高了玩家體驗。
【附圖說明】
[0023]圖1為現有技術中的A*尋路算法的檢索過程示意圖;
[0024]圖2為本申請實施例提供的尋路的方法流程示意圖;
[0025]圖3為依據本申請實施例方案進行尋路過程中遇到阻擋的示意圖。
【具體實施方式】
[0026]人們在現實世界中尋路時,會利用已知的經驗來更快速地找出到達目的地的路徑,利用參照物來確定是否走對了方向。本申請?zhí)峁┑膶ぢ贩椒7卢F實尋路的上述特點,其原理為:當尋路發(fā)起后,尋路系統就計算玩家當前移動方向和目標的角度,內部記錄一個旋轉系數;尋路系統開始沿著玩家行走的方向,向著目的地尋路,途中發(fā)現可以移動的格子,立刻加入的移動路徑中,不再記錄周圍可能的格子,然后動態(tài)地計算和目標的偏轉角度和旋轉系數,最終到達目標點。所述偏轉角度就是玩家移動方向和當前點到目標點之間的角度;旋轉系數是尋路物體自轉的角度,相當于擰發(fā)條轉的圈數,是用來在復雜地形尋路里優(yōu)化路徑用的參數。
[0027]尋路的地圖數據一般是網格狀的或者是樹狀的葉子節(jié)點,總體歸類為帶有阻擋的網格狀形式,每個網格成為一個節(jié)點。