陳淑玲
(閩西職業(yè)技術(shù)學(xué)院,福建 龍巖 364021)
隨著校園信息化和“數(shù)字校園”“智慧校園”建設(shè)的全面推進(jìn),校園精細(xì)化管理及校園文化推廣迫切需要精準(zhǔn)的、真實(shí)的三維校園地理信息。目前盛行的導(dǎo)航系統(tǒng)如高德地圖、百度地圖等,更新速度快,定位精度已達(dá)到1m級(jí),但這些導(dǎo)航系統(tǒng)只提供平面化的地理信息,不具備立體空間的信息,更無法根據(jù)用戶的行為實(shí)時(shí)反饋并動(dòng)態(tài)呈現(xiàn)3D 畫面。因此學(xué)校需要一個(gè)輕量級(jí)的針對(duì)性強(qiáng)的三維校園導(dǎo)航APP,通過移動(dòng)端+VR 端即可游覽校園?;谛@實(shí)景的虛擬現(xiàn)實(shí)導(dǎo)航系統(tǒng)根據(jù)校園的真實(shí)環(huán)境,使用三維可視化技術(shù)創(chuàng)建三維仿真建筑模型,利用虛擬現(xiàn)實(shí)技術(shù)構(gòu)建擬態(tài)環(huán)境來模擬校園場景,設(shè)置人與擬態(tài)校園的交互行為,立體化展示校園自然風(fēng)光和人文文化,是數(shù)字校園建設(shè)的重要組成部分[1-2]。
構(gòu)建校園擬態(tài)環(huán)境首要是創(chuàng)建校園的三維場景模型。三維模型是構(gòu)建虛擬空間的基礎(chǔ),是整個(gè)虛擬現(xiàn)實(shí)導(dǎo)航系統(tǒng)具有仿真效果的關(guān)鍵,是用戶能否沉浸于擬態(tài)校園的決定性因素。其主要任務(wù)是使用三維軟件3Ds Max構(gòu)建校園內(nèi)的樓宇、道路、文化長廊、標(biāo)志性建筑等模型,工作量占整個(gè)系統(tǒng)實(shí)施的70%以上;再直接利用虛擬引擎Unity 3D Object 對(duì)象和標(biāo)準(zhǔn)資源包Standard Assets 中的素材創(chuàng)建校園的地形、湖泊、植被等,在保障虛擬仿真效果的同時(shí)降低建模工作的強(qiáng)度和復(fù)雜度。構(gòu)建校園三維場景模型的主要流程是:測繪校園→構(gòu)建模型→檢測和優(yōu)化模型→材質(zhì)貼圖→烘焙渲染。
測繪校園作為三維建模的前期準(zhǔn)備工作,為構(gòu)建模型提供豐富的數(shù)據(jù)依據(jù)和強(qiáng)有力的效果對(duì)比,主要包括勘測校園、繪制CAD 平面圖和立面圖。利用各種測量工具(如激光雷達(dá)、攝像機(jī)等)勘察校園場景布局,收集處理勘測數(shù)據(jù),利用收集到的信息按1:100 比例繪制建筑物草圖和校園布局圖,并采集各視角的校園景觀圖作為參照,使構(gòu)建的模型更接近于實(shí)物,提高系統(tǒng)的仿真效果。
素材收集好后,選擇最優(yōu)方法快速有效地構(gòu)建單體模型。模型可以逐一載入到Unity 3D 中整合,也可以導(dǎo)入到同一個(gè)三維場景中整合,且以對(duì)象為單位進(jìn)行單體建??梢蕴岣呓_^程中視圖的透視度,便于增加細(xì)節(jié)和部分重建,降低系統(tǒng)功耗和建模操作的復(fù)雜度,更易于后續(xù)設(shè)置人與模型間的交互。但建模中使用的單位和比例必須一致;將CAD 圖導(dǎo)入Max 中作為參照圖,提取建筑物的幾何特征并分析其拓?fù)浣Y(jié)構(gòu),使用Edit Poly、Edit Mesh 等建模技術(shù)從點(diǎn)、線、面著手創(chuàng)建模型,布線清晰,盡量使用四邊面并控制模型的點(diǎn)面數(shù),實(shí)現(xiàn)二維圖映射到三維立體模型[3-4];建模過程中嚴(yán)格按照物體的實(shí)際縮放比例構(gòu)建,避免模型變型,增強(qiáng)擬態(tài)場景的沉浸感和代入感[5]。
虛擬現(xiàn)實(shí)在仿真過程中強(qiáng)調(diào)實(shí)時(shí)性和交互性[1]。此系統(tǒng)須具備高響應(yīng)能力,應(yīng)從以下方面規(guī)范優(yōu)化模型:盡量控制模型的點(diǎn)面數(shù),刪除沒有外露的元素,如看不見的底面、重面,刪除對(duì)模型結(jié)構(gòu)不起作用的點(diǎn)線面,同時(shí)合并斷開點(diǎn)、移除孤立點(diǎn);可以復(fù)制的模型盡量復(fù)制,具有對(duì)稱結(jié)構(gòu)的模型充分利用鏡像功能制作,模型的點(diǎn)與點(diǎn)之間要對(duì)齊,點(diǎn)之間不能有縫隙或錯(cuò)位,避免漫游場景時(shí)出現(xiàn)閃面、破面或交叉面;對(duì)于有重疊結(jié)構(gòu)且邊緣無需用貼圖細(xì)致表現(xiàn)的模型,采取落搭的方式制作;模型網(wǎng)格應(yīng)盡量是分布均勻的四邊面或三邊面[6],為賦予模型材質(zhì)貼圖奠定基礎(chǔ),模型導(dǎo)入引擎中也會(huì)自動(dòng)轉(zhuǎn)化為規(guī)整三邊面,減少渲染過程產(chǎn)生的鋸齒和閃爍;模型的復(fù)雜構(gòu)造盡量由貼圖補(bǔ)充展現(xiàn),使用渲染到紋理、渲染曲面貼圖、渲染法線貼圖等烘焙方法代替建模方式實(shí)現(xiàn);模型的命名要規(guī)范,不使用中文,也不重名,避免模型導(dǎo)入到Unity 3D引擎時(shí)出錯(cuò)。
良好的材質(zhì)可以彌補(bǔ)模型先天的粗糙與不足,使用紋理映射技術(shù)為模型賦予貼圖,可以增強(qiáng)模型細(xì)節(jié)特征和仿真效果。Unity 3D不支持3Ds Max 中的大部分材質(zhì)類型,可以支持Standard 和Multi/Sub-Object 材質(zhì)中的Diffuse Color 以及Self-illumination貼圖通道[7],但只支持Bitmap 貼圖類型。光照不同時(shí)材質(zhì)所呈現(xiàn)的特征和紋理也不盡相同。為了避免場景中光傳遞、光線跟蹤等計(jì)算消耗大量資源,模型外形的色相、飽和度、亮度直接由Bitmap 貼圖呈現(xiàn),從而實(shí)現(xiàn)擬態(tài)場景中光線與模型材質(zhì)的和諧統(tǒng)一。首先,使用“UVW 展開”修改器或展UV 專用軟件如Unfold3D、UVLayout等將模型的曲面展為平面,將展好的UV 渲染成UVW 模板,保存為.tga 格式或.png格式的圖像;其次,將UV 模板圖導(dǎo)入繪圖軟件Photoshop 或Illustrator 中,根據(jù)需求繪制材質(zhì)貼圖;最后,將繪制好的貼圖通過材質(zhì)位圖通道賦給模型,實(shí)現(xiàn)二維平面精準(zhǔn)映射到三維模型的立體表面上。另外,材質(zhì)和貼圖的命名應(yīng)該與模型對(duì)應(yīng),貼圖文件的尺寸必須是2n,從呈現(xiàn)的效果和占用的資源綜合考慮,貼圖尺寸通常不超過1024 px×1024 px[7],如果有特殊需求可以調(diào)整尺寸。展UV 時(shí),必須遵守以下規(guī)則:UV 區(qū)塊應(yīng)該盡量分成較大的區(qū)塊;盡量減少UV貼圖的變形、扭曲和拉伸,可以使用棋盤格檢測;UV 必須在有效方形區(qū)域內(nèi),充分利用空間合理布局,不可重疊;必須保持UV區(qū)塊間比例大小。
基于校園實(shí)景的虛擬現(xiàn)實(shí)導(dǎo)航系統(tǒng)的開發(fā)流程見圖1,每個(gè)流程環(huán)環(huán)相扣、緊密銜接。項(xiàng)目實(shí)施過程中將流程拆分成“積木”,對(duì)每個(gè)“積木”進(jìn)行制作整理。
圖1 基于校園實(shí)景的虛擬現(xiàn)實(shí)導(dǎo)航系統(tǒng)的開發(fā)流程
Unity 3D 中使用3Ds Max 構(gòu)建的模型,須注意以下幾方面:確保模型的軸心與中心一致,物體模型的軸心不一定在自身的中心,導(dǎo)出前需將模型的軸心與中心對(duì)齊重合;確保模型的貼圖可用,Max 中構(gòu)建好的模型以Autodesk(*.FBX)格式導(dǎo)出,在導(dǎo)出設(shè)置中“嵌入媒體”,所使用的貼圖將隨模型一并導(dǎo)出,再將導(dǎo)出的FBX 文件存放于該Unity 項(xiàng)目下的Assets 文件夾中,載入模型時(shí)將自動(dòng)生成貼圖文件,模型也自動(dòng)顯示貼圖材質(zhì);導(dǎo)出模型時(shí)需修正坐標(biāo),確保Unity 3D加載模型時(shí)坐標(biāo)正確,Unity 3D采用標(biāo)準(zhǔn)的笛卡爾坐標(biāo)系,是左手坐標(biāo)系,而Max 采用右手坐標(biāo)系,導(dǎo)出模型時(shí)必須將軸轉(zhuǎn)化的向上軸改為“Y-up”[8]。
創(chuàng)建Unity 3D 項(xiàng)目,導(dǎo)入SDK,添加Terrain 對(duì)象根據(jù)校園的地理信息創(chuàng)建地形;加載三維場景模型,模型按實(shí)際位置放置,搭建校園的擬態(tài)環(huán)境,盡可能真實(shí)地反映校園環(huán)境,包括建筑物的外形、顏色、紋理,道路的路徑,樹木的位置和形狀等。依據(jù)模型的形狀和剛體特性,為各模型添加不同類型的碰撞體組件,如Box Collider、Mesh Collider 等,在Unity 3D中添加的3D對(duì)象自帶碰撞體。樓宇的外形結(jié)構(gòu)類似長方體,選擇為其添加Box Collider,避免用戶漫游場景時(shí)發(fā)生穿透現(xiàn)象,并添加VR Interactive Item事件,做好人機(jī)交互活動(dòng)的準(zhǔn)備工作,見圖2。
圖2 Box Collider的設(shè)置
在工程項(xiàng)目中,導(dǎo)入Standard Assets、Enviromment資源包,直接使用資源包中花草樹木的素材搭建校園景觀。花草樹木具有自然的光影且隨風(fēng)搖擺,在構(gòu)建景觀時(shí)一定要控制植被的數(shù)量,以免占用太多資源影響實(shí)時(shí)效果的呈現(xiàn);運(yùn)用資源包中的Water素材構(gòu)建波光粼粼的湖泊,并加載Bridge 中的模型補(bǔ)充完善擬態(tài)環(huán)境;再導(dǎo)入Sky.unitypackage 天空素材包,設(shè)置天空背景并調(diào)整燈光,使光影與日照協(xié)調(diào),擬態(tài)場景符合現(xiàn)實(shí)景觀;然后確保將與用戶發(fā)生交互行為的所有模型添加碰撞體組件。同時(shí),創(chuàng)建并利用攝像機(jī)StartCamera 設(shè)置導(dǎo)航起始點(diǎn),規(guī)劃設(shè)計(jì)導(dǎo)航路線;使用SendMessage函數(shù)提供指引和指示功能,顯示路線提示信息及樓宇功能信息等,宣傳校園人文文化;通過Button 控件組收集用戶的動(dòng)態(tài)反饋信息,選擇觸發(fā)不同事件。
用戶與導(dǎo)航系統(tǒng)的交互主要通過用戶的注視行為模擬實(shí)現(xiàn)。導(dǎo)航系統(tǒng)利用虛擬現(xiàn)實(shí)設(shè)備實(shí)時(shí)獲取用戶眼睛的聚焦點(diǎn),以確定用戶在擬態(tài)場景中的位置和移動(dòng)軌跡,同時(shí)利用捕獲到的碰撞檢測信息觸發(fā)交互事件,實(shí)現(xiàn)用戶與系統(tǒng)的交互,實(shí)時(shí)切換場景中的3D畫面,完成交互細(xì)節(jié)。用戶與導(dǎo)航系統(tǒng)的交互流程見圖3。
圖3 用戶與導(dǎo)航系統(tǒng)的交互流程
用戶與導(dǎo)航系統(tǒng)的交互實(shí)現(xiàn)如下:創(chuàng)建VR Eye Raycaster、VR Input 和VR Interactive Item 類處理用戶與系統(tǒng)的交互事件[9]。將VR Eye Raycaster 掛在主攝像機(jī)StartCamera(見圖4),每次調(diào)用Update()時(shí)向用戶凝視的方向發(fā)射一條射線,再調(diào)用Physics.Raycast()檢測射線是否擊中場景中的某個(gè)碰撞體[10]。當(dāng)射線擊中碰撞對(duì)象時(shí),在被擊中的對(duì)象上查找VR Interactive Item(Script)控件,判斷用戶聚焦的目標(biāo)對(duì)象,顯示提示信息,根據(jù)用戶的反饋動(dòng)作觸發(fā)后繼的響應(yīng)事件;否則根據(jù)用戶聚集點(diǎn)的靠近,沿導(dǎo)航路線模擬用戶移動(dòng),實(shí)時(shí)動(dòng)態(tài)呈示擬態(tài)畫面,實(shí)現(xiàn)導(dǎo)向功能。
圖4 攝像機(jī)上的主要控件
這系統(tǒng)在PC端進(jìn)行功能開發(fā),測試通過后再移至VR 端。VR Input 控件在直接注冊監(jiān)聽事件的同時(shí),需能夠兼容動(dòng)作發(fā)生源,可以是Gear VR上輸入觸發(fā)的click 事件、taps 類事件和swipes 事件[11],也可以是使用Oculus Rift 時(shí)專為PC 端準(zhǔn)備的鼠標(biāo)鍵盤的輸入事件。
完善虛擬現(xiàn)實(shí)導(dǎo)航系統(tǒng)設(shè)計(jì),運(yùn)行測試,修正錯(cuò)誤,使整個(gè)系統(tǒng)運(yùn)行具有低時(shí)延、高仿真的效果,具備人性化操作功能,最后導(dǎo)出APK文件。以Android應(yīng)用平臺(tái)為例,安裝Android Build Support 和Java SDK、Android SDK Tools 插件搭建發(fā)布平臺(tái),將導(dǎo)航系統(tǒng)打包成APK 安裝包,安裝運(yùn)行于手機(jī)終端,再佩戴上VR 眼鏡測試體驗(yàn)效果,發(fā)現(xiàn)問題和不足,及時(shí)調(diào)試并改進(jìn)。
以閩西職業(yè)技術(shù)學(xué)院為例,虛擬現(xiàn)實(shí)導(dǎo)航系統(tǒng)參照校園的平面圖,利用三維可視化建模技術(shù)和虛擬現(xiàn)實(shí)技術(shù)設(shè)計(jì)實(shí)施整個(gè)系統(tǒng),系統(tǒng)構(gòu)建了與校園實(shí)景幾乎一致的擬態(tài)環(huán)境,在擬態(tài)校園里花草樹木搖曳生姿、湖面波光粼粼,完全符合自然景觀。用戶佩戴VR 眼鏡即可突破時(shí)空的限制以第一人稱的視角沉浸式地游走于校園,達(dá)到身臨其境的體驗(yàn)效果。虛擬現(xiàn)實(shí)導(dǎo)航系統(tǒng)以學(xué)校西門為導(dǎo)向起點(diǎn),通過用戶眼睛的凝視行為指引導(dǎo)航系統(tǒng)沿規(guī)劃路線呈現(xiàn)動(dòng)態(tài)3D 畫面,展現(xiàn)校園立體風(fēng)光;當(dāng)系統(tǒng)捕捉檢測到用戶駐足注視某個(gè)建筑物的行為時(shí),系統(tǒng)提供此建筑物的關(guān)鍵信息,激發(fā)用戶深入了解的興趣,利于宣傳學(xué)校的人文景觀和辦學(xué)理念。