概要
Houdini での制作は基本的にノードベースであり、プログラミングを必要としません。
しかし Houdini がサポートする PythonやWrangle などの言語を使うことで、これらのノードを制御し、さらに柔軟な表現が可能になります。
本記事では、Wrangle を用いてランダムノイズを生成します。
ノイズジェネレータ
以下はノイズを発生させるための関数です。乱数を発生させるポイントや範囲、粗さ・減衰・乱流などの波形に関する変数を変えることで、それぞれ異なるノイズを作ることができます。
それぞれの関数には計算速度で差があり、求めるノイズの大きさなどから適したものを選ぶことができます。
ノイズタイプ | 相対負荷 |
---|---|
Perlinノイズ(noise) |
1.0 |
オリジナルのPerlinノイズ(onoise) |
1.1 |
Worleyノイズ(wnoise) |
1.8 |
Sparse Convolutionノイズ(snoise) |
2.1 |
Alligatorノイズ(anoise) |
2.3 |
noise(pos)
Perlin ノイズには、N次元空間の至る所でランダムに変化する非周期型ノイズと、指定した空間の範囲を繰り返す周期型ノイズの二つがあります。
noise() は非周期型ノイズを生成します。
pnoise(x, p)
pnoise() は周期型ノイズを生成し、規則や範囲に従ってタイルを敷き詰めるような模様を作ります。
変数 p は周期の範囲を指定します。値を 0 にすると周期性がないノイズを生成します。
onoise(pos, turbulence, rough, atten)
onoise() は粗さ(rough)と減衰(attenuation)を設定した乱気流(turbulence)を計算することができます。少し値を変えるだけで大きく雰囲気を変えることができるため、任意の乱数を使って様々なバリエーションを試すことができます。
(rough)
(attenuation)
wnoise(position, seed, f1, f2, f3, f4)
wnoise() は Worley(Cellular)ノイズを生成します。Worley ノイズは、ポアソン分布に応じて空間内でランダムにシードポイントをばら撒き、サンプルポイントに最も近い2個(または4個)のシードポイントまでの距離を出力します。性質上細胞のような模様を生成します。
引数にシードポイントの範囲を加えることで、周期関数を生成することができます。
vnoise(position, jitter, seed, f1, f2, pos1, pos2)
vnoise() は Voronoi(Cellular)ノイズを生成します。wnoise と違い各軸のノイズに追加するランダム量である jitter を持ち、ポイントを指定範囲内にランダムに配置したり逆に正規化させることもできます。周期ノイズ機能もあります。
左から vector jitter = {0, 0, 0}, {1, 0, 0}, {0, 0, 1}
snoise(pos, turbulence, rough, attenuation)
snoise() は スパース畳み込みノイズを生成します。関数自体が wnoise に似ているほかに引数が onoise と同じだったりしますが、ノイズの範囲がほぼ(-1.7, 1.7)であったり三次元のみのサポートであったりと若干の差があります。
anoise() はアリゲーターノイズを生成します。ノイズの範囲は、ほぼ(0, 1)をとり、三次元のノイズのみ対応しています。
セルラーノイズを描くことでランダムに配置された複数の点とターゲットにする点の最小距離を求め、鰐革のような模様を生成します。