本日はトラブルシューティング枠です。
MRTK3のグラフィックツールであるMixedRealityGraphicsToolsで描画に関する問題が発生しました。
今回はこちらを解消します。なお原因等は後述していますがMRGTに限らずこの問題はURPにおいてカスタムシェーダーを使用した場合全般的に発生する可能性があります。
〇発生した問題
GraphicsToolsStandardShaderの描画が行われず、RenderQueueを2051以上にすることで描画が正常に行われるようになります。
〇環境
・Unity2021.3.21f1(URP)
・MixedRealityGrapihcsTools v0.6.2
〇解消
この問題はURPを使用していることで発生します。
①使用しているUnityでProjectSettingsを開きGraphicsのタブを開きます。
ScriptableRenderPiplineSettingsに設定されているURPSettingsを開きます。
なおここで設定されているURPの設定と実際に使用されるURPの設定はプラットフォーム毎に異なる可能性があります。
QualitySettingsからプラットフォーム毎に使用するURP設定を確認するかターゲットプラットフォームが決まっている場合初めからプラットフォーム毎に異なるURP設定を使用せず、単一の設定を使用するように設定することをお勧めします。
②使用しているURP設定からRenderingタブに指定されているRenderierのリストのアセットを選択します。
③RenderingタブのDepth Priming ModeをDisabledに設定します。
これによって正常にオブジェクトが描画されるようになります。
〇原因
Depth PrimingとはURPにおいて、特定のシェーダーやマテリアルを使用して描画する際に、深度バッファの情報を事前に設定し、レンダリングパフォーマンスを向上させるための機能です。
つまり深度情報をDepth Primingによって設定されるのとシェーダー側の設定でコンフリクトが発生しており、描画が行えないという問題が生じていました。
Shader側でDepthPrimingに対応させるために通常"DepthOnly"、"DepthNormals"というパスを定義する必要があります。
この変更にMRGTシェーダーが対応していないためこのようにある条件下で描画が破断する問題が生じています。
このあたりは実際にもう少し勉強してMRGTに修正PRを提出するところまでやってみたいです。
本日は以上です。