シェーダーモデル
シェーダーモデル(英語:Shader Model 、略称:SM)とは、DirectX 8から採用されたGPUが実装する最低限の「機能」および「制約」を大雑把に世代番号で表したものである。たとえば「SM 1.1」とあれば、プログラマブルシェーダーとしてバーテックスシェーダーだけが使え、プログラマブルシェーダーに投げ込める最大命令数は128命令(アセンブラのステップ数)となっている。
もっと噛み砕いていえばゲームのパッケージなどに「DirectX 11対応」など記載されているが、あれのプログラマ向け表記みたいなものである。DirectXのバージョンが上がる際にはシェーダーモデルのバージョンも上がるのが定番となっている。
主なバージョン
SM 1.x
- バーテックスシェーダー(最大命令数:128、プロファイル:vs_1_1)
DirectX 8.0で登場した最初のバージョン。マイナーチェンジも多数出た。
- DirectX 8.0 - SM 1.0 / SM 1.1
- DirectX 8.0a - SM 1.3
- DirectX 8.1 - SM 1.4
SM 2.0
- バーテックスシェーダー(最大命令数:256、プロファイル:vs_2_0)
- ピクセルシェーダー(最大命令数:テクスチャ関連32、計算関連64、プロファイル:ps_2_0)
DirectX 9.0で登場した。こいつもマイナーチェンジが多数登場した。
- DirectX 9.0 - SM 2.0
- DirectX 9.0a - SM 2.0a
- DirectX 9.0b - SM 2.0b
ピクセルシェーダー襲来。
SM 3.0
- バーテックスシェーダー(最大命令数:512以上、プロファイル:vs_3_0)
- ピクセルシェーダー(最大命令数:512以上、プロファイル:ps_3_0)
DirectX 9.0cで登場。Windows XP最後のDirectXであったため非常に長らく使われた。DirectXのバージョンだけを見るとマイナーチェンジに見えるが、実質メジャーバージョンアップであった。
投げ込める命令数の数が一気に増大した。普通に使ってたらそんな膨大な処理しねーよというレベルである。
このバージョンでベータ版を抜けた感があり、PC向けやスマホ向けを問わず、現代のGPUではこのレベルが最低基準となっている。激安スマホ向けのGPUでも大体このレベルはサポートしているので、SM3.0で書いておけば大方のプラットフォームにサクッと対応できる。いわゆるデファクトスタンダードである。
SM 4.0
- バーテックスシェーダー(最大命令数:無制限、プロファイル:vs_4_0)
- ジオメトリシェーダー(最大命令数:無制限、プロファイル:gs_4_00
- ピクセルシェーダー(最大命令数:無制限、プロファイル:ps_4_0)
DirectX 10で登場。DirectX 10がWindows Vista専用であったため壮大にコケた。
ジオメトリシェーダー登場。使いみちがイマイチわからない。
それよりも大きいのが命令数の上限がなくなったことである。VRAMもローエンドですらギガバイト当たり前の時代に突入し、元気があれば何でもできるようになった。
SM 5.0
DirectX 11で登場。Windows 7専用であったがWindows 7の大ヒットで一気に普及した。Windows 8とDirectX 11.1もSM5.0で、その次に登場したWindows 8.1とDirectX 11.2もSM5.0であった。つまり完成形といわれる。
コモンシェーダーなる概念が登場し、従来は各シェーダーごとに異なっていた命令セットの違いなどが撤廃され、さらに呼び出す順序も自由に決められるようになった。これにより「バーテックスシェーダー→ピクセルシェーダー→バーテックスシェーダー」などといったことも可能になった。はっきり言って無敵だ。
SM 5.1
DirectX 12で登場。Windows 10とXbox Oneが採用。
DirectX 11世代のハードウェアを低レベルで叩けるようになった。これはAMDがMantleという低レベルAPIを公開したことによる。その発想はたしかに素晴らしいがNVIDIAが宗教上の理由で採用できない。そこでマイクロソフトが仲裁に入る形で「あくまでマイクロソフト製」として再リリースされたものである。
ちなみに、あまりに画期的すぎてAppleがMetal、GoogleがVulkanというパクリを発表した。ぶっちゃけ時代に逆行しているよね。