Jurien Katsman氏（Studio Head, Nixxes Software）

DirectX 12は難しい

Rise of the Tomb RaiderはCrystal Dynamicsがゲーム機向けに開発したタイトルで，Nixxes SoftwareはそのPC向け移植を担当した。DirectX 11版としてリリース後に，DirectX 12対応パッチを2段階で提供した Deus Ex: Mankind DividedはEidos Montrealがゲーム機向けに開発したタイトルだ。こちらも同じように，まずDirectX 11版をリリースして，その後，DirectX 12パッチを2段階で提供している

左はRise of the Tomb Raider，右はDeus Ex: Mankind Divided。それぞれハードウェア構成ごとにDirectX 11版とDirectX 12版でフレームレートを比較した結果のグラフである

DirectX 12の黎明期に移植へ取り組んだため，アーリーアダプターならではの問題に苦しんだという

メモリ管理とその運用はPS4やXbox Oneなどの家庭用ゲーム機よりも難度が高いとのこと

DirectX 11気分で多め多めにメモリを確保しているとうまくいかない メモリ管理の制御を一度にやるとストールの可能性も

コマンドリストの構築は低コストである一方，Command Allocatorのコストは高くつく

NVIDIA製GPUではDescriptor Heapの更新変更が性能に影響しやすい

描画コマンド構築をマルチスレッドで処理できるようになったDirectX 12だが，その発行サイクルは慎重に行いたい

DirectX 12におけるマルチGPU構成では，アプリケーション側で異なる目的のために使えるのがメリットだとされているが……

DirectX 12に対する幻想を捨てよ!?

DirectX 12で性能向上が目立つのは一定条件下のみ

DirectX 12に価値は「ある」とKatsman氏は言う。基本的な話として，DirectX 12に対応させたほうが性能は高くなるからだ

「DirectX 12に対する幻想を捨てろ」 「DirectX 11版とDirectX 12版を比較するな」

