Houdini 17.0 ダイナミクス

ダイナミクスの中間レベル トップ10

On this page

オブジェクト、データ、ソルバ

シミュレーションは、 オブジェクトデータ で構成されています。オブジェクトは単にデータの格納庫にすぎません。RBDボールのようなオブジェクトを見ると、オブジェクトにGeometryデータが入っていることがわかります。お約束事でHoudiniはジオメトリをビューア、レンダーに描画します。

オブジェクトに追加されたデータは、ある意味、任意です。つまり、データはどんなものにも対応することができます。どのようにデータが名付けられていても、なにを拘束していても制約はありません。しかし、特定の名前とデータのタイプに限っては、 ソルバ には意味を持っています。

ソルバはシミュレーションするオブジェクト(RBDオブジェクト、ワイヤー、布、流体など)がどのような動きをするのか計算します。ソルバはオブジェクトに追加されているデータ(またはオブジェクトそのもの)を見て、それによってシミュレーションを実行します。

シェルフからシミュレーションオブジェクトを作成すると、HoudiniはRBD Objectのようなハイレベルのオブジェクトを作成します。RBDオブジェクトの中に入ると、データが追加されたEmpty Objectがあることを確認することができます。データは、RBDソルバがオブジェクトをシミュレーションするのに必要です。

ハイレベルRBDオブジェクト 内側にはEmpty ObjectとRBD Configure Objectノードが接続されています。 RBD Configure Objectノードの中にはたくさんのデータが接続されています。

(たくさんのダイナミクスノードがこのようにデジタルアセットとして実装されていて、ソルバが解釈できるように末端にあるソルバ用のオブジェクトにデータを接続したネットワークをハイレベルノードがカプセル化しています。)

ソルバは知っているデータを使い、その他のデータは無視します。つまり、他のソルバ(例えば、スカラーデータ)、任意で名付けたデータ、RBDオブジェクトに使えるデータを接続することができ、そしてRBDソルバはそれを問題なく無視します。

ソルバはオブジェクトとデータを受け取って修正します

ソルバはシミュレーションするオブジェクト(RBDオブジェクト、ワイヤー、布、流体など)がどのような動きをするのか計算します。ソルバはオブジェクトに追加されているデータ(またはオブジェクトそのもの)を見て、それによってシミュレーションを実行します。例えば、RBDソルバは、オブジェクトに追加された密度、力、重力のような物理データを見て、オブジェクトがどこへ動くのか決めます(ポジションデータを更新しながら)。オブジェクトにデータが接続されていなければ、シミュレーションを実行しても何も起きません。

(これは、少し誤解があります。Positionのようなデータフィールドにエクスプレッションを使えば、ソルバがなくてもシミュレーションするオブジェクトを動かすことができます。しかし、あまりおもしろくありません。)

オブジェクトを制御するソルバがオブジェクトに他のデータとして接続されます。異なるタイプのシミュレーションオブジェクトはお互い影響を与え合うことができます。(例えば、煙を出すRBDオブジェクト)。オブジェクトを複数のソルバで制御することはできません。しかし、複数のソルバを使うソルバ(例えば、Blend Solver)をオブジェクトに接続することができます。詳細は、以下のソルバの結合を参照してください。

Note

シェルフツールからシミュレーションオブジェクトを作成すると、ソルバが接続されます。ネットワークで作業していた場合は、自分自身でソルバを作成してオブジェクトに接続する必要があります。

Houdiniは2つのステップでダイナミクスシミュレーションをクッキングします:

  1. オブジェクトとデータの接続を構築してネットワークを処理します。

  2. 処理されたデータツリー上でソルバを起動します。

緑色と灰色の接続

ダイナミクスノードには2タイプの入力があります:

  • 灰色 の入力は"オブジェクトとデータ"です。データをオブジェクトに追加することで、接続が通ったり、オブジェクトを修正します。

  • 緑色 の入力は"データ"です。これらはApply Dataノードを使ってオブジェクトに最終的に接続されるデータを意味します。

データを接続するノードは、通常では灰色の入力(データを接続するオブジェクト)か緑色の入力(データパケットが積もった蓄積)のいずれかを受け入れます。ノードに接続する入力のタイプ(灰色、緑色)は、出力を同じタイプに変更します。

例えば、単純なネットワークは、 オブジェクト作成ノードフォースソルバ で構成されます。

これは、いわゆる"インライン"または"オブジェクト中心"スタイルで、RBDオブジェクトはGravityノードを通します。そしてGravityノードはForceデータをRBDオブジェクトに追加します。そしてRBDソルバはSolverデータをRBDオブジェクトに追加します。これは、以下のネットワークと同じことです:

この"データ中心"レイアウトでは、GravityとRBD Soverのノードから出力される純粋なForceSolverデータは、Applay Dataノードを使ってRBDオブジェクトに接続します。

データノードはネットワーク内で それよりも上流にあるノードすべて にデータを適用します。

