我有一个项目,我希望在16平方英里的景观中渲染大量的网格物体。虽然网格并非都是独一无二的,但它们中有很多(可能只有1000个网格,但却有数百万个网格)
我想知道是否有任何论文或(好)资源涵盖该主题。我已经找到大量关于地形/景观渲染的论文,但不知何故找不到大量网格渲染。
修改 通过网格我指的是景观,建筑物树木等物体
答案 0 :(得分:5)
有效渲染具有大量对象的大型景观需要考虑两个重要方面。一种是通过仅绘制当前摄像机角度可见的内容来最小化冗余工作,另一种是最大化渲染可见内容的效率。
有两种主要方法可以最大限度地减少冗余渲染工作。首先,您要避免绘制在摄像机视野之外的任何内容。可以使用各种数据结构加速这种可见性剔除:八叉树,四叉树,球体树,bsp树(通常更适合于不太开放的环境而不是景观)等。某种分层场景布置对于加速这种类型也是有用的剔除相同的数据结构也可用于在屏幕上跳过低于特定大小阈值的对象的渲染。
其次,您要避免渲染被较近的对象遮挡的对象。有许多不同的遮挡剔除技术,一些使用GPU加速通过遮挡查询,另一些则完全在CPU上运行。遮挡剔除的价值在某种程度上取决于您的典型摄像机角度,地形粗糙度和地形上物体的大小。一个相对平坦,开阔的地形,只有小物体或相机,大部分朝向地面,而不是朝向地平线,将减少遮挡剔除的机会。您的场景的某些层次结构将再次帮助进行遮挡剔除,就像父对象被遮挡一样,您可以跳过对其子项的测试。
一旦最小化了需要渲染的对象集,您就可以将注意力转移到最大化可见对象的渲染效率。细节层次技术在这里很有用(较低的多边形网格用于远处的物体)。另一个答案中提到的冒充者技术是另一种有用的方法,用简单的广告牌代替复杂的几何形状。实现几何体实例的各种方法也值得追求 - 现代图形硬件可以通过对图形API的单次调用来渲染具有不同位置和其他变体的相同几何体的许多副本。最后,所有有效使用图形硬件的标准技术都适用于此:排序以获得最大的渲染效率(在某种程度上取决于硬件),最大限度地减少每帧的冗余工作量,有效地打包几何体,优化顶点和像素着色器等等。
上述每个领域本身都非常复杂,有很多论文,书籍和文章详细阐述。希望这里提到的技术足以让您指出一些谷歌研究的正确方向。
答案 1 :(得分:1)
该解决方案名为octree。 Google image search会让您一目了然地理解这个概念:)
基本上,八叉树将允许您快速消除在渲染过程中无法看到的网格(因为它们在您后面或太远)。
对于远处的网格,您可以使用降低的分辨率预先计算类似的网格,这样您仍然可以拥有地平线并将其附加到树的节点。如果树的一部分有一定的距离,你只需使用缩小的网格而不是高细节的网格。
答案 2 :(得分:1)
我不确定这是不是你的情况,但冒充者呢?据我所知,人们可以使用3D纹理或类似的东西来伪造大量的几何数据。这可能只是你的情况 它用于渲染森林和类似的东西。
答案 3 :(得分:0)
通过“网格”,你的意思是景观中的物体,例如建筑物,车辆,树木,灌木丛等?也就是说,你不是在谈论构成地面的网格吗?
如果是这样,我认为您需要查看一般的可见性检查,以便在进行地形渲染时,您可以查询给定的网格是否可见,或隐藏在山/谷墙后面。 / p>
此外,您当然需要查看“实例化”,因此您只为每个唯一网格保留一个数据集,并在确定该位置可见后,通过将其转换为它出现的每个位置来重新使用它当然。
如果您错过了论文,那么查看论文like this也可能是有益的。