【Unity】URPのComplex Litシェーダでクリアコーティングされたマテリアルを作る

UnityのUniversal Render PipelineでComplex LitシェーダのClear Coatを使う方法についてまとめます。

Unity2021.1.11f1
Universal RP 11.0.0

URPでクリアコート?

Universal Render Pipelineでは10.1.0でComplex Litというシェーダが追加されました。
これはLitに機能追加されたもので、Litよりも処理負荷が大きく、ハードウェア要件も厳しいものとなります。
ハードウェアがComplex Litに対応していない場合はLitにフォールバックされるようです。

さてこのComplex Litには、シンプルなクリアコートの実装がされています。
この記事ではこのクリアコートの使い方についてまとめます。

クリアコートとは?

URPのLitシェーダは物理ベースなのでフォトリアルな材質の再現を得意とします。
しかしこれはあくまで一つの層における反射のみを考慮したモデルです。

現実には複数の層における反射を考慮しないと再現できないものが存在します。
例えば自動車のクリアコートや、ニスの塗られた木材です。
クリアコートシェーダはこのように、ある素材が透明な薄い層で覆われている素材を再現します。

使い方

さてそれでは実際にこのクリアコートを使ってみます。
URPのセットアップについてはこの記事では説明しませんので、必要に応じて以下の記事を参照してください。

light11.hatenadiary.com

URPをセットアップしたらマテリアルを作りUniversal Render Pipeline/Complex Litシェーダをアサインします。
Clear Coatにチェックを入れて、MaskとSmoothnessを1にしておきます。
ベースの質感は適当に設定しておきます。今回はざらざらな誘電体にしました(Metallic = 0 / Smoothness = 0.169)。

f:id:halya_11:20210714122054p:plain
マテリアル

このマテリアルをアサインすると以下のようなレンダリング結果になります。

f:id:halya_11:20210714123131p:plain
ON/OFF比較

なおClear CoatのMaskとSmoothnessの値はテクスチャで指定することもできます。
その場合、R値がMask、G値がSmoothnessとなります。

パフォーマンス

クリアコートを使う場合、ライティングの計算を各層毎に行います。
つまり、ライティング計算に関して言えばクリアコートを使わない場合と比較して約二倍の処理負荷であるということができます。

PBRにおいてライティング計算の処理負荷は大きいので、使用する際にはパフォーマンスに注意が必要です。

関連

light11.hatenadiary.com

参考

docs.unity3d.com