ライトマップを再利用して  遮蔽箇所の反射を抑える

画作り

以前に掲載した記事の関連になりますので、

まずはコチラの記事をお読み頂くことをおススメします。

 

つまり、狭くなっていて光が届かない場所なのにもかかわらず、

リフレクションプローブによって強制的に出てしまう反射をなんとかして抑えよう、という話です。

 

上記の記事ではオクルージョン用のテクスチャを別途用意していますが、

まぁまぁ面倒な工程なので、もっと手軽にできないかを考えてみました。

 

 

 ライトマップを使ってみる

そもそもライトマップというのはどれだけの明るさで照らされているかを記録したテクスチャであり、

反射オクルージョンとは別物なのですが、狭いところが暗くなるという事は、

暗いところを反射するからおのずと反射が無いように見えるという事なので、

反射オクルージョンテクスチャとして再利用しても、

そこまで変な見え方はしないのではないかと思います。

Unity シェーダー ライトマップ

 

 

 ビルトインシェーダーを改造する

HDRP の Shader Graph には、標準でアンビエントオクルージョンと、

スペキュラーオクルージョンを分ける機能が付いています。

Unity シェーダーグラフ

 

しかし、ビルトインパイプラインにはその機能が付いていないので、

上述の記事の通りに、まずはビルトインシェーダーを改造します。

 

 

 シェーダーでライトマップを再利用する

 手書きシェーダー

以下の記述でライトマップを利用できます。

 

 Amplify Shader Editor

Fetch Lightmap Value という便利なノードが用意されています。

Unity シェーダー ライトマップ

 

 

 ライトマップの値を調整する

ライトマップをただそのまま利用すると、例えば暗めの場合、

本来は反射がしっかり出るはずのところまで抑えてしまうので、

丁度よく遮蔽箇所辺りだけに利くように、コントラストや明るさを調整する必要があります。

 

また、HDR画像のため1以上の値を取る可能性があるので、

最終的に0~1でクランプして Occlusion に繋げると良いでしょう。

 

Unity シェーダー ライトマップ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)