記事の目次

    今回は、モデルが流体となって溶け出していくようなアニメーションを作成してみました。


    TEXT_森田悠揮 / Yuuki Morita(OnenessArt
    EDIT_三村ゆにこ / Uniko Mimura(@UNIKO_LITTLE



    POP Network内でパーティクルを発生させてメッシュに変換する

    今回はZBrushで簡易的に作成したモデルにHoudiniでParticleのエフェクトを加え、モデルが流体となって溶け出していくようなアニメーションを作成しました。Houdiniでの流体系シミュレーションは過去に何度か紹介してきましたが、今回はFLIP FluidではなくPOP Network内でパーティクルを発生させ、それをメッシュに変換してFluidのような効果を作成しています。Particleを操作するにあたって、Volume内でのVelocityを作成したり馬のモデルの一部分が浸食したりといったPOP内の操作も行なっています。


    STEP 01:Velocityフィールドとパーティクル作成

    この工程では、流動させるためのVelocityフィールドとパーティクルを作成します。



    【1】FileノードでHoudiniに読み込む
    ZBrushで作成した馬のモデルをFileノードでHoudiniに読み込みます。



    【2】Fog Volumeを作成する
    IsoOffsetノードを繫げてDensityを設定し、Fog Volumeを作成します。




    【3】Densityの値を場所ごとに変化させる
    【2】で作成したVolumeデータに対してNoiseを掛け算し、Densityの値を場所ごとに変化させます。



    【4】Scatterノードでポイント群を散布させる
    【3】のDensityアトリビュートを基に、Scatterノードでポイント群を散布させます。



    【5】POP Networkを作成する
    ポイント群から新たなパーティクルを発生させるため、POP Networkを作成します。POP内でパーティクル操作を行うために必要なVelocityを別ノードツリーで作成しておきます。



    【6】Velocityアトリビュート@Velを発生させる
    BoxをVolumeノードへと繫げて、Box内のみにVelocityアトリビュート@Velを発生させます



    【7】ランダム感のあるVectorアトリビュートを作成する
    さらにVolume VOPノードを繫げ、Turburance Noiseを既存のVelアトリビュートに加えることで、少しランダム感のあるVectorアトリビュートが作成できます。



    【8】Volume TrailノードでVelを確認
    Volume Trailノードを使いVelを視覚的に確認すると、このような感じになっています。



    STEP 02:VDBを用いてポリゴンに変換

    POP Network内で実際にParticleを流動させた後、VDBを用いてポリゴンへ変換していく作業を行います。



    【1】POP Advect by Volumesノードを作成
    先ほどのPOP Networkに戻り内部に入ったら、POP Advect by Volumesvノードを作成します。



    【2】POP内にVアトリビュートとして引き継ぐ
    Velocityの元となるSOPディレクトリを選択し、Field NameをVelとします。これで、先ほどBoxから作成したVelアトリビュートがPOP内にVアトリビュートとして引き継がれます。



    【3】POP Fluidノードを作成
    今回の要(かなめ)となるPOP Fluidノードを作成します。このノードは、パーティクルをまるでFLIPのようなふる舞いにしてくれる便利なノードです。



    【4】Static Solverに繫げてMergeする
    はじめに読み込んだ馬のモデルをStatic ObjectとしてStatic Solverに繫げてMergeしました。馬のモデルをCollision対象とすることで、このPOP内でのParticleは馬の体に沿うように移動します。



    【5】Point群をサーフェスへ変換する
    POP Networkでの結果はこのような感じになりました。次に、このPoint群をサーフェスへ変換していきます。



    【6】Convert VDBノードを繫げてポリゴンに変換する
    VDB From ParticleでいったんVDBへ変換し、VDB ReshapeやVDB Smoothノードを繫げます。これで変換されたVDBの形が少し整います。最後にConvert VDBノードを繫げてConvert To Polygon(ポリゴンに変換)をします。



    【7】確認
    このような感じになりました。



    STEP 03:エフェクトの作成

    パーティクルを用いて体の一部が徐々に減っていくようなエフェクトを作成します。



    【1】パーティクル群を作成する
    最後の要素となる、徐々に消費されていく馬の体のエフェクトを作成します。まず、IsoOffsetから新規Scatterノードへ繫げて、このようにパーティクル群を作成します。



    【2】STEP 01で作成したDensityアトリビュートを読み込む
    別ノード階層で、馬のモデルに対してSTEP 01で作成したDensityアトリビュートを読み込みます。Attribute from Volumeノードを使用しました。



    【3】白い部分にポイント散布する
    白黒で可視化するとこんな感じです。この白部分に新たにScatterでポイント散布をしていきます。



    【4】Pscaleを設定する
    散布したポイントへPscaleを設定します。Frameが進むにつれてPscaleが大きくなっていくように、画像のような構築をします。



    【5】Point群に対してSphereに置き換える
    Pscaleを設定したPoint群に対してCopy To Pointノードを用いて、Sphereに置き換えます。このSphereはFrameが進むにつれ大きくなるPscale値をそのまま引き継ぐので、どんどん大きくなっていくようになっています。



    【6】POP Groupノードを作成してPointをグルーピングする
    STEP 03の【1】で作成したポイント群をPOP Networkへ繫げ、内部でPOP Groupノードを作成し、【5】で作成したSphere内にあるPointをグルーピングします。



    【7】グルーピングしたポイントを削除する
    POP Networkを出てDeleteノードを繫げ、グルーピングしたポイントを削除します。



    【8】ポリゴン化して完成
    最後に先ほどと同じように、VDB From Particle→VDB Reshape→Convert VDBという流れでポリゴン化します。最後に、STEP 02で作成したものとSTEP 03で作成したものをMergeして完成です。



    【完成】



    Profile.

    • 森田悠揮 / Yuuki Morita
      フリーランスキャラクターデザイナー/デジタルアーティスト/造形作家

      国内外問わずアート、映画、ゲーム、広告、デジタル原型など様々なジャンルで活動しているフリーランスのアーティスト。ZBrushでの生物や怪獣などのクリーチャーデザインを得意とする傍ら、Houdiniを用いた動画、アート制作なども行う。
      初の著書 『the Art of Mystical Beasts』ボーンデジタルから発売中。

      website: itisoneness.com
      Instagram: yuukimorita
      Twitter: @YuukiM0rita