On this page |
シミュレーションはオブジェクト、ソルバ、(通常は)フォースを持ちます ¶
-
その球が選択された状態で、 Rigid Bodies シェルフタブのRBD Hero Objectツールをクリックします。
-
Houdiniのウィンドウ下部にあるプレイバーの Play ボタンをクリックします。
球が落下します。なぜなら球がシミュレーションオブジェクトになっているからです。シミュレーションオブジェクトを作成すると、Houdiniは自動的に obj レベルでシミュレーションネットワークを作成します。そこには、シミュレーションの挙動を定義したノードが配置されています。ネットワークエディタの obj レベルにAutoDopNetwork
という名前のネットワークが表示されます。
Note
シミュレーションネットワークは必要なだけ作成することができ、ネットワーク内部に入ってダイナミクスノードを手動で定義することができます。
また、 Simulation メニューの Current Simulation サブメニューで別のネットワークを選択するまではシェルフツールを使っても、AutoDopNetwork
にノードを作成することができます。
AutoDopNetwork
をダブルクリックして中に入ると、Houdiniがシミュレーションのネットワークを構築したことを確認することができます。
Lを押すとネットワークのレイアウトが再配置されます。
ネットワークはとてもシンプルですが、Houdiniのダイナミクスの基本概念がわかると思います。そのネットワークには、 オブジェクト 、 ソルバ 、 フォース でシミュレーションが構成されています。
ダイナミクスオブジェクト は、 ある事 をシミュレーションするのに必要なパラメータを保持しています。上記のネットワークでは、球オブジェクトのノードには、シミュレーションするオブジェクトのジオメトリのパス(あなたが作成した球を参照します)、密度/温度/摩擦、初期位置/回転/速度などのパラメータがあります。
ソルバ はシミュレーションするオブジェクトの挙動を計算します。これはシミュレーションの状態を見て、内部ルールを使ってタイムステップ毎に修正します。上記のネットワークでは、RBDソルバがリジッドボディの球の動きと衝突をシミュレーションします。
フォース とは、オブジェクト(シーン内すべてのオブジェクトまたは個々のオブジェクト)に追加することができる情報で、例えば、“このオブジェクトは風の影響を受ける”、“このオブジェクトの動きは抵抗力で鈍くなる”といった内容です。上記のネットワークでは、Gravityノードがオブジェクトに“力のデータ”として接続されています。ソルバがオブジェクトの力のデータを見て、球をタイムステップ毎に重力のシミュレーションをした結果によって球を下に落とします。 Drive Simulation シェルフタブのツールはシミュレーションにフォースを追加することができます。
Houdiniは異なるタイプのソルバを持っています ¶
2つのオブジェクトを衝突させるには、ストリームを結合しなくてはならない ¶
他のネットワークタイプでは、Mergeノードはノードの出力を結合して1本にします。ダイナミクスネットワークでは、Mergeノードは リレーションシップ を作成します。このリレーションシップとは、どのオブジェクトが他のどのオブジェクトに影響しているのか記述した特別なデータタイプのことです。
ダイナミクスでメインタイプのリレーションシップは、 collision リレーションシップです。これは、オブジェクトが他のオブジェクトと衝突した時に、オブジェクトの形状/動き/挙動が変化することを意味します。また、RBD、ワイヤー、布シミュレーションには constraint リレーションシップ(ピンとスプリングのようなもの)があります。
リレーションシップについて覚えておくべき重要なことは、計算時間がかかることです。そのため、シミュレーションを最適化するには、お互いに本当に必要なリレーションシップだけを作成したり、1方向のリレーションシップ(オブジェクトが他のオブジェクトに影響を与えるが、その逆がない)を使用する方法を探すべきです。
Geometry Spreadsheetには、どのオブジェクトが影響を与えているのか可視化したアフェクターマトリックスが含まれています。 そのアフェクターマトリックスにアクセスするには、プロジェクトのDop Network OBJをクリックして、 Geometry Spreadsheet タブを開きます。
Note
そのプロジェクトには、検査したいRBDオブジェクトが必ず含まれていなければなりません。
Geometry Spreadsheet の左側にある階層ツリーにAffector Matrix
ブランチがあります。
それをクリックすると、オブジェクトのリレーションシップを確認することができます。
ビューポートでのシミュレーションの可視化 ¶
ダイナミクスの可視化を参照してください。
フラグのオン・オフ ¶
オレンジのフラグは、ネットワークのノードの“出力”または“末端”をマークします。 つまり、 Output フラグが付いたノードを含む上流のノードのみがシミュレーションの一部になります。 ネットワーク毎に1個のノードしか Output フラグを有効にすることができません。
DOPにも Bypass フラグがあるので、特定のノードを使用した場合と使用しなかった場合でのシミュレーションの状態をチェックすることができます。 通常では、このフラグは Geometry Spreadsheet でデータの生成をデバッグするのに使用します(下図を参照)。
オブジェクトやデータの有無を アニメーション させるなら、ノードの Activation パラメータにキーフレームを設定します。 Activation が0以外の数値であれば、ノードがアクティブになり、ネットワークに影響を与えます。 反対に、 Activation が0なら、 Bypass フラグがオンの時と同様にノードは何の影響も与えません。
Geometry Spreadsheetでシミュレーション内部の状態を確認 ¶
Geometry Spreadsheet からシミュレーションの大元のオブジェクトとデータにアクセスすることができます。 タブ内に新しくGeometry Spreadsheetペインを作成することができます。
左側のツリーには、シーンのオブジェクトとリレーションシップなどのカテゴリが階層で表示されます。右側には、左側で選択したデータの フィールド とその値が表示されます。
このペインはシミュレーションの構造を検査するのにとても役に立ちます。現在のフレーム、現在の出力ノードで、どのデータがどのノードに繋がっているのか、データパケットの名前と固有のID、またデータを構成している値を確認することができます。
Geometry Spreadsheetは、シミュレーションを再生する度に動的に更新します。これはデータが時間が経過するにつれてどのように変化するのか確認するときに役に立ちますが、シミュレーションの再生が遅くなります。その時は、ペインの分割線上の矢印を使えば、Geometry Spreadsheetを折り畳むことができます。
DOP Networkのシミュレーションの構築方法 ¶
ネットワークは上から下へ、左から右へ評価します。複数入力のノードに関しては、1番目の入力を上から下へ、2番目の入力を上から下へ・・・のように評価していきます。
サブステップ ¶
ソルバの衝突検出をより正確にするには、ソルバの Maximum Substeps パラメータの値を大きくします。この値を大きくすると、通常はシミュレーションの計算時間が長くなります。
シミュレーションを含んだDOP Networkの Timestep パラメータを使えば、全体的にシミュレーションの解像度を上げることができます。 また、ソルバオブジェクト上で直接サブステップを変更することもできます。
ダイナミクスエンジンはタイムステップ(Houdiniが停止してシミュレーションの状態を再計算する時間の間隔)でシミュレーションを計算します。通常はフレームタイム(Houdiniが各フレームを表示する時間の長さ。例:24FPSなら1/24秒)を使いますが、必須ではありません。長いタイムステップはHoudiniではシミュレーションを走らせるのが楽になりますが、正確性に欠けます。 短いタイムステップは計算に時間がかかりますが、より正確な結果が出ます。
ダイナミクスのタイムステップを設定するには、DOP Networkオブジェクトのパラメータを開、 Simulation タブから Time Step パラメータを設定します。
ダイナミックネットワークの個々のソルバノードでは、 デフォルトのタイムステップを細かくする Substeps の数値を制御することができます。タイムステップを変更すると全体のシミュレーションの それぞれの計算の精度が細かくなってしまう のに対して、これを使うと、特定のシミュレーションにのみ計算精度を上げることができます。
ソルバで Substeps を制御するには、ソルバの Minimum Substeps と Maximum Substeps のパラメータを設定します。 Minimum Substeps の値を大きくすれば、ソルバは各タイムステップをより細かい計算ステップにします。 Maximum Substeps を制限することで、シミュレーションを最終的に妥当な計算時間に落ち着かせることができます。
Tip
Global Animation Optionsの Integer Frame Values を無効にし、 Step にサブステップ値を設定すれば、矢印キーを使用してサブステップ間を移動させることができます。
オブジェクトとシミュレーションネットワークはデータを与え合います ¶
球を作成してリジッドボディにした時のダイナミクスセットアップでは、ダイナミクスネットワークは、ジオメトリネットワークから球のジオメトリをインポート(ダイナミクスネットワークの上部にあるRBD Object DOPノードにインポート)して、そのジオメトリの動きをシミュレーションします。
元の球のジオメトリオブジェクトのネットワークは、シミュレーションから動きをインポートし、(ジオメトリネットワークの下部にあるDOP Import SOP内の) オブジェクトに戻します 。
つまり、ダイナミクスネットワークでジオメトリの位置などが変更された後でも、レンダリングするものは、元のオブジェクトです。AutoDopNetwork
オブジェクトは、デフォルトでは青いディスプレイフラグがオフになっています。つまりレンダリングされません。
これは、単にMantraが実際にレンダーオブジェクトに対してセットアップするからです。つまり、シミュレーションの動きをオブジェクトにインポートことで、オブジェクトが持っているレンダリングコントロールすべてが使えるようになっているのです。技術的に オブジェクト レベルで直接ダイナミックネットワークをレンダリングすることはできますが、通常は、そのジオメトリには、 レンダリングしたくないガイドとユーザインターフェースジオメトリ が含まれています。
Note
Pyro FXツールのようなシミュレーションツールでは、シミュレーション結果をソースオブジェクトにインポートして戻すようなことをせずに、新しいオブジェクトを作成して、シミュレーションの結果をレンダリング用に保持します。例えば、Sparse Billowy Smokeシェルフツールは、ソースジオメトリから煙を生成します。このツールは、 オブジェクト レベルで新しくbillowy_smoke
オブジェクトを作成して、シミュレーションの結果をインポートします。
Houdiniダイナミクスはキログラム、メートル、秒の単位を使います ¶
ソルバは現実の世界の物理現象をシミュレーションするので、シーンの数値を現実の世界の単位に合わせる必要があります。Houdiniのダイナミクスシステムの開発者は基本となる SI 単位を使うことに決めました。つまり、1Houdiniユニット単位は、1メートルに相当し、重さは常にキログラム、時間は常に秒で指定します。他の単位は常にメートル、キログラム、秒から派生しています(例えば、密度は、kg/m3で指定します)。