李 丹 胡廣朋
(江蘇科技大學計算機學院 鎮江212003)
20世紀80年代初,“虛擬現實”的概念提出,即新型傳感器與計算機圖形處理技術相結合的一種創新的人機交互手段,它是綜合應用驅動所涉及的多個學科的高新實用技術[1]。虛擬現實技術以其獨特的沉浸感(immersion)、交互性(interaction)、和構想性(imagination)特征(簡稱3I特征)[2],服務于我們的生活、工作和學習中。
虛擬現實交互強調人與虛擬環境的互動,注重真實性、可觀性、實用性及易操作性。隨著圖像處理技術和虛擬現實技術水平的提升,其應用范圍不斷的擴大與深化。由于二維場景在空間分析方面存在局限性,三維場景不僅能夠解決二維場景缺乏垂直方向信息的問題,還能夠模擬、表達、控制、分析與實體相關的信息。將虛擬現實與三維空間等技術相結合,可以模擬出校園場景,本文是對虛擬校園場景中的人物骨骼綁定、導航網格自動尋路技術、防碰撞檢測及交互式漫游做出闡述。
給人物綁定骨架可以實現動畫驅動,登錄Mix?amo在線3D人物模型制作平臺,找到人物模型入口,選擇角色模型。點擊較為滿意的人物角色即可選中,若是想要更為貼合的人物角色可以采用Up?load Character來上傳角色模型。使用Human綁定骨架,以上下肢、頭部和胸部為主要節點,可以實現人物的動作控制。對人物進行骨骼綁定時有四個注意點:頭頸連接部位,手肘部位,胯部,腳踝部位。
人物動畫的實現建立在人物骨骼綁定的基礎上,通過觀察人物的行為動作方式將提高系統的視覺藝術效果。先將人物模型導入Blender軟件中,從文件中安裝Rigging:Rigify骨骼插件,全選人物后再選擇骨骼,按下Ctrl和P鍵選擇附帶自動權重,在進入骨骼編輯模式后,開啟x軸鏡像實現水平方向的拖動復制,修改骨骼菜單欄顯示為透視模式。判斷重要關節點的大概位置,移動單個骨骼至對應位置,先選中該部位模型,再選擇單個骨骼,按下Ctrl和P鍵綁定為骨骼。此時,進入姿態模式后移動骨骼,身體各部位會隨著骨骼移動,人物骨骼綁定成功。

圖1 角色腳本組件模型
在虛擬系統中,人與物都是相對獨立的。在實現漫游等交互功能時,能夠發現所有物體可以相互穿透,人物可以穿透墻體等物體,為了避免這種在現實生活中“非常規”現象的發生,需要為物體添加碰撞檢測。
碰撞檢測的過程分為兩部分,一部分是是否產生碰撞,另一部分是是否產生碰撞效果。本系統采用正方體包圍盒的方法解決碰撞問題,在需要添加碰撞的建筑下放置一個覆蓋全部建筑的正方體,并將其網格渲染關閉,為移動人物添加剛體碰撞和網格碰撞(可以想象成一棟建筑被圍住了,行人無法進入該建筑)。運行程序發現人物無法穿透墻體,但視景出現了嚴重傾斜。在視察面板下,將人物的X、Y和Z三軸旋轉角度,全部約束后問題得以解決。人物角色可以順利沿著墻體中間的過道行走,完全避免了“穿墻而過”事件的發生。

圖2 碰撞檢測
導航網格起源于21世紀初,一開始沒有合適的尋徑算法,直到A*算法的出現才緩解這一尷尬。A*算法需要用可遍歷的數據結構來表示地圖,在平面上設置多個路徑節點,當場景需求的路徑節點數量過大時,需要散布大量的路徑點來實現豐富的移動效果。相較之下導航網格算法更加便捷高效。導航網格自動尋路算法是游戲引擎中實現物體動態自動尋路的一種技術,三要素是烘焙尋路網格、設置尋路導航組件以及設置目標點。場景中復雜的物體分布關系需要通過靜態烘焙后轉化為帶有識別信息的網格,針對這些帶有識別信息的網格做出一系列的算法實現自動尋路。給角色添加Nav Mesh Agent網格尋路組件并設置目標點,隨后該角色可以自行尋找到目標點的最短路線。
如圖3所示,帶有識別信息的導航網格由多個任意凸邊形構成,多個多邊形的頂點存儲次序為順時順序。黑線包圍的區域表示為會發生碰撞檢測的不可進入的區域(例如墻體、花壇等),灰色包圍的區域表示為可以穿透或者進入的區域,可以將灰色線條看成是校園小徑,灰色區域可以是操場,空地小花園等等。
本系統中的人物模型記為角色P0,P0處于區域A,發出射線記為n0,需要途徑的區域記為B。防碰撞檢測最先判斷P0所在多邊形區域的位置,再從所在區域中找到射線的穿出邊和穿出點,即兩線的交點,通過交點所處位置來判斷得知P0處于位置是否可以穿入,即圖例中穿出邊的另一側的多邊形區域B是否可以進入。圖3中射線n0從P0處發出數條射線(圖中畫出3條情況不一的射線用作說明),三條射線分別到達P點,S點以及G點。射線n0進行尋路檢測發現P點為障礙點即不可穿越點,立馬終止尋路,轉換其他臨近區域;S點及G點均在灰色區域邊線上,經過S點可到達灰色區域內即當前線路可以通過;經過G點只能沿著灰色區域邊線繼續前進不在區域B內部,不符合此時尋路要求。

圖3 網格導航尋路說明
綜上所述:三線中P0S可前進且進入目標區域;P0P不可前進,立即終止進程;P0G可前進但是不符合要求,立即終止進程。人物模型P0若想繼續前進,則繼續利用射線n0在已在區域B中再次尋找穿出邊和穿出點,重復前面的一系列步驟,直到找出符合要求的n0可途徑的所有多邊形、穿出邊以及穿出點為止。
Unity3D中有兩種控制物體移動的方法,第一種是Transform類可以直接控制物體坐標的改變,第二種是Rigidbody類可以使物體在移動的同時,以一定方向發的缸體加速度加速移動,當停止前進時也將以一定加速度減緩移動速度。本文采用了缸體加速度控制人物移動的方法并利用坐標改變控制位置移動。在移動的初始和結束時,人物行走更加真實,在進行方向上的變化時的表現也更佳。

圖4 剛體加速度速度控制流程
虛擬現實技術是現在比較熱門的話題,雖然現在虛擬技術廣泛運用于各個領域,但還缺乏理論研究并且在應用中出現的問題層出不窮。本文是在利用虛擬現實技術搭建虛擬校園中需要運用到的相關軟件、操作技術及出現的問題進行研究,希望能增加系統的靈活性和可利用性,希望能給后來者帶來一點思路。本文中提到的問題均順利解決。