シェーダーモデル

提供: MonoBook
ナビゲーションに移動 検索に移動

シェーダーモデル英語:Shader Model 、略称:SM)とは、DirectX 8から採用されたGPUが実装する最低限の「機能」および「制約」を大雑把に世代番号で表したものである。たとえば「SM 1.1」とあれば、プログラマブルシェーダーとしてバーテックスシェーダーだけが使え、プログラマブルシェーダーに投げ込める最大命令数は128命令(アセンブラステップ数)となっている。

もっと噛み砕いていえばゲームのパッケージなどに「DirectX 11対応」など記載されているが、あれのプログラマ向け表記みたいなものである。DirectXのバージョンが上がる際にはシェーダーモデルのバージョンも上がるのが定番となっている。

主なバージョン[編集 | ソースを編集]

SM 1.x[編集 | ソースを編集]

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[編集 | ソースを編集]

DirectX 9.0で登場した。こいつもマイナーチェンジが多数登場した。

  • DirectX 9.0 - SM 2.0
  • DirectX 9.0a - SM 2.0a
  • DirectX 9.0b - SM 2.0b

ピクセルシェーダー襲来。

SM 3.0[編集 | ソースを編集]

DirectX 9.0cで登場。Windows XP最後のDirectXであったため非常に長らく使われた。DirectXのバージョンだけを見るとマイナーチェンジに見えるが、実質メジャーバージョンアップであった。

投げ込める命令数の数が一気に増大した。普通に使ってたらそんな膨大な処理しねーよというレベルである。

このバージョンでベータ版を抜けた感があり、PC向けやスマホ向けを問わず、現代のGPUではこのレベルが最低基準となっている。激安スマホ向けのGPUでも大体このレベルはサポートしているので、SM3.0で書いておけば大方のプラットフォームにサクッと対応できる。いわゆるデファクトスタンダードである。

SM 4.0[編集 | ソースを編集]

DirectX 10で登場。DirectX 10がWindows Vista専用であったため壮大にコケた。

ジオメトリシェーダー登場。使いみちがイマイチわからない。

最大の変更点は「命令数の上限がなくなったこと」である。VRAMローエンドですらギガバイト当たり前の時代に突入し、元気があれば何でもできるようになった。

また、HLSLにprintf命令やerrorf命令やabort命令が追加されデバッグが容易になった。

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 10Xbox Oneが採用。

DirectX 11世代のハードウェアを低レベルで叩けるようになった。これはAMDMantleという低レベルAPIを公開したことによる。その発想はたしかに素晴らしいがNVIDIA宗教上の理由で採用できなかった。そこでマイクロソフトが仲裁に入る形で「あくまでマイクロソフト製」として再リリースされたものである。

ちなみに、あまりに画期的すぎてAppleMetalGoogleVulkanというパクリを発表した。

なお、こいつの登場により直線1本、ポリゴン1個描画するのにも莫大な作業量となった。 まるで時代に逆行しているような代物だが、「プログラマブルシェーダーは一握りのゲームエンジンの開発者だけが叩ければよい」「ぽんこつプログラマはゲーム内容だけ考えとけ」という思想らしい。

SM 6.0[編集 | ソースを編集]

コンパイラ基盤としてLLVM/Clangを採用するらしい。

関連項目[編集 | ソースを編集]