假设我们有一组多边形,可以改变摄像机视角,并可以在3D环境中平移摄像机.从某些视角,这些多边形中的一些被一个或多个其他多边形完全遮挡.对于每个绘制的帧,我们知道每个多边形的
现在我的问题:
什么是预渲染的有效方法确定多边形是否被其他人完全遮挡,以便我们可以在绘图过程中简单地跳过它以提高性能?
您正在寻找的技术称为 Occlusion Culling,是一项相当复杂的任务.能够以增加相机距离顺序(从前到后)迭代它们会给您带来一些好处.只需以这种方式渲染它们就可以从nowaday图形硬件的早期z测试功能中获益,而多边形只需要经过顶点处理和光栅化,但不需要进行片段着色.这也可以在不对多边形进行排序的情况下实现,而是在所谓的深度预处理中以任意顺序渲染它们,在此处禁用颜色写入并仅渲染多边形的深度值.现在在下一个渲染过程中(真实的那个)你也可以从早期的z-rejection中获益.
您也可以使用nowaday的GPU的硬件遮挡查询,如this GPU Gems article中所述.
但是像Hannesh所说的那样,如果遮挡剔除的开销是值得的,那么它应该总是加权.我认为你的案例中的前后排序并不是偶然的.也许深度预通过是一种可行的替代方案,无需排序.虽然您可以以不需要任何排序的方式使用遮挡查询(如链接中所述),但在这种情况下,它不如前后排序那样有效.