2009-09-22 54 views
3

我有一个项目,我正在寻找在16平方英里的景观上渲染大量网格。虽然网格并不全是唯一的,但它们中有很多(可能只有1000个网格,但有几百万个网格用)渲染大量的网格(物体)

我想知道是否有任何论文或(良好)资源涉及该主题。我发现了大量有关地形/景观渲染的论文,但不知何故在大量网格渲染上找不到任何文章。

编辑 通过网我的意思是对景观的对象,建筑物等树木

回答

0

通过“网格”,你的意思是在景观,例如对象建筑物,车辆,树木,灌木丛等?也就是说,你不是在谈论构成地面的网格?

如果是这样,我认为您需要研究一般的可见性检查,以便在您进行地形渲染时,您可以查询给定的网格是否可见或隐藏在山丘/山谷墙后面。

此外,您当然需要查看“实例化”,因此您只需为每个唯一网格保留一个数据集,然后通过将其转换为显示的每个位置来重新使用该数据集,一旦确定了该位置当然可见。

看文件like this也可能是有启发性的,如果你错过了。

1

该解决方案被称为octree。 A Google image search将使你理解概念一目了然:)

基本上,八叉树将允许您快速消除在渲染过程中无法看到的网格(无论是因为它们在你后面还是太远)。

对于距离较远的网格,可以使用降低的分辨率预先计算一个类似的网格,以便仍然可以获得一个水平线并将其附加到树的节点。如果树的一部分具有一定的距离,则只需使用简化网格,而不是具有高细节的网格。

1

我不确定这是你的情况,但是骗子呢?据我所知,可以使用3D纹理或类似的东西来伪造大量的几何数据。这可能就是你的情况。
它用于渲染森林和类似的东西。

5

有两个重要的方面需要考虑高效渲染大量景物的对象。一种是通过仅画出从当前相机角度可见的内容来最小化冗余工作,另一种方法是最大化渲染可见内容的效率。

有两种主要方法可以最大限度地减少冗余渲染工作。首先,您要避免绘制任何超出相机视野范围的图像。这种可见性剔除可以使用各种数据结构加速:八叉树,四叉树,球形树,bsp树(通常更适合于开放程度较低的环境而不是景观)等等。某些分层场景排列也可用于加速这种类型的扑杀。也可以使用相同的数据结构在屏幕上跳过低于特定大小阈值的对象的渲染。

其次,您希望避免呈现被近处物体遮挡的物体。有很多不同的遮挡剔除技术,一些使用通过遮挡查询的GPU加速和其他完全在CPU上操作的技术。遮挡剔除的值将取决于您的典型相机角度,地形粗糙度和地形上物体的大小。一个相对平坦,开阔的地形,只有小物体或相机看起来大部分落在地面而不是朝向地平线,这将减少遮挡剔除的机会。场景的某些分层组织将再次帮助遮挡剔除,就像父对象被遮挡一样,您可以跳过对其子项的测试。

一旦你最小化了需要渲染的对象集合,你可以将注意力转向最大化可见对象的渲染效率。细节层次的技术在这里很有用(对于远处的物体,下层多边形网格)。在另一个答案中提到的冒名顶尖技术是另一种可能有用的方法,用简单的广告牌取代复杂的几何图形。实现几何图形的各种方法也值得追求 - 现代图形硬件可以通过一次调用图形API来渲染具有不同位置和其他变体的相同几何图形的许多副本。最后,所有用于有效使用图形硬件的标准技术都适用于此:用于最大渲染效率(基于某种硬件)的排序,最小化每帧冗余工作,有效打包几何结构,优化顶点和像素着色器等。

所提及的领域本身相当复杂,并且有许多论文,书籍和文章详细阐述了细节。希望这里提到的技术足以让你指向一些谷歌研究的正确方向。