Subshader はタグを使用して、いつどのようにしてレンダリングエンジンでレンダリングするか示します。
Tags { "TagName1" = "Value1" "TagName2" = "Value2" }
タグの TagName1 が値として Value1、タグの TagName2 が値として Value2 であることを指定します。タグは好きなだけ指定できます。
タグは基本的に Key-Value ペアです。SubShader の中でタグは、SubShader 順番や他のパラメーターを判定するのに使用します。次のタグは Unity により認識され、Pass の中でなく 必ず SubShader セクションの中とする、ことに注意ください。
Unity が識別するビルトインタグに加え、ご自身のタグを使用してそれらをクエリーにかけることもできます。それには Material.GetTag を使用します。
Queue (キュー)によりオブジェクトを描画する順番を判定できます。シェーダーは、オブジェクトが属するレンダリングキューを判定し、これによっていずれかの透過シェーダーが不透明のオブジェクトを描画した後に描画する、といったように判定していきます。
4 つの定義済みのレンダリングキューがありますが、定義済みのキューの間に追加することはできます。定義済みのキューは
Background
- このレンダリングキューは最初にレンダリングされます。一般的には、背景に本当に必要とさするもののみに使用します。Geometry
(default) - ほとんどのオブジェクトに使用されます。不透明なジオメトリはこのキューを使用します。AlphaTest
- アルファテストする形状でこのキューを使用します。Geometry
とは別のキューであるのはアルファテストのオブジェクトをすべての不透明のオブジェクトの後に描画するほうが効率的であるためです。Shader "Transparent Queue Example"
{
SubShader
{
Tags { "Queue" = "Transparent" }
Pass
{
// シェーダーのボディの残りの部分...
}
}
}
透過キューでレンダリングする方法の例
特別な用途において、間にキューを使用することができます。各キューは内部で整数インデックスにより表現され、Background は 1000、Geometry は 2000、AlphaTest は 2450、Transparent は 3000、そして Overlay は 4000 です。もしシェーダーがつぎのようなキューを使用する場合:
Tags { "Queue" = "Geometry+1" }
これによりオブジェクトはすべての不透明のオブジェクトの後にレンダリングされますが、レンダリングキューが 2001 ( Geometry に 1 を加算)のため、透過オブジェクトより先にレンダリングされます。これは、他のオブジェクトのグループの前に描画をさせたい場合に便利です。例えば、多くの場合に透明な水は不透明なオブジェクトの後に、ただし透明なオブジェクトの前に、描画されるべきです。
2500 (“Geometry+500”) までのキューは “不透明” とみなされ、オブジェクトの描画順はパフォーマンス重視で最適化されます。 これより大きいレンダーキューは “透明なオブジェクト” 用とみなされます。そして、オブジェクトは距離によってソートされ、最も遠いものから最も近いものの順にレンダリングされます。スカイボックスはすべての不透明なオブジェクトとすべての透明なオブジェクトの間に描画されます。
RenderType タグはシェーダーを定義済みのいくつかのグループに分類します、すなわち is は不透明なシェーダー、or はアルファテストのシェーダー、等々。これは Shader Replacement により使用され、多くの場合 カメラの深度テクスチャ を生成するのに使用します。
いくらかのシェーダー(大抵はオブジェクトスペースで頂点を変形させるもの)は、ドローコールバッチング を使用していると、動作しません。– ドローコールバッチングは、すべてのジオメトリをワールドスペースに変換するので、“object space” が失われるためです。
DisableBatching
タグを使って、どのようにするか指示できます。設定可能な3つの値があります:“True”(このシェーダーでは、常にバッチングを無効にする)、“False”(バッチングを無効にしない、デフォルトはこれ)、“LODFading”( LOD fading がアクティブな時は、バッチングを無効にする、大抵は樹木で使われます)
もし ForceNoShadowCasting が使用されていて、値が “True” である場合、このサブシェーダーを使用するオブジェクトはシャドウを投影しません。これは、透過オブジェクトに Shader Replacement を使用している場合や、別のサブシェーダーからシャドウパスを継承したくない場合にもっとも便利です。
もし IgnoreProjector が使用されていて、値が “True” である場合、このシェーダーを使用するオブジェクトは プロジェクター により影響されません。これは、Projectors が影響するためのよい方法がないため、部分的に透過であるオブジェクトで便利です。
シェーダーがスプライトに用いられる場合やアトラス(スプライトパッカーを参照)にパッキングされたとき動作しない場合、CanUseSpriteAtlas
タグを “False” に設定します。
PreviewType
は、マテリアルのインスペクタープレビューがどのようにプレビューを表示するか示します。マテリアルはデフォルトで球体(sphere)として表示されるが、PreviewType タグは “Plane”(2D のように表示する)や “Skybox”(空テクスチャ(Skybox)のように表示する)にも設定できます。
パスにもタグを割り当てることができます、Pass Tags を参照してください。