見出し画像

Houdini サンゴ礁のような形状変化のシミュレーション

以下のチュートリアル動画をやってみながら発見したポイントなどを書いたブログになります。
いわゆる反応拡散系の一種になるのでしょうか?他のシミュレーションに比べ、何をやっているのかがわかりやすく、単純なアルゴリズムで平常が変化していく驚きがありました。

ジオメトリの用意

Test Geometry のRubberToyにMatchSizeを接続する。この手のシミュレーションでは大きさが非常に重要になってくるので、MatchSizeで大きさを合わせられるのが非常に便利。

Project to Original のオプション。ZBrushのRemeshにも同じようなオプションがあって大変に便利だったが、同じオプションがあって嬉しい。

変異する場所のマスクを作る

Wrangleを追加。ここで出力するマスクは真上から真横に時間で変化する。

angleの値は上向きから下向きへのグラデーション。その値から引き算して絶対値にしたことで境目にしきい値ができる。引く値は時間で変化するので真上から真横へしきい値が変化する。

float duration = chf("duration");
float angle = fit11(dot(v@N, {0,1,0}), 0.0, 1.0);
float ramp = chramp("direction", @Time / duration);
float mask = abs(angle - ramp);
mask = 1.0 - smooth(0.0, 0.25, mask);

f@mask = mask;
しきい値がアニメーションする

fit11は-1~1の範囲の値を受け取るタイプのfit関数。dotのようないつも-1~1が返ってくる関数にはめっちゃ便利。smoothは0-1の範囲に収めつつ、0-1の変化の間でイーズをかける関数。

SoftPeakでふくらませるとこのようになる。

シミュレーションを行う

マスクの生成と変位のノードをSolverにいれる。Solverにいれると毎フレームの計算になるため移動量が増大するため、SoftPeakのDitanceを小さくし、更にメッシュを平均化させるためにRemeshする。

Solverをプレビューすると形状が変位する
時間が経つとこのように変化する
気持ち悪いのか美しいのか…

形状を複雑にする

このままでも十分だが、更に表現を加えるために マスク生成のAttribute Wangleを止めて、代わりにMask By Feature で上からのシャドウとオクルージョンを得る。
シミュレーションを行うとはっきりした溝が生まれて面白い生長をする。

Attribute Wangleを有効にして、Mask By Featureのマスクを計算に加えたマスク生成のAttribute Wangleに変更する。
オクルージョンが加えれ表現が複雑になった。

f@mask *= mask;

Normalを安定させる

サンゴの傘を大きくするためにPeakで動く方向を変化させる。そのために予めNormalを得て、Attribute BlurでNormalにブラーをかける。変化の緩やかなNormalになることで傘が安定して生長するのだろうか?感覚的には理解できていないが非常に面白い。


この記事が気に入ったらサポートをしてみませんか?