お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

LINEで4Gamerアカウントを登録
[GDC 2014]DirectX 12,ついに発表。その特徴に迫る
特集記事一覧
注目のレビュー
注目のムービー

メディアパートナー

印刷2014/03/22 00:03

イベント

[GDC 2014]DirectX 12,ついに発表。その特徴に迫る

会場のスタッフは皆「XII」Tシャツを着ており,お祭りムード
画像集#002のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る
 北米時間2014年3月20日,予告されていたとおりではあるが,Microsoftは,Game Developers Conference(以下,GDC)2014で「DirectX 12」を正式に発表した。
 DirectX 11が発表されたのは2009年。Windows 7とほぼ同時期にリリースされたことを憶えている人もいることだろう。2012年にWindows 8とDirectX 11.1が,2013年にはWindows 8.1とDirectX 11.2がリリースされているが,メジャーバージョンアップとしては本当に久しぶりということになる。

現地時間20日,朝一発めのセッションであるにもかかわらず,会場はオープン前から長蛇の列ができた。当然,会場は超満員状態に
画像集#003のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る 画像集#004のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る
DirectXの歴史
画像集#005のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る


DirectX 12登場の背景


 「GPUの性能はどんどん向上している。CPUは,1コアあたりの性能向上率はそれほどでもなくなっている一方,CPUのコア数自体は増加傾向にある。では,そんな状況にあって,ゲーム開発者は一体何を欲しているのか」。DirectX 12の開発は,この問いかけが起点になっているという。

今日(こんにち)のプロセッサ技術トレンドは,「コア数増大」方向に舵を切っている。このアーキテクチャを効率よく扱えないプラットフォームは存在価値が低いと言わざるを得ないが,DirectXは大丈夫なの?
画像集#006のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る

Anuj Gosalia氏
画像集#007のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る
 セッションで登壇したMicrosoftのAnuj Gosalia氏によれば,ゲーム開発者が強く求めているものの1つに,ゲーム機ライクな「GPUを直接ドライブ(≒駆動)できるようなAPI」があったとされる。そして切望されるもう1つの要素が,「ゲームアプリケーションとGPUの間のオーバーヘッドを極力なくすこと」だったそうだ。

 氏は,そうした要望に応える形で提供されることとなるのがDirectX 12であると位置づけていた。

ゲーム開発者は何を求めているのか?
画像集#008のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る

 なお,DirectXとは,Microsoftが自社プラットフォームに提供するマルチメディアプログラミングAPIのことで,本来はサウンドやネットワーク,入力インタフェース関連などまでを網羅したものとなるが,今回発表されたのは「DirectX 12」の3DグラフィックスAPI部分「Direct3D 12」になる。
 ただ,慣例的に「DirectX≒Direct3D」とされる傾向が強く,本セッションでもそのように扱われていたため,本稿もそれに倣い,Direct3D 12とDirectX 12を基本的に区別しない。この点はご了承のほどを。

画像集#009のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る
 さて,今回発表されたDirectX 12だが,結論からいうと,実効パフォーマンスを改善する目的のアーキテクチャ改変がアップデートの中心となっている。「Direct」(ダイレクト)と言いながら,あまりダイレクト感がなくなってきたDirectXに,近代流のダイレクト感を持ち込もうとする方向の改変なのだ。

 DirectXが誕生した1990年代中期は,さまざまなメーカーがそれぞれ独特なアーキテクチャに基づくGPUを用意しており,そして,そこには機能差もあったことから,“違い”を吸収するための抽象化レイヤーを分厚くする必要があった。当時のGPUは,データやパラメータを与えて「GPUの機能を呼び出す」というプログラミングモデルだったこともあり,ゲームアプリケーションとGPUまでの“距離感”が相当に大きかった,という表現も可能だろう。

 しかし現在,PC向けGPUのメジャープレイヤーはIntelとNVIDIA,AMDの3社のみであり,モバイルデバイスや組み込み機器向けGPUですらも,3社いずれかのアーキテクチャに似た構造となった。かつてのような分厚い抽象化レイヤーはもはや必要なくなってきている。
 そこでMicrosoftは,1990年代に構築された古い土台をすべて取り去って,すっきりした透明性の高いアーキテクチャへと,DirectXを改変することにしたのである。

