中國傳媒大學南廣學院 周 靈 周曉梅 郝 婧
一種基于Unity 3D的場景交互漫游
中國傳媒大學南廣學院周靈周曉梅郝婧
本論文闡述了基于Unity3D為虛擬漫游系統開發平臺,以3D Max軟件來實現模型制作和材質賦予,討論并實現了虛擬現實在室內虛擬漫游交互系統中的關鍵性應用技術。在Unity3D中實現了鍵盤操控人物漫游、鼠標鍵移動視角、替換材質及顯示對話框的相關技術。在現實家裝的基礎上,通過模擬仿真構建具有沉浸感和交互性的虛擬環境。虛擬漫游系統不僅能為裝修設計行業提供全新的一種規劃方式,也提供了全新的展現與交互感受。
Unity3D;虛擬建模;場景漫游
虛擬漫游系統是虛擬現實技術(VR)較為重要的一部分。依據研究結果,Unity3D確實是目前虛擬現實系統的最專業的引擎,用它來開發的虛擬場景,有著更佳的用戶反饋。
本研究在虛擬場景漫游中實現了鍵盤操控人物漫游、鼠標鍵移動視角、替換材質及顯示對話框的相關技術。在現實家裝的基礎上,通過模擬仿真構建具有沉浸感和交互性的虛擬環境。虛擬漫游系統不僅能為裝修設計行業提供全新的一種規劃方式,也提供了全新的展現與交互感受。
虛擬漫游交互系統根據應用層面,可以分為:僅供參觀者瀏覽的簡單虛擬家裝環境和以第一人稱為視角,加入一系列碰撞功能,以虛擬現實技術為基礎建立的虛擬現實漫游系統。在開發虛擬漫游交互系統的過程中,首先對系統進行需求分析,設計各種模型可能的交互行為;然后采集建模需要的有關數字化信息,利用3D Max制作3D仿真模型,尋找合適的平臺來實現漫游。通過實驗幾款軟件的交互功能做了比較,最終確定使用Unity3D來實現交互式的虛擬漫游系統,模擬人物在建筑內部行走、參觀建筑內家具行為以及為模型更換材質等。虛擬漫游交互系統開發主要分為以下幾個步驟:基礎數據的采集、資料的收集與整理、三維模型的建立、三維模型的優化、材質與貼圖設計、導入到 Unity3D、結合Javascript語言進行場景美化及交互式虛擬漫游系統的實現。整體設計使虛擬場景的全貌與局部、大場景與小細節相結合。本論文的研究重點是虛擬漫游功能在Unity3D 中的設計與實現。系統總體設計流程圖如圖1所示。

圖1 系統設計流程圖
三維場景的設計與實現主要從三維場景的空間表示、三維物體的模型表示、三維場景的視覺表示、三維模型的輸出和燈光布置五個部分進行分析,通過這幾個部分把需要做的內容展現出來。
3.1三維場景的空間表示
虛擬漫游交互系統,最初的空間表示開發分為三個階段:精確建模范圍、整體框架布置和墻體模型構建。首先,精確建模范圍主要用到的方法是測量和換算。為了更真實的表現真實世界,精細建模所表現的細節越多越好,綜合程度越低越好,但這會帶來龐大的數據量。同時,表現建筑的細節的另一有力手段是精細貼圖,所以模型的精細程度直接影響整體建筑的真實感。除了建筑模型以外,結構≥0.5m的附屬模型也值得注意,例如窗架、電視墻、圍墻、踢腳線、屋頂結構等。另外,需精細建模的建筑模型的外形和紋理必須與實際建筑保持一致。
精確模型后,開始布置家裝的整體框架。由于整體框架不算復雜,這里選擇直接在3D Max三維建模軟件中進行1:1繪制,里面的環境基本還原實際中的家庭裝修環境,首先在建立新文件,選擇文件新建命令,打開新建場景對話框,指定要保留的對象的類型。
建模的第三階段是建造分體模型。首先為墻體放置窗戶和門框。首先根據實際尺寸拉出一個長方形,再選擇基本幾何體的下拉菜單,選擇復合對象,單擊布爾拾取操作對象B,再單擊長方形,墻體上就扣出了一個符合目標要求的窗戶洞。扣除窗戶洞后,在幾何體菜單中選擇窗選項,此時有遮蓬式窗、平開窗、固定窗等六種窗戶樣式可以選擇。依據整體大批需要,這里選擇固定窗。在前視圖中拉出固定窗,修改參數,拖動模型到墻體的窗洞上即可。門扇的制作方法相同。空間表示圖見圖2。

