massFXのtimescale

久々ですね年の瀬ですね。

 

maxのmassFXシミュレーションでスローとか可変とかする時にどうするのかわかったのでメモ。
ちょっとテクニカルむけ。

まず前提として、
元々、massFXやmParticles、rayfireなどのツールでは物理演算のエンジンとしてphysxというものを使用してるので、
根本的な動きの精度や制限はほぼ同じはずなんです。
maya,max,SIがどれもレンダーはmentalray使ってるけど乗せ方の違いとかで出来る事に差が出てるような感じのアレ。

逆に言うと、同様のエンジンなのでシミュレーションの精度やなんかの限界みたいのにぶち当たったら、別口でこれらを試しても根本的にエンジンが変わらないので解決できないかもー、とかそんな判断も出来ます。
ちなみにornatrixのベースのヘアダイナミクスとかもphysxです。調べてみたらblur等はそっち使わずcloth方式にしてるそうです。
(この辺り使用しているエンジンの問題なのかソフト単体の問題なのか切り分けて考えられるとイイデスネ。TPとかICEは物理エンジン複数積んでるので使い分けられたり。

 

で話を戻して、mParticleではスキニングしたオブジェクトのコリジョンができたりraifireの方ではシミュレーション中のスローとか出来たりとか、その辺りの差が出てくるのは制限の中で工夫してたり、実はphysxエンジンではできるけどなにがあったかUIに乗せてないとかあるっぽいのですが(適当
physxの仕様自体にはタイムスケールあるらしいから、出来るんじゃないかなー(願望)
とmaxフォルダの中見てたらありました。

C:\Program Files\Autodesk\3ds Max 2014\stdplugs\stdscripts\(MassFX)

px_globals.ms

この中の776行目辺りに

local delta = 1.0/frameRate

というなんかそれっぽい記述が。1.0決め打ち・・!
で、実際にこの値を制御できるように

my_tracks = newTrackViewNode “K_Physx”
test_ctrl = bezier_float()
addTrackViewController my_tracks test_ctrl “TimeScale”

でトラックビューにパラメーター追加して、スクリプトの方は

local delta = (trackViewNodes[“K_Physx”][“TimeScale”].value)/frameRate

って改造したパラメーターを参照するようにしてみたら

デキマシタワー!

パラメーターアニメーションさせれば途中からスローみたいな処理もできた。massFXクロスの方にも適応されます。
ちなみにシミュレーションのサブステップ数とか精度の問題で、スローにした時と早送りで結果がずれる事もありますからご留意ください
あと、massFXのシミュレーションはベイクされるので、シミュかける作業用PCだけ対応しておけば
レンダー時のマシンは元のpx_globals.msのままで大丈夫です。

不要になってコントローラ消したい時は
deleteTrackViewNode trackViewNodes trackViewNodes[“K_Physx”]
で消えますので、テストで作っちまっただああああというときはこちらで。

上のはシーン直にパラメータ追加してみてますが
要は1.0のとこをどうにかすればいいので
みなさま使いやすいように改造してみてください。

 

ちなみにですが、これと似た感じでmaxのクロスもトラックビュー開いてみるとtimescaleのパラメーターがあって、
いじって見るときちんと反応します。
ただこちらはアニメーションには対応していないようで、ちょっとUIから隠れてるのはその辺りのせいかなーと。

massFXの改造も自分では使えていますが環境とかシーンとか何かしか問題出る可能性は残ってるので、
いつも通り自己責任で試してみてください。
px_globals.msを書き換える前に元ファイルどっかにとっておくとか諸々。