沈忠杰
桂林電子科技大學(xué),廣西 桂林 541004
虛擬現(xiàn)實(shí)技術(shù)是利用計(jì)算機(jī)模擬產(chǎn)生一個三維空間的虛擬世界,提供使用者關(guān)于視覺、聽覺、觸覺等感官的模擬,通過對真實(shí)環(huán)境的模擬讓使用者對未來項(xiàng)目的具體情況有了深入理解。目前在家居設(shè)計(jì)行業(yè)得到廣泛的應(yīng)用和發(fā)展,當(dāng)下平面圖結(jié)合效果圖的表現(xiàn)方法隨著時(shí)間的發(fā)展已經(jīng)不能滿足業(yè)主高端的需求,業(yè)主更希望能有一個好的交互系統(tǒng),能夠提供一個逼真的環(huán)境來展示未來房子裝修的效果。Unity3D軟件在這樣的環(huán)境下被應(yīng)用是非常合適的,Unity3D 是一個全面整合的專業(yè)游戲引擎,Unity3D 結(jié)合3DMax 或者M(jìn)aya軟件就能夠輕松的實(shí)現(xiàn)室內(nèi)的虛擬現(xiàn)實(shí)漫游。
室內(nèi)虛擬現(xiàn)實(shí)漫游系統(tǒng)的實(shí)現(xiàn)流程依次是項(xiàng)目分析、設(shè)計(jì)、開發(fā)、測試、修改等若干個步驟。項(xiàng)目制作流程主要分為三部分:(1)創(chuàng)建室內(nèi)場景3D 模型(2)將模型導(dǎo)入到Unity3D 中進(jìn)行材質(zhì)和燈光調(diào)整(3)通過編寫C#腳本,實(shí)現(xiàn)用戶與虛擬環(huán)境間的互動。第一部分的主要工作是利用3DMAX 軟件進(jìn)行模型創(chuàng)建,同時(shí)將模型的UV 拆開,盡可能的節(jié)省UV 空間。第二部分的主要工作是在Unity3D 中將模型導(dǎo)入進(jìn)行材質(zhì)調(diào)整以及燈光的調(diào)整。第三部分利用腳本將模型與Unity3D 鏈接起來,能夠完成用戶和系統(tǒng)之間的交互。虛擬現(xiàn)實(shí)系統(tǒng)的開發(fā)流程主要包含以下幾個方面:3DMAX 模型制作,UV 展開,模型貼圖繪制,導(dǎo)入模型,材質(zhì)和燈光調(diào)整,編寫互動腳本,交互測試等幾個部分。
在室內(nèi)虛擬現(xiàn)實(shí)漫游系統(tǒng)開發(fā)中3DAMX 模型制作要控制面的數(shù)量以及面的布線,在建模中不允許出現(xiàn)大于四邊面的面,UV 展開在繪制貼圖時(shí)貼圖最好用一整張。Unity3D中光照貼圖的計(jì)算利用進(jìn)而采用PowerVR Ray Tracing 和Enlighten 的結(jié)合進(jìn)行光照貼圖計(jì)算,兩者無縫的拼接起來,最終保證在畫面上面不會有任何的走樣效果。在Unity3D 中實(shí)現(xiàn)交互,利用C#進(jìn)行腳本編寫,然后將腳本鏈接到相機(jī)上或者鏈接到角色上。
1.相機(jī)運(yùn)動控制方法
用戶可以利用“W”、“S”、“A”、“DT”鍵控制相機(jī)在場景中向前、向后、向左、向右運(yùn)動來實(shí)現(xiàn)相機(jī)的虛擬漫游,同時(shí)也可以鼠標(biāo)的旋轉(zhuǎn)來控制攝影機(jī)的觀察角度。我們編寫相機(jī)控制腳本,然后將腳本鏈接到相應(yīng)的攝影機(jī),以下是相機(jī)運(yùn)動的代碼片段。
2.碰撞檢測
在Unity3D 中,通常利用碰撞器來檢測對象間是否發(fā)生碰撞。Unity3D 中內(nèi)建的碰撞器有多種類型,我們可以為物體添加碰撞器進(jìn)行測試物體間的碰撞效果,我們在測試中要注意碰撞發(fā)生的條件及因素,在Unity3D 中能夠檢測碰撞發(fā)生的方式主要有兩種,一種是利用碰撞器,另一種是利用觸發(fā)器。完成物體碰撞實(shí)現(xiàn)的步驟如下:(1)為需要進(jìn)行碰撞檢測的對象添加規(guī)則的長方體碰撞或球體碰撞;修改碰撞體的相應(yīng)屬性,確保能夠?qū)z測對象完全包圍住;將長方體碰撞或球體碰撞的觸發(fā)屬性設(shè)置為開,這樣表示要檢測的對象碰撞有效。(2)編寫碰撞腳本,然后將其指定給待檢測對象,代碼片段如下。
3.燈光烘焙
燈光烘焙技術(shù)利用Light Mapping(光照貼圖技術(shù))來烘焙物體,這是一種增強(qiáng)場景光照效果的技術(shù),當(dāng)我們把物體放進(jìn)場景中,引擎就會計(jì)算光線,光線照到物體表面形成反光和陰影,一般有兩種情況:當(dāng)不烘焙物體時(shí),游戲運(yùn)行時(shí),反光和陰影都是由顯卡和CPU 計(jì)算出來的;當(dāng)烘焙物體時(shí),反光和陰影都會記錄到模型中,變成新的貼圖,游戲運(yùn)行時(shí),顯卡和CPU 不需要對環(huán)境光進(jìn)行運(yùn)算,正好大大節(jié)約了CPU 的資源。燈光烘焙具體操作如下:(1)首先創(chuàng)建一個天空盒,將天空盒賦予材質(zhì)(2)創(chuàng)建反射探頭,將反射屬性調(diào)整為環(huán)境幀,環(huán)境就可以跟隨物體而產(chǎn)生運(yùn)動,然后再調(diào)整燈光探頭組將燈光效果也跟隨到物體的運(yùn)動。燈光烘焙代碼片段如下:
在虛擬現(xiàn)實(shí)系統(tǒng)實(shí)現(xiàn)的過程中,模型要還原真實(shí)場景,建模中我們采用1:1 的建模流程。同時(shí)注重模型的整體布線結(jié)構(gòu)以及平滑原理及方法,將場景中交叉看不到的模型刪除。建模中合理優(yōu)化面的數(shù)量,在場景中需要特寫的部分我們需要比較高數(shù)量的面來完成。不需要特寫的部分例如:窗戶上的格子,以及衣柜上的雕花,還有電視背景墻上的花紋細(xì)節(jié)都可以用貼圖來實(shí)現(xiàn)。貼圖中按照UV 展開的方法進(jìn)行貼圖,這樣可以節(jié)省貼圖數(shù)量同時(shí)方便燈光烘焙,貼圖在繪制過程中注意光影和明暗關(guān)系的處理,不要出現(xiàn)過多色塊的部分,在烘焙中會影響到燈光效果。
在Unity3d 中對整體界面進(jìn)行設(shè)計(jì),我們可以采用UGUI組件進(jìn)行頁面布局,UGUI 中區(qū)域?yàn)g覽能讓用戶直接到達(dá)指定的瀏覽區(qū)包括游戲窗口、文本窗口、輸入框、按鈕、貼圖框等。整體的技術(shù)要點(diǎn)是繪制一個Canvas 畫布,將所有需要排列的按鈕及內(nèi)容呈現(xiàn)在畫布上,按鈕觸發(fā)事件方式有多種,例如:依靠屬性面板綁定物體然后找到物體腳本上的方法觸發(fā),還有是用純代碼的方式進(jìn)行觸發(fā)事件發(fā)生。UGUI 優(yōu)點(diǎn)是高效、快速、同時(shí)可視化效果好。
Unity3D 利用腳本添加來實(shí)現(xiàn)用戶與環(huán)境間的互動,在開發(fā)中主要用C#來編寫腳本,將編寫好的腳本鏈接到要控制的對象上。在Unity3D 中內(nèi)置了物理引擎,可以利用實(shí)現(xiàn)自然現(xiàn)象的模擬,也可以利用剛體來模擬對象之間的碰撞。環(huán)境漫游通過利用鍵盤和鼠標(biāo)控制相機(jī)的運(yùn)動來完成。用戶可以通過第一人稱視角對環(huán)境的漫游、瀏覽,如果在開發(fā)中想讓相機(jī)自由的漫游可以通過加載CameraPath 插件來完成,相機(jī)可以沿著指定的路徑進(jìn)行場景漫游,在漫游中可以通過觸發(fā)器來觸發(fā)燈光和聲音效果。
本文以3Dmax 為建模工具,利用Unity3D 游戲引擎,結(jié)合C#腳本語言開發(fā)了室內(nèi)虛擬現(xiàn)實(shí)漫游系統(tǒng),在系統(tǒng)開發(fā)過程中嚴(yán)格按照流程化的方式進(jìn)行,前期建模階段按照建模標(biāo)準(zhǔn)進(jìn)行,后期材質(zhì)的烘焙,腳本的編寫及鏈接到對象都是難點(diǎn),是我們重點(diǎn)把握的部分。本系統(tǒng)的開發(fā)流程不僅僅使用于室內(nèi)虛擬現(xiàn)實(shí)漫游系統(tǒng),也適合其他的系統(tǒng)。例如:建筑漫游系統(tǒng),景觀漫游系統(tǒng)等都可以借鑒本文的方法。