げーむ開発徒然日記~怠惰のために勤勉~

Unreal Engineや3DCG制作について学んだことを記事にしていきます

「オーストラリアの自然」アセットで使われている道路マテリアルの中身を見てみる(1)

※この記事は、シェーダーに精通していない私の勉強のための備忘録みたいなものです。そのため、間違った部分がある場合がございます。

こんにちは、らくするです。

すっかりクリスマスシーズンですね。

今回は、永続無料コンテンツである「オーストラリアの自然」で使われている道路マテリアルの中身がどうなっているのか、ざっくりと見ていきたいと思います。

www.unrealengine.com

なぜ中身を見ようと思ったのかと言いますと、この道路、単純なマテリアルではなく地面と馴染ませるようにされていたり(馴染ませる部分の詳細についてはまた後日ですが…)、その他いろいろと工夫されている点が多い(らしい?)ので一度見てみたかったからです。

道路のメッシュについて

f:id:raksul_01:20211213105242p:plain

道路メッシュ

道路のメッシュは画像のように、おおよそ長さ3500cm,幅897cmとなっています。

緑色のフレームは単純コリジョンです。

f:id:raksul_01:20211213110240p:plain

ベースカラーテクスチャ

また、ベースカラーテクスチャは上のように4096*1024となっており、メッシュのUVはV座標0→1までぴっちり配置なので長さ方向に対して若干縮められますね。

マテリアルについて

それでは中身を見ていきます。全体は以下の画像の通りです。

f:id:raksul_01:20211213110644p:plain

道路マテリアル(全体)

これでは少しわかりづらいので、一旦下側の部分と最後のContactShadows部分を排除します。ちなみに排除した下側部分は、ランドスケープの地面マテリアルとより馴染ませるための部分、ContactShadowsは陰影の調整部分です(内部でワールドポジションオフセットとピクセル深度オフセットを調整している)。

f:id:raksul_01:20211213152208p:plain

今回見る部分以外を排除したマテリアル

大まかな内容は画像中にコメントで入れておきました。

以下、備考です。

・(ベースカラーについて)

 中央上のオーバーレイについてはみつまめ杏仁さんが以下のツイートで非常にわかりやすく図説されていますが、思った以上に計算コストが高そうです。

・(PDOについて)

 道路メッシュは略半円筒形状になっており、ピクセル深度オフセット(PDO)によって、メッシュのぶっ刺し感を低減しています。PDOが低いほどカメラ奥行方向の深度が深い(奥にある)と見做されるやつで、ディザ抜きと併用した馴染ませ用途なんかでもよく使われてます。

 このマテリアルではベースのPDOと詳細のPDOとを乗算していますが、実際には今回簡易化のために排除してしまった部分が馴染ませの肝となる部分なので、ここまでではたぶん見栄え…というかぶっ刺し感の低減には大きく影響はしません(大事なところが抜けていてごめんなさい)。

・(法線の合成について)

 上の画像中ではだいぶ割愛して書きましたが、法線の合成はおそらく慣用的な手法で計算しているものと思われます。合成計算について気になる方は是非調べてみてください。BlendAngleCorrectedNormalsなんかでもいけるのではないでしょうか。

 また、MF_ReconstructZ中で使われているDeriveNormalZは、二軸の成分から残りの成分を計算するためのものです。わかりやすさのために、FP_GunのノーマルマップからRG成分だけを抜き出して、法線の再構築(B成分の計算)を行いました。

f:id:raksul_01:20211213153325p:plain

DeriveNormalZによる法線の再構築

 このように、法線情報は2軸成分があれば残り1軸の成分は計算により求められるので、通常のノーマルマップのBチャンネルに別の情報を入れることもできます。これはメモリ節約術として時々見かけることがあります。圧縮形式などなどが変わってくるのでテクスチャの品質に影響したりするかも…。

 

ストアのコンテンツは本当に教科書ですね。

次回、今回排除した部分について見ていけたらと思います。