Xbox LIVE Indie Games

コード サンプルの詳細

メッシュのインスタンス化

コード サンプル

説明

このサンプルは、GPU によるインスタンシングのテクニックを使用して、反復的な描画呼び出しのコストを削減することで、多数の同じモデルを効率的にレンダリングする方法を示します。

サンプルの概要

ゲームでは、同じモデルを多数描画しなければならないことがよくあります。たとえば、背景を木々で覆ったり、部屋を木箱でいっぱいにしたりする場合などです。モデルのレンダリングに必要な呼び出しは比較的高コストであり、数百または数千のモデルを連続して描画する場合は、すぐに過負荷状態になる可能性があります。このサンプルには、同じモデルを多数描画する際のオーバーヘッドを削減するために使用できるいくつかのテクニックが示されています。

単一の完璧なインスタンシングのテクニックは存在しません。Windows では Xbox 360 とは異なる方法で実装する必要があります。Windows では、理想的なテクニックにはシェーダー 3.0 が必要ですが、代わりにシェーダー 2.0 を使用する方法もあります。このサンプルには、いくつかの異なるインスタンシング テクニックが実装されており、両方のプラットフォームおよび両方のバージョンのシェーダーで動作します。

これらのインスタンシング テクニックを使用すると、モデルの描画に必要な CPU の処理負荷を大幅に削減できます。ただし、GPU のコストはあまり変わらず、場合によってはわずかに増大することがあります。モデルを描画するときの CPU のコストは、モデルの複雑さに関係なく一定ですが、GPU のコストはトライアングルの数やシェーダーの複雑さに比例して増大します。このため、ほとんどの場合、単純なシェーダーによる低ポリゴン モデルの描画は主に CPU の性能によって制限される一方、精密なメッシュは GPU によって制限される傾向があります。GPU がボトルネックとなっている場合は、これらのインスタンシング テクニックを使用するメリットは何もありません。また、モデルが大きくて複雑な場合は、インスタンシングに必要なメモリのオーバーヘッドが非常に大きくなる可能性があります。インスタンシングは、トライアングルが 1000 個程度までの比較的小さくて単純なモデルで使用する場合に最大のパフォーマンス向上がのぞめます。

インスタンシングするには、頂点およびインデックスのデータが特定の方法で構成されている必要があります。XNA Framework に組み込まれている Model クラスは、インスタンシングされたレンダリングを適正にサポートするには柔軟性が不足しています。そのため、このサンプルでは代わりに InstancedModel クラスを実装しています。カスタム コンテンツ パイプライン プロセッサは、モデル データを .X や .FBX などの入力ファイル形式から InstancedModel クラスに変換するために使用されます。このしくみの詳細については、「カスタムなモデルのクラスのサンプル」を参照してください。


※ 以下、「ダウンロード」で提供されるファイルは原則として英語での提供となります。

ダウンロード

フレームワーク

GS 4.0

ラーニング コンテンツを検索
var gDomain='m.webtrends.com'; var gDcsId='dcschd84w10000w4lw9hcqmsz_8n3x'; var gTrackEvents=1; var gFpc='WT_FPC'; /*<\/scr"+"ipt>");} /*]]>*/
DCSIMG