ShaderLab構文: GrabPass
ShaderLab構文: Fallback

ShaderLab文法: SubShaderタグ

Subshaderはタグを使用して,いつどのようにしてレンダリングエンジンでレンダリングするか示します。

文法

    Tags { "TagName1" = "Value1" "TagName2" = "Value2" }

タグの TagName1 が値として Value1 ,タグの TagName2 が値として Value2 であることを指定します。タグは好きなだけ指定できます。

詳細

タグは基本的にKey-Valueペアです。SubShader の中でタグは,SubShader順番や他のパラメータを判定するのに使用します。次のタグはUnityにより認識され,Passの中でなく 必ず SubShaderセクションの中とする,ことに留意下さい。

順番のレンダリング - Queueタグ

Queue (キュー)によりオブジェクトを描画する順番を判定できます。シェーダは,オブジェクトが属するレンダリング キューを判定し,これによっていずれかの透過シェーダが不透明のオブジェクトを描画した後に描画する,といったように判定しいきます。

4つの定義済みのレンダリング キューがありますが,定義済みのキューの間に追加することは出来ます。定義済みのキューは:

  • Background - このレンダリングキューは他より前にレンダリングされます。Skyboxなどに使用されます。
  • Geometry (default) - this is used for most objects. Opaque geometry uses this queue.
  • AlphaTest - アルファテストする形状でこのキューを使用します。Geometry とは別のキューであるのはアルファテストのオブジェクトを全ての不透明のオブジェクトの後に描画するほうが効率的であるためです。
  • Transparent - このレンダリング キューはGeometryAlphaTest の後に,後ろにあるものから先に順番で,レンダリングされます。アルファブレンディングするもの(すなわち,デプスバッファに書き込みしないシェーダ)は全て,ここにあるべきです(ガラス,パーティクル エフェクト)。
  • Overlay - このレンダリングキューはオーバーレイ エフェクトのためです。最後にレンダリングするものはここにあるべきです(例えば,レンズフレア等)。
Shader "Transparent Queue Example" {
     SubShader {
        Tags {"Queue" = "Transparent" }
        Pass {
            // rest of the shader body...
        }
    }
}

透過キューでレンダリングする方法の例

Geometry レンダリングキューは,最大のパフォーマンスのためにオブジェクトの描画順を最適化します。他の全てのレンダリングキューは距離によりオブジェクトをソートして,遠いものから最後に最も近いものでレンダリングします。

特別な用途において,間にキューを使用することが出来ます。各キューは内部で整数インデックスにより表現され,Background は 1000, Geometry は 2000, AlphaTest は 2450, Transparent は 3000,そしてOverlay は 4000です。もしシェーダがつぎのようなキューを使用する場合:

Tags { "Queue" = "Geometry+1" }

これによりオブジェクトは全ての不透明のオブジェクトの後にレンダリングされますが,レンダリングキューが2001(Geometryに1を加算)のため,透過オブジェクトより先にレンダリングされます。これは,他のオブジェクトのグループの前に描画をさせたい場合に便利です。例えば,多くの場合に透明な水は不透明なオブジェクトの後に,ただし透明なオブジェクトの前に,描画されるべきです。

RenderTypeタグ

RenderTypeタグはシェーダを定義済みのいくつかのグループに分類します,すなわちisは不透明なシェーダ,orはアルファテストのシェーダ,等々。これはShader Replacement により使用され,多くの場合Camera Depth Texture を生成するのに使用します。

ForceNoShadowCasting タグ

もしForceNoShadowCasting が使用されていて,値が“True” である場合,このサブシェーダを使用するオブジェクトはシャドウを投影しません。これは,透過オブジェクトに Shader Replacement を使用している場合や,別のサブシェーダからシャドウ パスを継承したくない場合にもっとも便利です。

IgnoreProjectorタグ

もしIgnoreProjector が使用されていて,値が“True” である場合,このシェーダを使用するオブジェクトはProjectors により影響されません。これは,Projectorsが影響するための良い方法がないため,部分的に透過であるオブジェクトで便利です。

関連項目

パスにもタグを割り当てることが出来ます,Pass Tags を参照下さい。

ShaderLab構文: GrabPass
ShaderLab構文: Fallback