閆興亞 魏夢婕 王馨梅
(西安郵電大學計算機學院 西安 710121)
虛擬現實[1](Virtual Reality,VR)在教育領域的應用顛覆了傳統的教學方式,通過虛擬化教學環境,學習者可以通過一定的硬件設備與虛擬世界進行互動實現知識的學習[2],解決傳統課堂中互動性、情境性、沉浸性不強的問題,在教學的實踐中具有廣闊的應用前景。2003年美國林登實驗室推出的Second Life(SL)項目和2009年澳大利亞和新西蘭合作成立的虛擬世界工作組等是典型代表。其中,SL項目提出要探索個體在虛擬世界獲得教育與成長的可能,學生可以采用一個“化身”投身到虛擬世界的學習中去,其具體執行過程與角色扮演游戲有些類似[3]。2011年以來,每年都會舉行關于虛擬現實技術的專業國際會議IEEE VR(IEEE Virtu?al Reality Conference),有效促進了領域內學者之間的交流互動。2017年5月10日,IEEE(電氣和電子工程師協會)與IEEE標準協會(IEEE Standards As?socaition)宣布了針對虛擬現實和增強現實的8個IEEE標準項目,其中包括沉浸式用戶界面、真實世界的虛擬對象映射、虛擬對象與現實世界之間的互操作性等多個領域。同年,虛擬現實作為情景化學習的關鍵技術成為《2017新媒體聯盟中國高等教育技術展望:地平線項目區域報告》十二項教育技術的重要發展之一[4]。
虛擬現實學習能夠提高學生對知識的掌控力。Cai,Wang和Chiang設計了幾個面向初中生的關于化學物質結構認識的虛擬融入操作實驗,實驗中,學生可以采用自然交互方式對虛擬出來的微觀世界中的分子、原子進行操作、組合和創作[5]。虛擬現實學習環境還被應用在具體操作技能的培訓課程中。Y Eugenia、Νikiteas Nikolaos、P Despina等通過在腹腔鏡手術中使用虛擬現實模擬器構建訓練環境,能夠訓練基礎外科手術技能,提供改進腹腔鏡手術性能的替代手段[6]。虛擬現實學習環境可以模擬危險性較強的現實環境,在避免傷害的情況下完成教學任務。Buono、Cortese和Lionett等設計的虛擬消防逃生系統,實驗參與者對于滅火逃生相關概念的掌握以及對滅火器的使用、成功逃脫至集合點的能力均較佳。
基于此,本文提出基于Unity 3D的絲綢之路虛擬學習系統。Unity3D是一個對編輯器、地形編輯、著色器、腳本等特性全面整合的專業游戲引擎[7],可發布系統至Windows、Mac和Android等平臺。絲綢之路虛擬學習系統以Unity3D為開發平臺,以3Dmax,Maya,Photoshop等軟件為輔助工具,搭建絲綢之路三維教學場景。系統搭建過程中實現了包括LOD、碰撞檢測、自主尋路、基于NGUI的UI制作等技術,采用C#語言實現各模塊之間的功能交互,創建了一個集專業性,沉浸感,交互性,趣味性等特點的絲綢之路虛擬學習系統。與傳統學習方式不同,學習者通過與虛擬環境中物體進行動態交互,實現對知識的掌握與理解。實踐結果表明,基于Unity3D的絲綢之路虛擬學習系統對于提高學習者的積極性有良好的作用。
基于軟件工程的思想,結合絲綢之路教學理念,絲綢之路虛擬教學系統的開發主要分為兩個階段:第一階段是系統前期的分析策劃與素材的收集、整理與制作;第二階段是在Unity3D中進行場景的搭建以及和模塊之間交互功能的實現。其流程圖如圖1所示。首先,根據系統的實際需求確定各模塊的功能;其次,搜集有關絲綢之路的相關資料信息,確保系統中的知識教學與事實相符。搜集的資料包括,絲綢之路的地圖,以及絲綢之路主要經過城市的人文和地理信息等等;再次,利用3Dmax或Maya等建模軟件進行三維建模,相關場景平面圖設計,將制作好的模型文件以FBX格式導出。最后將三維模型導入Unity工程中進行系統的第二階段開發。第二階段的開發包括兩方面的內容:第一,場景的搭建,其中主要包括絲綢之路主要涉及城市的分布、周圍環境、場景烘焙、碰撞檢測等。第二,實現各模塊功能的交互,這里采用C#語言進行模塊功能的開發,完成絲綢之路虛擬學習系統。

圖1 系統搭建流程圖
LOD[8](level of detail)細節層次模型,是一種保證繪制實時性的經典算法,廣泛應用在場景可視化與視野仿真領域中。基本思想是:為每一個原始多面體模型生成具有不同復雜度的多個版本[9],在場景渲染過程中,根據物體離攝像機的距離來采用適當的模型來表達物體。如果模型遠離攝像機,則選擇較粗糙的LOD模型繪制,如果模型離攝像機較近則選擇精細的LOD模型進行繪制。本文采用的是基于邊折疊的LOD算法,具體方法如圖2所示。

