BlogKLabは、多くのスマートフォン向けゲームを開発・提供しています。このブログでは、KLabのクリエイターがスマートフォン向けのゲームを制作・運営していく中で培った様々な技術や挑戦とそのノウハウについて紹介していきます。Houdini_Pyro基礎編カテゴリ:EffectHoudiniTweetこんにちは。クリエイティブR&Dグループ所属のsasaと申します。「R&Dグループってなんぞや?」という方はコチラ↓http://klabgames.creative.blog.jp.klab.com/archives/14399176.htmlPyro基礎編のPyroとは?今回は表題の通りPyroを使った基礎Tipsとして炎作成のテクニックを動画チュートリアル形式でご紹介したいと思います。Pyroが何か分からないという方もいるでしょうからまずはPyroについて説明いたします。Pyroとは主にHoudiniでは炎や煙のシミュレーションに使う機能の事を指します。Houdini16.5から17になった際に一部の仕様が変更になって、以前の学習リソースが「使えないわけではないが初心者のうちはチンプンカンプンでPyro学習が中々難しい。ルックやマテリアル設定、レンダリングまで一貫した資料が中々無い」という状況に陥りがちで現状少々学習が難しい状態になっています(自分もHoudini17になる辺りにHoudiniを本格的に始めたので仕様の違いに苦労しました)。IntroductionHoudini基礎編のチュートリアルの後にいきなりシミュレーションのチュートリアルは少し飛躍しているかもしれないとも思いましたが、上述した理由からHoudini17.5仕様のPyroのシミュレーションからレンダリング・コンポまでの基礎Tipsを作ろうと思い今回のチュートリアルの作成に至った次第です。注意点なのですが今回はPyroやシミュレーションで説明する事が多くHoudiniの基本的な部分からの解説だと説明量が膨大になるので、前回の記事(※下記参照)の内容位までは履修してHoudiniの基礎がある程度分かっている方向けの内容になります。動画チュートリアルですので内容を理解はしていなくても手順をなぞれば同じものはできるのですが、ご自身で思い描いたビジュアルを作るにはやはりツールやCG・シミュレーションの根本的な理解が必要になります。いえ「まずは御託はいいからPyroでの炎の作り方を教えてくれ。話はそれからだ」というお気持ちも重々理解できます。本チュートリアルをPyroの最初の一歩として皆様方のステップアップの足掛かりにでもして頂ければ幸いです。※前回の記事↓http://klabgames.creative.blog.jp.klab.com/archives/19665739.html今回やること今回は上記画像のような炎素材を作成します。エミッター作成からコンポジットまでの各工程を行います。基礎編なのであまり複雑にならないような構成且つ私がやりやすいと思っているフローを紹介致します。これは前回の記事にも書きましたがHoudiniには良くも悪くもアプローチに多種多様な選択肢があるので、私のやり方を紹介することで「こういう考え方でやっている人もいる」ということを知って頂き、その視点を軸にすることで他のアプローチを比較検討しやすくなるだろうという思いがあります。前回の記事同様基本的に動画チュートリアルですのでブログ上のテキストは要点等の捕捉という形式になっております。PyroBasicTutorial:Fire01こちらが今回のチュートリアル動画となります。各チャプターへのショートカットは動画の説明欄に記載しています。Houdiniのバージョンは17.5、コンポに使用しているAfterEffectsのバージョンはCC2019です。簡単なショートカットキーやグローバル変数は上述した前回の記事まででおおよそ説明しておりますので動画内ではほぼ説明をしていませんが、念のために幾つか下記に記載致します。動画内にテキストで必要な補足はいれているのですが、それ以外にも気になりそうな事だったり、「これってどういう意味だろう?」と感じそうな箇所だったり、追加で別途説明をした方が良さそうだと感じた箇所を下記にまとめました。チュートリアル動画を履修中、必要に応じて適宜ご確認いただければ幸いです。Introductionネットワークエディタは各工程毎にネットワークボックス(灰色半透明のボックス)を縦長に配置して区切り、左から右に作業フローを展開していっています。ネットワークエディタはご自身のお好きな形で配置して頂いて大丈夫ですが、上記の「左から右に作業フローを展開する」というようなルールを決めておくと後日ご自身で確認したり他の人にシェアする時に分かりやすく理解しやすいのでオススメです。炎を青系の色合いでレンダリングしている理由ですが、これは動画内にも記載した通り色幅が多くてコンポジットで調整しやすいからです。コンポジットで調整しやすい形が良いかというと、炎の色味は案件やディレクター・クライアントの意向で千差万別なのでコンポジットで柔軟に対応できるようにしておいた方が良い場合が多くオススメなのでこの手法で作業を行っています。CreateBaseObjectswitchSOPでオブジェクトの位置を切り替えていますが、ここは普通にキーフレームでも大丈夫です。今回のような場合はswitchSOPを使うと後から値を修正したい場合にキーフレームやアニメーションを修正しなくて良いので今回はこの手法で作業を行っています。前回のチュートリアルでも記載致しましたが、最後に繋いだ参照用のnullの名前を大文字にしておくと、引用時のリストのトップに表示されるようになり後の作業時に探しやすくなります。CreatePyroFire_Part1ここは、シェルフや各種チュートリアルでHoudini16.5と17系でノード構成が違っていて間違いやすく戸惑う部分だと思います。いえ、実は16.5でも17系のような構成でベースとなるボリュームを作ることはできたので、17系ではこれがHoudini推奨の手法のようです。今後また仕様が変更となる事も想定されますが、17系ではベースのボリュームを作るのにPyroSourceで読み込んだジオメトリ等をpoint化。計算に必要なアトリビュートも付与AttributeNoiseで付与したアトリビュートにノイズを当ててディテール調整VolumeRasterizeAttributesでVDB(ボリューム)化という作業フローが主体だというのを知識の下地として知っておくと、バージョンアップで仕様変更があったとしても理解や学習が捗りやすいかと存じます。CreatePyroFire_Part2&Part3シミュレーションの肝の部分なので色々と説明していますが、ここはご自身で色々とパラメータを調整して結果を確認して頂くのが学習の一番の近道かと存じます。CreateCache1キャッシュを取る方法は後の火花作成の時のように他にも色々とあるのですが、ここは分かりやすさ重視でシェルフのものをそのまま使用しています。VDB化してキャッシュサイズを少し軽くするテクニックなどもあるのですが、今回は脱線しそうだったのでそのままキャッシュを取っています。CreateSparkシミュレーション情報からvelocityを拾う手法や、timeshiftで疑似モーションブラーを作るテクニックは便利なので火花作成を通じて紹介していますが、火花自体作らなくても良いとお考えの場合は火花作成及びそのキャッシュ作成の工程を飛ばして頂いても問題ございません。Up-ResContainerFumeFXでいうWaveletTurbulenceのようなもので、簡単な手順で低解像度のキャッシュから高解像度のキャッシュを作ることが出来ます。炎でUp-resContainerを使う場合はheatとdensityのアトリビュート(スカラーフィールド)が無いと上手くいかない事が多いです(Houdiniの公式ヘルプにはこれらの要素は必須と書かれています)。後々density要素をビジュアルで使わない場合でもこの段階では今回のようにデータとして持たせておく必要があります。Up-resContainerの要であるGasUpResソルバはWaveletTurbulence同様にシュルシュルという独特な滑らかさのディテールが付きやすいです。色味と同じく炎のディテールも案件やディレクター・クライアントの意向で千差万別なので、この独特な滑らかさをだしたくない場合は素直に通常のシミュレーションでDivisionSizeを0.01以下にするなどしてクオリティを詰めていく必要があります。LoadCache&MaterialSettingsfileのloadタイプが「AllGeometry」である事に疑問を感じた方は「PackedDiskPrimitive」にして頂いても大丈夫です。前回の記事でpack関係には軽く触れているのですが、今回のチュートリアル中には説明しておらずこの段階でいきなりpackについて触れても混乱の元になるだろうと感じたので今回は「AllGeometry」のまま進行しています。Lighting&RenderingSkyLightは単純に調整が楽で使っているだけなので他のライトを使用して頂いても問題ございません。Mantra周りの説明は文章に起こすとやけに長くなるのですが、やっている事は普通のレンダリング設定なので実際に触りながら適宜テキストを確認して頂けると理解しやすいかと存じます。Composite使用しているaepは以下からダウンロードすることができます。一般的な常識の範囲内で学習ソースとしてご自由にお使いください。License.aep内はソースのデータを置き換えればそれ以降のコンポ全てが自動で変化・反映されるようになっており、これはHoudiniの非破壊的なプロシージャルな作法とよく似ています。AfterEffects自体はプロシージャルを前提としたツールではありませんが、このようにプロシージャルの考え方を踏襲すると効果的にシーンを構築することができます。終わりにチュートリアルお疲れさまでした。皆様のHoudiniの勉強のお役に立てたのなら幸いです。私自身、丁度Houdini16.5~Houdini17になる辺りからHoudiniを始めたので「あれ?色んなチュートリアルで使っているFluidSourceっていうノードがHoudini17にないぞ?」に始まり、今まで使っていたFumeFXやVrayVolumeGridとの違いでディテールの出し方からマテリアル・レンダリングに至るまで満足なクオリティをだせるようになるのに色々と四苦八苦しました。PyroはHoudini17以降の仕様の資料がまだ潤沢とはいえず同じような悩みを抱えている方は多いかと思われます。当時の私と同じような壁に差し当たった方の力になれたのならこれ以上の喜びはありません。記事中でも言及しましたがHoudiniはツールの進化が早いので今後Houdini16.5→17の時のように推奨手法が更新される可能性は十分にあると思います。なったとしてもそれまでのアプローチを知っているか否かというのは理解や学習の際に影響を及ぼす要素かと思いますので、ツールの進化を恐れずに現時点でのアプローチをしっかり知っておくのは重要なことだと存じます。冒頭や前回の記事にも書きましたがHoudiniには無数のアプローチがあり、私が今回やった方法も一例に過ぎません。私はFumeFXからの転向者ですので今回のチュートリアルはFumeFXっぽい考え方で進行している所が少々あります。一例を知ることでそこから多種多様なアプローチを比較検討することができるようになるので、一つの指標として本チュートリアルを活用して頂けますと幸甚に存じます。「こういう事を知りたい」「こういう内容を記事に取り上げてほしい」といった要望も募集中です。何かございましたらコメントフォームの方へ書き込みをお願いいたします。最後までお目通し頂きありがとうございました。