Opengl 用于遮挡剔除的分层Z缓冲

Opengl 用于遮挡剔除的分层Z缓冲,opengl,graphics,occlusion-culling,Opengl,Graphics,Occlusion Culling,我正在阅读实时渲染第三版中的遮挡剔除部分,我不明白它是如何工作的。一些问题: “Z金字塔”有什么作用?为什么我们需要Z缓冲区的多个分辨率?在书中,它显示如下(左侧): 八叉树结构是否与用于一般平截头体剔除和渲染的八叉树相同?或者它是专门为遮挡剔除技术制作的八叉树 一个更一般的问题:在上一节(也是)中,遮挡查询术语被描述为“渲染对象的简化边界体积,并将其深度结果与Z缓冲区进行比较,返回可见的像素量”。OpenGL中的哪些函数与该遮挡查询概念相关联 这项技术是开放世界游戏遮挡剔除的标准吗 分层Z缓

我正在阅读实时渲染第三版中的遮挡剔除部分,我不明白它是如何工作的。一些问题:

  • “Z金字塔”有什么作用?为什么我们需要Z缓冲区的多个分辨率?在书中,它显示如下(左侧):

  • 八叉树结构是否与用于一般平截头体剔除和渲染的八叉树相同?或者它是专门为遮挡剔除技术制作的八叉树

  • 一个更一般的问题:在上一节(也是)中,遮挡查询术语被描述为“渲染对象的简化边界体积,并将其深度结果与Z缓冲区进行比较,返回可见的像素量”。OpenGL中的哪些函数与该遮挡查询概念相关联

  • 这项技术是开放世界游戏遮挡剔除的标准吗

  • 分层Z缓冲区在附近的大对象可能会遮挡许多远处的小对象的情况下非常有用。例如,渲染建筑内部或山区景观

    渲染附近的对象时,它会将Z缓冲区棱锥体较低分辨率级别上的某个像素设置为接近深度值。当渲染更小的对象时,可以首先对照该像素检查其边界框,并对其整体进行剔除

  • 对。这是相同的八叉树。但它不一定是八叉树。任何分层空间索引数据结构都适用于分层Z缓冲区或截锥剔除

    为了从分层Z缓冲区中获益,我们需要从最近的对象开始渲染场景。八叉树或BSP等技术可用于此目的

    此外,手头有一个八叉树可以让我们根据到它们的bbox的距离而不是单独的对象或三角形来剔除整个树枝

  • OpenGL中负责遮挡查询的部分是:
    glBeginQuery
    glEndQuery
    glGetQueryObject
    。有关详细信息,请参阅

  • 分层Z缓冲区在中实现。然而,我没有听说它现在被使用

    另一方面,通常使用遮挡查询。从本质上讲,它们也能带来类似的好处


  • 在不同的论坛上问同一个问题不是不道德吗?我不这么认为,不。关于分层的z金字塔方面,仅仅从广义的概念层面(我自己从未实现过遮挡剔除),这种深度缓冲区表示的好处是早期拒绝。假设渲染了一个覆盖整个视口的平面。它不必垂直,但假设它的最大深度是0.5。在这种情况下,您实际上可以将一个1像素Z缓冲区存储在该层次结构的根处,其值为0.5。现在,任何时候你画任何物体,只要看看这个一像素的缓冲区,看到没有一部分。。。。。。对象的深度将小于
    0.5
    (例如:通过投影其AABB并检查最远点)。这还意味着您可以在深度层次结构的上层获得更多的时间局部性,这只需要少量的像素条目。它更多地涉及到它与着色器的交互方式,但这将是深度缓冲区层次结构的广义概念原因。