いくつかのメッシュ(時には500以上)をレンダリングしており、これにアプローチする最善の方法を知りたかったのです。 500個のVBOを作成するのは無意味でしょうか?そして、それらが錐台と可視性テストに合格すれば、それらをレンダリングします。これを行うより効率的な方法はありますか?私はパフォーマンスを最大限にしようとしています。OpenGL - 複数のVBOを使用して描画をスローダウンしますか?
10
A
答えて
11
あなたの質問に答えるには、多くのVBOが問題を緩和します。より多くのポリスは通常レンダリングを遅くしますが、描画呼び出しが増えるほどヒット率は高くなります。状態の変化や描画を最小限に抑えたいだけでなく、バッファ数(メモリ使用量)も必要です。
まず、バッファーを調べて、どれくらい多くのものがあるのかを考えてください。にはが必要です。バッチ/インスタンスジオメトリを使用できる場合は、スタティックジオメトリを単一のバッファにマージし、バッファをより効率的に再利用してください。
バッファを最小限に抑えたら、複数のソート。俯瞰(おそらくオクトリー)とオクルージョンの両方による可視性は、大幅なパフォーマンス向上をもたらす可能性があります。主なアイデアは、ジオメトリをできるだけ早く簡単に無効にすることです。そのため、大まかなテスト(オクトリー)から少し詳細(おそらくAABBおよび/または単純化されたハル)から開始し、次にオクルージョンを実際に描画します。
ここには、四分の一(および、拡張、オクト)のビットに触れるgood article on frustrum cullingがあります。ダイアグラム、説明、サンプルコード。
OpenGLオクルージョンカリング記事は、あまり一般的ではないようですが、this one from GPU Gemsは良いスタート地点かもしれません。
関連する問題
- 1. コードアシスト、OpenGL VAO/VBOクラス描画なし
- 2. OpenGL ES 2.0 iOSで異なるシェーダプログラムを使用して複数のVBOを描画する方法
- 3. FBOを使用したOpenGLシャドウマッピング - 複数の末尾描画
- 4. OpenGL ES 2.0、複数の頂点バッファを使用した描画
- 5. VBOを使ったOpenGLの複数テクスチャ
- 6. OpenGL複数のオブジェクトを描画する
- 7. iPhoneでOpenGL ESを使用して直線を描画しますか?
- 8. Android 2.1のOpenGL ESで基本VBOを使用した三角形描画問題
- 9. OpenGl ES:プッシュ/ポップ行列を使用して描画された複数のオブジェクトのレイピッキング
- 10. OpenGL ES 1.0を使用したAndroidでのオフスクリーン描画のオプション?
- 11. PILを使用してクリッピングマスクを使用してグラデーションを描画しますか?
- 12. CUDAを使用したOpenGLの高さマップペイントVBO
- 13. opengl:フェードグラデーションを使用したテクスチャの描画
- 14. OpenGLを使用したiPadの描画アプリケーション
- 15. OpenGL ES 1.0を使用したAndroid上の描画線
- 16. OpenGLとAllegro 5を使用したテキストの描画
- 17. AndroidでOpenGLを使用してフルスクリーンの単一フレームアニメーションを描画していますか?
- 18. jVennプラグインを使用して複数のベンダイアグラムを描画する方法
- 19. JAVAFXチャートを使用してチャートに複数の軸を描画する方法
- 20. Core Graphicsを使用してUIImageを描画しますか?
- 21. Java2Dを使用して3Dハウスを描画しますか?
- 22. OpenGL vboのアドバイス
- 23. 0,0座標からOpenGL Androidのテクスチャを描画します
- 24. SurfaceViewを使用して1つの複合画像を描画する方法
- 25. iOSの変形を使用してUIImageを描画します。
- 26. 複数のスレッドを使用してキャンバスに複数のビットマップを描画する方法
- 27. OpenGLを使用した三角形描画:2つのクラスを使用して管理する方法
- 28. jQueryを使用してテーブルを描画
- 29. OpenGL VBOペイントオーダー
- 30. HTML5キャンバスでforループを使用して画像を描画しますか?
返信いただきありがとうございます。私は、バイナリツリーを使って錐台の淘汰をしており、うまくいきます。私はちょうど500バッファを持つことは、VBOに関連するスピード・ゲインの本質を全面的に打破するという事実に心配していました。 –
これは間違っているわけではありません:いくつかのVBOを使うとGPUは別のものをアップロードしながらGPUを描画し、GPUメモリとメインメモリ間でデータを移動できるので、運転者がしなければならないこともある)は、データを更新するように、より効率的になります。ちょうど、peachykeenが指摘したように、そのうちの数百を持つことは、何百回も状態を変えることを意味し、最終的には有害である。 – Damon
ええ、VBOは良いです(回避する方法があればフレームごとにジオメトリを送るべきではありません)が、バッファが多すぎるとメモリ不足エラーが発生し、パフォーマンスが著しく低下する可能性があります。私は500が*多すぎるかどうかはわかりませんが、それをカットして見ても十分かもしれません。 – ssube