吳慶波, 梁勤歐
(浙江師范大學 地理與環境科學學院,浙江 金華 321004)
目前,與場館類似的大型室內地圖大都采用2D紙質地圖,它對于室內環境的監控和人員定位功能的實現主要用2種方法:攝像頭監控系統和二維室內地圖系統[1-3].然而這2種系統都存在著部分缺陷.攝像頭監控系統的成本雖然越來越低,并且現在很多案件的線索都是通過攝像監控系統圖像的調取而獲得的,但對視野的完整性具有一定的依賴性;二維室內地圖系統能彌補攝像頭系統的視野問題,卻會丟失部分圖像信息且無法很好地表達高程信息,即樓層信息.
三維建模技術的誕生,使得人們可以用計算機來模擬現實世界的環境和物體,并隨著各種交互技術的成熟,人們可以有仿佛置身于虛擬現實世界的機會.通過對光照、環境進行設置,以及對建筑物材質紋理的采集并授予模型,真實世界在計算機中以三維模型的方式呈現出來.室內建筑的結構非常適合三維模型來展示.可以說,三維建模技術符合人們的視覺習慣和思維習慣[4-5],相比二維圖形的單調難懂,三維模型是人們更愿意接受和使用的.
隨著智能手機的普及,移動端對于人們的生活已不可或缺.移動端自帶GPS功能,當人們置身于真實室內環境時,手機端就得到了當前的位置,它與三維模型結合進行地圖坐標轉化,可以得出自己在地圖上的位置,從而能快速進行方向選擇并了解周圍環境.此外,手機移動端具有3G、4G的上網功能,可以隨時獲取所需的室內模型資源,隨時接收新的信息,比起電腦端更加靈活.因此,在移動端開發室內模型交互系統非常具有優勢[6-7].本文正是基于以上兩點開發了一個室內的三維漫游交互系統.
本系統的開發以Unity 3D為核心,以3ds Max為主要建模手段,對浙江師范大學校園內某幢建筑的1層、5層及內部的房間進行了建模,通過Unity 3D自帶的mono進行功能編寫,最后發布移動端的可執行程序,并進行漫游及交互體驗、測試,系統的總體框架如圖1所示.

圖1 系統總體框架
具體步驟如下:
1)數據采集.三維建模所需數據主要包括:該建筑外部圖、側面圖(由人工拍攝),頂樓圖(由無人機航拍);該建筑1層室內平面CAD圖;建筑材料及室內物品材質紋理;建筑各碎布點的坐標信息.
2)數據處理.將坐標信息賦予CAD圖,并對CAD圖進行必要的語義信息賦予,建立一定的拓撲結構.攝像機拍攝的圖用來繪制、對模型挖洞、填補等工作.收集的材質紋理信息可以直接植入3ds Max和Unity 3D中進行使用.
3)數據組織.這里主要是進行必要的拓撲關系構建,在建成三維模型之后,由于體積龐大,實體繁多,需要對這些實體進行分層合并、命名等一系列操作,便于后續的修改和查閱.最后導出FBX格式的模型文件,方便Unity 3D的調用.
4)腳本管理.在進行具體的系統功能設計時,Unity 3D需要調用各種各樣的腳本來掛載到場景和場景中的物體上,故腳本的管理也必須有條理地進行,保證不丟失腳本,不添加多余腳本.
室內模型的構建是一個從平面圖借助三維幾何造型與表面材質、紋理、燈光等來設置模擬真實世界模型的過程,有很多因素都需要考慮,從而達到真正的逼真效果.筆者把模型的構建過程大概分為3個步驟:數據準備、模型構建、后期優化.具體如圖2所示.

圖2 建模流程
2.2.1 平面圖數據源
本文的平面圖數據源采用的是該建筑的電力平面布置施工圖.由于此施工圖中的很多信息是用來處理電路照明等方面的,與此次建筑室內建模沒有直接的關系,所以本文在圖片處理之后留下了建模所需要的輪廓圖,簡化后的模型圖如圖3和圖4所示.

圖3 樓層電力平面圖

圖4 簡化后的平面圖
2.2.2 樓體所需數據源
在本次1層樓的建模過程中,為形成一個整體模型,樓體所需的數據源除了俯視平面圖外,還需要各個方向的側視圖,包括窗戶、門等信息.通過拍照不僅可以獲取這些面的輪廓,還能獲取材質.因此,拍攝的照片質量非常重要.本文都進行了實地拍照,如圖5所示.
這些照片的輪廓會因為焦點相機本身的特點失真而會有所變化,而紋理色彩等也會因為光照環境、攝像機色調等和真實有所差距.因此,在拍攝完成之后,本文又用Photoshop進行了相關的修正.

