Direct3D 12 の概要

DirectX 12 では、DirectX の中心にある 3D グラフィックス API である Direct3D の次のバージョンが導入されています。 Direct3D 12 は、以前のバージョンよりも高速かつ効率的になっています。 Direct3D 12 は、より豊かなシーン、より多くのオブジェクト、より複雑な効果を実現し、最新の GPU ハードウェアを十分に活用できます。

Direct3D 12 の速度と効率がこれほど向上した理由

Direct3D 12 は、以前のバージョンよりも低いレベルのハードウェア アブストラクションを実現するという点でユニークです。これにより、タイトル (またはその他のアプリケーション) のマルチコア CPU スケーリングが格段に向上します。 1 つには、Direct3D 12 では、タイトルが独自のメモリ管理を行うことが挙げられます。 また、Direct3D 12 を使用することで、コマンド のキューとリスト記述子テーブル、簡潔なパイプライン状態オブジェクトなどの機能を通じて GPU のオーバーヘッドを削減できます。これはタイトルやアプリケーションにとってメリットです。

Direct3D 12 および Direct3D 11.3 では、レンダリング パイプラインに関する一連の新機能が導入されました。

  • 確実なヒット検出を可能にする保守的なラスター化
  • ストリーム化された 3 次元リソースを、すべてビデオ メモリにある場合と同じように処理できるようにするボリューム タイル リソース
  • 確実な透過的レンダリングを可能にするラスタライザー順序指定ビュー
  • 特殊なシャドウ処理やその他の効果を実現する、シェーダー内でのステンシル参照の設定。
  • テクスチャ マッピングおよび型指定された UAV (順序指定されていないアクセス ビュー) の読み込みが向上。

Direct3D 12 への投資の度合いに関する考慮事項

Direct3D 12 は、グラフィックス開発者に主に 4 つの利点をもたらします (Direct3D 11 と比較した場合)。

  • CPU のオーバーヘッドを大幅に削減。
  • 電力消費量を大幅に削減。
  • GPU の効率が最大で (約) 20% 向上。
  • Windows 10 デバイス (PC、タブレット、コンソール、モバイル) 向けのクロスプラットフォーム開発。

Direct3D 12 は上級のグラフィックス プログラマ向けに設計されています。 グラフィックスに関するかなりの専門知識と、高度な微調整が必要となります。 Direct3D 12 は、マルチスレッド、CPU/GPU の徹底した同期、およびある目的から別の目的へのリソースの移行と再利用を、最大限に活用するように設計されています。 これらの技法には、かなりの程度のメモリ レベルのプログラミング スキルが必要です。

Direct3D 12 のもう 1 つの利点は、API フットプリントが小さいことです。 関数の数は 200 前後ですが、手間がかかる処理を行うのはその約 3 分の 1 です。 つまり、グラフィックス開発者は、API 名を覚えすぎることなく、完全な API セットについて自分自身を教育し、マスターできる必要があります。

Direct3D 11 は、Direct3D 12 とともに引き続き有効な選択肢です。 Direct3D 12 の新しいレンダリング機能の多くは、Direct3D 11.3 で提供されています。 Direct3D 11.3 は低レベルのグラフィックス エンジン API で、Direct3D 12 ではそれがさらに強化されています。

開発チームは、少なくとも 2 つの方法で Direct3D 12 のタイトルにアプローチできます。

Direct3D 12 のみを使用

Direct3D 12 のすべての利点をフルに活用するプロジェクトでは、高度にカスタマイズされた Direct3D 12 エンジンを新たに開発する必要があります。

グラフィックス開発者として、タイトル内でのリソースの使用と再利用について理解し、アップロードとコピーを最小限に抑えることでその利点を活用できる場合は、こうしたタイトルに対応できる高効率のエンジンを開発し、カスタマイズできます。 パフォーマンスが大きく向上して CPU 時間が解放されるため、描画呼び出しの数を増やして、グラフィックスにさらに光沢を加えることができます。

プログラミングへの投資は重要です。プロジェクトのデバッグとインストルメンテーションについては最初から考慮するようにしてください。 スレッド処理、同期、およびその他のタイミングに関するバグが課題となる可能性があります。

Direct3D 12 と Direct3D 11 を併用

短期的なアプローチとして、Direct3D 11 のタイトルで確認されているボトルネックに対処する場合があります。 この場合は、2 つの API バージョンの連携を可能にする Direct3D 12 相互運用機能と D3D11On12 のいずれかの手法 (または両方) を使用できます。 このアプローチでは、既存の Direct3D 11 グラフィックス エンジンへの変更が最小限で済みます。 ただし、パフォーマンスの向上は、Direct3D 12 のコードが対処するボトルネックの解消に限られます。

Microsoft DirectX 12 (およびグラフィックスに関する教育) のビデオ

グラフィックス開発者向けの教育が強化されました。 これらのビデオでは、プレゼンテーション モード、DirectX 12 への移行、保守的なラスター化、グラフィック ツール、ANGLE、Win2D、各種イベント (例: GDC、Build) などのトピックを取り上げています。 DirectX 12 に関する技術コンテンツは、先頭に "DirectX 12" と示されています。 ここで、Direct3D 12 機能チームからヒントやテクニックを直接学ぶことができます。 最新のリリースとツールを利用して最高のゲームを作り出すためにお役立てください。

まとめ

Direct3D 12 は、グラフィックス エンジンのパフォーマンスを飛躍的に向上させます。 これを実現するために、開発の容易さ、高レベルのコンストラクト、およびコンパイラ サポートの規模が縮小されています。 ドライバー サポートとデバッグの容易さは Direct3D 11 と変わりません。

Direct3D 12 は新たな領域です。 探究心のあるエキスパートによるこの領域への挑戦が期待されます。