※この記事は、シェーダーに精通していない私の勉強のための備忘録みたいなものです。そのため、間違った部分がある場合がございます。
こんにちは、らくするです。
すっかりクリスマスシーズンですね。
今回は、永続無料コンテンツである「オーストラリアの自然」で使われている道路マテリアルの中身がどうなっているのか、ざっくりと見ていきたいと思います。
なぜ中身を見ようと思ったのかと言いますと、この道路、単純なマテリアルではなく地面と馴染ませるようにされていたり(馴染ませる部分の詳細についてはまた後日ですが…)、その他いろいろと工夫されている点が多い(らしい?)ので一度見てみたかったからです。
道路のメッシュについて
道路のメッシュは画像のように、おおよそ長さ3500cm,幅897cmとなっています。
緑色のフレームは単純コリジョンです。
また、ベースカラーテクスチャは上のように4096*1024となっており、メッシュのUVはV座標0→1までぴっちり配置なので長さ方向に対して若干縮められますね。
マテリアルについて
それでは中身を見ていきます。全体は以下の画像の通りです。
これでは少しわかりづらいので、一旦下側の部分と最後のContactShadows部分を排除します。ちなみに排除した下側部分は、ランドスケープの地面マテリアルとより馴染ませるための部分、ContactShadowsは陰影の調整部分です(内部でワールドポジションオフセットとピクセル深度オフセットを調整している)。
大まかな内容は画像中にコメントで入れておきました。
以下、備考です。
・(ベースカラーについて)
中央上のオーバーレイについてはみつまめ杏仁さんが以下のツイートで非常にわかりやすく図説されていますが、思った以上に計算コストが高そうです。
ゲーム画面でPhotoshopのオーバーレイと同じ表現がコスト高なことを説明したくて調べてたら、UE4にマテリアル関数が用意されてて、それを調べたらとても解りやすかった件#UI制作 pic.twitter.com/DhHXlMpkGV
— みつまめ杏仁 (@MMAn_nin) 2020年4月21日
・(PDOについて)
道路メッシュは略半円筒形状になっており、ピクセル深度オフセット(PDO)によって、メッシュのぶっ刺し感を低減しています。PDOが低いほどカメラ奥行方向の深度が深い(奥にある)と見做されるやつで、ディザ抜きと併用した馴染ませ用途なんかでもよく使われてます。
このマテリアルではベースのPDOと詳細のPDOとを乗算していますが、実際には今回簡易化のために排除してしまった部分が馴染ませの肝となる部分なので、ここまでではたぶん見栄え…というかぶっ刺し感の低減には大きく影響はしません(大事なところが抜けていてごめんなさい)。
・(法線の合成について)
上の画像中ではだいぶ割愛して書きましたが、法線の合成はおそらく慣用的な手法で計算しているものと思われます。合成計算について気になる方は是非調べてみてください。BlendAngleCorrectedNormalsなんかでもいけるのではないでしょうか。
また、MF_ReconstructZ中で使われているDeriveNormalZは、二軸の成分から残りの成分を計算するためのものです。わかりやすさのために、FP_GunのノーマルマップからRG成分だけを抜き出して、法線の再構築(B成分の計算)を行いました。
このように、法線情報は2軸成分があれば残り1軸の成分は計算により求められるので、通常のノーマルマップのBチャンネルに別の情報を入れることもできます。これはメモリ節約術として時々見かけることがあります。圧縮形式などなどが変わってくるのでテクスチャの品質に影響したりするかも…。
ストアのコンテンツは本当に教科書ですね。
次回、今回排除した部分について見ていけたらと思います。