私は、多くの看板を使用する3D iPhoneアプリケーションを作成します。 iPhone 4で品質を向上させたいので、フレームバッファが網膜画面上で2倍大きくなります。 問題は、フラグメントシェーダがフレームバッファサイズのために時間を消費することです。 シェーダ精度を上げずに網膜スクリーンや高解像度テクスチャを管理する方法はありますか?iOS上の網膜スクリーンのためのシェーダの最適化
答えて
Retinaディスプレイのフル解像度のフレームバッファでレンダリングしている場合、Retinaディスプレイ以外のディスプレイの同じ物理領域と比較して、ラスタオーバーするピクセルが4倍になります。シェーダの複雑さのために塗りつぶしのレートが制限されている場合、これにより、各フレームでレンダリングにかかる時間が長くなります。
まず、レンダリングパイプラインのフラグメント処理部分によって実際に制限されていることを確認する必要があります。アプリケーションに対してOpenGL ESドライバを実行し、TilerとRenderer Utilizationの統計を確認します。レンダラー使用率が100%に近い場合は、フラグメントシェーダーとピクセル全体のプッシュ機能によって制限されることを示します。ただし、Tiler Utilizationのパーセンテージが表示されている場合は、ジオメトリに制限があり、画面解像度の変更がパフォーマンスに影響を与えないことを意味します。これは、頂点データの複雑さとサイズを減らすことになります。
あなたがフラグメントシェーダーによって制限されているとすれば、iOS GPUのパフォーマンスを大幅に向上させるためにできることがいくつかあります。
あなたのケースでは、テクスチャサイズのように聞こえるかもしれません。まず、私は、標準のビットマップソースの代わりにPowerVR Texture Compressed(PVRTC)テクスチャを使用します。 PVRTCテクスチャは、圧縮されたフォーマットでメモリに格納され、同等のビットマップよりもはるかに小さくすることができます。これにより、テクスチャ読み込み時のキャッシュヒットが増え、アクセス速度が大幅に向上します。
テクスチャのサイズを2倍にし、ミップマップを有効にします。私はミップマップが実際に小さなオブジェクトに表示されるように縮小された大きなテクスチャに本当に役立つのを見ました。これは間違いなく、網膜および網膜以外の装置をサポートする必要のあるアプリケーションの場合のように聞こえます。
ペストのようなフラグメントシェイダーでの依存テクスチャーの読み込みを避けてください。テクスチャ座標を決定するために計算を実行するもの、または分岐ステートメントに含まれるテクスチャの読み込みは、依存するテクスチャの読み込みをトリガします。これは、iOS GPUで実行するのが一桁以上遅くなる可能性があります。通常のテクスチャ読み込みでは、PowerVR GPUはテクスチャ値より少し前に読み込みを行うことができますが、原因を依存テクスチャ読み込みを使用すると、その最適化が失われる可能性があります。
私はhad a little help in this area myselfを持っていますが、これらは、私が焦点を当てていた最初のもののように見えます(適切な場合はhighpの代わりにlowpまたはmediump精度を使用します)。最後に、PowerVR's profiling editorを使ってシェーダを実行することもできます。これにより、これらのシェーダの最高と最低のパフォーマンスのサイクルタイムの見積もりが得られます。
レティナディスプレイデバイスは、フラグメントシェーダの制限に関しては、最悪の犯罪者でさえありません。 iPhone 4/4Sよりも多くのピクセルを持ち、iPad 2/3またはiPhone 4Sよりもはるかに低速のGPUを搭載しているため、iPad 1のフルスクリーンに何らかのレンダリングを実行してみてください。あなたがiPad 1でうまく動作するようなものを手に入れることができれば、それ以外のすべてのもの(さらにはRetina iPad)でもうまくいくでしょう。
- 1. iOSアプリ以外の網膜と網膜画像のコンセプト
- 2. JavaScriptスプライトシートを通常のスクリーンと網膜スクリーンで使用する
- 3. 網膜の表示のためのuiwebviewのコンテンツのiOSサイズ
- 4. PhoneGap網膜ディスプレイ上のNativeControls
- 5. 網膜と非網膜デバイスのレンダリングコンテキスト
- 6. UIImageViewの網膜/非網膜画像
- 7. 網膜ディスプレイ上の低品質画像
- 8. 網膜ディスプレイのタブバーアイコン
- 9. 網膜と網膜以外の画面のテキストのための画像の使用
- 10. 網のための網膜と非網膜のiPhone&iPadのための画像のすべての異なるサイズと解像度を扱う方法
- 11. 網膜以外のキャンバスアプリを網膜ディスプレイに更新する
- 12. のOpenGL ESに網膜と非網膜資産をミキシング
- 13. iPhoneのアイコン、網膜のみ?
- 14. ブートストラップnavbarとスクリーン電話の最適化
- 15. 網膜スクリーンがコンピューティングを増加させますか?
- 16. iOS網膜サファリバグ描画ボーダー半径?
- 17. 網膜ディスプレイ上でうまく動作しない非網膜iPadアプリiPad
- 18. 網膜ディスプレイのグラフィックがIPADのために機能しない
- 19. 網膜表示のために画像のサイズを変更
- 20. GTMの網膜ディスプレイ検査
- 21. 網膜画像の問題
- 22. 網膜ディスプレイの画像
- 23. インタフェースビルダーは網膜画像上でハングアップ
- 24. jQTouchが付いた網膜のアイコン
- 25. 網膜上のfabricjs:新しいオブジェクトが左上に移動
- 26. iOS上のシェーダの相違
- 27. ポリゴンの交差点の最適化のための最適化
- 28. 網膜上のHDとSDの両方のグラフィックス
- 29. Wordpressレスポンシブル画像 - 網膜スクリーンで間違った画像を選択する
- 30. CSSトランジション極めてラグ網膜ディスプレイ
このような精度をお寄せいただきありがとうございます。レンダラの使用率は約99%、Tilerは約5%です。私の看板のほとんどは2Dスプライトのように表示されるので(テクスチャはスケーリングされていません)、ミップマッピングはパフォーマンスを向上させません。私はPowerVRのプロファイリングエディタを試し、iPad 1で自分のアプリをテストします。 – Klem
Bradに感謝します。私は過去6ヶ月間に狂ったようなシェーダをコーディングしていましたが、テクスチャ座標を変更する方法を学んだとき、それは私の脳内でオンになっている光のようでした。しかし、最近、2つの異なるテクスチャから読み込んだり、1つのテクスチャでベースとノーマルのマップをタイルする方が良いかどうか疑問に思っています。どちらが速いですか。シェイダーガイドのAppleのベストプラクティスは、テクスチャの修正が頂点シェーダで行われた場合、依存テクスチャの読み込みではないことを意味します。私はiphone4のレンダリングが高速化するかどうかを調べるつもりです。多分別のマップを試してみてください。 – badweasel