「毎日Unity」の技術ブログ

開発で役立つ情報を発信する

【Unity】3Dオブジェクトの描画順について

不透明/半透明/透明の3Dオブジェクトの描画順について自分用にまとめてみました。間違ってるところあるかもです。

[ 描画順は3要素で決まる ]

3Dオブジェクトの描画順は「カメラのDepth」「RenderQueue」「カメラからの距離」の3要素から決まります。
優先度は「カメラのDepth」>「RenderQueue」>「カメラからの距離」です。

カメラのDepth

カメラのDepthとは下記の画像のようにカメラコンポーネントのDepthのことです。デフォルトだと-1になってるはずです。このDepthの値が小さいカメラに映るオブジェクトから順に描画されます。カメラが1つだけなら考えなくて良いです。
f:id:EDunity:20201224154403p:plain

RenderQueue

RenderQueueとは下記の画像のようにShaderを書く際に指定できる値です。下記の画像ではTransparent-499に指定しています。後述しますがTransparentは3000なのでTransparent-499は2501になります。このRenderQueueが小さいオブジェクトから順に描画されます。
f:id:EDunity:20201224155244p:plain
ちなみにRenderQueueは主に5種類存在します。

名前 用途
Background 1000 背景用
Geometry 2000 不透明用
AlphaTest 2450 アルファテスト用
Transparent 3000 透明/半透明用
Overlay 4000 オーバーレイエフェクト用

RenderQueueの値が2500以下だと不透明、2501以上だと透明/半透明として描画されます。RenderQueueが小さいオブジェクトから順に描画されるので、不透明のオブジェクトが全て描画された後に透明/半透明のオブジェクトが描画されるということになりますね。

カメラからの距離

カメラからの距離とはカメラと描画するオブジェクトの距離のことです。RenderQueueが2500以下だとカメラから近い順に描画され、2501以上なら遠い順に描画されます。