尹大偉 張熙若 李歡歡 馬恒銳 孟祥銳
摘 ?要:為擴(kuò)大招生,學(xué)校需要更好展示自身風(fēng)采的平臺(tái),讓學(xué)生更好地了解校園內(nèi)部環(huán)境,而傳統(tǒng)的虛擬校園漫游系統(tǒng),主要是利用2D動(dòng)畫、照片、圖片和文字向用戶展示校園環(huán)境,系統(tǒng)缺乏互動(dòng)性、沉浸感和景深效果,無法使用戶產(chǎn)生身臨其境的感覺。針對(duì)以上問題,本文采用3D虛擬現(xiàn)實(shí)技術(shù),設(shè)計(jì)、開發(fā)了一個(gè)以用戶為中心,富娛樂性、交互性和沉浸感的Web訪問的交互式漫游系統(tǒng)。
關(guān)鍵詞:虛擬現(xiàn)實(shí);虛擬校園;Unity3D;游戲引擎
中圖分類號(hào):TP391.9 ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
Abstract:In order to attract more applicants,schools need to better display their own styles so that students can better understand the campus internal environment.Traditional virtual campus roaming system presents the environment to users through 2D animation,360° environment photos,pictures and texts,which lacks interactivity,immersion perception and depth of field and can't generate immersive feelings.Aiming at the above problems,this paper uses 3D virtual reality technologies,designs and develops a user-centered virtual campus roaming system with entertainment,interactivity and immersion.Users can visit freely or automatically to the campus,click the given interactive objects and gain the information they are interested in.
Keywords:virtual reality;virtual campus;Unity3D;game engine
1 ? 引言(Introduction)
虛擬現(xiàn)實(shí)(Virtual Reality),簡(jiǎn)稱VR技術(shù),是利用計(jì)算機(jī)產(chǎn)生一個(gè)三維的虛擬世界,為用戶提供視、聽、觸覺等感官的模擬,使用戶如同身臨其境一般可以即時(shí)且沒有限制的觀察三維空間中的事物[1]。虛擬現(xiàn)實(shí)系統(tǒng)是聯(lián)系虛擬世界、真實(shí)世界和用戶之間的紐帶,當(dāng)用戶在真實(shí)世界的狀態(tài)發(fā)生改變,通過虛擬現(xiàn)實(shí)系統(tǒng),將其傳送到虛擬世界中,虛擬世界就會(huì)與用戶之間產(chǎn)生互動(dòng),如同真實(shí)世界一般。
虛擬校園漫游系統(tǒng)是虛擬現(xiàn)實(shí)技術(shù)在數(shù)字化校園中的具體應(yīng)用,是校園環(huán)境的模擬和再現(xiàn)[2]。首先利用三維建模工具3DMax,創(chuàng)建教學(xué)大樓、圖書館、食堂、宿舍樓、體育場(chǎng)等主要建筑物的3D模型;接下來利用Unity3D引擎和交互腳本,使用戶可以做出與現(xiàn)實(shí)世界相同的動(dòng)作,體現(xiàn)了系統(tǒng)的交互性和真實(shí)性。該系統(tǒng)將成為了解學(xué)校的一個(gè)窗口,對(duì)于展示學(xué)校整體形象、提高生源質(zhì)量和為在校新生導(dǎo)航將起到重要作用[3]。在其基礎(chǔ)上,還可以建立虛擬大學(xué),提供相應(yīng)的虛擬課堂、在線答疑、虛擬實(shí)驗(yàn)等服務(wù)。
Unity3D是一個(gè)能在多平臺(tái)輸出3D游戲開發(fā)工具和游戲引擎套件,其中包括了圖形、音頻、物理和網(wǎng)絡(luò)等諸多功能模塊,并提供了一個(gè)整合以上功能的、強(qiáng)大的圖形化編輯器。其編輯器運(yùn)行在Windows和Mac OS X下,可發(fā)布游戲至Windows、Mac、Wii、iPhone、WebGL(需要HTML5)、Windows phone 8和Android平臺(tái)[4]。Unity3D被廣泛應(yīng)用于虛擬場(chǎng)景的模擬(博物館、購物中心等)、駕駛模擬(飛機(jī)、輪船、汽車等)、游戲娛樂軟件、醫(yī)療、教育等諸多領(lǐng)域。
2 ?系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)(Design and implementation of the system)
2.1 ? 系統(tǒng)的開發(fā)流程
虛擬校園漫游系統(tǒng)的開發(fā)遵循軟件開發(fā)的基本流程,包括分析、設(shè)計(jì)、開發(fā)、測(cè)試、修改,重復(fù)上述步驟逐步實(shí)現(xiàn)系統(tǒng)所規(guī)劃的功能[5]。其開發(fā)流程大致分為九個(gè)步驟:校園環(huán)境測(cè)量、繪制校園草圖、創(chuàng)建主要建筑物模型、收集素材、為模型添加紋理和材質(zhì)、將模型導(dǎo)入U(xiǎn)nity3D引擎、錄制視頻和音頻文件、編輯互動(dòng)腳本、生成虛擬校園。具體的開發(fā)流程如圖1所示。
首先測(cè)量真實(shí)的校園環(huán)境,并按等比例繪制校園環(huán)境的草圖。然后利用三維建模工具3DMax,創(chuàng)建地形、主要建筑物和環(huán)境模型,并盡量保證與真實(shí)環(huán)境的比例相同。接下來根據(jù)環(huán)境的特點(diǎn),為三維模型貼上逼真的素材,構(gòu)建完整的校園場(chǎng)景。最后將場(chǎng)景導(dǎo)入U(xiǎn)nity3D引擎,編輯互動(dòng)腳本,將靜態(tài)場(chǎng)景連接到Unity3D引擎,實(shí)現(xiàn)角色和場(chǎng)景間的互動(dòng)。
2.2 ? 系統(tǒng)的設(shè)計(jì)目標(biāo)
虛擬校園要為用戶提供盡可能真實(shí)的校園模擬環(huán)境,并實(shí)現(xiàn)角色與場(chǎng)景間的互動(dòng),其具體設(shè)計(jì)目標(biāo)如下:
(1)系統(tǒng)具有友善的用戶界面,便于用戶通過瀏覽器訪問。
(2)構(gòu)建校園主要建筑物高精度的全景模型。用戶可以通過鼠標(biāo)來放大、縮小和旋轉(zhuǎn)建筑模型,并從任意角度觀察。
(3)系統(tǒng)支持兩種游覽方式:自由游覽和自動(dòng)游覽。自由游覽是指用戶以第一人稱視角,通過鍵盤和鼠標(biāo)控制角色在虛擬校園中隨意參觀、游覽。自動(dòng)游覽是指用戶按事先設(shè)定好的人稱視角,沿固定線路參觀、游覽校園。
(4)媒體展示。虛擬校園中可以嵌入Flash、視頻、音頻、文本等多媒體信息,當(dāng)用戶到達(dá)交互區(qū)域或通過鼠標(biāo)點(diǎn)擊交互對(duì)象,能夠在彈出窗口中播放相關(guān)的多媒體信息。
(5)快速地理信息查詢。該功能可以查詢校園中主要建筑物的位置信息,并可即時(shí)的將用戶角色移動(dòng)到該建筑物附近。
2.3 ? 系統(tǒng)的實(shí)現(xiàn)
依據(jù)上述的開發(fā)流程,采用3DMax為場(chǎng)景建模工具,Unity3D為系統(tǒng)開發(fā)平臺(tái),設(shè)計(jì)開發(fā)了交互式的虛擬校園漫游系統(tǒng)。用戶可以通過瀏覽器訪問虛擬校園,體驗(yàn)逼真的校園環(huán)境,并可通過導(dǎo)航菜單選擇自由游覽、自動(dòng)游覽或地圖導(dǎo)航。在漫游過程中,用戶可以通過鍵盤控制角色的運(yùn)動(dòng),使用鼠標(biāo)點(diǎn)擊建筑物可以了解相關(guān)的環(huán)境信息。系統(tǒng)的運(yùn)行效果如圖2和圖3所示。
3 ?系統(tǒng)開發(fā)中的關(guān)鍵技術(shù)(Key technologies in the system development)
3.1 ? 模型優(yōu)化
模型是虛擬校園的基礎(chǔ),模型的精細(xì)程度會(huì)直接影響到系統(tǒng)的仿真效果,但過多的復(fù)雜模型同樣會(huì)增加系統(tǒng)的負(fù)擔(dān),并對(duì)系統(tǒng)的交互性和實(shí)時(shí)性產(chǎn)生不良影響。為保證仿真效果和系統(tǒng)的運(yùn)行性能,我們?cè)趧?chuàng)建模型時(shí)盡可能地使用標(biāo)準(zhǔn)幾何體;建筑物表面的細(xì)節(jié)、草坪和花卉采用紋理貼圖;樹木和高大的植物采用廣告牌技術(shù);在模型的構(gòu)建中還考慮到對(duì)模型的優(yōu)化,通過采用刪除不可見面、減少材質(zhì)數(shù)量、壓縮貼圖等優(yōu)化方法,簡(jiǎn)化了模型,減少了模型的大小[5]。優(yōu)化前后效果圖如圖4和圖5所示。
3.2 ? 碰撞檢測(cè)技術(shù)
碰撞檢測(cè)技術(shù)是三維場(chǎng)景中實(shí)現(xiàn)交互的重要機(jī)制。Unity3D引擎的碰撞檢測(cè)機(jī)制分為兩類:觸發(fā)和碰撞[6]。采用觸發(fā)方式,當(dāng)碰撞發(fā)生時(shí)不會(huì)產(chǎn)生任何物理現(xiàn)象,該機(jī)制用于處理沒有產(chǎn)生任何物理現(xiàn)象的碰撞。采用碰撞方式,當(dāng)碰撞發(fā)生時(shí)會(huì)產(chǎn)生相應(yīng)的物理現(xiàn)象,例如改變物體的位置、爆炸等等。漫游過程中,使用觸發(fā)器實(shí)現(xiàn)門的自動(dòng)開關(guān),使用碰撞器處理角色、樹木和建筑物之間的碰撞。
3.3 ? 虛擬交互
Unity3D引擎中,虛擬交互的核心是編輯實(shí)現(xiàn)交互功能的腳本,通過將交互腳本賦予靜態(tài)的三維模型,賦予其與用戶交互的能力。系統(tǒng)中的虛擬交互主要包括自由游覽、自動(dòng)游覽和信息交互。
3.3.1 ? 自由游覽
自由游覽是指用戶以第一人稱視角參觀、游覽校園。游覽過程中用戶通過W、S、A、D鍵控制角色的前進(jìn)、后退、左、右移動(dòng),使用鼠標(biāo)改變角色的觀察視角[7]。其部分核心代碼如下所示:
if(Input.GetKey(KeyCode.W)){
z+=m_Speed*Time.deltaTime;
}
if(Input.GetKey(KeyCode.S)){
z-=m_Speed*Time.deltaTime;
}
if(Input.GetKey(KeyCode.A)){
x-=m_Speed*Time.deltaTime;
}
if(Input.GetKey(KeyCode.D)){
x+=m_Speed*Time.deltaTime;
}
transform.Translate(new Vector3(x,y,z));
3.3.2 ? 自動(dòng)游覽
自動(dòng)游覽是指用戶以規(guī)定的視角,沿固定的線路參觀、游覽校園。游覽過程中,可通過鼠標(biāo)改變觀察視角。自動(dòng)游覽功能的實(shí)現(xiàn)步驟如下。
(1)創(chuàng)建多個(gè)cube作為漫游的導(dǎo)航點(diǎn),將其均命名為WandarPoint,并用WandarPoint標(biāo)記這些導(dǎo)航點(diǎn);禁用其網(wǎng)格渲染器,并刪除碰撞器;將導(dǎo)航點(diǎn)均勻地設(shè)置在漫游路徑上,確保每個(gè)路口都有導(dǎo)航點(diǎn),任何相鄰的導(dǎo)航點(diǎn)間均沒有障礙物,可以直接到達(dá)。
(2)編輯自動(dòng)瀏覽腳本,將腳本賦予角色。腳本中的操作包含兩部分:其一是按由近及遠(yuǎn)的次序存儲(chǔ)所有導(dǎo)航點(diǎn)的位置信息,以及用戶的起始位置和運(yùn)動(dòng)方向;其二是按導(dǎo)航點(diǎn)的次序運(yùn)動(dòng),最終抵達(dá)目標(biāo)點(diǎn)。
導(dǎo)航數(shù)據(jù)初始化在Start方法中實(shí)現(xiàn),其部分核心代碼如下所示:
path=GameObject.FindGameObjectsWithTag("WandarPoint");
Array.Sort(path,(x,y)=>{returnx.gameObject.name.CompareTo(y.gameObject.name);});
transform.position=path [0].transform.position;
transform.forward=path [Index].transform.position-transform.position;
自動(dòng)漫游在Update方法中實(shí)現(xiàn),其部分核心代碼如下所示:
if(Vector3.Distance(path [Index].transform.position,transform.position)<0.1f){
if(Index!=path.Length-1){
Index++;}
if(Vector3.Distance(path[path.Length-1].transform.position,transform.position)<0.1f){
transform.position=path [path.Length-1].transform.position;
return;}
transform.forward=path Index].transform.position-transform.position;}
transform.Translate(Vector3.forward*5*Time.deltaTime,Space.Self);
3.3.3 ? 信息交互
系統(tǒng)的信息交互應(yīng)用了Unity3D引擎提供的3D拾取技術(shù)。3D拾取技術(shù)的基本思想是,從用戶位置向鼠標(biāo)點(diǎn)擊位置發(fā)射一條射向3D世界的射線,與射線相交的第一個(gè)對(duì)象,為被選中對(duì)象[8]。獲取選中對(duì)象后,可以以動(dòng)畫、音頻、圖片、文字等形式向用戶展示對(duì)象的相關(guān)信息。利用信息交互功能,用戶可在漫游時(shí)方便快捷地查詢周圍環(huán)境的信息。信息交互的部分核心代碼如下所示:
Ray ray=Camera.mainCamera.ScreenPointToRay
(Input.mousePosition);
if (Physics.Raycast(ray,out hit,100)){
if (hit.transform.gameObject.name=="Library") {
……// event handling
}
}
4 ? 結(jié)論(Conclusion)
本文設(shè)計(jì)、開發(fā)基于Unity3D引擎的交互式虛擬校園漫游系統(tǒng),并利用Unity3D的多平臺(tái)部署功能,將其發(fā)布到Web平臺(tái)上。系統(tǒng)為用戶提供了逼真的校園環(huán)境,且具備良好的實(shí)時(shí)性和交互性。文中還討論了在虛擬校園漫游系統(tǒng)開發(fā)中所涉及的幾個(gè)關(guān)鍵技術(shù),并給出了相應(yīng)的解決方案。文中所涉及的技術(shù)同樣可應(yīng)用于電子、游戲、醫(yī)學(xué)、教育等虛擬現(xiàn)實(shí)和仿真領(lǐng)域。
參考文獻(xiàn)(References)
[1] 肖建良,張程,李陽.基于Unity3D的室內(nèi)漫游系統(tǒng)[J].電子設(shè)計(jì)工程,2016,19:54-56.
[2] 朱惠娟.基于Unity3D的虛擬漫游系統(tǒng)[J].計(jì)算機(jī)系統(tǒng)用,2012,21(10):36-38.
[3] 李遠(yuǎn)鑫,蔣海鷗,徐亦飛,等.基于Web3D的交互式虛擬社區(qū)[J].計(jì)算機(jī)工程,2011,37(11):289-290.
[4] 劉海川,王小鵬,王磊.虛擬校園模型構(gòu)建及優(yōu)化[J].電子科技,2010,11:1-3.
[5] 張明明.基于Unity3D虛擬校園漫游的研究與實(shí)現(xiàn)[D].昆明:云南大學(xué),2014:35-36.
[6] 李在賢.Unity5權(quán)威講解[M].北京:人民郵電出版社,2016:15-16.
[7] 王星捷,李春花.基于Unity3D平臺(tái)的三維虛擬城市研究與應(yīng)用[J].計(jì)算機(jī)技術(shù)與發(fā)展,2013,23(4):241-244.
[8] 黃濤.基于Unity3D的虛擬校園漫游系統(tǒng)的研究和實(shí)現(xiàn)[D].桂林:廣西師范大學(xué),2014:39-40.
作者簡(jiǎn)介:
尹大偉(1985-),男,碩士,副教授.研究領(lǐng)域:現(xiàn)代思想政治教育理論與方法,多媒體技術(shù)應(yīng)用.
張熙若(1997-),男,本科生.研究領(lǐng)域:軟件開發(fā).
李歡歡(1998-),女,本科生.研究領(lǐng)域:虛擬現(xiàn)實(shí).
馬恒銳(1998-),男,本科生.研究領(lǐng)域:網(wǎng)絡(luò)安全.
孟祥銳(1998-),男,本科生.研究領(lǐng)域:圖像處理.