記事の目次

    FLIPを使った空気抵抗の表現を検証します。

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


    EDIT_小村仁美 / Hitomi Komura(CGWORLD)

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

    空気抵抗

    今回は、FLIPを使って空気抵抗を表現していきたいと思います。空気抵抗を正確に再現するのは非常に難易度が高いので、今回はこれまで培ってきたDensityの操作を発展させて、空気層と水を同時にシミュレーションすることで、同等の結果を得られるようなしくみを検証していきます。

    FLIPのシミュレーションは非常にリアリティのある挙動を得ることができますが、やはりデフォルトの仕様では表現しきれない部分も多くあります。今回の空気抵抗もそのひとつで、同等の効果を得るためにWhitewaterなどを組み合わせて表現するなど、最初から難易度がやや高めです。

    今回のような表現は、特に大規模な放水や落水などにおいて必然的に自然界で起きる現象ではありますが、FLIPのデフォルトの機能だけでは表現しきれないのも事実です。少しトリッキーなアプローチではありますが、Densityという最初から備わっている機能を利用して、近しい表現ができないか試していきましょう。

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

    01 Source Setup

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

    まず、ソースをセットアップしていきます。今回はFLIPをエミットするのではなく、わかりやすくそのものを落下させるだけにしたいと思います。ソースになるジオメトリをインポートして、初期位置へレイアウトします【A】【1】

    続いて、Point from Volume SOP【B】を使って、Pointを作成します【2】。このとき、Point Seperation【3】はDOP内のFLIP Object DOPのParticle Seperationと同期するように設定します。また、Jitter Scaleも必要に応じて設定します【4】

    今回はエミットしませんが、エミットさせたい場合は、FLIP Source SOPを使用するのが簡単で良いと思います。このPointに対して、Group SOP【C】を使って"particles"というポイントグループを作成します。これは、DOP内でソースのセッティングに使用します。

    次に、VDB from Polygons SOPからSDFを作成し、それらを使ってFluidのSurfaceとなるSDFを作成していきます【D】【5】。最後に、Group SOP【E】でPoint全体を"water"と言うポイントグループを作成し、Attribute Create SOP【F】で"density"を作成しソースの完了です【6】

    次ページ:
    02 Sim Flow

    [[SplitPage]]

    02 Sim Flow

    シミュレーションのフローを解説します。


    シミュレーションのセッティングをしていきます。まず、FLIP Object DOP【A】を作成します。次にFLIP Solver DOP【B】を作成し、[Volume Motion→Density→Density by Attribute]【1】をONにして、DensityをAttributeから計算するように設定します。

    続いて、Volume Source DOP【C】を使用してソースを読み込みます。通常はエミットをする際に用いるこのノードですが、今回はActivationをイニシャルフレームのみにして、エミットさせないように設定しています【2】。これにより、面倒なソースの読み込みを簡単にすることができます。

    今回の作例にはあまり関係ないですが、必要に応じてコリジョンも設定します。今回はGroud Planeのみを設定しています【D】。また、Gravity DOP【E】はスローモーション風にするために、値を弱めにしています。

    ここから空気抵抗を設定していきます。まず、Gas Match Field DOP【F】を用いて、新たにFieldを作成します。元々ある"surface"のField【3】を利用して、新たに"air_field"を作成します【4】。このとき、Rank【5】やBorder Type【6】もReference Fieldと同等にします。

    新たに作成したFieldに対して、Gas Particle to SDF DOP【G】を用いて、ParticleからSDF Fieldを構築していきます。初期化されるFieldを先ほど作成した"air_surface"に設定して、ここにSDFを構築していきます【7】。ParticleのGroupは"water"のみを選択するようにします【8】。また、今回はMethodにClosest Particle Uniform Radiusを用いていますが、これは、Particleの半径を全て均一とみなすことで最も高速に結果を得ることができるというもので、今回はこの設定を使用します【9】

    次に、作成したFieldに対してSOP Solver DOP【H】を使用して空気のParticleを作成し、さらにSOP Solver DOP【I】で余分な空気の層を消す設定をしていきます。

    空気の層を作成するために、"air_surface"を読み込み、これを"density"に変更します【J】。これによって、Volume VOP【K】でRangeを調整することができ、そのVolumeにPoint from Volume SOP【L】でPointを作成します。このPointにAttribute Create SOP【M】を使って"density"を空気の密度に設定し、視覚の差別化を図るために"Cd"も設定しておきます。また、このPointに対して、"air"のGroupを追加します【N】。これを、"water"のみをインポートしたデータとMergeして空気の層の完成です【10】

    ただ、このままだと、空気の層に余分なところが多すぎるので、新たにSOP Solver DOPで余計なParticleを削除します。Particleを読み込み【P】、それに対して"air_surface"のVolume【Q】を用いてGroup【R】を作成します。GroupはPointに対してBounding Volumeを用いて設定します【11】。Volumeは反転して使用し【12】、ISO Surfaceの値は、空気層の厚みを意味しています【13】。最後に、このGroupを利用して余分な空気層を削除して完了です【S】【14】

    今回の空気層を用いて落下させた水は、【15】のように落下する際に空気抵抗によって、形状が崩れていきます。自然とディテールも発生してよりリアリティのある挙動を簡単に作り出すことができました。

    それに対して、【16】は空気抵抗を用いない通常のFLIPシミュレーションの結果です。同じフレームを見比べてみるとその違いは一目瞭然です。

    今回のアプローチは全てのシチュエーションに対応できるものではありませんが、特に巨大な液体に対してはより効果的だと言えます。ただし、その分シミュレーションは重くなってしまうので、そこに注意して使用するのが望ましいでしょう。

    03 Operators

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

    ●Gas Match Field DOP&Gas Particle to SDF

    今回紹介するノードは、Gas Match Field DOPGas Particle to SDFです。

    Gas Match Field DOPはこれまでも登場している比較的メジャーなMicro Solverではありますが、やはりこういったカスタマイズの際には重要なノードのひとつに挙げられます。新たにFieldを構築するアプローチは、良く行うというより、ほぼ必然となる作業です。その際に、Gas Match Field DOPを上手く利用することで、かなり簡単にFieldを作成することができます。

    FieldをイチからDivisionやSizeなどを指定して作成することもできますが、それよりは、同等のものを参照して作成する方が圧倒的に楽です。

    また、Gas Particle to SDF DOPも非常に便利なMicro Solverと言えます。似た作用をするノードとして、Gas Particle to Field DOPがあります。こちらは、ParticleのAttributeをFieldに移す作用があり、Gas Particle to SDFは、Particle自体の半径からサンプリングしてSDFを構築するというものです。どちらもParticleからFieldを変更するものですが、そこが大きく異なります。

    今回紹介できるのはここまでです。これらのノードを使用してFieldの作成をしてみましたが、実はもっと簡易的に、元からあるSurfaceを利用して同じことをする方法もあります。敢えてFieldを新たに作成することで、今回よりさらに深いカスタマイズを意識したセットアップになっています。


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

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