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

这里示例提供了4个可选的随机向量 , 实际上这个数量是偏少的 , 如果想要更加多样的效果 , 建议在实现时多提供些可选的随机向量 。

Simplex噪声

Simplex噪声也是一种基于晶格的梯度噪声 , 它和Perlin噪声在实现上唯一不同的地方在于 , 它的晶格并不是方形(在2D下是正方形 , 在3D下是立方体 , 在更高纬度上我们称它们为超立方体 , hypercube) , 而是单形(simplex) 。

通俗解释单形的话 , 可以认为是在N维空间里 , 选出一个最简单最紧凑的多边形 , 让它可以平铺整个N维空间 。 我们可以很容易地想到一维空间下的单形是等长的线段 , 把这些线段收尾相连即可铺满整个一维空间 。 在二维空间下 , 单形是三角形 , 我们可以把等腰三角形连接起来铺满整个平面 。 三维空间下的单形就是四面体 。 更高维空间的单形也是存在的 。

总结起来 , 在n维空间下 , 超立方体的顶点数目是2n , 而单形的顶点数目是n+1 , 这使得我们在计算梯度噪声时可以大大减少需要计算的顶点权重数目 。

推荐阅读