スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
早速アイディアに行き詰まってなかなか自主制作も滞っているので
たまには少し数学っぽい記事を。

Houdini で特定のパラメータにランダムな値を入れる際に rand 関数を使います。
しかし、0.0 から1.0 まで均等に分布されるのではなく
中間値である 0.5 あたりの値が最も多くなるような正規分布の方が望ましい
という場合も多々あると思います。

平たく言えば、例えば大量の石ころを作ろうというとき、
ほとんどの石の大きさは直径4.0cmくらいで、たまに2.0cm や 6.0cm のものもほしい
であるとか、
ほとんどの石はグレーだけれどたまに黄色っぽいものや青っぽいものもほしい
であるとか。

Maya の場合は gauss 関数が用意されているのでいいのですが Houdini にはありません。※追記参照
(とはいえ gauss も個人的には最小値と最大値が不明瞭なため好きでないですが。)

もちろん方法は色々あり、例えば Ramp Parameter VOP を使えば Catmull-Rom などの
優秀なアルゴリズムでの補間も行なえるし、中間値と言わず自由な分布が可能です。

しかし Expression に式だけ書いてささっと手軽にやりたいときもあります。

そこで数学の得意でない私でもすぐに思い浮かんだのが三次関数と三角関数の正弦波。
これらそれぞれの、(0,0)と(1,1) を通り x=0.5 での微分係数がゼロになる式を考えると、

三次関数の場合は y = (x - 0.5)3 * 4 + 0.5

20140228_01.png

正弦波の場合は y = ( sin(x * 2π) + x * 2π)/2π(度数法:( sin(x * 360) + x * 2π)/2π)

20140228_02.png

になりました。

この x に、0.0 ~ 1.0 の値をとる乱数を代入すればいいだけです。
言わずもがな Houdini の Expression では三乗は pow 関数
πは環境変数 $PI を使います。sin 関数は度数法です。
Maya の場合は sin が弧度法で sind が度数法です。

結果にそんな大差がないので三次関数の方が簡単で楽だと思います。


ずいぶん前の記事ですが こちらの記事も似た内容なので是非ご参考までに。



2015.11/30 追記:
Houdini 14 以降のバージョンでは、「Attribute Randomise」 SOP により
ガウス分布を含めた多種の方式でのランダムな値が簡単に習得できるようになりました。
スポンサーサイト
Profile
HN らい

都内某社テクニカルディレクター
都内某専門学校講師
都内某企業講師
元中国某社S3Dスーパーバイザー
Contact
(ENGLISH OK. 可以用中文。)
Categories
Archives
RSS Link
QR Code