前一阵子在小破站看到了关于分型柏林噪声的内容,讲述了关于柏林噪声发生的原理。
视频链接:分形柏林噪声_哔哩哔哩_bilibili
当时正好需要用到这方面的内容,就自己尝试做了一下,过程稍微有点坎坷,隔了一段时间再来写一下。
柏林噪声和值噪声的区别
相信来到这边的小伙伴已经了解了值噪声,而柏林噪声实际上就是把值噪声中的值替换成了一个梯度向量。这个梯度向量我理解为是一个单位向量,方便归一化,但是大家也可以尝试一下替换成模小于等于1的向量。
值噪声每个区块的运算就是对四个角进行插值,柏林噪声有相似之处。

柏林噪声的运算首先要将图片划分成若干相同尺寸的区块,然后根据区块形状生成随机的梯度向量表,使得一个区块的四个角都对应一个梯度。在一个区块内,计算点到四个角的向量,然后用该向量和角上的梯度点乘。最后插值。
在一个区块内,如果我们单独对一个角上的向量进行点乘,我们会得到一张简单的渐变图案,这张图案的渐变方向其实是该角的梯度向量的方向。
而柏林噪声就是对四张这样的渐变图案进行插值。
注意,这里的插值很关键,直接影响到柏林噪声的品质。
插值公式的推导
对于一维的插值,可以根据需要列方程
最后求到这个公式,也是网上常见的插值方式: