吳小瑩
(北海職業(yè)學院,廣西 北海 536000)
虛擬現(xiàn)實技術由于具有沉浸感、交互性和構想性等特點,在建筑可視化領域應用越來越廣泛。本文以保護歷史古建筑群為目的,介紹了基于虛擬現(xiàn)實技術的項目完整的開發(fā)過程。
虛擬漫游系統(tǒng)最終呈現(xiàn)的趨于真實性體驗感與虛擬引擎技術有著直接關聯(lián)。綜合考慮本項目的實際情況,本文提出以Adobe Photoshop、Mind Tex 2、CAD、3DS MAX 和Unreal Engine 4(以下簡稱“UE4”) 等為技術支持平臺的古建筑VR 漫游系統(tǒng)的開發(fā)方法,能夠在PC 端實現(xiàn)逼真視覺的古建筑漫游效果。該方法的總體設計流程見圖1。
圖1 古建筑VR 漫游系統(tǒng)設計流程圖
此項目的開發(fā)過程包括前期數(shù)據(jù)采集、三維建模、模型優(yōu)化、貼圖制作、UV 制作、烘焙、UE4場景搭建、交互設計等環(huán)節(jié)。
在構建虛擬模型之前,首先需要采集與處理相關數(shù)據(jù)信息,對古建筑場景進行實地拍攝和勘測,收集建筑場景地形圖以及建筑物設計圖、外形結構圖和實景照片等。前期數(shù)據(jù)采集的實地取景拍攝特別重要,拍攝照片應注意角度、光線、陰影等問題。同一個場景,在不同的時間段拍攝,拍攝角度不同,照片的曝光度、色溫、白平衡等會有較大差異,所以盡量在光線充足的時段取景,特別要注意避免逆光拍攝,以保證照片的質量能滿足后期建模與制作材質貼圖的需要。這些實地取景的照片主要有兩大作用:一是原始照片可作為后期建模的參照物;二是經過平面軟件后期處理的實地取景拍攝照片可用來制作模型的UV 貼圖。
考慮到古建筑模型后期渲染輸出和操作過程中的便捷性,一般在計算機中需要將數(shù)據(jù)進行壓縮優(yōu)化,例如現(xiàn)實中高1 m 的物體可按10∶1 的比例進行壓縮,即可轉換為10 cm。所以根據(jù)前期采集的建筑地形和建筑物的整體結構和大小等數(shù)據(jù),參照1∶500 的比例先在CAD 上繪制、調整古建筑場景地形二維圖紙和建筑物頂、底、正、后、左、右各視角的二維剖面圖紙。本系統(tǒng)制作過程中主要使用3DS MAX 制作三維虛擬場景,其中包括古建筑群的地形、路面、植被、古建筑物等模型。為了提高三維模型的制作效率,各部分模型需分開創(chuàng)建。地形的三維模型的制作是先將之前在CAD 中處理好的1∶500地形圖(DWG 格式) 直接導入到3DS MAX軟件中,底圖導入時必須要保證其平面圖的坐標在3DS MAX 的設置為坐標原點(即世界坐標歸零),為了防止在后期模型制作過程中不小心移動底圖,世界坐標歸零后立即凍結底圖,然后通過擠出修改器生成高低起伏的地形模型。古建筑物的模型制作也是采用類似的方法,將建筑物的CAD 截面圖導入到3DS MAX 軟件中作為三維建模的參考依據(jù)。當所有模型使用上述制作流程全部創(chuàng)建完成后,可根據(jù)地形平面圖的布局,將樹木、植被、各建筑物等模型合并起來。
古建筑場景模型通常存在大量多邊形網格,面數(shù)眾多且不規(guī)則,若直接導入虛擬引擎中將帶來不必要的性能損耗。為了保證后期虛擬引擎運行流暢,一般會使用低面數(shù)的模型(低模) 結合法線貼圖的形式來呈現(xiàn)細節(jié)相對豐富的古建筑模型。
使用3DS MAX 軟件構建的模型的主體包括精細模型(精模)、中等復雜度模型(中模) 和體塊模型(低模)。其中,精模是指能夠全面展示古建筑物結構和細節(jié)(內部構造、門窗造型、雕塑裝飾等) 的高復雜度、高精度的模型。中模是在不影響古建筑物的真實結構的基礎上,盡量忽略部分結構細節(jié),著重還原古建筑物的幾何實體結構特點的一種模型制作方式,主要用于制作道路兩旁的主建筑模型,要求能大致反映出建筑物的整體結構和輪廓特征。低模是在保證古建筑模型的整體性和全面性的基礎上,完全忽略古建筑物的細部結構,只為突出古建筑物的輪廓和結構大體感覺的一種模型制作方式,主要用于制作非臨街、非重點建筑物的成片建筑區(qū)域。
根據(jù)VR 漫游系統(tǒng)的設計與功能需求,本系統(tǒng)中涉及的所有虛擬三維模型的主體基本由優(yōu)化過的中模和低模組成。因此,在不影響虛擬場景逼真性效果呈現(xiàn)的基礎上,盡可能減少面數(shù),對場景中的模型進行優(yōu)化,具體方法如下。
1) 清理場景中不需要的元素。在3DS MAX 中分別執(zhí)行Unhide All 和Unfreeze All 命令,并對場景中的所有物體進行解除組合處理,然后刪除所有建模時遺留的CAD 線框、廢棄的樣條線以及場景以外的多余模型。
2) 模型的單面優(yōu)化顯示。目前UE4 支持的模型都是以單面的形式存在,即正面顯示,背面不顯示。例如,在一個封閉的室內建筑空間,看到一面墻,但并不需要看到這面墻的背面,所以墻的背面就完全可以刪除,若不刪除,引擎會對墻的背面進行計算,造成不必要的損耗。在3DS MAX 中,每個模型面都有正面和背面的概念,因此,可以在每個物體的屬性選項中設置背面消隱,以此來減少模型的總面數(shù)。
3) 刪除不可見的冗余線、面。例如,模型底部的面和一些被遮擋的面都可以刪除。同時,針對有規(guī)律布線的模型,可以使用石墨工具,選擇間隔的循環(huán)線段,并依次刪除,這樣也可以達到手動減面的效果。
4) 合并模型中的三角形面。通過刪除線、面或邊的塌陷及合并點等操作,將3 個三角形轉化為2 個三角形,再將2 個三角形轉化為1 個四邊形,這樣可以減少不明顯影響模型精度的面片數(shù)量。
5) 使用貼圖取代復雜的模型。在古建筑建模中,一般會使用貼圖加低模的方式來取代復雜的鏤空裝飾模型和凹凸重復性大的結構模型(窗戶、大門、瓦片、檐角裝飾等),以精簡面數(shù),見圖2。
圖2 貼圖前后對比效果
經過對UE4 的多次測試,結合以往的經驗,為了盡可能減輕系統(tǒng)的運行負擔,本文建議將單個場景空間的模型面數(shù)控制在100 萬以內,單個模型的面數(shù)控制在5 萬左右,但是此數(shù)據(jù)僅用于本系統(tǒng)開發(fā)參考。
材質貼圖對虛擬場景實現(xiàn)最終效果影響最大,通過一張優(yōu)質的貼圖可以使得原本平淡無奇的中模、低模生動具體。一般貼圖制作的規(guī)格要求包括以下幾個方面。
1) UE4 支持的貼圖格式很多,包括JPG、TGA、PNG、DDS、PDS、BMP 等格式。經過測試,除了GIF 和TIF 格式外,其他格式3DS MAX 基本都支持,不過最常使用的是JPG、TGA、PNG 和PDS 格式,其中TGA 和PNG 這兩種格式是透明貼圖,一般用于虛擬場景中的花草、植被、古建筑鏤空裝飾物等模型貼圖。
2) 由于前期一般都會使用單反相機進行實地取景拍攝,基本能保證每張素材圖的分辨率最小為2 500×2 000 像素。為了平衡系統(tǒng)的運行速度,經過平面軟件處理合成后的貼圖,在盡可能保持原來清晰度的情況下,此項目對大部分貼圖要求最終導出的分辨率為1 024×1 024 像素。
3) 在UE4 中,由于光柵化需要對紋理采樣進行快速取值,因此傳入的貼圖圖像的尺寸必須是2的n 次方。常用的尺寸有64×64,128×128,256×256,512×512,1 024×1 024,2 048×2 048。雖然目前很多VR 引擎已經可以將任意尺寸的貼圖自動拉伸或壓縮成合適的規(guī)格,但是有時自動功能并不完美,經常會看到場景里密集紋理貼圖產生閃爍情況,這時必須認真檢查貼圖的尺寸。
在制作完成模型與貼圖后,若將貼圖直接貼到模型上,貼圖的比例、位置是完全錯亂的[1],此刻,UV 是二維紋理映射到三維模型的橋梁。一張UV的好壞直接影響貼圖的表現(xiàn),UV 貼圖的編輯和貼圖紋理的比例與尺寸相關,展UV 就相當于把現(xiàn)實中的一個方形盒子拆開并攤平。3DS MAX 中內置有用于展UV 的UV 編輯器,也可以選擇專業(yè)UV 處理軟件Unfold3D 或UVLayout 等。
在UE4 中,只要有光就要模擬光照信息,其中光照信息有動態(tài)和靜態(tài)之分,動態(tài)的好處是實時變化,但是消耗資源。在大部分制作過程中,基礎環(huán)境光照信息是沒有變化的,通常需要制作一套靜態(tài)光照貼圖來模擬光照信息,因此光照貼圖制作已經成為大部分VR 制作的標準流程。由于之后在UE4中還需要進行燈光烘焙,因此本項目中的同一個模型必須制作兩套UV,分別存放在不同的UV 通道中。第一套UV 用于貼圖映射關系的存儲,可以重復疊加使用,第二套UV 用于靜態(tài)光照映射關系的存儲,即用來烘焙光照貼圖,所以UV 不能產生重疊現(xiàn)象,而且要最大化利用貼圖空間的分辨率。兩組通道UV 見圖3。
圖3 兩組通道UV
貼圖完成的模型要導出到UE4 中進行操作,需要在3DS MAX 中進行烘焙和導出[2]。貼圖烘焙是3DS MAX 中的最后一道工序,是把3DS MAX 的光照信息渲染成貼圖,再把這張貼圖重新貼回場景中,這樣就不需要CPU 重新計算,場景的顯示響應速度也極快。烘焙技術是優(yōu)化場景的一大利器,廣泛應用于VR 漫游動畫中。
經過之前一系列的開發(fā)過程,已經優(yōu)化項目中所有的模型,在3DS MAX 導出模型之前建議再檢查一遍場景單位、貼圖路徑以及模型、材質貼圖命名是否一致等,再導出.FBX 文件。以下是關于模型導出的一些注意事項。
1) 合并模型。為了合理地利用資源,盡量減少場景的模型個數(shù),按照貼圖、位置或其他要素來區(qū)分和分類需要合并的模型,目的是減少場景中的模型總數(shù)和減少模型中的面數(shù)??梢钥紤]通過多邊形附加、塌陷命令將同類的多個模型合并成一個。
2) 檢查并處理法線。在3DS MAX 制作模型的過程中,各種因素會導致有的模型法線錯誤,如果直接導入UE4,后期會出現(xiàn)很大的問題,因此可以把模型轉換為mesh,檢查處理完法線問題后,再將模型重新轉換為poly。
3) 碰撞體的制作。碰撞體是指模型導入UE4后模型周圍的一層“空氣墻”[3]。當場景中的人物移動時不會直接穿透模型,而是會被“空氣墻”阻擋。碰撞體模型均為凸面體,一般要求盡可能貼合原模型且要大于原模型,可以在3DS MAX 中提前進行創(chuàng)建,然后在UE4 中通過靜態(tài)網格物體編輯器來進行碰撞設置。本項目涉及的古建筑場景模型多且復雜,必須在3DS MAX 中提前創(chuàng)建并命名所有碰撞體模型。
在UE4 中新建一個空白項目,導入已經準備好的古建筑地形和模型資源,新建關卡,把已導入的模型拖入當前關卡中,設置碰撞體,添加定向光源、天空光源和天空球,搭建室外場景環(huán)境。其中室外場景的燈光部分主要由太陽光和天光組成,室內場景的照明燈光主要以點光源為主。檢查調整場景中的光照、陰影、植物、建筑地形等,并進行測試構建,檢查場景中是否存在溢光、漏光、黑面、亮面、溢色、模型忽黑忽閃、場景無層次感、燈光陰影有鋸齒等問題并及時處理,最后在UE4 中重新調整材質球。
為了實現(xiàn)項目的虛擬漫游功能,需要在場景中添加交互設計,主要設計如下。
1) 創(chuàng)建導航小地圖。導航小地圖的功能實現(xiàn)是通過Get Actor Location 函數(shù)獲取用戶對象的位置,將用戶對象的位置和小地圖上坐標的位置相關聯(lián)。在藍圖編輯器中,按照一定的邏輯流程設置各節(jié)點、事件、函數(shù)、變量,通過連接獲取到玩家的位置,再連接到Set Actor Location 節(jié)點上,重新設置用戶對象在導航地圖上的坐標。
2) 制作觸發(fā)式開關門。在建筑可視化漫游系統(tǒng)設計中,開關門操作是必不可少的,這里以第三人稱視角為例,為門的模型添加碰撞和盒體觸發(fā)器,通過設置編輯關卡藍圖實現(xiàn)觸發(fā)式開關門功能,關卡藍圖設置見圖4。
圖4 關卡藍圖設置
本系統(tǒng)測試的主要內容有:場景漫游、天空同步、導航小地圖、開關門、場景切換等功能的實現(xiàn)效果。經過多次測試,最終打包生成.exe 可執(zhí)行文件,可正常運行于Windows 10 操作系統(tǒng)上。
本文闡述了以3DS MAX 和UE4 為主要核心的虛擬現(xiàn)實技術,構建了一個沉浸式的古建筑群漫游虛擬仿真系統(tǒng)。通過搭建虛擬古建筑群環(huán)境,在不破壞古建筑原始風貌的前提下,結合虛擬交互技術,讓用戶可以近距離接觸古建筑,并親身體驗穿梭于古建筑群的真實感,為古建筑群的保護和傳統(tǒng)文化的傳播提供了新的發(fā)展方向。