李延康,文 凱,祁政源
(西安建筑科技大學,陜西 西安 710311)
與傳統的二維圖像相比,三維模型提供了更多的交互性。用戶可以自由旋轉、縮放和操作模型,以便從不同角度觀察和分析,因此三維模型可視化技術被廣泛應用于社會各個領域。本文設計了基于Unity 3D的虛擬校園三維建筑展示系統,采用Minecraft進行建模,利用Unity 3D進行渲染,不僅為用戶提供了真實、直觀的校園環境展示,還可以提供漫游與交互功能,增強了用戶的體驗感[1]。
目前,市場上存在許多流行的3D建模軟件,如3D Max和Blender。這些軟件創建的模型通常具有精細還原的特點,但其學習曲線陡峭,開發難度高,建模工程量較大。本文采用一種創新的建模方法,利用Minecraft建立三維建筑模型并轉換成FBX格式后導入Unity。
Minecraft是一款基于Java開發的高自由度的沙盒建造類游戲。Minecraft的開源屬性致使其可以添加大量模組,最大優勢是開發難度低[2]。Minecraft建模的基本單元是一種被稱為“體素”的3D立方體。體素的設計使得Minecraft能夠在保持高渲染度的同時,實現復雜的3D結構。用戶可以通過合理的設計,對不同的方塊拼接組合從而建立3D建筑模型。
1.2.1 采集原始建筑數據,分析數據集
該步驟通過衛星圖、航拍圖、現場拍攝等方式大致獲取建筑的相對位置信息和建筑規模信息,然后分析所獲得的數據集,擬定比例尺。該系統的建筑模型采用1∶12.5的比例尺。
1.2.2 劃分模型建筑群
本文將西安建筑科技大學校園劃分成4個區域,分別為南山書院、學府城、圖書館和紫閣書院,并區分各個區域地勢差,確保各區域之間的正常銜接。
1.2.3 Minecraft 3D建筑建模
Minecraft提供了大量材質豐富的方塊——比如木材類(橡木木頭、云杉木頭等)、巖石類(圓石、花崗巖等)、磚類(石磚、紅磚等)等。為了提高建模的效率,本文通過調用模組WorldEdit提供的應用程序編程接口(Application Programming Interface,API)制作預制體,如墻體、房頂、窗戶等,然后批量放置預制體,以提高建模速度。對于外觀一致的建筑物,所提建模方案可以將整個建筑物制作成預制體,然后批量放置,從而建立起建筑物群。Minecraft 3D建筑模型展示如圖1所示。

圖1 Minecraft 3D建筑模型展示
由Minecraft建立的3D模型可以導出為FBX格式,然后導入Unity。Unity作為一款功能豐富的創作性質的引擎,可以提供實現本系統所有功能的開發基礎[3]。本系統實現的基本功能包括場景的渲染、人物的交互式漫游、人物與場景的交互功能。
在Unity中開發者可以對3D模型進行多種優化,以提高系統性能和用戶體驗。例如,開發者可以通過多細節層次(Leval Of Detail,LOD)技術,根據攝像機與模型的距離動態調整模型的細節級別。此外,開發者也可以使用光照技術(如實時光照、烘焙光照等)增強模型的視覺效果。
系統內的人物視角采用第一人稱,用戶可通過移動鼠標實現視角的轉動,通過鍵盤實現人物的移動[4]。下面詳細介紹具體的設計步驟。
2.2.1 人物的簡單設計
首先,創建名為“Player”的物體作為人物角色;接著,在人物的頭部位置添加Main Camera組件作為人物的子物體,以實現第一人稱視角;然后,為人物添加一個Character Controller組件;最后,創建一個空對象作為人物的子物體,命名為“Ground Check”,將其位置放置在人物的底部,用于輔助檢測人物與地面的碰撞情況。人物的簡單設計如圖2所示。

圖2 人物的簡單設計
2.2.2 視角的轉動
在Unity中,虛擬軸(Virtual Axis)是一種用于處理輸入設備信號的抽象概念。虛擬軸允許開發者將輸入設備(比如鍵盤、鼠標、手柄等)信號映射到游戲中的特定軸向運動,比如水平移動、垂直移動等。例如,開發者可以通過Input.GetAxis(“Mouse X”)和Input.GetAxis(“Mouse Y”)分別獲取鼠標在水平方向上和垂直方向上的虛擬軸值,然后將其應用到場景內main camera的轉動動作中。
根據上述原理,編寫腳本CameraControl.cs,并將該腳本掛載在人物Player的子物體main camera上,以實現視角轉換。腳本的代碼邏輯如圖3所示。

圖3 CameraControl.cs的代碼邏輯流程
2.2.3 碰撞檢測
在Unity中,碰撞檢測功能是通過Unity的物理引擎來實現的。Unity的物理引擎會在每一幀中檢測物體之間的碰撞,并根據物體的碰撞體積和形狀來計算它們之間的碰撞情況。
為實現人物與建筑物之間的碰撞檢測機制,需滿足以下必要條件。
(1)確保人物已添加碰撞器組件(Collider)。
(2)確保建筑物的檢查器(Inspector)中已勾選Generate Colliders,層級(Layer)被設置為Grand。
2.2.4 人物的移動
人物移動的設計需求包括:按下F鍵可切換飛行模式和行走模式;在行走模式中,使用WSAD鍵實現前進、后退、左移和右移,按下空格鍵實現跳躍;在飛行模式中,使用WSAD鍵控制前進、后退、左移和右移,同時使用EQ鍵控制上升和下降。根據上述設計需求和2.2.2節提及的虛擬軸原理,編寫腳本PlayerControl .cs,并將該腳本掛載在人物Player上。腳本的代碼邏輯流程如圖4所示。

圖4 PlayerControl .cs的代碼邏輯流程
在校園場景內將部分物體設計為“可交互狀態”,從而實現3D建筑模型的可交互性,提高用戶體驗[5]。下面對自動門的實現過程進行介紹,設計需求包括:當人物靠近自動門一定距離時,門會自動打開;當人物遠離自動門一定距離時,門會自動關閉。人物與校園場景交互實現的設計步驟如下。
(1)為門添加包圍盒碰撞檢測器組件(Box Collider),將其設置為觸發器(即勾選is Trigger選項),調整包圍盒的大小(確保碰撞檢測范圍覆蓋門及周圍區域)。
(2)為門物體添加Animation組件,制作“開門”和“關門”的動畫,并將這2個動畫添加到Animations中。
(3)編寫腳本DoorAnimation.cs,并將腳本搭載在門上,腳本的代碼邏輯流程如圖5所示。

圖5 DoorAnimation.cs的代碼邏輯流程
目前,將計算機虛擬現實技術與建筑學相互融合的虛擬校園建設方案已成為眾多高校的重要推廣策略之一。本文提出了一種創新的設計方案,該方案基于Minecraft進行建模,并借助Unity 3D引擎實現漫游、交互和渲染三大核心功能。這一設計方案不僅可以為當前相關領域的研究提供寶貴的參考意見,還可以為相關領域在未來的探索研究中提供啟迪和靈感。