ここで古い質問を「バンプ」してもいいのかどうかはわかりませんが、いくつかのことが頭に浮かびました。
ボクセルが静的である場合、錐台のカリングなどに octree を使用することで、レンダリング プロセス全体を高速化できます。さらに、静的シーンを octree の潜在的な可視性セットにコンパイルすることもできます。PVS の主な原則は、他のノードが可視になる可能性があるツリー内のすべてのノードを事前計算し、それらへのポインタをベクトルに格納することです。レンダリングに関しては、最初にカメラが配置されているノードを確認し、ノードの PVS ベクトル内のすべてのノードに対してフラスタム カリングを実行します。
ボクセルのシェーディングがちょっと複雑な場合は、カラー バッファーに書き込むことなく、深度バッファーを埋めるためだけに事前深度のみのパスを実行することも高速です。その後、2 番目のパスをレンダリングします。Depthbuffer への書き込みを無効にし、Depthbuffer をチェックしながら Colorbuffer のみにレンダリングします。そのため、ビューアーに近い新しいフラグメントによって後で上書きされる高価なシェーダー計算を回避できます (Carmack は Quake3 でそれを使用しました)。
間違いなく高速化するもう 1 つのことは、インスタンス化の使用です。各ボクセルの位置のみを保存し、必要に応じてそのスケールやその他のパラメータをテクスチャ バッファ オブジェクトに保存します。頂点シェーダーでは、スポーンするボクセルの位置を読み取り、ボクセルのインスタンス (頂点バッファー オブジェクトでシェーダーに与えられる立方体) を作成できます。したがって、8 つの頂点 + 8 つの法線 (3 *sizeof(float) *8 +3 *sizeof(float) *8 + 色/テクスチャなどの floats...) を VBO のカードに 1 回だけ送信し、次にTBO 内の Cube (3*sizeof(float)*number of voxels) のインスタンスの位置。
おそらく、2 つのスレッドで 3 つのステップすべてを組み合わせることにより、GPU と CPU の間で物事を並列化することが可能です。CPU スレッドでは、octrees pvs をチェックし、次のフレームでインスタンス化するために TBO を更新します。その間、GPU スレッドは 2 をレンダリングします。前の手順で CPU スレッドによって作成されたインスタンス化用の TBO を使用しているときにパスします。その後、TBO を切り替えます。カメラが移動していない場合は、CPU 計算を再度行う必要さえありません。
私が興味を持っている別の種類のツリーは、いわゆるkdツリーです。これは、octreesよりも一般的です。
PS:私の英語で申し訳ありませんが、それは最も明確ではありません....