DirectX 12の進化ポイント
画像集#010のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る

 またMicrosoftは,WindowsベースのPCだけでなく,Windows PhoneとXbox OneにもDirectX 12を提供する計画があると今回明らかにしており,グラフィックスAPIを一気に刷新する心づもりでいる。一時期は「DirectXはもう終わり」とまことしやかに囁かれるほどだったが,ここで心機一転の再スタートを図ろうということなのだ。

DirectX 12はすべてのMicrosoftプラットフォームに提供される
画像集#011のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る


DirectX 12は何がどうすごいのか


 現状のDirectXは,「DirectX APIを通じてパラメータをドライバに受け渡し,ドライバ側がGPUに向けて(描画)コマンドとパラメータ列を形成して発行する」構造になっているが,ここに問題が2つある。

 1つは,DirectXが提供している「APIを利用してDirectX側が作り出すコマンドとパラメータのペア」が,GPU内部のハードウェアを直接ドライブするようにはなっていない点だ。これは,「DirectXのアーキテクチャが古すぎて,実在する最新世代のGPUアーキテクチャとかけ離れすぎてしまった」と考えれば分かりやすいだろうか。

DirectX 7〜8時代,DirectX APIとGPUアーキテクチャは1対1にかなり近い構造だったのだが(左),DirectX 9以降で,ここに開きが生じ始めた(右)
画像集#013のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る 画像集#012のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る

上のスライドで言う「開いたところ」を埋める存在がDirectX 12だ。実のところ,AMDのMantleもまさにこの立ち位置にいる
画像集#014のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る
 この問題を解決するために導入されるのが「Pipeline State Object」(以下,PSO)という概念だ。
 詳細は後日あらためてお伝えしたいと思うが,誤解を恐れずに簡略化して言うと,PSOというのは,グラフィックスパイプラインとGPU内部ハードウェアとの対応を一意的に定義づけて利用する仕組みのこと。PSOを定義づけておけば,それ以降はGPUに対し「これからお願いする描画は,PSOで定義した工程表(パイプライン)ベースでお願いします」と発注できる。
 従来のDirectXでは「頂点シェーダでこの処理を行う」「ピクセルシェーダでこの処理を行う」といった感じの,細切れな指示になっていたため,処理のストール(stall,停止)が生じやすかった。その点PSOなら,GPUはあらかじめ定義された工程表に基づいて,すぐに処理に取りかかれるのである。

 もう1つは,コマンドを伝送する仕組みそのものの問題だ。
 従来のDirectXでは,APIを通して,「描画の件なんですがね」「第一パラメータは●●です」「第二パラメータは××です」といった感じに,コマンドを逐次的に発行していた。砂時計にたとえるなら,上がCPU,下がGPUで,上下は大きく開いているのに,中央部がぎゅっとすぼまったイメージ。砂粒(≒仕事)は1本の線状でしか,GPUのほうに落ちていかないのである。

 その点,DirectX 12では,あらかじめ確保しておいたメモリバッファ上で描画コマンドやパラメータを形成しておき,これをドライバへ一気に渡せるようになった。当然,メモリバッファ上に描画コマンドやパラメータを形成する処理は複数のCPUスレッドで並列に実行できる。つまり,マルチスレッドを効果的に利用できるということだ。砂時計でいえば,中央のすぼまった部分が押し広げられたようなイメージだろうか。

DirectX 12における根幹的な進化ポイント。主にオーバーヘッドを減らし,大量に仕事を発注できる仕組みを実装したという感じ
画像集#015のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る

 「ドライバを通じてGPU側に伝送される前の描画コマンド」はドライバ側でGPUのネイティブ命令に変換されるので,ここにまだ抽象化レイヤーは存在することになるが,まとまった量の描画コマンド列を一気に発行できる以上,効率は従来比で格段に改善する。
 さらにDirectX 12では,この「GPU側で直接実行できるように変換されたネイティブコマンド列」を保存しておける仕組みも導入された。これは「Bundles」(バンドル)と呼ばれ,そのままBundlesを再発行してGPUを駆動することもできる。うまく活用すれば,抽象化レイヤーを超えた先で,超高効率でGPUをドライブすることも可能なのだ。

