1.简介
柏林噪声最常用且最著名的噪声,名字源于他的创始人Ken Perlin。
柏林噪声与值噪声相似,定义若干个顶点且每个顶点含有一个随机梯度向量,这些定点会根据自己的梯度向量对周围坐标产生是能影响,沿着顶点的梯度方向越上升则势能越高。
当需要求出某个坐标的输出值时,需要将该坐标附近的各个顶点所造成的势能进行叠加,从而得到一个总势能并输出。
2.原理
与值噪声一样,它也是基于晶格的噪声,也需要三个步骤:
2.1首先定义一个晶格结构,每个晶格顶点有一个随机的梯度向量。对于二维的柏林噪声来说,晶格结构就是一个平面网格,对于三维来说就是一个立体网格。
2.2输入一个点坐标(二维的话就是二维坐标,三维就是三维坐标,n维的就是n维坐标),我们找到和它相邻的那些晶格顶点(二维下有4个,三维下有8个,n维下有 2ⁿ 个),计算该点到各个晶格顶点的距离向量,再分别与顶点上的梯度向量做点乘,得到2ⁿ个点乘结果
2.3使用缓和曲线计算它们的权重和
下图通过颜色差异显示了2d柏林噪声生成的个像素点的值: