劉 穎,羅 岱,黃心淵
(北京林業(yè)大學(xué) 信息學(xué)院,北京100083)
我國國家林業(yè)局在2001年提出了 “數(shù)字林業(yè)”的概念。林業(yè)信息的可視化是數(shù)字林業(yè)的一個重要組成部分,是林業(yè)信息處理的一個必要的環(huán)節(jié)[1]。2007年,北京林業(yè)大學(xué)信息學(xué)院在數(shù)字林業(yè)背景下開始進行林業(yè)可視化方面的研發(fā)工作,2008年和2009年分別基于OSG實現(xiàn)了林地可視 化 系 統(tǒng)[2,3]和 基 于 紋 理 替 換 的 植 物 建 模 與 繪 制[4-5],2010年在此基礎(chǔ)上開發(fā)森林景觀可視化框架[6]。但林業(yè)信息可視化的任務(wù)不單是完成基本的林分?jǐn)?shù)據(jù)三維可視化,還需在森林植被真實感繪制方面也要達到較高的水平,對于已有的森林景觀可視化框架,需要提高其繪制的真實感與繪制效率。然而森林植物的幾何結(jié)構(gòu)復(fù)雜性導(dǎo)致三維模型產(chǎn)生大量的面片數(shù),使仿真系統(tǒng)運行緩慢,所以一般的林業(yè)可視化系統(tǒng)在進行大片森林仿真時一般采用基于圖像的建模方法,以避免基于多邊形建模生成的大量模型面數(shù),例如廣告牌技術(shù)、紋理切片等方法[6],但這些方法都以降低樹木的真實感為代價,真實感較差。
美國IDV公司開發(fā)的Speedtree 5.2植物模型軟件(以下簡稱Speedtree)不僅植物模型真實感較高,而且在模擬大面積森林植物時繪制效率較高,同時提供了豐富的植物模型庫和軟件開發(fā)接口。Speedtree植物模型軟件的特點可以滿足景觀可視化框架的改進需求。所以,引入Speedtree5.2植物模型到森林景觀可視化框架,不僅可以完善我院森林景觀可視化平臺,同時又是林業(yè)信息可視化工作的一項重要進展。
Speedtree作為國際上主流的植物建模軟件,它包含4個組件,分別是建模組件(Speedtree modeler)、編譯組件(Speedtree compiler)、軟件開發(fā)包(Speedtree SDK)及其植物模型庫。其植物模型采用混合繪制技術(shù),將基于圖像的繪制技術(shù)和基于多邊形的繪制技術(shù)相結(jié)合,無論從繪制速度或植物細節(jié)表現(xiàn)來講,都優(yōu)于基于圖像和基于多邊形的繪制技術(shù)。Speedtree將樹木模型為樹干、樹枝、細枝和樹葉4個組成部分。其紋理分為3級,分別是基本貼圖、光照貼圖和法線貼圖,其中法線貼圖對提高植物真實感有重要作用。
在Speedtree中,如果一個模型離攝像機越近,則模型細節(jié)越多,反之,離攝像機越遠面數(shù)越少,模型距離攝像機的距離與模型面數(shù)成線性差值關(guān)系。一般情況下Speedtree的多細節(jié)層次技術(shù)(Level of Detail,LOD)包含近距離和遠距離兩個數(shù)值,在這兩個距離值中間劃分為若干個LOD層次,距離大于LOD遠距離時則使用布告板模式代替幾何模型。如圖1所示。
圖1 Speedtree植物模型的LOD技術(shù)
Speedtree植物模型在OSG中的繪制有4種方法,即:基于網(wǎng)格模型的方法、基于Speedtree核心庫的方法、基于Speedtree森林層級的方法和基于Speedtree渲染接口的方法。
基于網(wǎng)格模型的方法是利用建模組件(Speedtree modeler)中的原有功能,從應(yīng)用程序中導(dǎo)出通用的網(wǎng)格模型并在OSG中渲染該模型,例如 “obj”格式?;诰W(wǎng)格模型的方法是最簡單、快速的方法,但網(wǎng)格模型只包含了幾何、紋理等靜態(tài)信息。不能利用Speedtree特有的LOD技術(shù)、風(fēng)效、布告板方案、森林管理方案和裁剪優(yōu)化等[6]。網(wǎng)格模型不僅需要靠OSG自行實現(xiàn)LOD等優(yōu)化技術(shù),而且渲染效果由于失去了很多Speedtree模型特性。
Speedtree5.2植物建模軟件提供了的核心庫使得OSG引擎可以獲得所有的建模組件(Speedtree modeler)產(chǎn)生的數(shù)據(jù)。單株樹木的渲染效果與建模組件中的顯示效果相似。但此集成方法不包括Speedtree特有的布告板方案、森林管理方案、裁剪引擎、自動LOD技術(shù)等[7]。當(dāng)需要大規(guī)模森林時,此方法不能有效地進行森林級別的渲染優(yōu)化,渲染效率低,不適合森林場景的繪制。
森林庫層級的集成方法提供了非常有效的剔除算法,可同時處理大片、多個森林,提供LOD技術(shù)[7]。因需處理的數(shù)據(jù)過多,該方法省略了一些特性,比如基于頂點shader實現(xiàn)的風(fēng)效等。
Speedtree SDK 5.2提供了一套基于 Speedtree渲染接口集成方法,可以將Speedtree的全部特性功能加以利用,繪制效果逼真,渲染效率在以上3種方法中是最高的。但是此套渲染程序不方便用戶自定義某些功能特性,只能直接使用接口中預(yù)設(shè)的功能。
經(jīng)過4種Speedtree植物模型在OSG中的繪制方法比較和森林景觀可視化平臺[7]的實際改進需求,本文采用了基于Speedtree渲染接口的繪制方法,并對Speedtree和OSG各自的渲染系統(tǒng)進行研究,并提出了實現(xiàn)Speedtree植物模型在OSG中的繪制算法。
3.1.1 OSG場景圖形組織方式
OSG圖形系統(tǒng)是一個基于工業(yè)標(biāo)準(zhǔn)OpenGL的軟件接口。OSG場景圖形的組織方式呈樹狀結(jié)構(gòu),根節(jié)點下包含若干個組節(jié)點,組節(jié)點中又包含了若干葉節(jié)點。場景圖形組織方式如圖2所示。
圖2 OSG場景圖形組織方式
3.1.2 OSG場景圖形渲染方式
OSG中的動態(tài)的幾何體更新,揀選,排序和高效渲染,需要進行更新遍歷、揀選遍歷和繪制遍歷。更新遍歷是實現(xiàn)動態(tài)場景的遍歷,它由程序或者場景圖形中節(jié)點對應(yīng)的回調(diào)函數(shù)完成[8]。更新遍歷包含了虛擬場景中的攝像機更新等。揀選遍歷主要負(fù)責(zé)檢查場景中節(jié)點的包圍體,將在包圍體中的節(jié)點添加的OSG渲染列表中[8]。繪制遍歷會依次遍歷揀選遍歷過程中生成的幾何體列表,并執(zhí)行Open-GL操作進行渲染[9-11]。
3.1.3 Speedtree的渲染方式
Speedtree提供的軟件開發(fā)包(Speedtree SDK)為實現(xiàn)與其他三維渲染引擎的兼容提供了應(yīng)用程序接口。使用該接口,用戶可以構(gòu)建一個森林虛擬環(huán)境,包括地形、森林植物分布、植株對象及其引用創(chuàng)建以及風(fēng)力、光照、視口等的定義。最后,這個虛擬環(huán)境可以提交Speedtree植物建模軟件的渲染子系統(tǒng)完成實時繪制。具體過程如下:
圖3 Speedtree例子程序渲染流程
Speedtree的渲染方式[7]如圖3所示,其流程呈流水線狀態(tài),首先設(shè)置全局風(fēng)和更新攝像機的位置,完成準(zhǔn)備工作后,開始繪制。森林組件的繪制,包括樹木枝條、側(cè)枝、網(wǎng)格形式地葉片、布告板形式的葉片、水平和垂直的布告板、地形以及草地。最后結(jié)束渲染。流水線形式地渲染方式簡單明了,有利于后期集成開發(fā)。
一般的幾何體在OSG中繪制時,有一套完整的渲染流程,Speedtree植物模型作為待渲染的幾何體,也同樣參與到OSG的整套渲染流程中。但由于我們需要保留Speedtree植物模型的渲染特性,其本身也具有完整的渲染流程,因此OSG渲染流程和Speedtree的渲染流程如何進行融合成為了研究的重點問題。
3.2.1 Speedtree植物模型在OSG中的存在形式
OSG場景管理的機制要求Speedtree植物模型數(shù)據(jù)集成到OSG場景中時,需要設(shè)計成為OSG的節(jié)點管理模式,也就是說Speedtree植物模型的幾何數(shù)據(jù)和渲染狀態(tài)數(shù)據(jù)必須以一個或多個節(jié)點的形態(tài)存儲到OSG場景中,如圖4所示,Speedtree植物模型作為一個Speedtree節(jié)點存在于OSG場景中。
3.2.2 坐標(biāo)系統(tǒng)的同步
圖4 Speedtree節(jié)點在OSG中的存在形式
在Speedtree的集成開發(fā)工作中,坐標(biāo)系統(tǒng)必須要進行統(tǒng)一。Speedtree軟件開發(fā)包(Speedtree SDK)為了配合不同渲染引擎分別設(shè)置了不同的坐標(biāo)系統(tǒng)[7],如圖5所示。
圖5 Speedtree軟件開發(fā)包設(shè)置的4種坐標(biāo)系統(tǒng)
默認(rèn)的坐標(biāo)系統(tǒng)采用 “右手坐標(biāo)系,Z軸向上”坐標(biāo)系統(tǒng),同樣的,OSG的坐標(biāo)系統(tǒng)為 “右手坐標(biāo)系,Z軸向上”,所以Speedtree集成OSG時,不需要調(diào)整坐標(biāo)。
3.2.3 相機的同步
OSG場景的默認(rèn)相機與Speedtree軟件開發(fā)包(Speedtree SDK)提供的相機接口的同步是插件開發(fā)中的關(guān)鍵問題,為了實現(xiàn)Speedtree相機在每一幀渲染圖像中與OSG默認(rèn)相機同步更新,需要重寫osg::Drawable::Update-Callback類,將OSG默認(rèn)相機信息逐幀傳給Speedtree相機接口,包括相機視點、視點矩陣和投影矩陣參數(shù),如圖6所示,從而實現(xiàn)二者相機的聯(lián)動。
3.2.4 Speedtree節(jié)點在OSG中的更新與裁剪
根據(jù)OSG的場景圖形渲染方式可知,Speedtree植物模型作為一個OSG場景節(jié)點,在OSG中的更新也同樣遵循OSG場景圖形更新機制。Speedtree節(jié)點的動態(tài)更新,揀選,排序和高效渲染,也在OSG場景圖形的更新遍歷、揀選遍歷及繪制遍歷中進行。場景的交互操作和動態(tài)風(fēng)效都會引發(fā)場景圖形的更新,Speedtree節(jié)點在OSG場景樹中參與的更新遍歷,更新遍歷的遍歷順序如圖7所示。Speedtree在OSG樹形結(jié)構(gòu)中也參加裁剪遍歷,裁剪遍歷和更新遍歷的遍歷順序相同,如圖7所示。OSG的裁剪遍歷也是伴隨著用戶交互事件和動態(tài)事件執(zhí)行的,裁剪遍歷將能被用戶看到的對象發(fā)送到圖形渲染列表中,等待繪制遍歷調(diào)用底層應(yīng)用程序接口實現(xiàn)幾何體的渲染。
3.2.5 Speedtree節(jié)點在OSG中的繪制算法
Speedtree節(jié)點不僅是OSG場景節(jié)點,同時具有特殊性。其特殊性體現(xiàn)在兩點:①Speedtree節(jié)點不只是一系列需要處理的頂點數(shù)據(jù),它本身具有獨特的繪制流程;②Speedtree節(jié)點有單獨的攝像機系統(tǒng)。
如圖8示,OSG在渲染一幀時的Speedtree節(jié)點在OSG中繪制算法流程。OSG場景圖形在創(chuàng)建Speedtree節(jié)點時,自動調(diào)用繪制回調(diào)函數(shù)、更新回調(diào)函數(shù)和裁剪回調(diào)函數(shù)。經(jīng)過重寫的OSG場景圖形繪制回調(diào)函數(shù)是Speedtree與OSG三維渲染引擎的重要連接點,它包含了Speedtree模型繪制所需要的基本程序接口。更新回調(diào)函數(shù)負(fù)責(zé)更新場景相機視圖,裁剪回調(diào)函數(shù)負(fù)責(zé)森林裁剪。繪制、更新和裁剪回調(diào)函數(shù)共同完成了Speedtree節(jié)點在OSG場景圖形中的動態(tài)更新,實現(xiàn)了Speedtree植物模型在OSG三維渲染引擎中的實時繪制。
3.2.6 渲染結(jié)果
本文通過基于Speedtree渲染接口的方法實現(xiàn)了將Speedtree植物模型的成功導(dǎo)入,其渲染結(jié)果如圖9所示。
目前,研究工作已基于Speedtree渲染接口完成了Speedtree模型在OSG中的基本繪制,實現(xiàn)了Speedtree渲染特性基于OSG三維渲染引擎的引入,并且通過預(yù)留接口可以設(shè)置森林植物的分布。植物模型不僅渲染效率高,而且真實感強。此項研究工作的完成具有很大意義,Speedtree先進繪制技術(shù)的引入,不僅克服了傳統(tǒng)植物建模技術(shù)的瓶頸,提高植物模型的真實感,完善了北京林業(yè)大學(xué)信息學(xué)院景觀可視化框架,而且這項研究工作是林業(yè)可視化工作又一進展,推動了 “數(shù)字林業(yè)”構(gòu)想的實現(xiàn)進程。
[1]HUAI Yongjian,YU Peng,HUANG Youliang,et al.Realtime rendering of large-scale forest scene based on OSG and GPU [J].Journal of Beijing Forestry University,2009,31(6):67-71(in Chinese).[淮永建,于鵬,黃友良,等.基于OSG數(shù)字林分景觀可視化技術(shù)研究 [J].北京林業(yè)大學(xué)學(xué)報,2009,31(6):67-71.]
[2]YU Peng.The key technology research of stand tree visualization [D].Beijing:Beijing Forestry University,2010:25-42(in Chinese).[于鵬.林分樹木可視化關(guān)鍵技術(shù)研究 [D].北京:北京林業(yè)大學(xué),2010:25-42.]
[3]LUO Dai,XIE Maojin,CAO Weiqun,et al.A terrain visualization algorithm based on GPU programming [J].Journal of Image and Graphics,2008,12(11):2244-2248(in Chinese).[羅岱,謝茂金,曹衛(wèi)群,黃心淵.基于GPU編程的地形可視化 [J].中國圖像圖形學(xué)報,2008,12(11):2244-2248.]
[4]HUANG Youliang,HUAI Yongjian,YU Peng,et al.Design and implementation of forest visualization system based on OpenSceneGraph[J].Journal of System Simulation,2008,20(Suppl):352-358(in Chinese).[黃友良,淮永建,于鵬,艾毅.基于OSG林地可視化系統(tǒng)設(shè)計與實現(xiàn) [J].系統(tǒng)仿真學(xué)報,2008,20(增刊):352-358.]
[5]HUANG Youliang.Study and implement of forest landscape visualization based on OpenSceneGraph [D].Beijing:Beijing Forestry University,2009:31-38(in Chinese).[黃友良.基于OSG的林分場景可視化研究與實現(xiàn) [D].北京:北京林業(yè)大學(xué),2009:31-38.]
[6]LUO Dai.Forest landscape structure and growth real-time simulation[D].Beijing:Beijing Forestry University,2010:33-58(in Chinese).[羅岱.森林景觀結(jié)構(gòu)與生長實時仿真 [D].北京:北京林業(yè)大學(xué),2010:33-58.]
[7]IDV.Speedtree SDK 5.2help system [EB/OL].[2010-10-01].http://www.speedtree.com.
[8]Martz P.OpenSceneGraph quick start quide [EB/OL].[2011-09-29].http://www.openscenegraph.org/osgwiki/pmwiki.php/Documentation/QuickStartGuide.
[9] WANG Rui,QIAN Xuelei.Design and implementation of OpenSceneGraph [M].Beijing:Tsinghua University Press,2009:297-318(in Chinese). [王銳,錢學(xué)雷.OpenScene-Graph三維渲染引擎設(shè)計與實踐 [M].北京:清華大學(xué)出版社,2009:297-318.]
[10]XIAO Peng,LIU Gengdai,XU Mingliang.Guide of Open-SceneGraph programming guide [M].Beijing:Tsinghua University Press,2010:227-235(in Chinese).[肖鵬,劉更代,徐明亮.OpenSceneGraph三維渲染引擎編程指南 [M].北京:清華大學(xué)出版社,2010:227-235.]
[11]WANG Rui.The longest frame [EB/OL]. [2011-09-04].http://wenku.baidu.com/view/d90c0f6c58fafab069dc0211.html(in Chinese).[王銳.最長的一幀 [EB/OL].[2011-09-04].http://wenku.baidu.com/view/d90c0f6c58fafab069dc0211.html.