プログラマブルシェーダの概要
1.プログラマブルシェーダとは何か?
DirectX の Direct3D レンダリング処理の一部を、プログラマが記述できるようにしたもの。
DirectX 8 から利用可能で、DirectX バージョンによって利用可能な機能が違うが、
DirectX 10 まででは、以下の種類のシェーダがある。
(なお、2012.06.25 現在の最新 DirectX SDK バージョンは 2009 年リリースの DirectX 11.0 )
・頂点シェーダ (Vertex Shader) (DirectX 8.0 から利用可能)
プログラマブルシェーダの中では最初に実行される。
頂点変換処理と、ピクセルシェーダへの情報引渡しを行う。
・ジオメトリシェーダ (Geometry Shader) (DirectX 10.0 から利用可能)
このシェーダは後述の Shader Model 4.0 以上でのみ使うことができる。
頂点シェーダの後に実行される。
プログラムにしたがって頂点を増減する。今回は取り扱わない。
・ピクセルシェーダ (Pixel Shader) (DirectX 8.0 から利用可能)
頂点シェーダとジオメトリシェーダの後に実行される。
頂点シェーダから渡された情報を使って、ラスタライズ後のピクセル処理を行う。
※Expression Blend では、ピクセルシェーダしか使えない。
・ハルシェーダ (Hull Shader) と ドメインシェーダ (Domain Shader)
テッセレーション(頂点分割)のために実行される。今回は取り扱わない。
2.プログラマブルシェーダが使われているのはどんなときか?
アンマネージドな DirectX , XNA Game Studio , SlimDX , WPF , etc...
ゲーム、デモアプリ、企業製作の独自デバイスのテストショーアプリ、シェーダを利用した画像生成処理、etc...
3.プログラマブルシェーダで何ができる?
きれいな画像を高速描画(^ω^ )
レンダリング過程の途中データの出力・保持、Z バッファをバイナリデータ出力する、など。
4.プログラマブルシェーダを使うには何が必要か?
DirectX 8.0 以上の 3D の初期化ができるグラフィックボード。
さらに、対象とする Shader Model のバージョンにグラフィックボードが対応していないといけない。
(なお Shader Model 2.0 が使えるのは DirectX 9.0 から)
5.ゲームがユーザーに要求する PC スペックの落としどころは?
CPU やメモリよりも、新しいDirectX や新しいシェーダモデルを使えるグラフィックボードかどうかがポイント。
高速 PC でも、DirectX 9 の初期化ができないグラフィックボードはある。
Shader Model はバージョンが高いほど高速・高性能だが、現実的には DirectX 9.0 で
Shader Model 2.0 あたりを使うのが妥当か。
CPU やメモリは今や多くの PC で十分パワーがあるので気にしない。(作るゲームによる)
6.シェーダモデル (Shader Model) について
頂点シェーダ・ピクセルシェーダ・ジオメトリシェーダそれぞれのシェーダ処理で使う関数や構文の、
数・種類を決定する、機能のセット。シェーダ処理を記述する際、必ずこれを指定する。
これらの各シェーダは、別に全部同じバージョンを指定する必要はなく、ユーザーは1回の
シェーダ処理の中で好きなバージョンを組み合わせられる。
→頂点シェーダは 1.1 を使い、ピクセルシェーダは 3.0 を使うなど。
| DirectX Version |
Vertex Shader |
Pixel Shader |
Geometry Shader |
| 8.0 |
1.0, 1.1 |
1.0 |
- |
| 8.1 |
1.2, 1.3, 1.4 |
1.1 |
- |
| 9.0 |
2.0 |
2.0 |
- |
| 9.0a |
2_A, 2_B |
2.x |
- |
| 9.0c |
3.0 |
3.0 |
- |
| 10.0 |
4.0 |
4.0 |
4.0 |
| 10.1 |
4.1 |
4.1 |
4.1 |
| 11.0 |
5.0 |
5.0 |
5.0 |
7.新しい DirectX SDK を使うことの欠点
古い SDK に入っていたヘッダが除かれていたりするので、ゲームで古いバージョンの
Direct3D を使っていると、ビルドできないケースがある。
= 古いバージョンから最新バージョンの DirectX SDK への移行コスト(ソース修正の手間)がかかる。
8.用語解説
頂点シェーダとピクセルシェーダの処理を記述したテキストファイル。
いわばシェーダのソースファイル。エフェクトファイルともいう。
FX ファイルによる頂点シェーダやピクセルシェーダを通した、一連のシェーディング処理のこと。
DirectX でシェーダを記述するための言語。FX ファイルはこの言語で書く。
DirectX 8 ではアセンブラライクだったが、後に C ライクになった。
Expression Blend で独自ピクセルシェーダを使う際に必要になる、コンパイル済みエフェクトファイル。
( PS は Pixel Shader の略か?)
最終更新:2012年11月11日 02:30