视差映射贴图(Parallax Mapping)
● 传统纹理贴图的弊端
纹理贴图大家都明白,就是往建好的3D模型上“贴”一些二维的画面,让人物显得更真实一些,比如常见的砖墙、凹凸不平的地面等,这些如果全部用三角形来实现的话,那么模型就会非常复杂,GPU将会不堪重负,但如果用“一张已经画好砖纹的纸”贴上去的话,那么渲染起来就会轻松好多。
但是这么做也有很大的缺点,贴图毕竟是2D的,如果在游戏中换个角度看的话,很容易就会发现墙面没有任何立体感,砖纹看上去非常假!为了让2D贴图看上去也有3D立体效果,就诞生了多种贴图技术,比如凹凸贴图、法线贴图、位移贴图、视察映射贴图等。
● 凹凸贴图
凹凸贴图技术简单说起来是一种在3D场景中模拟粗糙表面的技术,将带有深度变化的凹凸材质贴图赋予3D物体,经过光线渲染处理后,这个物体的表面就会呈现出凹凸不平的感觉,而无需改变物体的几何结构或增加额外的点面。例如,把一张碎石的贴图赋予一个平面,经过处理后这个平面就会变成一片铺满碎石、高低不平的荒原。当然,使用凹凸贴图产生的凹凸效果其光影的方向角度是不会改变的,而且不可能产生物理上的起伏效果。
凹凸贴图在今天看来已经是老的不能再老的一种技术了,虽然能够获得凹凸的效果,但是凹凸的程度非常受限制,基本上只能做出一些简单的浮雕效果来。这种技术通常用在一些观察视角变化很小的情况上,例如地面,墙壁,远处的一些模型等等,如果角度稍微一大,你就会发现那些凹坑其实是根本不存在的。
● 法线贴图
法线贴图就是把一个表面的凹凸情况用每个点的法线向量记录下来,在贴图的时候根据法线贴图做光影的变换,从而实现凹凸效果。
法线贴图比起凹凸贴图而言,能够实现的效果更好了,相对的就是运算量更大了,需要大量的纹理材质,每个象素的光照情况都需要计算这个点的法线向量和光照情况的夹角计算该点的亮度和颜色。为了节约GPU资源,ATI曾开发了3DC+纹理压缩技术,这对于法线贴图有莫大的帮助。
当然,法线贴图技术同样不是完美的,它也有着自己的不足,凹凸贴图没有能够解决的切向效果问题肯定是仍然不能够得到解决。此外,就是法线贴图技术不能够解决解决更大的凹凸情况的效果。大家如果去观察的话,法线贴图效果能实现的通常是一些内凹或者外凸不是很严重的表面效果。
● 视差映射贴图
为了解决法线贴图在处理较深内凹之时不能够达到的弊端,诞生了新的视差映射贴图技术。该技术其实称之为视差遮蔽贴图似乎更容易理解一些,因为它会对纹理的坐标做变换,一些凸出的纹理会遮蔽到其他的纹理,这样就会看起来具备更好的凹凸的感觉了。
ATI X1000 Demo中就包含了视察映射技术
正如我们在上图看到的情况一样,地面上的石块的凹凸感觉非常好,前面的石块已经对后面的石块进行了局部的遮蔽。虽然这个Demo中的砖块依然很假,但砖块之间凹凸的效果已经得到了完美体现,非常遗憾的是,没有任何一款DX9游戏使用过这种视差贴图技术。
● 直到DX10时代才大量使用视差映射贴图技术
视差贴图技术的实现原理,其实和法线贴图是一样的,都是根据法线贴图进行的处理,所以我们可以把它当作是法线贴图的一种衍生技术。视差贴图技术的实现是和硬件没有必然联系的,这个技术概念的诞生其实也非常早,只是未能得到大量使用,这是因为视差贴图技术的运算量要比法线贴图大了不少,原来的显示芯片因为性能有限基本都运行不了。
最早使用视差映射贴图技术的游戏叫做《狂野西部》,首批DX10游戏之一,DX9版本不支持。由于DX10显卡都采用了统一渲染架构,可以方便的集中利用Shader资源,来渲染出复杂的特效。再加上有全新的几何着色器辅助,因此特效的运用方面可以更加灵活,游戏开发商可以很容易的自定义一些特效渲染方式,所以将先进的技术都安置在DX10模式之中也是无可厚非。