圖5 側面圖的拍攝照片
2.2.3 各類物體及材質
這些拍攝到的圖片需要真實的顏色及形狀大小等信息,因此,在拍攝時做一個記錄,確保建模的材質和真實環境的材質相差不會太大.
在建立墻體模型之前,樓層的線條輪廓圖應當先進行繪制.按圖6的輪廓線圖進行墻體的建模,然后進行室內物體的建模.

圖6 樓層輪廓圖
樓層線條輪廓圖繪制好之后,接下來的工作就是填充三維幾何體.由于這些圖形都是不規則的,并包含許多空洞,因此,必須要用更多的小圖形來進行填充合并,并且還要設置這些幾何體的厚度與墻體一致等.根據CAD圖上各個點的坐標,在3ds Max中對這些小幾何體進行設置時輸入對應的坐標,方便這些幾何體的對齊.最后,將它們合并之后,便可得到模型.圖7為對地板填充后建立的墻體模型:

圖7 墻體模型
燈光可以直接使用Unity 3D中的燈光組件.光照和模型建立好之后,為了得到更真實的模型,需要對天空進行模擬.在Unity 3D中,有一個“Skybox”資源組件,每個天空盒資源分為6張圖片:前、后、左、右、上、下.這種方法是半球天空模擬法,是用數學方法實現對天空的模擬,公式如下[8]:
f(P)=X2+Y2+Z2-R2.
(1)
式(1)中:P是球面上某一點;R為球體的半徑.利用球面坐標系時方程(1)變換為

(2)
盒子法模擬天空的基本思路是:建立一個正方體,在其上下左右前后6個面上分別貼上模擬天空的貼圖,貼圖的質量直接影響最后模擬出天空的畫面質量,因此,貼圖必須選擇“位圖”文件,并且做到6個貼圖首尾相連,這樣才能更加真實.
模型基本建立完畢,考慮到實時加載場景的速度和文件的復雜程度,還需要對整個場景中的模型進行優化[9-10].在工作界面的“Hierarchy”面板中可以看到建模時用了大大小小很多的模型,小到桌子腿和書柜上的書,所以為了提高速度,必須進行優化:
1)減少多面體的面.例如曲面物體或者不規則物體,表面非常復雜,不僅影響加載速度,還會占用系統空間.3ds MAX中的插件“減面工具”可以實現這個操作,簡化物體的面數.
2)紋理代替模型.對于那些非常薄的物體,諸如窗戶、樓體等可以用二維圖形代替三維模型,從而節約空間.
3)提高模型和材質的重用性.對于那些特別材質或者組件的物體,可以重復利用,減少數據量.
經過以上3種方法的優化,大大提高了模型的加載渲染速度,使用軟件時變得更加順暢.最終模型如圖8所示.

圖8 模型效果圖
系統主界面如圖9所示.

圖9 系統主界面
現今流行的移動手機大都是依靠屏幕手勢進行操作,包括單點觸控、多點觸控、手勢滑行等方式.相對PC端來說,移動端的操作實現有一定困難.將攝像機在攝像機與屏幕中心連成的直線上平移,達到縮放目的;把攝像頭繞虛擬世界中的縱軸進行旋轉實現旋轉功能;通過改變攝像機在虛擬世界中的水平面橫豎坐標實現移動功能[11].
實現縮放、旋轉、平移這些操作,實際上是對虛擬世界中的攝像機實現平移和旋轉的操作,可以由4×4的矩陣表示.首先集合變換矩陣為C1,其中矩陣的3×3部分即矩陣C2,代表實體比例和旋轉,矩陣[a41,a42,a43]T 代表實體平移,矩陣[a14,a24,a34]T代表實體投影[12].
1)實體平移:實體位置為(x,y,z),平移變換時3個坐標都要發生改變,設平移量為Cx,Cy,Cz,平移之后坐標為(x′,y′,z′),則:
2)實體旋轉:在Unity 3D中的旋轉是繞著該點為中心的坐標系的X,Y,Z軸進行的旋轉.設旋轉角度為δ,則繞Z軸旋轉的矩陣變換為

