Unityの、ShaderLabにはQueueというレンダリング順をコントロールするためのタグがあります。
詳しくは、以下のページに書かれていますが、自分でも自分の言葉でまとめてみます。
タグ名 | 内部インデックス | 説明 |
Background | 1000 | 他より前にレンダリングされます。Skyboxなんかもこれらしいが... |
Geometry | 2000 | 次に描画されるのはこれ。不透明なマテリアル用。 |
AlphaTest | 2450 | 3番目。アルファテストするマテリアル用。 |
Transparent | 3000 | 4番目。半透明マテリアル用。このキューに入るものは奥から順に描かれます。 |
Overlay | 4000 | 最後。ポストエフェクトとか用。 |
タグは実は内部的にはインデックスになっています。例えばBackgroundタグは1000というように。
それを利用して、それぞれのタグの間にキューを作って描画することもできます。
Tags { "Queue" = "Geometry+1" }
とすればことで。2001のインデックスが振られ、Geometryの後、AlphaTestの前に描画されます。
インデックスが2500以下のキューは不透明とみなされます。
2500より大きいキューは半透明と見なされて、カメラからの距離でソートされて奥から順に描かれます。
疑問
Backgroundの項目にSkyboxがあり、他のレンダリングより先に行われるとなっていたのに疑問を持ちました。
なぜなら背景になるSkyboxは不透明の一番最後に描いたほうが処理付加的にメリットあるからです。
何故に?って思っていたのですが、別な場所には、
スカイボックスは完全に不透明なオブジェクトと完全に透明なオブジェクトの中間で描画されます。
っと書いてました。どっち?マニュアルの不備?現在問い合わせ中。
P.S
Unityから返信が来ました。どうやら翻訳文の方だけ間違っているようです。以下回答からの引用です。
おっしゃる通り、記述は矛盾したものとなっています。原文を参照すると Background タグにSkyboxの記述はありません。よって スカイボックスは完全に不透明なオブジェクトと完全に透明なオブジェクトの中間で描画されます。 こちらを信用するのが正しいです。 翻訳は間違っている、あるいは原文の変更に対して対応が遅れています。(おそらく後者です) ご指摘ありがとうございます。順次修正してまいります。