連載 .NET&Windows Vistaへ広がるDirectXの世界 第7回 プログラマブル・シェーダによる積極的なGPUの活用 NyaRuRuMicrosoft MVP Windows - DirectX(Jan 2004 - Dec 2007) 2007/05/08 |
|
Back Issue
|
||||||||||||
|
連載最終回となる今回は、いよいよGPUを利用したプログラミングについて取り上げる。XNA Game Studio Express(以下 XNA GSE)を利用してマンデルブロ集合のリアルタイム描画を行うことで、CPUとGPUの間でのデータ交換の仕組みとHLSL(High Level Shader Language、上位シェーダ言語)によるシェーダ・プログラミングの基礎について学ぶ。
■はじめに
Windows Vistaの登場により、GPUはPCの標準的なデバイスとして今後普及していくだろう。そんないまこそ、GPUのプログラミングを始める良いタイミングである。
過去数年間、GPUベンダやゲーム開発者たちは、GPUのためのプログラミング言語やデバッグ手段などについて試行錯誤と議論を積み重ねてきた。そして現在、ポリゴン・ベースのリアルタイム3Dプログラミングは、コンセプト、方法論ともに一定の合意に近づきつつある。XNA GSEによって、ぐっと容易になったGPUプログラミングに挑戦してみよう。
■トピックの由来とサンプル・コード
今回取り上げるマンデルブロ集合の描画というトピックは、XNAチームのShawn Hargreaves氏のBlogに投稿された「Sixty fractals per second」というエントリにヒントを得ている。
ゲーム・プログラミングの世界でシェーダ・プログラミングというと3Dの照明技術や画像効果に関するトピックが多いが、今回あえて3Dと関係のないトピックを選んだのは、実際にXbox360の計算能力を見てもらうにはマンデルブロ集合のような数列計算の方が分かりやすいと考えたからだ。そして何より、筆者がHargreaves氏のサンプルを動かしていて純粋に楽しめたという理由も大きい。Xbox360でXNAを実行できる方は、ぜひ60FPSでマンデルブロ集合の世界を自由に探索してみていただきたい。
本記事では、氏のコードを参考にしつつ、描画の流れを説明するために新しく書き下ろしたサンプル・コードを使用する。分量の都合上、コードすべてを載せることができないため、プロジェクト・ファイルをダウンロードできるようにした。なお、実行にはシェーダ・モデル3.0以上に対応したビデオ・カードか、Xbox360が必要である。サンプル2とサンプル3は、キーボードまたはXbox360のコントローラで操作できる。キーボードは、カーソル・キーで移動、[PageUp]/[PageDown]キーで拡大/縮小する。
-
サンプル1
画面全体をピクセル・シェーダで塗りつぶす。
画面全体をピクセル・シェーダで塗りつぶすサンプル・プログラム |
- サンプル2
ピクセル・シェーダでマンデルブロ集合を描画する。
ピクセル・シェーダでマンデルブロ集合を描画するサンプル・プログラム |
- サンプル3
サンプル2の改良版。本記事では解説しない。
サンプル2の改良版(本記事では解説しない) |
実行環境をお持ちの方は、まずはプログラムの方を動かしていただいて、雰囲気をつかんでから以下の記事を読んでいただければ、より理解が深まることだろう。
【コラム】XNA GSE 1.0 Refreshの登場とXNA Creators Club Onlineの拡充 待望のXNA GSEの初アップデートが、2007年4月24日、XNA GSE 1.0 Refreshとして公開された。 このアップデートでは、Windows Vistaへの正式対応をはじめとした数多くの改良とバグフィックスが行われている。リリースノートは英語だが、日本のXNAチームのBlogで簡単な解説が行われているので目を通しておくとよいだろう。 本記事でも、XNA GSE 1.0 Refreshの新機能であるパッケージ機能をさっそく活用してみることにした。今回の更新で、XNA GSEのGUIからゲームのバイナリ・ファイルのパックを行い、ほかの開発者に簡単に配布できるようになった。さらにパッケージ・ツールはコンソール版も用意されており、外部の自動ビルドの仕組みと組み合わせることもできる。
また、Xbox360を持っていないという読者の方にとっても、XNA Creators Club Onlineの最近の更新は注目に値するだろう。Creators Club Onlineでは、多数の記事やサンプル・コードが無償公開されている。これらのサンプルは、Xbox360を入手したり有料会員になったりしなくても、Shader Model 2.0または3.0をサポートしたWindows VistaやWindows XP環境があれば実行できるのだ。普段ゲーム・プログラミングに縁がないという人にとっても、C#でどのようにゲームが実装されているのか眺めてみるよいチャンスだろう。
|
まずは大まかな描画の流れから見ていこう。
INDEX | ||
.NET&Windows Vistaへ広がるDirectXの世界 | ||
第7回 プログラマブル・シェーダによる積極的なGPUの活用 | ||
1.トピックの由来とサンプル・コード | ||
2.描画の流れ(1) | ||
3.描画の流れ(2) | ||
4.描画の流れ(3) | ||
5.描画の実行 | ||
「.NET&Windows Vistaへ広がるDirectXの世界」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|