漫游功能是用來對模型進行放大縮小旋轉的操作,需實現其靈活性和易操作性.在系統主界面點擊進入漫游系統,攝像機距離模型較遠,可以通過雙手多點觸控,兩個手指分開的手勢進行放大,攝像機位置移動至模型中心,便可以繼續上下左右滑動手指來進行模型的旋轉.圖10為旋轉功能測試效果圖.

圖10 旋轉功能測試

圖11 交互界面
當以第一人稱視角在模型中移動時,如果不設置碰撞檢測,就會出現穿墻的情況[12],違反自然規律,而且無法模擬出真實的視野.因此,必須對客體和第一人稱主體設置碰撞檢測.Unity 3D引擎自帶物理組建功能,可以給模型添加一系列現實世界中的物理屬性.在“project”面板里選中模型,在“inspector”面板里勾選“generate colliders”“apply”即可生成模型的“mesh collider”.將物體設置為剛體之后,物體就不會存在穿墻的情況.交互界面如圖11所示.
本文中的交互功能以手指操作虛擬搖桿實現位移,左邊的虛擬搖桿控制的是視角的旋轉,右邊的虛擬搖桿控制的是物體前后左右的移動.
在Unity 3D中的“Game Object”中新建“攝像機”組件,并將其屬性設置為“Othographic”,調整大小使其覆蓋在模型之上,這樣就可以顯示模型的俯視效果.為了在俯視圖中展現主攝像機所在位置,創建一個新的幾何體,并置于“攝像機”模塊的層級之下.這樣幾何體就會隨著攝像機的移動而移動,從而顯示出漫游者在小地圖上的實時位置.
鷹眼照相機的界面在各個模型界面的右上角顯示.黑色小方塊為此時攝像機所在的位置,隨著攝像機的移動,在小地圖中顯示出實時位置.當不需要此功能時,點擊收起可以將小地圖隱藏.需要時點擊鷹眼可以打開小地圖.如圖12所示.

圖12 定位效果圖
本文面向移動端初步構建了建筑模型的三維漫游及交互系統,并通過運行實例,驗證了該系統的可行性和有效性.本系統在移動終端的基礎上,利用了三維建模技術實現了定位、漫游與交互功能,能使用戶在以三維場景方式展示所處的環境中進行沉浸式體驗,為用戶快速、準確地選擇路徑提供了方便,對解決當前室內復雜環境的導航問題具有一定的參考意義.三維模型的逼真程度與內存消耗成正比,如何進行空間數據的輕量化建模并能顧及到物體間的拓撲關系及空間索引方面值得思考,也是值得設計者進一步改善的方向.只有解決好這些問題,才能為其他潛在的場所提供可能的應用,為用戶提供更好的漫游、交互體驗與服務.
[1]周忠,周頤,肖江劍.虛擬現實增強技術綜述[J].中國科學:E輯 信息科學,2015,45(2):157-180.
[2]葉子.博物館移動導覽中的綜合性室內定位方法研究及系統實現[D].杭州:浙江大學,2015.
[3]Xu Z,Pan T,Zhang R,et al.Research on design of virtual museum of submerged traditional architectures in Three Gorges Reservoir Area[G]//World Automation Congress (WAC).Washington:IEEE,2016:1-4.
[4]王勝利.城市三維場景快速構建方法研究[D].鄭州:鄭州大學,2016.
[5]王曉雨.沉浸式虛擬3D敦煌莫高窟場景重現技術研究[D].西安:西安工程大學,2016.
[6]宋歡.基于Android的室內定位系統研究與實現[D].哈爾濱:哈爾濱工業大學,2016.
[7]耿強.基于Unity 3D的多平臺虛擬仿真關鍵技術研究[D].天津:天津工業大學,2016.
[8]黃濤.基于Unity 3D的虛擬校園漫游系統的研究和實現[D].桂林:廣西師范大學,2014.
[9]黃楊,王洋,張姝娟,等.基于Unity 3D的數字站區管理應用系統虛擬現實場景制作研究[J].測繪與空間地理信息,2013,36(4):50-51.
[10]孫恒宇,尤超,王洋.基于Unity 3D的數字站區管理應用系統優化研究[J].地理信息世界,2013,20(1):103-106.
[11]Kim D,Ryu W,Lee S,et al.A Unity 3D-based mobile fashion coordination system[J].International Journal of Advanced Media and Communication,2016,6(1):86-92.
[12]Hu H,Lu L.Automatic functional testing of Unity 3D game on android Platform[C]//International Conference on Materials Engineering.Weihai:Manufacturing Technology and Control,2016.