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

时间:2015-11-29 15:53:46

标签: opengl graphics occlusion-culling

我正在阅读 Real-Time Rendering 3rd Edition 中的遮挡剔除部分,但我无法理解它是如何工作的。一些问题:

  1. 如何拥有" Z-pyramid"有助于?为什么我们需要Z缓冲区的多个分辨率?在书中,它显示如下(左侧): enter image description here

  2. 八叉树结构是否与用于一般视锥体剔除和渲染的八叉树相同?或者它是专门用于遮挡剔除技术的专门八叉树?

  3. 更一般的问题:在上一部分(以及here)中,遮挡查询术语被描述为"渲染对象的简化边界体积并对其进行比较&#39 ; s深度结果到Z缓冲区,返回可见像素的数量。" OpenGL中的哪些功能与此Occlusion Query概念相关联?

  4. 这种技术是开放世界游戏遮挡剔除的标准吗?

1 个答案:

答案 0 :(得分:1)

  1. 在附近较大的物体可能会遮挡许多较小的较远物体的情况下,分层Z缓冲区非常有用。一个示例是渲染建筑物或多山风景的内部。

    渲染附近的对象时,会将Z缓冲区金字塔的较低分辨率级别上的某个像素设置为接近深度的值。在渲染更小的物体时,可以首先针对该像素检查其边界框,然后将其整体剔除。

  2. 是的。这是相同的八叉树。但这不一定是八卦。任何分层的空间索引数据结构都适用于分层的Z缓冲区或平截头体剔除。

    为了受益于分层Z缓冲区,我们需要从最近的对象开始渲染风景。可以使用八叉树或BSP之类的技术。

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

  3. OpenGL中负责遮挡查询的部分是:glBeginQueryglEndQueryglGetQueryObject。有关详细信息,请参见Query Objects

  4. 分层Z缓冲区是在hardware on some early Radeons中实现的。但是,我今天没有听说过它。

    另一方面,通常使用遮挡查询。从本质上讲,它们提供了类似的好处。