劉霞 李曉華
摘 要
本文以真實校園(布局設計、交通、景觀、教學及生活環境)為藍本,實現訪問者以第一人稱視角進行虛擬校園漫游,訪問者可通過W、A、S、D按鍵控制漫游路徑,增加了系統的交互性。
關鍵詞
虛擬漫游;Unity3D;3DsMax;虛擬校園
中圖分類號: TP391.9 ? ? ? ? ? ? ? ? ? ? 文獻標識碼: A
DOI:10.19694/j.cnki.issn2095-2457 . 2020 . 06 . 85
0 引言
虛擬現實技術是綜合計算機圖形技術、人機交互技術、電子信息、仿真技術及立體顯示技術等多種技術的實用技術。它通過模擬虛擬環境從而給人沉浸感,如同進入真實世界,同時該技術具有交互性,用戶與虛擬環境可以相互作用。
虛擬漫游系統[1]是虛擬現實(Virtual Reality,簡稱VR)技術的運用,以對象的實際數據為基礎,創建一個虛擬的環境,讓用戶有身臨其境的沉浸感,具有逼真性和實時交互性。虛擬校園漫游系統是數字校園建設的基礎,可以為學校樹立良好的形象,提高學校的知名度,宣傳校園文化,還可以作為校園規劃的輔助工具。虛擬校園漫游系統以真實校園(校園布局設計、交通、景觀、教學及生活環境)為藍本,實現訪問者以第一人稱視角進行虛擬校園漫游,訪問者可通過W、A、S、D按鍵控制漫游路徑,增加了系統的交互性。
1 主要開發工具
3Dsmax 3Dsmax[2]是Autodesk公司開發的三維動畫制作軟件 ,它是當今世界上主流的三維建模、三維動畫制作及渲染軟件,它采用幾何建模技術,逼真度高,操作簡單,被廣泛應用于制作室內外效果圖、角色動畫、虛擬現實、游戲開發等領域。它具有強大的渲染功能,渲染速度快、效果好。
Unity3D U3D是Unity Technologies開發的一款多平臺的綜合型游戲開發工具,通常用來制作動漫、三維游戲、建筑漫游等,它可以和3Dsmax無縫對接,并且可以將場景文件打包成可執行文件。它有豐富的內置資源,包括自帶的植物、水體、天空盒、粒子效果等。它主要用來完成場景搭建、漫游交互體驗等。
2 開發流程
首先,結合校園平面規劃CAD圖及實地測量、取景,得到實際地理數據和圖片;以此為參考,在3dmax中建立其對應的三維模型;再將這些模型以兼容的格式導入到交互軟件Unity3D中進行貼圖、場景構建,然后實現交互漫游;最后導出exe文件,如圖1。
2.1 數據采集、處理和建模
場景建模包括建筑物建模和環境建模,場景所需的空間數據可以通過校園平面規劃CAD圖、實地測量和采集圖片獲取。本文的信息采集過程如下:
(1)學院辦公室協助提供學校早期的平面規劃CAD圖,獲得場景的分布和位置信息等主要數據;
(2)實地測量學校后期建設的建筑物,獲取它的外形信息,如長、寬、高度數據;
(3)對各建筑物進行拍照,用Photosho進行處理留作貼圖和材質用;
(4)收集校園主要植物信息,確定種植的樹種。
(5)使用3DsMax進行建筑物的建模(環境建模部分包括樹木、草坪和天空,這些選用U3D自帶的模型),將其發布成FBX格式的文件。
2.2 模型導入U3D
具體步驟:
(1)運行U3D,創建工程項目。
(2)U3D自帶的Tree、Water(Basic)、Water(Pro Only)快速創建虛擬環境,使用Create Terrain創建并編輯地形;使用Skyboxes完成天空的繪制。使用Direction Light創建燈光。
(3)將各類建筑物模型的.FBX格式文件導入到U3D中,在U3D中指定模型的材質和貼圖。
(4)對天空、地面、墻壁和樓梯添加碰撞組件,避免漫游時出現穿越剛體的錯誤效果。
3 系統交互設計
3.1 漫游功能的設計
人機交互技術是通過計算機輸入、輸出設備,以有效的方式實現人與計算機對話的技術。本系統的人機交互方式是讓用戶通過W、S、A、D按鍵控制漫游路徑。關鍵代碼如下:
Var Speed=25;
function Update () {
//鍵盤漫游
if (Input.GetKey (KeyCode.A)) {
transform.Translate(-Speed*Time.deltaTime,0,0, Space.Self);}
if (Input.GetKey (KeyCode.D)) {
transform.Translate( Speed* Time.deltaTime,0,0,Space.Self);}
if (Input.GetKey (KeyCode.W)) {
transform.Translate(0, 0, Speed*Time.deltaTime, Space.Self);}
if (Input.GetKey (KeyCode.S)) {
transform.Translate(0,0,-Speed*Time.deltaTime,Space.Self);}
3.2 GUI界面交互設計
當單擊“開始”時,能夠進行場景的跳轉,進入場景,實現漫游。當單擊“退出系統”時會自動退出程序。
部分代碼如下:
Function OnGui(){
GUI.Label(Rect(270,140,400,200),str);
If(GUI.Button(Rect(240,300,100,25),”開始”))
{Application.LoadLevel(“laizhiyuan02”);}
If(GUI.Button(Rect(550,300,100,25),”退出系統”))
{Application.Quit();}
}
3.3 碰撞檢測技術
碰撞檢測是模擬現實中的人或物體在遇到障礙物時發生的本能反應。當漫游角色碰到墻壁、大地、天空等物體時,不能繼續向前,以此保證漫游的逼真性。U3D支持碰撞檢測,方式有兩種,一種是利用碰撞器,另一種是利用觸發器。使用碰撞器檢測,發生碰撞的物體之間會有碰撞模擬,會產生反彈或停頓。有些情況只需要檢測物體之間是否發生接觸,不需要產生碰撞效果,這種情況下可以使用觸發器進行接觸檢測。
碰撞信息檢測:
Void OnCollisionEnter(Collision c)
{Debug.Log(c.gameObjet.name);}
觸發信息檢測:
void OnTriggerEnter(Collider collider){Debug.Log("starting”);}//開始接觸
void OnTriggerExit(Collider collider){Debug.Log("ending");}//接觸結束
void OnTriggerStay(Collider collider){Debug.Log("continuing");}//接觸持續中
4 軟件優化
對該漫游系統的可執行文件進行了黑盒測試,系統運行有些緩慢。分析原因主要是因為電腦硬件配置較低,這對模型數量和模型復雜度提出了要求。在保證逼真度的前提下,減少了部分環境建模,同時在建模過程中盡量減少模型的分段數和迭代次數。在U3D平臺上,對燈光進行優化,U3D有頂點燈光和像素燈光兩種渲染方式,頂點燈光只計算游戲模型的頂點照明和通過插值計算得出模型表面的所有光線;像素燈光需要對屏幕每個像素進行計算,耗費資源。優化程序,刪除腳本中不需要的方法;除了必要的地形和建筑,盡量縮小視角范圍;常用的變量或方法定義為全局靜態變量或方法;盡量少地使用除法和模運算。
5 結論
隨著虛擬現實技術的發展,今后的軟件系統會更加友好,如何增加用戶的沉浸感、增強系統的交互性,是一個很有價值的課題。該系統實現了碰撞檢測和虛擬漫游,通過該項目的歷練可以促進對Unity3D更深入地掌握,而Unity3D的強大功能將會帶領我們進入一個欣欣向榮的、生機蓬勃的、充滿挑戰的新領域。
參考文獻
[1]https://baike.baidu.com/item/虛擬漫游/8458400?fr=aladdin.
[2]時代印象.3dsMax2016完全自學教程[M].北京: 人民郵電出版社,2017年:(1-10頁).
[3]https://baike.baidu.com/item/Unity3D/3064002?fr=aladdin.
[4]https://www.cnblogs.com/520YAOER/p/9709693.html.
[5]https://gameinstitute.qq.com/community/detail/118653.