XNAを使用して3Dでタイル状の地形を作成しようとしています。私はそれを行う方法についてのチュートリアルをチェックし
ました(RiemersとAllens)。Allensチュートリアルには、達成したい正確な結果がありますが、
パフォーマンスについてはよくわかりません。彼は単一の四角形を使用して
すべての地形を描画し、ピクセルシェーダーで処理しているようです。つまり、地形全体が
フレームごとに処理されます。
現在、タイルごとに四角形を描画しています(例)
。表示可能なタイルのみを描画できますが、各フレームでさらに多くの頂点を処理する必要が
あり、多くの「DrawIndexedPrimitives」が呼び出されることも意味します。
私はそれを正しくやっていますか、それともアレンの方法が速いですか?タイル状の地形をより良くする方法はありますか?
ありがとう。
1 に答える
地形の複雑さとサイズに完全に依存します。通常、複数のクワッド/タイルを持つ地形タイルがあり(たとえば、タイルは4096の三角形で構成されている場合があります)、頂点を移動して目的の地形を取得します。それでも、各タイルはインデックス付きのプリミティブになりますが、1回の描画呼び出しで、多くの三角形と地形の大部分が生成されます。このアイデアをさらに進めると、距離のタイルを大きくして、詳細があまり得られないようにすることができます(クアッドツリー/クリップマップベースの地形アプローチを探してください。次のようなものが得られます:http ://twitpic.com / 89y5kn。)
または、頂点シェーダーで移動できる場合は、インスタンス化を使用して、描画呼び出しの量をさらに減らすことができます。インスタンスごとに、UV座標をハイフィールドとワールドスペースの位置に渡してから、再び高解像度のタイルをレンダリングしますが、これで、地形全体に対して1回の描画呼び出しで終了する場合があります。
小さなゲームの場合、高解像度のタイル(65kの三角形など)をいくつか生成してから、それらを錐台でカルリングすることをお勧めします。それはあなたに簡単に大きな地形を与え、それでも管理しやすいです。しかし、これは間違いなくあまりうまくスケーリングしません:)あなたのニーズに依存します。
テクスチャタイルの場合、低解像度のインデックステクスチャを使用して、ピクセルごとにアトラスをルックアップするか、インデックスを頂点バッファに格納して補間することもできます(これは非常に一般的です:頂点ごとに4つの重みを格納して使用する4つの異なるテクスチャを検索します。)