現代のリアルタイムグラフィックスにおいて、機械学習ベースのレンダリング技術、すなわちニューラルレンダリングは不可欠な要素となっている。高解像度化を実現するアップスケーリング技術や、複雑なライティングを演算するニューラルラディアンスキャッシュ、さらにはテクスチャやマテリアルの自動生成に至るまで、GPUの演算能力の多くが行列演算(Matrix Math)に向けられている。

NVIDIAはRTX 20シリーズ以降、いち早くTensorコアと呼ばれる専用の行列演算ハードウェアを搭載し、この分野を牽引してきた。その後を追う形でIntelはXMXコアを導入し、AMDもRadeon RX 9000シリーズ(RDNA 4アーキテクチャ)において本格的な専用AIアクセラレータを実装した。ハードウェアの進化は目覚ましい。しかし、開発現場には一つの深刻な課題が横たわっていた。それは、各社のGPUに搭載されたAIエンジンにアクセスするための手段が完全に断片化しているという事実である。

ゲーム開発者は、自社のタイトルに高度なニューラルレンダリングを実装しようとする際、NVIDIA、AMD、Intelのそれぞれが提供する独自のAPIやソフトウェアスタックに合わせてコードを最適化しなければならない。この開発負荷は、次世代グラフィックス技術の普及を阻むボトルネックとなっていた。業界全体が、特定のベンダーに依存しない標準化されたアクセス経路を渇望していたのである。

AD

linalg::Matrixがもたらすパラダイムシフト

この断片化に対するMicrosoftの回答が、AgilitySDK 1.720-previewとともに公開された「Shader Model 6.10」である。今回のアップデートには複数の新機能が含まれているが、業界の構造を根本から変えうる最大の要素が「linalg::Matrix(Linear Algebra Matrix)」APIの導入だ。

linalg::Matrixは、HLSL(High-Level Shader Language)を通じて、GPUの行列演算ユニットへ直接かつ標準化されたアクセスを提供する。これにより、開発者はベンダーごとの独自仕様を意識することなく、DirectXの標準APIを通じてニューラルレンダリング処理を記述できる。行列乗算と累積(MMA)演算を利用する処理が単一のコードパスで記述可能になることは、開発効率の劇的な向上を意味する。

さらに重要なのは、NVIDIAのDLSSなどに代表されるベンダー固有の機能に対する依存からの脱却である。ゲームエンジン側で構築した独自のニューラルアップスケーラーやAI処理を、すべてのDirectX互換GPU上で一律に動作させることが可能になる。Shader Model 6.10は、ニューラルレンダリング技術の主導権を特定のハードウェアから汎用的なAPIレイヤーへと引き戻す戦略的な一手である。

シェーダーパイプラインの限界を突破する新機能群

Shader Model 6.10は、行列演算の標準化以外にも、最新のGPUアーキテクチャの性能を限界まで引き出すための重要な拡張を含んでいる。既存のシェーダーモデルが抱えていたハードウェアの物理的制約を取り払うアプローチが目立つ。

Variable Group Shared Memoryの解放

これまで、DirectXにおけるグループ共有メモリ(Groupshared Memory)は、仕様上32KB(メッシュシェーダーの場合は28KB)という上限が設けられていた。しかし、最新のGPUハードウェアの多くは、物理的により大容量の共有メモリを搭載している。

Shader Model 6.10では、この人為的な制限を撤廃した。新たに導入された実行時クエリMaxGroupSharedMemoryPerGroupを通じてハードウェアの実際の上限を把握し、[GroupSharedLimit(<bytes>)]属性を用いて必要なメモリサイズをコンパイラに宣言できる。大規模なタイルカリングやソフトウェアラスタライゼーション、そして大量のデータバッファを必要とする複雑な行列ワークロードなど、これまでメモリ制限によって不可能だったアルゴリズムの実装が解禁される。

Group Wave Indexによるスレッド制御

コンピュートシェーダーやメッシュシェーダーにおいて、スレッドグループ内のウェーブレベルの構造を直接把握するための組み込み関数GetGroupWaveIndex()GetGroupWaveCount()が追加された。

従来、開発者はハードウェアごとに異なるウェーブサイズ(NVIDIAの32スレッド、AMDの64スレッドなど)に対応するため、SV_GroupIndexWaveGetLaneCount()で除算するといった、すべての環境で正確に動作する保証のない回避策を用いることがあった。新機能により、単一のコードでハードウェアの差異を吸収し、ウェーブレベルでのより高度なワークスレッドの特殊化や協調処理を安全に実装できる。

Batched Asynchronous Command List APIsによる並行処理

D3D12のレガシーなコマンド(CopyBufferRegionやリソースのクリアなど)は、同じタイプのリソースに対する操作の間に依存関係を表現する手段が存在しなかった。その結果、ドライバは安全を期してこれらのコマンドを厳密に直列で実行し、GPUのパイプラインに不要なストールを発生させていた。

新たに追加されたBatched Asynchronous Command List APIsは、この暗黙の直列化を取り除く。オーバーラップするメモリ領域への書き込みといった真のデータハザードが存在する場合にのみ、開発者が明示的にバリアを設定する。それ以外の独立した操作は、単一のバッチ呼び出しの中で並行して実行される。無駄な待機時間を削減し、ハードウェアのリソースをより効率的に占有するための仕組みである。

AD

レガシーハードウェアの切り捨てと世代間格差

DirectXの進化は、常にハードウェアの世代交代を促す側面を持つが、今回のShader Model 6.10はサポート対象の線引きが極めて厳格である。APIレベルでの抽象化は、基盤となる物理的なハードウェア機能が存在して初めて成立するからだ。

特にlinalg::Matrixの要件は、GPU市場における世代間格差を明確に示している。NVIDIAは、Tensorコアを搭載するRTXシリーズ全般で広範なサポートを提供する。一方、AMDの環境においてlinalg::Matrixをサポートするのは、本格的なAIアクセラレータを搭載する次世代のRadeon RX 9000シリーズに限られる。RX 7000シリーズ(RDNA 3)は、Group Wave Indexや可変グループ共有メモリなどの機能には対応するものの、行列演算APIの対象外となる。IntelもArc B-Seriesでのサポートを計画しているが、実装は今後のアップデート待ちである。

専用の行列演算ハードウェアを持たない旧世代のGPUアーキテクチャは、ニューラルレンダリングの波から完全に取り残される。ゲーム開発者は、最新のグラフィックス技術を追求する一方で、当面は市場に存在する膨大な数の非対応GPUに向けたフォールバックの仕組みを維持する必要に迫られる。

グラフィックス処理の不可逆な移行

MicrosoftがShader Model 6.10で打ち出した方針は、グラフィックス処理のパラダイムが根本的に変容した事実を示している。GPUにおけるダイ面積の配分は、すでに従来のラスタライズやシェーディングユニットから、行列演算ユニットへとシフトしている。

DirectXがニューラルレンダリングを標準機能として取り込んだことで、ゲームエンジンやレンダラーの設計は、専用のAIハードウェアを前提としたアーキテクチャへと急速に最適化されていく。Shader Model 6.10の登場は、グラフィックス技術が「ピクセルをどう塗るか」という伝統的な命題から、「AIにピクセルをどう生成させるか」という新しい領域へと不可逆な一歩を踏み出したことを証明している。