初歩的な内容のセッションが多いGame Developers Conferenceの初日には，伝統的に，DirectX技術チュートリアル「」（以下，Tutorial Day）の開催も定例となっているのだが，GDC 2017にもTurorial Dayはやはりあった。GDC 2017におけるTutorial Day，全体を通じての感想を最初に述べておくと，興味深かったのは，「DirectX 12はいいものだが，取り扱いにはけっこう注意が必要」という内容のセッションが2つもあったことだ。具体的なセッション名は，Nixxes Software代表の氏が登壇した「」（千の傷から死を免れるためのDirectX 12活用術）と，Ubisoft Montrealの氏による「」（DirectX 12への移行にあたって学んだこと）。要は，実際のタイトル開発と移植に関わったゲームデベロッパが「DirectX 12って結構大変なんだよ？」と見解を述べたわけである。本稿ではこれら2つのセッションから，前者のレポートをお届けしてみたい。Katsman氏の率いるNixxes Softwareは，スクウェア・エニックスがパブリッシングしているタイトル群のPC移植版を手がけることの多いスタジオだ。Nixxes Softwareが近年手がけたDirectX 12対応移植版としては，「 Rise of the Tomb Raider 」「 Deus Ex: Mankind Divided 」が挙げられるが，まさにこれら2タイトルの移植を通じて得られた知見を報告するという形で，Katsman氏はセッションを進行していった。そんなKatsman氏の感想は，「DirectX 12対応は，言うだけならば簡単だが，実際に挑戦してみると難しい」というものだ。GPUメーカーによって挙動の特性が異なるうえ，DirectX 11対応版を完成させてからDirectX 12への移植を試みると，思ったほどパフォーマンスが上がらないのだそうだ。とにかく苦労したのは，Nixxes SoftwareがDirectX 12への移植に取りかかったのがまさにDirectX 12の黎明期だったことに起因する諸問題だったという。GPUのDirectX 12対応デバッグツールがなく，ドキュメントも完成度が低く，開発は手探り状態。ドライバの完成度も低いうえ，各機能に対する最適化の洗練度はGPUメーカーによって違うという状況だったと，Katsman氏は振り返っていた。DirectX 12の場合，リソース管理や描画命令の組み立てと発行管理を開発者が自前で設計，実装しなければならない。そのため，開発難度はDirectX 11時代と比較して数段上がることになる。Katsman氏いわく，「とくに難度が高かったのはメモリ管理」。「一言でまとめるなら，DirectX 11に劣るとも優らずといったところ」だそうだ。たとえば，。必要な分を先に確保し，臨機応変に解放制御も行わなければならないのである。また，メモリ管理制御を一度に集中させると，ストールしてゲーム進行がカク付く場合があるため，分散して行うよう気を配る必要もあるのだとか。DirectX 12では，CPUプログラム側で描画コマンドを自ら構築して発行することまで行うが，DirectX 12側の描画コマンドはドライバを経てGPU側に送られた時点で，当該GPU用のネイティブコマンド列に変換されている。このネイティブコマンド列をバッファリングするためのメモリ確保は，DircectX 12のAPIである「Command Allocator」経由で行うのだが，その確保と解放の繰り返しは性能に響くのだという。「なので，なるべく使い回すような方針でパイプラインを設計したほうがいい」（Katsman氏）。また，DirectX 12では，あるデータ群がどのような形式のどんなデータなのかを記述しておく「Descriptor」という概念を導入しており，リンク木構造（※データとともに，「次のデータがある場所」までのポインタとインデックス，アドレスなどがセットになっているデータ構造）の「Descriptor Heap」形式でDescriptorデータを管理しているのだが，このDescriptor Heapの更新変更処理が，NVIDIA製GPUでは性能面で大きく足を引っ張ることを確認したという。なので，この処理の最適化が，NVIDIA製GPU搭載環境で高い性能を引き出すには効いてくるそうだ。また，マルチコアCPUによるマルチスレッド実装で描画コマンドを並列構築するのはいいことだが，「一定量まとまってから発行するようにした場合，描画コマンドが多くなりすぎて，結果，溜め込んだ時間分だけ遅延することになりかねない」とも，Katsman氏は警鐘を鳴らしている。Async Computeは，グラフィックスレンダリングと非同期にCompute Shaderを動かすもので，AMDが「自社のGPUにおいてのみ，効率よく実行できる」と 主張して 話題になった。ただ，Katsman氏の経験上，「DirectX 12登場直後の古いドライバでは，動作があまり安定しなかった」とのことだ。なお，最近ではドライバの最適化が進み，とのことである。そして，氏が最後に挙げたのは，DirectX 12のマルチGPU関連機能だ。DirectX 12では，システムに複数のGPUが搭載されているとき，ゲームプログラム側で各GPUを任意の用途に使えるというのが，ウリの1つとして訴求されていた。たとえば，「GPU 0をグラフィックス描画用，GPU 1は物理およびAIシミュレーション用に使い分けられる」「GPU 0と1，両方に搭載されたグラフィックスメモリの総容量を余すことなく使える」といった謳い文句を，見たり聞いたりした読者も多いことだろう。だがKatsman氏は，「これらも，実際にやろうとすると難度が高い」とバッサリ切っている。性能の異なるGPUを，しかもユーザーごと，どういう組み合わせになるか分からないGPUを複数まとめて，効果的に活用するのは極めて難しいそうだ。結局，Rise of the Tomb RaiderとDeus Ex: Mankind Dividedでは，スペックと性能が近しい2基のGPUを搭載した環境でのみ，交互にレンダリングを行って性能向上を図るAFR（Alternative Frame Rendering）の実装を行うに留めることになったという。これはKatsman氏の独自分析だが，現状，一般ゲーマーの期待も，2基（以上）のGPUを個別に使いこなす活用よりも，AFRでフレームレートを向上させる方向を向いているとのことだった。「MicrosoftとGPUメーカーのマーケティング活動により，よい意味でも悪い意味でも，一般ユーザーの間で，DirectX 12に対する過剰な期待が集まっている」とKatsman氏は言う。一般のゲーマーは，「オレのGPUがDirectX 12で何十％も速くなるのはいつなのよ？」と期待し続けている。しかし，実際にDirectX 12対応パッチが出たら，導入によってフレームレートは数％低下した，などという事例も出てきており，業界内では行く末を心配する声も出てきているそうだ。「実際のところ，『DirectX 12で性能向上率が高くなるのは，条件が揃ったときに限られる』という現実がある」とKatsman氏は言う。たとえば，高性能なCPUとGPUを搭載するハイエンドシステムにおいて，DirectX 12が解消するとされるCPUのボトルネックはほぼ起きない。また，4Kのような高解像度や，PCならではの高いグラフィックス設定プリセットを選択した場合，GPUにかかる負荷自体が高く，DirectX 12によって稼いだ性能向上率がほとんど目立たないという状況になりがちだ。そうなると，「そもそもDirectX 12に価値はあるの？」という疑問が出てくるわけだが，それに対してKatsman氏は「ある」と断言している。ハイエンドCPUとGPUを搭載していないシステムでは性能面での明確なメリットが得られ，ゲームプログラムやレンダリングパイプラインの設計方針を，PlayStation 4やXbox One版に近い，一貫性のあるものにできるというメリットもあるとのことだ。「DirectX 12対応は困難ながら，対応する価値がある。ただし，現実的な視点を持って対応すべきだ。過度な期待は禁物」と述べたKatsman氏は，「DirectX 11と比較するな。ただ面白いゲームを作れ。結果は後からついてくる」と開発者にエールを送って講演を締めくくった。たしかに，DirectX 12とDirectX 11で比較テストを行うときには，超高性能なシステムを用意して「違いがない」とするよりも，むしろ「どういう条件だとDirectX 12版のほうが高いフレームレートを示すのか」を明らかにしたほうが，情報としての価値は高いだろう。ゲームメディア側としても「DirectX 12はDirectX 11よりも速くなって当たり前」という認識をあらため，DirectX 12対応ゲームのベンチマークスコアと向き合っていく必要があるかもしれない。