記事の目次

    熱によるFLIPの粘性を操作します。

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


    EDIT_小村仁美 / Hitomi Komura(CGWORLD)

    FLIPのAttirbuteを操作する

    今回はFLIPのAttributeを操作する方法を探っていきたいと思います。数年前に同じようなアプローチを紹介したことがあるのですが、そこからHoudiniのバージョンが変わり一新された部分もあるので、改めてお話します。

    今回は、熱源から受け取った情報を基に粘性を変更していくような方法論を解説していきたいと思います。Viscosityを利用することで、FLIPは液体に粘性をもたせることができます。簡単な設定をするだけでトロっとした表現があらかじめ可能になっていますが、今回はそう言った元々用意されているものだけではなく、Micro Solverを使ったアプローチを検証していきます。Micro Solverの扱いは慣れるまでは難しい部分もありますが、慣れれば便利なものも多く、シミュレーションのバリエーションを増やすことができます。近年は、Viscosityを扱うためのHDAやシェルフが多く用意されており、ある程度気軽に扱うことができるようになりました。今回のアプローチでさらに引き出しを増やしていただければと思います。

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

    01 Source Setup

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


    まず、FLIPのシミュレーション用にソースの作成を行います。インポートしたジオメトリのサーフェスに対して、Scatter SOPでPointを散布します【A】。今回は、大小のバリエーションを付けるために、あえて2つに分けています。それらにそれぞれAttribute Randomize SOP【B】を使って、ランダムな大きさの"pscale"を作成します。また、同じくAttribute Randomize SOP【C】で"N"をランダムな方向で作成します。このとき、正負両側に法線が向くように設定します【1】【2】

    これらのPointにCopy SOP【D】を使ってBoxをコピーします【3】。法線をランダムにすることで、回転をかけなくてもばらばらの方向でコピーすることが可能です。次に、これらのジオメトリと元のジオメトリをMergeして、VDB from Polygons SOP【E】を使ってVDBに変換し、形状を整えPolygonへ変換します【4】

    これをPoint from Volume SOP【F】でPointに変換します。このとき、Point SeperationはFLIPのParticle Seperationと同等になるようにします【5】。これらのPointに対して、ソースに必要なAttributeを追加します【G】。今回は、あらかじめ3つのAttributeを用意しました【6】。"viscosity"はDOP内で付与することもできます。"reaction"は、熱源から移す際の移り具合になりますが、例えば、ノイズなどを使って、場所によって移り方に差をつけることも可能です。このように、あらかじめAttributeをSOPで用意することは、シミュレーションにディテールを与える意味でも重要なパートになります。

    次に、熱源を作ります。これはどんな形状でも良いのですが、今回は棒状【H】のものでカットするようなイメージにしています。これに対して、VolumeからPointを作成し【I】、"heat"のAttributeを追加します【J】。これをアニメーション【K】させれば熱源の完成です【7】。続いて、実際のジオメトリとCollision用のSDF【L】を用意します。これらは、アニメーションをした際のTransform SOPをReference Copyして同じ動きをするようにしておきます【M】。今回は、解説しやすいようこのような設定にしていますが、アニメーションをGeometryのTransformで行う方が効率は良いです。また、スピードという点でも有利になります。

    02 Sim Flow

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


    シミュレーションのセットアップをします。まず、Collisionとなる、Ground Plane【A】とStatic Object【B】を準備します。Static ObjectのCollisionは、SDFからVolume Sampleを使ってセッティングします。次に、FLIP Object DOP【C】を作成し、Initial DataからParticle Fieldに設定し、SOPからソースジオメトリを読み込みます。Guidの設定で、ParticleのVisualizationは、Valueを"heat"に設定し、Black Bodyで表示しておくと、今回のようなケースでは見やすいでしょう。続いて、FLIP Solver DOP【D】を設定します。今回はCollisionの設定において、Velocity TypeをRigidにしました【1】。また、Viscosityをアクティブにして、Attributeから値をCopyするように設定しています【2】

    次に、熱の移行の設定です。SOP Solver DOP【E】を使って、現在のシミュレーションジオメトリに対して、Object Merge SOP【F】で熱源のジオメトリをSOPから読み込み、Attribute Transfer SOP【G】で"heat"のAttributeを移行します。これにより、熱源付近にだけ熱が伝わった状態になります。その熱を利用して、Viscosityを溶かしていきます。Geometry VOP DOP【H】を使って、"heat"を"temperature"に変換し、また、"temperature"を"viscosity"へ変換します【3】。つまり、温度が上がった場合、粘度を下げるような計算を行なっています【4】


    その際に、様々な係数を加算乗算することでアクションを調整しています。VOP内で更新されたAttributeは次のフレームでまた引き継がれて更新をくり返していく状況になります。また、熱はGas Linear Combination DOPを使って冷却するしくみを設定します。"heat"【5】は時間とともに、累乗的に減少する設定になっています【6】。これにより、徐々に溶けた液体は粘性を取り戻していきます。つまり、冷めて固まる設定になります。これで、熱源によってカットされるシミュレーションの設定が完了しました【7】

    次ページ:
    03 Mesh Flow

    [[SplitPage]]

    03 Mesh Flow

    メッシュのフローを解説します。

    最後にParticleをメッシュにします。今回のメッシュ化はシンプルで、DOP I/O SOP【A】で読み込んだParticleを、Particle Fluid Surface SOP【B】を使ってPolygonに変換するだけです。ただ、その際の設定を少し解説したいと思います。

    今回の変換メソッドは、Sphericalにしています【1】。通常はAverage Positionを使用して滑らかな表面を作成しますが、これは時として思わぬ結果を招くことになりかねません。今回のように硬いものを作る場合、Particleの挙動によっては凹凸が不自然に動いたりしてしまう可能性があります。特に、Particle量に不足がある場合に起きやすいです。そのため、今回はあえてSphericalを使用してみたいと思います。

    次に、出力するメッシュに対してAttributeを移行します。今回は主に"heat"をレンダリングなどで使用したいので、追加しています【2】。最後に、FilteringでSmoothをかけます。特にSphericalは凹凸が多いので、この処理は重要です【3】

    これでメッシュの完成になります【4】。後は、Attributeを利用したレンダリングなどをして出力していきましょう。


    04 Operator

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

    ●Gas Linear Combination DOP

    今回紹介するノードは、Gas Linear Combination DOPです。

    このオペレータは、複数のFieldやAttributeを結合したり、その際の結合方法や係数の計算をするためのオペレータになります。合計で3つのField及びAttributeを同時に扱うことができます。

    Destinationは、計算結果を移すためのFieldまたはAttributeになります。Gas Match Field DOPなどと組み合わせて新たなFieldを作成するなども可能です。

    Combine Operationは、結合する方法を選択できます。例えば、Addで加算したり、Multiplyで乗算したりできます。その元となるのが、Sourceになります。ここに元となるFieldまたはAttributeを指定します。今回の様に同じAttributeに対して操作することも可能です。

    Coefficientは係数のことで、乗算係数を設定できます。また、TimestepやVoxelによって動的に変更することも可能になっています。

    一見複雑そうで、何に使うかわかりづらいオペレータではありますが、FieldやAttributeを簡単に統合したり、今回のように値を動的に変更するために使用したりなど使い方には幅があり、一度理解してしまえば非常に便利なオペレータで、カスタマイズには不可欠な要員です。


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

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