From 91eb0bacfd9db0c24427a3ef76f8aedfa664de2f Mon Sep 17 00:00:00 2001 From: Geequlim Date: Sat, 1 Aug 2015 13:35:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=A1=E5=AF=B904/01?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 04 Advanced OpenGL/01 Depth testing.md | 173 ++++++++++++++----------- img/05_01_F_depth.png | Bin 0 -> 20440 bytes img/05_01_F_depth_nonliner.png | Bin 0 -> 11910 bytes 3 files changed, 99 insertions(+), 74 deletions(-) create mode 100644 img/05_01_F_depth.png create mode 100644 img/05_01_F_depth_nonliner.png diff --git a/04 Advanced OpenGL/01 Depth testing.md b/04 Advanced OpenGL/01 Depth testing.md index 6e67441..9f1cf76 100644 --- a/04 Advanced OpenGL/01 Depth testing.md +++ b/04 Advanced OpenGL/01 Depth testing.md @@ -1,105 +1,122 @@ -# 深度测试 +# 深度测试(Depth testing) -在[坐标系的教程](http://www.learnopengl.com/#!Getting-started/Coordinate-Systems)中我们呈现了一个3D容器,使用*深度缓冲*,以防止被其他面遮挡的面渲染到前面。在本教程中我们将细致地讨论被深度缓冲区(depth-buffer或z-buffer)所存储的*深度值*和它如何确定是否一个片段是否被其他片段遮挡。 +原文 | [Depth testing](http://learnopengl.com/#!Advanced-OpenGL/Depth-testing) + ---|--- +作者 | JoeyDeVries +翻译 | [Django](http://bullteacher.com/) +校对 | [Geequlim](http://geequlim.com) -深度缓就像*颜色缓冲区* (存储所有的片段颜色: 视觉输出) 那样存储每个片段的信息,(通常) 和颜色缓冲区有相同的宽度和高度。深度缓冲由窗口系统自动创建并将其深度值存储为 16、 24 或 32 位浮点数。在大多数系统中深度缓冲区为24位。 +在[坐标系的教程](http://learnopengl-cn.readthedocs.org/zh/latest/01%20Getting%20started/08%20Coordinate%20Systems/)中我们呈现了一个3D容器,使用**深度缓冲**,以防止被其他面遮挡的面渲染到前面。在本教程中我们将细致地讨论被深度缓冲区(depth-buffer或z-buffer)所存储的**深度值**以及它是如何确定一个片段是否被其他片段遮挡。 + +**深度缓冲**就像**颜色缓冲**(存储所有的片段颜色:视觉输出)那样存储每个片段的信息,(通常) 和颜色缓冲区有相同的宽度和高度。深度缓冲由窗口系统自动创建并将其深度值存储为 16、 24 或 32 位浮点数。在大多数系统中深度缓冲区为24位。 当深度测试启用的时候, OpenGL 测试深度缓冲区内的深度值。OpenGL 执行深度测试的时候,如果此测试通过,深度缓冲内的值将被设为新的深度值。如果深度测试失败,则丢弃该片段。 -深度测试是在屏幕空间片段着色器运行之后 (并且模板测试运行之后,我们将在[接下来](http://www.learnopengl.com/#!Advanced-OpenGL/Stencil-testing)的教程中讨论)执行的。屏幕空间坐标直接有关的视区,由 OpenGL 的 **glViewport** 函数给定,并且可以通过GLSL的片段着色器中内置的 `gl_FragCoord`变量访问。`gl_FragCoord` 的 X 和 y 表示该片段的屏幕空间坐标 ((0,0) 在左下角)。`gl_FragCoord` 还包含一个 z 坐标,它包含了片段的实际深度值。此 z 坐标值是与深度缓冲区的内容进行比较的值。 +深度测试在片段着色器运行之后(并且模板测试运行之后,我们将在[接下来](http://www.learnopengl.com/#!Advanced-OpenGL/Stencil-testing)的教程中讨论)在屏幕空间中执行的。屏幕空间坐标直接有关的视区,由OpenGL的`glViewport`函数给定,并且可以通过GLSL的片段着色器中内置的 `gl_FragCoord`变量访问。`gl_FragCoord` 的 X 和 y 表示该片段的屏幕空间坐标 ((0,0) 在左下角)。`gl_FragCoord` 还包含一个 z 坐标,它包含了片段的实际深度值。此 z 坐标值是与深度缓冲区的内容进行比较的值。 -
-今天大多数 GPU 都支持一种称为提前深度测试(Early depth testing)的硬件功能。提前深度测试允许深度测试片段着色器之前运行。无论是明确一个片段永远不会可见的 (它是其它物体的后面) 我们可以更早地放弃该片段。 -

