APP下载

基于OSG的Speedtree植物模型绘制研究

2012-05-04黄心渊

计算机工程与设计 2012年6期
关键词:绘制可视化建模

刘 颖,罗 岱,黄心渊

(北京林业大学 信息学院,北京100083)

0 引 言

我国国家林业局在2001年提出了 “数字林业”的概念。林业信息的可视化是数字林业的一个重要组成部分,是林业信息处理的一个必要的环节[1]。2007年,北京林业大学信息学院在数字林业背景下开始进行林业可视化方面的研发工作,2008年和2009年分别基于OSG实现了林地可视 化 系 统[2,3]和 基 于 纹 理 替 换 的 植 物 建 模 与 绘 制[4-5],2010年在此基础上开发森林景观可视化框架[6]。但林业信息可视化的任务不单是完成基本的林分数据三维可视化,还需在森林植被真实感绘制方面也要达到较高的水平,对于已有的森林景观可视化框架,需要提高其绘制的真实感与绘制效率。然而森林植物的几何结构复杂性导致三维模型产生大量的面片数,使仿真系统运行缓慢,所以一般的林业可视化系统在进行大片森林仿真时一般采用基于图像的建模方法,以避免基于多边形建模生成的大量模型面数,例如广告牌技术、纹理切片等方法[6],但这些方法都以降低树木的真实感为代价,真实感较差。

美国IDV公司开发的Speedtree 5.2植物模型软件(以下简称Speedtree)不仅植物模型真实感较高,而且在模拟大面积森林植物时绘制效率较高,同时提供了丰富的植物模型库和软件开发接口。Speedtree植物模型软件的特点可以满足景观可视化框架的改进需求。所以,引入Speedtree5.2植物模型到森林景观可视化框架,不仅可以完善我院森林景观可视化平台,同时又是林业信息可视化工作的一项重要进展。

1 Speedtree植物模型渲染特性

Speedtree作为国际上主流的植物建模软件,它包含4个组件,分别是建模组件(Speedtree modeler)、编译组件(Speedtree compiler)、软件开发包(Speedtree SDK)及其植物模型库。其植物模型采用混合绘制技术,将基于图像的绘制技术和基于多边形的绘制技术相结合,无论从绘制速度或植物细节表现来讲,都优于基于图像和基于多边形的绘制技术。Speedtree将树木模型为树干、树枝、细枝和树叶4个组成部分。其纹理分为3级,分别是基本贴图、光照贴图和法线贴图,其中法线贴图对提高植物真实感有重要作用。

在Speedtree中,如果一个模型离摄像机越近,则模型细节越多,反之,离摄像机越远面数越少,模型距离摄像机的距离与模型面数成线性差值关系。一般情况下Speedtree的多细节层次技术(Level of Detail,LOD)包含近距离和远距离两个数值,在这两个距离值中间划分为若干个LOD层次,距离大于LOD远距离时则使用布告板模式代替几何模型。如图1所示。

图1 Speedtree植物模型的LOD技术

2 Speedtree植物模型在OSG中的绘制方法比较

Speedtree植物模型在OSG中的绘制有4种方法,即:基于网格模型的方法、基于Speedtree核心库的方法、基于Speedtree森林层级的方法和基于Speedtree渲染接口的方法。

2.1 基于网格模型的方法

基于网格模型的方法是利用建模组件(Speedtree modeler)中的原有功能,从应用程序中导出通用的网格模型并在OSG中渲染该模型,例如 “obj”格式。基于网格模型的方法是最简单、快速的方法,但网格模型只包含了几何、纹理等静态信息。不能利用Speedtree特有的LOD技术、风效、布告板方案、森林管理方案和裁剪优化等[6]。网格模型不仅需要靠OSG自行实现LOD等优化技术,而且渲染效果由于失去了很多Speedtree模型特性。

2.2 基于Speedtree核心库的方法

Speedtree5.2植物建模软件提供了的核心库使得OSG引擎可以获得所有的建模组件(Speedtree modeler)产生的数据。单株树木的渲染效果与建模组件中的显示效果相似。但此集成方法不包括Speedtree特有的布告板方案、森林管理方案、裁剪引擎、自动LOD技术等[7]。当需要大规模森林时,此方法不能有效地进行森林级别的渲染优化,渲染效率低,不适合森林场景的绘制。

