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