発端はこちら。
【お知らせ】
VR宇宙博物館コスモリアにつきまして、グラフィックボード: Radeon (主に7800,7900)環境の一部においてワールドに入室できない事象を確認しており、現在対応を進めています。
ご不便をおかけし申し訳ありません。
進展があり次第、お知らせいたします。
(えんでばー)— 天文仮想研究所 VSP (@vsp_vrc) April 20, 2024
VRChatにて、「VR宇宙博物館 コスモリア Cosmoria」ワールドに入ろうとすると、ロード中にクラッシュしてしまうというもの。
RX7000シリーズが対象になっているようですが、RX6000シリーズでも同様です。ドライバのバージョンという関係でもなさそうでした。
D24_UNORM_S8_UINTの深度テクスチャフォーマットは対応していない
VRChatのログ(\AppData\LocalLow\VRChat\VRChat内)を確認したところ、一番最後にRenderTextureの生成に失敗したところでログが途切れていることが分かりました。
RenderTexture.Create failed: depth/stencil format unsupported - D24 UNorm S8 UInt (92). There is no compatible format on this platform or this fallback to a compatible format is disabled in the import inspector.
サポートしていないフォーマットであるか、フォールバックが無効になっているという感じですね。
さて、ここでサポートしていないとされる「D24 UNorm S8 UInt
」とやらですが、素人なりにあれこれ調べてみるとRadeonでは対応していなさそうな情報が少しだけ見つかりました。
DirectXではなくVulkanの情報ですが、D24_UNORM_S8_UINTは非対応でD32_SFLOAT_S8_UINTの深度テクスチャを使う必要があるようです。
MESAが出しているAMD GPU向けのVulkanドライバー「RADV」のBugzilla(bugs.freedesktop.org/show_bug.cgi?id=106528 ※現在証明書切れ)にも、サポートしていない旨が書かれていました。32bitフォーマットと使用VRAM量が変わらないことや、RadeonSIでは内部的に32bitを使用していること、AMDVLKでも非サポートだし仕様で求められていないというのが主な理由のようです。
D24_UNORM_S8_UINTは非対応でも、D32_SFLOAT_S8_UINTを使えばほとんどの場合問題ないとのこと。
無事直った
RadeonVRの会にて情報提供をしたところ、該当する箇所があったので修正したとのことです。こちらでもワールドに入れることを確認しました。無事直ったヤッター。
D24_UNORM_S8_UINTには気をつけよう?
NVIDIA GeForceの他には、QualcommのAdreno、ArmのMaliでは扱えるフォーマットなので、所々使われている可能性はありそうです。例えば、買ってきたアセットに設定されていた深度テクスチャがD24_UNORM_S8_UINT形式だったということはありそうですね。
エラーメッセージを見た限りでは、対応できる形式にフォールバックすることもできるみたいですが、そこまではよく分かりませんでした。