首页 > 范文大全 > 正文

基于OGRE引擎的森林场景渲染研究

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于OGRE引擎的森林场景渲染研究范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:森林场景的实时渲染仍然是图形学领域的一大难题。针对森林场景的复杂性和大数据量等特点,该文在OGRE图形引擎的基础上,通过八叉树结合OGRE中的静态几何体的方法实现大规模森林场景的实时渲染。实验结果表明通过这种方法能够在实时渲染的基础上仍能保持较好的视觉效果。

关键词:森林场景;实时渲染;八叉树;静态几何;OGRE

中图分类号:TP391文献标识码:A文章编号:1009-3044(2008)26-1613-02

Research of Rendering of Forest Scene Based on OGRE Graphic Engine

WU Yong

(School of Software Engineering, Tongji University, Shanghai 200092, China)

Abstract: Rendering a forest scene in real-time is still a great challenge in the field of Computer Graphics. Due to the complexity and massive data in forest scene, this paper expose a way that using both of Octree and Static Geometry based on OGRE graphic engine to render large scale forest scene in real-time. The experiment we did by this way show that we can get a good visual quality while maintaining high frame rates.

Key words: Forest scene; Real-time rendering; Octree; Static geometry; OGRE

1 引言

实时渲染大数据量的森林场景仍然是图形学技术领域的一大挑战,因为森林场景中需要渲染大量的树木,如果每棵树都完整的建模,那么每棵树将包含大量的几何数据。如果不对这些几何数据进行任何简化,即使是现代的高性能显卡也不能做到森林场景的实时渲染。现在已有各种各样的技术被开发出来面对这一难题。一种方法是为每棵树自动生成多细节层次的LOD(level of detail)[1]模型,然后根据树木距离视点的距离选择不同细节层次的树木模型。[2]提出了一中利用3D纹理来表现森林场景的技术,这种方法在远距离观察时能达到比较高的渲染刷新率,但是这种技术在近距离观察时树木将明显失真。[3]使用点而不是三角面片来渲染树木,这种方法可以用在近距离观察森林时,如漫游,同样也可以用于俯瞰森林时。

OGRE[4]图形引擎的场景管理使用插件技术即场景管理器如BSP、Octree场景管理器可以分别挂载到引擎中来对不同场景最优化管理。由于现代GPU更适合渲染少量巨大的物体,而不是很多小的几何片断。比如当一百万个三角面捆绑成一个簇里能达到每秒300帧的渲染速度,在结构组织改变的时候,把这些三角形分布在一千个簇中(平均每簇一千个三角面),就可能会降低到30帧每秒这样的结果。所以在现代3D应用程序中可渲染三角面的数量已经不是衡量应用程序的唯一标准。基于这个原因,在森林场景的渲染时,仅仅减少三角面片数不是绝对的有效。在ogre图形引擎中包含了Static Geometry(静态几何体)这个类,通过将树木模型加入静态几何体中达到减少簇的数目来提高渲染效率。本文通过对静态几何体内树木模型结合八叉树排序的方法实现森林场景的实时渲染

2 算法描述

当距离视点较远时,通过不断渲染Billboard树木能取得较好的视觉效果。但这种方法的瓶颈是需要对每棵树单独产生渲染调用,大量的渲染调用降低了渲染效率。

一种方法是将所有的树都集中在一起组成一大的集合,这样只需要一次渲染调用。但是这种方法的问题是我们不能进行裁剪和LOD选择。静态几何体的一个缺点就算在你的视野里(视截体)中只看到了整个静态几何体的一小部分,甚至包括在你身后的整个数据都会传到图形硬件中渲染。假如你把场景中所有的植被都放到一个静态物体中,即使你只看到一颗小草,那么整个森林都会被渲染。

比较好的方法是使用八叉树将树木按不同LOD层次分组组织:首先将八叉树按照深度优先编号,然后将树木模型按照八叉树的编号加到一个静态几何体里(如图1)。

对每个八叉树节点,存储了每个多边形组的两个顶点数据,分别是每个八叉树节点空间内的几何体的起始顶点和末尾顶点,这样只需要很小的额外存储空间。

现在可以只需要一次渲染调用就可以渲染任意一个八叉树节点空间的几何体,通过选择不同的八叉树的深度,选择不同的分辨率的树木集合。

渲染静态billbord树首先从根节点开始,算法如下描述:

darw_geometry(octant)

{

if(not_visible(octant))

return;

if(dis_to(octant.bound)

for each child octant

draw_geomery(child octant);

return;

if(partially_visible(octant)

and

octant_depth< max_cull_depth)

for each child octant

draw_geometry(child octant);

return;

draw_octant_geometry();

}

当视点距离很近时,八叉树空间将不断分割,而选择合适的精度模型,因此有可能某些树木将使用完全模型来渲染而不是Billbord。同时八叉树空间的不可见区域同将被裁剪掉。

draw_octant_geometry 只需要一次渲染调用。max_cull_depth 定义了八叉树的最大深度。当超过这一深度时,八叉树将不能继续分割来获得不可视区域的裁剪。只有在一定深度范围内,通过分割八叉树空间来裁剪不可见区域才能获得比较好的性能,因为分割同样带来了增加调用渲染的消耗,而且被裁区域可能并不比一片树叶大多少。

3 OGRE中的实现

OGRE的静态类已经实现了对静态几何体的不同区域进行索引。每个八叉树节点存储了静态几何体区域的两个顶点,分别代表八叉树空间中几何体的起始顶点和末尾顶点。

4 实验结果

我们对本文的方法进行了测试。软件环境:Windows XP, Visual Studio 2005 Professional Edition Ogre 1.4.7图形引擎库。硬件配置:Intel T5470, Geforce 8400M GS 128M。

场景包含大约60000棵树,一个地形图和一些小对象。这些树木模型由3DMAX创建。每棵树有3个LOD模型,最简化模型为三块交叉的Bllbord树模型。当使用八叉树结合静态几何体时刷新率为50~100帧每秒。如果仅仅使用Billbord时刷新率为45~50帧每秒。图2显示了运行结果。

5 结束语

本文主要对森林场景在OGRE中的实时渲染进行了分析研究。针对现代GPU的数据处理特点,通过八叉树组织的静态几何体结构能有效的选择树木的几何模型,最大化降低渲染调用的开销,同时只需要很少的额外内存开。在保持比较好的视觉效果同时能保证较高的刷新率。

参考文献:

[1] Fuhrmann A, Umlauf E, Mantler S.Extreme Model Simplification for Forest Rendering[C].Eurographics Workshop on Natural Phenomena,2005:57-66.

[2] Decaudin P, Neyret F.Rendering Forest Scenes in Real-Time[C].Rendering Techniques'04 (Eurographics Symposium on Rendering),2004:93-102.

[3] Gilet G, Meyer A, Neyret F.Pointbased rendering of trees[C].Eurographics Workshop on Natural Phenomena,2005.www.evasion.imag.fr/Publications/2005/GMN05.

[4] Object-Oriented Graphics Rendering Engine[EB\OL]./

[5] 高宇,邓宝松,杨冰,等.基于外存的大规模虚拟环境交互漫游[J].系统仿真学报,2006,18(10):2988-2991.

[6] 陈超,刘静华,马金盛.场景分割算法及其在实时漫游系统中的应用[J].计算机工程,2001,27(8):86-88.

[7] 彭群生,鲍虎军,金小刚.计算机真实感图的算法基础[M].北京:北京科学出版社,1999.