25

iPhoneアプリケーションでレンダリングできる1秒あたりの三角形の数を増やすために、OpenGL ESのパフォーマンスの最適化を実行しようとしていますが、壁にぶつかりました。OpenGL ESデータ型を固定小数点から浮動小数点に変換し( Appleの推奨に従って)、頂点バッファーオブジェクトをインターリーブし、描画状態の変化を最小限に抑えようとしましたが、これらの変更によってレンダリング速度に違いはありませんでした。とにかく、3.0OSを実行しているiPhone3Gで、アプリケーションを320,000の三角形/秒より上にプッシュできないようです。このベンチマークによると、私が使用している滑らかなシェーディングで、このハードウェアで687,000の三角形/秒を打つことができるはずです。

私のテストでは、実行中のデバイスに対してInstrumentsでOpenGL ESパフォーマンスツールを実行すると、ベンチマークをレンダリングするときに統計「TilerUtilization」がほぼ100%に達するのがわかりますが、「RendererUtilization」は約30にしか達していません。 %。これは、表示プロセスのボトルネックが何であるかについての手がかりを提供している可能性がありますが、これらの値が何を意味するのかわかりません。また、それらに関するドキュメントも見つかりませんでした。誰かがiPhoneOpenGLES機器のこれと他の統計が何を表すのかについての良い説明を持っていますか?iPhone3GのPowerVRMBXLiteがタイルベースの遅延レンダラーであることは知っていますが、そのアーキテクチャのレンダラーとタイラーの違いはわかりません。

何らかの形で役立つ場合は、このアプリケーションの(BSDライセンスの)ソースコードダウンロードして自分でテストすることをお勧めします。現在の構成では、新しい分子構造をロードするたびに小さなベンチマークが開始され、三角形/秒がコンソールに出力されます。

4

2 に答える 2

27

TilerUtilizationとRendererUtilizationのパーセンテージは、それぞれ頂点とフラグメント処理ハードウェアのデューティサイクルを測定します。MBXでは、Tilerの使用率は通常、GPUに送信される頂点データの量(頂点の数と頂点ごとに送信される属性のサイズの両方の観点から)に比例し、フラグメントの使用率は通常、オーバードローとテクスチャサンプリングで増加します。 。

あなたの場合、最良の方法は、送信する各頂点のサイズを小さくすることです。手始めに、原子と結合を色でビニングし、配列の代わりに一定の色を使用してこれらの各ビンを送信してみます。また、適切なスケーリングを前提として、ショートパンツがポジションと法線に適しているかどうかを調査することをお勧めします。この場合、十分な精度を提供するためにスケーリングされたショーツが必要な範囲をカバーしていない場合は、位置ごとにビンに入れる必要がある場合もあります。これらの種類の手法では、追加の描画呼び出しが必要になる場合がありますが、頂点スループットの向上は、追加の描画ごとの呼び出しCPUオーバーヘッドを上回ると思われます。

(MBXやその他の場所で)各頂点属性が32ビット境界で始まるようにすることは一般的に有益であることに注意してください。これは、ショートに切り替える場合は、位置と法線を4つのコンポーネントにパディングする必要があることを意味します。MBXプラットフォームの特性により、この場合、glVertexPointerの呼び出しに位置のWコンポーネントを実際に含めることもできます。

ポリゴンデータ、特に球体に対してDOT3のような代替のライティング方法を追求することも検討できますが、これには、レンダリングをフラグメントにバインドしたり、以前よりも多くの頂点データを誤って送信したりしないように特別な注意が必要です。

于 2009-08-22T17:15:03.540 に答える
7

素晴らしい答え、@ Pivot!参考までに、このAppleドキュメントでは次の用語を定義しています。

  • レンダラー使用率%。GPUがフラグメント処理の実行に費やした時間の割合。
  • タイル使用率%。GPUが頂点処理とタイリングの実行に費やした時間の割合。
  • デバイス使用率%。GPUがタイリングまたはレンダリング作業に費やした時間の割合。
于 2015-06-11T05:00:57.090 に答える