王彩玲 劉瑞香 宋 釗
(西安石油大學(xué)計算機(jī)學(xué)院,陜西 西安 710065)
在網(wǎng)絡(luò)快速發(fā)展的時代,虛擬現(xiàn)實技術(shù)成為了高等教育機(jī)構(gòu)和國內(nèi)外商業(yè)搶占市場和提高競爭力的一個強(qiáng)有力手段。他們通過虛擬現(xiàn)實技術(shù),讓用戶足不出戶就可以了解到他們所需要的東西,而且具有身臨其境地感覺。使用者利用網(wǎng)絡(luò)手段真實感觸到產(chǎn)品、環(huán)境及體驗,對虛擬現(xiàn)實技術(shù)的要求更高更迫切?;陔p方的需求,更加促進(jìn)了web3d技術(shù)的完善和成熟。
所謂虛擬現(xiàn)實是利用電腦模擬產(chǎn)生一個三維空間的虛擬世界,提供使用者關(guān)于視覺、聽覺、觸覺等感官的模擬,讓使用者如同身歷其境一般,可以及時、沒有限制地觀察三度空間內(nèi)的事物。虛擬現(xiàn)實技術(shù)已經(jīng)廣泛應(yīng)用在醫(yī)療[1]、教育[2-3]、電子商務(wù)[4-5]等眾多領(lǐng)域。其中,Web3D技術(shù)是當(dāng)前虛擬現(xiàn)實 的主流技術(shù)。Web3D又稱網(wǎng)絡(luò)三維,是一種在虛擬現(xiàn)實技術(shù)的基礎(chǔ)上,將現(xiàn)實世界中有形的物品通過互聯(lián)網(wǎng)進(jìn)行虛擬的三維立體展示并可互動瀏覽操作的一種虛擬現(xiàn)實技術(shù)。相比起目前網(wǎng)上主流的以圖片、FLASH、動畫的展示方式來說,Web3D技術(shù)讓用戶有了瀏覽的自主感,可以以自己的角度去觀察,還有許多虛擬特效和互動操作。Unity3d是由Unity Technologies開發(fā)的一個可以輕松創(chuàng)建諸如三維視頻游戲、建筑可視化、實時三維動畫等類型互動內(nèi)容的多平臺的綜合型游戲開發(fā)工具,是一個全面整合的專業(yè)游戲引擎。Unity3D最大的優(yōu)勢是性價比高,并且可以發(fā)布成網(wǎng)頁瀏覽的方式,用戶不用下載客戶端,就可以直接體驗.Unity3D支持各種腳本語言包括Javascript、C#兼容各種操作系統(tǒng),真正的實現(xiàn)了跨平臺。
本論文從創(chuàng)建數(shù)字校園需求分析入手,通過前期測量,三維建模完成各個數(shù)字模塊,最終完成一個數(shù)字化校園。首先應(yīng)該通過CAD平面圖[6-7]和實地拍攝圖片[8-10]構(gòu)造模型主題,經(jīng)過測量和分析得到虛擬場景內(nèi)各個模型的尺寸,利用3dmax建模軟件對各個建筑體進(jìn)行建模,然后進(jìn)行場景合并。運用3dmax插件導(dǎo)出為FBX格式,將導(dǎo)出文件導(dǎo)入Unity3D中,在 Unity3D中添加燈光設(shè)置、圖紙設(shè)置、及第一人稱角色來完成人機(jī)交互。利用Unity3d的跨平臺設(shè)置生成html格式,將html格式文檔發(fā)布在互聯(lián)網(wǎng)中,可實現(xiàn)網(wǎng)絡(luò)環(huán)境下虛擬校園的漫游。
基于西安石油大學(xué)新校區(qū)的虛擬校園漫游開發(fā)流程如圖1所示。
首先,獲取校園地理相關(guān)信息數(shù)據(jù)。在這里首先獲取校園AutoCAD平面圖和相關(guān)建筑物設(shè)計圖紙。對建筑物分別從四個正面及八個方向拍照,獲取外部輪廓及細(xì)節(jié)圖;對草地、水域及道路等采用實景拍照獲取相關(guān)信息。
其次,將所采集到的數(shù)據(jù)及圖片信息利用3Dmax建模軟件,制作三維數(shù)字模型,對粗糙模型進(jìn)行加工渲染,得到效果逼真的三維模型。
再次,將三維模型利用3Dmax插件導(dǎo)出,由于Unity3D軟件要求輸入模型為FBX類型,因此,按照Unity3D軟件平臺要求輸出指定模型,進(jìn)行后續(xù)的開發(fā)。
最后,利用Unity3D軟件,使用Javascript和C#語言,添加燈光照射和人物角色,對人物添加碰撞檢測,實現(xiàn)基于第一人稱的無失真漫游。
圖1 虛擬校園開發(fā)流程圖
1.2.1 漫游功能的實現(xiàn)
漫游功能是實現(xiàn)數(shù)字化校園的關(guān)鍵,交互是實現(xiàn)漫游的方式.基本的人機(jī)交互方式,例如人物行走,需要采用鼠標(biāo)點擊前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、跳躍等功能,在Unity3D中可以以WSAD實現(xiàn),代碼在FPScontral.js腳本文件中,其關(guān)鍵代碼如下:
var Speed=5;
var RotateSpeed=20;
function Update(){
if(Input.GetKey(KeyCode.W)){transform.Translate(Vector3.forward*Time.deltaTime*Speed);
if(Input.GetKey(KeyCode.S)){transform.Translate(Vector3.forward*Time.deltaTime*-Speed);
if(Input.GetKey(KeyCode.A)){transform.Translate(Vector3.up*Time.deltaTime*RotateSpeed);
if(Input.GetKey(KeyCode.D)){transform.Translate(Vector3.up*Time.deltaTime*-RotateSpeed);}
}
另一種重要的交互功能是GUI界面設(shè)計,在虛擬校園中,需要場景的跳轉(zhuǎn),如圖2所示,根據(jù)選擇進(jìn)入場景,實現(xiàn)相應(yīng)的漫游模式。核心代碼如下:
function OnGUI(){
GUI.Label(Rect(280,150,400,200),str);
if(GUI.Button(Rect(250,320,100,25),"進(jìn)入校園"))
{
Application.LoadLevel("xishiyou02");
}
if(GUI.Button(Rect(600,320,100,25),"退出系統(tǒng)")){
Application.Quit();
}
}
圖2 場景切換界面
1.2.2 碰撞檢測設(shè)計
碰撞檢測[11-12]是模擬現(xiàn)實環(huán)境中的人物及物體在遇到障礙物時發(fā)生的本能反應(yīng),例如,當(dāng)角色遇到墻壁,如果沒有設(shè)計碰撞檢測,則角色會出現(xiàn)穿墻而過的失真現(xiàn)象,在現(xiàn)實中,應(yīng)該是當(dāng)發(fā)現(xiàn)墻壁與角色存在一定距離時,則需要停止前進(jìn)。在這種情況下,設(shè)計人員需要添加碰撞檢測函數(shù)。碰撞檢測實現(xiàn)及性能是整個數(shù)字校園漫游的性能指標(biāo)之一。Unity3d開發(fā)平臺默認(rèn)給每個對象(GameObject)添加一個碰撞組件(ColliderComponent),一些背景對象則可以取消該組件。在unity3d中,能檢測碰撞發(fā)生的方式有兩種,一種是利用碰撞器,另一種則是利用觸發(fā)器。這兩種方法應(yīng)用都非常廣泛。
在Unity3d中,主要有以下接口函數(shù)來處理這兩種碰撞檢測:
觸發(fā)信息檢測:
1)MonoBehaviour.OnTriggerEnter(Collider other)當(dāng)進(jìn)入觸發(fā)器
2)MonoBehaviour.OnTriggerExit(Collider other)當(dāng)退出觸發(fā)器
3)MonoBehaviour.OnTriggerStay(Collider other)當(dāng)逗留觸發(fā)器
碰撞信息檢測:
1)MonoBehaviour.OnCollisionEnter(Collision collisionInfo)當(dāng)進(jìn)入碰撞器
2)MonoBehaviour.OnCollisionExit(Collision collisionInfo)當(dāng)退出碰撞器
3)MonoBehaviour.OnCollisionStay(Collision collisionInfo) 當(dāng)逗留碰撞器
虛擬校園提供三維瀏覽功能有利于用戶通過網(wǎng)絡(luò)直觀地獲取信息,可以自主控制前進(jìn)方向。構(gòu)建這樣的虛擬校園系統(tǒng),在開發(fā)過程中需要解決的問題如下:
1)可以實現(xiàn)網(wǎng)絡(luò)瀏覽,文件不能過大,要保證適合大多數(shù)計算機(jī)可以訪問;
2)以一定的比例真實縮小實體校園,所有重要的場景要盡量真實還原;
3)提供比較人性化的GUI界面,比如“幫助導(dǎo)航”用來給用戶提示信息;
4)設(shè)置與學(xué)校官網(wǎng)鏈接的頁面導(dǎo)航;
5)配備背景音樂,并可以由用戶自行設(shè)置關(guān)閉或打開;
6)設(shè)置導(dǎo)航圖方便用戶了解校園的整體;
7)通過服務(wù)器多用戶交互。
2.2.1 數(shù)據(jù)收集
通過實地考察量,測量,拍照等方式進(jìn)行數(shù)據(jù)信息的收集。
2.2.2 模型構(gòu)建
學(xué)校模型通常為學(xué)校大門,教學(xué)樓,路燈,花池,樹木,草地等元素構(gòu)成。根據(jù)收集的數(shù)據(jù)通過3dmax對基礎(chǔ)模型進(jìn)行平面建模,在模型構(gòu)建過程中添加貼圖,材質(zhì),燈光,效果等構(gòu)建出逼真的模型。在模型的構(gòu)建中需要注意的是多邊形模型的優(yōu)化.一個虛擬校園系統(tǒng)還是比較大的,對模型充分的優(yōu)化可以減小最后網(wǎng)絡(luò)文件的大小,利于用戶瀏覽。
2.2.3 人機(jī)交互
人機(jī)交互技術(shù)是通過計算機(jī)輸入、輸出設(shè)備,以有效的方式實現(xiàn)人與計算機(jī)對話的技術(shù).在本系統(tǒng)中主要的人機(jī)交互包括GUI界面設(shè)計和漫游設(shè)計.。用戶通過網(wǎng)頁瀏覽器打開該系統(tǒng),在系統(tǒng)的介紹下進(jìn)行校園漫游,用戶以第一人稱視角進(jìn)行瀏覽,增強(qiáng)體驗感,通過控制鍵盤wasd控制視角的移動同時鼠標(biāo)控制視角的旋轉(zhuǎn)。音樂可以給用戶帶來試聽上的快感,結(jié)合視角,使其有種身臨其境的感覺,同時用戶可以自己開關(guān)音樂。系統(tǒng)添加碰撞檢測系統(tǒng)使得用戶不會出現(xiàn)穿墻現(xiàn)象,完善虛擬環(huán)境的真實性。
圖3 系統(tǒng)運行截圖1(地點為西安石油大學(xué)東方廣場)
圖4 系統(tǒng)運行截圖2(地點為西安石油大學(xué)實驗樓)
圖5 系統(tǒng)運行截圖3(地點為西安石油大學(xué)運動場一角)
任何系統(tǒng)都需要進(jìn)行黑盒子測試以發(fā)現(xiàn)系統(tǒng)存在的問題和漏洞。本系統(tǒng)也進(jìn)行了相應(yīng)的測試。在測試中發(fā)現(xiàn),基于網(wǎng)絡(luò)環(huán)境下,系統(tǒng)存在占用網(wǎng)絡(luò)流量大,運行緩慢的現(xiàn)象。分析原因是因為測試電腦配置較低及網(wǎng)絡(luò)帶寬限制。這就要求我們從用戶角度出發(fā),在保證真實度的情況下盡量減少模型的數(shù)量,大部分建筑需要通過平面建模來優(yōu)化模型的復(fù)雜度,在建模過程中盡量減少模型頂點和分段數(shù),在unity3d處理過程中,盡量使用靜態(tài)燈光,動態(tài)實時燈光相比靜態(tài)燈光,非常耗費資源。所以除了能動的角色和物體靜態(tài)的地形和建筑。盡量減少視角范圍和距離,減少不必要的運行消耗。
具體實施方案有:
1)模型設(shè)計方向:
a)使用層距離來控制模型的顯示距離;
b)陰影其實包含兩方面陰暗和影子,建議使用實時影子時把陰暗效果烘焙出來,不要使用燈光來調(diào)節(jié)光線陰暗;
c)少用像素?zé)艉褪褂孟袼責(zé)舻腟hader;
d)如果硬陰影可以解決問題就不要用軟陰影,并且使用不影響效果的低分辨率陰影;
e)實時陰影很耗性能,盡量減小產(chǎn)生陰影的距離;
f)允許的話在大場景中使用線性霧,這樣可以使遠(yuǎn)距離對象或陰影不易察覺,因此可以通過減小相機(jī)和陰影距離來提高性能。
2)程序優(yōu)化方向:
a)刪除腳本中為空或不需要的默認(rèn)方法;
b)只在一個腳本中使用OnGUI方法;
c)避免在OnGUI中對變量、方法進(jìn)行更新、賦值,輸出變量建議在Update函數(shù)中調(diào)用;
d)同一腳本中頻繁使用的變量建議聲明其為全局變量,腳本之間頻繁調(diào)用的變量或方法聲明為全局靜態(tài)變量或方法;
e)不去頻繁獲取組件,將其聲明為全局變量;
f)需要隱藏/顯示或?qū)嵗瘉砘厍袚Q的對象,不使用SetActive Recursively或active,使用將對象遠(yuǎn)遠(yuǎn)移出相機(jī)范圍和移回原位的做法;
g)盡量少用模運算和除法運算,比如a/5f,需改寫成a*0.2f。
本文以西安石油大學(xué)新校區(qū)為例,基于Unity3d平臺開發(fā)的系統(tǒng)運行效率高、維護(hù)簡單,運用3dmax建模軟件進(jìn)行對場景建模,通過Javascript和C#語言實現(xiàn)人機(jī)交互,最后結(jié)合html進(jìn)行融合導(dǎo)出,從而完成虛擬校園的開發(fā)。在論文中重點介紹了系統(tǒng)設(shè)計過程中的關(guān)鍵技術(shù)以及對系統(tǒng)從模型設(shè)計及程序設(shè)計兩方面的優(yōu)化。該系統(tǒng)經(jīng)過測試,基本實現(xiàn)學(xué)生用戶的使用需求。
[1]范立冬,李曙光,張治剛.虛擬現(xiàn)實技術(shù)在醫(yī)學(xué)訓(xùn)練中的應(yīng)用[J].創(chuàng)傷外科雜志,2008,12,9(6).
[2]吳燕玲.基于Wed的玩味動畫技術(shù)及其在教學(xué)中的應(yīng)用[J].中山大學(xué)學(xué)報:自然科學(xué)版,2002(6):53-56.
[3]詹勝利.Web3D技術(shù)在網(wǎng)絡(luò)教學(xué)中的應(yīng)用[J].網(wǎng)絡(luò)技術(shù)與網(wǎng)絡(luò)教學(xué),2006,1:15-17.
[4]來翔.面向電子商務(wù)的虛擬商品模型研究[D].浙江大學(xué),2003.
[5]沈璞.虛擬現(xiàn)實技術(shù)在現(xiàn)代工業(yè)設(shè)計中的應(yīng)用[J].制造業(yè)自動化,2004,6:76-78.
[6][]Okabe M,Igarashi T.3D modeling of trees from freehand sketches[C]//International Conference on Computer Graphics and Interactive Techniques.ACM SIGGRAPH 2003 Sketches&Applications.New York,USA:ACM,2003:1-1.
[7]Okabe M,Owada S,Igarashi T.Interactive design of botanical trees using freehand sketches and example-based editing [J].Computer Graphics Forum,Eurographics(S0167-7055),2005,24(3):487-496.
[8]Livny Y,Yan F L,Olson M,et al.Automatic Reconstruction of Tree Skeletal Structures from Point Clouds [J].ACM Transactions on Graphics (S0730-0301),2010,29(6):151-1:151-8.
[9][]Tan P,Fang T,Xiao J X,et al.Single Image Tree Modeling [J].ACM Transactions on Graphics(S0730-0301),2008,27(5):108-1:108-8.
[10]Neubert B,Franken T,Deussen O.Approximate image-based tree-modeling using particle flows[J].ACM Transactions on Graphics(S0730-0301),2007,26(3):88-1:88-8.
[11]甘建紅,彭強(qiáng),戴培東,等.基于 OBB層次結(jié)構(gòu)碰撞檢測的改進(jìn)算法[J].系統(tǒng)仿真學(xué)報,2011,23(1):2619-2173.
[12]Gayle R,Manocha D.Navigating virtual agents in online virtual worlds[C]//Proceedings of the Web3D 2008.New York,NY,USA:ACM,2008:53-56.