OpenGL 4.0 では、シェーダー テッセレーションのサポートが追加されました。プリミティブごとのテッセレーションと vao 頂点のプリロードのパフォーマンスの違いは何ですか? vao 頂点のプリロードとは、すべての頂点データを vao にロードし、テッセレートされたサーフェスを RAM に保持しながらレンダリングすることを意味します。
1 に答える
答えは間違いなく「状況によって異なります」です。
OK、メッシュのコントロールポイントがたくさんあります(Bezier、NURB、Catmull-Clarkなど)。従来のOpenGLでは、CPU上のコントロールポイントをテッセレーションし、頂点バッファオブジェクトのVAOコレクションに三角形を格納していました。OpenGL 4を使用すると、VAOでコントロールポイントを渡し、GL_PATCHESとしてレンダリングし、コントロールシェーダーと評価シェーダーに三角形を生成させることができます。
コントロールポイントのメッシュが静的でほとんど変更されない場合は、フレームごとにまったく同じテッセレーションを再計算するのではなく、テッセレーションを1回だけ実行して結果を保存するため、CPUソリューションの方が優れています。
メッシュが変更された場合、GPUソリューションの方が優れています。データが少なくなるため、CPUからGPUへの新しいコントロールポイントのコピーが高速になり、GPUは並列にテッセレーションできるため、高速になります。GPU側のテッセレーションで、メッシュ内の個々のクワッドの距離(またはその他)によって詳細レベルを変更できるようになったため、シェーダーを使用してROAMタイプのアルゴリズムを実装できます。
たとえば、複雑なライティングおよびシャドウイングアルゴリズムによって、GPUにすでに大きな負荷がかかっていて、CPUに軽い負荷がかかっている場合を除きます。この場合、CPUでテッセレーションを実行すると、テッセレーション自体に時間がかかる場合でも、システム全体のパフォーマンスが向上します。
あなたはどちらですか?試してみてください!
(また、それはまったく問題ではないかもしれないことに注意してください。最新の3Dシステムは非常に高速です。)