方 偉
(淮北職業技術學院 計算機科學技術系,安徽 淮北 235000)
隨著VRML技術的不斷成熟和發展,VRML已經被廣泛的應用于人類的生產和生活當中,特別是利用互聯網進行VRML場景信息的傳遞和顯示,讓人們可以足不出戶就能夠享受極富真實感的三維世界。可以說VRML的出現徹底改變了傳統網絡信息的展示方法,使整個虛擬世界不僅增強了虛擬世界的真實感,而且能夠與用戶之間形成較為復雜的交流互動行為。但是伴隨著虛擬場景模型復雜程度的不斷提高和技術應用領域的不斷深入,使得利用VRML制作出來的虛擬場景在進行網絡傳輸時也遇到了一些迫切需要解決的問題,諸如程序代碼偏大,模型自身體積過大造成客戶端場景渲染速度過慢以及交互功能不足等。解決這些問題的關鍵就是對VRML場景模型進行必要的優化,盡量減少模型文件占用的空間和復雜程度,提高VRML場景在網絡中傳輸的穩定性和顯示速度。
VRML實際上是一種用于對三維虛擬場景進行建模的描述性語言,能夠有效的將三維圖形、二維圖形以及其它一些多媒體影音元素整合在一起,開發出基于WWW的三維動態交互式網站,是目前虛擬技術中最為核心和應用最為廣泛的一項技術。VRML文檔一般是由四個部分組成:VRML 文件頭、原型、場景圖(ScenceGraph)、路由(Route)[1]。而形成這四個部分最為重要和核心的元素是節點(Node)。節點是VRML最基本的單位,可以說虛擬場景中所有模型的創建以及其它外部標準格式文件的引入等都是通過節點來去完成。構建虛擬場景文檔節點首先通過自身的語義規則構建虛擬場景的整個內部結構圖;然后利用場景圖中的相應節點從視覺和聽覺的角度去表現相對靜止的對象,這些節點是根據模型的層次體系進行組織,體現了整個虛擬環境的空間結構關系;最終再通過具有事件和路由功能的節點完成場景中的動態效果,也就是形成路由圖,確定虛擬環境隨時間推移動態變化效果。
VRML文檔最終的解釋和執行是通過瀏覽器來完成,這與傳統顯示HTML頁面的方式和原理是相同的,只不過在顯示VRML時瀏覽器要安裝相應插件。VRML的工作方式是基于客戶/服務器模式,由服務器提供VRML文件及場景中所需的多媒體資源,客戶端通過網絡請求下載希望訪問的文檔,最后由本地平臺上的瀏覽器生成VRML描述的虛擬世界,并可以進行交互式的瀏覽操作。由于瀏覽器是本地平臺提供,從而實現了VRML的平臺無關性[2]5-7。
對于較為復雜的模型,如果過多的利用點、線、面對其進行描述和刻畫,勢必要增加模型文件占用空間的大小,也不利于文件的網絡傳輸和實時渲染。因此,在創建模型時通常都采用最基本的造型(Box、Sphere、Cone等)來去構建模型的大致輪廓,然后利用材質貼圖的方法對模型細節進行表現。這樣不僅能夠使模型獲得更加逼真的視覺效果,而且減少了文件的大小[3]35-37。當然,這里所利用的材質貼圖也不應過大,一般不應大于20K字節,因為在VRML文件進行網絡傳輸時貼圖文件的傳輸和下載必然要占用網絡的帶寬和資源,同時,在客戶端瀏覽場景時經常會變化視覺的角度,角度一旦變化場景就會重新進行計算和渲染,這個過程就包括貼圖。因此,可以充分利用紋理貼圖的可重復性和可延展性,盡量使用小紋理代替大紋理文檔,減少貼圖文件的加載和處理時間。另外,對于一些遠景或次要模型,可通過與Billboard節點結合,將模型通過紋理構成幾何體,從而最大可能的縮小VRML模型文件占用的空間和復雜程度。
在場景中許多模型都有許多的共同點和相似性,他們的外形一致,只是在場景中的位置擺放不同,我們可以把這些對象先用DEF去定義,在后期的引入過程中通過USE來去完成,這樣就能避免代碼的重復。PROTO是在VRML規范上擴展的新的節點集的機制,主要針對功能相同但屬性不同的模型對象。通過PROTO可以對幾何體、屬性、操作或他們的集合進行封裝和參數化,后面設計過程中就可以直接使用它,并傳入一定的域值作為改變對象的參 數[4]57-59。VRML 還 支 持 外 部 原 型 (EXTERPROTO),利用VRML中的URL域值進行不同VRML文件之間原型的相互調用,這樣可以提高模型的模塊化特性和可重用性。
VRML文檔中引入了許多圖像、音頻、視頻等多媒體文件,這些文件經過有效的壓縮以后就可以大大減小VRML檔的大小。當然我們的壓縮原則是一定要保證被壓縮文件不失真,否則就無法確保模型的逼真度。除了對VRML文檔素材可以進行壓縮外,還可以對VRML本身進行有效壓縮,壓縮后可以使模型文件體積進一步縮小,減少對網絡帶寬的要求。目前實現這種壓縮過程比較流行的方法是通過VRMLPad中的Publish命令或是GZIP壓縮技術,一般都可以將模型文件大小縮小數倍,大大減少了網絡傳輸時間,提高傳輸效率。
LOD節點能夠根據用戶視點的遠近和范圍,動態的裝載復雜程度不同的場景。客戶端在進行虛擬場景的瀏覽時,經常會變化視覺角度,當角度轉變時虛擬場景就必須要進行再一次的渲染和加載,這樣就會造成系統資源的浪費以及瀏覽速度的降低。實際上當瀏覽者的角度距場景造型較遠時,對場景的表現細節程度要求就不那么高了。因此我們可以對物體創建具有不同層次細節的模型,通常可分為低細節模型、一般細節模型和高層次細節模型。當用戶在進行瀏覽時,如果視點距場景模型較遠,調用低細節模型,只顯示物體大致輪廓;視點較近時,才調用高層次細節模型,以清晰表現物體的細微特征,既保證了模型的逼真度,又加快了場景的渲染和顯示速度[5]7-10。LOD節點有三個域:分別是Center、Range和Level。Center域值說明視點中心的三維坐標,Range域值說明視點的變化范圍,Level通過與Inline節點配合完成對場景文件的調用和顯示。
一個大型的虛擬場景表現需要將若干個VRML文檔進行有效的連接和整合,單獨依靠某一個單獨的VRML文件表示,不僅加大了虛擬系統開發和調試的難度,而且會大大降低模型的加載和渲染速度,經常會產生一些不可預測的錯誤[6]109-112。VRML中通過利用Inline(內聯節點)來解決虛擬場景的整合問題。首先將復雜的虛擬場景分解成若干個較小和較為簡單的小文件,然后分別進行模型的設計和調試,最后構建主場景時只需在要引入模型的位置處通過Inline節點指出模型文件所在的地址和文件名即可。這種優化方法可以使整個場景在客戶端顯示時進行分階段的渲染和下載,提高了場景的執行效率。
真實場景中,我們是無法實現對物體的穿越等情況。因此當用戶在虛擬場景中進行漫游操作時,有必要對場景模型進行必要的碰撞檢測,避免發生穿墻而過等與現實不符的情況,以提高虛擬環境的真實可靠性。但是當場景中引入碰撞檢測機制后,會產生一系列的檢測運算和判斷過程,占用了CPU的大量資源,導致系統加載漫游速度變慢。針對這種情況,通常采取以下兩種方法解決:一是場景設計時盡量減少碰撞檢測的次數,只針對有可能發生穿越的物體引入碰撞檢測;二是針對場景模型不同的特征和作用使用不同的碰撞檢測算法,提高檢測效率。通過以上方法處理后,有效地提高了視景屏幕的刷新率,縮短了碰撞檢測時間,加快了視景碰撞的響應速度,提供了優秀的視覺仿真效果[7]42-44。
一個功能完善和逼真度高的VRML場景從最初的建模到最后的終端顯示,其中主要包括了模型的構建、場景從服務器端到用戶端的傳輸、場景在用戶端的渲染顯示這樣三個環節。因此VRML采取的主要優化技術都來源于這三個過程中涉及到的一些節點、素材、算法等基本元素,通過對他們進行改進和優化,最大限度的減少VRML中的冗余代碼和場景中多余的數據信息,增強虛擬場景的執行效率,呈現給用戶一個逼真度高而且交互能力強的三維網絡世界。
[1]嚴子祥.VRML虛擬現實網頁語言[M].北京:清華大學出版社,2001.
[2]肖龍,劉曉環,寧芋.虛擬現實技術一 VRML[J].微型電腦應用,2001,17(10).
[3]朱世昕,陳立潮.虛擬現實中的場景建模及模型優化技術[J].電腦開發與應用,2005,18(11).
[4]杜玉玲,文西芹.基于B/S模式的遠程虛擬實驗室的開發[J].現代教育技術,2004,14(2).
[5]薛彥兵.較大規模VRML場景實時顯示與交互技術的研究[D].天津:天津理工大學計算機與通信工程學院,2005.
[6]買桂英.VRML虛擬場景優化策略[J].工業儀表與自動化裝置,2011(5).
[7]楊建菊.基于VRML的虛擬校園漫游系統研究[D].貴州:貴州大學計算機與信息科學學院,2010.