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

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」といったバリエーションもサポートしています。

caution

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

最終更新: