NovaShader icon indicating copy to clipboard operation
NovaShader copied to clipboard

Feature/uber lit shader

Open CyTakayukiKiyohara opened this issue 1 year ago • 3 comments

NovaShaderのLit版の仕様が全入りしました。 かなり変更点が多くなっているので、いったんPRを出させていただきます。 各種端末での詳細なテストは別ブランチで行います。

1. 実装概要

Lit版の実装方針としては、Unlit版のフラグメントシェーダーで計算されるカラーをアルベドカラーとして考えて、そのカラーをUniversalFragmentPBRの入力値としています。そのため、Unlit版のカラーの計算処理を共通で使えるような実装に変更しています。 法線、スペキュラ、メタリックなどの入力値はLit専用のGUIからの設定に基づいて入力しています。 それ以外のパラメータはURPのLit版の実装を参考にして、同じ値を入れるようにしています。 Unlit版に影響を与えないように実装していきましたが、共通化する際に多少コードを変更しています。

2.URPのLit版とのクォリティ面での差異

URPのLit版と下記の差異があります。 (どの差異もクォリティ面ではポジティブな違いです)

  1. SSAOが適用されている
  2. 法線マップが貼られていないときのライティング
  3. バンプスケール
  • SSAOが適用されている Lit版の実装による影響ではないのですが、URPのパーティクルのシェーダーは法線を書き込んでいないため、SSAOによる陰影が生まれていません。ですが、Novaシェーダーが版ではSSAOを有効にすると陰影が生まれます。 分かりにくいですが、地面とティーポットが設置している箇所にうっすらと影が生まれています。 SSAOあり(Nova) SSAO_あり SSAOなし(URP) SSAO_なし URP版で法線を書き込んでいないのはパフォーマンス的なことを考慮しているのかと思いますが、SSAOを有効にすると地面との設置感が生まれることと、今後SSRなどを有効にした際に、エフェクトの反射なども起こせるようになるので、法線は書き込むままにしております。

  • 法線マップが貼られていないときのライティング 法線マップが貼られていない場合、URPでは頂点シェーダーでの法線の正規化が高速化のためにスキップされており、ライティングの結果のクオリティが下がっています。ただ、NovaShaderのUnlit版の処理でそもそも法線が正規化されている点と、クオリティ面がかなり違っていたため、そのままにしています。 法線マップなしライティング(NOVA) 法線マップなしライティング(NOVA) 法線マップなしライティング(URP) 法線マップなしライティング(URP)

  • バンプスケール バンプスケールは法線マップの起伏を大きくするためのパラメータで、URPのLit版にも存在しています。 バンプスケール 1.0倍 バンプスケール_1 バンプスケール 3.0倍 バンプスケール_3 URPのLit版にも存在しているのですが、URP版はモバイルに持っていくと高速化のためにバンプスケールが無効になっています。ですが、URP版のコードを読んでみると、法線のxy要素に乗算しているだけの処理なので、パフォーマンスに大きな影響はなさそうでした。 バンプスケールにカスタムコードを使うように改造すれば、ひび割れが生まれてきたり、壁がへこむような演出も作れそうなのでNOVA版では有効のままにしています。 これが不要なようでしたら削除します。

3. テスト用のシーンの追加

Lit版の実装にあたり、テスト用のシーンを下記の二つ追加しています。

  1. TestUberLit_00( URP版とNova版の差異を調べるテスト )
  2. TestUberLit_01( Nova版のLitに各種機能テスト。Flowmap、Tintmap、Emissionmapなど)

これらのテストを行って、正しく動作していることを確認しています。 テストは手持ちのPixel 6 Proで行いました。 下記のテスト動画では、3本のディレクショナルライトとカメラを回しています。 エフェクトにライトの影響と視線の移動よる鏡面反射が起きていることを確認できます。

Assets/Test/TestUberLit_00( URP版とNova版の差異を調べるテスト ) https://user-images.githubusercontent.com/106138524/182510421-5259dcef-282b-469d-a577-ef062d96c4bc.mp4

Assets/Test/TestUberLit_01( Nova版のLitに各種機能テスト。Flowmap、Tintmap、Emissionmapなど) https://user-images.githubusercontent.com/106138524/182508779-d8c2da05-38ba-4f2a-985d-5093bb079c9f.mp4

CyTakayukiKiyohara avatar Aug 03 '22 02:08 CyTakayukiKiyohara

プロジェクトの問題な気がしていますが、環境反射が効いていないので調査していただきたいです。 通常のURPマテリアルで、スムースな金属マテリアルを作ってもうまく反映されていないので、今回のシェーダの問題ではない気はしています。

image

ビルトインパイプラインでも環境反射は反映されていなさそうですが、ビルトインパイプラインでリフレクションプローブだけはうまく反映されるという謎・・

image

Haruma-K avatar Aug 05 '22 03:08 Haruma-K

Testフォルダは、Demoフォルダを整理してそちらにまとめてしまっていいと思います!(特に分けている理由がなければ

Haruma-K avatar Aug 05 '22 03:08 Haruma-K

79fad49e1aad64721520674027da16f72086d897  Testフォルダの中身をDemoフォルダに移動しています。 これに伴って、Demoフォルダを整理しています。

fca73df7e2fd5d1f5c80ca172feeb568ce34b77a リフレクションプローブに関してはUnityの不具合ですが、 回避方法が分かったので、リフレクションプローブを再作成しています。 これに伴って、Unityのバージョンを2020.3.23f1に上げています。 関連issueは下記です。 https://issuetracker.unity3d.com/issues/the-scenes-lighting-settings-are-not-updated-and-saved-when-auto-generate-option-is-disabled https://issuetracker.unity3d.com/issues/urp-reflection-probe-is-black-after-baking-when-using-the-blit-renderer-feature

CyTakayukiKiyohara avatar Aug 10 '22 01:08 CyTakayukiKiyohara

@CyTakayukiKiyohara

Unityのバージョンを2020.3.23f1に上げています。

これ上がってないかも?です。(ProjectVersion.txtが上がってない) 手元の環境でバージョン上げたら反射が反映されたので、バージョンあげれば問題はなさそうです!

Haruma-K avatar Aug 16 '22 02:08 Haruma-K