1.簡介
柏林噪聲最常用且最著名的噪聲,名字源於他的創始人Ken Perlin。
柏林噪聲與值噪聲相似,定義若干個頂點且每個頂點含有一個隨機梯度向量,這些定點會根據自己的梯度向量對周圍坐標產生是能影響,沿着頂點的梯度方向越上升則勢能越高。
當需要求出某個坐標的輸出值時,需要將該坐標附近的各個頂點所造成的勢能進行疊加,從而得到一個總勢能並輸出。
2.原理
與值噪聲一樣,它也是基於晶格的噪聲,也需要三個步驟:
2.1首先定義一個晶格結構,每個晶格頂點有一個隨機的梯度向量。對於二維的柏林噪聲來說,晶格結構就是一個平面網格,對於三維來說就是一個立體網格。
2.2輸入一個點坐標(二維的話就是二維坐標,三維就是三維坐標,n維的就是n維坐標),我們找到和它相鄰的那些晶格頂點(二維下有4個,三維下有8個,n維下有 2ⁿ 個),計算該點到各個晶格頂點的距離向量,再分別與頂點上的梯度向量做點乘,得到2ⁿ個點乘結果
2.3使用緩和曲線計算它們的權重和
下圖通過顏色差異顯示了2d柏林噪聲生成的個像素點的值: