Subshader はタグを使用して、いつどのようにしてレンダリングエンジンでレンダリングするか指定します。
Tags { "TagName1" = "Value1" "TagName2" = "Value2" }
TagName1 が値 Value1、TagName2 が値 Value2 であることを指定します。タグの数に制限はありません。
タグは基本的に Key-Value ペアです。SubShader の中でタグは、サブシェーダーのレンダリング順や他のパラメーターを決定するのに使用されます。Unity により認識される以下のタグは、Pass の中でなく 必ず SubShader セクションの中に置くように注意してください。
Unity が認識するビルトインタグに加え、独自のタグを使用してそれらをクエリーにかけることもできます。それには Material.GetTag 関数を使用します。
Queue タグを使ってオブジェクトを描画する順番を決定できます。シェーダーは、オブジェクトが属するレンダリングキューを判断します。これによって、すべての不透明のオブジェクトが描画された後に、透過シェーダーで描画することができます。
4 つの定義済みのレンダーキューがありますが、定義済みのキューの間にさらにキューを追加することができます。定義済みのキューは以下の通りです。
Background
- このレンダリングキューは最初にレンダリングされます。一般的には、背景に必要なものに使用します。Geometry
(default) - ほとんどのオブジェクトに使用できます。不透明なジオメトリにはこのキューを使用します。AlphaTest
- アルファテストする形状でこのキューを使用します。Geometry
とは別のキューであるのはアルファテストのオブジェクトをすべての不透明のオブジェクトの後に描画するほうが効率的であるためです。Transparent
- このレンダリングキューは Geometry と AlphaTest
の処理後に、後方から手前へ向かってレンダリングされます。アルファブレンディングされるもの (すなわち、深度バッファに書き込みしないシェーダー) はすべて、ここに加えるべきです (ガラス、パーティクルエフェクトなど)。Overlay
- このレンダリングキューはオーバーレイ効果のためのものです。最後にレンダリングするものはここに加えるべきです (例えば、レンズフレア)。Shader "Transparent Queue Example"
{
SubShader
{
Tags { "Queue" = "Transparent" }
Pass
{
// シェーダーのボディの残りの部分...
}
}
}
透過キューでレンダリングする方法の例
特別な用途において、間にキューを使用することができます。各キューは内部で整数インデックスにより表され、Background
は 1000、Geometry
は 2000、AlphaTest
は 2450、Transparent
は 3000、Overlay
は 4000 です。シェーダーが以下のようなキューを使用すると仮定しましょう。
Tags { "Queue" = "Geometry+1" }
これによりオブジェクトはすべての不透明のオブジェクトの後にレンダリングされますが、透過 (Transparent) オブジェクトより先にレンダリングされます。なぜなら、レンダリングキューが 2001 (Geometry に 1 を加算) だからです。これは、他の一連のオブジェクトの前に描画したい場合に便利です。例えば、多くの場合に透明な水は不透明なオブジェクトの後、ただし透明なオブジェクトの前に描画します。
2500 (“Geometry+500”) までのキューは “不透明” とみなされ、オブジェクトの描画順はパフォーマンス重視で最適化されます。 これより大きいレンダーキューは “透明なオブジェクト” 用とみなされます。そして、オブジェクトは距離によってソートされ、最も遠いものから最も近いものの順にレンダリングされます。スカイボックスはすべての不透明なオブジェクトとすべての透明なオブジェクトの間に描画されます。
RenderType
タグはシェーダーを定義済みのいくつかのグループに分類します。これは シェーダーの置き換え に使用され、時には カメラの深度テクスチャ を生成するのに使用されます。
シェーダー (大抵はオブジェクトの空間で頂点のデフォーメーションを実行する) のなかには、ドローコールバッチング を使用していると、動作しないものがあります。ドローコールバッチングは、すべてのジオメトリをワールド空間に変換するので、“オブジェクト空間” が失われてしまうためです。
DisableBatching
タグを使うと、その処理を指示できます。以下の 3 つの値が設定可能です。“True” (このシェーダーでは、常にバッチングを無効にする)、“False” (バッチングを無効にしない、デフォルト設定)、“LODFading” (LOD フェードがアクティブな時は、バッチングを無効にする、大抵は樹木で使用)。
ForceNoShadowCasting
タグが使用されていて、値が “True” である場合、このサブシェーダーを使用して描画されるオブジェクトは影を投影しません。これは、たいてい、透過オブジェクトにシェーダーの置き換えを使用している場合や、別のサブシェーダーからシャドウパスを継承したくない場合に便利です。
IgnoreProjector
タグが使用されていて、値が “True” である場合、このシェーダーを使用するオブジェクトは プロジェクター からの影響を受けません。これは、たいてい、部分的に透過であるオブジェクトで便利です。なぜなら、プロジェクターがうまく影響できる方法がないためです。
シェーダーがスプライトに用いられ、アトラスにパックされたときに動作しない場合 (スプライトパッカー を参照) に、CanUseSpriteAtlas
タグを “False” に設定します。
PreviewType
タグは、マテリアルのインスペクタープレビューをどのように表示するかを示します。マテリアルはデフォルトでスフィアとして表示されますが、PreviewType タグは “Plane” (2D として表示) や “Skybox” (スカイボックスとして表示) にも設定できます。
Pass にもタグを指定することが可能です。詳細は ShaderLab: Pass 内の Tags を参照してください。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.