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