概要
Houdini での制作は基本的にノードベースであり、プログラミングを必要としません。
しかし Houdini がサポートする PythonやWrangle などの言語を使うことで、これらのノードを制御し、さらに柔軟な表現が可能になります。
本記事では、Wrangle を用いて乱数を生成する関数を紹介します。
乱数ジェネレータ
rand()
rand() は引数に取った一次元から四次元までのシード値をもとに乱数を生成します。生成される値は同じシード値なら同じ値になり、その値は 0-1 の間で収まります。
単純な乱数生成に使われるほか、同じシード値で同じ値を生成することを使ってプリミティブそのものをランダムなポイントに移動させることもできます。
random()
random() は一次元から四次元空間内の位置に基づいて乱数を生成します。
上の rand() と同様に同じ引数の場合同じ乱数を生成します。
nrandom()
非決定的乱数ジェネレータとして、0-1の範囲の乱数またはランダムな単位ベクトルを返します。
rand() や random() はシード値によって同じシーケンスの乱数を生成できますが、nrandom() はシード値を必要としないため、関数の実行のたびに異なる乱数を生成することができます。
シード値こそ必要ではありませんが、オプションで文字列を使うことで乱数生成のメソッドを指定することもできます。
random_fhash(), random_ihash(), random_shash()
random_fhash() と random_ihash() はそれぞれ浮動小数点と整数から整数のハッシュ値を生成します。
random_shash() は文字列から整数のハッシュ値を生成します。
注意点として、異なる2つの文字列が同じ値のハッシュ値を生成することがあります。また、指定した文字列によっては戻り値が非常に大きな値になることがあります。そのため、この関数からの戻り値を乗算したりするとオーバーフローが発生する可能性があります。
random_poisson()
random_poisson() ではポアソン分布をもとに乱数を生成します。第一引数でシード値を与え、第二引数で分布平均を与えます。シード値が存在するため、同じ平均でも異なる数値を生成します。
可変で第三・第四引数に int 型で最小値と最大値を指定すると、その範囲内で乱数が生成されます。