VRChat にはシールドレベルによって他のアバターのシェーダーをフォールバックシェーダーに切り替える機能があります。これによって、眼鏡のレンズなどの半透明なオブジェクトが不透明に表示されてしまう場合があります。
シェーダーに lilToon を使っていれば、以下の記事のように GUI からプロパティを設定することでフォールバックシェーダーを設定できます。しかし、眼鏡のレンズは lilToon 以外のシェーダーを使っていることも多そうです12。
そこで、本記事では GUI からフォールバックシェーダーを設定するのに対応していないシェーダーに対してフォールバックシェーダーを設定する方法について解説します。Mai Glass Shader!3をベースに説明しますが、おそらく他のシェーダーにも適用できる内容だと思います。
シェーダーに VRCFallback タグを設定する
公式ドキュメントに記載の通り、シェーダーに VRCFallback
タグを設定することで、フォールバックシェーダーを設定することができます。
Inspector でレンズ部分に当たっているマテリアルを探し、 Edit...
をクリックします。
そうすると、エディタが起動してシェーダーの定義部分のソースコードが開かれます。ドキュメントに記載がないのですが、タグを設定する場所は SubShader
内です。
Tags{ "RenderType" = "Opaque" "Queue" = "Transparent+0" "IsEmissive" = "true" }
のような行を探してください(他のシェーダーでは異なるかもしれません)。見つけたら、以下のように変更します。
Tags{ "RenderType" = "Opaque" "Queue" = "Transparent+0" "IsEmissive" = "true" "VRCFallback"
= "Hidden" }
ここではフォールバックシェーダーを Hidden
に設定しているため、うまく設定できていれば眼鏡のレンズが表示されなくなるはずです。変更を保存し、Unity に戻るとコンパイルが走ります。VRChat SDK のコントロールパネルから Build & Publish し、ラジアルメニューの オプション>アバター>フォールバックシェーダー で表示を確認してください。
問題なければ、これで対応完了です。