18.1 为什么要使用法线贴图映射

我们在第8章中介绍了纹理贴图映射,它可以将纹理细节映射到三角形表面上。然而,我们现在的法线向量仍然定义在比较粗糙的顶点级别上,使用的是三角形表面插值。在本章中,我们将介绍一种目前流行的方法,在更高分辨率下指定表面法线,这样可以增加光照的细节,但是网格的几何细节仍然没有得到提高。位移映射与曲面细分的组合,可以让我们增加网格的细节。

学习目标

  1. 了解为什么要使用法线贴图映射。
  2. 了解法线贴图的存储方式。
  3. 学习如何创建法线贴图。
  4. 了解法线向量在法线贴图中的存储方式,以及如何在3D三角形的物体空间中使用法线向量。
  5. 学习如何在顶点着色器和像素着色器中实现法线贴图映射。
  6. 学习组合位移映射和曲面细分改进网格的细节。

 

如图18.1所示,圆柱体的高光看上去有些问题——光滑的柱体表面与凹凸不平的砖块纹理放在一起显得极不谐调。这是因为网格几何体是平滑的,我们只是在平滑的柱体表面上使用了一个凹凸不平的砖块纹理而已。而光照计算是根据网格几何体(尤其是顶点法线插值)来实现的,没有考虑到纹理图像的内容。所以,光照和纹理表现出来的质感不完全一致。

图18.1
图18.1 平滑的镜面高光。

在理想状态下,我们可以对网格几何体进行细化,通过网格来模拟砖块实际具有的凹凸裂痕,使光照和纹理表现出一致的质感。硬件曲面细分可以实现这一目的,但是,我们仍需要一种指定由细分器产生的顶点法线(通过插值得到的法线并不能增加法线的分辨率)的方法。

另一种可能的解决办法是将光照细节直接烘焙到纹理上。不过,当灯光在场景中移动时,这种方法会产生错误的光照结果。因为固定在纹理元素中的光照颜色不会随着灯光的移动而变化。

所以,我们的目标是要寻求一种实现动态光照的方法,使物体表面即能体现自身的纹理细节,又能表现正确的光照质感。由于所有的细节都来源于纹理,所以我们可以转变一下思路,从纹理贴图映射入手寻求问题的答案。图18.2是同一个场景在使用法线贴图映射时效果;我们可以看到,动态光照与砖块纹理表现出了相当一致的效果,感觉上比较协调。

图18.2
图18.2 凹凸不平的镜面高光
文件下载(已下载 878 次)

发布时间:2014/8/21 下午6:51:37  阅读次数:4290

2006 - 2024,推荐分辨率 1024*768 以上,推荐浏览器 Chrome、Edge 等现代浏览器,截止 2021 年 12 月 5 日的访问次数:1872 万 9823 站长邮箱

沪 ICP 备 18037240 号-1

沪公网安备 31011002002865 号