2.3 基于Speedtree森林层级的方法

森林库层级的集成方法提供了非常有效的剔除算法,可同时处理大片、多个森林,提供LOD技术[7]。因需处理的数据过多,该方法省略了一些特性,比如基于顶点shader实现的风效等。

2.4 基于Speedtree渲染接口的方法

Speedtree SDK 5.2提供了一套基于 Speedtree渲染接口集成方法,可以将Speedtree的全部特性功能加以利用,绘制效果逼真,渲染效率在以上3种方法中是最高的。但是此套渲染程序不方便用户自定义某些功能特性,只能直接使用接口中预设的功能。

3 Speedtree植物模型在OSG中的绘制

经过4种Speedtree植物模型在OSG中的绘制方法比较和森林景观可视化平台[7]的实际改进需求,本文采用了基于Speedtree渲染接口的绘制方法,并对Speedtree和OSG各自的渲染系统进行研究,并提出了实现Speedtree植物模型在OSG中的绘制算法。

3.1 Speedtree与OSG渲染原理

3.1.1 OSG场景图形组织方式

OSG图形系统是一个基于工业标准OpenGL的软件接口。OSG场景图形的组织方式呈树状结构,根节点下包含若干个组节点,组节点中又包含了若干叶节点。场景图形组织方式如图2所示。

图2 OSG场景图形组织方式

3.1.2 OSG场景图形渲染方式

OSG中的动态的几何体更新,拣选,排序和高效渲染,需要进行更新遍历、拣选遍历和绘制遍历。更新遍历是实现动态场景的遍历,它由程序或者场景图形中节点对应的回调函数完成[8]。更新遍历包含了虚拟场景中的摄像机更新等。拣选遍历主要负责检查场景中节点的包围体,将在包围体中的节点添加的OSG渲染列表中[8]。绘制遍历会依次遍历拣选遍历过程中生成的几何体列表,并执行Open-GL操作进行渲染[9-11]。

3.1.3 Speedtree的渲染方式

Speedtree提供的软件开发包(Speedtree SDK)为实现与其他三维渲染引擎的兼容提供了应用程序接口。使用该接口,用户可以构建一个森林虚拟环境,包括地形、森林植物分布、植株对象及其引用创建以及风力、光照、视口等的定义。最后,这个虚拟环境可以提交Speedtree植物建模软件的渲染子系统完成实时绘制。具体过程如下:

图3 Speedtree例子程序渲染流程

Speedtree的渲染方式[7]如图3所示,其流程呈流水线状态,首先设置全局风和更新摄像机的位置,完成准备工作后,开始绘制。森林组件的绘制,包括树木枝条、侧枝、网格形式地叶片、布告板形式的叶片、水平和垂直的布告板、地形以及草地。最后结束渲染。流水线形式地渲染方式简单明了,有利于后期集成开发。

3.2 Speedtree在OSG中绘制的实现

一般的几何体在OSG中绘制时,有一套完整的渲染流程,Speedtree植物模型作为待渲染的几何体,也同样参与到OSG的整套渲染流程中。但由于我们需要保留Speedtree植物模型的渲染特性,其本身也具有完整的渲染流程,因此OSG渲染流程和Speedtree的渲染流程如何进行融合成为了研究的重点问题。

3.2.1 Speedtree植物模型在OSG中的存在形式

OSG场景管理的机制要求Speedtree植物模型数据集成到OSG场景中时,需要设计成为OSG的节点管理模式,也就是说Speedtree植物模型的几何数据和渲染状态数据必须以一个或多个节点的形态存储到OSG场景中,如图4所示,Speedtree植物模型作为一个Speedtree节点存在于OSG场景中。

3.2.2 坐标系统的同步

图4 Speedtree节点在OSG中的存在形式

在Speedtree的集成开发工作中,坐标系统必须要进行统一。Speedtree软件开发包(Speedtree SDK)为了配合不同渲染引擎分别设置了不同的坐标系统[7],如图5所示。

图5 Speedtree软件开发包设置的4种坐标系统

默认的坐标系统采用 “右手坐标系,Z轴向上”坐标系统,同样的,OSG的坐标系统为 “右手坐标系,Z轴向上”,所以Speedtree集成OSG时,不需要调整坐标。

3.2.3 相机的同步