圖2 空間表示圖

圖3 人物模型動畫
3.2三維物體的模型表示
對于房間內部模型的設計,根據工藝不同主要是分為四部分,家具類,裝飾類,布藝類和電器類。家具類的搭建基本為大面積的立方體的搭建和細節的刻畫;裝飾類的構造主要依靠復雜的幾何圖形及修改器的大量應用;布藝類的制造主要依靠可編輯多邊形中點和面的細致調整,使布藝品表面有凹凸不平感,其目的是方便貼圖更生動的依附于模型上;電器類的構造最為復雜,一般為五到八個復雜的小模型實現,目的是為了增加模型的真實感。但依據工藝的分類也不是絕對分類,例如床的模型制作,床頭和床架運用到的是家具類的搭建方法,而床上用品(被罩、枕頭、抱枕)則運用到的是布藝類的建造方法。
3.3三維場景的視覺表示
世界上所有的事物都利用它表面的顏色、光線強度、紋理、折射率和反射率來表現各自的特性。所以三維場景的視覺表示就主要體現在模型賦予的材質上,材質更貼近實際,貼圖后模型才會更加逼真。利用3Ds Max材質球中明暗器基本參數中的各向異性(phong,strauss,blinn,oren-nayar-blinn)對高光、顏色、反射率、折射率等參數進行設置,即可得到質感豐富的材質。各向異性其實就是人們通常所理解的反光,也叫陰影類型。
在本設計中,模型的材質主要分為瓷器材質,金屬材質,玻璃材質和木紋材質四個部分。瓷器材質主要運用于碗碟、洗臉盆、馬桶和裝飾品中;金屬材質主要運用于器皿、家具邊角和電器中;玻璃材質主要運用于鏡面、茶幾、相框和酒具等透明材質的模型中;木紋材質主要運用于地板、天花板、床頭柜等木質結構的模型中。
3.4三維場景的燈光布置
光有三個基本特性:光強、方向和顏色。光強是指強度與到光源距離的運算關系按照平方反比定律。即假如點b距離光源的距離為2x,點a距離光源的距離為x,那么點b所接收到的強度就是點a的1/4;方向是指根據光源與物體的相對位置,光源位置可分為四類:(1)正面光:會產生一個沒有影子的影象,深度和形狀是靠光影的排列表現出來的,會產生平面的二維視覺感受,也稱為平光。(2)45度側面光:這種光形態中有豐富的影調,由深度而產生立體的效果。(3)90度側面光:這種照明通常用于戲劇性的場景,有著明暗的強烈對比,影子修長而具有表現力,物體結構十分明顯,被稱做“質感照明”。(4)逆光:光線從被攝對象身后射出,正對攝像機,在明亮的場景下會呈現出被攝對象深色的剪影,這種高反差影象簡單又具有表現力;顏色:包括自然光照明顏色和人工光照明顏色。
本場景中的燈光布置為了更好地表現出場景模型的紋理效果,分別放置了主光和輔光。布置燈光的過程,為防止燈光效果疊加造成混亂,選擇逐步添加燈光,這樣既可以清楚地明白每一盞燈光對場景的作用,也能避免添加多余的燈光而導致不需要的效果和更多的渲染時間。
3.5三維模型的輸出
通過3D Max建立了場景與場景中的模型后,將要把模型導入Unity3D。Unity支持從大多數3D軟件中導出的模型文件,可讀取的文件類型有.FBX/.dae/.dxf等格式文件;同時還支持.mov/.avi/.asf/. mpg/.mpeg等視頻格式,將以上格式的文件添加到unity工程時,這些文件都將自動導入并轉化格式為oggtheora;若導入的文件為.aiff/. wav/.mp3等格式的音頻文件,將在Unity中轉化為oggvorbis。本作品中全部為模型文件。先打開渲染場景對話框,設置文件的輸出尺寸,然后在渲染輸出中選擇文件的保存路徑,為了防止Unity中讀取錯誤,這里要注意路徑中所有文件夾必為英文。選擇輸出格式,設置為.FBX,然后單擊渲染,即可輸出模型。
場景交互系統的實現體現在人機交互上,而人機交互的實現主要依靠JavaScript語言在Unity3D中實現。主要分為角色動作功能、漫游視角功能、模型碰撞功能、更換貼圖功能四個部分。
4.1角色動作功能的實現
虛擬場景漫游交互系統的漫游功能主要依靠人物模型在場景中行走實現,首先導入人物模型.FBX文件,模型自帶擺動動畫,分為行走和休息兩部分。選中對象“Girl01”找到Inspector面板,勾選Import Animation選項,在Clips面板下截取想要表現的模型動畫的片段,這里分別截取了行走動作的動畫和行走停止動作的動畫。接下來需要實現人機互動功能,可以通過鼠標或鍵盤控制任務。在Assets文件下找到code文件夾,新建名為people.js文件為人物模型編寫程序。聲明變量和對象,控制動畫速度,同步渲染時間,在場景中找到名為“Girl01”的對象。
保存人物動畫程序,將此程序文件拖拽到人物模型上,即將這段動畫程序賦給人物模型。試運行工程,按鍵盤WASD可控制人物在場景中進行相對位移,停止操控時人物呈現休息狀態。人物模型動畫見圖3。
4.2漫游視角功能的實現
漫游視角功能核心內容在于攝像機的程序編寫。其功能體現在按 W、A、S、D 鍵,人物向前、左、右、后移動時攝像機跟隨視角變化,看到不同的場景。在此場景中件攝像機置于人物模型頭部,選用Frustum Culling(平接頭體剪裁),可以使超過人物頭頂部分的物體不顯示。攝像機視野角度為45度,選擇透視投影。跟隨距離為5,高度1.2,另外要為物體添加剛體屬性,賦予物體質量、阻力和角阻力,再添加重力防止人物發生碰撞后發生浮動。
4.3模型碰撞功能的實現
模型之間或模型與墻壁之間使用Box Collider進行碰撞檢測。此設計中為每個模型、墻體、門框都使用了Box Collider技術。門框和餐廳處墻體由于是結構復雜的整體,所以使用基于網格的碰撞檢測,因為若對門框進行Box Collider碰撞檢測,人無法通過。
在Unity3D中集成碰撞檢測模塊,當角色靠近被碰撞物體時,系統根據碰撞檢測算法檢測該物體的高度,如果被碰撞物體的高度低于預設高度則人物模型可以通過,反之,模型將會被擋住,如圖4所示碰撞檢測原理圖。
本系統的測試主要是調試設計的代碼和功能,對作品進行分模塊的調試運行,檢驗是否有錯誤發生;檢測無誤后,方可輸出為.exe文件,以方便用戶瀏覽,并有效避免設計被二次修改,經檢測,本系統能滿足家裝虛擬仿真的需求。未來可以在系統適時更新、虛擬家裝系統的細節展示設計和體感漫游技術方面做更深入研究。

圖4 碰撞檢測原理圖
[1]卞峰,江漫清,桑永英,等.虛擬現實及其應用進展[J].計算機仿真,2007(6):1-4.
[2]江河.虛擬現實結合交互式多媒體學習設計研究[J].攀枝花學院報,2010,27(6):21-25.
[3]許微.虛擬現實技術的國內外研究現狀與發展[J].現代商貿工業,2009(2):279-280.
[4]林深華,范志尚,蔣建兵等.基于Android平臺Unity3D游戲設計與實現[J].企業科技與發展,2013(10):40.
[5]倪樂波,戚鵬,遇麗娜,等.Unity3d虛擬展示技術的研究與應用[J].數字技術與應用,2010(12):54-55.
周靈(1984—),江蘇常州人,博士研究生,講師,主要研究方向:數字媒體技術、教育技術。
江蘇高校哲學社會科學研究項目“嬗變與重構:媒介融合時代大學生媒介素養培養模式研究”(2015SJD324); 2016年中國傳媒大學南廣學院校級科研培育項目“翻轉課堂理念下的教學模式改革實踐研究”(2016KYPY052);江蘇省高校自然科學研究項目“云存儲在校園媒體資產管理系統中的關鍵技術研究”(14KJD520011)。