Octreeレンダリングの最適化


7

たとえば、オクツリーがあり、特定のレベルでVOCをそのオクツリーに格納するとします。基本的な錐台カリングを実行できるように、vboを​​所有するノードの次元を知っています。画面外のすべてがレンダリングされることはないため、これはうまく機能します。

しかし、私の世界は非常に大きく、私は現在、すでに描かれたオクトリーの背後にも物事を描いています。他のノードによって隠されているノードを描画しないために何を使用しますか?

OpenGL superbibleでオクルージョンカリングに関するいくつかの言及を見ましたが、オクルーダーとオクルーディーを明確に区別していない場合に、それをどのように利用できるのかわかりません。


1
ノードのコンテンツが必ずしもノードを完全に満たしていない場合、オクルージョンを使用してオクルージョンを行う方法はわかりません
CiscoIPPhone

octreeの内容をオクルーダーとして、octreeノードをオクルーディーとして使用できます。部分的に塗りつぶされたいくつかのノードの総ピクセルカバレッジ(つまり、オクツリーノードキューブの完全なピクセルフットプリントにマップされない部分)は、大きなオクルーダーを簡単に形成し、これにより、オクツリーノードがカメラ。
Crowley9

回答:


6

octreeの機能の1つは、octreeノードを前から後の順序でレンダリングできることです。グラフィックハードウェアのEarlyZ実装をより効果的にすることができるため、これを実行するだけでパフォーマンスが大幅に向上します(実行するシェーダーが少ない、ラスター作業が少ないなど)。

オクルージョンクエリを使用してオクツリーノードの可視性をクエリすることの利点は、非常に複雑な幾何学的オブジェクトのレンダリングを省略できることです。シーン内の(不透明な)オブジェクトはオクルーダーであり、オクツリーノード(およびその内容)はオクルーディーです。サマウサが言ったように、これを正しく行うのは本当に難しいので、試す前にこのペーパーをチェックしてください(ストールは、注意深く扱わないとパフォーマンスが低下します)。また、幾何学的な複雑さが実際にパフォーマンスを制限するものであることを確認してください。そうしないと、時間を無駄にする可能性があります。


2

OpenGLはネイティブでオクルージョンクエリをサポートしていませんが、ARB_occlusion_queryなどの拡張機能を使用できます。リンクにはプロジェクトと、PDFその使用方法を説明する素敵なものがあります。ただし、オクルージョンクエリは、単にジオメトリを描画するよりもコストがかかることがあります。これは、ジオメトリがそれほど複雑でない場合に特に当てはまります。

シーン(スクリーンショット)に関する詳細情報を提供すると、より優れたソリューションを提供できる可能性があります。


0

私は現在、カメラまでの距離でvboを注文するだけです。これが最も役立つようです。オクルージョンクエリの理解に失敗しない限り、コードが遅くなり、実際に役立つ代わりに奇妙な結果が得られます。そのため、途中でさらにパフォーマンスの問題が発生しない限り、私は自分が持っているものに固執します。


良いアイデア。:-)述語オクルージョンクエリを調べたい場合があります(DX10ハードウェアに必要で、OGL拡張があると思います)。プレディケーションは失速を防ぎ、多くの欠点を取り除くのに役立ちます。繰り返しますが、ここでの主な動機は、フレームごとに数百万の三角形をレンダリングする場合です。
Crowley9
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.