韓蕾
摘要:為了應(yīng)用虛擬現(xiàn)實技術(shù)將樓盤銷售從傳統(tǒng)的圖紙宣傳方式變成三維空間漫游方式,該文重點對虛擬三維空間漫游常用的漫游技術(shù)和碰撞檢測方法進行研究,并對漫游和碰撞檢測在Unity3d平臺的實現(xiàn)過程做了介紹。
關(guān)鍵詞:虛擬現(xiàn)實;場景漫游;自動尋路;碰撞檢測
中圖分類號:TP391 文獻標(biāo)識碼:A 文章編號:1009-3044(2016)19-0194-02
Research of the Virtual Community Cruise and Collision Detection Based on Unity3d
HAN Lei
(Qingdao Harbor Vocational and Technical College, Qingdao 266400, China)
Abstract: In order to use virtual reality technology to real estate sales from the traditional way into cruise mode based on three-dimension, this article studied the roaming technology and collision detection methods based on the virtual three-dimensional space , and the collision detection and roaming platform in Unity3d the implementation process is introduced.
key words: virtual reality; cruise; automatic pathfinding; collision detection
虛擬現(xiàn)實技術(shù)的發(fā)展給房地產(chǎn)銷售方式帶來革命性的變化,樓盤營銷手段從平面圖紙宣傳轉(zhuǎn)換成了基于虛擬現(xiàn)實技術(shù)的虛擬樓盤漫游,極大的增強了客戶對樓盤認(rèn)知的真實感,從而增強了客戶進一步關(guān)注樓盤的愿望,虛擬樓盤漫游系統(tǒng)得到廣泛的開發(fā)應(yīng)用。虛擬漫游技術(shù)主要包括場景建模、場景漫游、碰撞檢測三大技術(shù),本文就基于Unity3d開發(fā)平臺開發(fā)虛擬樓盤漫游系統(tǒng)所需要的場景漫游技術(shù)和碰撞檢測技術(shù)進行研究。
1 虛擬現(xiàn)實技術(shù)及Unity3d開發(fā)平臺
虛擬現(xiàn)實技術(shù)是以計算機技術(shù)為核心,綜合集成計算機圖形、計算機仿真、人工智能、傳感技術(shù)、顯示技術(shù)、網(wǎng)絡(luò)并行處理等技術(shù)的一種高技術(shù)模擬系統(tǒng)。它生成一種讓人從視覺、聽覺、觸覺等多方面感到“真實”的三維虛擬環(huán)境,支持人通過語言、手勢、動作等多種與真實情況一致的方式與虛擬環(huán)境進行交互,給人一種身臨其境的感覺。由于虛擬現(xiàn)實技術(shù)對真實環(huán)境的強大的虛擬功能和其給用戶帶來的強烈的沉浸感和自然真實的交互性,虛擬現(xiàn)實技術(shù)被廣泛應(yīng)用于醫(yī)學(xué)、游戲、建筑設(shè)計、房產(chǎn)開發(fā)、航空航天、工業(yè)仿真、應(yīng)急演練等多個領(lǐng)域[1]。
Unity3d是一款三維游戲開發(fā)平臺,使用Unity3d用戶可以輕松的完成三維視頻游戲、建筑可視化、實時三維動畫等三維虛擬環(huán)境的交互內(nèi)容。Unity3d編輯器在Windows 和Mac OS X下運行,并支持Windows、iphone、Android等多種發(fā)布平臺。由于其可視化的開發(fā)界面、多發(fā)布平臺、多開發(fā)平臺,以及支持大家熟悉的C#語言作為腳本開發(fā)語言,Unity3d被廣泛的應(yīng)用于三維虛擬漫游系統(tǒng)開發(fā)。
2 虛擬場景漫游技術(shù)及在Unity3d中的實現(xiàn)
一個樓盤虛擬漫游功能至少要提供用戶進行自主“游覽”的交互漫游功能和可以為用戶進行全方位導(dǎo)航的自動漫游功能,這樣的樓盤漫游系統(tǒng)才可以滿足用戶的基本需要。
2.1 交互漫游技術(shù)及在Unity3d中的實現(xiàn)
虛擬樓盤漫游系統(tǒng)中交互漫游功能提供用戶通過鍵盤、鼠標(biāo)以及觸摸方式控制漫游角色按照操作者的意志進行瀏覽的功能,Unity3d中提供第一人稱角色漫游和第三人稱角色漫游兩種漫游方式。對于虛擬樓盤漫游,我們通常采用第一人稱漫游,以增強用戶的沉浸感、真實感。
虛擬場景漫游的實現(xiàn)原理是仿照真實環(huán)境中攝像機的作用和操作方式,相當(dāng)于給在虛擬環(huán)境中的瀏覽者加上了一架攝像機,瀏覽者通過攝像機瀏覽環(huán)境。因此在虛擬漫游在系統(tǒng)中首先要架設(shè)攝像機(系統(tǒng)組件)在合適的位置,接下來通過交互設(shè)備(大多數(shù)情況下用鍵盤、鼠標(biāo))和腳本程序?qū)崿F(xiàn)對攝像機的上下左右、遠(yuǎn)近視點位置的控制功能,配合三維場景畫面的動態(tài)切換載入模擬出在觀察者在真實環(huán)境中隨位置、方向、視線變化所看到的場景的變化,從而實現(xiàn)虛擬環(huán)境下漫游的功能。三維場景模型制作完成后,在Unity3d中可以輕松的實現(xiàn)交互漫游。Unity3d中的實現(xiàn)過程如下:
將建好的場景模型分類導(dǎo)入到Unity3d中,做相應(yīng)三維場景效果參數(shù)設(shè)置。接著創(chuàng)建一個第一人稱控制器First Person Controller,調(diào)整First Person Controller的位置和高度,這一步相當(dāng)于把一個第一視角的攝像機架設(shè)在一個透明的膠囊體漫游角色上,系統(tǒng)中出現(xiàn)了一個漫游者——系統(tǒng)操作者。接下來要做的是對該控制器的Character Controller組件設(shè)置屬性值、添加、改寫漫游腳本。通過屬性值設(shè)置使漫游者在漫游過程應(yīng)具備現(xiàn)實用人在環(huán)境中游覽的特點,如,爬坡能力、過間隙的能力等等。編寫腳本控制漫游角色相應(yīng)操作者的指使進行漫游,腳本中通過Update函數(shù)響應(yīng)鍵盤、鼠標(biāo)的移動輸入信號;通過Move函數(shù)控制第一人稱控制器的移動。同時,在移動過程中要進行碰撞檢測,一旦檢測到碰撞立即做出碰撞響應(yīng)——停止漫游,消息提示,等待調(diào)整漫游方向。漫游方向調(diào)整通過編寫腳本由鍵盤的W、A、S、D按鍵來控制攝像機的移動,通過鼠標(biāo)控制視角和朝向。
2.2 自動尋路漫游技術(shù)及在Unity3d中的實現(xiàn)
對購房者來說,樓盤本身以及周邊的環(huán)境是購房者所關(guān)注的,因此對于一個良好的虛擬樓盤漫游系統(tǒng),能滿足用戶充分了解樓盤和樓盤周邊環(huán)境的功能。一個陌生的樓盤讓用戶通過交互漫游,往往會給人一種“不識廬山真面目”的感覺,因此虛擬樓盤漫游系統(tǒng)在提供交互漫游選項的同時也支持自動尋路漫游,允許用戶輸入起點、目的地,系統(tǒng)根據(jù)用戶輸入的起始點和目的地自動尋找一條可行的路徑引領(lǐng)用戶漫游,使用戶輕輕松松漫游樓盤及周邊環(huán)境。
自動尋路漫游的關(guān)鍵是路徑規(guī)劃。虛擬場景的路徑規(guī)劃來源于機器人學(xué)的路徑規(guī)劃,路徑規(guī)劃又分為全局路徑規(guī)劃和局部路徑規(guī)劃。全局路徑規(guī)劃,即在漫游前知道漫游場景的所有信息,根據(jù)已知的信息,借助路徑搜索算法,找出起點到終點的路線,開始漫游。局部路徑規(guī)劃,即對場景的信息局部或完全未知,在漫游過程中需要借助某些特殊設(shè)備探知場景的信息,根據(jù)探知的信息確定漫游的方向、路徑[2]。對于虛擬樓盤漫游系統(tǒng),整個樓盤的場景建模在漫游前已完成,可供漫游的路徑信息已知,因此,虛擬樓盤漫游系統(tǒng)的自動尋路采用全局路徑規(guī)劃。
Unity3d支持靜態(tài)尋路和動態(tài)尋路兩種尋路方式,靜態(tài)尋路要求漫游路徑在漫游前規(guī)劃完成,漫游過程沿著規(guī)劃的路線進行;動態(tài)尋路在漫游過程中一旦遇到障礙,需要從停止點到目標(biāo)之間重新進行路徑規(guī)劃,選擇最佳路徑。虛擬樓盤漫游場景中的障礙物是固定的,可選路徑固定,因此對于樓盤漫游系統(tǒng)的選擇靜態(tài)尋路簡單實用。在Unity3d中由NavMesh組件完成尋路開發(fā)。NavMesh的尋路算法的核心是用三角形代替?zhèn)鹘y(tǒng)的尋路算法中的網(wǎng)格,用計算拐點優(yōu)化尋路路徑。NavMesh尋路算法實現(xiàn)分為以下幾步:
第一步:建立MESH三角形網(wǎng)格:
首先,畫出一個范圍可行走范圍。再在可行走范圍中去不可行走的范圍。第三步用多個多邊形Polygon代替以上的范圍,然后再由這些多邊形的各個頂點來生成三角形網(wǎng)格,三角形網(wǎng)格的生成算法如下:
Step 1:用可行走Polygon的任意一條邊作為起點,將其推入堆棧列表。到Step2.
Step 2:從堆棧中推出一條邊,在所有三角形中計算出邊的DT點,構(gòu)成約束Delaunay三角形,到Step3。如果沒有DT點就重復(fù)做Step2,直到堆棧為空就結(jié)束整個程序。
Step 3:將所構(gòu)成的三角形,另兩邊做如下處理:檢查堆棧中是否已存在,如果存在就刪除該邊,如果不存在就加入到堆棧中。
第二步:用NavMesh算法尋路
首先計算起點到各鄰接三角形中心的距離,選取F值(距離賦值)最小的三角形,計算G(起點到個鄰接三角形中心的距離)值,如果比以前的G值小則更新父三角及G值,最終得到一條三角形連接線路。
對于虛擬樓盤漫游系統(tǒng)的建筑物,由于目標(biāo)范圍太大,導(dǎo)致路徑規(guī)劃復(fù)雜,處理的方法是在每個作為尋路目標(biāo)的建筑物入口處設(shè)置一個較小的替代目標(biāo)。
3 三維碰撞檢測技術(shù)及在Unity3d中的實現(xiàn)
虛擬樓盤場景有假山、樓體、樹木、花壇等,那么在交互漫游過程中,漫游角色在與這些物體發(fā)生碰撞時,系統(tǒng)必須能及時檢測到碰撞并立即做出處理響應(yīng),這樣才能避免出現(xiàn)“穿墻”現(xiàn)象,給用戶一個逼真的漫游體驗。碰撞檢測是虛擬樓盤漫游中影響漫游“真實感”的重要因素。
目前,常用的碰撞檢測方法主要有層次包圍盒法和空間分割法。空間分割法是把三維虛擬空間分割成大小相等的單元格,然后對占有同一個單元或者相鄰單元格的對象進行相交檢測。在環(huán)境物體分布稀疏的場景中,空間分割法可以快速的找出相交單元格,進行碰撞檢測。但是復(fù)雜的場景中,空間分割法由于不容易準(zhǔn)確確定分割尺寸,經(jīng)常造成存儲空間浪費過大,檢測效率低。所以空間分割法較少使用。層次包圍盒法通過規(guī)則的立體幾何圖形將虛擬場景的對象包圍起來,使規(guī)則幾何體的特性與虛擬對象的特性接近一致,當(dāng)判斷兩個被層次包圍盒包圍的虛擬對象是否碰撞時,首先從包圍盒相交檢測開始,如果包圍盒未相交,說明兩個虛擬對象沒有發(fā)生碰撞,不需要進行兩個虛擬對象的相交測試,因此層次包圍盒法效率較空間分割法要高的多,再加上其檢測方法簡單的優(yōu)點,層次包圍盒法是三維虛擬場景漫游中應(yīng)用廣泛的碰撞檢測算法。根據(jù)包圍盒的幾何體不同,層次包圍盒碰撞檢測算法又分為:包圍球法、AABB包圍盒法、OBB包圍盒法[4]。
Unity3d開發(fā)平臺內(nèi)置了基于層次包圍盒的碰撞檢測算法,為了減輕開發(fā)人員的工作負(fù)擔(dān),Unity3d開發(fā)平臺中基于層次包圍盒的各種碰撞檢測算法開發(fā)完成了多種碰撞器,開發(fā)人員在開發(fā)過程中直接添加相應(yīng)的碰撞器完成碰撞檢測,而不需要編寫碰撞檢測算法,大大節(jié)省了開發(fā)時間。Unity3d提供的碰撞器主要包括Box Collider(盒子碰撞器)、Sphere Collider(球形碰撞器)、Capsule Collider(膠囊碰撞器)、Wheel Collider(輪子碰撞器)、Mesh Collider(網(wǎng)格碰撞器)、Terrain Collider(地形碰撞器)等。基于Unity3d做樓盤漫游系統(tǒng),其碰撞檢測主要用于漫游角色與墻體、樹木、花壇、草地之間的碰撞,以不出現(xiàn)“穿墻”現(xiàn)象和及時做出碰撞響應(yīng)為目的,因此該漫游系統(tǒng)碰撞器應(yīng)以盒子、球形、膠囊等原型碰撞器為主,復(fù)雜物體的碰撞器用原型碰撞器進行組合,比如,樹可以給樹頭和樹干分別用盒形碰撞器,讓他們組合起來作為單個碰撞器使用。
樓盤漫游系統(tǒng)中,對樓體、樹木、假山這些靜止不動的環(huán)境模型添加Static Collider 靜態(tài)碰撞器。對漫游角色添加Rigidbody Collider 剛體碰撞器,碰撞信息處理由腳本組件通過OnCollisionEnter(當(dāng)進入碰撞器)、 OnCollisionExit(當(dāng)退出碰撞器)、OnCollisionStay(當(dāng)逗留碰撞器)函數(shù)實現(xiàn)。
4 結(jié)束語
虛擬樓盤漫游系統(tǒng)中的關(guān)鍵技術(shù)是路徑規(guī)劃和碰撞檢測方法,本文首先對基于Unity3d進行虛擬樓盤漫游系統(tǒng)開發(fā)中用到的交互漫游和自動尋路漫游的路徑規(guī)劃、以及漫游過程中的碰撞檢測方法進行了研究。接下來對漫游和碰撞檢測在Unity3d平臺的實現(xiàn)過程進行介紹。
參考文獻:
[1] 洪炳镕, 蔡則蘇, 唐好選. 虛擬現(xiàn)實及其應(yīng)用[M]. 北京: 國防工業(yè)出版社, 2005:2,90-107.
[2] 羅景馨. 與三維場景漫游相關(guān)的部分技術(shù)研究[D]. 長沙: 中南大學(xué), 2009:44-48.
[3] 郝彩虹. 虛擬漫游系統(tǒng)場景管理與路徑規(guī)劃的研究[D]. 大連: 大連理工大學(xué), 2010:29-31.
[4] 張明明. 基于Unity3D虛擬校園漫游的研究與實現(xiàn)[D]. 昆明: 昆明大學(xué), 2014:17-18.