VRChat 非公式日本語ドキュメント

シェーダーブロックおよびフォールバックシステム

このページでは、シェーダーブロックシステムの概要とその仕組み、そしてユーザーがアバターのシェーダーをブロックしている場合に、作成したシェーダーが適切にフォールバックされるようにする方法について説明します。

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」を選択してください。一度オンにすると、使用するすべてのアバターがローカルでフォールバックシェーダーを使用して表示されます。このオプションはアバターを切り替えても維持されますが、ワールドを変更するとリセットされます。このオプションは、他者があなたのアバターをどのように見るかには影響しません。

最終更新: