イベント
[GDC 2016]シェーダモデル6.0がやってくる! Microsoftが語った「次のDirectX」
DirectX 12が抱える課題とその対策
氏によれば,Windows 10のリリースとほぼ同時に提供が始まったDirectX 12であるものの,本格的な活用が始まったのは最近になってからで,実際,開発シーン各方面からの要望も最近になって届き始めたそうだ。
それを踏まえて「すぐやる」系の改善リストに挙がっているのは,第1に,Windows 10以降のWindowsの標準アプリ形態となるUniversal Windows Platform(UWP)アプリで,FreeSyncやG-SYNCを利用できない問題への対処とのことだ。この問題には,APIを新設することで対応する。
2つめは,Pipeline State Object(以下,PSO)の増大問題対策だ。DirectX 12では,グラフィックスパイプラインの流れを定義してPSOとすることで,APIコールのオーバーヘッド削減を行えるのだが,定義したパイプラインの構成を少し変えただけでも別のPSOとして定義しなければならないため,グラフィックス表現規模の大きいゲームやステージバリエーションの多いゲームでは,PSO数の増大が問題となった。そこで,複数のPSOをひとかたまりにして管理できる「PSOライブラリの定義」を可能にするのだそうだ。
また,DirectX 12ベースでのGPUデバッグ手法,環境の改善などを行うともMcMullen氏は予告していた。その幾つかについては,北米時間3月20日よりサンフランシスコで開催予定となっているMicrosoftの開発者向けイベント「Build 2016」で詳しい解説が入るようだ。
Shader Model 6がやってくる! ……そもそもShader Model 6とは?
Shader Modelとは,プログラマブルシェーダのバージョンともいうべきもので,DirectX 8.x以降だと,以下DirectXとの間には以下のような対応関係があった。
- DirectX 8.x:Shader Model 1.x
- DirectX 9.x:Shader Model 2.x〜3.x
- DirectX 10.x:Shader Model 4.x
- Directx 11.x:Shader Model 5.x
では,DirectX 12はどうかというと,Shader Model 5世代のままだった。というのも,DirectX 12は基本的に,「DirectX 11世代のGPUをより低オーバーヘッドで活用しよう」というコンセプトのもので生まれた新版だからだ。
要するに,「遅ればせながら,次世代Shader Modelについての開発検討を開始した」ということなのである。
ここでは説明を分かりやすくするために画素(ピクセル)を想定して解説するが,Shader Model 5以前だと,命令実行粒度が1ピクセル単位だった。これをShader Model 6では「2×2ピクセル」のような複数ピクセル単位で実行することを許容するというのだ。
これはタイルベースの処理を行うのに都合がいいだけでなく,GPGPU用途での応用時にも効果を発揮しそうである。
また,Shader Model 6では,近い将来に登場予定のGPUで実装が見込まれる各種機能への対応も進む。もっとも,これはShader Modelの歴史を振り返れば必然の流れではある。
ちなみに,具体例としてBoyd氏が挙げていたのは,VR(Virtual Reality,仮想現実)向けビューポート,プログラマブルブレンディング,プロシージャルテクスチャなどだ。
よりC++らしい列挙型(Enum)や共用体(Union),仮想関数(Virtual),ビットフィールド構造体などのサポートなどをBoyd氏は挙げていたのだが,それとは別に「GPUプログラミングモデルの良さは活かしていきたい。CPUプログラミングになろうとしているわけではない」とも述べている。文字型オブジェクトやスタック操作,再帰制御,C99/Stdlib互換などをサポートする予定はないとのことだ。
また,Shader Model 6のHLSL(High Level Shader Language)からは,コンパイラ基盤としてLLVM/Clangを採用する方針もBoyd氏は打ち出していた。
LLVM(Low Level Virtual Machine)はオープンソースプロジェクトであることから,GPUプログラミング言語の言語仕様自体や最適化手法を独自に設計することができるようになるとのことだ。
Microsoft側でも,この仕組みの実装を開始しており,2016年末までには実動デモを披露することができるだろうと,Boyd氏は見通しを示している。
新しいシェーダステージが追加されたとか,そういうトピックではなかったが,DirectX 12のプログラミングモデルがよりネイティブになったことに呼応する形で,言語仕様もこの機会に近代化しようということなのだろう。
Microsoftのゲーム開発者向け公式情報ページ(英語)
- 関連タイトル:
DirectX
- この記事のURL: