シェーダーブロックおよびフォールバックシステム
このページでは、シェーダーブロックシステムの概要とその仕組み、そしてユーザーがアバターのシェーダーをブロックしている場合に、作成したシェーダーが適切にフォールバックされるようにする方法について説明します。
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) シェーダーへ確実にフォールバックすることを保証します。同名のキーワードとプロパティはすべてコピーされます。
タグが指定されていない場合は、従来のフォールバックシステム(シェーダー名、キーワードなどのパターンに従うもの)が使用されます。
また、以下を含むすべての標準シェーダーパラメーターをフォールバックマテリアルにコピーするようになりました:
_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シェーダーが適用されます。
これらすべては、シェーダーフォールバックシステムの調整に伴い、大幅に変更される可能性があります。
アバターのフォールバックシェーダーをプレビューする
アクションメニューの切り替えスイッチを使用して、自分のアバターでフォールバックシェーダーをローカルに強制適用できます。このオプションを有効にするには、アクションメニューを開き、「Options」→「Avatar」→「Fallback Shaders」を選択してください。一度オンにすると、使用するすべてのアバターがローカルでフォールバックシェーダーを使用して表示されます。このオプションはアバターを切り替えても維持されますが、ワールドを変更するとリセットされます。このオプションは、他者があなたのアバターをどのように見るかには影響しません。
最終更新: