今回は、破壊されていく部屋と徐々に広がっていく植物のアニメーションを作成していきます。
TEXT_森田悠揮 / Yuuki Morita(OnenessArt)
EDIT_三村ゆにこ / Uniko Mimura(@UNIKO_LITTLE)
部屋の破壊と時間により変化していく地面のエフェクト
今回の解説では、部屋の破壊と時間により変化していく地面のエフェクトの作成方法を説明していきます。破壊では、RBD Material FractureとBulletSolverを使用。地面ではSolver内でVEXを記述し、徐々に広がっていくアトリビュートを作成しました。
STEP 01:部屋モデルの破壊エフェクト
【1】部屋のモデルを読み込む
HoudiniのGeoノード内に破壊する部屋のモデルを読み込みます。今回は別Geoノード内で作成したモデルをObjMergeノードで新規Geo階層内に読み込んでいます。
【2】KnifeノードとPolyFillノードを繋げる
KnifeノードとPolyFillノードを繋げます。Knifeノードは、画像のように部屋モデルの下部をカットするために使用しています。
【3】下部に空いた穴をふさぐ
PolyFillノードでカットした際に下部に空いた穴をふさぎます。今回は三角ポリゴンを使用して埋めました。
【4】部屋モデルをボロノイ分割
RBD Material Fracture SOPで部屋モデルをボロノイ分割します。
【5】Fracture Levelでパーツの分割数を決める
Fracture Levelで1つのパーツを何回分割するかを決めることができます。今回は「4」に設定。素材のプリセットはコンクリートを使用しています。
【6】RBD Bullet Solverを繋ぐ
RBD Bullet Solverを繋げます。[Substeps] や [Constraint Iterations] の数値を変更することで、シミュレーションのスピードや精度を調節できます。
RBD Bullet Solver内のGravityを今回は [+Y] へ数値設定しています。そうすることで、破壊されたモデルが上昇していくようなシミュレーションとなります。よりクオリティを上げるのであれば、RBD Material Fracture SOP内でEdge Detailを設定、または細かい破片を別パーティクルで作成するのも良いでしょう。
【7】特定の場所に吸い込まれていくようなエフェクトを作成
破片が徐々にバラバラになり散っていくにつれ、特定の場所に吸い込まれていくようなエフェクトを作成していきます。Attribute VOPの [Input2] へ基の部屋モデルにスキャッタしたポイントを挿し、Attribute VOP内で吸い込まれる処理を作成します。
【8】目的座標へのベクトルを取得
VOP内はこのようなノード接続をしています。まずポイントクラウドとPCFilterを使用し [Input2] のポイントの位置情報 [P] を取得します。取得した [P] と [Input1] の [P](この場合はパックされた破片ひとつひとつの位置情報)の減算を行います。これにより、吸い込まれる目的座標へのベクトルを取得できます。
【9】距離に変化を加える
続いて、そのベクトルの長さをLengthノードで取得。長さの値をFit Rangeノードで [0~1] に修正し、Rampノードで距離に変化を加えます。
【10】Rampの数値を指定
目的地へのベクトルへRampから出力された変化率を乗算し、最後に [Input1] の現在の位置情報 [P] と加算します。これでRampで指定した数値分、目的地に [P] が移動していきます。
【11】破片ひとつひとつにトランスフォームをかける
パックされた破片ひとつひとつに対してトランスフォームをかけて、徐々に各破片のスケールが小さくなっていくようなエフェクトを追加し完成です。
時間により変化していく地面の作成
【1】Gridから作成
Gridから作成していきます。Auto UVのY投影でUVを作成し、「原点付近のみ少し陥没している」形状を作るためAttribute VOP内で作業していきます。
【2】凹ませたい場所の中心座標を設定
VOP内で凹ませたい場所の中心座標を設定します。この場合は原点[0, 0, 0]です。現在のポイントの座標と原点座標の距離数値をDistanceノードで生成し、その値をFit Rangeノードで [0〜1] に変換します。
【3】Y方向を凹ませる
今回はY方向に凹ませたいので、Yのみに先ほど設定した [0〜1] 内の数値を減算します。図のように、Float To Vectorでベクトルデータを [x]、[y]、[z] に分解した後、[y] のみ数値を減算します。そして再び、Float To Vectorでベクトルデータへ変換しOutPutの [P] へ挿します。
【4】周波数のノイズをかける
VOPを出てSubdivideとMountainノードを数回にわたり繋げ、様々な周波数のノイズをかけます。これで地形のベースは完成です。
【5】徐々に広がっていくアトリビュートを作成
特定の場所から徐々に広がっていくアトリビュートを作成します。Scatterで数か所起点を作成し、そのポイントに対して特定のアトリビュート値 [1] を与えます。基の地形モデルのポイントに対しては、特定のアトリビュート値 [0] を与えます。この基の地形モデルのポイント群が、時間と共に特定のアトリビュート値を取得していくというようなながれです。
【6】Solver内でAttribute Wrangleを作成
Solver内でAttribute Wrangleを作成し、図のようなVEXを記述しました。「nearpoints」で近くのポイントを指定個数サーチし、サーチしたポイント全ての特定のアトリビュート値(この場合@infectという名前)を調べていくといういにしえの手法です。
【7】アトリビュート値が広がっていくエフェクトを作成
時間を進めていくと、このように【5】でScatterしたポイントのある場所を起点に、徐々にアトリビュート値が広がっていくエフェクトが作成できます(この場合、アトリビュート値が高いところは白、0のところは黒で表示しています)。子のアトリビュート値を基に、成長していく植物やマテリアルのアニメーションなど様々なことができます。
【完成】
Profile.
-
森田悠揮 / Yuuki Morita
フリーランスキャラクターデザイナー/デジタルアーティスト/造形作家
国内外問わずアート、映画、ゲーム、広告、デジタル原型など様々なジャンルで活動しているフリーランスのアーティスト。ZBrushでの生物や怪獣などのクリーチャーデザインを得意とする傍ら、Houdiniを用いた動画、アート制作なども行う。
初の著書 『the Art of Mystical Beasts』ボーンデジタルから発売中。
website: itisoneness.com
Instagram: yuukimorita
Twitter: @YuukiM0rita