ZWrite_ZTest
はい、Render Queueの設定だけで、オブジェクトが描画される順番を制御することはできますが、ZWriteやZTestの設定も重要な役割を果たします。それぞれの設定の目的と使い方を説明します。
1. Render Queue
Render Queueは、シーン内での描画順序を制御します。レンダリングパイプラインで複数のオブジェクトが描画されるとき、Render Queueの値が小さいものから順番に描画されます。
- 値が小さいほど早く描画されます。
- 通常、
Render Queueは以下のような順番で設定されます:Background(1000)Geometry(2000)AlphaTest(2450)Overlay(3000)Transparent(4000)
例えば、Render Queueを3100に設定すると、そのオブジェクトはOverlayとして描画され、他のオブジェクトより後に描画されます。
注意点:
Render Queueを設定することで描画順番を制御できますが、深度(Zバッファ)の影響を受けるため、ZWriteやZTestが重要になってきます。
2. ZWrite
ZWriteは、オブジェクトが描画される際にZバッファ(深度バッファ)への書き込みを制御する設定です。
- ZWrite = On(1): オブジェクトが描画された場合、Zバッファにもその深度情報が書き込まれます。これにより、オブジェクトの奥行きが計算され、他のオブジェクトとの重なりが適切に処理されます。
- ZWrite = Off(0): オブジェクトが描画されてもZバッファへの書き込みが行われません。これにより、他のオブジェクトとの深度比較が行われなくなり、オブジェクトが他のオブジェクトの前に表示されることを防ぎます。
ZWriteを無効化するケース
- アウトラインやエフェクトなど、深度の影響を受けずに描画したい場合に
ZWriteを無効にします。これにより、アウトラインがオブジェクトの後ろに隠れず、他のオブジェクトに影響を与えることなく描画されます。
3. ZTest
ZTestは、オブジェクトが描画される際にZバッファと比較する方法を指定する設定です。Zバッファは、カメラに最も近いオブジェクトの深度情報を記録しており、オブジェクトが他のオブジェクトよりも手前に描画されるべきかどうかを決定します。
主なZTestオプション
- Always: すべてのピクセルが描画される。深度の比較は行われません。
- Less: 深度値が現在のZバッファの値よりも小さい場合に描画されます。
- Greater: 深度値が現在のZバッファの値よりも大きい場合に描画されます。
- Equal: 深度値が現在のZバッファの値と等しい場合に描画されます。
ZTestの用途
Always: Zバッファを無視して常に描画する場合に使います。例えば、アウトラインやエフェクトの描画時にZバッファの影響を受けず、他のオブジェクトに隠れないようにしたい場合に使用します。Less/Greater: Zバッファを利用して、奥行きに基づいた描画を行う場合に使います。
Render Queue、ZWrite、ZTestの関係
Render Queueで描画順序を制御する一方、ZWriteやZTestでオブジェクトが他のオブジェクトとどのように交差するかを制御します。- **
Render Queue**で描画順 序を決めても、ZWriteやZTestが適切に設定されていないと、オブジェクトが隠れてしまう場合があります。
例えば、アウトラインを描画する場合は:
Render Queueを高い値(例:3100)に設定して後ろに描画させる。ZWriteを無効にする(Off)ことで、深度バッファを書き換えずに他のオブジェクトに隠れないようにする。ZTestをAlwaysに設定することで、深度テストを無視して常に描画させる。
まとめ
Render Queueは描画順序を制御しますが、深度(Zバッファ)の影響を受けます。ZWriteはZバッファへの書き込みを制御し、オブジェクトの描画が他のオブジェクトに隠れないようにするために使います。ZTestはZバッファと比較して描画を行う方法を決定します。アウトラインやエフェクトなどの場合、Alwaysに設定して深度テストを無視することがあります。
Render Queueだけでは十分ではない場合があるので、ZWriteやZTestを適切に設定することが、意図した描画結果を得るために重要です。