image2

こんにちは。クリエイティブR&Dグループ所属のsasaと申します。

セクション内では主にVFXを担当しており、現在はHoudiniというツールの技術検証・研鑽・実践を行っています。

「R&Dグループってなんぞや?」という方はコチラ↓

http://klabgames.creative.blog.jp.klab.com/archives/14399176.html

Pyro基礎編のPyroとは?

今回は表題の通りPyroを使った基礎Tipsとして炎作成のテクニックを動画チュートリアル形式でご紹介したいと思います。

Pyroが何か分からないという方もいるでしょうからまずはPyroについて説明いたします。

Pyroとは主にHoudiniでは炎や煙のシミュレーションに使う機能の事を指します。

Houdini16.5から17になった際に一部の仕様が変更になって、以前の学習リソースが「使えないわけではないが初心者のうちはチンプンカンプンでPyro学習が中々難しい。また、ルックやマテリアル設定、レンダリングまで一貫した資料が中々無い」という状況に陥りがちで現状少々学習が難しい状態になっています(自分もHoudini17になる辺りにHoudiniを本格的に始めたので仕様の違いに苦労しました)。

Introduction

Houdini基礎編のチュートリアルの後にいきなりシミュレーションのチュートリアルは少し飛躍しているかもしれないとも思いましたが、上述した理由からHoudini17.5仕様のPyroのシミュレーションからレンダリング・コンポまでの基礎Tipsを作ろうと思い今回のチュートリアルの作成に至った次第です。

注意点なのですが今回はPyroやシミュレーションで説明する事が多くHoudiniの基本的な部分からの解説だと説明量が膨大になるので、前回の記事(※下記参照)の内容位までは履修してHoudiniの基礎がある程度分かっている方向けの内容になります。

勿論動画チュートリアルですので内容を理解はしていなくても手順をなぞれば同じものはできるのですが、ご自身で思い描いたビジュアルを作るにはやはりツールやCG・シミュレーションの根本的な理解が必要になります。

とはいえ「まずは御託はいいからPyroでの炎の作り方を教えてくれ。話はそれからだ」というお気持ちも重々理解できます。ですので本チュートリアルをPyroの最初の一歩として皆様方のステップアップの足掛かりにでもして頂ければ幸いです。

※前回の記事↓

http://klabgames.creative.blog.jp.klab.com/archives/19665739.html

今回やること

image1

今回は上記画像のような炎素材を作成します。

エミッター作成からコンポジットまでの各工程を行います。基礎編なのであまり複雑にならないような構成且つ私がやりやすいと思っているフローを紹介致します。

これは前回の記事にも書きましたがHoudiniには良くも悪くもアプローチに多種多様な選択肢があるので、私のやり方を紹介することで「こういう考え方でやっている人もいる」ということを知って頂き、その視点を軸にすることで他のアプローチを比較検討しやすくなるだろうという思いがあります。

また、前回の記事同様基本的に動画チュートリアルですのでブログ上のテキストは要点等の捕捉という形式になっております。

PyroBasicTutorial:Fire01

こちらが今回のチュートリアル動画となります。各チャプターへのショートカットは動画の説明欄に記載しています。

Houdiniのバージョンは17.5、コンポに使用しているAfterEffectsのバージョンはCC2019です。

簡単なショートカットキーやグローバル変数は上述した前回の記事まででおおよそ説明しておりますので動画内ではほぼ説明をしていませんが、念のために幾つか下記に記載致します。

ショートカットキー 内容
tab tabメニューの表示
U 上の階層に上がる
I 下の階層に潜る
R 選択したノードのディスプレイフラグを立てる
Y + ドラッグ ワイヤーの切断
Alt + ドラッグ 複製
Ctrl+B 選択中のビューを最大化及び元に戻す
Space + F 選択したジオメトリ、オブジェクトをビュー全体に表示
Space + A 全ジオメトリをビュー全体に表示
Space + H グリッドを中心に表示

