1
0
mirror of https://github.com/LearnOpenGL-CN/LearnOpenGL-CN.git synced 2025-08-23 12:45:29 +08:00

fix issue:高级光照(阴影,法线贴图,视差贴图)问题汇总(翻译错误,图片链接缺失...) #276

This commit is contained in:
superao
2024-01-11 12:19:13 +08:00
parent d0fe0d24d2
commit 65ac084c06
4 changed files with 15 additions and 18 deletions

View File

@@ -24,7 +24,7 @@
视差贴图背后的思想是修改纹理坐标使一个fragment的表面看起来比实际的更高或者更低所有这些都根据观察方向和高度贴图。为了理解它如何工作看看下面砖块表面的图片
[](../img/05/05/parallax_mapping_plane_height.png)
![](../img/05/05/parallax_mapping_plane_height.png)
这里粗糙的红线代表高度贴图中的数值的立体表达,向量\(\color{orange}{\bar{V}}\)代表观察方向。如果平面进行实际位移,观察者会在点\(\color{blue}B\)看到表面。然而我们的平面没有实际上进行位移,观察方向将在点\(\color{green}A\)与平面接触。视差贴图的目的是,在\(\color{green}A\)位置上的fragment不再使用点\(\color{green}A\)的纹理坐标而是使用点\(\color{blue}B\)的。随后我们用点\(\color{blue}B\)的纹理坐标采样,观察者就像看到了点\(\color{blue}B\)一样。
@@ -46,7 +46,7 @@
## 视差贴图
我们将使用一个简单的2D平面在把它发送给GPU之前我们先计算它的切线和副切线向量和法线贴图教程做的差不多。我们将向平面贴diffuse纹理、法线贴图以及一个位移贴图你可以点击链接下载。这个例子中我们将视差贴图和法线贴图连用。因为视差贴图生成表面位移了的幻觉当光照不匹配时这种幻觉就被破坏了。法线贴图通常根据高度贴图生成法线贴图和高度贴图一起用能保证光照能和位移匹配。
我们将使用一个简单的2D平面在把它发送给GPU之前我们先计算它的切线和副切线向量和法线贴图教程做的差不多。我们将向平面贴diffuse纹理、法线贴图以及一个位移贴图你可以点击链接下载。这个例子中我们将视差贴图和法线贴图连用。因为视差贴图生成表面位移了的幻觉当光照不匹配时这种幻觉就被破坏了。法线贴图通常根据高度贴图生成法线贴图和高度贴图一起用能保证光照能和位移匹配。
你可能已经注意到,上面链接上的那个位移贴图和教程一开始的那个高度贴图相比是颜色是相反的。这是因为使用反色高度贴图(也叫深度贴图)去模拟深度比模拟高度更容易。下图反映了这个轻微的改变:
@@ -266,7 +266,7 @@ float numLayers = mix(maxLayers, minLayers, abs(dot(vec3(0.0, 0.0, 1.0), viewDir
视差遮蔽映射(Parallax Occlusion Mapping)和陡峭视差映射的原则相同,但不是用触碰的第一个深度层的纹理坐标,而是在触碰之前和之后,在深度层之间进行线性插值。我们根据表面的高度距离啷个深度层的深度层值的距离来确定线性插值的大小。看看下面的图片就能了解它是如何工作的:
[](../img/05/05/parallax_mapping_parallax_occlusion_mapping_diagram.png)
![](../img/05/05/parallax_mapping_parallax_occlusion_mapping_diagram.png)
你可以看到大部分和陡峭视差映射一样,不一样的地方是有个额外的步骤,两个深度层的纹理坐标围绕着交叉点的线性插值。这也是近似的,但是比陡峭视差映射更精确。
@@ -297,7 +297,7 @@ return finalTexCoords;
你可以在这里找到[源代码](http://www.learnopengl.com/code_viewer.php?code=advanced-lighting/parallax_mapping),及其[顶点](http://www.learnopengl.com/code_viewer.php?code=advanced-lighting/parallax_mapping&type=vertex)和[像素](http://www.learnopengl.com/code_viewer.php?code=advanced-lighting/parallax_mapping_occlusion&type=fragment)着色器。
视差贴图是提升场景细节非常好的技术,但是使用的时候还是要考虑到它会带来一点不自然。大多数时候视差贴图用在地面和墙壁表面,这种情况下查明表面的轮廓并不容易,同时观察角度往往趋向于垂直于表面。这样视差贴图的不自然也就很难能被注意到了,对于提升物体的细节可以祈祷难以置信的效果。
视差贴图是提升场景细节非常好的技术,但是使用的时候还是要考虑到它会带来一点不自然。大多数时候视差贴图用在地面和墙壁表面,这种情况下查明表面的轮廓并不容易,同时观察角度往往趋向于垂直于表面。这样视差贴图的不自然也就很难能被注意到了,对于提升物体的细节可以起到难以置信的效果。