上のネットワークでは、GravityとRBD SolverノードはForceSolverデータを3つのRBDオブジェクトすべてに接続しています。なぜなら、ネットワークでオブジェクトはGravityとSolverノードより上にあるからです。Mergeノードでデータとオブジェクトを繋げる複数の線を1本にします。各オブジェクトは1つのソルバにしか接続できないことを知っておくことが特に重要です。

オブジェクトとデータの参照の方法

詳細は、DOPの入力と出力を参照してください。

シミュレーションを仕上げるときは、ジオメトリをディスクにキャッシュ化します

Set Initial vs. Set Always

データを接続したダイナミクスノードでは、各フィールドにポップアップメニューがあり、右側の値がいつ入力オブジェクトに設定されるのか制御します。

デフォルトは、"Set Initial"で、これは、シミュレーションの最初のフレームのデータを設定/インポートします。

フレームに応じて(例えば、時間依存エクスプレッションを使う変形ジオメトリや他のネットワークから参照した値)インポートするものが変化するDOPの外から値やジオメトリをインポートしているのであれば、アップデートされる値を"Set Always"に変更します。

"Set Always"はとても遅いです。なぜなら、常にデータツリーを書き換えなければならないからです。そのため、本当に更新する必要がない限りは使わないほうがいいです。できるだけ少ないパラメータにだけ使ってください。

Set Initial

シミュレーションの最初のフレーム で値を設定し、その時点からの値を使ってシミュレーションをします。

Set Always

フレーム毎に この値を更新します。値をフレーム毎に一定にしたいなら、この設定を使ってください。または、値がアニメーションするなら、これはシミュレーションで制御されるべきではありません。

Set Never

この値を設定/変更しません。それは最初のフレームでもそうです。

Use Default

このノードの Default Operation ポップアップメニューから設定を使います。これは一度にたくさんのパラメータの方針を設定/変更するのに役に立ちます。"デフォルト"は、"Set Initial"です。

計算順と同時計算について

Houdiniは、計算するオブジェクトの順番をリレーションシップに基づいてシーンのオブジェクトを整理します。一方向のリレーションシップでは、影響を受けるオブジェクトよりも影響を与えるものが先に計算されます。双方向のリレーションシップが存在する箇所や、リレーションシップの階層グループがループを作成している箇所では、そのグループのすべてのリレーションシップは 同時に 計算されなければなりません。

同時計算は、実際には見せかけにすぎません。なぜなら、コンピュータは順番通りに処理をするものなので同時にイベントを処理することは実際にはできません。つまり、Houdiniは反復処理で細かい近似処理を行おうとします:

  1. 順番通りに力をオブジェクトに加えます(ネットワークで左から右、上から下)。

  2. 衝突を探します。

  3. 何か衝突していれば、衝突の力をオブジェクトに反映します。静的なオブジェクトに関しては、このフィードバックステップは最適化されています。

  4. 衝突がなくなるまで、または、 Max Feedback Loops に達するまで繰り返します。

    シミュレーションを含んだDOP Networkの Max Feedback Loops パラメータは、Houdiniが実行する衝突フィードバックループの数を制限します。これによって、シミュレーションが高速化し、無限ループを防止することができます。

RBDシミュレーションを計算する一番良い順番は、先に重いオブジェクトを評価し、それから軽いオブジェクトを評価します。手動でノードを接続するとき、Mergeノードでは、重いオブジェクトを軽いオブジェクトの左側に接続するようにしてください。自動的にネットワークが作成される時は、Houdiniはパーティクル(パーティクルソルバで計算される)が軽いものだと決め込んでしまうので、他のオブジェクトは右側に接続されます。もし重いパーティクルをシミュレーションしていれば、接続の順番を変更した方がよいでしょう。

ユーティリティソルバ

Houdiniにはユーティリティソルバがあり、これを使うとより高度なネットワークをセットアップすることができます。

  • Multiple Solverは同じオブジェクトに対して複数のソルバを起動します。

  • Blend Solverは複数のソルバを起動し、それらの効果を各オブジェクトのブレンド係数データでブレンドします。Blend Factorノードを使ってブレンド係数データを各オブジェクトに接続します。

  • Switch Solverはオブジェクトを各オブジェクトのswitchデータに基づいて別のソルバに切り替えます。Switch Valueノードを使ってswitchデータを各オブジェクトに接続します。

    Switch SolverはSwitchノードと似ていますが、Switchノードはデータ接続の切り替え(どのデータをどのオブジェクトに接続するのか)をするのに対して、Switch SolverはSolverの切り替え(オブジェクトすべてに接続されたデータすべて)をします。

  • Script Solverは、スクリプトを実行して、データを変更したり、ポジションを更新したりすることができます。いくつかのHScript、エクスプレッション、HOMクラスでは、スクリプトを書くことでダイナミクスシミュレーションを修正することができます。

  • Copy Data Solver

ダイナミクス

ダイナミクスの学習

衝突オブジェクト

シミュレーションタイプ

Vellum

非DOPシミュレーション

次のステップ