Houdini回!
Geometry Wrangle(DOP)で強制的に、アトリビュートvとwを減衰させる方法です。
「RBD PackedでPOP Drag Spin(DOP)使うとおかしなことになる」、というので、代わりになるものはないかと調べたらodforceに減衰についてのスレッドが立ってました。ありがたや。
何もしないのとの比較動画を作ってみました。上が通常、下がWrangleでのDamping有効。
DOPネットワークは標準的なRBDの組み方。
赤く色付けたノードGeometryWrangle(DOP)に以下のようなVEXコードを書いて、減衰させているそうな。
v@w *= 0.98; v@v *= 0.98;
毎処理ごとに、v(速度)とw(回転)の値に0.98がかけられていきます。
24FPSの場合1秒後には、0.98の24乗=0.615…、とおよそ6割になります。
なかなか減りますね。減衰させすぎると不自然な動きになるので注意が必要です。
odforceのスレッドでは、最終的に次のようなコードが紹介されていました。
float d = 0.5; v@w *= pow(d, @TimeInc); v@v *= pow(d, @TimeInc);
頭いいなと思いました。
変数dの値で、1秒後にどのくらいvとwの値を減衰させられるか指定できるようになっています。ここでは0.5なので、1秒後にそれぞれvとwの値は半分になります。2秒後にはさらにその半分と、どんどん半分になっていきます。
以下、式についてもうすこし解説。
つまり変数dの値によって1秒後の減衰率をコントロールできると。あたまいいなと思いました。
これはサブステップ1のときなので、1以上サブステップを切った祭は、それを考慮した式にしないといけない・・・たぶんね。
でも、あたまいいなとおもいました。
以上、また次回!
サンプルファイル RbdDamping_Sample.hiplc
参考
お疲れ様です。
こちらのHip拝見させていただきました。
PreSolveにWrangleをつながれておりますがPostとの使い分けのようなものを教えていただけませんか?
@TimeIncにsubstepの数を掛け算すればOK
サブステップが1以上(例えば2)になった場合は、この場合どうすればいよいのでしょうか?