🐯

[Houdini] オブジェクトをスプラインに沿って動かす

2025/01/12に公開

「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