圖2 邊折疊法
邊折疊算法的步驟可以表示為
1)刪除所有同時包含頂點1和頂點2的三角形;
2)刪除與頂點1相關的三角形,用頂點2來代替頂點1;
3)刪除頂點1;
完成上述步驟,便可以得到簡化后的圖1。重復上述步驟最終可以得到圖4。一般的,每此簡化會去除一個頂點,兩個面和三條邊。
基于邊折疊的LOD算法可以通過減少地形繪制所需的三角形個數生成連續的LOD模型,并且保留了模型的幾何信息以及紋理、拓撲等重要特征信息。該算法是根據攝像機離模型的距離來選擇適當的模型,在不影響畫面視覺效果的前提下,通過減少場景的幾何復雜度,提高圖像渲染的速度,從而解決了系統運行流暢度的問題[10]。
虛擬環境中碰撞檢測的目標是如何在實時交互的需求下完成對復雜對象的碰撞檢測[11]。例如:當移動物體遇到障礙物,如果沒有設計碰撞檢測,則移動物會穿過障礙物,從而產生失真現象[12]。一般的碰撞檢測是通過檢測兩個實體所占的幾何空間是否相交來判斷是否發生了碰撞,無法確定碰撞的具體位置,本文采用的射線碰撞檢測是檢測虛擬世界中發出的一條射線與一個平面是否相交的問題[13],因此準確的碰撞需要的是精確計算出射線與物體表面的交點,即碰撞點位置。
假設射線公式是由式(1)所示,且空間中存在一個平面,指定p1為該面上的一點,以矢量N表示為該面的法矢量,以這兩個矢量既能確定出這個平面,由式(2)表示出任意平面公式為

式中,P、P0、a均為三維矢量,其中P0表示為該射線的起點,P表示為射線上任意一點,a表示該射線的方向,t屬于0,正無窮。當t=0時,P為七點P0,t為其他數值時,P則為射線上某一點,此時t則表示為該起點與該點之間的距離。

式中d為坐標系原點與平面距離。
假設射線與平面相較于一點P,則P必定為式(1)與式(2)的公共解,反之由以上二式解方程組得:

以式(3)帶入式(1)即解出射線與平面的碰撞點位置。
Unity自從3.5版本之后增加了NavMesh尋路功能,但是由于不是自帶的功能,所以需要設定網格和烘焙過程[14]。用戶首先編輯好地形場景,然后將場景中的靜態物體設置為Navigation Static物體,之后點擊Bake進行導航烘焙,Unity將根據已經烘焙的物體在游戲三維坐標中Y軸的正向進行網格節點計算,從而形成一張在游戲場景中的淡藍色網格節點導航地圖。地圖形成后,給需要被導航的游戲對象加上NavMeshAgent組件,這樣游戲對象便可繞開障礙物并沿著最短路徑到達目的點[15]。其主要代碼如下所示:
Private NavMeshAgent agent;
Viod Star()
{
//獲取組件
agent=GetComponent<NavMeshAent>()
}
void Update()
{
if(Input.GetMouseButtonDown(0))
{
//攝像機到點位置的射線
Ray ray=Camrea.main.ScreenPointToRay(Input.mousePosition);
RaycastHit rayhit;
if(Physics.Raycast(ray,out rayhit))
{
//判斷點擊的是否是地形
if(!rayhit.collider.name.Equals(“Terrain”))
{
return;
}
//點擊位置坐標
Vector3 point=rayhit.point;
//轉向
transform.LookAt(new Vector3(point.x,transform.posi?tion.y ,point.z));
//設置尋路的目標點
Agent.SetDestination(point);
}
}
}
用戶界面(User Interface,UI)是任何系統都必不可少的一部分,好的UI設計應該能貫穿整個產品開發流程,而非單純的圖形界面設計,并且可以將系統功能邏輯分散化,不用關注跳轉和顯示關閉等細節問題,更好地展示系統本身的功能效果[16]。絲綢之路虛擬學習系統的界面設計采用的NGUI提供的界面工具來完成UI界面的制作。NGUI(Next-Gen UI)是使用C#語言編寫的一個Unity插件。該插件嚴格遵循“KISS 原則”[17],即 Keep It Simple,Stupid,指的是UI設計應當注重簡約。它將各個功能都封裝成了腳本,并且將常用的一些組件做成了預設物,它可以在編輯狀態下來任意調整位置及大小,還可以添加一些UI特效。在本系統中,利用NGUI插件制作了系統地圖導航模型,系統菜單欄、按鈕、工具箱、答題面板等界面。同時NGUI的Anchor能夠使各個UI元素具有屏幕自適應功能,使系統能夠適應不同分辨率的屏幕。
基于Unity 3D的絲綢之路虛擬學習系統包括總路線圖、城市漫游、城市概況認知、在線考評、資源庫五個模塊。系統效果及部分功能模塊截圖如圖3~5所示。

圖3 總路線圖

圖4 城市漫游

圖5 城市概況
其中,總路線圖是古絲綢之路所經城市的一個三維展示,用戶可以看到古絲綢之路的全貌,并且可以點擊地圖上分布的城市名進行城市漫游。城市漫游是用戶對城市進行第一視角的漫游,通過完成系統設置在建筑物中的任務,獲得相應的道具,打開通關盒子才能進行下一個城市的漫游。該模塊采用任務激勵,使得系統具有一定的娛樂性,提高用戶的學習興趣。城市概況認知是絲綢之路主要城市的簡介,在系統的右下角配以語音、文字解說,該模塊使用戶可以快速地了解城市的人文地理信息。在線考評是進入系統后的后臺考評系統,是對用戶關于絲綢之路的理論知識進行一個全面的測評。資源庫是是對絲綢之路主要城市風土、特產以及城市主要建筑物的一個視頻介紹。
本文對基于Unity 3D的絲綢之路虛擬學習系統進行了詳細的研究,文中重點討論了虛擬學習系統的設計以及涉及到的關鍵技術,系統中引進了任務激勵游戲機制,在發揮虛擬現實技術優勢的同時,實現了學習者對所學知識積極主動的探索。虛擬現實技術是信息技術進步的重要成果,信息技術只有被接受與持續使用的時候,其價值才會真正發揮出來。未來虛擬學習必將成為教育發展的時代趨勢,并將不斷出現在多個領域。本系統的開發將會為其他領域的虛擬培訓以及虛擬現實項目的開發提供一定的參考價值,同時具備推廣應用價值。