>   >  Houdini Cook Book:Vol.97 Smoke Solver
Vol.97 Smoke Solver

Vol.97 Smoke Solver

Smoke Solverを分解して検証します。

TEXT_秋元純一 / Junichi Akimoto(トランジスタ・スタジオ/ディレクター)
日本でも指折りのHoudini アーティスト。
手がけてきた作品は数々の賞を受賞している。
代表作に、HIDETAKE TAKAYAMA『Express feat. Silla(mum)』など。
www.transistorstudio.co.jp
blog.junichiakimoto.com


EDIT_小村仁美 / Hitomi Komura(CGWORLD)

ミニマムな実装でSmokeのしくみを理解する

Smokeを使った内容が続いていますが、今回は、Smokeのしくみの根本に迫りたいと思います。HoudiniにおけるFluidのしくみは、表向きは簡単になっていますが、その内部は非常に複雑です。ただ、汎用性をもたせるためのセッティングになっていますので、実際、最低限のしくみにした際には、シンプルになっていきます。今回は、その構成のメインになっているMicro Solverを簡単に解説していきたいと思います。

Houdiniでは、通常のシミュレーションにおいてMicro Solverまでもち出すことがないように、あらかじめPyro Solverなどが用意されており、ユーザーの作業はパラメータの調整に留まるよう配慮されています。ただ、あくまでもPyroはプリセットのようなもので、プロダクションレベルではカスタマイズを前提としています。その際に必須となるのがMicro Solverです。ただ、根幹になっているしくみを知らなくては、カスタマイズのしようがありません。まずは、ベーシックなしくみを構築してその内部を探り、新たにディテールを追加するための下地を考察していきたいと思います。

今回のHoudiniプロジェクトデータはこちら

01 Source Build

Sourceのセットアップを解説します。まず、SOPでSmokeのSourceを作成します。通常の手順ではPyro Sourceなどを駆使しますが、今回は敢えてミニマムな状態で作成し、そのしくみを知りたいと思います。

はじめに、SourceになるジオメトリにScatter SOP【A】を使って、表面にPointを散布します【1】。続いて、Attribute Wrangle SOP【B】で、Pointに "pscale" 、 "density" 、 "temperature" のAttributeを作成します【2】。次に、このPointをVDB【C】に変換しますが、このときVolume Rasterize Particle SOP【D】を使います。これにより、PointがもつAttributeをVDBに変換することができます。

Pointがもっている"pscale"の値が、Pointの周りにできるVolumeの大きさになります。あらかじめVDBの分割数を決めておきます。これを、必要なAttributeの数だけくり返し、Mergeします。これで現在2つのVDBが作成されたことが確認できます【3】【4】

02 Smoke Object

Smoke Objectを作成します。Smokeをシミュレーションするためには、まずデータを入れ込んでいくための箱が必要です。その箱とはDataのことを指し、Dataという箱を収納する棚をObjectと呼びます。


まず、箱を置くために、空の棚を用意します。Empty Object DOP【A】を作成し、Object Nameにはノードの名前が入るようにします【1】

次に、データを格納するための箱を準備します。Fluidの場合、それは主にFieldを指します。Smokeのシミュレーションにおいて、ミニマムで必要なものがVelocityのFieldです。これがないことには何も動きが生まれないので、まず、Vector Field DOP【B】からVector TypeのFieldを作成します。この際、これをセッティングの元にはしません。そして、Scalar Field DOP【C】を使ってDensity Fieldを作成します。Scalarとは、1次元のデータタイプのことです。このFieldのDivision、Size、Centerを基に、Vector Fieldもサイズが一致するようにReferenceしておきます【2】

同じように、Scalar Field DOPでTemperature Field【D】も作成します。それぞれのFieldのData Nameには、対応する名前を入れておきます。これは、任意というより、決まりとして"density"【3】、"temperature"【4】、"vel"【5】と入れておきます。Velocity Fieldでは、Container(シミュレーションが行われる限定エリア)の箱を開くか閉じるかを設定できます【6】

また、これらのFieldは、Scalar Field Visualization DOP【E】やVector Field Visualization DOP【F】で可視化することができます。通常我々が目にしているDOPの中のDensityは、このDensity FIeldをUse Smoke【7】にて可視化したものです。最後に、これらのDataをEmpty ObjectにApply Data【G】して完了です。

次ページ:
03 Solver Setting

その他の連載