いくつかのメッシュ(時には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. VBOを使ったOpenGLの複数テクスチャ
- 4. OpenGL ES 2.0、複数の頂点バッファを使用した描画
- 5. FBOを使用したOpenGLシャドウマッピング - 複数の末尾描画
- 6. OpenGL複数のオブジェクトを描画する
- 7. OpenGL VBOで何千ものポリゴンを描画する
- 8. iPhoneでOpenGL ESを使用して直線を描画しますか?
- 9. OpenGLは私がにiOS用の描画アプリケーションの一部として、OpenGLを使用しています
- 10. VBOを使用して異なる幅の色付き線を描画しますか?
- 11. scenekitにSCNNodeRendererDelegateでOpenGLを使用して描画する方法
- 12. Android 2.1のOpenGL ESで基本VBOを使用した三角形描画問題
- 13. gnuplotでスクリプトを使用して複数行を描画する
- 14. OpenGLでDDAを使用して線を動的に描画
- 15. python - 複数のプロットを描画する関数を使用しますか?
- 16. OpenGlはVBOを使用して三角形を表示しません
- 17. OpenGL:1つのVBO用の複数のVAO
- 18. iOSでOpenGL ESを使用してランダムな画像を描画するには
- 19. OpenGLのテクスチャを1つの色として描画します
- 20. CUDAを使用したOpenGLの高さマップペイントVBO
- 21. OpenGL ES 1.0を使用したAndroidでのオフスクリーン描画のオプション?
- 22. OpenGL VBOのバッチベストプラクティス
- 23. OpenGL vboのアドバイス
- 24. OpenGLとAllegro 5を使用したテキストの描画
- 25. OpenGL ES 1.0を使用したAndroid上の描画線
- 26. OpenGLを使用したiPadの描画アプリケーション
- 27. opengl:フェードグラデーションを使用したテクスチャの描画
- 28. OpenGl ES:プッシュ/ポップ行列を使用して描画された複数のオブジェクトのレイピッキング
- 29. AndroidでOpenGLを使用してフルスクリーンの単一フレームアニメーションを描画していますか?
- 30. PILを使用してクリッピングマスクを使用してグラデーションを描画しますか?
返信いただきありがとうございます。私は、バイナリツリーを使って錐台の淘汰をしており、うまくいきます。私はちょうど500バッファを持つことは、VBOに関連するスピード・ゲインの本質を全面的に打破するという事実に心配していました。 –
これは間違っているわけではありません:いくつかのVBOを使うとGPUは別のものをアップロードしながらGPUを描画し、GPUメモリとメインメモリ間でデータを移動できるので、運転者がしなければならないこともある)は、データを更新するように、より効率的になります。ちょうど、peachykeenが指摘したように、そのうちの数百を持つことは、何百回も状態を変えることを意味し、最終的には有害である。 – Damon
ええ、VBOは良いです(回避する方法があればフレームごとにジオメトリを送るべきではありません)が、バッファが多すぎるとメモリ不足エラーが発生し、パフォーマンスが著しく低下する可能性があります。私は500が*多すぎるかどうかはわかりませんが、それをカットして見ても十分かもしれません。 – ssube