朱錦輝

摘 要:該文從室內裝飾教學需求出發,以毛坯房尺寸仿真系統開發為題,介紹了FLASH、Unity3D等開發方案執行思路并對方案的優缺點進行了分析。其中詳細介紹了Unity3D方案的研發過程。
關鍵詞:室內裝飾 仿真 FLASH Unity3D
中圖分類號:TU7 文獻標識碼:A 文章編號:1674-098X(2013)03(c)-00-02
近年來,房地產行業持續升溫,與其密切相關的室內裝飾行業也受到了帶動,人才需求不斷增加。在這樣的背景下,很多學校都根據市場需求開設了室內裝飾專業,以培養更多專業人才輸送給市場。在教學執行過程中,最讓教師頭痛的是如何提高學生對施工現場的感性認識。
由于安全、管理、交通等問題,讓學生親臨施工工地學習存在很大的執行難度。與室內裝飾設計情況類似,建筑施工專業同樣遇到工地現場教學的困難,而較為普遍的解決方法就是采用數字仿真進行教學。通過數字仿真,學生可以對工地現場有更深入的了解,而且可以親自動手進行仿真操作,學習積極性得到了提高。
然而,市場上大部分仿真系統都是針對建筑施工專業的,專門針對室內裝飾的仿真系統基本還是一片空白,有見及此,筆者作為專業教師就這方面進行了深入探討及實踐,希望開發出適合室內裝飾專業教學的仿真系統。
從室內裝飾執行流程上看,施工現場主要涉及尺寸度量、定位、施工、驗收等幾大環節,作為數字仿真系統的探索性開發,筆者選擇了毛坯房尺寸度量作為主題,這主要是因為尺寸度量有一定的互動性,動作重復性較高,研發工作量適中。
把毛坯房尺寸度量作為開發主題后,下一步就是圍繞主題擬定開發要求。作為仿真系統的開發,首先必須關注其仿真度,如果不能讓學生產生身臨其境的感受,就失去了開發的意義。第二,要具備良好的交互性。
由于毛坯房尺寸度量是一個全屋游走的過程,因此仿真課程必須支持實時漫游,且必須支持人機交互。第三,仿真系統能夠支持度量空間的持續更新,讓學生可以不斷接觸不同空間的尺寸度量過程。第四,具備擴展功能,如果不能支持持續的修改,系統很快就失去使用價值,最終被淘汰。第五,從仿真系統的推廣來看,要安裝方便,盡量做到直接復制使用,如果能支持在線使用更好。第六,要有良好的教學設計,操作簡單明了。
明確了開發要求后,下一步就是根據要求挑選研發工具。挑選過程中,筆者對不同軟件進行了深入了解及對比,還選擇部分軟件制作了案例,具體情況如下。
1 圓方室內裝飾設計系統
圓方是專門針對室內裝飾設計而開發的以CAD為基礎的系統,其優點是空間構建方便并內置了大量家具模型,可以輕松制作漫游動畫,效果真實。可惜圓方在漫游過程中不能進行尺寸度量,且漫游只限于動畫,不支持實時漫游,因此并不適合作為尺寸度量仿真系統的開發工具。
2 草圖大師
草圖大師(SketchUp)具備優越的平面圖向立體空間轉換的性能,且能輕松導入各種家具模型,空間構建便捷。草圖大師支持立體空間下的尺寸度量,遺憾的是,其只支持固定路徑漫游,且只能在預先設定的點進行停留并以固定角度觀察,雖然可作為一種解決方案考慮,但并沒有從根本上解決漫游及尺寸度量的問題,且軟件所制作場景仿真度不高,故仍需尋求進一步的解決方案。
3 FLASH
FLASH是網絡上盛行的矢量動畫制作軟件,由于支持程序腳本嵌入,固其拓展性較強,可根據使用者的需要提供不同的解決方案。
盡管作為二維矢量動畫開發工具而存在,但實際上FLASH可以通過加入腳本使其獲得三維展示能力,俗稱Papervision3 d(效果像使用紙板進行圍合)。
遺憾的是,網上可找到的資源一般僅限簡單的360全景瀏覽,即站在空間內部環視,不能移動也不能進行其他交互操作,雖然存在二次開發的可能,但需要具備FLASH專業編程能力,故此解決方案暫不具備執行性。
筆者根據FLASH的特點,擬定了其他的解決方案。簡單來說,就是在3 dSMAX等三維軟件中建立模型,把毛坯房各個區間的環視過程渲染成圖片序列并導入FLASH,再通過圖片序列播放模擬360全景瀏覽效果,由于每個視覺實際上只是一幅靜態圖片,所以可以在圖片中放置一些預制度量點,這些預制點嵌入了尺寸度量的腳本,并包含了點的三維坐標,度量時,只要依次點擊不同的度量點,就可以獲得所需要的尺寸。
相對于Papervision3 d,此解決方案中的腳本編寫難度要低得多,且度量預制點間的腳本是一致的,無需逐一編寫。這樣一來,研發人員實際上只需在圖片中相應位置放置預制點并輸入對應的三維坐標,即可獲得尺寸度量功能(圖1)。
雖然這樣解決了尺寸度量及仿真效果的問題,但其缺點也是顯而易見的。
首先,由于圖片序列只涉及單個空間的環視過程,不涉及空間的過渡,所以毛坯房區間之間只能進行跳轉,不能實現真正的漫游。其次,制作一套空間需要渲染大量圖片,以一個兩房一廳的毛坯房為例,加上廚衛合共5個區間,為了實現平滑過渡,對于某一區間的環視效果,一般每10度渲染一幅圖片,即一個空間需要渲染36幅圖,一套毛坯房需要渲染180幅圖,如果這些圖片都要求達到高仿真度的話,那么單是進行圖片渲染就需要耗費大量時間了。另外,整個仿真系統需要放置大量預制度量點,其工作量也相當大。更糟糕的是,一旦需要更換度量空間,以上工作都要重新執行,這樣系統的持續開發及實用性就大大降低了。
盡管工作量大,但使用圖片序列導入FLASH進行毛坯房尺寸度量仿真系統開發的確能在一定程度上解決漫游、實時尺寸度量、高仿真等問題,且便于通過網絡進行推廣,故仍可作為保留方案進行考慮。
4 Unity3D
Unity3D是一款網絡三維游戲開發工具,近年來在國內慢慢普及,一些公司更以其為核心承擔了各類教學仿真虛擬軟件的開發,筆者在接觸該軟件后逐漸深入了解,發現該軟件十分適合進行室內裝飾仿真系統的開發,這主要是由于軟件本身就是針對三維游戲制作而存在的,具有良好的三維表現能力、交互能力、支持物理引擎。更令人驚喜的是,由Unity3D輸出的成品體積細小,只要通過安裝一個簡單插件就能流暢地在網絡上運行,對教學推廣十分有利。
雖然在專業領域已經獲得廣泛應用,但作為游戲開發工具,Unity3D作為業余軟件并不普及,市面上已出版的相關教材也很少。盡管如此,對于具備室內裝飾專業背景、普遍掌握3 dSMAX等三維軟件操作的專業教師來說,Unity3D的操作入門還是比較簡單的,如果同時具備一定的計算機語言編寫基礎,便可以進行簡單的仿真系統開發。使用Unity3D進行游戲開發的流程主要包括:建模—外觀設置—功能添加—調試及發布。由于仿真的場景設定為毛坯房,所以對外觀沒有太多要求,外觀設置環節可以省略,其余流程的主要研發過程如下。
(1)建模
Unity3D自帶了一些簡單幾何體的創建能力,也附帶了一些游戲模型,但總的來說其不是專門的建模工具,一般的開發思路是從三維軟件中建模,然后導入到Unity3D。筆者使用3 dSMAX對毛坯房的模型進行創建,然后借助安裝FBX格式輸出插件,就可以輸出成Unity3D專用格式,然后導入到場景中。值得一提的是,通過插件輸出的模型是不附帶材質信息的,必須在Unity3D對模型再次賦予材質,所以建模時不必考慮材質問題。
(2)功能添加
首先是漫游功能。令人欣喜的是,Unity3D已自帶了名為“First Person Controller”的控件,該控件包括一個角色控制器和一個攝像機,同時整合了行走、攝像機旋轉等功能,只需要簡單地將其放置于場景中,就可以輕松實現漫游功能,無需再自行研發。
除了少量自帶控件外,Unity3D的多數功能都需要通過腳本來實現,在Unity3D中,腳本是以模塊的形式添加至操作對象上的,可視為物體中的一個獨立組件,而一個物體可以包含多個彼此獨立的腳本模塊,也就是說,操作對象的各種功能可以通過彼此獨立的各個腳本模塊實現,這樣一來,如果需要添加哪種功能,只需添加相應腳本模塊就可以了。接下來的問題是腳本模塊的來源問題,從頭編寫腳本當然是其中一個可行的辦法,但這要求開發人員對JavaScript(Unity3D主流程序語言)十分熟悉,門檻較高。另外一個解決辦法就是通過修改現成的腳本模塊實現所需功能,這只需要開發人員掌握基本的程序知識即可。
現成的腳本模塊可以從諸如Unity3D大中華社區等專題論壇進行搜索及下載,筆者在開發初期就下載了大量簡單實用的腳本模塊,并通過修改和重新整合這些模塊順利地完成后續的開發工作。在收集到若干基本功能腳本模塊后,就可以開始進行功能開發了。這里先要確立開發思路,筆者在研發初期沿用了FLASH預制點的思路,把功能腳本嵌入到預制度量點內,通過鼠標點擊預制度量點并測量其空間間距以獲得所需度量的尺寸。
在對收集回來的腳本模塊進行重組并修改后,筆者實現了該功能,但同時也察覺到該解決方案還有可以改進的空間。首先,盡管進行尺寸度量時都是圍繞空間角點及構造端點,但如果能對墻體的任意兩點進行度量的話感覺會更真實。
另外,雖然比起在FLASH中對每幅圖片都安插預制度量點來說,Unity3D每個空間只需布置一次的預制度量點,但一旦更換空間模型,仍需對預制點進行重新布置,使用起來并不方便。筆者在實現預制點方案的過程中,發現使用Physics.Raycast函數可以輕松對視線范圍內物體表面的任何點進行定位,這樣只需要通過鼠標對毛坯房空間中任意兩點進行定位,通過測定兩點間的距離就可以輕松實現尺寸度量功能,而不需要使用預制點。
在這樣的指導思想下,筆者順利地編寫出名為“PICK.js”的功能腳本。在制作過程中,先導入毛坯房空間模型,再把“PICK.js”腳本作為模塊控件加入模型中,便能計算出墻體不同點之間的距離。
雖然只需簡單地點擊鼠標便能獲取點與點之間的距離,但是為了盡量地貼近真實,還要加入使用尺子度量的過程,這主要還是要借助Physics.Raycast函數實現,具體思路如下:先在場景中創建一帶狀尺子模型,當鼠標點擊墻體第一點時尺子的起點移動到其上,尺子的末端則跟隨鼠標旋轉(借助transform.rotation函數實現),并根據尺子起點與鼠標的距離對尺子進行縮放(借助transform.localScale函數實現),以獲得尺子隨鼠標伸長縮短的效果。當鼠標點擊墻體第二點后,尺子末端位置確定,這樣尺子就很好地固定在墻體的兩點之間,實現尺子度量的效果。
筆者根據這個思路編寫出名為“RULER.js”的功能腳本,并將此功能附加到尺子模型中。需要注意的是,在整個尺寸度量過程中,鼠標的操作空間是二維的Screen空間,而墻體上的點存在于三維的World空間,因此兩者之間要采用WorldToScreenPoint以及ScreenToWorldPoint函數進行切換。
采用以上思路及流程可以開發出功能基本滿足需要的毛坯房尺寸度量仿真系統,但要進一步提高系統的性能,完備各項功能,則需要研發人員對功能腳本進一步深入學習。例如,為了達到比較真實的仿真效果,尺子上應該標有刻度。這就要求在尺子模型上附加帶有刻度的貼圖,并且在尺子縮放的過程中,還需要同時應用TextureScale函數以控制貼圖的重復次數,獲得真實效果。
(3)調試與發布
對功能基本滿意后就可以進入調試階段,調試是對一些參數的細微調整,諸如攝像機的旋轉速度、漫游的行走速度等。一般來說,為了達到理想的效果,同一參數要反復變更試驗,才能從中對比出最合適的數值,然而諸如FLASH等大部分軟件在修改參數后,必須重新輸出成品才能觀察所產生的變化,這就使整個調試過程變得十分漫長并且繁瑣。值得慶幸的是,Unity3D的設定十分人性化,在進行內部演示期間,各組件的參數會動態地顯示于屬性區,對參數進行調整后,內部演示窗口會作出即時的響應,這樣整個調試過程就變得便捷并且愉快。
對調試結果滿意后,就可以輸出成品。Unity3D提供“Web Player”以及“Windows Standalone”等多種輸出模式可供選擇,其中“Web Player”輸出模式可支持成品在線使用,為了成品的普及推廣,建議使用該輸出模式。綜上所述,采用FLASH以及Unity3D都可以進行毛坯房尺寸度量仿真系統的開發。其中采用Unity3D可以達到更理想的仿真效果以及更佳的操作性、擴展性。但該軟件還不普及,專業教師需要投入一定的時間及精力進行熟悉。在實際開發過程中,專業教師可以根據自身的需要及能力,選擇合適的軟件進行開發。毛坯房尺寸度量仿真系統的成功開發,為使用虛擬仿真手段進行室內裝飾教學開創了先河,為后續裝修施工、驗收等環節的教學提供了重要的參考,可以很好地解決學校在辦學過程中遇到的場地少、消耗大、管理難等諸多問題,其價值應給予肯定。
參考文獻
[1] 徐敏.可漫游的虛擬場景的建模與實現方法[J].科技信息,2010(29).
[2] 蔣子龍.三維虛擬場景人機交互與漫游技術研究[D].沈陽工業大學,2010.
[3] 徐軍.吳世強.基于SKETCHUP的虛擬景觀的建立[J].大壩與安全,2009(S1).
[4] 蔣衛平.虛擬現實在房地產項目中的設計與應用[D].山東大學,2011.
[5] 姚波.基于Papervision3 d引擎下的室內虛擬漫游研究與探索[J].廣西輕工業,2011(4).
[6] 嚴林.虛擬現實在室內設計中的應用[D].武漢科技大學,2011.
[7] 黃顯兵.基于全景技術的景觀在線漫游的設計與實現[D].上海交通大學,2012.
[8] 干建松.基于Unity3D的室內漫游的關鍵技術研究[J].鹽城工學院學報(自然科學版),2011(4).