3D贴图基础

漫反射贴图(Diffuse Mapping)

漫反射贴图反映出物体表面在漫反射下的颜色和强度,表现出物体的固有色以及纹理。是物体最基础的贴图。通常也可以直接理解为纹理。

高光贴图(Specular Mapping)

高光贴图表现物体表面的光照属性,包括镜面反射强度,光泽度,以及菲涅耳衍射强度,决定物体在强光下,表面不同材质(布料,金属,皮肤等)的光照表现。一些高光贴图只包含镜面反射强度信息,每个像素只需要8位,即使用一个通道。

法线贴图(Normal Mapping)

法线贴图保存了物体表面每个像素点的法线向量:


这样,将大小为1的光源向量与法线向量相乘,得到的值越接近于0,表面越暗,越接近于1,表面越亮。要保存所有点的法线向量,需要保存[x,y,z]三元组,这正好可以作为RGB值放到一张图片中,因此就有了法线”贴图”,虽然它表现为一张图片,但实际上只是存放向量信息的载体。

有了法线贴图,我们既避免了复杂模型带来的运算和内存占用,又实现了比较细节的光照效果,突出了模型的细节。

视差贴图(Parallax Mapping)

视差贴图技术和法线贴图差不多,但它有着不同的原则。和法线贴图一样视差贴图能够极大提升表面细节,使之具有深度感。它根据储存在纹理中的几何信息对顶点进行位移或偏移。但是这种偏移只用于光影表现,不作用于实际模型轮廓。一种实现的方式通过高度贴图(High Mapping)保存纹理中顶点的高度信息。

置换贴图(Displacement Mapping)

又叫位移贴图,替换贴图可以通过一种向量贴图的方式来实现,这个向量贴图并不像普通贴图那样改变物体表面的颜色,而是改变物体表面点的位置。它不像法线贴图和视差贴图,因为这些技术都是在制造凹凸效果的假象,而位移映射是真正通过贴图的方式制造出凹凸的表面。它必须要配合切面细分算法,增加渲染的多边形数目来制造出细节的效果。因此它是同类贴图中消耗最大的。

环境贴图(Environment Mapping)

又叫反射贴图,把反射对象当作一个虚拟眼睛,生成一张虚拟的纹理图,然后把该纹理图映射到反射对象上,得到的图像就是该场景的一个影像。反射贴图主要实现的功能是:使物体表面能显示出真实场景的影像,而又无需逐个渲染场景中的物体。环境贴图根据反射对象的不同,主要分为三种:球面环境贴图,立方体环境贴图和双曲面环境贴图。

光照贴图(Light Mapping)

光照贴图针对于模型周围光照作用于模型效果的一个快照,以避免实时计算光照效果和阴影效果。这通常用在对静态物体(如墙面,箱子)的渲染优化,如Unity中可通过烘焙得到光照贴图。

实例效果


漫反射+高光贴图


漫反射+环境贴图


漫反射+法线+环境贴图

更多参考

  1. 环境贴图:http://www.twinklingstar.cn/2014/1322/environment-mapping/
  2. Wiki中的各种贴图:https://zh.wikipedia.org/wiki/%E4%BD%8D%E7%A7%BB%E8%B4%B4%E5%9B%BE
  3. Learn OpenGL: https://learnopengl-cn.readthedocs.org/zh/latest/
  4. GTA5中的贴图运用:http://www.adriancourreges.com/blog/2015/11/02/gta-v-graphics-study/