Houdini 20.0 ダイナミクス

Houdiniのダイナミクスを理解する

On this page

Note

このページの情報は一部古い/不完全であり、現在改訂中です。

概要

シミュレーションネットワーク内に入らなくても、シェルフツールを使えば、非常に便利で複雑なシミュレーションを作成することができます。しかし、シミュレーションの挙動をカスタマイズしたり、シミュレーションをより高速に実行させたり、新しい挙動を作成したいのであれば、Houdiniのダイナミクスシステムがどのように動作しているのか理解する必要があります。

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

シミュレーションは、 オブジェクトデータ で構成されています。オブジェクトは単なるデータの保存場所にすぎません。シーン内でRBDボールなどのオブジェクトを見ると、オブジェクトにはGeometryデータが追加されているので、通常通り、Houdiはビューアとレンダーでそれを描画します。

オブジェクトに追加するデータは、ある意味では、任意です。つまり、データはほとんど何でも構いません。データの名前やタイプには制限がありません。しかし、ある名前とデータタイプのみが ソルバ では意味を持ちます。

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

シェルフからシミュレーションオブジェクトを作成すると、HoudiniはRBDオブジェクトのようなハイレベルなオブジェクトを作成します。RBDオブジェクトノードの中に入れば、適切なデータ(RBDソルバがオブジェクトのシミュレーションをするのに必要なデータ)を持つEmptyオブジェクトがあることを確認することができます。

ハイレベルなRBDオブジェクト。 RBDオブジェクトの内部は、RBD Configure Objectノードを持つEmptyオブジェクトです。 RBD Configure DOPオブジェクトノードの内部は、たくさんのデータが接続されています。

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

ソルバは、知っているデータを使い、知らないデータを無視します。つまり、他のソルバで役に立つデータ(例えばスカラーデータ)や任意の名前のデータをRBDオブジェクトに追加することができます。RBDソルバは幸いにも、そのデータを無視します。

Geometry Spreadsheet

Geometry Spreadsheetはシミュレーションの基本となるオブジェクトとデータを表示するウィンドウです。タブ内に新しいGeometry Spreadsheet Viewペインを作成することができます。

左側のツリーは、シーン内のオブジェクトとリレーションシップなどのカテゴリを表示します。各オブジェクトに追加したデータは階層として表示します。右側では、左側で選択したデータの フィールド とその値を表示します。

このペインは、シミュレーションの構造を調べるのに非常に役に立ちます。現行フレームの現行ディスプレイノードで追加されているデータ、データパケットの名前と固有ID、さらにデータを構成している値を確認することができます。

Tip

Geometry Spreadsheetはシミュレーションを再生している時に動的に更新します。これはアトリビュートデータが時間軸でどのように変化しているのか確認したい時に非常に役に立ちますが、シミュレーションの再生が遅くなります。シミュレーションをよりスムーズに再生したい時は、ツリーを“折り畳み”ます。

ダイナミクスネットワークのGeometry Spreadsheetには、リレーションシップを可視化するためのAffector Matrixもあります。

データ名とデータ共有

データ名

各オブジェクトとデータには、 データ名 があります。ソルバはオブジェクトのデータを 名前 で探します。例えば、RBDソルバは、オブジェクトに対してForcesという名前のデータフォルダを探し、その中にあるフォースデータを使ってオブジェクトの位置を変更します。

ノードはデータを名前で追加するので、もし同じタイプのノードを複数使っていて(例えば、Fanフォースを2つ使っている)、どちらもForces/Fanとしてデータを追加していれば、片方のノードが他のノードのデータを上書きしてしまいます。そこで、Houdiniでは Unique Data Name オプションが用意されていて、データ名になにかしらのテキストを付け加えることでデータ名を固有にすることができます。

例えば、次のネットワークを例に説明します:

2つのFanフォースノードには Unique Data Name が有効な限り、RBDオブジェクトにはForces/Fan_fan1Forces/Fan_fan2といった別々のフォースデータが追加されます。ソルバはForcesフォルダのフォースを使うのでうまく機能します。

もし、同じ名前のノードで新しい方のノードが古い方のノードのデータを上書きしたいのであれば、 Unique Data Name をオフにすればいいでしょう。この場合では、古いノードと新しいノードの活動化をアニメーションする場合に役に立ちます。例えば、別々の2つのFanフォースノードの設定/位置を切り替えるときです。ノードは左から右、上から下に評価されます。同じデータ名を使って、あるノードを他のノードに上書きする方法をより詳細に制御したいなら、“set”ポップアップメニュー(以下参照)を使うこともできます。

