Render Queue(描画の順番)
半透明の髪やレース、メガネのレンズが、見る角度で消えたり、ほかの物の後ろに隠れたりする。その多くは、Render Queue(レンダーキュー)という「描く順番」の数字で直せます。
公開 · 対象は Unity の Built-in Render Pipeline(VRChat のアバター)です。2026年11月時点の内容です。
こんなときに読んでください
- 半透明のパーツ(レース、メガネのレンズ、頬染め)が、カメラを動かすと消えたり出たりする。
- 水のあるワールドで、アバターの半透明の部分が水面に隠れる。
- 半透明のスカートの向こうのリボンなど、半透明の物越しに別の半透明の物が見えない。
- パーティクルやエフェクトが、髪や服の前に出たり後ろに隠れたりする。
Render Queue とは
Unity は画面を描くとき、マテリアルごとに決まった数字の小さい順に描いていきます。この数字が Render Queue です。あとから描いた物が、先に描いた物の上に重なります。
不透明な物は、奥行き(深度)を見て前後が決まるので、順番を変えても見た目はほとんど変わりません。順番が見た目に効くのは半透明の物です。半透明の物は奥行きを記録せず、すでに描かれている色の上に、自分の色を混ぜるだけだからです。
- 1000 Background 背景(スカイボックスなど)
- 2000 Geometry 不透明な物。ほとんどのマテリアル
- 2450 AlphaTest 切り抜き(Cutout)。穴の開いた不透明な物
- 2500 ここまでが「不透明」の扱い
- 3000 Transparent 半透明な物
- 4000 Overlay いちばん最後。すべての上に重ねる物
2500 を境に、並べ方が変わる
- 2500 以下(不透明の扱い)
- おおよそカメラに近い物から描きます。前後は奥行きで決まるので、順番がどうでも見た目は正しくなります。
- 2501 以上(半透明の扱い)
- 同じ数字の中では、カメラから遠い物から描きます。距離は、見えている面までではなく、メッシュの範囲(Bounds)の中心までで測ります。大きなスカートと小さなリボンのように中心の位置が違う物は、カメラを動かすと「どちらが近いか」が入れ替わり、ちらつきます。
- 1つのメッシュに半透明のマテリアルがいくつかあるとき
- 同じメッシュの中で同じ数字なら、距離ではなく、マテリアルの並び順(Element 0, 1, …)で描かれます。
動かして確かめる
アバターの半透明パーツは、水面より手前にあります。水面が先に描かれれば、正しく見えます。数字と距離を変えて、どうなるか見てみてください。
描く順番
- ワールドの水面(3000)
- アバターの半透明パーツ(3000)
数字が同じなので、距離で順番が決まります。
正しく見える:水面を先に描き、その上にパーツが重なっています。
よくある困りごとと直し方
角度で消えたり出たりする
- 起きること
- 半透明のパーツ2つが、見る角度によって前に出たり後ろに隠れたりする。
- 原因
- 数字が同じなので距離で順番が決まり、その判定が角度で入れ替わっています。
- 直し方
- 手前に見せたい方の数字を、少しだけ(+1〜+10)大きくします。距離ではなく数字で順番が決まるので、入れ替わらなくなります。
水面に隠れる
- 起きること
- 水のあるワールドで、アバターの半透明の部分が水の中にあるように見える。
- 原因
- ワールドの水面は、半透明の範囲の数字を使っていることが多いです。パーツが水面より先に描かれると、上から水面の色を塗られてしまいます。
- 直し方
- パーツの数字を、水面より大きくします。私の SpiderWeb では、糸を 3100、衝撃波を 3110 にしています。水面が 3100 以上のワールドでは、糸のマテリアルを水面より大きく、衝撃波をさらに後にするよう、説明書に書いています。 SpiderWeb の説明書
1つのメッシュの中で重なる
- 起きること
- 同じメッシュにある半透明のマテリアル2つが、逆の順番で重なる。
- 原因
- 数字が同じなので、マテリアルの並び順で描かれています。
- 直し方
- 手前に見せたい方の数字を大きくするか、奥に見せたい方を前の Element に並べ替えます。
縁がくっきりでよいなら Cutout に
- 起きること
- 髪の毛先やレースの穴など、形を抜くためだけに半透明を使っている。
- 原因
- 半透明は順番の調整が要ります。Cutout(2450)は不透明の扱いで、奥行きも記録します。
- 直し方
- 縁がくっきりしていてよいなら、Cutout にします。順番の問題が起きなくなります。
数字の変え方
- 元に戻せるように、先にマテリアルを複製しておきます。
- Project ウィンドウで、変えたいマテリアルを選びます。
- Inspector で Render Queue の欄を探します。多くのシェーダーでは下のほうにあります。
From Shaderのままだと、シェーダーの既定の数字になります。 - 数字を入れます。
- 順番を確かめるには、Unity の Frame Debugger(
Window → Analysis → Frame Debugger)を開き、描かれる物を1つずつ送って見ます。
気をつけること
- 2500 を超えると、半透明の扱いになります。Built-in Render Pipeline では、2500 を超えた物は影を受けなくなります。不透明な物は 2500 以下のままにしてください。
- シェーダーの描画モードを変えると、Render Queue が既定の数字に戻ることがあります。変えたあとに、もう一度確かめてください。
- 大きく動かさないでください。数字が大きいほど、ワールドの半透明の物(ガラス、霧、エフェクト)より後に描かれ、その奥にあっても手前にあるように見えることがあります。
- Render Queue はマテリアルの設定なので、アップロードすれば、ほかの人にも同じ順番で描かれます。
まとめ
- Render Queue は描く順番の数字で、効くのは半透明のマテリアルです。
- 数字が同じだと、メッシュの中心までの距離で順番が決まり、それがちらつきの原因になります。
- 決めたい順番だけを小さな差で決め、できるところは Cutout にします。