Built-in PRなシーンをHDRP Adaptive Probe Volumeで再構築してみるトライ

環境
- Unity 2022.2.17 (2023/5/6時点の最新)
- Windows 11
- マシンスペック:i5-13600K / RTX4090
- HDPR Core Template

とりあえず、上記で新規プロジェクトを作成して起動。
ついでにPlastic SCM周りでエラー吐いてたので、Engineering パッケージセットはRemoveしておく(今回不要なはずなので)

対象アセットは、Japanese Apartment (https://assetstore.unity.com/packages/3d/environments/japanese-apartment-126497)
方針は下記で。
- UnityのHDRPと対象アセットのみでセットアップし切る
- VolumeやLightウィンドウまわりの設定は、HDRP Core Templateをほぼ流用でいく
- LightMapをBakeした場合とAdaptive Probe Volumeのみの場合とで比較できるようにする

同梱のデモシーンは勿論マゼンタ一色。
まずは、Unity標準の機能でのMaterial更新を試すことにする。(Edit - Rendering - Materials - Convert ~ to HDRP)

ひとまずJP_Apartment
以下のMaterialすべてを選択して、Convert実行。
3分程度待って完了したものの、
- Rug系のMaterialでMaskテクスチャ(おそらくMetalicなどを各RGBAチャンネルに割り当てて合成したテクスチャ)がすべての値が0で生成されてしまい、真っ暗
- 床や電子レンジなどは元のMaterialのMetalic/Smoothnessなどの値が適切に引き継がれておらず、テッカテカ
// TODO スクショ貼る
いちおうこの段階でRevertする前に、LightMapのBakeだけトライ。
Lightウィンドウで、
-
Lightmapper
:Progressive GPU
-
Lighting Mode
:Baked Indirect
と変更し、Generate。
爆速で終わるものの、ルックはいまいちなので、
手動でMaterialを Standard
→ HDRP/Lit
へ変換していくことにする。

メモ:
- Edit - Rendering のメニューもいろいろ増えていて、SRPへの移行/調整の利便性向上していそう
- Scene ViewのGIの表示周りはこういう時に本当にありがたい(HDRPサンプルシーンの例)

TODO: 余裕があれば、HDRPサンプルのように特定領域のみのVolumeを配置して露出などの補正をしてみる
TODO: Water Systemも適用したい

手動でHDRP/Litを適用していこうとしたが、そもそもMetalic/SmoothnessをTextureから与える手段が、MaskMapのみであったので、やはりEdit - Rendering - Materials - Convert ~ to HDRP
での変換後に調整した。
ほか、Reflection Probeの範囲も少し調整。
Directional Light はもとのDemoシーンからRotateなどの値は変更せず、SkyboxもHDRPのデフォルトのHDRISkyを流用したため、夕方のようなセッティングになっているが、そのまま作業した。
LightMapをBakeした状態のGame Viewが下記。(2枚目がBuilt-inのもの)
方針としては、ある程度
Directional Light を変更していないため、Indirectによって画像左下の壁と床部分がかなり明るくなってしまっている。
Directional Lightの角度から、日没に近くなるように、500Lux 、2000〜3000Kelvin に設定し、LightMapをBake。(お試しBakeなのでだいぶん荒い)
また、Built-inのStandardシェーダーのSmoothnessの値を流用すると、下記のようにフレネルでの効果が強めに出るのか、かなり白飛びしてしまうような見た目になる。(もちろんReflection Probeの設定変更が必要な可能性も)
Reflection Probeの設定で対処できそう
// TODO: のちほど、すべて一括変換→MaskMapが真っ暗なもののみ除外→Reflection Probe調整の流れで通し確認
そのため、いったん元のDemoシーンの見た目から乖離することになるが、くっきりした鏡のような映り込みの再現はあきらめ、なるべく現実の見た目、主観で「それっぽい印象」に近づけばよいという方向性で調整した。
例として、
布、木といった素材は、SmoothnessもMetalicもほぼ0金属素材などはMetalic Remappingを0~20% 、Smoothness Remappingを0~30%程度Amblient Ocllusion Remappingは一旦0~100%-
Emissive Mapの設定があるもので、明確に発光しているものは、Emission IntensityをHDRP/Litに変換したあとの値 * 1000
としたこれはざっくりLightコンポーネントが600Lumen(HDRPでの初期値)であったため、計算サイト で試算して、概ねあり得ないことはない値になっていることを確認済(もう少し厳密に確認するべきではあるが)

// TODO: https://www.klab.com/jp/blog/creative/2019/22443072.html https://forum.unity.com/threads/lightmapping-troubleshooting-guide.1340936/ を参考に調整しなおし
おそらくReflection Probe の Blend Distance がHDRPとBuilt-inとで取り扱いが違いそうな雰囲気
&
Planar Reflection Probe も利用してみる ひとまずこれは不要そう

Edit - Rendering - Materials - Convert ~ to HDRP
での変換をベースに、必要な最低限の調整のみを実施するパターンを試した
変換後、下記を実施
- HDRP Core Template の Global Volume をコピーして設定
- Volume を Scene に追加して、コピーした VolumeGlobal に
Physically Based Sky
を追加して設定しておく - Lightウィンドウで、LightSettingsを新規作成
- さらに、Lightmapper: Progressive GPU 、 Lighting Mode : Baked Indirect に変更
- さきほどの VolumeGlobal は EnvironmentタブのProfileに割り当て
- Reflection Probeを調整
- すべてのProbeで BlendDistance を0に変更(これで自動変換後のSmoothnessでもいい感じになるはず)
- 一部箇所で、影響範囲が適切でなくなっている箇所の BoundingBox を調整
- Directional Light を角度に合わせて 日没に近くなるように、500Lux 、2000〜3000Kelvin に設定
- Material の調整
-
_ILM
がついているMaterialでUse Emission Intensity
を On にして、Emission Intensity
を1000倍 - Surface Inputs の MaskMap が真っ黒なMaterialは、アサインを外す(ついでにゴミデータのはずなので削除)
-
これで粗めのLightMapをBakeして下記
途中のReflection Probeの調整で、BlendDistance を弄ったことで境界線がくっきりしているが、これは調整で対応する

メモ :
壁面などでにじみが大きい場合は Lightmapping Settings の Environment Samples を挙げるときれいに焼ける

メモ :
一部 Light Leek が出た場合、そのオブジェクトの Lightmap の生成具合をみて、Lightmap の padding を増やす。
それでもダメなら、Mesh Renderer の Stitch Seams を Off にするとうまくいくかもしれない

メモ :
APVの設定にすると、従来の Light Probe は利用できなくなる。(つまりどちらかだけしか有効にできない)。この設定が Project Settings にあるのでブランチ切るか、別プロジェクトにする、みたいな管理が良さそう

メモ :
Lightmap を使わずに、APVでの Light Probe を使ってGIを構成したい場合は下記のようにするのがよさそう
そのうえで、Lightmapを使用せずにAPVのみで構成した場合に、Invalid と判定された各メッシュ付近の Probe あたりでディザリングのように表示される場合(Sceme/Game Viewとも)は
Project Settings - HDRP Grobal Settings - Default Volume Profile - Lighting - Probe Volumes Options を調整すると改善できた(が、正道かどうかやパフォーマンス的に問題ないかは未検証)

APVでやりたかったことと、出てきた問題の対処方法はほぼほぼすべてこの動画の説明されている