OSG场景的默认相机与Speedtree软件开发包(Speedtree SDK)提供的相机接口的同步是插件开发中的关键问题,为了实现Speedtree相机在每一帧渲染图像中与OSG默认相机同步更新,需要重写osg::Drawable::Update-Callback类,将OSG默认相机信息逐帧传给Speedtree相机接口,包括相机视点、视点矩阵和投影矩阵参数,如图6所示,从而实现二者相机的联动。

3.2.4 Speedtree节点在OSG中的更新与裁剪

根据OSG的场景图形渲染方式可知,Speedtree植物模型作为一个OSG场景节点,在OSG中的更新也同样遵循OSG场景图形更新机制。Speedtree节点的动态更新,拣选,排序和高效渲染,也在OSG场景图形的更新遍历、拣选遍历及绘制遍历中进行。场景的交互操作和动态风效都会引发场景图形的更新,Speedtree节点在OSG场景树中参与的更新遍历,更新遍历的遍历顺序如图7所示。Speedtree在OSG树形结构中也参加裁剪遍历,裁剪遍历和更新遍历的遍历顺序相同,如图7所示。OSG的裁剪遍历也是伴随着用户交互事件和动态事件执行的,裁剪遍历将能被用户看到的对象发送到图形渲染列表中,等待绘制遍历调用底层应用程序接口实现几何体的渲染。

3.2.5 Speedtree节点在OSG中的绘制算法

Speedtree节点不仅是OSG场景节点,同时具有特殊性。其特殊性体现在两点:①Speedtree节点不只是一系列需要处理的顶点数据,它本身具有独特的绘制流程;②Speedtree节点有单独的摄像机系统。

如图8示,OSG在渲染一帧时的Speedtree节点在OSG中绘制算法流程。OSG场景图形在创建Speedtree节点时,自动调用绘制回调函数、更新回调函数和裁剪回调函数。经过重写的OSG场景图形绘制回调函数是Speedtree与OSG三维渲染引擎的重要连接点,它包含了Speedtree模型绘制所需要的基本程序接口。更新回调函数负责更新场景相机视图,裁剪回调函数负责森林裁剪。绘制、更新和裁剪回调函数共同完成了Speedtree节点在OSG场景图形中的动态更新,实现了Speedtree植物模型在OSG三维渲染引擎中的实时绘制。

3.2.6 渲染结果

本文通过基于Speedtree渲染接口的方法实现了将Speedtree植物模型的成功导入,其渲染结果如图9所示。

4 结束语

目前,研究工作已基于Speedtree渲染接口完成了Speedtree模型在OSG中的基本绘制,实现了Speedtree渲染特性基于OSG三维渲染引擎的引入,并且通过预留接口可以设置森林植物的分布。植物模型不仅渲染效率高,而且真实感强。此项研究工作的完成具有很大意义,Speedtree先进绘制技术的引入,不仅克服了传统植物建模技术的瓶颈,提高植物模型的真实感,完善了北京林业大学信息学院景观可视化框架,而且这项研究工作是林业可视化工作又一进展,推动了 “数字林业”构想的实现进程。

[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数字林分景观可视化技术研究 [J].北京林业大学学报,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).[于鹏.林分树木可视化关键技术研究 [D].北京:北京林业大学,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).[罗岱,谢茂金,曹卫群,黄心渊.基于GPU编程的地形可视化 [J].中国图像图形学报,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林地可视化系统设计与实现 [J].系统仿真学报,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的林分场景可视化研究与实现 [D].北京:北京林业大学,2009:31-38.]

[6]LUO Dai.Forest landscape structure and growth real-time simulation[D].Beijing:Beijing Forestry University,2010:33-58(in Chinese).[罗岱.森林景观结构与生长实时仿真 [D].北京:北京林业大学,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). [王锐,钱学雷.OpenScene-Graph三维渲染引擎设计与实践 [M].北京:清华大学出版社,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].北京:清华大学出版社,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.

猜你喜欢

绘制可视化建模
基于CiteSpace的足三里穴研究可视化分析
基于Power BI的油田注水运行动态分析与可视化展示
联想等效,拓展建模——以“带电小球在等效场中做圆周运动”为例
基于CGAL和OpenGL的海底地形三维可视化
“融评”:党媒评论的可视化创新
超萌小鹿课程表
基于PSS/E的风电场建模与动态分析
不对称半桥变换器的建模与仿真
放学后
在转变中绘制新蓝图