この記事はVRM1.0対応によるVRM0.xの見た目の影響事例の補足です。
---
この記事では現在判明している特定のワールドで発生するライティング結果がおかしくなる現象と、その回避方法について紹介いたします。
特定のHDRテクスチャが指定されたSkyboxを使用してベイクした場合に不正なライティング情報になる
特定のワールドにて、アバターやオブジェクトが真っ黒になったり、iOS17では中心が黒くそのまわりが白く光る現象のご報告を頂いております。
こちらの現象はUnityEditorにて特定のHDRテクスチャが指定されたSkyboxを用いてライティング情報をベイクした結果、不正なライティング情報になってしまいGI(グローバルイルミネーション)で正常に処理されていない可能性があります。
Windowsで確認した場合
iOS 17で確認した場合
上記の画像は本来は以下のような結果を期待して作成されたワールドです。
現象が発生する可能性のあるパターン
以下の条件が揃うと不正なライティング情報が生成される可能性があることを確認しております。
- UnityのSwitch Platformで”Windows, Mac, Linux”を選択
- 輝度の差が大きいHDRテクスチャをSkybox Materialに使用
- 以下の記事でご紹介させて頂いたアセット Skybox Series Free に含まれる “PlanetaryEarth” などが該当します
- https://creator.cluster.mu/2021/08/02/skybox/
- こちらのテクスチャは太陽光の部分の輝度がとても大きいテクスチャとなっています
- 以下の記事でご紹介させて頂いたアセット Skybox Series Free に含まれる “PlanetaryEarth” などが該当します
- LightProbeGroupコンポーネントを使用
- Post-process Volumeを使用し、Bloomを有効化 (iOS 17の場合)
- iOS17の白く光る現象については、Bloom処理に不正な数値が渡っていると考えられます
- “Generate Lighting”を実施
UnityEditor上で不正なライティングになっているかどうかを確認する場合はGenerate Lightingを実施した後のシーンにMToonシェーダーを持つRenderer(アバターなど)を配置することで判別できます。デバイスにも依りますが真っ黒に描画された場合は不正なライティング情報になっている可能性があります。
またUnityでのデバッグに慣れている方向けの確認方法となりますが、Unity搭載のフレームデバッガーを使用する方法も紹介させていただきます。フレームデバッガーでオブジェクト描画時のドローコールを表示して、ShaderPropertiesのunity_SHとつく項目がNaN(非数)になっていれば不正なライティングになっていると考えられます。
回避策
HDR画像を編集して輝度を調整する
HDR画像内の輝度の差が大きい場合に発生することを確認しているため、HDR画像自体を編集して輝度を調整することで、本件の現象を回避できる可能性があります。
Skyboxに使用されているテクスチャのフォーマットをRGBA 32 bitに変更する
こちらの方法はHDRテクスチャに格納されている輝度の情報の正確性が失われる可能性がありますが、現象を回避できる可能性があります。
他のSkybox Materialを試す
特定のSkyboxでのみ発生する可能性があるため、差し支えなければ他のSkybox Materialをご検討ください。
Switch PlatformでAndroidに切り替えてから”Generate Lighting”を実施する (非推奨)
非推奨な方法ではありますが、Build Settings からSwitch PlatformでAndroidに切り替えた上で”Generate Lighting”を実施すると、Android向けのライティング生成処理が実施され、結果的に正常なライティング情報が生成される可能性があります。
この方法はAndroid向けの処理となるため意図しないライティング情報が生成される可能性が有ること、及びAndroid以外のプラットフォーム(Windows、Mac、iOS)では正常に処理されない可能性が有ることをご留意いただいた上でご使用ください。