王莉莉 宋燕燕 童氿一
摘要:隨著計算機技術和網絡技術的高速發展,虛擬現實技術逐漸走進人們的日常生活。建筑虛擬漫游作為虛擬現實技術的一個重要分支,被廣泛應用于場館展示項目中。本文以綜合體育館為虛擬漫游場景,使用3D Max軟件制作三維模型,Unity3D引擎為開發工具,實現了綜合體育場館第一人稱虛擬漫游。
關鍵詞:虛擬漫游;體育館;Unity3D;第一人稱漫游
中圖分類號:S126 文獻標識碼:A 文章編號:1007-9416(2018)05-0089-03
1 引言
虛擬現實技術是一種利用計算機模擬產生場景,并能實現虛擬現實環境的計算機仿真技術。利用最新的計算機虛擬現實技術創作的三維虛擬環境較二維照片和視頻更直觀形象,更逼真,臨場感更強。傳統體育場館在宣傳上,僅僅只能通過網站圖片的形式,缺乏現實空間感受。場景虛擬漫游技術的實現,可以讓使用者產生身臨其境的感覺,還可以在場景中通過交互,實現場館預定、查看詳細功能等。本項目的研究具有較高的實際應用價值。
2 虛擬漫游系統及Unity3D引擎
虛擬漫游系統是一種能夠集視覺、聽覺、觸覺為一體的虛擬環境,能夠實時仿真虛擬空間,可從任意角度對虛擬對象進行瀏覽觀察,可與其中的對象進行交互的新技術。具有沉浸感、交互性、構想性等特點。在建筑設計、城鄉規劃、家具裝潢、場景展示等領域,游戲設計與娛樂行業應用廣泛。
Unity3D是由Unity Technologies開發的一款跨平臺綜合游戲引擎,能夠運行在Windows和Mac OS X操作系統下,可以發布游戲到Windows,Mac,Wii,iPhone,WebGL(需要HTML5)和Android等多種平臺。腳本語言簡單,支持各種插件,開發速度快,跨平臺性好,可以讓用戶輕松創建3D游戲、建筑可視化、三維動畫等類型的交互式內容。
3 綜合體育館系統設計
本文所實現的綜合體育館漫游系統主要利用三維建模軟件3DS Max完成場景和模型的建模,利用Unity3D引擎來完成系統的漫游和交互。
3.1 系統總體設計目標
綜合體育館漫游系統主要包含乒乓球場、羽毛球場和籃球場所、觀眾席看臺四部分。使用者可通過鍵盤W、A、S、D鍵來控制位移,通過鼠標控制視角,可瀏覽場館任何區域。可查看場館預定信息、進行預定操作、查看操作說明和退出系統等。
3.2 系統功能模塊設計
本系統主要包括建模模塊、漫游模塊和交互模塊,功能結構圖如圖1所示。建模模塊主要實現綜合體育館整體建模和三個運動場區的建模;漫游模塊主要實現第一人稱視角位移和視角控制,碰撞檢測;交互模塊主要實現查看預定信息、預定場館、查看操作說明及退出系統功能。
4 綜合體育館漫游系統實現
4.1 建模模塊實現
本系統建模主要通過3DS Max軟件建模、貼圖、渲染、烘焙完成。主要包括體育館整體建模和三個運動場區的建模。在將模型導入Unity3D引擎前對模型面數進行了優化,將多個次要對象通過布爾運算合成一個對象,減少Unity3D的渲染負擔,檢查場景中的孤立點和面,適當刪除,調整貼圖模式,減少燈數。通過此類優化措施,提高系統運行效率。
(1)體育館整體場館建模。場館外觀為灰色,整體類正方形,有層次感,側面為透明玻璃。如圖2所示為導入Unity3D后的整體場館外觀圖。館內墻壁采用灰色吸音材料,可以隔絕噪音,保證比賽不受雜音影響。制作時,新建一個長20,寬5,高5的長方體,然后復制粘貼出多個同樣的長方體,再進行堆疊,將體育館模型構建出來。如圖3所示為導入Unity3D后的場館室內效果圖
(2)乒乓球場臺建模。乒乓球球臺按照國際標準設計,乒乓球球桌臺面尺寸為2740×1525mm,臺高為760mm,網寬1.83米,網高0.1525米。本系統中采用綠色桌面。如圖4所示為乒乓球球臺模型圖。
(3)羽毛球場建模。羽毛球球場按照國際標準尺寸設計,球場為長方形場地,長度為13.40m,場地寬為5.18m設計為單打場地。球場上各條線寬均為4cm,球場界限用白色畫出。羽毛球球網長6.10m、寬760mm,網孔大小在15-20mm之間,網的上沿有75mm寬的雙層白布。網柱高1.55m,兩根網柱分別立在雙打場地邊線的中點上。球網中部上沿離地面為1.524m,球網兩端高為1.55m。如圖5所示為羽毛球場模型圖。
(4)籃球場建模。籃球球場按照國際標準尺寸設計,整個籃球場地長28m,寬15m。籃圈下沿距地面3.05m。線條:寬度為5cm. 球場界線距觀眾席2m。中線向兩側邊線外各延長15cm。罰球線與端線平行,它的外沿距離端線內沿5.80m;這條線長為3.60m。罰球區是以罰球線中點為圓心,以1.80m為半徑,向限制區外畫出一個半圓區域,限制區內的半圓畫成虛線。罰球區中第一條線距離端線內沿1.75m,第一位置區的寬度為0.85m,并且與中立區域的始端相接。中立區域的寬度為0.40m,第二位置區與中立區域相鄰,寬度為0.85m,第三位置區與第二位置區相鄰,寬度也是0.85m。所有區域線條長度為0.10m,并垂直于罰球區邊線的外側。中圈畫在球場的中央,半徑為1.80m。三分投籃區距邊線1.25m,從端線引出兩條平行線,半徑為6.25m(量至圓弧外沿)的圓弧(半圓)與兩平行線相交圓心距端線內沿中點的距離為1.575m。如圖6所示為籃球場模型圖。
(5)觀眾席看臺建模。觀眾席以NBA聯賽中球館的觀眾席為模板進行設計,分為三層。第一層為觀眾椅,椅子高度為410mm,椅子座位寬度為200mm,共三排。第二層和第三層都是階梯型座位,每級階梯的座位間由隔板隔開,每級階梯高為400mm,共14級階梯。如圖7所示為觀眾席看臺模型圖。
4.2 漫游模塊實現
首先,在Unity3D中新建一個工程文件,自帶一個主攝像機和一個自然光。然后,將制作好的模型導入Unity 3D,將制作的場景拖入制作窗口。
(1)第一人稱漫游位移控制功能實現。首先,在場景中添加一個圓柱體,代表用戶。將主攝像機設定為跟隨圓柱體移動,通過控制場景中圓柱體的位移和攝像機的轉到,來實現用戶的位移和視角。通過代碼設置了向前行走、向后行走、橫向移動和跑動的速度,并對跳躍的高度進行了設置。控制第一人稱向前位移和向左位移的關鍵代碼如下:
if (Input.GetKey(KeyCode.W)) //設置鍵盤上的“W”鍵控制第一人稱視角向前移動
{ float x = Mathf.Sin(transform.eulerAngles.y * Mathf.Deg2Rad) * distance;
float z = Mathf.Cos(transform.eulerAngles.y * Mathf.Deg2Rad) * distance;
transform.Translate(new Vector3(x,0,z), Space.World); return true; }
if (Input.GetKey(KeyCode.A)) //設置鍵盤上的“A”鍵控制第一人稱視角向左移動
{transform.Translate(new Vector3(-distance, 0, 0)); return true;}
(2)第一人稱漫游視角控制功能實現。第一人稱漫游視角控制,主要通過攝像機的視角轉動設定為跟隨鼠標的移動而移動。如圖8所示為第一人稱視角漫游場景圖。視角控制的部分關鍵代碼如下:
public Camera cam;// 定義相機
public MovementSettings movementSettings = new MovementSettings();//定義相機視角移動
public MouseLook mouseLook = new MouseLook();// 跟隨鼠標移動而移動
public AdvancedSettings advancedSettings = new AdvancedSettings();
(3)碰撞檢測功能實現。碰撞檢測是虛擬漫游系統的重要功能,其作用是用來確保兩個不可穿透的對象互相不能共享相同的空間。首先,為圓柱體添加剛體,再通過為所有模型添加碰撞檢測Mesh Collider屬性來實現。
4.3 交互模塊實現
(1)查看預定功能實現。首先,新建一個button,將其命名為 “chakan”,將按鈕的文本名稱改為 “查看預定”。然后在按鈕上方新建一個Text文本框“yuding”。新建一個c#文件“mingdan”,通過代碼設置文本框初始不可見,編寫代碼,設置點擊按鈕后,如果文本框是顯示狀態則將其隱藏,如果文本框是隱藏狀態則將其顯示,然后將腳本拖到“chakan”的屬性欄中的Button(Script)中,再將拖到Button(Script)中的腳本文件拖到OnClick中,并設置點擊按鈕后執行mingdan.sendMessageUpwards。如圖9所示為查看場館預定功能圖。部分代碼如下:
void Start()
{ga=GameObject.Find(ganame);
ga.active=false; //設置開始可見性}
void OnClick() //控制顯示和隱藏的方法
{if (ga.active==true)//文本此時顯示
{ga.SetActive(false);//點擊后隱藏}
else if(ga.active==false)//文本此時隱藏
{ga.SetActive(true);//點擊后顯示}}}
(2)預定場館功能實現。首先,添加一個button和一個Input Filed。分別改名為“yuyue”和“yudingxinxi”,button控件的文本名稱改為“場地預定”。新建一個c#文件“xinxishuru”,編寫代碼使在Input Filed中輸入的內容能在查詢預定的文本框內顯示,將腳本拖到Input Filed屬性欄中的On Value Changed(String)中,設置對應的Text.text。
(3)操作說明功能實現。首先,先新建一個button,命名為“caozuo”,按鈕文本名稱改為“操作說明”。然后在button上方新建一個Text文本框“kongzhi”。通過代碼設置文本框初始不可見,新建一個c#腳本“shuoming”,編寫代碼,設置點擊按鈕后,如果文本框是顯示狀態則將其隱藏,如果文本框是隱藏狀態則將其顯示,然后將腳本拖到“caozuo”的屬性欄中的Button(Script)中,再將拖到Button(Script)中的腳本文件拖到OnClick中,并設置點擊按鈕后執行shuoming.sendMessageUpwards。
(4)退出系統功能實現。首先,先新建一個button控件,改名為“guanbi”,文本名稱改為“退出”。然后新建一個c#腳本,編寫好代碼后保存,將腳本拖到Button(Script)中,再拖到OnClick中,并設置執行tuichu.OnClick。退出漫游部分代碼如下:
public void ontuichu()
{Application.Quit ();// 退出漫游}
5 結語
虛擬現實漫游技術是一項應用廣泛的計算機綜合性技術,它利用計算機生成逼真的虛擬環境,通過漫游和交互讓用戶產生臨場感。本文使用3DS Max和Unity3D工具實現了綜合體育館虛擬漫游系統,系統包括建模、漫游、交互三個重要組成部分,采用碰撞檢測技術保證了系統的真實效果。系統設計效果良好,場景逼真。
參考文獻
[1]范國華,等.基于Unity的虛擬校園漫游系統的設計與實現[J].安徽農業科學,2016,44(1):325-327.
[2]曲寶,等.基于Virtools的虛擬家居漫游系統的設計與實現[J].計算機工程與科學,2009.12:130-133.