5

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

  1. 拥有“Z-金字塔”有何贡献?为什么我们需要 Z 缓冲区的多个分辨率?书中显示如下(左侧): 在此处输入图像描述

  2. 八叉树结构是否与用于一般截锥体剔除和渲染的八叉树结构相同?还是专门为遮挡剔除技术制作的八叉树?

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

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

4

1 回答 1

3
  1. 分层 Z 缓冲区在较大的附近对象可能会遮挡许多较小的较远对象的情况下很有用。一个例子是渲染建筑物内部或山区景观。

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

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

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

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

  3. OpenGL 中负责遮挡查询的部分是glBeginQueryglEndQueryglGetQueryObject。有关详细信息,请参阅查询对象

  4. 分层 Z 缓冲区在一些早期 Radeon 的硬件中实现。但是我没有听说它现在正在使用。

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

于 2019-05-02T00:40:46.890 回答