Houdini 練習



Houdini の練習で作りました。
忘れないように自分用メモ。

全体

Geometory としては壁の部分と表示させないけど文字を押し出すやつ、そして地面。CameraPath というのはカメラの移動でちょっと VEX を使いたかったので別で用意。あとは Pyro で煙というか粉塵っぽいものも作成。

壊れる部分

ここはよくあるパターンで Scatter でポイントをばらまいて Voronoidfructure でバラバラに。


そして DOP の中で RBD Fractured Object からバラバラにしたのを持ってきて重力を付けるけどこのままだと枠からこぼれてしまうのでブロックがあたる瞬間にタイムラインで重力の Activation を 0 => 1 と変えることで回避。
それでも Voronoi にするまえの Scatter の数を変えると崩れてしまうことがある。そもそも物理の挙動をとあるフレームまで無効にする方法が分かってない。


後ろから文字を押すオブジェクトは Copy で複製して、それをアニメーションで動かす。DOP の重力ノードの後に Merge でつなげる。レンダリングさせない方法が最初わからず、透明のマテリアルを作ろうとしてたけど、そもそも表示/レンダリングのスイッチをオフにすればよかった。

カメラの動き

カメラは最初は Transform でアニメーションさせていたけど、爆発の際に揺らしたく変更。別に CameraPath という Geometory を作り、そちらでアニメーションさせたものを Camera の Transform に適用。
Swing の VEX は揺れるタイミングと揺れ終わるタイミングでパーセンテージを取って、適当に揺らす。

int startFrame = chi("startFrame");
int endFrame = chi("endFrame");
float per = 0;
float frequency = chf("frequency");
float randomAmount = chf("randomAmount");
float moveRange = chf("moveRange");
float rotateRange = chf("rotateRange");
float rotatePivotRange = chf("rotatePivotRange");

if (@Frame >= startFrame)
{
    per = 1 - fit01((@Frame - startFrame) / (endFrame - startFrame), 0, 1);
}

float randX = random(@Frame + @P.x);
float randY = random(@Frame + @P.y);
float randZ = random(@Frame + @P.z);

matrix rot = ident();
vector axis = normalize(@P) + per * rotatePivotRange * normalize(set(randX, randY, randZ));
axis = normalize(axis);
rotate(rot, rotateRange, axis);
@P = @P * rot;

@P.x += per * moveRange * sin(@Frame + randX) * frequency;
@P.y += per * moveRange * sin(@Frame + randY) * frequency;
@P.z += per * moveRange * sin(@Frame + randZ) * frequency;

SetCameraAngles の方は単純にプロパティに Transform のアングルを割り当てる

v@cameraAngles = {0, 0, 0};
@cameraAngles.x = chf("../transform/rx");
@cameraAngles.y = chf("../transform/ry");
@cameraAngles.z = chf("../transform/rz");

そしてカメラの Transform に
Translate : point(“/obj/CameraPath/CameraAnimationPos”, 0, “P”, *)
Rotate : point(“/obj/CameraPath/CameraAnimationPos”, 0, “cameraAngles”, 0)
と入れておく。


煙はまだよくわかってないけどこんな感じ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です