On this page |
概要
Distributeツールはシミュレーションするオブジェクトのネットワークをセットアップして、HQueueによって複数のマシンで平行して計算ができるようにします。
パーティクル流体、布、ワイヤー、単一グリッドベースの流体コンテナを スライス によって分散します。これによって、エフェクトが起きる空間がスライスに区分けされて、各 スライス が別々のマシンで計算されます。グリッドベースの流体コンテナは、面単位で特定の数だけ分割してスライスします。パーティクル流体、布、ワイヤーのシミュレーションには境界がないので、手動でスライス(以下参照)しなければなりません。
スライスしたシミュレーションにおいては、ネットワークのノードはスライス間の境界を越えてお互い情報を交換し合います。
クラスタ化した流体シミュレーションでは、各クラスタコンテナはそれぞれ独立して計算します。それは他のクラスタコンテナと重複してる場合も同じです。しかし煙とPyroのシミュレーションにおいては、その出力ボリュームは視覚的には一緒に混ざるので許容範囲です。
Note
分散シミュレーションはMacに対応していません。
スライスしたシミュレーションの分散をセットアップ
流体空間をスライス
パーティクル流体を含んだ空間をスライスすると、HQueueファーム上の別のマシンに流体の別のパートをシミュレーションさせることができます。スライスしないでパーティクル流体をファームに送ることもできますが、平行処理ではなく、1台のマシンで単にシミュレーションしているだけにすぎません。
Particle Fluids タブには、パーティクル流体シミュレーションをスライスして分散できるように別の領域に分けるツールが2つあります:
-
Slice along lineツール。これは、スペースをスライスする一番単純な方法で、特定の方向に沿って特定の数だけ空間を等分することでスライスを作成します。
-
Sliceツール。これは、階層状の平面を交差させて空間をスライスするので、任意の複雑な方法で分割することができます。
各領域にはHQueueクライアントネットワーク上の個々のマシンを割り当てます。つまり、持っているマシンと同じ数の領域をセットアップします。例えば、Slice along lineツールで Number of regions を8
に設定すれば、HQueueネットワークには8台のマシンが必要となります。
How to
-
Particle Fluids 、Cloth 、 Wire シェルフタブからDistributeツールをクリックします。
-
パーティクル流体、布、ワイヤーオブジェクトを選択してEnterを押します。
このツールは、シミュレーションを分散するために色々なネットワークにいくつかのノードを作成します:
-
/out
にdistributedsim
HQueue Simulationレンダーノードが作成されます。これはシミュレーションをHQueueに出力します。このレンダーノードは分散ジョブをHQueueサーバーに送ります。
-
/obj
にdistribute_オブジェクト名
オブジェクトが作成されます。これはHQueueクライアントで作成されたシミュレーションファイルをHoudiniに戻すオブジェクトです。 -
DOP Networkに
DISTRIBUTE_オブジェクト名_CONTROLS
Nullノードが作成されます。このノードは主に、値の代用として使います。レンダーノードは、トラッカーアドレス/ポートとスライス分割のような"control" Null DOPに値を明確に設定します。そして、ネットワークの複数のdistribution-aware DOPが、そのコントロールNullの値を参照します。
-
-
ジオメトリファイルの保存(
$HIP/geo/dist_${SLICE}_$F.bgeo.gz
)に使うデフォルトパスのパターンを変更したい場合は、シーンレベル(/obj
)に移動して、distribute_オブジェクト名
オブジェクトをダブルクリックして中に入ります。loadslices
Fileノードを選択して、 File パラメータを変更します。詳細は、ファイル名にエクスプレッションを使うを参照してください。パスは
$HIP
基準の相対パスにしたほうが良いです。
ファーム上にシミュレーションを実行しないでシミュレーションスライスを閲覧する方法
Distributeツールは、ネットワークを修正して、分散できるように準備します。それらの修正の後にシミュレーションを再生すると、ネットワークは全体のシミュレーションの内、1スライスのみしか計算しません。そして、いくつかのノードでは、HQueueピアーとの通信を試みるので、ネットワークトラフィックが発生します。
単体のマシンでシミュレーションをチェックしたいのであれば、Distributeツールで作成された"control"Null DOPのパラメータを使って、一時的にネットワークを分散処理しないように戻すことができます。
To... | Do this |
---|---|
シミュレーションを分散しないでスライスを閲覧する |
|
FLIPによるパーティクル流体の分散の使い方
Fluidタンク
タンクによるパーティクル分散を使用すると、流体を損失してしまうことがあります。 この問題を回避するには、FLIP Solverの Distributed Pressure Solve チェックボックスを有効にします。 これは、タンク内の圧力を考慮し、スライス間の繋目がより滑らかになります。
Note
このオプションは、非常に広いネットワークバンド幅を必要とし、特に大規模なタンク形式のシミュレーションで使用します。川のような流れには不要です。
クラスタ化した煙とPyroのシミュレーションの分散をセットアップ
How to
-
Pyro FX シェルフタブのSmoke ClusterやPyro Clusterツールを使って、ポイントソースからクラスタ化した煙またはPyroシミュレーションを作成します(クラスタ化を参照)。
-
Container Tools シェルフタブのDistributeツールをクリックします。
-
分散させるコンテナを選択してEnterを押します。
Smoke/Pyro Clusterツールでクラスタ化したシミュレーションを分散しているなら、その複数コンテナから1つを選択することができます。
(別の方法として、ネットワークエディタからDOPオブジェクトを選択してビューポートでEnterを押します。)
-
オブジェクトに複数のコンテナ(例えば、クラスタ化で作成)があれば、ダイアログボックスが表示されて スライス または クラスタ化 をしてシミュレーションを分散したいのか聞いてきます。
(シミュレーションが大規模で、1個のクラスタコンテナでさえも1台のマシンで実行するには重すぎるのであれば、 Slicing をクリックして各クラスタコンテナに対して別々にスライスを分散します。)
-
なんらかの理由でシミュレーション結果をインポートするオブジェクトが2つ以上ある場合、ダイアログボックス表示されて、どのオブジェクトを分散で使うのか聞いてきます(以下のツールがどのようにしてジオメトリネットワークを修正するのかを参照)。
-
ツールはHQueue Simulationレンダーノードを作成して選択します。そのノードの HQueue Server パラメータにHQueueサーバー名とポート名を設定します(例えば、
hq.company.com:5000
)。スライスを使っていれば、 Slice Divisions パラメータを設定することができます。デフォルトの
2, 2, 2
は、分散用にコンテナを8個の小さいボックスにスライスします。もし複雑なシミュレーションであれば、分割数を増やしてより小さいスライスにすることができます。
シーンの裏側で分散クラスタリング
あなたが分散したシミュレーションされるフィールド(例えば、import_pyro_build
)をインポートするジオメトリオブジェクトに、DistributeツールはDOP I/O nodeを追加することで、ファーム上のROP Output Driverによって生成されるクラスタフィールドをディスクに書き出すことができます。
HIPファイルがファーム上で実行(以下参照)されている時、HQueueレンダーノードは以下の事を行ないます:
-
グローバル
$CLUSTER
変数を、そのマシンで生成されるクラスタ番号に設定します。 -
Cluster Pointsノード(HQueueレンダーノードの Cluster Node パラメータで指定されたノード)で、 Cluster Filter パラメータを
$CLUSTER
変数に設定します。すると、ソースネットワークはそのクラスタ番号用のソースポイントのみ生成します。 -
ROP Output Driverを処理(HQueueレンダーノードの Output Driver パラメータで指定されたノード)します。それは、シミュレーションが現在のクラスタとフレームのジオメトリを処理して書き出します。
また、Distributeツールは、ネットワークにFile Mergeノードを作成することで、ファーム上で生成されたクラスタフィールドをインポートして、それを再統合します。このノードのディスプレイとレンダリングのフラグを設定して、あなたのマシン上のHIPファイルを見るとキャッシュ化したジオメトリファイルが使われているのがわかります。
Note
出力ジオメトリファイルのファイル名パターンはFile Mergeノードで設定し、ROP Output Driverから参照されます。パターンには、$CLUSTER
(シミュレーションするクラスタ番号)と$F
(現在のフレーム)変数を組み込まなければなりません。
ライブシミュレーションをオフ
一度HQueueネットワークがジオメトリを生成してしまうと、元のシミュレーションネットワークをクッキングするのを止めてください。なぜなら、その時点で最終結果をキャッシュ化しているからです。
以下のどれかを行なってください:
-
クッキングするのにシミュレーションを必要とするシーンレベルオブジェクトの表示をオフにします。
-
Houdiniでシミュレーションをオフにします。つまり、メインウィンドウの右下のシミュレーションメニューをクリック(または、押したまま)して、 Enable Simulation をオフにします。
-
新規で
.hip
ファイルを作成して、Fileサーフェスノードを使って、生成されたパーティクル流体ジオメトリファイルを読み込みます。
ファーム上に分散されたシミュレーションを実行
-
メインメニューから Render ▸ Edit render node ▸ distributedsim を選択します。パラメータエディタで:
-
シミュレーションしたいフレーム範囲を設定します。
-
Slice Divisions パラメータをチェックします。3つの成分の積が、パーティクル流体シミュレーションの領域の数となります(例えば、
3, 1, 1
は3つの領域でシミュレーションします)。この数字は、Distributeツールがレンダーノードを作成するときに自動的に設定されます。とはいえ、戻ってスライスの数を変更(例えば、Slice Along Lineノードの Number of regions パラメータを変更する)する場合、レンダーノードでこのパラメータを更新する必要があります。
-
HQ Server にHQueueサーバーのホスト名とポートを設定します(例えば、
render.example.com:5000
)。
-
-
パラメータエディタで、 Render をクリックするとジョブがHQueueに送信されます。
レンダーノードは、その情報をHQueueサーバーに送信します。HQueueサーバーはコマンドをクライアントマシンに送信して、
.hip
ファイルを読み込み、フレーム毎にパーティクル流体シミュレーションのスライスをシミュレーションして保存します。個々のクライアントマシンは、生成したジオメトリキャッシュファイルを共有ネットワークディレクトリに保存します。