項敏敏
(銅陵學(xué)院,安徽銅陵 244061)
隨著虛擬現(xiàn)實應(yīng)用技術(shù)的不斷成熟,桌面虛擬現(xiàn)實系統(tǒng)出現(xiàn)在各大領(lǐng)域中用于物品展示。與傳統(tǒng)的方式如圖片展示、視頻展示相比,交互式虛擬展示提供給用戶更大的自由度和更好的體驗[1]。雖然虛擬展示具有方便、對時間和空間不受限制等優(yōu)勢,但是也隨之帶來很多問題,比如為了追求虛擬場景高質(zhì)量的真實度,使得虛擬場景的文件信息過大,導(dǎo)致即使在高性能的計算機上,用戶對場景的瀏覽也可能會出現(xiàn)卡頓和模型閃爍等一系列問題[2-3],同時在網(wǎng)絡(luò)端下載大數(shù)據(jù)量的虛擬展示場景文件時間很長,用戶瀏覽時不順暢。因此在追求較高的場景真實度的前提下,研究如何提高虛擬展示場景加載速度、增強實時瀏覽時的流暢性具有重要的意義。
X3D中的造型具有幾何尺寸和外觀,它主要提供了4種原始幾何造型:Sphere、Box、cylinder和Cone,任何復(fù)雜的物體都可以由這4種原始幾何造型構(gòu)成[4]。但利用幾何節(jié)點無法構(gòu)建特殊模型,并且X3D-EDIT并不是可視化編輯軟件,建模過程過于繁瑣,所以需要使用3DS MAX高級建模軟件構(gòu)建模型之后導(dǎo)出為VRML格式,再通過X3D-EDIT軟件轉(zhuǎn)換為X3D格式來完成。圖1所示為模型構(gòu)建。
為了加快文件在網(wǎng)絡(luò)上的傳輸速度,方便瀏覽者對虛擬環(huán)境的瀏覽和交互,除了將模型的方位進(jìn)行調(diào)整之外,還必須盡可能優(yōu)化模型的視覺效果,減小其文件體積。采用壓縮和優(yōu)化的方式,針對場景中模型制作和后期的渲染場景優(yōu)化大致可以分為三類。第一,文件壓縮,利用VRML的主流編輯平臺VRMLPad進(jìn)行壓縮,通??梢允刮募捏w積壓縮為原來的1/3以下。第二,源碼優(yōu)化,也是通過VRMLPad編輯器,除了對源代碼進(jìn)行優(yōu)化,還可以利用其它插件工具Comments.rar對源代碼進(jìn)行優(yōu)化,這樣文件體積一般會被再次壓縮10%左右。第三,圖形優(yōu)化,主要通過使用紋理文件貼在形體上的方式,達(dá)到100∶1的壓縮率,并且壓縮后的圖形效果不失真。通過上述優(yōu)化后再通過X3D-EDIT編輯工具把vrml文件轉(zhuǎn)換為X3D文件即可。圖2所示為優(yōu)化前后源碼對比。
圖1 模型構(gòu)建
圖2 優(yōu)化前后對比
在同一文件中,可以使用USE來引用原始節(jié)點任意次,語法:USE“*”。在場景的建構(gòu)過程中,某個模型可能被重復(fù)使用很多次,利用USE節(jié)點只需在文檔中定義一次該模型節(jié)點就可以多次使用,這樣就避免出現(xiàn)大量重復(fù)的代碼,其關(guān)鍵代碼如下所示:
X3D提供LOD節(jié)點,用來描述同一個造型不同細(xì)節(jié)層次的組織關(guān)系。一般近處造型的細(xì)節(jié)要多于遠(yuǎn)處造型的細(xì)節(jié),所以可以利用一定的范圍設(shè)定,在不同的觀察距離上,讓虛擬空間呈現(xiàn)出不同的細(xì)節(jié),這樣不僅加快客戶端渲染場景的速度,同時也增加虛擬世界的真實感[5]。
使用上述兩種方式對模型進(jìn)行優(yōu)化,在很大程度上減少了虛擬場景對系統(tǒng)內(nèi)存的占用量,釋放了系統(tǒng)資源,其基本原理如圖3所示。
圖3 代碼優(yōu)化原理
通過上述兩種方法優(yōu)化之后描述模型的代碼基本接近最優(yōu),目前虛擬場景的構(gòu)建一般都是直接把場景內(nèi)模型全部一次加載,但是當(dāng)出現(xiàn)密集高精度模型的時候,使用一次加載的方式不僅加載時間長而且加載完成之后會嚴(yán)重影響場景的流暢度,所以對于場景內(nèi)的密集高精度模型需要進(jìn)行特殊處理。
X3D使用文本的方式描述模型,對單個高精度模型文件的加載速度很快,在場景內(nèi)使用Inline節(jié)點來控制高精度模型的加載時間會在很大程度上提高場景的流暢度,表1所示為兩種方式的控制方式對比。
表1 控制方式對比
(1)一次加載。不通過任何控制器控制場景內(nèi)的模型加載,直接把場景內(nèi)模型一次解析到內(nèi)存里,并使用瀏覽器插件進(jìn)行搭建渲染[6]。這種方式不僅需要很長時間下載模型文本信息,并且在渲染過程中受到設(shè)備限制,會嚴(yán)重拖慢整個場景的渲染。當(dāng)出現(xiàn)密集高精度模型時,會大量占用系統(tǒng)內(nèi)存,造成虛擬場景卡頓,嚴(yán)重時還會造成內(nèi)存溢出及死機的現(xiàn)象。
(2)Inline節(jié)點控制加載。使用Inline節(jié)點控制場景內(nèi)模型的加載時間,在密集高精度模型存在的情況下,先不加載這些模型,而是使用一個整合了所有高精度模型的貼圖模型進(jìn)行代替,在用戶需要詳細(xì)觀察某個高精度模型時再控制Inline節(jié)點進(jìn)行加載。關(guān)鍵代碼如下:
rotation=‘0 1 0 -2.074’>
如上述代碼所示。命名為ns2的模型的Load屬性為false,表示當(dāng)前不加載該模型,而當(dāng)用戶點擊ns2模型的菜單按鈕時,javascript內(nèi)的cdns02被激活,模型的load屬性被置為true,該模型立即加載到場景內(nèi)供用戶瀏覽。圖4所示為兩種方法的性能參數(shù)對比。
圖4 性能對比
如圖4所示,當(dāng)場景內(nèi)一次加入過多的高精度模型時,不僅需要大量的加載時間,而且內(nèi)存占用量也會相應(yīng)增加。并且由于系統(tǒng)內(nèi)存被占用太多,導(dǎo)致場景運行所需內(nèi)存不足,嚴(yán)重影響了場景的流暢性,增加了場景內(nèi)事件的響應(yīng)時間。使用控制器來控制模型加載,場景響應(yīng)速度較快,一個高精度模型從讀取模型信息到渲染結(jié)束,所需時間不超過2秒,完全可以滿足用戶的瀏覽需求。
在使用X3D建立虛擬仿真場景時,必須要權(quán)衡虛擬現(xiàn)實場景的逼真性與載入和瀏覽速度,既不能為達(dá)到完美的虛擬仿真效果而造成瀏覽的困難,也不能為追求流暢性而過度優(yōu)化造成效果的粗糙或嚴(yán)重失真。只有這樣,才能使X3D的虛擬仿真給用戶帶來最佳瀏覽體驗。