|
基于LOD的大规模真实感室外场景实时渲染技术的初步研究 PART I(2) 但是,这些约束在一个室外的场景中都是不可能的。在一个飞行模拟器中,理论上你可以驾驶飞机朝任何一个无限远的飞去。因为事实也是如此,如果你愿意的话,你可以驾驶飞机绕着地球飞行而不用担心有墙来阻止你的前进。换句话说,一个室外场景的理想大小是无限的大!除了场景的大小以外,同时视野也是无限的。如果你站在高处,你可以俯视任何比你的底的地方,也就是说你有几乎无限的视野。 图(1-2) 典型室外场景,图片来自北航王正盛的Demo :Nature Wing2.0截图 我们知道,无限的大的场景需要无限的场景数据。但是这是不可能的,我们只能希望场景越大越好,室外场景的主要部分是地形的渲染,地形数据的多少决定了场景的大小。所以如何保存这些地形数据成了首要的问题。(但是在现在存储器成本迅速下降的今天,这个问题已经变的不是十分的突出。)其次是无限的视野问题,无限的视野就表示渲染无限的图元(图元即是3DAPI支持的简单的几何图形,详见OpenGL/Direct3D SDK),这也是不可能。图元的数量是以场景大小的平方的速度增长的。光考虑地形数据,一个2048X2048的地形,如果不考虑减低细节程度和裁剪的话,它将要渲染8M的三角形,这样的三角形量在PC级别上目前还是远不能实现交互式帧率的。所以,如何减少要渲染地形时候的图元数目成了室外场景实时渲染的关键问题。 其他的情况还有如野外的地表衍生物:树木、杂草、地貌等。同时天气效果,如下雨、下雪,刮风和闪电等.这些东西在一个室内的环境下基本上是不需要考虑的。而且模拟这些效果都需要很高的代价,有些甚至根本就没有办法模拟。 二.Voxel Vs LOD 综上,我们知道,室外场景实时性渲染的关键地形的渲染。我们需要一种技术来降低地形渲染的开销。 目前的地形渲染技术主要有两种Voxel和LOD,下面我来做个简单的介绍。 Voxel 也就是Volumetric Pixel。也就是所谓的“体素”,它是相对于像素来说的,如果说像素是一个二维的矩形的话,那么Voxel就是一个三维的立方体。它的原理是比较简单的。James Sharman自称他在1995年时就想出了这种方法。前面的提到的Delta Force游戏就是使用了Voxel 技术。关于Voxel的细节技术不是本文的重点,我不准备做深入的介绍。Voxel有一个天生的优点就是渲染的时候它和场景的大小没有关系,而且绝对不会渲染多余的东西(自带裁剪功能)。它的复杂度只和我们需要的视野,以及分辨率有关。而且可以在不使用硬件加速的情况下达到比较理想的速度(Delta Force I就没有使用硬件加速),生成的图象也比较的细腻。它的缺点就是不够的灵活。 LOD 也就是层次细节(Level of Detail)的简称,不同于Voxel技术,它是一种使用多边形的,真正的 3D渲染技术。它根据一定的规则来简化物体的细节,我们可以根据需要来选择不同细节程度的物体表达方式。如离观察者近的选择较高的细节程度、反之选择较底的细节程度。用在地形渲染中,有时我们也称它为多分辨率地形(Muti-resolution terrain)渲染技术。 图(1-3) 基于Voxel的渲染场景,图片来自中国游戏开发者网络,陈鹏《自己动手编Voxel 3D引擎》 图(1-4) 基于LOD的渲染结果,图片来自本文的Demo: Sim-Nature. LOD算法处理起来比较复杂,但是它让我们可以足够自由的去控制我们的场景渲染,更加方便的使用显卡的硬件加速功能。而且可以很容易的在场景中组合其他的物体。如树木,太阳以及粒子系统等,天空如它可以方便的让观察者以任意的角度去观察场景,我们只要让摄影机旋转一定的角度就可以了。但是这在Voxel中是比较困难的,因为Voxel在处理非水平的视线的时候非常的麻烦。 LOD技术是本文将要使用和实现的地形渲染技术。 图(1-5) 经过LOD处理的地形网格,有不同的细节。图片来自本文的Demo: Sim-Nature. 三.动态地形Vs 静态地形 地形的渲染通常分为动态和静态的两种。 静态的地形的细节可以是均匀的,也可以是不均匀的。但是细节通常在事先就计算好了,不均匀细节的静态地形有许多的优点:如平原的地貌可以使用较底的细节,而起伏频繁的地方使用较高的细节等级。更为直观的一个例子是赛车一类的对可以到达地方有一定限制的应用,我们可以在离赛道近的地方建立起比较高的细节等级,而在较远的地方使用较少的细节。用这种方式也可以建立起不规则的地形。比如说,它可以沿着赛道的方向建立起一个地形模型,这样可以节省大量的空间。
|