今回は、クルマが水溜まりの上を走る際に水を跳ね上げる現象に注目してみました。理想的な水のせり上がりを表現するため衝突用オブジェクトなどに少し工夫をしています。
※本記事は月刊「CGWORLD + digital video」vol. 215(2016年7月号)からの転載となります
TEXT_近藤啓太(ジェットスタジオ)
EDIT_小村仁美 / Hitomi Komura(CGWORLD)
水がもつ表情の多様さとその魅力
さて、今回のテーマは「クルマの水跳ね」です。普段あまりお目にかかりたくない現象のひとつですが、どんなしくみで水が跳ね上がるほど変化するのか興味が湧きましたので挑戦することにしました。
水は火や破壊同様、自然現象のなかでも代表的なエフェクトであり、シミュレーションやレンダリングコストの高さから難易度の高いテーマとしても知られています。魅力は何といっても表情の多様さです。「三態」という固体、液体、気体の状態変化がもたらす様々な見た目のバリエーションの多さは想像にかたくありません。
このように、水単体の変化だけでも十分エフェクト制作にとって魅力的な題材なのですが、外部からの干渉によって起きる水の変化、つまり今回のテーマでいうところの"クルマが接触することで生じる水の変化"もまた大きな魅力をもっています。これは先ほど説明した三態とはまたちがった水の魅力を垣間みることができます。前回紹介した「滝」も地面の高低差という干渉があることで生まれた水の魅力的な変化のひとつです。水跳ねもそうした干渉を受けてできた独特な水の表情であり、この現象が生まれるしくみを調べてみようと思ったことが先述の模写挑戦の理由となっています。
特定のかたちをもたないからこそ無数の表情を見せてくれる水。これから先の連載でも何度か取り上げるときが来るはずです。いや、来ます。今回のテーマでもそんな水の魅力が少しでも伝われば幸いです。
主要な制作アプリケーション
・Autodesk 3ds Max 2015
・Adobe After Effects CS 6.0
・Krakatoa MX 2.4.3
・PhoenixFD 2.2
STEP 01:「水がせり上がる原因」を考える~水跳ねのメカニズムを調べてみた~
水跳ねは「タイヤの回転」ではなく「クルマの押し出し」が主な原因
クルマの水跳ねとは、路面の水溜まりをクルマが通過した際、水がクルマの前面や側面に飛散する現象です。周囲に水を飛散させるため近くの歩行者や対向車にはちょっとやっかいな現象でもあります。歩道を歩いていたら横切ったクルマから水を引っかけられた、という経験のある方も多いのではないでしょうか。そんなちょっと迷惑な水跳ね発生のメカニズムですが、そもそも水跳ねを研究した文献が少なく、これと言った結論にはまだたどり着いていないようです。
そうした数少ない文献から導き出した主な発生原因は「クルマの移動による水の押し出し」です。タイヤの回転が原因じゃないの? と考えた方も多いと思いますが、少なからず関わってはいるものの下図を見ていただいてわかるように回転で起きる現象は後方に飛散する水の吹き上がりであって、主に前方やサイドに飛び散る水跳ねとは厳密にはちがう現象と考えてよいようです。どちらも困った現象には変わりありませんけどね。以降のSTEPでは水跳ね再現に加えて雨や波紋の制作にも言及していきたいと思います。
STEP 02:「雨とレンダリング」を考える ~雨着水時の飛沫を制作する~
Spawnによる雨システムの構築とアニメーションテクスチャの活用
STEP 02では雨の飛沫を制作します。はじめにParticle Flowのオペレータ[Spawn]を中心に下図のように簡単なイベントフローを構築します。このフローでは地面と同じ位置にある[Defrector]に衝突することで[Spawn]のあるイベントへ移行し、雨が地面に着水した際の振る舞いを再現しています。
雨の飛沫を制作するために、Particle Flowでイベントフローを構築します
さて、このパーティクルシステムをレンダリングするとカメラブラーを使用していることもあり、レンダリングがなかなか返ってきてくれません。そこで今回はパーティクルのままでのレンダリングを諦め、雨の飛沫はアニメーションテクスチャを利用してレンダリングコストを軽減することにします。
このパーティクルシステムでレンダリングをスタートすると、レンダリングウインドウがフリーズしてしまい、レンダリングが進みません
先ほど用意した雨の飛沫パーティクルのAmountを1にして1回だけ飛沫が起きるように設定します。下図のように飛沫が一度だけ[Spawn]イベントに送られるので、飛沫のスタートからパーティクルが消えるまでレンダリングを行います。
パーティクルでのレンダリングは諦めてアニメーションテクスチャを活用することにします。パーティクルのAmountを1にして1回だけ飛沫を起こしてレンダリングし、連番画像を作成します
この連番画像をはじめに作成したParticle Flowで発生させるために[Spawn Splash]イベント内に[Shape Instance]を適用し、飛沫の連番画像を貼った平面を指定します。アニメーションテクスチャを使用すれば、パーティクルのままレンダリングするより圧倒的に素早いレンダリングが可能になります。
[Spawn Splash]イベント内に[Shape Instance]を適用し、【3】の連番画像を貼った平面を指定します
次ページ:
STEP 03:「水跳ね」を考える ~水跳ねが起きるしくみを応用した制作~
STEP 03:「水跳ね」を考える ~水跳ねが起きるしくみを応用した制作~
水を押し出すための最適な衝突用オブジェクトを用意する
STEP 03では水跳ねを再現していきます。水跳ねの制作には、第21回「滝」でもメインの滝を制作する際に使用したフルイド系プラグインPhoenix FDを使います。はじめにシミュレーションを行うための準備をします。クルマと背景モデルは衝突用オブジェクトとしても利用しますので、アニメーション、水溜まりの窪みも含めて最初からほぼ作り上げておきます。クルマと背景が用意できたらPhoenix FDのシミュレーショングリッドを窪みの深さや飛沫の飛距離、カメラのレンダリング範囲を想定してグリッド幅を設定します。次に[Initial fill up]でグリッド内を窪みの深さに合わせて水を溜めれば水シミュレーションの基本的な準備の完了です。
シミュレーションの下準備として、クルマと背景のモデルを制作します。水溜まりの窪みも細かくつくり込んでおきます。モデルができたらPhoenix FDのシミュレーショングリッドを配置します
Initial fill upの数値を調整し、シミュレーション開始時の水溜まりの水位を設定します
さて、1回目のシミュレーションでは水跳ねの肝となる衝突用オブジェクトに、現実と同じようにクルマを用いてみます。タイヤの回転アニメーションも加えてクルマを水に衝突させたのですがなかなか思ったほど高く水がせり上がりません。そこでSTEP 01で説明した水跳ねのしくみを思い出します。水跳ねが起きるメカニズムで主な推進力となるのは、タイヤの回転ではなくクルマが水を押し込む力です。この基本的なしくみを踏まえて押し込む力に加え、クルマのサイドに水を高くせり上げるような振る舞いができる衝突用オブジェクトに変更します。
様々なパターンの形状をシミュレーションした結果、最終的に行き着いた形状が下図の左下のオブジェクトです。先端の幅を狭くして前方からの水を受け流しやすくし、後方にいくにつれて形状の幅を広くして水跳ね特有の扇が広がったような水のせり上がりをねらいます。このオブジェクトを前輪と後輪にあたる部位に2つ配置し、再びシミュレーションを行います。先端が細く鋭いためタイヤに比べて水を切る力が増え、後方に送る水が増えたことでせり上がる高さも大きくなっているのが見て取れます。正面から見ると山なりに水飛沫が飛散しており、STEP 01で紹介したような水跳ねの理想のかたちに近づいたのではないでしょうか。
一度シミュレーションをしてみましたが、理想の高さまで水がせり上がらないため、クルマに代わる衝突用オブジェクトを作成します
シミュレーションが完了したら、次にKrakatoaを使用してFoamとSplashのレンダリングを行います。Phoenix FDではメッシュによる水の流体表現以外にも、泡と水飛沫の振る舞いもシミュレーションすることができます。この2つの要素は水を表現する上でも非常に重要なもので、水の動きや勢いなど水に対しての影響や規模の大きさを測る上で欠かせない要素となります。泡と水飛沫についてはレンダリングコストの関係上Krakatoaを用いてレンダリングするのですが、そのために必要なデータ出力や方法については「滝」の回で説明しているので今回は省略します。
Phoenix FD Export Particlesを実行し、SplashとFoamをKrakatoaレンダリング用データに変換します
3ds Maxでレンダリングした水と組み合わせた最終的な画が下図です。水を表現するためにこの2つの要素がいかに必要なものかわかるかと思います。
STEP 04:「波紋のしくみ」を考える ~波紋の特徴と再現方法~
Displaceによる波紋エフェクト表現
最後のSTEPでは波紋エフェクトを制作します。連載第13回「雨」(CGWORLD vol.205 2015年9月号)でも紹介したように、水の波紋は音の振動と同じように同心円状に広がります。水の深さが一定であれば振動による抵抗に差がないので、円と円の幅は常に一定の間隔で広がっていくことが波紋の特徴のひとつになります。今回のテーマで使用している水も深さに極端な差はありませんので素材となる波紋の連番画像も以前と同じように、等間隔で広がる円として素材を制作します。
今回のケースも水の波紋は同心円状に等間隔に広がっていきますので、After Effectsのエフェクトコントロールを使用して連番画像を作成します
After Effectsで制作した波紋の連番は、STEP 02の雨の飛沫と同じくParticle Flowによって波紋画像を配置して、後に使用するレンダリング素材を作ります。
STEP 02の雨の飛沫と同じように、Particle Flowを使用して波紋の連番画像を配置します
レンダリングした波紋の連番はPhoenix FDのシミュレーショングリッドに[Displace]モディファイヤを入れ、Mapに適用すると水のメッシュに波紋の形をした盛り上がりを付けることができます。波紋エフェクトを適用した水のレンダリング結果が【4】です。
Phoenix FDのシミュレーショングリッドに[Displace]モディファイヤを適用し、レンダリングした波紋の連番画像を指定すると水に波紋の盛り上がりを追加できます
完成
クルマの水跳ね」はいかがだったでしょうか。STEP 03の水跳ねシミュレーションの際に使用した衝突用オブジェクトですが、気づいた方もいると思いますが船の船首部分を意識してモデリングしております。水を切るための効率的な形状が現実と同じように3DCGでも成立する。昨今のシミュレーションソフトの進化は素晴らしいのひと言です。これからますます物理ベースの精度が上がるはずなので、こうした現象のしくみを理解していくことは今以上に大切になっていきそうですね。
Profile.
-
近藤啓太(ジェットスタジオ)
エフェクトを中心に映像制作をしております
-
JET STUDIO
ゲーム、映画、遊技機映像など幅広く制作を行う、3ds MaxをメインツールとするCGプロダクション。ベトナムにも支社を構え、大規模な制作体制を採っている
www.jetstudio.co.jp