OpenGLESを描画APIとして使用してiPhone用のゲームを開発しています。大きな世界全体を1つの描画要素で描画しています。錐台に応じてオブジェクトが表示されます。
オブジェクトの他の部分がどうなるか知りたいのですが、描かれていますか?FPSに影響しますか?
シーンのどの頂点でも、頂点シェーダーを実行する必要があります。これにより、それらの座標がモデル空間からクリップ空間に変換されます。
その後、クリッピングボリュームに含まれていないプリミティブ(つまり、クリップスペースでは、画面の外側にあるか、遠すぎるか近すぎる)がクリップされるため、それ以上処理されず、ピクセルシェーダーが勝ちます。彼らのために実行されないでください。
これは、OpenGLとOpenGLESでも同じです。詳細については、OpenGL ES仕様(2.13プリミティブクリッピング)またはOpenGL仕様(同じ見出し)を参照してください。
つまり、多くのジオメトリがあり、そのほとんどが錐台の外側にあるため、レンダリング時間に少し影響しますが、すべてのジオメトリが実際にレンダリングされた場合よりもはるかに少なくなります。頂点ごとの変換のみを実行する必要があります。ラスタライズおよびピクセルごとの操作(フラグメントシェーダー、フレームバッファーへの実際の書き込み)は実行されません。
これは、頂点ごとの操作を多く行い、ピクセルごとの操作を少なくする場合は、シーンの追加の可視性テストを作成することがより重要になる可能性があることも意味します。
OpenGLは、描画するように指示したすべてのプリミティブを処理します。そのため、自分で何を描くかを決める必要があります。出発点がこれを読んでいるので、それは本当に難しい問題です。
ジオメトリパイプラインは、頂点座標をウィンドウ座標に変換します。その時点で、ウィンドウ外のポリゴンを破棄できます。しかし、あまりにも多くの不要なジオメトリが処理され、パフォーマンスが低下します。
ある種の錐台カリングの使用を検討してください。シーンを小さな部分またはタイルに分割し、描画する前に、タイルが完全に錐台の外側にあるかどうかを評価して、錐台の内側にある可能性のあるタイルのみを描画します。
単純なパーティションでも、違いは顕著です。