DirectX12プログラミング

概要

本書はDirect3D経験者またはOpenGL経験者を対象読者としています。

読者はC/C++言語、DirectX9,10,11(又はOpenGL)、HLSL(又はGLSL)を運用できる必要があります。

新しいAPIの解説書籍を作成する時、適当に動くサンプルを作成して書籍とすることは非常に簡単です。

新しいAPIの書籍作成で難しいのは理論や仕組みを正確に理解して執筆することです。そのためには必ず仮定と研究が必要になります。

DirectX12はまさに仮定と研究が必要なAPIでした。今までのDirectXの中で最も情報の無いAPIと言えます。

ネットで検索すれば見つかるような事柄を本にすることに意味はありません。ネット検索すれば済むのですから。読者としても高いお金を払ってそのような本を買うのはもう嫌でしょう。だからと言ってAPIの研究を読者自身で行う事は本業(あるいは学業)のある人にとってはかなり難しいと言えます。

そのような人たちは本書のような専門書を利用すればいいのです。ノースブレイン、ベアピクセルの書籍はそのためにあります。私は書籍の作成は仕事で行っていますので研究は本気で行い、正しいと思った研究結果そして納得できる研究結果しか書籍にしていません。さんざん研究に時間をかけたのに没にした作業もあります(例えば流体関連の研究など)。

答えを探すために表には出ないプロジェクトを何個も、表には出ないルーチンを何100と作成することも珍しくありません。

餅は餅屋にという言葉があるように、面倒な研究探索作業は本書のような書籍に任せて、浮いた時間を他の有意義な時間に充てるというのも有効な戦略ではないでしょうか。

本書は筆者がDX12を勉強中に知りたかった事、しかしどこにも情報が無かった事を研究の末解明し、それらを詳しく掘り下げて解説した本になっています。

DX12を使うには広範な知識が要求される。

習得には独自の研究が必ず必要になる。

英語ベースの情報しか無い。

など、DX12を学習しようとするプログラマーにとって過酷な環境になっているのが現状です。

本書はそんな環境を変えるべく作成しました。

本書を読めば、

なぜDX12を使うのか?

DX12はなぜ難しいと言われているのか?

何がDX11と違うのか?

ということが明らかになり、DX12を理解して運用できることが出来るようになると思います。

DX12にはその理解に間違いなく”鬼門”が複数存在します。独力で調査するのはかなり骨が折れる作業になるはずです。DX12の鬼門をここまで掘り下げて解説している書籍はおそらく本書くらいなのではと思っています。是非本書を読んで鬼門の先にある世界を見てください。Direct12は極限までスピードを追求したい場合に有効なAPIです。本書により読者自身が適切なDX12アプリを構築でき、そのスピードの違いを実感することができたら筆者にとってこの上ない喜びです。

なお、シェーディングの基礎や3DCG自体の基礎については深入りしていませんので、それら前提知識に自信の無い方は本書を読む前にノースブレインのMESH GURU、SHADER GURU、3D入門などを読まれることをお勧めします。

PDFファイルでのご提供となります(紙の書籍ではありません)。電子書籍の決済後の流れ等はこちらをご覧ください。

本書概観

目次

