記事の目次

    Pyro Sparseを使った炎のシミュレーションを解説します。

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


    EDIT_三村ゆにこ / Uniko Mimura(@UNIKO_LITTLE

    ●CGWORLD Online Tutorialsにて特別無料配信中!
    【無料】Houdini COOKBOOK +ACADEMY 特別編 ~コロナをやっつけよう!~

    Sparseベースのシミュレーション

    Pyroが近年どんどん進化しています。本連載ではなかなか紹介できずにいましたが、今回、炎をモチーフにPyro Sparseを紹介していきます。これまでのPyroもいまだ現役で使用できる状態ですが、Sparseが搭載された今となっては速度面から考えてもひと世代前のものとなってしまいました。それほど速度面ではSparseが優れているといえます。

    「Sparseとは何か」を説明するには、Houdiniで使用できるVolumeの種類を理解しておく必要があります。元々は、Volumeと呼ばれる直方体で構成されたコンテナ内でシミュレーションする必要がありました。ところがVDBの登場以来、無駄を省いた「Sparse Volume」が主流となりました。その特性をPyroに組み込んだものが、これから紹介するSparseベースのシミュレーションになります。パラメータの並びは異なりますが、Sparseかそうでないかのちがいだけで、ベースとなる考え方はほぼ変わりません。ただし、Sourceを作成する段階から日々進化を遂げているので、そういった部分も含めて紹介できればと考えています。

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

    01 Geometry Build

    ベースジオメトリを作成します。


    ベースになるジオメトリを読み込み、Rest PositionのAttributeを作成しておきます【A】【1】


    このジオメトリをVOP【B】を使ってNoise Deformします【2】


    Defromさせたジオメトリに対してFog Volumeを作成し、DensityにNoiseをかけてScatter SOPでPointを作成します【C】【3】。これがVoronoiのベースPointになります。VoronoiをかけてCut Plane Offsetの数値を調整して隙間をつくり、Pの値にrestのAttributeを代入して元の形状に戻します。必要であればNormalも再計算しておくと見やすいでしょう【D】


    このアプローチはVoronoiだとまっすぐしかカットできないので、多少のディテールを付加するためにNoise DeformをしてからVoronoiでカットしています。そうすることで、うねったカットラインをつくり出すことができます【4】


    次に、このカットしたジオメトリをVDB from Polygons SOP【E】でSDFに変換します【5】


    元のジオメトリもSDFにした状態で、VDB Combine SOP【F】でSDF同士をUnionします。そのSDFの形状をSmoothなどを使って整え、Polygonにコンバートします【G】【6】


    同じながれで隙間の間隔が広いVoronoiをつくり、本流とは別にVDBのMaskを作成しておきます【H】。これを使ってFogにコンバートし【I】【7】、部分的なSmoothやGroup SOP【J】でのPointの選択に使用します【8】。これはSourceを作成する際のエリアとして利用します。



    最後にジオメトリのキャッシュをとりベースの完成です【K】



    次ページ:
    02 Source Flow

    [[SplitPage]]

    02 Source Flow

    ソースのセットアップを解説します。


    シミュレーションに必要なSourceの準備をします。まず、Pyro Source SOP【A】を使って指定したエリアにSourceのPointを作成します。この際に作成するAttributeはTemperatureのみです。Temperatureの設定温度は「0」にしておきます。Group SOP【B】を使って部分的にPointを選び、その部分のみの温度をWrangle【C】で「1」に変更します。これで温度の差ができます【1】


    Pyro Source Spread SOP【D】を使って、温度差を利用した燃え広がりをつくり出します。CombutionタブではIgnition Temperatureが設定可能で、発火の温度を設定することができます。それにより、着火のSourceを作成できるようになります。厳密には、ここで作成しているのはburnのFieldのSource Pointです。また、Temperatureの拡散なども変更しています【2】


    burnを作成する際には、それの基となるFuelをつくるようにしています。このように、これまでPyro Solverが行なっていた燃焼の設定をSOP内で行うことで、Sourceとしてあらかじめ準備と管理がしやすい設計になっています。このセッティングが全てではありませんが、目に見えて制御が可能となったことで無駄なリテイクをしなくて済むため、非常に効率的な作業が可能となります。どのような変更が加えられたかについては可視化できます【3】

    ここで作成したPointのAttributeを基に、Volume Rasterize Attribute SOP【E】を使ってSource Volumeを作成します【4】


    必要に応じてForce Fieldも作成していくわけですが、今回は簡易的な風のFieldを作成しています。ベースのジオメトリのBounding Box【F】からVector VDBをつくり【G】、Volume Velocity SOP【H】を使って値を追加。Volume Trail SOP【I】を使うことで可視化できます【5】


    また、今回はベースのジオメトリからCollision Source SOP【J】を使ってSDFのCollisionを作成しています。



    シミュレーションのセットアップを解説します。


    シミュレーションはシンプルなセッティングです。炎の細かいパラメータの調整は必要ですが、今回は煙などはなく、単純な燃焼のみをシミュレーションしています。今回のテーマでもあるSparseですが、Smoke ObjectのSparse対応のものを使用します【A】。これによりコンテナの初期サイズを設定するのではなく、リミットをもたせつつ、基本的には自由領域にすることができます。発生している箇所に自動的にコンテナを生成することこそ、Sparse最大の特徴といえるでしょう。そのため、FieldをSolveできるPyro Solverも、Sparse対応のものが必要となります【B】

    こちらのセッティング自体は基本的に大きく変わるわけではありませんが、細かいパラメータはSparse対応に変更されています。ただ、燃焼やFluidのShapeを決めるパラメータ等の意味に変わりはないので、従来のPyroを使用している方であればすぐに対応可能な変更になっています。今回は炎のセッティングですが、これまでと大きく異なる部分として、燃焼のセッティングが挙げられます。これはSOPで作成しているので、Pyro上で燃焼の設定をする必要性がなく、ゆえにCombustionの設定がなくなっています。その変わり、Shapeなどは変わりがないので炎にふさわしい設定を調整します。特に、DisturbanceやShreddingなどです【1】

    次にSourceの設定です。これも、これまでと変わりはないのですが【C】、これまでは燃料であるFuelを読み込みDOP内で燃焼させていましたが、ここではすでに燃焼をシミュレーションしたBurnを読み込んでいます【2】。これが燃焼の基になるわけです。後は、気流を生み出すTemperature【3】が読み込まれていれば、基本的な炎のシミュレーションのセッティングは完了です【4】


    必要に応じて、Velocity Fieldを追加でSourceとして読み込んで動きを調整します【D】。また、コリジョンにはSDFでVolume Sample VOPを適用したものを使用します【E】



    04 Operators

    主要ノードを解説します。

    ●Pyro Source Spread SOP

    PyroがSparce対応してからしばらく経ちますが、少し前にアップデートしたHoudini 18.5でも様々な機能が追加されました。DOP内で調整しなければならかった部分がSOPで調整できるようになったり、複雑なSourceのしくみを簡単にセットアップできるようになったりと便利なものばかりです。これもPoint AttributeベースのSource設定に変更になり、より高精細なシミュレーションが可能になったSparseの恩恵とも言えます。

    ただ、まだまだ発展途上でもあるため、便利機能、いわゆるHDAが蔓延していくという弊害もあります。例えば、今回紹介したPyro Souce Spread SOPですが、非常に便利で「延焼していく効果」を簡単につくり出せる優れものではあるのですが、あくまでも「ベーシックなものに限る」ということを理解しておく必要があります。これを参考にカスタマイズする必要はどうしても発生するかと思います。そういった場合に、HDAに頼りっきりで細かなオペレーターに対する理解不足や、フローの分解ができない状態に陥らないよう、こういったHDAは必ず使用する前に内部を確認し、大まかな内部構造を理解しておくことが大切です。


    • 「Houdini COOKBOOK +ACADEMY」
      Houdiniを基礎から楽しく学ぶオンライン講座

      公開日程:毎週金曜日公開(予定)
      価格:1,300円(税込)※セットでの割引販売有
      ※第一回「Houdiniの基本概念とインターフェイス」は無料公開中
      受講対象:Houdiniをこれから学びたい方、Houdiniの勉強で挫折した方など
      cgworld.jp/special/houdinicookbookacademy