凹凸纹理贴图(Bump Mapping)
作为一个早期的水体模拟方案,凹凸纹理贴图主要是通过扰动光照计算的法向量,再通过纹理的随时间移动来模拟海浪移动。它并没有改变顶点位置,就能通过视觉效果来让人觉得模型本身是凹凸不平的。这个技术常常用来模拟水面垂直方向上的凹凸感,可以通过生成对应的法线贴图来改变水面和光的交互。
分形噪声法(Fractal Noise)
用分形噪声来模拟水面的思想是用不同频率和振幅的Perlin噪声、或者其他类型的噪声进行叠加出一个新的噪声图,从而来构建出海面高度场。具体构建方法和上文提到的通过bump灰度图构造水面的原理一致。
矢量位移贴图(Vector Displacement Map)
与法线贴图不同的是,他们得到的都是“假位移”,就是他们是通过改变光照效果来达到想要的视觉偏移,而矢量位移贴图(Vector Displacement Map)/位移贴图(Displacement map)是通过“真位移”,也就是通过改变具体的顶点位置来达到顶点偏移的效果。位移贴图比凹凸贴图需要更多的顶点、更高的网格精度(可能需要曲面细分),这就使得Displacement map处理起来会更慢和会有更多的性能消耗。
位移贴图和矢量位移贴图区别:
我们可以看到上图位移贴图和矢量位移贴图的对比,他们的原理和使用方法也不一样。位移贴图是灰度图,使用灰度映射使用低模的模型UV坐标(灰度图)来编码高模和低模之间的差异。也就是说在原模型的基础上,使用一张灰度图,取该图的r/g/b值(灰度图的r=g=b值),在原先的模型的法线方向上,对应每个顶点构造一个新的对应高度。
而矢量位移贴图其实也用类似的手段,但是它是使用高模模型的UV坐标(模型)来制作对应关系。其实就是用矢量位移贴图的RGB值来对应模型顶点在3D空间内的偏移。这意味着我们可以用除法线以外的方向来偏移顶点,这能给我们更高的精度来移动网格顶点,这也让矢量位移贴图的精度接近了原始的高多边形顶点位置(模型)。