Processing

PythonでProcessing Math Random noise()

Perlin noise関数は、指定された座標におけるPerlinノイズの値を返す。Perlinノイズは、標準のrandom()関数よりも自然で調和のとれた数字の連続を生成するランダムシーケンスジェネレータ。Perlinノイズは、1980年代にKen Perlin氏によって開発され、プロシージャルなテクスチャ、形状、地形、その他の一見有機的な形態を生成するために、グラフィックアプリケーションで使用されている。

ランダム()関数とは対照的に、Perlinノイズは無限のn次元空間で定義され、各座標のペアは固定の半ランダムな値に対応している(プログラムの寿命の間だけ固定)。結果として得られる値は,常に0.0と1.0の間になる。Processingでは、与えられた座標の数に応じて、1D、2D、3Dのノイズを計算することができる。

実際のノイズの構造は、この関数が周波数を使用しているという点で、オーディオ信号の構造に似ている。物理学における高調波の概念と同様に、Perlinノイズは複数のオクターブにわたって計算され、最終的にはそれらが加算される。

結果として得られるシーケンスの特性を調整するもう一つの方法は,入力座標のスケール。この関数は無限の空間の中で動作するため、座標の値は重要ではなく、連続する座標間の距離だけが重要になる(ループ内でnoise()を使用する場合など)。一般的には、座標間の差が小さいほど、結果として得られるノイズ列は滑らかになる。ほとんどの用途では0.005~0.03のステップが最適だが、これは用途によって異なる。

また以下の例では、ノイズ空間を移動することでノイズの値をアニメーション化することが確認できる。2次元と3次元は、時間として解釈することもできます。

noiseScale = 0.03
def draw():
    clear()
    for x in range(width):
        noiseVal = noise((mouseX + x) * noiseScale, mouseY * noiseScale)
        stroke(noiseVal * 255)
        line(x, mouseY + noiseVal * 90, x, height)