[Houdini]HQUEUEを使って分散シミュレーションをかける方法
2014/3/10
Tag: distribute,Houdini,hqueure,simulation,分散シミュレーション
みなさん、こんにちは。私はプラシャントと言います。私は、インドからやってきました。
この記事が私が書くDF TALKの最初の記事となります。
記事に入る前に簡単ではございますが、私の自己紹介をしたいと思います。
私のCGキャリアのスタートは、9年前の2005年からになります。
デジタル・フロンティアに入社する前に、私はインドのバンガローにあるドリームワークス インディアに在籍しておりました。
約4年間テクニカルディレクターとして働いていました。
ドリームワークス在籍時に携わった作品は、
Madagascar 3: Europe’s Most Wanted (2012)
Puss in Boots (2011)
Scared Shrekless (2010)
Merry Madagascar (2009)
Dragons Riders of Berk(Television)などになります。
ドリームワークスに入社する前は、プラナスタジオというところでFXTDとして働いていました。
私は、HoudiniやMayaを使って、様々な自然現象をCGの中で模倣し表現することや、そのアイデアを見つけツール等に実装したり、問題解決に興味があります。
その中でも、特に関心が高いのが流体やダイナミクス、パーティクルシミュレーションなどを手続き型の手段を使って行う研究開発です。
今回の記事では、HoudiniでHQUEUEを使用した分散シミュレーションをどの様に行うかを解説していきたいと思います。
HQUEUEとは、SideEffects社が無料で提供している分散シミュレーションツールです。
詳しくは下記のリンクに記載されていますのでご確認ください。
http://www.sidefx.com/docs/hqueue12.0/help/
今回私が試した方法とは違った形が他にもたくさんあるかもしれませんが、今回の記事が少しでも皆さんのお役に立つことを望んでいます。
http://www.sidefx.com/docs/hqueue12.0/help/installation.html
分散Simulation
Houdiniではシミュレーションを分散する方法が主に二つあります。
① 1フレーム・1マシーンでの分散
② 1フレームを複数のマシーンで分散
②は、「スライシング」という方法で、エフェクトをスライスに分け、各スライスを別のマシーンでシミュレーションを行います。
スライス分けする方法は二通りあります。
1. Grid Based Simulationは、Volumeを同じサイズ(体積)のSub Volumeにスライスしたものを分散します
2. Particle Based Simulation(流体パーティクル),クロス、ワイヤーシミュレーションはカッティングプレーンを使って手動でスライスし分散します
他にスモークとPyroのシミュレーションを行うためのClustered fluid Simulationという方法があります。
Clusteringは巨大なシーンやバラバラになっているスモークまたはPyroシミュレーションを複数の流体に仕切り分けることができます。
この方法は効果的に体積を馴染ませることができる他に、複数のマシンに分散させることができます。
スライスの設定方法
流体パーティクルシミュレーションの手順
1. AutoDopNetworkの中にあるFlip-fluidオブジェクトを選択し、Particle Fluidシェルフの中から下図のツールをクリックします。
これらによって流体パーティクルシミュレーションを分割します。
プレーンを使用したスライスを行う場合には、AutoDopNetworkの中にある、flipfluidobjectの後にslicePlaneが追加されます。
ノードネットワークは下の図を参考にしてください。
2. 分割が出来たら、次の段階はどちらの方法で計算を分散させるかを選択します。
Particle FluidシェルフにあるDistribute Particle Fluidツールを選択すると分散する流体パーティクルまた流体の選択が表示されます。
3. Selecting Distribution Methodウィンドウが表示され、ディストリビューション方法の選択をきかれます。
パーテーション無しを選択すると1つのマシンで全体のシミュレーションが行われます。
スライスすると流体を仕分けられます。分割のセットアップが終わったらSliceボタンを選択してください。
4. ステップ3で下図で四角く囲んだノードがAutoDopNetworkの中に追加されました。
5. ステップ3で追加されたdistribute_flipfluidobjectノードは次の様になります。
6. シミュレーションをHQueueでレンダリングするため、ステップ3で追加されたdistributedsim HQueue シミュレーションレンダーノード インアウトネットワークを設定します。
distributesimノードを選択し、パラメータペインに移動します。Job Nameの入力欄にジョブの名前を入力します。
output driverの欄はデフォルト値のままで構いません。
HQueue Serverの欄には、あなたの環境のHQueueサーバーの情報を入力します。
もしも$HQROOTの環境変数がHoudiniのインストールパスと一致しない場合にはTarget HFSを変更します。
次にあなたがシミュレーションしたいシーンファイル選択します。
あなたは、下のドロップダウンメニューの中から3つのオプションの内以下のいずれかを選択する事が出来ます。
・現在のHIPファイルを使用する
・対象のHIPファイルを選択する
・プロジェクトファイルを共有領域にコピーした後で計算する
7. 下の図で示した通りに私は値を変更しました。私は現在のHIPファイルをシミュレーションする代わりに、対象となる別のファイルを使用しています。
また、私はTarget HFSの値も絶対パスに変更しました。
8. Obj Networkの中でシミュレーションのフレーム枠をdistribute_flipfluidobject Slicegeometryノードで変更します。
9. distributedsimノードにあるレンダーボタンを使い、レンダリングを起動させます。すると下記が表示されます。
10. スライスされたシミュレーションが複数のマシンに振り分けられます。
11. ステップ3が終わった後に、あなたのシーンファイルの中でセットアップを完了しなければいけない事を覚えておいてください。
シミュレーションを設定後、プレイバックするとシーンビューは一つのスライスしか表示しません。
12. ディストリビューションの後にスライスしないでシミュレーションを確認したい場合(シミュレーションをファーム上で行わない場合)は、Enable Distribution in DISTRIBUTE_flipfluidobject_CONTROLS と Bypass distribute_flipfluidobjectをオフにしてください。
13. 分散シミュレーションがHQueueで終わった後でdistribute_flipfluidobjectにあるloadslicesはスライスされたシミュレーションをHQueueファームマシンに表示します。
Distributed Cluster Simulation設定方法
1. Pyro FXシェルフの中にあるPyro Clusterまた、はSmoke Clusterシミュレーションを作成します。
下図では私が分散シミュレーションをお見せする為に使用した炎のシミュレーションを示しています。
2. クラスター化した炎のシミュレーションを分散するにはまず、ContainerツールシェルフからDistributeツールを選択します。下図を参照してください。
3. このツールは、コンテナの分散方法を尋ねてきますので、AutoDopNetworkの中にあるFluid Containerを選択してください。
その後、分散方法についても尋ねてきます。
表示されたダイアログボックスではClusteringがSlicingかどちらを選択するか尋ねてきます。
私たちはクラスター化したFluid objectを分散したいのでClusteringを選択します。
4. このツールはout Contextの中にHQueueシミュレーションノードを作成します。
スライス化されたシミュレーションをセットアップする時にも同じノードが作られます。全てのパラメータも同様です。
5. 下図を参考に好きなジョブの名前、HQueue Simulationノードの中のHQueueサーバの名前などを入力します。
Target HFSやTarget HIPは必ずしも変更する必要はありません。
6. 下記の2つのノードもDistribute ツールによって、Import Pyro Build Geometry Object内に作成されます。これは、Clustered シミュレーションの保存や共有の場所に起動させるためです。
以上で、私からの投稿を終わりにします。
最後までお付き合い頂きありがとうございました。
それでは、またお会いしましょう。
※免責事項※
本記事内で公開している全ての手法・コードの有用性、安全性について、当方は一切の保証を与えるものではありません。
これらのコードを使用したことによって引き起こる直接的、間接的な損害に対し、当方は一切責任を負うものではありません。
自己責任でご使用ください
コメント
コメントフォーム