特定のワールドでアバターやオブジェクトが真っ黒になる現象、及びiOS 17で白く光る現象について

この記事はVRM1.0対応によるVRM0.xの見た目の影響事例の補足です。


この記事では現在判明している特定のワールドで発生するライティング結果がおかしくなる現象と、その回避方法について紹介いたします。

特定のワールドにて、アバターやオブジェクトが真っ黒になったり、iOS17では中心が黒くそのまわりが白く光る現象のご報告を頂いております。

こちらの現象はUnityEditorにて特定のHDRテクスチャが指定されたSkyboxを用いてライティング情報をベイクした結果、不正なライティング情報になってしまいGI(グローバルイルミネーション)で正常に処理されていない可能性があります。

Windowsで確認した場合
iOS 17で確認した場合

上記の画像は本来は以下のような結果を期待して作成されたワールドです。

現象が発生する可能性のあるパターン

以下の条件が揃うと不正なライティング情報が生成される可能性があることを確認しております。

  • UnityのSwitch Platformで”Windows, Mac, Linux”を選択
  • 輝度の差が大きいHDRテクスチャをSkybox Materialに使用
  • 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)では正常に処理されない可能性が有ることをご留意いただいた上でご使用ください。

Cluster Creators Guide|バーチャル空間での創作を学ぶならをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む