我正在阅读《实时渲染第三版》中的“遮挡剔除”部分,但我不明白它是如何工作的。一些问题:
具有“Z金字塔”如何产生作用?为什么我们需要Z缓冲区的多种分辨率?在这本书中,它显示如下(左侧):
Octree结构是否与用于一般视锥剔除和渲染的Octree相同?还是专门为遮挡剔除技术制作的专业Octree? 一个更笼统的问题:在上一节(还有here)中,“遮挡查询”一词被描述为“渲染对象的简化边界体积并将其深度结果与Z缓冲区进行比较,返回像素的数量可见。” OpenGL中的哪些功能与此“遮挡查询”概念相关联? 此技术是开放世界游戏遮挡剔除的标准吗? 层次化Z缓冲区在附近较大的物体可能会遮挡许多较小的较远物体的情况下很有用。一个示例是渲染建筑物或多山风景的内部。
渲染附近的对象时,会将Z缓冲区金字塔的较低分辨率级别上的某个像素设置为接近深度的值。当渲染更小的对象时,可以首先针对该像素检查其边界框,然后将其整体剔除。 是的。这是相同的八叉树。但这不一定是八卦。任何分层的空间索引数据结构都适用于分层Z缓冲区或平截头体剔除。
为了从分层Z缓冲区中受益,我们需要从最接近的对象开始渲染风景。可以使用八叉树或BSP之类的技术。
另外,手头有八叉树可以让我们根据到它们的bbox的距离而不是单独的对象或三角形来剔除整个 Twig 。 OpenGL中负责遮挡查询的部分是:glBeginQuery
,glEndQuery
和glGetQueryObject
。有关详细信息,请参见Query Objects。 分层Z缓冲区在hardware on some early Radeons中实现。但是,我今天没有听说过使用它。
另一方面,通常使用遮挡查询。从本质上讲,它们提供了类似的好处。