2008年9月15日月曜日

RealFlow:Impluse(推力)を得てオブジェクトを動かす



RealFlowではエミッタが放つ推力によりオブジェクトを動かすことができるというチュートリアルがあります。
このチュートリアルはいくらか大雑把で、いくつかの設定の説明が抜けています。
そしていくつかの実用上の疑問も残します。
推力が途中で無くなるような表現の場合はどうなるか?
その場合、落下してリジッドボディがどのように計算されるのか?
などです。
実際のプロジェクトの場合はこのように、私たちを困らせる「ひねった問題」を解決しなければならないでしょう。


<circleEmitter.jpg>

RealFlow3ではパラメータ名がLonkToのようですが、RealFLow4ではParentToです。
エミッタをロケットオブジェクトにリンクします。逆ではありません。
エミッタのType=Dumbです。
この例ではエミッタ中心軸をロケットの中心軸から少し水平にオフセットして、バランスが悪い状態を作ってみました。
また、横風Windも追加して少し横風に流される様子も加えてみました。
その結果ロケットはバランスを失い、くりんと回転して、推力を失った状態から落下しました。


rocketObject.jpg

ロケットオブジェクトはDynamics=RigidBodyにする必要があって、しかもDynMotion=Yesになっていなければなりません。
この例ではPrimitive=ConvexHallです。これはいくらか大雑把で凸型を定義します。
ちなみに地面のオブジェクトについては何によっても動いて欲しくないので
Dynamics=RigidBodyですが、DynMotion=Noとすることで重力などの影響により落下することを防ぐことができます。

f20→f30の間で推力が0まで減じていった場合は、このようにGravityの影響により落下することができます。
きわめて現実的な現象をもっともらしくシミュレートしています。えらい!

RealFlowは詰めるのが大変そうなのですが、その安定度や精度の高さについては非常に感心します。
ただしシミュレーション時間はけっこうかかります。
CGソフトではForceと呼ばれるようなツールはRealFlow内ではDemonと呼ばれていますが、これらの動作の正しさ、影響範囲などのビジュアル面の直感性能など、とてもよくできています。
値段は最初に比べるとだいぶ高くなりましたね・・・。

シミュレーションの欠点のひとつは前のフレームを計算しないと後のフレームのことは確認できない、という点です。
またひとつは演出に沿った表現に至るまでには多くの調整が必要だということです。
そのためには、例えばタイミングやフレーミング、量感、スピードといった多くの要素をコントロールしなければなりませんし、多くの場合はその過程で値のもっともらしさが失われ、ついで動きのリアリティが失われやすくなります。
このような点をクリアするには時間がかかりますが、やはり実験により経験を積み重ねていくしかないでしょう。

制作・©:のぼる/N.Lab