Early-Z と Hierarchical Z が無効になる条件

Early-Z と Hierarchical Z が無効になる条件

  • 下図のリファレンステーブルは参考文献の "Depth In-depth" Emil Persson に載っていたものです.
  • Enabled の箇所はその項目によって無効にはなりませんが, 他の項目の Disabled によって無効になる可能性があることを示しています.
  • Disabled の箇所があった場合, 必ず無効になります.


ピクセルシェーダの計算のスキップを、Early-Z + Z バッファで制御

  • ある時点から隠面消去に Z バッファを使わなくて済む場合(Deferred Shading)は, Z バッファの値を制御コードとして利用し, Early-Z で計算したくないピクセルはスキップすることができます.


マルチ解像度のディファードシェーディング (Multi-Resolution Deferred Shading)

  • Game Programming Gems8 で紹介されている Multi-Resolution Deferred Shading は低解像度から高解像度へレンダリングバッファへのシェーディングを行っていて, このときに特定のピクセルだけをシェーディングするために Early-Z を利用しています.
  • (1) まず レンダリング用の複数解像度のバッファ(1280x1024, 640x512, 320x256)を用意しておきます.
  • (2) 一番低解像度のレンダリングバッファのデプスを 1.0 でクリアしておきます.
  • (3) この解像度でのシェーディングするピクセルをマークするために, Z_i = 1.0 - i * 0.1 (今回は i = 1)の長方形をレンダリングします.
    • 次にミップマップ化した G-Buffer を読み込んで, 法線・デプスバッファ・マテリアル ID からピクセルの連続性をチェックします.
    • もし不連続である場合は discard して, Z バッファへの書き込みをスキップします.
    • もしこの解像度でシェーディングをする場合は, Zバッファに書き込んでおきます.
  • (4) 次にシェーディングのパスとして, Z 比較を EQUAL にした状態で Z_i = 1.0 - i * 0.1 (今回は i = 1)の長方形をレンダリングしてシェーディングを行います. ここでは 3. でマーキングしたピクセルだけシェーディングの計算が行われます.
  • (5) 低解像度のレンダリングバッファでの結果を 1 段階, 解像度が高いバッファにバイリニアフィルタを使いながらコピーします.
  • (6) 3-5 の処理を, 一番解像度が高いバッファに到達するまで繰り返します.




Fast Z Clear の条件

  • デプスバッファとステンシルバッファの両方を同時にクリアする必要があります.


Double Speed Z-Only とステンシルレンダリング

  • カラーマスクが無効, アルファテストが無効, フラグメントでのデプス出力なし, texkill なしの場合に有効になります.


Hi-Z


Early-Z


Depth-only pass