DIRECT3D11必携

タイトル DIRECT3D11必携

概要 Direct3D11の基礎から応用までを実際に動く膨大な数のプログラムとともに解説していくという内容です。DirectX9必携の11版という位置づけになります。

価格 8300円+税 オンラインショップへ

本書籍付属データ(ソースコードその他)のダウンロードはこちらです

 

DIRECT3D11必携、完成。

SHADER GURUの発売から2年の沈黙を破り、満を持してDIRECT3D11必携を発売開始いたします。

本書の内容

本書は、 2009年12月に発売を開始したDirectX9必携の後継となる書籍であり、 Direct3Dの基礎から応用までを実際に動くプログラムとともに解説していくという内容です。
さて皆さんは次のような経験がないでしょうか。
筆者もたまに経験することなのですが、新しい技術、例えばジオメトリシェーダーを勉強してみたいと思っても、SDKのサンプルは多機能すぎて解析が非常に困難であったりします。ごく初歩的なサンプルがあればいいのにと思うのですが、どこにもそのようなサンプルがありません。
また逆に基礎的なことではなく、高度な応用技術のサンプルについてもなかなか見つけることができません。仮に見つけられたとしても、不親切で非常に解析し辛いコードではないでしょうか。
本書のサンプルは、それらの状況に応えることを目的としています。
なお、DirectX9必携はDirect3D及びDirectSound、DirectInput等を網羅していますが、本書はDirect3D11のみとなります。ただ、Direct3D分野に関しては、従来の内容を踏襲しつつ、Direct3D11の新機能に関するサンプルや解説が増えています。そのため、内容のボリュームはむしろ本書のほうが濃いと思われます。
なぜDirect3Dだけに絞ったかというと、2つ理由があります。ひとつは、既に述べましたが、3D分野だけでもかなりのボリュームになったため、サウンド等も含めると膨大なページ数になってしまうということがあります。
もうひとつは、3Dと違いサウンドや入力は周辺知識というよりも運用できればそこまで、という場面が多く、3Dに比べ、さほどサンプルを作る必要がないと感じています。そして、サウンド等のサンプルについては、基本的なことはノースブレインの別の書籍「DirectX10/11プログラミング」で既に網羅しているというのが理由です。サウンド等の運用に関しては「DirectX10/11プログラミング」で十分であると判断しました。
具体的な内容については、下の目次を見て判断していただければと思います。

目次

