DIRECT3D11必携

Direct3D11HK_Landing

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 スキンメッシュ

マルチテクスチャー

ご購入はオンラインショップで

ノースブレインオンラインショップ カラーミー店

ノースブレインオンラインショップ PayPal店

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です