Shader Blocking and Fallback System
このページでは、Shader Blocking Systemの概要と動作、そして特定のシェーダーがブロックされたアバターを使用しているユーザーに対して、シェーダーが適切にフォールバックされるようにシェーダー作者が対応する方法について説明します。
VRChat 2021.4.2 フォールバックシステムのアップグレード
シェーダーのフォールバックの改善は、シェーダー先頭の「Tags」フィールドを使用することで機能します。
Tags{"Queue"="Geometry"}
tags フィールドはデフォルトで次のようになっている場合があります。
VRCFallback という名前で別のタグを追加することで、どのフォールバックシェーダーを使用しようとするかを指定できます。
Tags{"Queue"="Geometry" "VRCFallback"="Toon"}
一部のフォールバックタグは組み合わせ可能です。例えば ToonCutout: のように使用できます。
Tags{"Queue"="Geometry" "VRCFallback"="ToonCutout"}
サポートされているタグは以下のとおりです。
Unlit
VertexLit
Toon
Transparent
Cutout
Fade
Particle
Sprite
Matcap
MobileToon
DoubleSided
Hidden //(this will hide the mesh from view if the shader is blocked, useful for things like raymarching effects.)
toonstandard
toonstandardoutline
Toon と Unlit は、より細かく制御するために Transparent、Cutout、Fade タグと組み合わせることもできます。さらに Toon は「DoubleSided」や「DoubleSidedCutout」といったバリエーションもサポートしています。
Toon と一緒に Transparent または Fade タグを使用すると、Transparent Unlit にフォールバックされる点にご注意ください。フォールバックタグを選ぶ際にはこの点を考慮するとよいでしょう。
それ以外のタグを指定した場合は、Standard シェーダーへのフォールバックになります。
toonstandard および toonstandardoutline タグは特殊で、組み合わせることができません。これらはそれぞれ VRChat/Mobile/Toon Standard および VRChat/Mobile/Toon Standard (Outline) シェーダーへのフォールバックを保証します。同名のキーワードとプロパティはすべてコピーされます。
タグが指定されていない場合は、シェーダー名やキーワードなどのパターンに従う旧来のフォールバックシステムが使用されます。
現在では、以下を含む Standard シェーダーのすべてのパラメータをフォールバックマテリアルにコピーします。
_MainTex
_MetallicGlossMap
_SpecGlossMap
_BumpMap
_ParallaxMap
_OcclusionMap
_EmissionMap
_DetailMask
_DetailAlbedoMap
_DetailNormalMap
_Color
_EmissionColor
_SpecColor
_Cutoff
_Glossiness
_GlossMapScale
_SpecularHighlights
_GlossyReflections
_SmoothnessTextureChannel
_Metallic
_SpecularHighlights
_GlossyReflections
_BumpScale
_Parallax
_OcclusionStrength
_DetailNormalMapScale
_UVSec
_Mode
_SrcBlend
_DstBlend
_ZWrite
旧フォールバックシステム
シェーダーがセーフティシステムによってブロックされた場合、まず以下のリストにある内部で事前コンパイルされたシェーダーのいずれかに該当するかどうかが確認されます。
"Standard",
"Standard (Specular setup)",
"Effects/Rim",
"Effects/GlowAdditiveSimple",
"Legacy Shaders/Bumped Diffuse",
"Legacy Shaders/Bumped Specular",
"Legacy Shaders/Decal",
"Legacy Shaders/Diffuse",
"Legacy Shaders/Diffuse Detail",
"Legacy Shaders/Diffuse Fast",
"Legacy Shaders/Lightmapped/Diffuse",
"Legacy Shaders/Lightmapped/Specular",
"Legacy Shaders/Lightmapped/VertexLit",
"Legacy Shaders/Parallax Diffuse",
"Legacy Shaders/Parallax Specular",
"Legacy Shaders/Reflective/Bumped Diffuse",
"Legacy Shaders/Reflective/Bumped Specular",
"Legacy Shaders/Reflective/Bumped Unlit",
"Legacy Shaders/Reflective/Bumped VertexLit",
"Legacy Shaders/Reflective/Diffuse",
"Legacy Shaders/Reflective/Parallax Diffuse",
"Legacy Shaders/Reflective/Parallax Specular",
"Legacy Shaders/Reflective/Specular",
"Legacy Shaders/Reflective/VertexLit",
"Legacy Shaders/Self-Illum/Bumped Diffuse",
"Legacy Shaders/Self-Illum/Bumped Specular",
"Legacy Shaders/Self-Illum/Diffuse",
"Legacy Shaders/Self-Illum/Parallax Diffuse",
"Legacy Shaders/Self-Illum/Parallax Specular",
"Legacy Shaders/Self-Illum/Specular",
"Legacy Shaders/Self-Illum/VertexLit",
"Legacy Shaders/Specular",
"Legacy Shaders/Transparent/Bumped Diffuse",
"Legacy Shaders/Transparent/Bumped Specular",
"Legacy Shaders/Transparent/Cutout/Bumped Diffuse",
"Legacy Shaders/Transparent/Cutout/Bumped Specular",
"Legacy Shaders/Transparent/Cutout/Diffuse",
"Legacy Shaders/Transparent/Cutout/Soft Edge Unlit",
"Legacy Shaders/Transparent/Cutout/Specular",
"Legacy Shaders/Transparent/Cutout/VertexLit",
"Legacy Shaders/Transparent/Diffuse",
"Legacy Shaders/Transparent/Parallax Diffuse",
"Legacy Shaders/Transparent/Parallax Specular",
"Legacy Shaders/Transparent/Specular",
"Legacy Shaders/Transparent/VertexLit",
"Legacy Shaders/VertexLit",
"MatCap/Vertex/Textured Lit",
"Mobile/Bumped Diffuse",
"Mobile/Bumped Specular",
"Mobile/Bumped Specular (1 Directional Light)",
"Mobile/Diffuse",
"Mobile/Unlit (Supports Lightmap)",
"Mobile/Particles/Additive",
"Mobile/Particles/Alpha Blended",
"Mobile/Particles/Multiply",
"Mobile/Particles/VertexLit Blended",
"Particles/~Additive-Multiply",
"Particles/Additive",
"Particles/Additive (Soft)",
"Particles/Alpha Blended",
"Particles/Alpha Blended Premultiply",
"Particles/Anim Alpha Blended",
"Particles/Multiply",
"Particles/Multiply (Double)",
"Particles/VertexLit Blended",
"Sprites/Default",
"Sprites/Diffuse",
"Toon/Lit",
"Toon/Lit (Double)",
"Toon/Lit Cutout",
"Toon/Lit Cutout (Double)",
"Toon/Lit Outline",
"UI/Default",
"Unlit/FailShader",
"VRChat/UI/Default"
内部シェーダーが一致した場合、フォールバックとして同じタイプの新しいシェーダーが使用されますが、内部でコンパイルされたシェーダーが適用されます。すべてのパラメータはコピーされます。新しいバージョンや含まれていないバリエーションは置き換えられるため、動作しません。
内部でシェーダーが一致しない場合、シェーダー名(ファイル名ではなく、シェーダーソースの先頭行に記述されたもの)を使用して特定の識別機能を照合し、類似タイプのフォールバックシェーダーに置き換えます。
"Unlit",
"VertexLit",
"Toon",
"Outline",
"Transparent",
"Fade",
"Cutout",
"Particle",
"Sprite",
"MatCap"
これらの名前は、シェーダー名のフル文字列内のどこにあっても機能します。
さらに、一部のシェーダープロパティも検索されます。
"_Ramp" == "Toon"
"_ALPHABLEND_ON" == "Transparent"
"_ALPHATEST_ON" == "Cutout"
すべての照合は、大文字と小文字を区別します。
一致した名前に近似するフォールバックマテリアルの作成が試みられます。例えば、"Sprite" を含む名前は、Unityの組み込みシェーダーである "Sprites/Default" にフォールバックされます。
"Toon" と "Cutout"、または "Toon" と "Outline" を組み合わせて複合シェーダーを作成できますが、"Transparent" や "Fade" には現在 "Toon Lit" シェーダーがないため、代わりに "Unlit/Transparent" にフォールバックされます。
"Outline" のサポートは試験的なものであり、パフォーマンスに悪影響が出る場合は削除される可能性があります。
"Toon" シェーダーの場合、"_Ramp" パラメータがコピーされます(Texture2D)。 "MatCap" シェーダーの場合、"_MatCap" パラメータがコピーされます(Texture2D)。
シェーダー名で一致が見つからない場合は、Standardマテリアルが使用されます。
"_MainTex" および "_Color" という名前のパラメータをフォールバックシェーダーへ転送することが試みられます。いずれのパラメータも一致しない場合は、Matcapシェーダーが提供され、色がユーザーのランクカラーに設定されます。
これらすべては、シェーダーフォールバックシステムの調整に伴い、大幅に変更される可能性があります。
アバターのフォールバックシェーダーをプレビューする
Action Menuの切り替え設定を使用して、ローカルで自分自身のアバターにフォールバックシェーダーを強制的に適用することができます。このオプションを有効にするには、Action Menuを開き、「Options」 -> 「Avatar」 -> 「Fallback Shaders」を選択してください。一度オンにすると、使用するすべてのアバターがローカル環境でフォールバックシェーダーを使用して表示されます。この設定はアバターを切り替えても維持されますが、ワールドを変更するとリセットされます。このオプションは、他者があなたのアバターをどのように見ているかには影響しません。
最終更新: