私は、Minecraft のようなゲームでさまざまなテクスチャを持つ一連のキューブをレンダリングする最も効率的な方法を決定しようとしています。
インスタンス化されたレンダリングを発見しました。私が行ったことは、立方体のすべての頂点、法線、テクスチャ座標を格納する単一の「立方体モデル」を作成し、そこから配列バッファーを作成して一度 GPU に渡すことです。次に、(translation vector, texture index) 構造体の配列を作成し、インスタンス化されたレンダリングを使用して、同じ立方体を何度も再描画します。そのたびに、適切な texture が変換されます。
(うまくいけば、Notch は、私が自分のテクスチャを作成するまで、私が彼のテクスチャを使用することを気にしません)
問題は、すべての 6 面が常に同じテクスチャを持つとは限らないことです。ブロック タイプごとに異なるテクスチャを取得する方法を見つけようとしています。私が思いついた2つの解決策は次のとおりです。
- ブロック タイプごとに異なるモデルを使用します。このようにして、頂点ごとに異なるテクスチャ座標を指定できます。インスタンス化されたレンダリングは引き続き使用できますが、ブロック タイプごとに個別のパスを実行する必要がありました。
- ブロックごとに 1 つではなく、6 つの「テクスチャ インデックス」(面ごとに 1 つ) を渡します。
2 番目のソリューションでは、より多くの、おそらく冗長なデータを渡す必要があります。インスタンス化されたレンダリングのメリットがどれほど大きいかはわかりません...したがって、たとえば、最大 256 の「パス」(ブロック タイプごとに 1 つ) を実行する方が良いのか、それとも「1 つの大きなパス」を実行する方が良いのかわかりません。すべてのデータを渡して、すべてのブロックを 1 回のショットでレンダリングします。
それとも、私が気付いていない別の方法がありますか?