DirectX 12では抽象化部分はものすごく薄く設計されている。もちろん,すべてのメーカーのGPUに対応する必要があるため,最低限の抽象化部分は残っているが,その抽象化を超えた先でのGPUドライブの仕組みも提供される。ここはDirectX 12の大きな進化ポイントといえるだろう。Mantle的とも言えるが
画像集#016のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る

 また,テクスチャや各種データテーブルなどといった,レンダリングに必要な素材を,アプリケーション側が任意のスタイルでその素性を定義しつつグラフィックスメモリ上に置き,実際のレンダリング時には各種シェーダから自由にアクセスする仕組みも新設されている。DirectXのAPIを介して「これはテクスチャです」としていちいち宣言したり定義したりすることなく,かなりのダイレクト感をもって,グラフィックスメモリ上にデータや素材を自在に置けるようになったのである。

 CPUのプログラムにおいて,当該プログラムの開発者は,プログラム実行の各局面に応じて,確保したメモリ空間を好きに使っていた。そういった自由なメモリの使い方がGPUでもできるようになったことになる。
 もっともこれは,家庭用ゲーム機のGPUプログラミングでは結構前からそうだったので,概念的に新しいものではない。DirectX 12が,家庭用ゲーム機的なGPUプログラミング哲学を取り入れたという認識のほうが正しいので,この点は押さえておく必要があろう。

素材やリソース周りの取り扱いの改善ポイント。CPUプログラム的な自由な取り扱いが可能になった
画像集#017のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る


DirectX 12のβ版は2014年後半リリース。正式リリースは2015年か


 DirectX 12にはどの程度の性能を期待できるのか。
 セッションでは,「3DMark 11」の「High Temple」を,従来どおりのDirectX 11で動作させたものと,DirectX 12に対応させて動作させたものとで,CPU負荷に違いが出るかどうかが披露された。

 その結果が下のスライドだが,DirectX 11では,4つあるCPUスレッドのうち1つで極端に負荷が高くなっている。それに対し,Bundlesを活用しているDirectX 12では,CPU負荷が極端に低い。

画像集#018のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る
DirectX 11での実行結果。テキストで表示された「O+」のバーが長いほど当該スレッドのCPU負荷が高いことを示すが,ここでは「Thread 0」の負荷が高い
画像集#019のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る
DirectX 12での実行結果。「Thread 0」のCPU負荷は極端に下がっている

 処理の内訳も下のとおり示された。下の図は,上の「Thread 0」〜「Thread 3」がDirectX 11,下の「Thread 0」〜「Thread 3」がDirectX 12のそれぞれ内訳だ。「App Logic」はアプリケーション実行負荷。「Direct3D」はDirect3DのAPIオーバーヘッド,「UM Driver」はユーザーモードドライバ負荷,「Kernel」はOSカーネル負荷,「KM Driver」はカーネルモードドライバ負荷,「Present」は描画表示負荷を示しているが,違いは一目瞭然といえる。

DirectX 11(上)とDirectX 12(下)のそれぞれにおける処理の内訳
画像集#020のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る

 セッションでは,NVIDIAによる評価版のDirectX 12ドライバ上で動作する「Forza Motorsport 5」の技術デモが公開された。こちらは性能を示すものではなく,「実際にゲームが動いている」ことを示すための目的で公開されたようだ。「PC版のForza Motorsport 5がDirectX 12ベースで開発されている」ことを示すものではないので,その点は注意してほしい。


 気になるDirectX 12の提供時期だが,2014年後半にプレビュー版(β版)がリリースされる予定となっている。正式版は「2015年のクリスマス商戦に臨むPCゲームのリリースに間に合うような形で提供したい」という形で予告されたので,常識的に考えれば,正式リリースは2015年ということになるだろう。

DirectX 12のプレビューは2014年後半に登場。ゲーム開発者に向けては早期アクセスが提供されるという
画像集#021のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る


DirectX 12にまつわる疑問に答えてみる


 最後に,セッション後の質疑応答や,セッション後に筆者が関係者に取材した情報を基に,想定される質問と回答を用意してみた。こちらも合わせて参考にしてもらえればと思う。


Q:DirectX 12はどのOSに提供されるのか

A:
 Windows 7とWindows 8.x(もしくはその後継OS)と見られる。間もなくサポートが終了するので当たり前といえばそれまでだが,Windows XPへの提供は「ない」と公式に否定されている。


Q:DirectX 12はWindows以外にも提供されるのか

A:
 セッションのレポートでも触れたとおり,Windows PhoneとXbox Oneには提供される見込み。Xbox One向けのゲームタイトルのPC向け移植やWindows Phoneへの移植が容易になるはずだ。

Windows 7&8以降のPCだけでなく,Windows PhoneやXbox OneにもDirectX 12は提供される
画像集#022のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る