データと設定する時期

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

Set Initial

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

Set Always

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

Set Never

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

Use Default

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

データの共有

  • 各データに対して、Houdiniはオブジェクト毎にデータのコピーを新しく追加、または、オブジェクト間に同じデータを 共有 することができます。

  • タイムステップ毎に、Houdiniはシミュレーション内のオブジェクトすべてのコピーを新しく作成します。

  • 各データに対して、Houdiniはタイムステップ毎にデータのコピーを新しく作成、または 、タイムステップにわたって同じデータを共有することができます。

Data Sharing オプションはオブジェクト間で、そしてタイムステップにわたってデータを共有することができます。

Do Not Share Data

Houdiniはオブジェクト間でデータを共有しません。そして、各タイムステップ毎にデータのコピーを新しく作成します。

Share Data In One Timestep

各タイムステップで、同じ名前のデータをすべてのオブジェクトで共有します。しかし、タイムステップ毎にデータのコピーが新しく作られます。

データの値がオブジェクトに追加されている情報に 依存していなければ 、このオプションを使ってください。

Share Data Across All Time

同じ名前のデータは、すべてのオブジェクトにすべて時間ステップにわたって共有されます。

データの値がオブジェクトに追加されている情報、または時間(つまり、時間がオブジェクトすべてと一致し、シミュレーションの全体の長さが一定)に 依存していなければ 、このオプションを使ってください。例えば、重力は通常であればどんな時でも同じなので共有できます。

デフォルトは、 Do Not Share Data です。なぜなら、ほとんど予想通りの結果が得られるからです。しかし、安全にオブジェクト間や全体の時間にわたってデータを共有できることがわかっているなら、共有オプションによってシミュレーションに費やされるメモリを減らすことができます。特にデータが共有可能で、タイムステップ毎に何万ものオブジェクトにデータをコピーするような場合は、飛躍的にメモリ使用量を減らすことができます。

固有ID、オブジェクトID、オブジェクト名

各オブジェクトとデータアイテムには 普遍的に固有な IDがあります。この128ビットの数字がどの時間、どのマシン、どのシミュレーションにおいても固有です。この値を使うことで、いつデータパケットが共有され、再作成されているのかタイムステップ毎に把握することができます。固有IDはGeometry Spreadsheet Viewでオブジェクトとデータアイテムのフィールドとして表示されます。

各オブジェクトには、 オブジェクトID があります。これは シミュレーション でオブジェクトを個別に識別する単なる整数です。普遍的な固有IDとは違い、別々のシミュレーションネットワーク、コンピュータ、シミュレーションの実行などにわたって 固有というわけではありません

各オブジェクトには、 オブジェクト名 もあります。オブジェクト名は本質的に便宜的なものです。名前を設定しておけばオブジェクトIDの番号よりも覚えやすく認識しやすいです。オブジェクト名は 固有ではありません 。それは同じシミューレション内においてもそうです。複数のオブジェクトが同じ名前を持つことができます(これは、ある状況では便利な場合があります)。

オブジェクト作成ノード(例えば、RBD ObjectまたはEmpty Object)では、 Object Name パラメータが作成するオブジェクトの名前を制御します。もし、一度に複数のオブジェクトを作成するために Number of Objects パラメータを使うなら、$OBJローカル変数を利用してオブジェクトの名前にオブジェクト番号を追加することができます。例えば、 Object Namebrick$OBJにして Number of Objects3に設定すると、Houdiniはbrick0brick1brick2の名前のオブジェクトを作成します。

Geometry Spreadsheetでは、通常は名前でオブジェクトを表示しますが、代わりにオブジェクトIDの表示に切り替えることもできます。

単位

測定 単位
Mass(質量) kg
Distance(距離) m (1 Houdini unit = 1 m)
Velocity(速度) m/s
Angular Velocity(角速度) degree/s
Density(密度) kg/m3
Force(力) N (ニュートン)

Note

ダイナミクスエンジンは、標準のSI単位を使います。その理由は、Houdiniが基本単位としてメートル(m)、キログラム(kg)を使って、デフォルトで 大きくて重いオブジェクト の表現を想定しているからです。

ダイナミクス

ダイナミクスの学習

衝突オブジェクト

シミュレーションタイプ

次のステップ