App Hub

コード サンプルの詳細

パーティクル 3D

コード サンプル

説明

このサンプルは、ポイント スプライトを使用して 3D パーティクル システムを実装する方法を示します。カスタム頂点シェーダーを使用して、グラフィック カードでパーティクル全体をアニメーション表示するので、最小の CPU オーバーヘッドで多数のパーティクルを描画できます。

サンプルの概要

多数のパーティクルを表示する場合、すべての要素を更新し、描画を行う GPU にパーティクルの最新位置を転送する際の CPU の処理量がゲームのボトルネックになりがちです。それを避けるため、このサンプルでは、パーティクルのアニメーションを GPU へ委任するので、アクティブなパーティクルの数に関係なく CPU のオーバーヘッドを低く抑えることができます。パーティクルのアニメーションを GPU にまかせることにより、それ以外のゲームプレイ、物理特性、AI などの処理のために CPU を空けておくことができます。

新しいパーティクルが作成されると、CPU は、そのパーティクルが作成された位置、速度、および時刻を頂点構造体に格納します。この頂点を GPU にアップロードした後、CPU が再度それを扱う必要は一切ありません。フレームごとに、現在の時刻が頂点シェーダー パラメーターとして設定されます。GPU は、パーティクルを描画するときに、作成時刻 (頂点データの一部として格納されている) を現在時刻と比較することで各パーティクルの世代を割り出すことができます。開始位置、速度、および世代がわかれば、シェーダーは現在の位置を計算して、その場所にポイント スプライトを描画できます。

新しいパーティクルは常に頂点バッファーの末尾に追加され、古いパーティクルは先頭から削除されます。すべてのパーティクルが同じ時間だけ存続し、アクティブなパーティクルは常に、連続するバッファー領域にひとまとまりになっているので、1 回の呼び出しですべてを描画できます。CPU は新しいパーティクルの頂点をバッファーの末尾に追加し、古いパーティクルの頂点を先頭から削除しますが、バッファーの中部にあるアクティブなパーティクルに対しては何も行う必要がありません。数千ものパーティクルがあるゲームでも、通常はフレームごとに数回の作成と削除だけで済むので、CPU の負荷は非常に低くなります。

このサンプルは 3D で動作しますが、正行列をカメラ射影行列に設定すれば、同じコードを使用してより効率的な 2D パーティクル システムを実現できます。


ダウンロード

フレームワーク

GS 4.0

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