Platform SDK: DirectX

Z バッファのパフォーマンス

ランプ ドライバを使用するアプリケーションでは、シーンが前から後ろへレンダリングされるように、z バッファリングを使ってテクスチャを処理すると、パフォーマンスを向上させることができる。テクスチャを適用し、Z バッファを利用したプリミティブでは、基準となるスキャンライン上で Z バッファについてのプレテストが行われる。前もってレンダリングされたポリゴンのスキャンラインが隠れている場合は、システムがポリゴンを高速かつ効率的に取り除く。z バッファリングによってパフォーマンスは改善されるが、この手法はシーンで何度もオーバードローが必要なときに最も効果的である。オーバードローとは、スクリーン ピクセルの平均描画回数である。オーバードローを正確に計算するのは難しいが、近似値を求めることは可能である。オーバードローの平均が 2 よりも小さいときは、z バッファリングをオフにし、背面から前面にシーンをレンダリングすれば最高のパフォーマンスが得られる。

[C++]

レンダリングの前に表示テストを実行して、アプリケーションのパフォーマンスを改善することもできる。Direct3D 直接モードには、これを行うための IDirect3DDevice7::ComputeSphereVisibility メソッドがある。ComputeSphereVisibility メソッドは、指定されたポリゴン セットについての情報を提供する。このメソッドによって、ジオメトリが表示不能であることが通知された場合は、オブジェクトのレンダリングを回避することもできる。

[Visual Basic]

レンダリングの前に表示テストを実行して、アプリケーションのパフォーマンスを改善することもできる。Direct3D 直接モードには、これを行うための Direct3DDevice7.ComputeSphereVisibility メソッドがある。ComputeSphereVisibility メソッドは、指定されたポリゴン セットについての情報を提供する。このメソッドによって、ジオメトリが表示不能であることが通知された場合は、オブジェクトのレンダリングを回避することもできる。

高速のパーソナル コンピュータでは、ソフトウェア的にシステム メモリにレンダリングした方が、ビデオ メモリへのレンダリングよりも速いことが少なくない。ただし、この場合は、ダブル バッファリングやハードウェア アクセラレータによるクリア処理を使用できないというデメリットがある。システム メモリにもビデオ メモリにもレンダリングすることができ、どちらが高速かをテストするルーチンがあれば、アプリケーションでは、現行システムで最適な手法を利用できる。この SDK の Direct3D サンプル コードでは、この方法を実現している。ただし、スピードをテストする方法が他にないので、この両方の手順を実現する必要がある。コンピュータによってスピードはまったく異なり、メイン メモリのアーキテクチャや使用されているグラフィックス アダプタの種類に依存する。