はじめに – 9 –
1章 DIRECTX12の論理構造 – 12 –
DX12とは – 14 –
8つの概念 – 18 –
1-1 コマンドリスト – 18 –
1-2 フェンス – 20 –
1-3 バリア – 21 –
1-4 ディスクリプター – 23 –
1-5 リソースバインディング – 28 –
1-6 ルートシグネチャ – 33 –
1-7 パイプラインステートオブジェクト – 46 –
1-8 バンドル – 51 –
2章 初期化 – 53 –
シェーダー – 54 –
Cppファイル – 55 –
3章 リソースバインド完全制覇! – 68 –
3-1 テーブルでのバインド。組み合わせは8通り – 69 –
テーブル1つか複数か、メリットデメリット – 70 –
3-2 テーブル1つ、範囲1つ、ディスクリプター1つ – 72 –
3-3 テーブル1つ、範囲1つ、ディスクリプター複数 – 78 –
3-4 テーブル1つ、範囲 複数、ディスクリプター1つ – 81 –
3-5 テーブル1つ、範囲 複数、ディスクリプター複数 – 83 –
3-6 テーブル複数、範囲1つ、ディスクリプター1つ – 85 –
重要なこと! – 86 –
3-7 テーブル複数、範囲1つ、ディスクリプター複数 – 87 –
3-8 テーブル複数、範囲 複数、ディスクリプター1つ – 89 –
3-9 テーブル複数、範囲 複数、ディスクリプター複数 – 91 –
4章 ポリゴン – 93 –
4-1 まずは1枚のトライアングルを描画 – 94 –
ヒープタイプについて – 95 –
4-2 クアッドを描画 – 97 –
4-3 インデックスでクアッドを描画 – 100 –
4-4 ランバートシェーディング – 104 –
4-5 フォンシェーディング – 108 –
4-6 テクスチャーマッピング – 110 –
テクスチャーファイル読み込みは自前 – 110 –
テクスチャーは1枚余分に必要 – 111 –
テクスチャー作成のためのコマンドリスト実行 – 112 –
コード解説 – 112 –
本来のテクスチャーを作成 – 114 –
中継用のテクスチャーを作成 – 114 –
頂点レイアウト – 116 –
描画時、テクスチャーのセット – 117 –
4-7 ノーマルマッピング – 119 –
4-8 複数の描画 – 124 –
どのように違うのか 複数のコンスタントバッファを用意する – 125 –
5章 メッシュ – 129 –
5-1 メッシュは複数のポリゴンに過ぎない – 130 –
5-2 完全ホワイトボックス – 131 –
6章 マルチスレッド – 133 –
6-1 マルチスレッドの何が良いのか? – 134 –
6-2 一般的なマルチスレッドのコーディング – 136 –
ソース解説 – 138 –
6-3 マルチスレッドのメリット 実際に検証 – 144 –
6-4 DX12のシングルスレッド、マルチスレッド8000枚ポリゴン勝負 – 150 –
シングルスレッドで8000万 – 150 –
マルチスレッドで8000枚 – 151 –
ソース解説 – 152 –
7章 ライト – 155 –
7-1 ディレクショナルライト – 156 –
サンプル解説 – 159 –
7-2 ポイントライト – 161 –
サンプル解説 – 164 –
7-3 スポットライト – 166 –
サンプル解説 – 169 –
8章 バンドル – 174 –
8-1 バンドル無しの場合 – 175 –
8-2 バンドル使用の場合 – 176 –
コード解説 – 176 –
9章 DIRECTX11との比較 – 179 –
9-1 シナリオ1 大量のポリゴンを1回描画するケース – 180 –
9-2 シナリオ2 1枚のポリゴンを大量に描画するケース – 182 –
10章 コンピュートシェーダー – 185 –
10-1 GPUの計算応力は驚異的 – 186 –
10-2 ソース解説 – 188 –
描画用のコードと異なる部分 – 191 –
ストラクチャードバッファ – 192 –
著者紹介 – 195 –

付属サンプル実行時ビデオ(全てのビデオではありません)

Dx12 初期化
テーブル1つ、範囲1つ、ディスクリプター1つ
テーブル1つ、範囲1つ、ディスクリプター複数
テーブル1つ、範囲 複数、ディスクリプター1つ 同種のディスクリプター
テーブル1つ、範囲 複数、ディスクリプター1つ 異種のディスクリプター
テーブル1つ、範囲 複数、ディスクリプター複数 同種のディスクリプター
テーブル複数、範囲1つ、ディスクリプター1つ
テーブル複数、範囲1つ、ディスクリプター1つ
テーブル複数、範囲1つ、ディスクリプター複数
テーブル複数、範囲 複数、ディスクリプター1つ
テーブル複数、範囲 複数、ディスクリプター複数
トライアングル1枚描画
クアッド1枚描画
クアッドインデックス1枚描画
陰影(ランバートシェーディング)
陰影+光沢(フォンシェーディング)
クアッドテクスチャー1枚描画
ノーマルマッピング
複数描画
メッシュ1個描画
CPUマルチスレッド CreaetThread方式
CPUマルチスレッド parallel_for方式
重たいCPU処理シングルスレッド
重たいCPU処理マルチスレッド
シングルスレッドで大量描画
マルチスレッドで大量描画
ディレクショナルライト
ポイントライト
スポットライト
16000枚描画
16000枚描画 バンドル使用
GPGPU

購入方法

ご購入は当サイトオンラインショップで。(他では販売しておりません)