不透明/半透明/透明の3Dオブジェクトの描画順について自分用にまとめてみました。間違ってるところあるかもです。
[ 描画順は3要素で決まる ]
3Dオブジェクトの描画順は「カメラのDepth」「RenderQueue」「カメラからの距離」の3要素から決まります。
優先度は「カメラのDepth」>「RenderQueue」>「カメラからの距離」です。
カメラのDepth
カメラのDepthとは下記の画像のようにカメラコンポーネントのDepthのことです。デフォルトだと-1になってるはずです。このDepthの値が小さいカメラに映るオブジェクトから順に描画されます。カメラが1つだけなら考えなくて良いです。
RenderQueue
RenderQueueとは下記の画像のようにShaderを書く際に指定できる値です。下記の画像ではTransparent-499に指定しています。後述しますがTransparentは3000なのでTransparent-499は2501になります。このRenderQueueが小さいオブジェクトから順に描画されます。
ちなみにRenderQueueは主に5種類存在します。
名前 | 値 | 用途 |
Background | 1000 | 背景用 |
Geometry | 2000 | 不透明用 |
AlphaTest | 2450 | アルファテスト用 |
Transparent | 3000 | 透明/半透明用 |
Overlay | 4000 | オーバーレイエフェクト用 |
RenderQueueの値が2500以下だと不透明、2501以上だと透明/半透明として描画されます。RenderQueueが小さいオブジェクトから順に描画されるので、不透明のオブジェクトが全て描画された後に透明/半透明のオブジェクトが描画されるということになりますね。
カメラからの距離
カメラからの距離とはカメラと描画するオブジェクトの距離のことです。RenderQueueが2500以下だとカメラから近い順に描画され、2501以上なら遠い順に描画されます。