劉凱
摘要:隨著當(dāng)今科技的不斷發(fā)展,三維虛擬仿真技術(shù)漸漸走到人們的日常生活之中,通過虛擬現(xiàn)實(shí)來使人們對(duì)所要進(jìn)行的事進(jìn)行大概的評(píng)估和預(yù)測(cè)。建筑三維漫游是現(xiàn)在三維虛擬技術(shù)應(yīng)用最廣泛的方法之一,本次選取一個(gè)古代小鎮(zhèn)作為的虛擬漫游的場(chǎng)景,使用Unity3D引擎作為開發(fā)工具,實(shí)現(xiàn)了一個(gè)建筑漫游系統(tǒng),具有一定的使用價(jià)值。
關(guān)鍵詞: 虛擬現(xiàn)實(shí);unity3D;優(yōu)化模型;貼圖
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)25-0156-02
Implementation of a Roaming System based on Unity
LIU Kai
(NanYang institute of Technology, Nanyang 473000,China)
Abstract:With the continuous development of the modern science and technology, 3-D virtual simulation technology gradually comes to people's daily life, which helps people have possible assessment and prediction about what is coming on. 3-D construction roaming is one of method which 3-D virtual simulation technology is most widely used, by virtual roaming it can realize the selection of tourist destination, the purchase of real estate and so on. The topic of this thesis is An Ancient Town in Virtual Roaming, which highlighters antique Chinese classical town.
Key words:virtual reality; unity 3D; optimzation; baking textures
1 引言
伴隨著網(wǎng)絡(luò)和計(jì)算機(jī)技術(shù)的發(fā)展,三維虛擬仿真技術(shù)在人們?nèi)粘I钪械膽?yīng)用已經(jīng)逐漸普及開來。建筑漫游是虛擬漫游的一個(gè)重要分支,通過三維軟件制作三維模型,然后將所制作的三維模型導(dǎo)入游戲引擎或者虛擬現(xiàn)實(shí)軟件中來實(shí)現(xiàn)相關(guān)的虛擬漫游功能,來實(shí)現(xiàn)計(jì)算機(jī)程序與體驗(yàn)者的交互。在國(guó)內(nèi),3D游戲引擎作為近年迅速崛起的一項(xiàng)技術(shù),種類繁多,呈百家爭(zhēng)鳴之勢(shì),本文選用的是Unity3D游戲引擎,來完成一個(gè)中國(guó)古典小鎮(zhèn)的三維漫游,使體驗(yàn)者通過漫游功能和交互體驗(yàn)來感受小鎮(zhèn)秀麗的自然風(fēng)光,并借此來向體驗(yàn)者宣揚(yáng)中國(guó)古代建筑文化,是體驗(yàn)者能夠更加了解中國(guó)古典文化。
2 開發(fā)流程分析與實(shí)現(xiàn)
2.1 虛擬漫游開發(fā)流程
三維漫游著重注意的應(yīng)該是體驗(yàn)者的體驗(yàn)感受,因此對(duì)三維漫游應(yīng)該具有以下功能:在體驗(yàn)者剛進(jìn)入虛擬漫游程序時(shí),鏡頭以一個(gè)固定的路徑與視角運(yùn)行,對(duì)古典小鎮(zhèn)進(jìn)行一個(gè)全景展示。要給體驗(yàn)者一個(gè)全景的感受,在半空中固定一個(gè)視角,使體驗(yàn)者可以在古典小鎮(zhèn)上空360度觀察小鎮(zhèn)。讓體驗(yàn)者可以在小鎮(zhèn)中自由行走、參觀,自由參觀古典小鎮(zhèn)中的美景。
根據(jù)三維漫游想要實(shí)現(xiàn)的功能,實(shí)現(xiàn)該系統(tǒng)需要經(jīng)過以下流程:包括素材收集、模型燈光材質(zhì)、界面的設(shè)計(jì)、腳本的編寫等一系列的過程,具體如圖1所示:
2.2 系統(tǒng)實(shí)現(xiàn)
2.2.1 場(chǎng)景實(shí)現(xiàn)
數(shù)字化建模是整個(gè)漫游動(dòng)畫中的第一步也是至關(guān)重要的一步,三維漫游所展現(xiàn)給體驗(yàn)者的就是數(shù)字模型的部分,體驗(yàn)者可以通過視覺來觀察三維模型的外形、材質(zhì)以及位置等來直觀的感受整個(gè)場(chǎng)景。三維模型也是之后進(jìn)行三維漫游創(chuàng)建的基礎(chǔ),對(duì)三維模型的創(chuàng)建要正確、簡(jiǎn)潔,否則在之后的工作中就會(huì)出現(xiàn)意想不到的錯(cuò)誤,導(dǎo)致工作無法繼續(xù)進(jìn)行,甚至從頭返工。下面在前期準(zhǔn)備的素材和模型的基礎(chǔ)上對(duì)場(chǎng)景進(jìn)行搭建。
首先是城鎮(zhèn)的地形模型。地形模型的創(chuàng)建比較簡(jiǎn)單,原本對(duì)地形的規(guī)劃如圖2所示,在進(jìn)行建模時(shí)發(fā)現(xiàn)如果按照規(guī)劃的進(jìn)行建模,那么場(chǎng)景的復(fù)雜度會(huì)遠(yuǎn)遠(yuǎn)增加,這樣會(huì)使系統(tǒng)的負(fù)荷遠(yuǎn)遠(yuǎn)增加,所以在建模時(shí)對(duì)地形模型進(jìn)行了簡(jiǎn)化建模,建模的步驟為畫線將地形的輪廓勾勒出來,然后轉(zhuǎn)換成為可編輯多邊形,進(jìn)行調(diào)整。
然后,對(duì)山地模型進(jìn)行制作。山地模型在3ds max軟件中制作需要?jiǎng)?chuàng)建一個(gè)平面,將平面的縱橫比調(diào)節(jié)的很高才能獲得比較好的效果,這樣會(huì)增加游戲引擎的負(fù)擔(dān),所以地形模型選擇在Unity游戲引擎中制作。進(jìn)入U(xiǎn)nity界面,點(diǎn)擊工具欄“GameObject CreatOther Terrain”創(chuàng)建一個(gè)Unity系統(tǒng)自帶地形,在此界面內(nèi),按照規(guī)劃對(duì)地形進(jìn)行編輯,并添加樹木、草地等地形對(duì)象。
模型的制作完成之后,要對(duì)模型進(jìn)行貼圖的繪制,在此即要用到Photoshop圖形編輯軟件和渲染出來的UVW模板,將在開始制作之前就收集好的素材,根據(jù)渲染的UVW模板的位置,將圖片處理為符合模型UVW的貼圖,將貼圖賦予模型。
2.2.2 漫游實(shí)現(xiàn)
首先,聲明Texture2D變量,數(shù)量根據(jù)自己的需求來定,這是Unity游戲引擎的GUI圖片自定義,我們可以通過這些變量將自己在外部制作的圖片導(dǎo)入U(xiǎn)nity中,使用這些圖片來作為自己的UI,提高顯示效果。
其次,我們要通過自定的變量和系統(tǒng)自定義的封裝函數(shù)來獲取運(yùn)行時(shí)屏幕的寬高數(shù)據(jù),并通過計(jì)算獲得比例,將比例值賦予自定義的屏幕數(shù)據(jù)和按鈕位置,來達(dá)到使UI自適應(yīng)屏幕的功能。
然后,編寫場(chǎng)景跳轉(zhuǎn)程序,通過加載Unity自帶的封裝函數(shù),來調(diào)整按鈕的位置,并通過函數(shù)來實(shí)現(xiàn)場(chǎng)景之間的跳轉(zhuǎn)。其中的自適應(yīng)屏幕代碼:
sW = Screen.width/sw;
sH = Screen.height/sh;
Screen.width-400*sW,Screen.height-570*sH,120*sW,120*sH
場(chǎng)景跳轉(zhuǎn)代碼:
if(GUI.Button(Rect(Screen.width-400*sW,Screen.height-570*sH,120*sW,120*sH),v_01)){ Application.LoadLevel("1"); }
在漫游實(shí)現(xiàn)過程中,需要添加一個(gè)固定視角的場(chǎng)景和一個(gè)可以自動(dòng)漫游的腳本,通過這兩個(gè)腳本實(shí)現(xiàn)以下功能:
1) 路徑動(dòng)畫展示
路徑動(dòng)畫是繪制一個(gè)路徑,將攝像機(jī)吸附在路徑上,并指定攝像機(jī)的目標(biāo),實(shí)現(xiàn)一個(gè)路徑動(dòng)畫展示。首先,通過Itween繪制一個(gè)路徑,將路徑調(diào)整到適當(dāng)?shù)奈恢?,并新建一個(gè)目標(biāo)物體擺放在適當(dāng)?shù)奈恢?。然后,通過編寫腳本,將攝像機(jī)吸附在路徑上,控制攝像機(jī)的速度,并為攝像機(jī)指定目標(biāo)物體。
iTween.MoveTo (this.gameObject,iTween.Hash("path",iTweenPath.GetPath("mypath"),"time",100,"movetopath",false,"easytype",iTween.EaseType.linear));
以上代碼為設(shè)定路徑動(dòng)畫的相關(guān)選項(xiàng),分別是獲取路徑、動(dòng)畫總體時(shí)間、是否從路徑起點(diǎn)開始、移動(dòng)類型,通過這幾個(gè)參數(shù)來設(shè)定路徑動(dòng)畫。
2) 固定視角展示
固定視角展示是通過腳本控制攝像機(jī)在固定的視角進(jìn)行旋轉(zhuǎn)觀賞,讓體驗(yàn)者在指定位置觀察小鎮(zhèn)全貌。
在Unity工程視圖中點(diǎn)擊右鍵導(dǎo)入U(xiǎn)nity工程包“Import Package Character Controller”。在工程試圖中選擇Character Controllers文件夾,里面包含一個(gè)第三人稱的角色控制和一個(gè)第一人稱的角色控制。在此,我們將第一人稱控制器拖放到Hierarchy視圖中去,第一人稱的預(yù)設(shè)物體就會(huì)出現(xiàn)在世界坐標(biāo)軸的原點(diǎn)位置,這樣可以減少因直接拖放到視圖中出現(xiàn)的錯(cuò)誤和產(chǎn)生的調(diào)節(jié)困難。
通過移動(dòng)將第一人稱控制器移動(dòng)到場(chǎng)景的上方,取消第一人稱的重力,通過腳本上的接口限制第一人稱控制器的旋轉(zhuǎn)角度。
3) 移動(dòng)視角展示
移動(dòng)視角展示為導(dǎo)入U(xiǎn)nity的第一人稱控制包,讓體驗(yàn)者可以在小鎮(zhèn)中自由漫游,體驗(yàn)小鎮(zhèn)風(fēng)景。移動(dòng)視角展示同樣需要導(dǎo)入一個(gè)第一人稱控制器,所以導(dǎo)入與添加和固定視角相同,不再贅述。
將第一人稱視角通過移動(dòng)工具調(diào)節(jié)至相應(yīng)的位置,對(duì)參與碰撞的場(chǎng)景物體添加面碰撞,選擇物體“Component Physics Mesh Collider”完成設(shè)置。
完成后的漫游系統(tǒng)及演示效果如圖3所示:
3 結(jié)束語
本文以Unity3D游戲引擎為基礎(chǔ),實(shí)現(xiàn)了具有基本漫游功能及簡(jiǎn)單場(chǎng)景設(shè)置的小鎮(zhèn)漫游系統(tǒng)。針對(duì)本系統(tǒng)實(shí)時(shí)性及逼真性進(jìn)一步改進(jìn)的考慮,今后的工作包括:地形匹配問題;基于遮擋裁剪技術(shù)的高效場(chǎng)景優(yōu)化問題;用戶交互問題等。
參考文獻(xiàn):
[1] 成國(guó)飛.獨(dú)立游戲開發(fā)者[J/OL].http://u3dpro.com.2011.
[2] 王琦. Autodesk 3ds Max 2010標(biāo)準(zhǔn)培訓(xùn)教材II[M].北京:人民教育出版社,2010.
[3] 吳波.3ds Max 2010從新手到高手[M].北京:中國(guó)鐵道出版社,2011.
[4] 程明智,王一夫.Unity游戲開發(fā)技術(shù)[M].北京:國(guó)防工業(yè)出版社,2012.
[5] Michelle Menard. Game Development With Unity[M].美國(guó):Cengage Learning,2011.
[6] 宣雨松.unity 3d游戲開發(fā)[M].北京:人民郵電出版社,2012.
[7] 王亞萍.淺析Unity3創(chuàng)建環(huán)境地形[J].計(jì)算機(jī)光盤軟件與應(yīng)用,2012(19).174-175.
[8] 王田,李昌菊.虛擬現(xiàn)實(shí)[J].藝術(shù)教育,20813(07).
[9] 安俊偉,亓東,劉帥.淺析虛擬現(xiàn)實(shí)技術(shù)沉浸性[J].教育教學(xué)論壇,2012(12).
[10] 崔蕾.虛擬現(xiàn)實(shí)技術(shù)及其應(yīng)用綜述[D].福建電腦,2008(05).