はじめに 13
超基礎編 14
1. 新規プロジェクト 15
準備 15
新規プロジェクトのスタートコード 15
1. 空ウィンドウ(非クラス) 15
2. 空サンプル(ウィンドウまで) 15
3. 空サンプル(ウィンドウ+D3D初期化まで) 16
4. 空サンプル(ウィンドウ+D3D初期化+超基本シェーダーまで) 16
5. ゲームアプリ 開始テンプレート 16
2. 汎用コード 17
FPS 17
6. FPSをタイトルバーに表示 17
7. FPSを直接スクリーン上に表示 18
8. FPSと平均FPSをタイトルバーに表示 19
9. FPSと平均FPSを直接スクリーン上に表示 20
ディレクトリ管理 21
10. ディレクトリ管理 21
設定をファイルから読み込む 22
11. 設定をファイルから読み込む 22
ログ 24
12. ログ 25
リンクド・リスト 26
13. リンクド・リスト 26
ソート 31
14. ソート 31
定数・マクロ定義 53
15. 定数・マクロ定義 53
#pragma ディレクティブ 54
16. #pragma ディレクティブ 54
共通の事項編 55
3. 共通の事柄 56
17. (重要)ビューという概念 56
18. 16バイト境界 57
19. 3Dから2Dにするために変更する箇所 58
レンダリング編 62
4. 点(ポイント) 63
20. 点を3D空間で描画 63
21. 点をスクリーン空間で描画 64
5. 線(ライン) 66
22. 線を3D空間で描画 66
23. 線をスクリーン空間で描画 66
6. 面(ポリゴン) 68
トライアングル(三角ポリゴン) 68
24. シンプルなトライアングルの描画で基本を理解する 68
クアッド(四角形) 72
25. 板ポリゴンの描画 72
面のシェーディング 74
26. 色を変える 74
27. 陰影を付ける ランバートシェーディング 75
28. 頂点単位、ピクセル単位のシェーディング 78
29. 光沢を付ける フォンシェーディング 79
30. テクスチャーを貼る 82
スプライト 84
31. スプライトを3D空間で描画 84
32. スプライトをスクリーン空間で描画 85
33. スプライトの背景を透過させる 86
ビルボード 88
34. ビルボードとは 88
35. ビルボードを3D空間で描画 89
ポイントスプライト 89
36. ポイントスプライトを3D空間で描画 90
37. ポイントスプライトをスクリーン空間で描画 92
38. ポイントスプライトにテクスチャーを貼る 93
39. ポイントスプライトでパーティクルを表現する 93
40. パーティクルを自然に透過させる 96
7. メッシュ 98
41. (重要)本章の読み方 98
42. メッシュとはトライアングルの集まり 98
43. スタティックメッシュとは 101
44. バーテックスバッファーとは 101
45. インデックスバッファーとは 103
46. 頂点の順番 105
47. そもそもなぜモデルを外部ファイルから読み込むのか? 106
スタティックメッシュ ジオメトリのみの最小メッシュ 106
48. OBJフォーマットを理解する 106
49. OBJフォーマット仕様 107
50. OBJフォーマットで最小メッシュ(ジオメトリだけのメッシュ) 112
51. Direct3D11でのD3DXMESH利用について 114
52. D3DXMESHで最小メッシュ 114
スタティックメッシュ ジオメトリ+テクスチャー 119
53. OBJでジオメトリ+テクスチャー 119
54. D3DXMESHでジオメトリ+テクスチャー 122
スタティックメッシュ ジオメトリ+陰影 122
55. OBJでジオメトリ+陰影(バーテックス単位) 122
56. バーテックス単位、ピクセル単位のシェーディングとは 127
57. OBJでジオメトリ+陰影(ピクセル単位) 128
58. D3DXMESHでジオメトリ+陰影(バーテックス単位) 129
59. D3DXMESHでジオメトリ+陰影(ピクセル単位) 129
スタティックメッシュ ジオメトリ+陰影+光沢 130
60. OBJでジオメトリ+陰影+光沢(バーテックス単位) 130
61. OBJでジオメトリ+陰影+光沢(ピクセル単位) 134
62. D3DXでジオメトリ+陰影+光沢(バーテックス単位) 135
63. D3DXでジオメトリ+陰影+光沢(ピクセル単位) 136
スタティックメッシュ ジオメトリ+陰影+光沢+テクスチャー 136
64. OBJで最小メッシュ+陰影+光沢+テクスチャー(バーテックス単位) 136
65. OBJで最小メッシュ+陰影+光沢+テクスチャー(ピクセル単位) 137
66. D3DXで最小メッシュ+陰影+光沢+テクスチャー(バーテックス単位) 138
67. D3DXで最小メッシュ+陰影+光沢+テクスチャー(ピクセル単位) 139
マテリアルファイルを使用する 139
68. マテリアルとは 139
69. マテリアルファイルを理解する 140
70. マテリアルファイル使用 最小メッシュ+陰影+光沢+テクスチャー(バーテックス単位) 140
71. マテリアルファイル使用 最小メッシュ+陰影+光沢+テクスチャー(ピクセル単位) 142
72. OBJとX、どちらが良い? 143
73. 中間フォーマットと最終フォーマットの違い 144
74. 一番良いフォーマットは? 144
法線とエッジ部分のシェーディング 145
75. ハードエッジ 146
76. ソフトエッジ 147
スタティックメッシュ完全版 148
77. OBJでスタティックメッシュ完全版 148
78. D3DXでスタティックメッシュ完全版(おすすめ) 149
階層アニメーションメッシュ 149
79. 階層アニメーションメッシュとは 149
80. D3DXで階層メッシュ 150
モーション切り替え 155
81. 再生位置を変える手法 156
82. アニメーションセットを切り替える手法 157
スキンアニメーションメッシュ 159
83. スキンアニメーションメッシュとは 159
84. D3DXでスキンメッシュ 160
85. モーション切り替え 162
8. テキスト 164
テキスト描画 164
86. テクスチャーによる自作テキスト描画システム 164
87. テキスト描画クラス 168
9. 各シェーダーの把握 170
パイプラインの各工程 170
バーテックスシェーダー 170
88. バーテックスシェーダーとは 170
89. バーテックスシェーダーの仕事 最小サンプル 171
ジオメトリシェーダー 172
90. ジオメトリシェーダーとは 172
91. ジオメトリシェーダーの仕事 最小サンプル 172
ハルシェーダー 173
92. ハルシェーダーとは 173
93. ハルシェーダーの仕事 最小サンプル 174
テセレーター 175
94. テセレーターとは 175
ドメインシェーダー 175
95. ドメインシェーダーとは 175
96. ドメインシェーダーの仕事 最小サンプル 175
ラスタライザー 176
ピクセルシェーダー 176
97. ピクセルシェーダーとは 176
98. ピクセルシェーダーの仕事 最小サンプル 176
コンピュートシェーダー 177
99. コンピュートシェーダーとは 177
100. コンピュートシェーダーの仕事 最小サンプル 177
10. カメラ、ライト 179
カメラ 179
101. カメラを移動 179
102. カメラを回転 180
103. カメラのワールド回転 182
104. カメラのローカル回転 183
105. ジンバルロックとは 184
106. 実際にジンバルロックを体験してみる 185
107. ズームイン、ズームアウト 187
108. FPS風操作 189
109. 3人称視点 190
110. 障害物を回避するカメラ 192
ライト 197
111. ディレクショナルライト 198
112. ポイントライト 200
113. ライトの減衰 201
114. スポットライト 202
115. スポットライト減衰 205
116. スポットライト ソフトエッジ 206
117. スポットライト ソフトエッジ減衰 206
118. 複数のライト 207
11. 基本シェーディング 209
ポリゴンエッジ、ハードとソフト 209
119. フラットシェーディング(ハードエッジ) 210
120. スムーズシェーディング(ソフトエッジ) 210
ディフューズ 陰影 211
121. ランバート Lambert の反射モデル 211
122. オーレン-ナーヤー Oren Nayar の反射モデル 212
スペキュラー 鏡面反射、光沢 215
123. フォン Phong 反射モデル 216
124. クック-トランス Cook-Torrance 反射モデル 216
125. クック トランス 最適化 220
12. 応用シェーディング 各種 221
126. アイスシェーダー 221
127. 2 Color 222
128. Gloss 222
129. カーペイント 223
130. カーペイント+フレーク 224
13. サブサーフェイススキャッタリング 225
131. SSSとは 225
132. SSS 228
133. SSS 厚みテクスチャーを可視化してみる 233
134. SSS+ディフューズぼかし 234
14. バンプマッピング 236
135. バンプマッピングとは 236
136. ノーマルバンプマッピングの原理 236
137. ハイトマップとノーマルマップ 238
138. ポリゴンにバンプマッピング ノーマルマップ使用 239
139. ポリゴンにバンプマッピング ハイトマップ使用 242
140. スタティックメッシュにバンプマッピング ノーマルマップ使用 242
141. スタティックメッシュにバンプマッピング ハイトマップ使用 243
142. スキンメッシュにバンプマッピング ノーマルマップ使用 244
143. スキンメッシュにバンプマッピング ハイトマップ使用 244
144. ポリゴンに海水面を表現 245
15. ディスプレイスメントマッピング 247
145. テセレーションとは 247
146. パッチ、コントロールポイント、ドメインを理解する 247
147. テセレーション 四角 249
148. テセレーション 三角 257
149. ディスプレイスメントマッピングとは 259
150. ディスプレイスメントマッピング 267
151. アダプティブ・ディスプレイスメントマッピング 密度マップ 270
152. アダプティブ・ディスプレイスメントマッピング 距離 276
153. 海水面を表現 277
154. 雪 278
155. ディスプレイス後の法線 279
16. 環境マッピング 280
背景を描画 280
156. スフィアマップでスカイドーム 280
157. キューブマップでスカイボックス 281
周囲の写り込み 282
158. 法線からスフィアマップ用のUVを求める 282
159. スフィアマップで背景のみ映りこみ 頂点単位 286
160. スフィアマップで背景のみ映りこみ ピクセル単位 288
161. 法線と視線からキューブマップ用のUVを求める 288
162. キューブマップで背景のみ映りこみ 頂点単位 289
163. キューブマップで背景のみ映りこみ ピクセル単位 290
164. キューブマップで他モデルの映りこみ 290
165. スカイドームと映りこみ 297
166. スカイボックスと映りこみ 298
マップ用画像それ自体の作成方法 298
167. スフィアマップ用画像 298
168. キューブマップ用画像 300
反射用キューブマップの可視化 303
169. 反射用キューブマップの可視化 303
17. 透明と屈折 304
アルファブレンディング(透過) 304
170. アルファブレンディングとは 304
171. 汚いアルファブレンディング 305
172. 綺麗なアルファブレンディング 308
173. 汚いアルファブレンディング その2 310
174. カメラ位置に依存しないアルファブレンディング 312
175. 通常合成、加算合成 313
176. カリングトリック 315
177. Zテスト無効 315
リフラクション(屈折透過) 316
178. キューブマップ リフラクション 316
18. テクスチャー 318
テクスチャーを貼る、貼らない 318
179. ファイルからテクスチャーの作成 318
180. 空のテクスチャーの作成 320
181. テクスチャーを貼る 322
182. テクスチャーを貼らない 323
テクスチャースクロール 324
183. テクスチャースクロール 324
マルチテクスチャー 325
184. マルチテクスチャー 325
テクスチャー滑らかに切り替え 326
185. テクスチャー滑らかに切り替え 326
テクスチャー上にレンダリング 328
186. テクスチャー上にレンダリング 328
サンプリング,フィルタリング,アドレッシング 330
187. サンプリング,フィルタリング,アドレッシングって何? 330
19. ディファード・シェーディング 333
ディファード・シェーディング完全理解 333
188. ディファード・シェーディングとは 333
189. ディファード・シェーディングの原理 333
190. 最もシンプルなディファード・シェーディング 334
191. ディファード・シェーディングのメリット・デメリット 341
192. ディファード・シェーディング VS フォワード・シェーディング 341
193. ディファード・シェーディングとフォワード・シェーディング、どちらを使うべきか 346
194. G-Bufferに入れるものは自由 深度マップ、アルベド、輝度 346
20. マルチスレッドレンダリング 347
195. PCがD3D11マルチスレッドに対応しているか 347
196. まずはD3d11抜きで、純粋にマルチスレッドのみ 348
197. シングルスレッドでDeferred Contextのみ 350
198. ようやくマルチスレッドでDefeffed Context 354
199. 重たいCPU処理がある場合に効果大 354
200. マルチスレッドと速度アップについて 355
21. シーンエフェクト 356
フォグ 356
201. 線形フォグ、指数フォグ 358
202. グラウンドフォグ、テクスチャードグラウンドフォグ 361
ぼかし 364
203. ぼかし 364
204. 距離でぼかし変化 3パス 368
205. 距離でぼかし変化 2パス 370
206. DOF 371
207. アルファブレンドモーションブラー 372
208. ピクセルモーションブラー 374
アンチエイリアス 378
209. アンチエイリアス 378
影 380
210. 丸影 380
211. 丸影 ソフトエッジ 383
212. シャドウボリューム 384
213. シャドウマップ 400
214. キューブシャドウマップ 408
215. キューブシャドウマップ テクスチャー可視化 416
ダイナミクス編 418
22. バウンディングボリュームによる衝突判定 419
スフィア 419
216. バウンディングスフィアにより衝突判定する 419
OBB 422
217. OBBの原理 422
218. スタティックメッシュのOBB (モデル全体のOBB) 425
219. スキンメッシュのOBB (ボーンごとのOBB) 428
23. レイによる衝突判定 431
レイと面の交差検出 431
220. 直線(レイ)と無限遠平面の交差を検出する 431
221. 平面方程式を求める 432
222. 直線(レイ)と有限遠平面の交差を検出する 434
223. 直線(レイ)と平面の交点座標を算出する 436
レイとメッシュの交差検出 436
224. 直線(レイ)とメッシュの交差を検出する 436
225. 交差しているメッシュ内のポリゴンを得る 438
226. 交差しているメッシュ内ポリゴンの平面方程式を計算する 439
227. 線(レイ)とメッシュ(内ポリゴン)の交点座標を求める 440
レイとスキンメッシュの交差検出 440
228. 直線(レイ)とスキンメッシュの交差を検出する 440
24. 落下、反射、滑り 444
落下 444
229. 自由落下のみ 444
230. 自由落下、地面でバウンド 445
反射 445
231. 反射 445
232. ポリゴン単位で反射 446
滑り 448
233. 障害物を滑る 448
234. 坂を登る 451
235. 階段を登る 452
236. デコボコ地面を歩く 453
237. 動く面上に対しての滑り 454
238. 滑っている方向に回転する 456
その他編 458
25. その他 459
239. オクルージョンクエリ かくれんぼ判定 459
240. 視錐台カリング 461
241. フルスクリーン 462
242. マウス選択 462
243. 60fpsにする 465
244. ワイヤーフレーム 466

 