グローバル変数 内容
$F 現行フレーム
$HIP 現行のシーンファイルを含んだディレクトリ
$HIPNAME 拡張子なしの現行シーンファイル名
$OS 現行オペレータ(ノード)の名前

Tutorialの補足

動画内にテキストで必要な補足はいれているのですが、それ以外にも気になりそうな事だったり、「これってどういう意味だろう?」と感じそうな箇所だったり、追加で別途説明をした方が良さそうだと感じた箇所を下記にまとめました。

チュートリアル動画を履修中、必要に応じて適宜ご確認いただければ幸いです。

Introduction

ネットワークエディタは各工程毎にネットワークボックス(灰色半透明のボックス)を縦長に配置して区切り、左から右に作業フローを展開していっています。

ネットワークエディタはご自身のお好きな形で配置して頂いて大丈夫ですが、上記の「左から右に作業フローを展開する」というようなルールを決めておくと後日ご自身で確認したり他の人にシェアする時に分かりやすく理解しやすいのでオススメです。

炎を青系の色合いでレンダリングしている理由ですが、これは動画内にも記載した通り色幅が多くてコンポジットで調整しやすいからです。

何故コンポジットで調整しやすい形が良いかというと、炎の色味は案件やディレクター・クライアントの意向で千差万別なのでコンポジットで柔軟に対応できるようにしておいた方が良い場合が多くオススメなのでこの手法で作業を行っています。

CreateBaseObject

switchSOPでオブジェクトの位置を切り替えていますが、ここは普通にキーフレームでも大丈夫です。今回のような場合はswitchSOPを使うと後から値を修正したい場合にキーフレームやアニメーションを修正しなくて良いので今回はこの手法で作業を行っています。

前回のチュートリアルでも記載致しましたが、最後に繋いだ参照用のnullの名前を大文字にしておくと、引用時のリストのトップに表示されるようになり後の作業時に探しやすくなります。

CreatePyroFire_Part1

ここは、シェルフや各種チュートリアルでHoudini16.5と17系でノード構成が違っていて間違いやすく戸惑う部分だと思います。とはいえ、実は16.5でも17系のような構成でベースとなるボリュームを作ることはできたので、17系ではこれがHoudini推奨の手法のようです。

今後また仕様が変更となる事も想定されますが、17系ではベースのボリュームを作るのに

  1. PyroSourceで読み込んだジオメトリ等をpoint化。計算に必要なアトリビュートも付与
  2. AttributeNoiseで付与したアトリビュートにノイズを当ててディテール調整
  3. VolumeRasterizeAttributesでVDB(ボリューム)化

という作業フローが主体だというのを知識の下地として知っておくと、バージョンアップで仕様変更があったとしても理解や学習が捗りやすいかと存じます。

CreatePyroFire_Part2&Part3

シミュレーションの肝の部分なので色々と説明していますが、ここはご自身で色々とパラメータを調整して結果を確認して頂くのが学習の一番の近道かと存じます。

CreateCache1

キャッシュを取る方法は後の火花作成の時のように他にも色々とあるのですが、ここは分かりやすさ重視でシェルフのものをそのまま使用しています。

一旦VDB化してキャッシュサイズを少し軽くするテクニックなどもあるのですが、今回は脱線しそうだったのでそのままキャッシュを取っています。

CreateSpark

シミュレーション情報からvelocityを拾う手法や、timeshiftで疑似モーションブラーを作るテクニックは便利なので火花作成を通じて紹介していますが、火花自体作らなくても良いとお考えの場合は火花作成及びそのキャッシュ作成の工程を飛ばして頂いても問題ございません。

Up-ResContainer

FumeFXでいうWaveletTurbulenceのようなもので、簡単な手順で低解像度のキャッシュから高解像度のキャッシュを作ることが出来ます。

