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