2016-09-06 6 views
0

私はボクセルエンジンを32 x 32 x 32ブロックの塊で世界を分割しています。私は、固体のボクセルで覆われた面をレンダリングしないか、同じ見た目の隣のボクセルに対してface mergingをレンダリングしないなど、多くのレンダリング最適化を実装してきました。OpenGL Voxelエンジンフェイスマージvs per-Vertexアンビエントオクルージョン

事は、私はちょうどthat imageのように、CPUからのocclussionを計算し、シェーダに渡す、頂点ごとのアンビエントオクルージョンを実装したいということです。それはほぼ正常に動作しますが、線形補間のために顔のマージは大きな面に大きなグラデーションを作成します。なぜなら、OpenGLはフラグメントの最終的な色を作るからです。

この問題を解決する方法がある場合は、フラグメントシェーダに頂点からのフラグメントの距離またはそのようなものを伝えることで、今すぐに行きたいと思います。

+0

Google「Greedy Meshing」 – Krythic

答えて

1

あなたの「顔合併」システムを完全に捨てる方が良いでしょう。あなたがこのオクルージョン物をより効果的にすることができるからだけではありません。あなたの顔は、システムをマージして

一つの問題は、レンダラーは2つのだけの三角形の間にエッジがギャップを持っていないことを保証することを2つの共有位置がバイナリ同じ値が唯一場合です。顔マージシステムには、エッジを部分的に共有する多くの三角形があります。これらのケースでは、GPUはエッジについて何も保証しません。これにより、エッジ間に亀裂が見えることがあります。

関連する問題