Subshaderはタグを使用して,いつどのようにしてレンダリングエンジンでレンダリングするか示します。
Tags { "TagName1" = "Value1" "TagName2" = "Value2" }
タグの TagName1 が値として Value1 ,タグの TagName2 が値として Value2 であることを指定します。タグは好きなだけ指定できます。
タグは基本的にKey-Valueペアです。SubShader の中でタグは,SubShader順番や他のパラメータを判定するのに使用します。次のタグはUnityにより認識され,Passの中でなく 必ず SubShaderセクションの中とする,ことに留意下さい。
Queue (キュー)によりオブジェクトを描画する順番を判定できます。シェーダは,オブジェクトが属するレンダリング キューを判定し,これによっていずれかの透過シェーダが不透明のオブジェクトを描画した後に描画する,といったように判定しいきます。
4つの定義済みのレンダリング キューがありますが,定義済みのキューの間に追加することは出来ます。定義済みのキューは:
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タグはシェーダを定義済みのいくつかのグループに分類します,すなわちisは不透明なシェーダ,orはアルファテストのシェーダ,等々。これはShader Replacement により使用され,多くの場合Camera Depth Texture を生成するのに使用します。
もしForceNoShadowCasting が使用されていて,値が“True” である場合,このサブシェーダを使用するオブジェクトはシャドウを投影しません。これは,透過オブジェクトに Shader Replacement を使用している場合や,別のサブシェーダからシャドウ パスを継承したくない場合にもっとも便利です。
もしIgnoreProjector が使用されていて,値が“True” である場合,このシェーダを使用するオブジェクトはProjectors により影響されません。これは,Projectorsが影響するための良い方法がないため,部分的に透過であるオブジェクトで便利です。
パスにもタグを割り当てることが出来ます,Pass Tags を参照下さい。