TBR チップは、フラグメント処理の前に HSR (隠面除去) を実行するため、可視ピクセルのみがレンダリングされます。この機能により、不透明なオブジェクトを前後に並べ替える必要がなくなります。しかし、iPhone 3GS で実験を行いました。フレーム時間を比較すると、不透明なオブジェクトを前から後ろにレンダリングする方が、後ろから前にレンダリングするよりもはるかに高速です。なぜこの結果が表示されるのですか?オブジェクトがどの順序でレンダリングされても、パフォーマンスは非常に近いはずです。
2 に答える
true の場合、それはトピックに関する Apple のドキュメントと矛盾します。
- オブジェクトを前後にソートするために CPU 時間を無駄にしないでください。iPhone および iPod touch 用の OpenGL ES は、これを不要にするタイルベースの遅延レンダリング モデルを実装しています。詳細については、「タイルベースの遅延レンダリング」を参照してください。
オブジェクトを不透明度で並べ替えます。
- 最初に不透明なオブジェクトを描画します。
- 次に、アルファ テストを必要とするオブジェクト (または、OpenGL ES 2.0 ベースのアプリケーションでは、フラグメント シェーダーで破棄を使用する必要があるオブジェクト) を描画します。これらの操作には、「アルファ テストの回避と破棄」で説明されているように、パフォーマンスが低下することに注意してください。 </li>
- 最後に、アルファ ブレンド オブジェクトを描画します。
ここのドキュメントと同様に:
遅延レンダリングのもう 1 つの利点は、フラグメントが処理される前に、GPU が隠れたサーフェスの削除を実行できることです。目に見えないピクセルは、テクスチャのサンプリングやフラグメント処理を実行せずに破棄されるため、GPU がシーンをレンダリングするために実行する必要のある計算が大幅に削減されます。この機能を最大限に活用するには、不透明なコンテンツを含むシーンをできるだけ多く描画し、GLSL シェーダーでのブレンディング、アルファ テスト、破棄命令の使用を最小限に抑える必要があります。ハードウェアが隠面消去を実行するため、アプリケーションでジオメトリを前後に並べ替える必要はありません。
フラグメント処理を実行しない最適化は、Z バッファーを使用してピクセルが表示されているかどうかを判断することによって行われると考えています (ピクセルが表示されていない場合は、パイプラインを早期に終了します)。その結果、背面から前面へのレンダリングはその最適化の最悪のケース (最適化は不可能) であり、前面から背面へのレンダリングは最良のケースです (最終的にすべての非表示ピクセルは既に非表示になっています)。