編集:これは私自身の学習経験のためだけのものであり、私がこの質問をするのはパフォーマンス上の理由のためではありません。
これはMinecraftのような地形エンジンに関するものです。ブロックをチャンク(16x256x16ブロック)に格納します。チャンクを生成するときは、複数の手順テクニックを使用して、地形を設定し、オブジェクトを配置します。生成中は、チャンク全体(ソリッドまたは非ソリッド)に1つの1D配列と、ソリッドブロックの個別の1D配列を保持します。
生成後、隣接するソリッドブロックを繰り返し処理して、隣接するソリッドがないブロック面のみを生成します。生成する顔を独自のリストに保存します(これは、可能な顔/法線ごとに1つずつ、6つのリストです)。チャンクをレンダリングするとき、カメラの現在のチャンクのすべてのリストと、他のすべてのチャンクのカメラに面するリストのみをレンダリングします。これを行うには、6つのリストすべてを1つのバッファーに格納し、描画する範囲を変更します。
Andrew Russellが提案したこの小さなシェーダートリックで2Dアトラスを使用して、類似した面を完全にマージしたいと思います。つまり、それらが同じリストにある場合(同じ法線)、互いに隣接している場合、同じライトレベルである場合などです。最終的には四角形になることはわかっていますが、頂点の数を簡単に50%削減できるはずです私の見積もりが正しい場合はそれ以上。
私の仮定は、6つのリストのそれぞれを、それらが置かれている軸、次に他の2つの軸でソートすることです(ブロックの上部のリストは、Y値、X、Zの順にソートされます)。
これだけでも、非常に簡単に顔のストリップをマージできますが、可能な場合は、ストリップだけではなく、マージすることを目指しています。私はこの貪欲なメッシュアルゴリズムについて読みましたが、それを理解するのに多くの問題を抱えています。
だから、私の質問:説明されているように顔のマージを実行するには(動的なテレイン/ライティングの悪いアイデアであるかどうかを無視して)、実装が簡単なアルゴリズムがあるのでしょうか?また、私は貪欲なアルゴリズムをはるかに簡単な方法(リンクまたは説明)で案内する答えを喜んで受け入れます。
実装が簡単な場合や、ストリップを実行するよりも少しだけ優れている場合でも、パフォーマンスが少し低下してもかまいません。ほとんどのアルゴリズムは四角形ではなく三角形に焦点を当てているのではないかと心配しています。現在の方法で2Dアトラスを使用すると、現在のスキルに基づいて三角形を実装できるかどうかわかりません。
PS:私はすでにチャンクごとに錐台カリングを行っており、説明したように、ソリッドブロック間のフェースもカリングします。私はまだ閉塞淘汰をしていないし、決してしないかもしれない。
*編集:私は独自の小さなテクニックを実装しましたが、おそらく名前が付いていますが、6つのリストをたどります。これらのリストは、それらが置かれている軸、ブロックタイプ、照明レベルの順に並べ替えられています。私はそれらを反復処理し、移動しながら新しい長方形を作成し、同時に(特定の軸に向かって大きなバイアスをかけて)それらを成長させます。明らかに最適ではありませんが、実際には非常に高速であり、頂点数を平均で50%近く削減します。Byte56のコメントは、私が本当の答えを考えているクローゼットですが、答え/報奨金としてそれを選択することはできません。
これは、最適化をほとんど行わずに完全な初期地形を生成した後、この問題を処理する私の速くて単純な方法です。与えられたすべての正方形が同じ画像、光レベル、法線などであると仮定します。各色は、私がレンダリングする異なる四角形です。私のリストはそれらがそうであるようにソートされているので、これは非常に簡単/高速なアプローチです。