Open15

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

fumiofumio

環境

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

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

fumiofumio

同梱のデモシーンは勿論マゼンタ一色。

まずは、Unity標準の機能でのMaterial更新を試すことにする。(Edit - Rendering - Materials - Convert ~ to HDRP)

fumiofumio

ひとまず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を StandardHDRP/Lit へ変換していくことにする。

fumiofumio

メモ:

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

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

TODO: Water Systemも適用したい

fumiofumio

手動で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での初期値)であったため、計算サイト で試算して、概ねあり得ないことはない値になっていることを確認済(もう少し厳密に確認するべきではあるが)
fumiofumio

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 を弄ったことで境界線がくっきりしているが、これは調整で対応する

fumiofumio

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

fumiofumio

メモ :
一部 Light Leek が出た場合、そのオブジェクトの Lightmap の生成具合をみて、Lightmap の padding を増やす。

それでもダメなら、Mesh Renderer の Stitch Seams を Off にするとうまくいくかもしれない

fumiofumio

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

fumiofumio

メモ :
Lightmap を使わずに、APVでの Light Probe を使ってGIを構成したい場合は下記のようにするのがよさそう
https://note.com/porto942/n/n24457cbe7da0#:~:text=をしましょう。-,Contribute GIのチェック,-1つ解決

そのうえで、Lightmapを使用せずにAPVのみで構成した場合に、Invalid と判定された各メッシュ付近の Probe あたりでディザリングのように表示される場合(Sceme/Game Viewとも)は

Project Settings - HDRP Grobal Settings - Default Volume Profile - Lighting - Probe Volumes Options を調整すると改善できた(が、正道かどうかやパフォーマンス的に問題ないかは未検証)