第三回 : RealFlowレビュー: 物理シミュレーション編

1. RealFlowの物理シミュレーションとは?

RealFlowというとやはり運動する水や粘液などの液体のシミュレーションが主だという印象がありますが、実はリジッドボディやソフトボディ、物体の衝突などでお馴染みのいわゆる物理シミュレーションもその機能として実装されています。RealFlow Ver. 3.では RealWave も統合されているので、これらを組み合わせることで非常に高度でリアルなシーンを作ることができるようです。言葉での説明よりは、実際に見てもらった方が早いでしょう。

NextLimit RealFlow テクニカルギャラリー

(メニューから "GALLERY" の中段 "TECHNICAL" をクリックしてください)

リンク先のページでは、流体とリジッドボディなどの組み合わせを始めとして、柔らかいゴムの膜で弾む球など RealFlow が得意とする機能を十分に活かしたムービーが見れます。いまどきの統合型 3DCG ソフトには大体基本的な物理シミュレーターが付属しています。たとえば、3D Studio Max では Reactor が付属しており、その機能は流体以外ではほぼ RealFlow のそれをカバーしていますが、その上で RealFlow を使う大きな利点はやはりその統合性でしょう。

2. 実際に試してみる

今回も 3D Studio Max (以下、Maxと表記) と一緒に使ってみたいと思います。とりあえず、使い方が分からないので、公式ページ(日本語版)サンプルシーンから色々探ってみたいと思います。今回は、"DYNAMICS: OBJECT vs OBJECTS"からjacksのシーンをダウンロードしました。早速開いてみます。ギャラリーの中段に、そのムービーファイルがあるので、先にそちらを見てみると、より分かりやすいと思います。


Jacks

ムービーを見てもらうと分かるのですが、パタパタとおもちゃが落ちていくシーンです。ヘルプを片手にシーンを探っていくと、大体重要なパラメーターは、Dynamicsロールアウトの、

  • Dynamics: 力学的にシミュレーションを行うかどうか
  • Primitive: 形状を選択
  • collision side: オブジェクトの衝突面
  • Dry motion: オブジェクト同士の干渉から影響を受けて動くかどうか
  • mass: 体積 (というか重さ)
  • air Friction: 空気抵抗
  • energy threshold: オブジェクトの動きにくさ (上げすぎると動きません)
  • object friction: オブジェクト同士の摩擦
  • elasticity: 弾性 (跳ね返り係数)

などのようです。実は、このサンプルシーン、シミュレーションしてみると、動画のように整った動きはしてくれないのですが、いまだに原因が分かりません...。それも含めて、リアルなシミュレーションなのでしょうか。

というわけで、物理現象がシミュレートできることは実際に確認してみたので、自分で実際に作ってみたいと思います。そこで、考えたアイディアは次の通り。

では早速、ヨーヨーから試してみようと思います。

3. ヨーヨー

用意されているコンストレイン (運動を制限するもの) には、

  • ボールソケット (球間接)
  • ヒンジ (蝶つがい)
  • スライダー
  • フィクスド (固定具)
  • ロープ
  • パスフォロー (パスに沿う)
  • カーホイール (車輪)
  • リム (紐で繋いだような効果が得られます)

とあるので、ロープを使って、ヨーヨーに巻きつかせ、重力にしたがい落下させると、ヨーヨーがシミュレーションできるのではないか!?と思い、実験してみました。まず、Max でヨーヨー本体をモデリングします。


中国風コマ

「どこがヨーヨー?」ってな方もいるでしょうが、いやいや、まずテストなので、わざと不安定目な形にしたのですよ(多分)。これの軸部にロープを巻きつけてみようと思います。


コマを RealFlow 内へ読み込んだところ

コマを SD 形式で保存し、Realflowへ読み込んだ後、SD <-> Curve してから、各ダイナミックパラメーターをオンにします。その後、ロープコンストレインを追加、位置を高くして、Child にコマを指定して、コマを回転させて...あれ?

巻きつかない...。あと、ロープの端が具体的な位置ではなくて、オブジェクト同士のようです。それに、動きもおかしい。


コマを回転させてみたところ。円周上を移動しただけに見える...

残念!失敗です!

どうやらロープは巻きつくような設定はできないようです。また、ロープ本体を可視化できないので、ロープが初期状態でどんな形なのかも分かりづらいところが難点でした...。

4. では衝突球は?

衝突球バランスボールとも呼ばれ、ちょっと前インテリアとしてよく見かけたのですが、最近はあんまり見かけないですね...。それは置いといて、ボールとボールの衝突で、運動量の総和が変化しない性質を利用し、ぶつけたボールの分だけ、反対側のボールが動くというオブジェです。これなら、ロープはぶら下げ、ボールの運動を円周軌道に制限するだけなので、できるのではないでしょうか。というわけで、早速ボールをモデリングし、RealFlowでシミュレーションしてみました。あんまり数が多いと、確認しにくいので、今回は4つです。設定は、次のようになっています。

弾性が1になっているところがミソです。これにより、完全弾性衝突を試すわけです。


ボール4つとロープコンストレイン4つ

シミュレーションを行い、動画にして確認してみます。動画はコチラ

ん?動きがおかしいですね...。実はここで、散々悩みました。mass や energy threshold を変えても直らない。そこで思い切ってシーンのスケールを 1 にしてみました。実はこれが重要だったようで、以前の設定スケールである0.01では正しく動いてくれないようなのです。理由は不明ですが、ロープコンストレインの運動が微小になってしまい、正しいシミュレーションが行われないからの気がします。とにかく、これで動いてくれました。スケールを変えて再度、シミュレーションしてみます。動画はコチラ。

今度は綺麗に動いてくれました。では、後はこれを Max へ持っていってレンダリングするだけ。

5. レンダリング...?

Export Central から Export All ボタンを押し、sd ファイルを保存して、Max へ読み込みます。ところが...


位置関係がおかしい...

位置関係がおかしいです。プレビューしてみてもおかしい...。これもスケールが原因でしょうか...?結局これも原因が分からないのです...。前回のレビューでも触れましたが、やはりスケールの変換に迷わないで済むような工夫が欲しいと思いました。今後も、調べて見る予定ですが、CGは最終的に動画やイメージに出力されることも多いため、ここは是非、正しい結果が得られるようにしたいところです。

というわけで、RealFlow上でもう一度、違う角度から、今度は衝突するボールの数を変えてプレビューしてみました。ちゃんとできてますね♪

6. 感想など

今回試してみて強く思ったのは、やはりスケールの互換でした。重さや、コンストレインの振る舞いに強く影響が出るようなので、ここはかなり注意が必要です。実際、かなり時間を消費してしまいました...。またReactorのロープではロープが可視化でき、操作が柔軟であるところがかなり魅力的に映ってしまいました。メインの機能は流体系ということでしょうか。

とはいえ、統合的にこれらの機能が使え、流体との干渉もシームレスに行えるため、ギャラリーを見ての通り、工夫次第で面白い映像は作れると思います。また、Reactor との連携も不可能ではないので、ツールごとの特性を互いに活かしたシーン作りが肝心であるように思います。もうしばらく、使い込んでみて、RealFlow の力を図ってみたいと思います。