【Xbox360】 XNA Game Studio その4 【C#】at GAMEDEV
【Xbox360】 XNA Game Studio その4 【C#】 - 暇つぶし2ch504:ひげねこ ◆oxtErU/kVM
08/02/24 05:17:03 XxNI12Tm
では、どうすれば良いのか?ということになりますが、例としてはパーティクルシステムがあります。
それぞれのパーティクルは四角形なので全ての処理をCPU側ですると4頂点分の計算処理に加えて、
4頂点分のデータを書かないといけません。

ここで殆どの人が見落とすのがデータの書き込み自体に掛かるコストです。Xbox 360はPCに比べると速いメモリを積んでいますが、
キャッシュミスしたときのペナルティが数百サイクルと非常に大きいんです。
そして、このキャッシュミスは書き出すデータの量に比例して増大します。

ですから、通常はPosition(Vec3)、 UV(Vec2)、Color(Color) = 24バイト*4 = 56バイトとなるところを
CenterPosition、Color、そしてパーティクルの四隅を計算するのに必要なパラメーター(スケール、回転など)とすると、24バイトと
半分以下にすることでメモリ書き込みのコストを減らすことができ、さらに4頂点分の計算は頂点シェーダー内で行われるので
その分、CPUの計算量を減らすことができます。


Xbox 360のシェーダーにはvfetchと呼ばれる命令があり、これを使うとDX10のジオメトリシェーダーっぽいことができます。

クリエーターズクラブにあるパーティクルサンプルはvfetchを使っていませんが回転などの処理はシェーダー内で行っています。
URLリンク(creators.xna.com)

vfetchについてはMeshインスタンスのサンプルで使われています。
URLリンク(creators.xna.com)

現状、XNAをXbox360上で動かした場合、CPUに比べてGPUは暇を持て余しているのでこき使ってあげましょう。


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch