この記事は、インテル® デベロッパー・ゾーンに掲載されている「Direct3D 12 Overview Part 1: ‘Closer To The Metal’」(https://software.intel.com/en-us/blogs/2014/07/17/direct3d-overview-part-1-closer-to-the-metal) の日本語参考訳です。
GDC 2014 において、マイクロソフト社は 2015 年に PC ゲームで最もエキサイティングなニュースとなるものを発表しました。それは、Direct3D の次期バージョン 12 です。D3D12 は、低レベル・プログラミングへの回帰であり、ゲーム開発者に対しより多くの制御を可能にし、多くのエキサイティングな新機能を提供します。D3D12 開発チームは、CPU のオーバーヘッドを軽減し、CPU コア間にまたがった安定性を向上することに焦点を当てています。D3D12 の目標は、”コンソール API の効率とパフォーマンス” です。現代のコンソールゲームは、より効果的に素晴らしい結果をもたらすため、すべての CPU/GPU を利用することができます。PC ゲームの世界では、他のスレッドが OS や システムタスクのみを処理する間、しばしばスレッド 0 が大部分の処理を行います。真のマルチスレッド PC ゲームはわずかです。マイクロソフトは、D3D12 によってこの状況を変えようとしています。D3D12 は、D3D11 レンダリング機能のスーパーセットです。これは、今日のマルチコア CPU と GPU をより効率良く活用するとともに、現代の GPU は D3D12 を実行できることを意味します。D3D12 の利点を得るために、新しい GPU を導入する必要はありません。エキサイティングなインテルのロードマップに加え、インテルの PC ゲームの将来は非常に輝いています。また PC ゲームだけでなく、D3D12 は XBOX One、ラップトップ、タブレット、そして携帯電話をターゲットとしています。
懐かしき日々:
低レベルのプログラミングは、コンソール業界では一般的です。そして、各コンソールの仕様はすでに固まっています。無数にある構成の順番を心配する必要はありません。ゲーム開発者は、ゲームのファインチューニングに時間をかけ、XBOX One や Playstation 4 向けに最大限のパワーとパフォーマンスを引き出すことができます。PC は、本来柔軟性のあるプラットフォームです。エンドユーザーは、専用もしく統合グラフィックスとサウンドを選択することができます。各 CPU と GPU には何百もの SKU が存在します。マニアは、独自のケースを作成し、最高のパフォーマンスを引き出すためオーバークロックできるよう水冷装置を追加したりします。一般のユーザーは、中間グレードのシステムを構築したり、既製品を購入します。パソコンパーツ店へ出かけたり、ショップの Web サイトで組み合わせに関する情報を入手できます。Lenovo や DELL のオンラインサイトから購入する場合でも、多くの選択肢があります。つまり、新しいゲームを開発するときには、計画に際し多くのオプションと順番があります。そのため、私たちは開発を簡素化するため OpenGL や Direct3D のような高レベルの API を利用します。API に多くの雑多な処理を任せ、開発者はゲーム自身に注力することができます。問題は API ですが、ドライバーの複雑性がそれらを妨げていて、それとともに性能コストが伴うレベルに達しています。それが低レベルのプログラミングが必要となる理由です。
低レベルのプログラミングは MS-DOS 時代の終焉により注目されなくなり、3DFX による 3DGlide などのベンダー固有の API が登場しました。私たちは、多くの利便性と柔軟性と引き換えにパフォーマンスを失いました。ハードウェアのマーケットは大きく成長し、選択肢も増えています。開発時間が増えるのは、開発者が多くのコンテンツを追加したからだけではありませんが、確実にユーザーがそれを購入しプレイしたいと思うことを促進します。それはソフトウェアだけが変わったわけではありません。CPU においては、電力効率がパフォーマンスとスピード以上に重要になっています。ハードウェアの設計者は省電力に焦点を当てており、もはやかつてのように世代が変わるごとに劇的なパフォーマンスの向上は期待できません。CPU では GHz に代わって複数のコアとスレッドに注目し、現代の GPU における並列レンダリングは将来のパフォーマンス向上を期待できます。今こそ PC ゲームは、コンソールゲームへの方向性を見極める時です。そしてそれはまた、すべてのコアとスレッドをより効率良く利用することでもあります。PC ゲームが新たな世代を迎える時です。
ハードウェアに近く:
私たちは、API とドライバーのサイズと複雑性を軽減することで、ゲームをハードウェアに近づける必要があります。ハードウェアとゲームの間には、いくつかのレイヤーがあるはずです。API とドライバーは、コマンドの解釈と呼び出しにあまりにも多くの時間を費やします。それらは、制御の大部分ではありませんが、ゲーム開発者に影響します。D3D12 によってオーバーヘッドが軽減されることでパフォーマンスが改善し、ゲームと GPU ハードウェア間のレイヤーが少なくなると、今日市場にあるハードウェアと将来の開発で利点をより簡単に活用し、優れた見栄えのよいゲームを開発できることを意味します。もちろん、これには別の側面もあります。一部の開発者は、GPU のメモリー管理などを API を介して制御したくないこともあるでしょう。おそらく EPIC や DICE のようなところにゲーム開発者は行くことになります。結局、時間だけがそれを教えてくれます。D3D12 はまだリリースされていないので、それを理解する時間は十分にあります。優れた機能が提示されていますが、それはどのように達成できるのでしょうか?4 つの主な新機能は、パイプライン状態オブジェクトとコマンドリスト、バンドルおよびヒープと呼ばれます。これらの各機能は、以降の D3D12 シリーズで詳しく述べていきます。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。