Q:DirectX 12の対応GPUは?

A:
 当面はDirectX 11世代のGPUが対応製品となる見込み。NVIDIAならFermi世代,AMDならGraphics Core Next世代ということになる。


Q:DirectX 12向けに開発されたゲームはDirectX 11環境で動作するのか。逆に,DirectX 11向けのタイトルはDirectX 12で動作する?

A:
 DirectX 11とDirectX 12は,名前こそ「DirectX」ながら,基本アーキテクチャが異なるため,相互に互換性はない。
 実のところ,この仕切り直しは,DirectX 10の時も起こった。DirectX 10では基本アーキテクチャがDirectX 9から一新されたため,過渡期のPCゲームでは,タイトルによって,DirectX 9バイナリとDirectX 10バイナリの2つが提供されたりしていたが,DirectX 12の登場直後は同じようなことが起こるだろう。


Q:DirectX 12で実現されているのは性能向上のためのアーキテクチャ改変“だけ”で,新しいシェーダステージの追加や,新機能の搭載はない?

A:
 Microsoftの公式回答は「現時点では未定」。ただし,現段階でも「プログラマブルブレンド」(Programmable Blend)パイプラインと,順不同半透明描画(Order Independent Transparency),コンサバティブ・ラスタライゼーション(Conservative Rasterization)などの搭載は決定している。

コンサバティブ・ラスタライゼーションは,ポリゴンモデルのボクセル分解化処理などに有効とされる。「Unreal Engine 4」の発表時にデモがあった「SVO-GI」では,この処理を自前のシェーダで実装していた
画像集#023のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る


Q:聞けば聞くほど,DirectX 12のコンセプトはMantleのそれと非常によく似ている。PSOやコマンドバッファの概念,素材の取り扱い概念はMantleと同じではないのか

DirectX 12発表を喜ぶ関係者達。左から順にTurn 10 StudiosのChris Tector氏,MicrosoftのAnuj Gosalia氏,IntelのEric Mentzer氏,AMDのRaja Koduri氏,NVIDIAのTony Tamasi氏,QualcommのEric Demers氏
画像集#024のサムネイル/[GDC 2014]DirectX 12,ついに発表。その特徴に迫る
A:
 そのとおり。経緯は不明ながら,仕様にはよく似ている部分がある。これまでAMD(や旧ATI Technologies)もしくはNVIDIAの提唱する「独自機能」がDirectXに採用されたことは過去にたくさんあるので,今回もそのパターンという可能性はあるが,この点についてMicrosoft,そしてAMDから公式の言及はない。
 この件に関して現時点で言えることは,AMDがDirectX 12を歓迎していることと,DirectX 12の登場によってMantleの立ち位置が微妙になることの2点だけだ。


Q:DirectX 12で,Compute Shaderはどう扱われるのか

A:
 Compute Shaderの取り扱いは未定。Mantleのような「非同期でのGPGPUとグラフィックスレンダリングの同時発行」も,対応するかどうかは未定とされている。


Q:DirectX 12が登場したことで,PlayStation 4に何らかの影響はある?

A:
 直接的には「ない」が,間接的には「ある」と思われる。
 実のところ,現在PlayStation 4(以下,PS4)の開発者に向けて提供されているグラフィックスライブラリの1つに,「疑似DirectX 11ライブラリ」がある。そして,聞くところによれば,PCゲームを開発して,それをPS4にポーティングするスタイルのゲームスタジオは,この疑似DirectX 11ライブラリを活用することが多いという。正式にDirectX 12がリリースされた後は,“疑似DirectX 12ライブラリ”が提供されるはずだが,そこにタイムラグが発生したりする可能性はあるだろう。
 逆に言えば,PS4ネイティブに開発しているゲームスタジオへの影響は間接的にもあまりない。


Q:DirectSoundとかDirectInputとか,他のDirectXファミリーはどうなるのか

A:
 未定とのこと。ただ,「現在のところ話せる段階にはないが,最終版のDirectX 12には,これまでのDirectXと同じように,グラフィックス以外のAPIも含まれるだろう」とのコメントは得られている。
  • 関連タイトル:

    DirectX

  • この記事のURL:
4Gamer.net最新情報
プラットフォーム別新着記事
総合新着記事
企画記事
スペシャルコンテンツ
注目記事ランキング
集計:11月16日〜11月17日