付属プログラムの実行ムービー

(ムービーにしていないプログラムもあります。サンプルは200以上あります)

スタティックメッシュ

スキンメッシュ

SSS

オーレンナーヤー ディフューズ

クック・トランス スペキュラー

カーペイントシェーダー

全方向シャドウマップ

リアルタイム・リフラクション(屈折透過)

マルチスレッドレンダリング

アルファブレンド・モーションブラー

ピクセル・モーションブラー

 

 

ディファード・シェーディング

グラウンド・フォグ

ディスプレイスメント・オーシャン

スキンメッシュOBB

レイ vs スキンメッシュ

マルチテクスチャー

サンプルプログラムの実行動画

点を3D空間で
点を2D平面で
線を3D空間で
ポリゴン 三角
ポリゴン 四角
Polygon Color
ポリゴン 陰影を付ける
ポリゴン 光沢を付ける
Polygon Texture
陰影、光沢、テクスチャー
3Dスプライト
2Dスプライト
スプライト 周りの色を透明に
ビルボード
Pixel Motion Blur
ポイントスプライトを3D空間で
ポイントスプライトを2D平面で
ポイントスプライトにテクスチャーを貼る
ポイントスプライトでパーティクル
ポイントスプライトでパーティクル Zテスト無効
Pixel Motion Blur_2
OBJ ジオメトリのみ
D3DX ジオメトリのみ
OBJ ジオメトリ+テクスチャ-
D3DX ジオメトリ+テクスチャ-
OBJ ジオメトリ+陰影 頂点単位
OBJ ジオメトリ+陰影 ピクセル単位
OBJ ジオメトリ+陰影+光沢 頂点単位
OBJ ジオメトリ+陰影+光沢 ピクセル単位
D3DX ジオメトリ+陰影+光沢 頂点単位
D3DX ジオメトリ+陰影+光沢 ピクセル単位
OBJ ジオメトリ+陰影+光沢+テクスチャー 頂点単位
OBJ ジオメトリ+陰影+光沢+テクスチャー ピクセル単位
D3DX ジオメトリ+陰影+光沢+テクスチャー 頂点単位
D3DX ジオメトリ+陰影+光沢+テクスチャー ピクセル単位
OBJ ジオメトリ+陰影+光沢+テクスチャー 頂点単位 マテリアルファイル使用
OBJ ジオメトリ+陰影+光沢+テクスチャー ピクセル単位 マテリアルファイル使用
ハードエッジメッシュ
ソフトエッジメッシュ
OBJ スタティックメッシュ(完全版)
D3DX スタティックメッシュ(完全版)
頂点単位
ピクセル単位
D3DX 階層アニメーションメッシュ
D3DX 階層アニメーションメッシュ 時間でモーション変更
D3DX 階層アニメーションメッシュ アニメーションセットでモーション変更
D3DX スキンメッシュ
D3DX スキンメッシュ 完全版
D3DX スキンメッシュ 完全版 アニメセットモーション変更
D3DX スキンメッシュ 完全版 時間モーション変更
デバッグテキスト描画
バーテックスシェーダー
ジオメトリシェーダー
ハルシェーダー
ドメインシェーダー
ピクセルシェーダー
コンピュートシェーダー
カメラ移動
カメラ回転
カメラ ワールド軸で回転
カメラ ローカル軸で回転
ジンバルロック
カメラ ズーム
カメラ FPS風操作
カメラ 3人称視点
障害物を避けるカメラ
ディレクショナルライト
ポイントライト
ポイントライト 減衰
スポットライト
スポットライト 減衰
スポットライト ソフトエッジ
スポットライト ソフトエッジ 減衰
複数のポイントライト
フラットシェーディング
スムースシェーディング
ランバート 頂点単位
ランバート ピクセル単位
オーレン・ナーヤー 頂点単位
オーレン・ナーヤー ピクセル単位
フォン 頂点単位
フォン ピクセル単位
クック・トランス 頂点単位
クック・トランス ピクセル単位
クック・トランス 頂点単位その2
クック・トランス ピクセル単位その2
アイスシェーダー 頂点単位
アイスシェーダー ピクセル単位
2色
グロス艶
車の塗装
車の塗装+フレーク
サブサーフェイススキャッタリング
サブサーフェイススキャッタリング 深度テクスチャー可視化
サブサーフェイススキャッタリング 柔らかい拡散反射
ポリゴンにノーマルマッピング ノーマルマップ使用
ポリゴンにノーマルマッピング ハイトマップ使用
メッシュにノーマルマッピング ノーマルマップ使用
メッシュにノーマルマッピング ハイトマップ使用
スキンメッシュにノーマルマッピング ノーマルマップ使用
スキンメッシュにノーマルマッピング ハイトマップ使用
板ポリゴンで海を表現
最小テセレーション 四角形
最小テセレーション 三角形
ディスプレイスメントマッピング
アダプティブ・ディスプレイスメントマッピング 密度マップ
アダプティブ・ディスプレイスメントマッピング 距離ベース
板ポリゴンで海を表現 ディスプレイス版
板ポリゴンで雪の堆積を表現
屋敷
スカイドーム
スカイボックス
スフィアマップ 頂点単位
スフィアマップ ピクセル単位
キューブマップ 頂点単位
キューブマップ ピクセル単位
キューブマップで本当の写り込み
スフィアマップとスカイドーム
キューブマップとスカイボックス
キューブマップで本当の写り込み テクスチャー可視化
汚いアルファブレンディング
綺麗なアルファブレンディング
汚いアルファブレンディングその2
綺麗なアルファブレンディングその2
ブレンディング各種
カリングトリック
Zテスト無効
屈折透過
Simple Texture
Texture Off
Texture Scroll
Multi Texture
Texture Transition
テクスチャー上にレンダリング
ディファードシェーディング
フォワードシェーディング有利シーン フォワード版
フォワードシェーディング有利シーン ディファード版
ディファードシェーディング有利シーン フォワード版
ディファードシェーディング有利シーン ディファード版
マルチスレッドをサポートしているか
CPUマルチスレッドのみ
イミーディエイト・コンテキスト
ディファード・コンテキスト
マルチスレッドディファード・コンテキスト
重たいCPU処理がある場合(通常)
重たいCPU処理がある場合(マルチスレッド)
線形フォグ
指数フォグ
グラウンドフォグ
テクスチャードグラウンドフォグ
ぼけ
ぼけ2
距離ベースぼけ
距離ベースぼけ2
被写界深度
アルファブレンド・モーションブラー
アンチエイリアス
丸影
丸影 ソフトエッジ
シャドウボリューム
シャドウマップ
全視界キューブシャドウマップ
全視界キューブシャドウマップ 深度マップ可視化
境界球
境界ボックスOBB
スキンメッシュ境界ボックスOBB
レイと無限平面
平面方程式
レイと閉じた平面
レイと閉じた平面 交点座標
レイとメッシュ
レイとメッシュ 交点のポリゴン
レイとメッシュ 交点のポリゴン平面方程式
レイとメッシュ 交点座標
レイとスキンメッシュ
自由落下
バウンド
跳ね返り
ポリゴン単位で跳ね返り
壁を滑る
坂を登る
階段を登る
でこぼこ面を歩く
プレートを転がるボール
プレートを転がるボール 回転させる
オクルージョンクエリー
視錐台カリング
3D物体をマウスで選択
60fpsを上限にする Vsync方式
60fpsを上限にする ウェイト方式
ワイヤーフレーム