C/C++编程笔记:游戏开发中的噪声算法详解,游戏编程常用技术(16)

(r2?|dist|2)4×dot(distgrad)

实现(二维)

r^2取0.5的原因是因为要求经过第一步坐标偏斜后得到的网格宽度为1 , 因此我们可以倒推出在变形前单形网格中每个单形边的边长为23??√ , 这样一来单形每个顶点到对面边的距离(即高)的长度为2√2 , 它的平方即为0.5 。 很奇妙的是 , 不仅是二维 , 在其他维度下 , 每个单形顶点到对面边/面的距离都是0.5 。

虽然理解上Simplex噪声相比于Perlin噪声更难理解 , 但由于它的效果更好、速度更优 , 因此很多情况下会替代Perlin噪声 。

而且高维的噪声并不少见 , 例如对于常见的二维噪声纹理 , 我们可以额外引入时间分量 , 变成一个2D纹理动画(三维噪声) , 用于火焰纹理动画等..

对于常见的三维噪声纹理 , 引入额外的时间分量 , 就可以变成一个3D纹理动画(四维噪声) , 用于3D云雾动画等..

当我们需要一个可循环无缝衔接的动画时(见下文可平埔的噪声) , 那噪声又要提高一个维度 。

推荐阅读