宋世坤
(四川大學(xué)計算機(jī)學(xué)院,成都610065)
虛擬現(xiàn)實(shí)是一種結(jié)合多媒體技術(shù)、圖形學(xué)和人機(jī)交互技術(shù)等科技發(fā)展的最新技術(shù),綜合應(yīng)用光學(xué)、數(shù)學(xué)、力學(xué)等學(xué)科,在計算機(jī)上生成可交互的三維環(huán)境,并利用多源信息融合的交互仿真使用戶達(dá)到沉浸式的效果,隨著信息技術(shù)和互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,虛擬現(xiàn)實(shí)已漸漸滲透到生活中的各個方面,并在這些領(lǐng)域大放異彩,由于它具有基于虛擬現(xiàn)實(shí)技術(shù)的交互性、體驗性和沉浸性,使比起文字描述、全景圖片等形式的展示方式更具有優(yōu)勢,本項目基于HTC Vive 頭盔手柄設(shè)備作為交互方式,以Unity3D 為主要開發(fā)工具,以車間為背景,真實(shí)還原生產(chǎn)車間中設(shè)備與房間,使用戶達(dá)到身臨其境的觀感。
本項目實(shí)現(xiàn)功能有:
(1)第一人稱與第三人稱漫游。支持真實(shí)三維場景瀏覽,支持多視角瀏覽、多視距瀏覽,第一人稱視角漫游:提供第一人稱視角漫游,通過交互手柄控制視點(diǎn)位置前進(jìn)、后退、旋轉(zhuǎn),改變視角觀看內(nèi)容。第三人稱自由視角:提供第三人稱自由視角,通過交互手柄控制視點(diǎn)位置,自由旋轉(zhuǎn)、拖曳、放大、縮小,改變視角觀看內(nèi)容。
(2)人機(jī)交互與設(shè)計,文字、箭頭等展示效果的顯示與隱藏。提供交互界面,用戶可以瀏覽廠房的介紹信息,介紹內(nèi)容以文字方式表現(xiàn),能夠通過交互操作隱藏和顯示文字信息。
(3)虛擬儀表和監(jiān)控界面設(shè)計和開發(fā)。系統(tǒng)通過虛擬儀表和監(jiān)控界面顯示車間內(nèi)部的工作狀態(tài),虛擬儀表及監(jiān)控提供數(shù)據(jù)輸入接口,供其他系統(tǒng)或軟件將獲取到的傳感器數(shù)據(jù)實(shí)時傳入。
HTC Vive 在2015 年巴薩羅那世界移動通信大會上首次公開面世,由HTC 與Valve 兩家公司聯(lián)合研發(fā)出的VR 虛擬現(xiàn)實(shí)產(chǎn)品,主要包含1 個頭戴式顯示器,2 個激光傳感定位器,2 個單手控制器,其中頭戴式顯示器通過左右眼觀看不同顯示屏蔽達(dá)到實(shí)現(xiàn)雙目立體視覺,采用OLED 液晶屏來作為頭盔顯示器的屏幕,該屏幕雙眼合并的有效分辨率高達(dá)2100×1600 像素,其較高的分辨率可以有效降低畫面的顆粒感,從而達(dá)到不錯的用戶體驗,2 個手柄有多個功能按鈕,通過判斷是否按下的狀態(tài)信息實(shí)現(xiàn)豐富的交互功能,2 個定位系統(tǒng)采用的是Value 公司研發(fā)的Lighthouse 來作為產(chǎn)品的特有定位系統(tǒng)控制器,Lighthouse 由兩個基站構(gòu)成,其主要原理是通過發(fā)射的激光和光敏傳感器之間的相互交互來確定物體的運(yùn)動軌跡和位置,從而得到六自由度信息。
本項目的仿真系統(tǒng)是基于Unity3D 平臺實(shí)現(xiàn)的,Unity3D 是由Unity Technologies 開發(fā)的一個讓玩家輕松創(chuàng)建諸如三維視頻游戲、建筑可視化、實(shí)時三維動畫等類型互動內(nèi)容的多平臺的綜合型開發(fā)工具。它是能夠?qū)㈤_發(fā)的產(chǎn)品發(fā)布到Windows、Linux、Mac、iOS、Android 等平臺上的輕量級引擎,具有操作簡單、跨平臺、所見即所得的模型實(shí)時渲染效果。同時由于社區(qū)的活躍,用戶許多豐富實(shí)用的插件資源,腳本是Unity3D 邏輯功能實(shí)現(xiàn)的核心,Unity 腳本支持三種語言,C#、JavaScript 和Boo 腳本,其中Boo 腳本用的較少,C#和JavaScript 為主流,將腳本拖到對應(yīng)的游戲?qū)ο笊?,設(shè)置好初始參數(shù)和對象,點(diǎn)擊程序運(yùn)行就能實(shí)現(xiàn)相應(yīng)的功能了。
前期根據(jù)需求分析得到需要創(chuàng)建的場景,進(jìn)行車間實(shí)地測試及現(xiàn)場調(diào)研,搜集對應(yīng)的數(shù)據(jù)和材料,確立平面圖,建筑風(fēng)格,場景面積大小,交互功能設(shè)計,動畫制作等方便后期制作。對于場景模型的建立,有多種方法,一種是利用Unity 引擎本身的建模功能創(chuàng)立物體,另外一種是利用專門建模軟件進(jìn)行制作,常見的建模軟件有3DMax、Maya 等,每個軟件有各自的優(yōu)勢,3DMax 適用于工程建模、室內(nèi)外場景等方面的指針而Maya 偏向于三維動畫、電影的制作,因此,本項目選擇3DMax 更加合適。充分利用3DMax 的可視化特點(diǎn),從現(xiàn)場拍攝的圖片中,根據(jù)三維視圖和相關(guān)的數(shù)學(xué)攝像原理,得到車間中各個設(shè)備的大小,完成三維虛擬建模,建模過程中要遵循以下原則:①為了達(dá)到場景的流暢運(yùn)行,要盡可能地控制模型的面數(shù);②對于看不見的部分,合理的刪除面片數(shù)據(jù);③UV 拆分中UV 點(diǎn)均勻分布,防止后期貼圖出現(xiàn)畫面變形失真。三維模型優(yōu)化有很多的技巧,主流的有LOD 技術(shù),這種技術(shù)是根據(jù)視點(diǎn)的遠(yuǎn)近選擇不同性能的模型,對于在遠(yuǎn)處的場景,選擇面數(shù)少的,不僅保全了模型的視覺效果不影響整體感官,而且提高了模型的繪制速度,使系統(tǒng)加載響應(yīng)更快。建立完模型后,保存后將其導(dǎo)出為.fbx 的文件,存入到Unity 項目Project 文件夾中。其中導(dǎo)入有物體的位置信息、材質(zhì)、貼圖、動畫等。最終參考效果間圖1。
圖1 車間內(nèi)部模型
按照官網(wǎng)的教程下載相應(yīng)的驅(qū)動,之后安放2 個激光定位傳感器,將頭盔和手柄控制器放在定位器可見的范圍內(nèi),然后就是定位,即需要設(shè)置一個原點(diǎn)的位置,構(gòu)造一個虛擬的坐標(biāo)系統(tǒng),一起設(shè)置好之后,便可以準(zhǔn)備開發(fā)了,雖然官方提供的SteamVR 插件提供了一個C#接口,讓開發(fā)人員可以與Vive 設(shè)備進(jìn)行交互,但獲取控制器輸入狀態(tài)或設(shè)備姿勢會導(dǎo)致大量冗余代碼,主要為以下兩點(diǎn):①您必須連續(xù)獲取正確的設(shè)備索引(2 個手柄控制器的哪一個),該索引由Steam-VR_ControllerManager 在連接控制器時確定;②定位SteamVR_ControllerManager 也會帶來更多的開銷,所以這里我們采用的是ViveInputUtility 插件,封裝了底層細(xì)節(jié),讓我們開發(fā)更加簡單,ViveInputUtility 有以下一些特點(diǎn),使用靜態(tài)函數(shù)獲取設(shè)備輸入按鈕事件跟蹤姿勢,使用ViveRaycaster 組件發(fā)送射線,可以實(shí)現(xiàn)多種碰撞檢測,包含2D、3D、UI 等。下面是一些C#腳本示例:
配置ViveInputUtility 插件的具體步驟如下:①打開Steam 平臺下載SteamVR 這是由Value 提供的官方庫,可以簡化Vive 開發(fā);②在Unity 的AssestStore 中下載ViveInputUtility 插件;③導(dǎo)入到工程中,選擇默認(rèn)的推薦設(shè)置;④將ViveInputUtility 中的預(yù)設(shè)體拖到項目中,根據(jù)功能的需要,給相應(yīng)的物體加上可拖拽,可瞬移的腳本。
(1)視角的切換
通過在場景中放置多個攝像機(jī),當(dāng)獲取到手柄控制器按下扳機(jī)的指令時,進(jìn)行視角的切換,即隱藏第一人稱相機(jī),將其狀態(tài)設(shè)置為GameObject.SetActive(false),同時打開第三人稱相機(jī)進(jìn)行人物移動的跟隨,保持一定的距離。主要代碼如下:
(2)交互組件開發(fā)
HTC Vive 設(shè)備通過控制手柄來實(shí)現(xiàn)輸入信息,可以使用瞬移、點(diǎn)擊、拖拽等功能。實(shí)現(xiàn)瞬移功能時,要預(yù)先設(shè)置好可瞬移的區(qū)域,避免造成畫面的丟失。因為不能夠讓用戶可以走出到場景之外的區(qū)域或者穿越到不透明物體的內(nèi)部,這里采用虛擬碰撞器的原理,當(dāng)?shù)竭_(dá)邊界時,由于存在碰撞檢測算法,控制器便不能繼續(xù)往邊界之外移動了,瞬移地點(diǎn)的選擇方式為貝塞爾曲線,生成選擇地點(diǎn)的遠(yuǎn)近由用戶使用控制器手柄的方式,越高則可選擇的范圍越大,如果用戶將手柄舉起角度大于45 度,系統(tǒng)會鎖定這個距離的交點(diǎn),從而實(shí)現(xiàn)瞬時移動。使用瞬移的好處是減少不適感,由于要達(dá)到流暢的VR 體驗對硬件設(shè)備要求比較高,所以采用瞬移的方式具有普遍性,減少用戶的疲憊感和眩暈感。
3D 拾取技術(shù),在漫游過程中,用戶可以通過發(fā)射射線與場景中的物體交互,其主要原理是由攝像機(jī)和屏幕上的位置確定一條射線,射線指向3D 世界,最先第一個可碰撞的物體與此射線相交的物體就是被選中的物體,通過捕獲這個消息,可以實(shí)現(xiàn)材質(zhì)的更改或者動畫的播放,從而達(dá)到交互的目的。
(3)打包發(fā)布
完成所有的場景創(chuàng)建和功能開發(fā)后,選擇要運(yùn)行的平臺操作系統(tǒng),即可將整個平臺發(fā)布為可執(zhí)行.exe文件,連上HTC Vive 設(shè)備后,點(diǎn)擊運(yùn)行該應(yīng)用程序即可實(shí)現(xiàn)漫游效果。
本項目通過對虛擬現(xiàn)實(shí)車間漫游的研究與實(shí)現(xiàn),利用建模軟件3DMax 進(jìn)行車間實(shí)體場景的真實(shí)還原,通過HTC Vive 作為交互設(shè)備和Unity 作為開發(fā)工具實(shí)現(xiàn)了車間的交互式漫游體驗,實(shí)現(xiàn)了多種視角的漫游體驗,通過其交互功能更加生動了模擬真實(shí)生產(chǎn)中的過程,證明了虛擬現(xiàn)實(shí)技術(shù)用于展示與生產(chǎn)教學(xué)的有效性,同時這些技術(shù)也可以應(yīng)用于其他相關(guān)領(lǐng)域的仿真,具有一定的借鑒性。