キャラクターと絡むtrailを作る時、アニメーションの動きを元にtrailを作る機会があると思います。
そんな時、望まない軌道を意図した軌道に修正する方法を紹介します。

スペック:houdini 18.5

 

横の画像は、軌道に違和感があるようにしたアニメーションでtrailを作った例です。
するとObjectの方向とtrail sopで作ったlineの方向が合ってない状態です。

下記が具体的な修正の方法です。

【Houdini Network】

上記がHoudini Networkの全体像です。今回は、アニメーションの動きに沿ったlineと、沿わせないlineを使って修正する方法です。
修正のPointは主に3つです。

Point① intrinsic attributeを活用する。

intrinsic attributeとは、houdini内の隠れパラメーターです。
primintrinsic関数を使って、ジオメトリからprimitiveのintrinsic attributeを作ります。
全体のlineの長さを知りたいので、measuredperimeter(lineの長さを格納)のintrinsic attributeを取得しています。
このattributeが必要な理由は、2つのストリームで作ったlineの長さを合わせる為です。

f@length = primintrinsic(0,"measuredperimeter",0);

Point② prim関数でintrinsicを読む。

prim関数を使って、Point①で作ったattributeをline node>Lengthパラメーターに読み込みます。こうする事で、自動的にtrail sopで作ったlineの長さと同じになります。

prim("../GET_intrinsic/",0,"length",0)

Point③ 2つのlineをブレンドする。

上記で作った2つのlineを、lerp関数を使ってブレンドします。
まず、ブレンド幅を決めるattributeを作ります。

f@bias = chramp("bias",@curveu);

lerp関数は2つの値が必要なので、2つのattributeを定義します。
今回はlineの位置をブレンドさせたいので、input1に接続してるストリームのlineの位置をattributeとして作ります。(Network画像を参照)

vector rest_lineP = @opinput1_P;

lerp()でwrangleのinput0に接続してるpoint位置(P)とinput1に接続してるpoint位置(rest_lineP)をブレンドさせ、また@Pに戻します。

@P = lerp(@P,rest_lineP,@bias);

■補足■
lerp(値1,値2,ブレンド用の値)

最後に、アニメーションに合わせて、ブレンド幅を調整して完了です。
するとObjectの方向とlineの方向が合うようになります。
あとは、この調整したlineでアレやコレやして良い感じにして完成です。