VBOを使用した錐台カリング


8

私のプロジェクトでは、OpenGLのVBOを使用して地形がレンダリングされています。錐台カリングを適用したいのですが、描画されている各ポリゴンにアクセスして、表示されているかどうかを確認する方法がわかりません。これがオクツリーが登場する場所だと思いますが、これが実際にどのように行われるのかはわかりません。誰かがこの特定のことをする方法についての良いチュートリアルを知っているか、私のためにいくつかの疑似コードを持っていますか?

よろしくお願いします!

回答:


3

地形データの保存方法の詳細については、こちらをご覧ください。チャンクを保存していますか?VBOを常に再構築していますか?すべての地形が1つのVBOにあり、一度にその一部をレンダリングしていますか?

ポリゴンごとにカリングしようとすると、節約するよりもオーバーヘッドが増える可能性があります。一度にテストできるテレインのチャンクが大きければ大きいほど、カリングはより速くなり、精度は明らかにトレードオフになります。最後に、そのトレードオフの最適なポイントを把握するためにプロファイリングを行う必要があるため、地形の分割方法を動的に変更できるシステムを作成すると非常に役立ちます。


1

GPU は既にポリゴンごとにポリゴンをカリングすることができますが、これはラスタライズ/セットアップ時に行われ頂点シェーディングのに発生します(頂点/ジオメトリ/ハル/ドメインシェーダーを使用)。これは、GPUがポリゴンの頂点をシェーディングして、最終的にカリングされる可能性があることを意味します。これが発生した場合、GPUは多くの作業を無料で実行するため、GPUサイクルの無駄になります。

このため、CPU側(またはDraw10directやプレディケートレンダリングなどのDX10 +機能を使用するGPU側)で非表示のジオメトリをカリングして、それらのバッチの描画を呼び出さないだけで、GPUサイクルを無駄にしないようにしています。

通常、そのポリゴンのバッチは、それらすべてのポリゴンを囲む球体またはボックスで表すことができます。次に、この境界球/ボックスが錐台に対してテストされ、錐台に接触すると、それらのポリゴンに対して描画呼び出しが呼び出されます。そうでない場合、描画呼び出しはスキップされます。オクツリーは、データを階層的に整理することを除いて、表示されるジオメトリのバッチを決定するもう1つの方法です。オクトリーは必ずしもすべてのジオメトリに適しているわけではありません。

球体/錐台の技術を説明するいくつかのかなり良い参考文献は以下の通りです:

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.