炎でUp-resContainerを使う場合はheatとdensityのアトリビュート(スカラーフィールド)が無いと上手くいかない事が多いです(Houdiniの公式ヘルプにはこれらの要素は必須と書かれています)。ですので後々density要素をビジュアルで使わない場合でもこの段階では今回のようにデータとして持たせておく必要があります。

Up-resContainerの要であるGasUpResソルバはWaveletTurbulence同様にシュルシュルという独特な滑らかさのディテールが付きやすいです。色味と同じく炎のディテールも案件やディレクター・クライアントの意向で千差万別なので、この独特な滑らかさをだしたくない場合は素直に通常のシミュレーションでDivisionSizeを0.01以下にするなどしてクオリティを詰めていく必要があります。

LoadCache&MaterialSettings

fileのloadタイプが「AllGeometry」である事に疑問を感じた方は「PackedDiskPrimitive」にして頂いても大丈夫です。前回の記事でpack関係には軽く触れているのですが、今回のチュートリアル中には説明しておらずこの段階でいきなりpackについて触れても混乱の元になるだろうと感じたので今回は「AllGeometry」のまま進行しています。

Lighting&Rendering

SkyLightは単純に調整が楽で使っているだけなので他のライトを使用して頂いても問題ございません。

Mantra周りの説明は文章に起こすとやけに長くなるのですが、やっている事は普通のレンダリング設定なので実際に触りながら適宜テキストを確認して頂けると理解しやすいかと存じます。

Composite

使用しているaepは以下からダウンロードすることができます。一般的な常識の範囲内で学習ソースとしてご自由にお使いください。

blog03_cmp_01.rar をダウンロード

Creative Commons License
This work by KLab Inc. is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.

aep内はソースのデータを置き換えればそれ以降のコンポ全てが自動で変化・反映されるようになっており、これはHoudiniの非破壊的なプロシージャルな作法とよく似ています。AfterEffects自体はプロシージャルを前提としたツールではありませんが、このようにプロシージャルの考え方を踏襲すると効果的にシーンを構築することができます。

終わりに

チュートリアルお疲れさまでした。

如何だったでしょうか? 少しでも皆様のHoudiniの勉強のお役に立てたのなら幸いです。

私自身、丁度Houdini16.5~Houdini17になる辺りからHoudiniを始めたので「あれ?色んなチュートリアルで使っているFluidSourceっていうノードがHoudini17にないぞ?」に始まり、今まで使っていたFumeFXやVrayVolumeGridとの違いでディテールの出し方からマテリアル・レンダリングに至るまで満足なクオリティをだせるようになるのに色々と四苦八苦しました。PyroはHoudini17以降の仕様の資料がまだ潤沢とはいえず同じような悩みを抱えている方は多いかと思われます。ですので当時の私と同じような壁に差し当たった方の力になれたのならこれ以上の喜びはありません。

記事中でも言及しましたがHoudiniはツールの進化が早いので今後Houdini16.5→17の時のように推奨手法が更新される可能性は十分にあると思います。

ただ、そうなったとしてもそれまでのアプローチを知っているか否かというのは理解や学習の際に影響を及ぼす要素かと思いますので、ツールの進化を恐れずに現時点でのアプローチをしっかり知っておくのは重要なことだと存じます。

冒頭や前回の記事にも書きましたがHoudiniには無数のアプローチがあり、私が今回やった方法も一例に過ぎません。特に私はFumeFXからの転向者ですので今回のチュートリアルはFumeFXっぽい考え方で進行している所が少々あります。ですが、まずは一例を知ることでそこから多種多様なアプローチを比較検討することができるようになるので、一つの指標として本チュートリアルを活用して頂けますと幸甚に存じます。

また、「こういう事を知りたい」「こういう内容を記事に取り上げてほしい」といった要望も募集中です。何かございましたらコメントフォームの方へ書き込みをお願いいたします。

最後までお目通し頂きありがとうございました。