崔林林, 崔衛(wèi)麗
(1.中原工學院 機電學院, 河南 鄭州 450007; 2.中原工學院 計算機學院, 河南 鄭州 450007)
虛擬現(xiàn)實(Virtual Reality,VR)技術,是一門融合了多媒體、圖形圖像、計算機仿真、網(wǎng)絡技術和人工智能等多個技術分支的多學科綜合技術。該技術目前在許多領域都得到了廣泛應用,尤其是在建筑仿真和實時漫游等領域的應用,開創(chuàng)了人機交互的新局面。本文利用VRML設計開發(fā)一個虛擬樓房漫游系統(tǒng),并采用改進的LOD算法提高圖像渲染速度。用戶不僅可以像在真實世界中一樣對場景進行參觀瀏覽,而且還能通過鼠標、鍵盤等輸入工具對系統(tǒng)中的虛擬實體進行交互操作。
為了保證虛擬樓房漫游系統(tǒng)在普通PC機上的穩(wěn)定運行,并達到漫游者與場景對象實時交互的要求,本文對系統(tǒng)進行了功能模塊的劃分。系統(tǒng)包括三維場景模型構(gòu)建、場景漫游控制及用戶與虛擬場景的實時交互等模塊。各模塊在功能上相互獨立,它們之間利用數(shù)據(jù)接口進行聯(lián)系。虛擬漫游系統(tǒng)的設計架構(gòu)如圖1所示。
圖1 虛擬漫游系統(tǒng)的設計架構(gòu)圖
虛擬樓房漫游系統(tǒng)的實現(xiàn),重點是構(gòu)建三維場景模型、實現(xiàn)場景漫游和人機交互功能等。系統(tǒng)具體的開發(fā)流程如下:
(1) 利用3ds MAX和VrmlPad等模型構(gòu)造軟件,依據(jù)設定比例和樣式分別構(gòu)建場景模型,包括建筑模型、花草樹木模型等。
(2) 利用相應的接口技術,將利用3ds MAX構(gòu)造的對象模型以.wrl格式文件導出,然后導入到VRML場景中,在VRML中進行紋理、燈光處理,使模型得到優(yōu)化,實現(xiàn)場景模型的調(diào)度及虛擬漫游。
(3) 完成系統(tǒng)人機交互功能的程序設計,使系統(tǒng)對用戶的操作進行實時反饋,并實現(xiàn)系統(tǒng)的碰撞檢測功能。
圖2 系統(tǒng)的具體開發(fā)流程
結(jié)合3ds MAX與VRML構(gòu)建虛擬場景模型,采用3ds MAX實現(xiàn)建筑物主場景的構(gòu)建,再把建好的模型導入到VRML環(huán)境中。虛擬樓房漫游系統(tǒng)的模型構(gòu)建流程如圖3所示:
圖3 虛擬樓房漫游系統(tǒng)的模型構(gòu)建流程
2.1.1 實體造型建模的原則
針對漫游系統(tǒng)中場景細節(jié)和瀏覽速度之間的矛盾,系統(tǒng)在設計過程中遵循“速度優(yōu)先,兼顧細節(jié)”的設計原則。在保證場景瀏覽速度的前提下,盡可能滿足實體細節(jié)顯示的需求。通過USE機制對Shape節(jié)點進行重復調(diào)用簡化描述文件;利用模型差值信息漸增的思想改進傳統(tǒng)LOD算法,從而減少模型數(shù)據(jù)量;對大規(guī)模的虛擬場景進行分割調(diào)度,達到實時漫游的目的;采用刪除缺省節(jié)點域值和降低浮點數(shù)值精度等方法進一步優(yōu)化文件,提高場景顯示速度。
2.1.2 建筑模型的建立
由于建筑模型的復雜性,不可能利用VRML編碼實現(xiàn),需結(jié)合3ds MAX和VRML實現(xiàn)場景建模。對比3ds MAX環(huán)境下的幾種基本幾何體的構(gòu)建方法,并考慮3ds MAX導出生成的虛擬文件時可能因VRML程序坐標記錄太多而導致虛擬文件過大,進而影響到虛擬漫游速度的問題,本系統(tǒng)的場景建模主要采用line命令結(jié)合extrude命令實現(xiàn)。比如樓梯模型的構(gòu)建,通過line命令構(gòu)建出輪廓,再進行拉伸調(diào)整,可以減少不必要的面數(shù)和點數(shù),進而減小虛擬文件。除了建模方法,紋理貼圖也會影響漫游速度,因為從3ds MAX導出的虛擬文件和貼圖一起,才構(gòu)成整個VR場景系統(tǒng)。系統(tǒng)利用Photoshop軟件對場景的應用圖片進行壓縮,可減少文件數(shù)據(jù)量,提高虛擬漫游執(zhí)行的速度。
下面以虛擬樓房漫游系統(tǒng)中的樓體造型為例介紹詳細的建模過程:
(1) 將樓房的外部輪廓平面圖導入3ds MAX,再通過旋轉(zhuǎn)、平移和反轉(zhuǎn)等工具調(diào)整到合適位置,作為建立三維場景模型的參考圖。
(2) 參照導入的平面圖建立模型。為了保證系統(tǒng)的漫游速度和場景的繪制速度,在不損失樓體真實性的基礎上,應盡量減少描述樓房對象表面的多邊形數(shù)量。對于在視覺感受上基本處于相同平面上的墻體和窗戶等實體,應先把它們構(gòu)造在同一平面上,再采用貼圖的方式實現(xiàn)繪制,最后貼到對應的面上。創(chuàng)建好的場景模型如圖4所示。
圖4 樓房場景模型圖
(3) 在所建模型的基礎上,通過UV編輯器展開樓房的UV,對其進行貼圖。先用Photoshop軟件處理拍攝的紋理圖和整體圖,再利用紋理映射技術對場景進行貼圖處理。渲染后的樓房場景效果如圖5所示。
2.1.3 花草樹木、光源等輔助物設計
系統(tǒng)采用紋理貼圖的方式構(gòu)建花草樹木等輔助對象的場景模型。以花草模型為例,其構(gòu)建的主要過程如下:
(1) 首先采集創(chuàng)建對象的實物照片,然后利用Photoshop軟件對其進行處理,并采集出實物照片中的花草,保存。
(2) 采用DEF機制重定義Shape節(jié)點,并對其中的appearance域進行圖像紋理映射定義。
(3) 定義過Shape節(jié)點以后,利用Transformer節(jié)點對其進行相應的縮放、旋轉(zhuǎn)等設置。
以上只是實現(xiàn)一簇花草模型的構(gòu)建步驟,若需要構(gòu)建多個模型,則可以通過USE機制來完成。
圖5 樓房場景效果圖
2.1.4 虛擬環(huán)境的背景設計
VRML的空間背景可以看成是一個包圍空間周圍的球狀體,以地平線分割為天空和地面兩部分。創(chuàng)建空間背景的關鍵節(jié)點是Background節(jié)點。在VRML空間的坐標系中,以z-x平面為底平面,y軸正向指向天空,y軸負向指向大地。在實際創(chuàng)建中,可以建一個大的半圓球體再貼上天空圖像來表示天空,創(chuàng)建一個大的立方體表示大地。虛擬空間中天地背景的節(jié)點結(jié)構(gòu)如圖6所示。
圖6 空間背景結(jié)構(gòu)圖
在VrmlPad中,可以通過改變其中的skyColor和groundColor值來改變天空和地面的顏色,改變skyAngle和groundAngle值來改變天空角和地面角。
在完成三維虛擬場景的建模以后,需把可瀏覽的包含細化場景的樓房內(nèi)部場景和外觀場景組合起來,才能構(gòu)成一個完整的虛擬樓房漫游場景。場景模型的連接可以通過Inline內(nèi)聯(lián)節(jié)點來完成。
模型組合以后可進行漫游的室內(nèi)外效果如圖7、圖8 所示。
提高場景漫游速度是系統(tǒng)優(yōu)化的主要內(nèi)容,在該虛擬樓房漫游系統(tǒng)中,主要是采用了改進的LOD算法、限定視角和可視距離以及場景分割技術等場景優(yōu)化方式。
2.3.1 改進的LOD算法的應用
傳統(tǒng)LOD算法是根據(jù)物體大小和距離視點的遠近,采用不同的細節(jié)描述方法。比如較小的物體或距離視點較遠的物體,可以用粗糙一些的LOD模型繪制,而較大的物體或距離視點較近的物體,使用相對精細的LOD模型繪制[4]。對于數(shù)據(jù)量較少的植物模型來說,使用傳統(tǒng)的LOD算法比較適合。但對于數(shù)據(jù)量較多的樓房,如果使用傳統(tǒng)的LOD模型方法,為樓房建立多級模型,就會造成建模工作量大、文件數(shù)據(jù)過多和圖形跳變等問題。
針對傳統(tǒng)LOD算法的不足,本文采用模型差值信息漸增的思想對LOD算法進行改進。對每個場景只建立一個清晰的模型,根據(jù)視距從近到遠的變化,把傳統(tǒng)LOD逐級模型中信息數(shù)據(jù)的差值設置成從高到低的顯示渲染級別,而且把最低級別模型的信息數(shù)據(jù)設置成在物體視點可視范圍內(nèi)永遠可見,這樣既避免了同一場景重復建模的麻煩,也不必考慮各層次模型之間的平滑過渡和重復渲染問題[4]。
圖7 室外效果圖
圖8 室內(nèi)效果圖
2.3.2 限定視角和可視距離
為了消除渲染速度造成的用戶視覺的跳躍感和停頓感,通過在一定范圍內(nèi)限定視角和可視距離,限定場景的大小,避免出現(xiàn)過大的場景,以減少場景中顯示的模型數(shù)量,進而提高場景渲染速度。這主要是利用Viewpoint節(jié)點來實現(xiàn)。
2.3.3 場景的分割調(diào)度
由于樓房場景文件的數(shù)據(jù)量較大,場景比較復雜,所以采用分割調(diào)度的方法,將大場景分成多個小場景分段進行調(diào)度,進一步提高系統(tǒng)運行效率。但是,為了保證漫游效果的真實性,需要無縫連接多個空間場景。本文利用VRML提供的內(nèi)聯(lián)節(jié)點(Inline)進行子場景的自動連接。
VRML實現(xiàn)交互功能的基本機制如圖9所示。
在VRML中實現(xiàn)交互功能的方式有兩種:非編程交互和編程交互。非編程交互方式是在VRML自帶節(jié)點的基礎上實現(xiàn)的,它利用傳感器節(jié)點(如接近傳感器、可視性傳感器等)來感知虛擬場景中用戶的位置和操作,通過事件傳遞機制,實現(xiàn)用戶與虛擬場景中實體對象的交互。但非編程交互方式只能實現(xiàn)簡單的交互行為,對于復雜的動態(tài)交互則很難實現(xiàn),因而需要對VRML的交互能力進行擴展。可以將Java、JavaScript與VRML相結(jié)合,采用編程方式加強VRML的動態(tài)交互能力。具體的實現(xiàn)方式有以下兩種:
圖9 VRML基本交互機制示意圖
(1) 腳本編程接口(SAI,Script Authoring Interface)
Script節(jié)點的工作原理如圖10所示。
圖10 Script節(jié)點工作原理圖
在Script節(jié)點中,eventIn域用來接受輸入事件的響應值;eventOut域用來發(fā)送事件的響應值;Field域主要用來表示在Java或JavaScript編寫的程序腳本中用到的變量;url域的域值指向由Java或JavaScript編寫的程序腳本。
(2) 外部編程接口(EAI,External Authoring Interface)
EAI的工作原理如圖11所示。
圖11 EAI的工作原理圖
EAI是SGI公司設計的Java類包,通過定義的Java Applet通信接口可以對VRML場景進行控制,還能通過網(wǎng)絡操作和其他媒體進行交互,進而創(chuàng)建更復雜的虛擬環(huán)境系統(tǒng)。
本系統(tǒng)中,許多交互操作都是基于SAI實現(xiàn)的。比如當鼠標移到到某個可操控對象時,通過鼠標的單擊或雙擊操作,就可以實現(xiàn)對該對象的交互操作,如抽屜的開關、門的開關等。
本文對虛擬漫游系統(tǒng)涉及的關鍵技術(如虛擬場景建模技術和場景的實時交互技術等)進行了研究,實現(xiàn)了基于VRML的虛擬樓房漫游系統(tǒng)。針對場景漫游過程中存在的實時性問題,通過對傳統(tǒng)LOD模型算法的改進,提高了虛擬場景的漫游速度。但由于時間和自身能力的限制,還需要在以下方面繼續(xù)研究:
(1) 進一步完善系統(tǒng),如系統(tǒng)只有部分樓體內(nèi)可以進行交互操作,與現(xiàn)實世界相比還存在一定差距。
(2) 進一步研究VRML技術,擴大改進的LOD算法的應用范圍,并研究從其他方面對系統(tǒng)進行優(yōu)化的辦法。