3Dレンダリングでピクセルごとの深度値を保存するメモリレイヤー——ジオメトリの遮蔽を判定。正確な深度ソートの基盤。
コンポジット作業中に、3Dレンダリングが突然おかしく見える――オブジェクトが不正確に重なり合い、奥にあるべきものが手前にあるように見える――と思ったことはありませんか?Zバッファは、そのためのツールです。ピクセルごとに奥行き座標(カメラからの距離)を保存し、どのジオメトリが表示され、どのジオメトリが隠されるかをリアルタイムで決定します。このメモリ領域がなければ、3Dエンジンは、ある立方体が別の立方体の手前にあるのか奥にあるのかを知ることができません。
実際には、GPUがシーンをレンダリングする際、各ピクセルに色だけでなく、そのZ値(深度)も同時に保存します。新しいピクセルが同じ位置に当たると、エンジンはそのZ深度を保存されている値と比較します。新しいピクセルがカメラに近い場合のみ、書き込まれます。これがデプス・テストであり、フレームごとに数百万回実行されます。非常に高速なので気づきませんが、Zバッファがなければ、どのレイヤーが上にあるかを毎回手動でソートしなければならず、悪夢となるでしょう。
VFXプロダクションの現場では、ZバッファはデプスパスまたはZデプスパスとして必要になります。これは、色ではなく深度値を可視化する個別のレンダリングレイヤーです――近いほど明るく、遠いほど暗くなります。コンポジット作業では、これを使用して被写界深度(ボケ)を実装したり、ボリューム(ボリューメトリクス)をリアルにブレンドしたり、キーイングをより正確に行ったりできます。多くのレンダラーは現在、Zバッファを32ビットまたは16ビットチャンネルとして保存しています――ビット深度が高いほど、階調はより繊細になり、ボケにおけるバンディングは少なくなります。
注意点:Zファイティングは、2つのジオメトリがまったく同じ深度を持つ場合に発生します。この場合、Zバッファは2つのオブジェクトの間でちらつき、イライラするグリッチを引き起こします。これは、小さなオフセット値や正しいポリゴン配置によって回避できます。ボリュームや半透明オブジェクトを扱う場合、Zバッファは従来のデプス・テストでのみ機能することを知っておく必要があります――一部のエフェクトでは、Order-Independent Transparency(OIT)と呼ばれる、半透明の問題をよりエレガントに解決する別のアルゴリズムが必要です。