[Houdini] オブジェクトをスプラインに沿って動かす
「Houdiniドリル」に載っていた、「スプライン上にオブジェクトをコピーして並べる」テクニックを利用して、オブジェクトをスプラインに沿って動かしてみました。
参考書籍:「Houdiniドリル」
結果
↓のように、ブタがスプラインに沿って動きます。顔の向きもスプラインに沿った方向を向き続けます。
このサンプルのノードの構成は↓のようになっています。
解説
方針
スプライン上を始点から終点まで進む1点を作成し、その1点の場所にブタをコピーします。
Curveノード
まずは「Curve」ノードで、適当にスプラインを引きます。(サンプルではTopビューにしてXZ平面上に引いています)
Resample
次に、「Resample」ノードで、スプラインを等間隔に分割します。
Orient along Curveノード
続いて、「Orient along Curve」ノードで、カーブに沿った方向に法線ベクトル(N)を作ってあげます。
Carveノード
そして、ここが肝心な部分です。
「Carve」ノード(Curveのタイポじゃないよ)で、「Extract」モードにして「First U」の1点のみを抽出します。「First U」は[0~1]で始点から終点まで移動します。ここをアニメーションにするため、エクスプレッションで$F/60
と入力します。これで、60フレームで[0~1]まで抽出点が動きます。その様子が↓で、動いている赤い点がその抽出点です。
Copy to Pointノード
ここまできたら、あとは「Copy to Point」ノードの左のピンにブタを、右のピンに「Carve」ノードの出力ピンをつなげてあげれば、ブタが前述の抽出店の位置に配置されます。
スプラインの向きによっては、↓のようにブタが上下逆さまに配置されてしまうことがあります。
ブタの方の「Rotate」で「Z=180」にしても解消できますが、「Orient along Curve」ノードの「Additional Rotation」カテゴリで「Roll=180」にすることでも直ります。
再生してみる
アニメーションの再生バーを動かすと、↓のようにブタがスプライン上を動きます。「Orient along Curve」ノードで、法線ベクトル(N)をカーブに沿った方向にしてあげているので、顔の向きは常にスプラインに沿った方向を向き続けます。
Discussion