Unreal Engine 4で波打ち際の泡表現をする方法

お久しぶりです、3DCG背景担当の中村です。
今回はUnreal Engine 4(以下UE4)上の水表現に、波打ち際の泡の表現を簡単に加える方法をご紹介させていただきます。

手法的には今回ご紹介する方法以外にもありますが、
そちらは開発環境によってはそのまま使用できない場合もありますので、今回は汎用的に使用できる表現をご紹介します。

この表現は、Waterマテリアルを割り当てたプレーンに干渉する、別アセットの周囲に疑似的に泡のようなものを出しています。
では早速作り方に進みましょう。

まず、マテリアルを作成します。
そして、そのマテリアルの詳細を下記のように設定します。

・Blend Mode → Translucent
・Lighting Mode → Surface Translucency Volume

これがマテリアルの基本設定です。
残念ながら後述の理由で半透明マテリアルでしか使えません……。

続いて、下記画像のようにノードを加えていき、マテリアルのエミッシブカラーに接続します。

画像にもあるように【Depth Fade】ノードを使用するため、半透明でしか使えません……。

【Depth Fade】ノードを使用することによって、水面用プレーンアセットに干渉した物の判定が取れるようになります。
干渉物というのは今回で言えば、水面に突き刺さっているcubeアセットのようなものです。

出来上がったマテリアルをプレーンに割り当てると、上記画像の右のような状態になります。

ちなみにこの状態だけならば、【Depth Fade】ノードのFadeDistanceに固定値を接続するだけでも同様の状態が出来ます。
しかし、今回は【Noise】ノードなどを加えています。これらを使用する理由は後述になります。

これだけだと、黒いプレーンに謎の白い直線がリピートしているだけの物になってしまいますので、
ベースカラーとノーマルを加えていきます。お好みでオパシティを入れても良いでしょう。

ここでポイントですが、ノーマルはUVスクロールアニメーションをするように作成してください。
出来上がった物を適用すると、上記画像の右のような状態が出来上がります。

泡表現がなぜ直線状ではなくなったのかと言いますと、【Depth Fade】ノード以下に接続していました【Noise】ノードのおかげです。
ノーマルを接続したことによって、【Noise】ノードが役割を果たして直線状だった泡がノーマルに合わせて崩れます。
ノーマルをUVスクロールアニメーションさせることによって、複雑な崩れ方をしますので、より自然な表現になります。

ここからさらにオパシティにも【Depth Fade】ノードを使用したりするとクオリティを上げられます。

泡表現は他にも、【Distance To Nearest Surface】ノードを使用して表現する手法もあります。
ですが、【Distance To Nearest Surface】ノードは、
“機能レベル 5 のプラットフォームのみサポートしています (DX-11 以上)”の物にしか対応していませんので、使えない場合もあります。

今回ご紹介した手法はクオリティ的には【Distance To Nearest Surface】ノードを使用した表現には劣りますが、
簡単かつ【Distance To Nearest Surface】ノードが使用できない環境でも使える可能性がありますので、そういった場合は是非お試しください。

それでは、今回はこの辺りで失礼します。

(Visited 3,910 times, 1 visits today)

コメント投稿は締め切りました。