-片段着色器通常是相当费时的所以我们应该尽量避免运行它们。对片段着色器提前深度测试一个限制是,你不应该写入片段的深度值。如果片段着色器将写入其深度值,提前深度测试是不可能的;OpenGL 不能事先知道深度值。 -
-深度测试默认是关闭的,要启用深度测试的话,我们需要用`GL_DEPTH_TEST` 选项来打开它: +!!! Important -`glEnable(GL_DEPTH_TEST); ` + 现在大多数 GPU 都支持一种称为提前深度测试(Early depth testing)的硬件功能。提前深度测试允许深度测试在片段着色器之前运行。明确一个片段永远不会可见的 (它是其它物体的后面) 我们可以更早地放弃该片段。 -一旦启用深度测试,如果他们通过深度测试,OpenGL 自动在深度缓冲区存储片段的 z 值,如果深度测试失败,那么相应地丢弃该片段。如果启用深度测试,那么在每个渲染之前还应使用`GL_DEPTH_BUFFER_BIT`清除深度缓冲区 ,否则深度缓冲区将保留上一次进行深度测试时所写的深度值 + 片段着色器通常是相当费时的所以我们应该尽量避免运行它们。对片段着色器提前深度测试一个限制是,你不应该写入片段的深度值。如果片段着色器将写入其深度值,提前深度测试是不可能的,OpenGL不能事先知道深度值。 -`glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ` -在某些情况下我们需要进行深度测试并相应地丢弃片段,但我们不希望更新深度缓冲区,基本上,可以使用一个只读的深度缓冲区;OpenGL 允许我们通过将其深度掩码设置为` GL_FALSE `禁用深度缓冲区写入: +深度测试默认是关闭的,要启用深度测试的话,我们需要用`GL_DEPTH_TEST`选项来打开它: + +```c++ +glEnable(GL_DEPTH_TEST); +``` + +一旦启用深度测试,如果片段通过深度测试,OpenGL自动在深度缓冲区存储片段的 z 值,如果深度测试失败,那么相应地丢弃该片段。如果启用深度测试,那么在每个渲染之前还应使用`GL_DEPTH_BUFFER_BIT`清除深度缓冲区,否则深度缓冲区将保留上一次进行深度测试时所写的深度值 + +```c++ +glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +``` + +在某些情况下我们需要进行深度测试并相应地丢弃片段,但我们不希望更新深度缓冲区,基本上,可以使用一个只读的深度缓冲区;OpenGL允许我们通过将其深度掩码设置为`GL_FALSE`禁用深度缓冲区写入: + +```c++ +glDepthMask(GL_FALSE); +``` - glDepthMask(GL_FALSE); 注意这只在深度测试被启用的时候有效。 -# 深度测试函数 # +## 深度测试函数 -OpenGL 允许我们修改它深度测试使用的比较运算符(comparison operators)。这样我们能够控制 OpenGL 通过或丢弃碎片和如何更新深度缓冲区。我们可以通过调用 **glDepthFunc** 来设置比较运算符 (或深度函数(depth function)): +OpenGL 允许我们修改它深度测试使用的比较运算符(comparison operators)。这样我们能够控制OpenGL通过或丢弃碎片和如何更新深度缓冲区。我们可以通过调用`glDepthFunc`来设置比较运算符 (或叫做深度函数(depth function)): -`glDepthFunc(GL_LESS); ` +```c++ +glDepthFunc(GL_LESS); +``` 该函数接受在下表中列出的几个比较运算符: - - --------------------------------------------------- - | GL_ALWAYS |永远通过测试 | - ---------------------------------------------------- - | GL_NEVER |永远不通过测试 | - ---------------------------------------------------- - | GL_LESS |在片段深度值小于缓冲区的深度时通过测试 | - ---------------------------------------------------- - | GL_EQUAL |在片段深度值等于缓冲区的深度时通过测试 | - ---------------------------------------------------- - | GL_LEQUAL |在片段深度值小于等于缓冲区的深度时通过测试 | - ---------------------------------------------------- - |GL_GREATER |在片段深度值大于缓冲区的深度时通过测试 | - ---------------------------------------------------- - |GL_NOTEQUAL|在片段深度值不等于缓冲区的深度时通过测试 | - ---------------------------------------------------- - | GL_GEQUAL |在片段深度值大于等于缓冲区的深度时通过测试 | - ----------------------------------------------------- -默认情况下使用 GL_LESS,这将丢弃深度值高于或等于当前深度缓冲区的值的片段。 + +运算符|描述 + ----------|------------------ + GL_ALWAYS |永远通过测试 + GL_NEVER |永远不通过测试 + GL_LESS |在片段深度值小于缓冲区的深度时通过测试 + GL_EQUAL |在片段深度值等于缓冲区的深度时通过测试 + GL_LEQUAL |在片段深度值小于等于缓冲区的深度时通过测试 + GL_GREATER |在片段深度值大于缓冲区的深度时通过测试 + GL_NOTEQUAL|在片段深度值不等于缓冲区的深度时通过测试 + GL_GEQUAL |在片段深度值大于等于缓冲区的深度时通过测试 + +默认情况下使用`GL_LESS`,这将丢弃深度值高于或等于当前深度缓冲区的值的片段。 让我们看看改变深度函数对输出的影响。我们将使用新鲜的代码安装程序显示一个没有灯光的有纹理地板上的两个有纹理的立方体。你可以在这里找到源代码和其着色器代码。 -代码中我们将深度函数设为GL_ALWAYS: +代码中我们将深度函数设为`GL_ALWAYS`: - glDepthFunc(GL_ALWAYS); +```c++ +glDepthFunc(GL_ALWAYS); +``` 这和我们没有启用深度测试得到了相同的行为。深度测试只是简单地通过,所以这样最后绘制的片段就会呈现在之前绘制的片段前面,即使他们应该在前面。由于我们最后绘制地板平面,那么平面的片段会覆盖每个容器的片段: ![](http://learnopengl.com/img/advanced/depth_testing_func_always.png) -重新设置到 GL_LESS 给了我们曾经的场景: +重新设置到`GL_LESS`给了我们曾经的场景: ![](http://learnopengl.com/img/advanced/depth_testing_func_less.png) -# 深度值精度 # +## 深度值精度 -在深度缓冲区中包含深度值介于 0.0 和 1.0 之间,从观察者看到其内容与场景中的所有对象的 z 值进行了比较。这些视图空间中的 z 值可以投影锥近平面和远平面之间的任何值。我们因此需要一些方法来转换这些视图空间 z 值到 [0,1] 的范围内,方法之一就是线性将它们转换为 [0,1] 范围内。下面的 (线性) 方程把 z 值转换为 0.0 和 1.0 之间的值 : +在深度缓冲区中包含深度值介于`0.0`和`1.0`之间,从观察者看到其内容与场景中的所有对象的 z 值进行了比较。这些视图空间中的 z 值可以在投影平头截体的近平面和远平面之间的任何值。我们因此需要一些方法来转换这些视图空间 z 值到 [0,1] 的范围内,方法之一就是线性将它们转换为 [0,1] 范围内。下面的 (线性) 方程把 z 值转换为 0.0 和 1.0 之间的值 : -F_depth=(z−near)/(far−near); +![](../img/05_01_F_depth.png) -这里far和near是我们用来提供到投影矩阵设置可见视图截锥的远近值 (见[坐标系](http://www.learnopengl.com/#!Getting-started/Coordinate-Systems))。方程带内锥截体的深度值 z,并将其转换到 [0,1] 范围。在下面的图给出 z 值和其相应的深度值的关系: +这里far和near是我们用来提供到投影矩阵设置可见视图截锥的远近值 (见[坐标系](http://learnopengl-cn.readthedocs.org/zh/latest/01%20Getting%20started/08%20Coordinate%20Systems/))。方程带内锥截体的深度值 z,并将其转换到 [0,1] 范围。在下面的图给出 z 值和其相应的深度值的关系: ![](http://learnopengl.com/img/advanced/depth_linear_graph.png) -
-注意在物体接近近平面的时候,方程给出的深度值接近0.0,物体接近远平面时,方程给出的深度接近1.0。 -
+!!! Important + + 注意在物体接近近平面的时候,方程给出的深度值接近0.0,物体接近远平面时,方程给出的深度接近1.0。 然而,在实践中是几乎从来不使用这样的线性深度缓冲区。正确的投影特性的非线性深度方程是和1/z成正比的 。这样基本上做的是在z很近是的高精度和 z 很远的时候的低精度。用几秒钟想一想: 我们真的需要让1000单位远的物体和只有1单位远的物体的深度值有相同的精度吗?线性方程没有考虑这一点。 由于非线性函数是和 1/z 成正比,例如1.0 和 2.0 之间的 z 值,将变为 1.0 到 0.5之间, 这样在z非常小的时候给了我们很高的精度。50.0 和 100.0 之间的 Z 值将只占 2%的浮点数的精度,这正是我们想要的。这类方程,也需要近和远距离考虑,下面给出: -F_depth=(1/z−1/near)/(1/far−1/near); +![](../img/05_01_F_depth_nonliner.png) -别担心如果你不知道这个方程到底怎么回事。要记住的重要一点是在深度缓冲区的值不是线性的屏幕空间 (它们在视图空间投影矩阵应用之前是线性)。值为 0.5 在深度缓冲区并不意味着该对象的 z 值是投影椎的中间;顶点的 z 值是实际上相当接近近平面!你可以看到 z 值和产生深度缓冲区的值在下列图中的非线性关系: +如果你不知道这个方程到底怎么回事也不必担心。要记住的重要一点是在深度缓冲区的值不是线性的屏幕空间 (它们在视图空间投影矩阵应用之前是线性)。值为 0.5 在深度缓冲区并不意味着该对象的 z 值是投影平头截体的中间;顶点的 z 值是实际上相当接近近平面!你可以看到 z 值和产生深度缓冲区的值在下列图中的非线性关系: ![](http://learnopengl.com/img/advanced/depth_non_linear_graph.png) 正如你所看到,一个附近的物体的小的 z 值因此给了我们很高的深度精度。变换 (从观察者的角度) 的 z 值的方程式被嵌入在投影矩阵,所以当我们变换顶点坐标从视图到裁剪,然后到非线性方程应用了的屏幕空间中。如果你好奇的投影矩阵究竟做了什么我建议阅读[这个文章](http://www.songho.ca/opengl/gl_projectionmatrix.html)。 -# 深度缓冲区的可视化 # +接下来我们看看这个非线性的深度值。 -我们知道在片段渲染器的内置 gl_FragCoord 向量的 z 值包含那个片段的深度值。如果我们要吧深度值作为颜色输出,那么我们可以在场景中显示的所有片段的深度值。我们可以返回基于片段的深度值的颜色向量: +### 深度缓冲区的可视化 - void main() - { +我们知道在片段渲染器的内置`gl_FragCoord`向量的 z 值包含那个片段的深度值。如果我们要吧深度值作为颜色输出,那么我们可以在场景中显示的所有片段的深度值。我们可以返回基于片段的深度值的颜色向量: + +```c++ +void main() +{ color = vec4(vec3(gl_FragCoord.z), 1.0f); - } +} +``` 如果再次运行同一程序你可能会发现一切都是白的,它看起来像我们的深度值都是最大值 1.0。那么为什么没有深度值接近 0.0而发暗? @@ -113,11 +130,15 @@ F_depth=(1/z−1/near)/(1/far−1/near); 首先,我们需要并不太难的 NDC 深度值转换: - float z = depth * 2.0 - 1.0; +```c++ +float z = depth * 2.0 - 1.0; +``` 然后把我们所得到的 z 值应用逆转换来检索的线性深度值: - float linearDepth = (2.0 * near) / (far + near - z * (far - near)); +```c++ +float linearDepth = (2.0 * near) / (far + near - z * (far - near)); +``` 注意此方程不是方程 2 的精确的逆方程。这个方程从投影矩阵中导出,可以从新使用等式2将他转换为非线性深度值。这个方程也会考虑使用[0,1] 而不是 [near,far]范围内的 z 值 。[math-heavy](http://www.songho.ca/opengl/gl_projectionmatrix.html)为感兴趣的读者阐述了大量详细的投影矩阵的知识;它还表明了方程是从哪里来的。 @@ -125,46 +146,50 @@ F_depth=(1/z−1/near)/(1/far−1/near); 这个能够将屏幕空间的非线性深度值转变为线性深度值的完整的片段着色器如下所示: - #version 330 core - - out vec4 color; - - float LinearizeDepth(float depth) - { +```c++ +#version 330 core + +out vec4 color; + +float LinearizeDepth(float depth) +{ float near = 0.1; float far = 100.0; float z = depth * 2.0 - 1.0; // Back to NDC return (2.0 * near) / (far + near - z * (far - near)); - } - - void main() - { +} + +void main() +{ float depth = LinearizeDepth(gl_FragCoord.z); color = vec4(vec3(depth), 1.0f); - } +} +``` -如果现在运行该应用程序,我们得到在距离实际上线性的深度值。尝试移动现场周围看到深度值线性变化![](http://www.learnopengl.com/img/advanced/depth_testing_visible_linear.png)。 +如果现在运行该应用程序,我们得到在距离实际上线性的深度值。尝试移动现场周围看到深度值线性变化 + +![](http://www.learnopengl.com/img/advanced/depth_testing_visible_linear.png)。 颜色主要是黑色的因为深度值线性范围从 0.1 的近平面到 100 的远平面,那里离我们很远。其结果是,我们相对靠近近平面,从而得到较低 (较暗) 的深度值。 -# 深度冲突 # +## 深度冲突 两个平面或三角形如此紧密相互平行深度缓冲区不具有足够的精度以至于无法得到哪一个靠前。结果是,这两个形状不断似乎切换顺序导致怪异出问题。这被称为深度冲突,因为它看上去像形状争夺顶靠前的位置。 我们到目前为止一直在使用的场景中有几个地方深度冲突很显眼。容器被置于确切高度地板被安置这意味着容器的底平面与地板平面共面。两个平面的深度值是相同的,因此深度测试也没有办法找出哪个是正确。 -如果您移动摄像机到容器的里面,那么这个影响清晰可,容器的底部不断切换容器的平面和地板的平面以之字形: +如果您移动摄像机到容器的里面,那么这个影响清晰可,容器的底部不断切换容器的平面和地板的平面: ![](http://www.learnopengl.com/img/advanced/depth_testing_z_fighting.png) 深度冲突是深度缓冲区的普遍问题,当对象的距离越远一般越强(因为深度缓冲区在z值非常大的时候没有很高的精度)。深度冲突还无法完全避免,但有一般的几个技巧,将有助于减轻或完全防止深度冲突在你的场景中的出现: -# 防止深度冲突 # +### 防止深度冲突 第一个也是最重要的技巧是让物体之间不要离得太近,以至于他们的三角形重叠。通过在物体之间制造一点用户无法察觉到的偏移,可以完全解决深度冲突。在容器和平面的条件下,我们可以把容器像+y方向上略微移动。这微小的改变可能完全不被注意但是可以有效地减少或者完全解决深度冲突。然而这需要人工的干预每个物体,并进行彻底地测试,以确保这个场景的物体之间没有深度冲突。 -另一个技巧是尽可能吧近平面设置的远一些。前面我们讨论过越靠近近平面的位置精度越高。所以我们移动近平面远离观察者,我们可以在椎体内很有效的提高精度。然而把近平面移动的太远会导致近处的物体被裁剪掉。所以不断调整实验近平面的值,为你的场景找出最好的近平面的距离。 +另一个技巧是尽可能把近平面设置得远一些。前面我们讨论过越靠近近平面的位置精度越高。所以我们移动近平面远离观察者,我们可以在椎体内很有效的提高精度。然而把近平面移动的太远会导致近处的物体被裁剪掉。所以不断调整测试近平面的值,为你的场景找出最好的近平面的距离。 -另外一个技巧是放弃一些性能来得到更高的深度值的精度。大多数的深度缓冲区都是24位。但现在显卡支持 32 位深度值,这让深度缓冲区的精度提高了一大节。所以牺牲一些性能你会得到更精确的深度测试,减少深度冲突。 +另外一个技巧是放弃一些性能来得到更高的深度值的精度。大多数的深度缓冲区都是24位。但现在显卡支持32位深度值,这让深度缓冲区的精度提高了一大节。所以牺牲一些性能你会得到更精确的深度测试,减少深度冲突。 -我们已经讨论过的 3 个技术是最常见和容易实现消除深度冲突的技术。还有一些其他技术需要更多的工作,仍然不会完全消除深度冲突。深度冲突是一个常见的问题,但如果你将列举的技术适当结合你可能不会真的需要处理 深度冲突。 +我们已经讨论过的 3 个技术是最常见和容易实现消除深度冲突的技术。还有一些其他技术需要更多的工作,仍然不会完全消除深度冲突。深度冲突是一个常见的问题,但如果你将列举的技术适当结合你可能不会真的需要处理深度冲突。 diff --git a/img/05_01_F_depth.png b/img/05_01_F_depth.png new file mode 100644 index 0000000000000000000000000000000000000000..97435ea26e9a1151abdf344e17b19b4a4ca33b57 GIT binary patch literal 20440 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 CH+9qi literal 0 HcmV?d00001