Smokeのセットアップを解説します。
TEXT_秋元純一 / Junichi Akimoto(トランジスタ・スタジオ/ディレクター)
日本でも指折りのHoudini アーティスト。
手がけてきた作品は数々の賞を受賞している。
代表作に、HIDETAKE TAKAYAMA『Express feat. Silla(mum)』など。
www.transistorstudio.co.jp
blog.junichiakimoto.com
EDIT_小村仁美 / Hitomi Komura(CGWORLD)
Houdini 17で新しくなったSmoke
今回は、Houdini 17で新しくなったSmokeへのアプローチを解説していきます。DOP自体の見た目はこれまでとさほど変わらないものの、SOPからDOPへの橋渡しの方法が大きく変わっており、SOPの時点での扱い方にはかなり変化があります。これまではVolumeを使用したアプローチだったものがVDBへと置き換わることで、高精細なシミュレーションの際にその威力を発揮することができるようになりました。
これまでは、SOPからDOPへ渡すためのソースを作成する箇所が大きなボトルネックとなっていました。それがVDBを代用することによって解消され、速度も大きく向上する結果となっています。
事実、Houdiniにおけるシミュレーションは、SOPにおけるセットアップとSOPによる後処理が非常に重要で、そこが他のソフトウェアとの差となっていることを理解しなくてはいけません。DOPのシミュレーション速度や調整のしやすさはあくまでもカスタマイズなどにもよりますが、根本的なボトルネックの解消には、VDBへの対応が欠かせない要因となっています。また、Pointを使用したセットアップのアプローチによって、格段にソーシングのしやすさが向上しています。今回はそういった部分を含めて解説できればと思います。
今回のHoudiniプロジェクトデータはこちら01 SOP Setup
Sourceのセットアップを解説します。
はじめに、SOPでソースの準備をします。これまでは1つのHDAで簡単にセットアップができるようになっており、全ての準備がそれで完結できましたが、Houdini 17からは最低でも2つのノードからセットアップする必要があります。ただ、これは、用意されているHDAを使用する前提で、あくまでもベーシックなアプローチと考えてください。
まず、ソースとなるジオメトリにPyro Source SOP【A】を作成します。このノードによって、ジオメトリが最低限のAttributeをもったPointへ変換されます【1】。InitializeによってSource Smoke【B】へセッティングすると、Smoke用にDensityとTemperatureが作成されます【C】。Particle Separation【D】はScatterされるPointの幅だと考えてください。概ね、SmokeのContainerのDivision程度がディテール保持の最低ラインになってきます。ただ、これもシチュエーションによって異なるので、SourceとSimulationを分けて考えても問題はありません。Mode【E】はSurface Scatterにすると、外周部分のみで、Volume Scatterにすれば、内部にもPointが作られます。Keep InputはインプットしたPointをそのまま使用します。
次に、Attributeに対して、Attribute Noise SOP【F】を使ってNoiseをかけます。これもシチュエーションによって必要かどうか判断してください。今回は、DensityとTemperature【G】に対してNoiseをかけています。このノードを使わず、VOPやWrangleなどを使ってAttributeの値を調整しても同じことですので、最終的に値がどのようになってほしいかによって選択してください。
これらの準備が完了したら、最後にVolume Rasterize Attributes SOP【H】を使って、PointをVDBに変換します。このノードを使うことで、最終的に使用したいVDBへ簡単に変換することができます。Voxel Size【I】はPyro Source SOPのParticle Separationが最低ラインになるようにするとディテールや形状を維持しやすいです。AttributeをPointレベルで調整することが設計の根幹にありますので、一見面倒なアプローチに見えますが、実はコントロール性は格段にアップしています。
これまでも同じようなことはできましたが、今回のバージョンアップでVDBに置き換わり、さらにコントロールしやすい設計になっています。例えば、Noiseがない状態のDensity【2】とAttributeをコントロールした際のDensity【3】のちがいをインタラクティブに確認することも可能です。
Pointを制御することで調整が簡単になっていますので、その効果を試したいと思います。Point Velocity SOP【J】を使って、簡単にPointに対してVelocityを追加したいと思います。こうすることで、PointにVelocityのAttributeが追加されました【4】。さらに、Volume Rasterize Attribute SOP【K】のAttributeに"v"を追加すれば【L】、自動的にVectorのVDBが作成されます。
また、Densityの値をWrangle【M】などを使って徐々に薄くするといったようなことも、Point Attributeを調整するだけで可能になるため、よりSOPライクな制御ができるようになっています。
02 DOP Setup
Simulationのセットアップを解説します。
DOPでのセットアップは、従来のアプローチをある程度踏襲していますが、今回は新たにVolume Source DOP【A】が加わりました。Houdini 16.5まではSource Volume DOPというものがありましたが、名前だけでなくパラメータが大きく変わり、VolumeとFieldのやり取りが非常にわかりやすくなっています。
SOPで作成したSourceのVolumeを指定します【B】。Initializeで、どういったSimulationに使用するSourceなのかセッティングできます。今回はSource Smokeでセッティングしており【C】、Field to MatchによってDensityのFieldへ全てがマッチするようになっています【D】。また、必要になるSource Volumeを読み込み、それに対応するFieldをセットするところまでがInitializeで行われています。例えば、SOPで作成したDensityというVolumeはDensityというFieldへ対応するように設定されています【E】。この場合、Smokeに必要なtemperatureとvelがセットされています。
[[SplitPage]]
03 Additional Flow
ベースのセットアップにさらに色情報を追加してシミュレーションしたいと思います。Sourceとなるジオメトリをモデリングしておきます【A】。この時点で、VOP【B】などを使用して色情報を付加する準備をしておきます【1】。さらに、Collisionとなるジオメトリも準備します【2】。
SourceとなるジオメトリからPointを生成し【C】、それに対して色情報となるAttributeをAttribute Transfer SOP【D】を使って移しておきます【3】。今回のシチュエーションに合ったVelocity【E】をVOPを使って作成します【4】。
最後に、Volume Rasterize Attribute SOP【F】を使ってVolume化しますが、そのときにAttributeで色情報であるCdを追加することを忘れてはいけません。このように、PointのAttributeを使った制御ですので、簡単にSourceの追加要素を作り出すことができます。ひとつの例として、環境のVelocityを作ってみましょう。シミュレーションする際のContainerサイズと同等のBoxからPoint from Volume SOP【G】で点群を生成します。それに対して、VOP【H】を使ってVelocityを作成します【5】。この点群にPyro Source SOP【I】を使い、VelocityをSimulationに対応する点群に変換します。このとき、ModeはKeep Inputにしておくと、Pointをそのまま使用できます。最後に、Volume Rasterize Attribute SOP【J】でvだけをVolume化します。
Cdを適用してシミュレーションするために、まず、Volume Source DOP【K】にFieldを追加します。Field RankはVector【L】で、Source VolumeとTarget FieldにそれぞれCdをセットします【M】。OperationをBlend【N】にすると、Weightが設定できます。
そして、色情報を視覚的に表示するために、Smoke Object DOP【O】のVisualizationからMulti FieldのDiffuse FieldをCdにします【P】。これで視覚的に表示を確認することができます【6】。
さらに、環境としてのVelocityを追加します。新たにVolume Source DOP【Q】をMergeして、SOPからSourceを指定します【R】。FieldはVectorのvをvelへセットして、OperationはAddにします【S】。これで、追加となるVelocity Fieldの設定が完了です。最終的にきちんと適用されているか、Visualizationで確認します【7】。
04 Operators
主要ノードを解説します。
●Pyro Source SOP&Volume Rasterize Attributes SOP
今回使用したなかで考え方の根幹となるのが、Pyro Source SOPとVolume Rasterize Attributes SOPです。考え方として、PointをVDBへ変換するというところが重要なポイントになります。
このどちらのオペレータもHDAで構成されており、その中身は分解して確認することができます。そこまで難しいことはしていないので、プロジェクトに応じてカスタマイズできるよう準備はしておきましょう。あくまでも基本的なセットアップを目的としていますので、イレギュラーな対応をするためには、まずしくみやながれを理解していることが重要です。
-
「Houdini COOKBOOK +ACADEMY」
Houdiniを基礎から楽しく学ぶオンライン講座
公開日程:毎週金曜日公開(予定)
価格:1,200円(税込)
※第一回「Houdiniの基本概念とインターフェイス」は無料公開中
受講対象:Houdiniをこれから学びたい方、Houdiniの勉強で挫折した方など
cgworld.jp/special/houdinicookbookacademy