Direct3D12 ゲームグラフィックス実践ガイド(ダイレクトスリーディートゥエルブゲームグラフィックスジッセンガイド)
その他- 著者:
- Pocol(ポコル)
- 出版社:
- 技術評論社
- 出版日:
- 2021年10月15日頃
- ISBN:
- 9784297123659
- 在庫:
- 在庫あり
なぜ注目されているか
書籍紹介
Direct3D 12 を用いてグラフィックスプログラミングの理論と実装を丁寧に解説し、入門書レベルを卒業し脱初心者を目指している読者に有益な情報を提供する書籍です。
ゲームエンジンを利用していても、それを支えるグラフィックス API 関連の知識を学ぶことはより理想に近い開発を行う上で重要な意味を持ちます。本書ではプログラム上の処理に留まらず理論の復習や導出を丁寧に解説することで、技術やシステムの進化に依らない真の実力を身に付けることができるようになります。
技書の森解説
ゲームエンジンが描いている絵の裏側で、光はどう数値化され、どんな式で材質と相互作用し、どうディスプレイの色に変換されているのか。『 Direct3D 12 ゲームグラフィックス実践ガイド』 (Pocol 著、技術評論社、 2021 年 10 月刊) は、その理論的な基礎を放射分析学や BRDF の導出から丁寧に解説し、それを Direct3D 12 と C++ のコードとして実装するところまでをサンプルファイル付きで一貫して扱う、物理ベースライティングの実践書です。著者は版元プロフィールによればゲームエンジン・ミドルウェアの研究開発を行うシニアソフトウェアエンジニアで、勉強会の主催や個人ホームページでの技術解説も続けている人物です。版元が掲げる対象は、理論から基本を復習したい社会人 1 〜 2 年目のプログラマーと、グラフィックスプログラマーを目指す学生です。
全 11 章と付録 2 本の構成、ウィンドウ表示からメッシュシェーダまで
構成は全 11 章に付録 2 本です。 Chapter 1 は Direct3D の概論と、ポリゴンが画面に出るまでの工程、 Direct3D 12 で変わった点 (コマンドリストとコマンドキュー、パイプラインステート、ディスクリプタ、ルートシグニチャなど) の整理と開発環境の構築に充て、 Chapter 2 から 5 でウィンドウ表示、ポリゴン表示、テクスチャ表示、 assimp ライブラリを使ったメッシュ表示とフレームワークの整備へ進みます。 Chapter 6 が Lambert モデル、 Phong モデル、バンプマッピングという基本的なライティングで、そこから本書の中核に入ります。 Chapter 7 「光の数値化」では立体角、放射分析学、測光学と両者の単位変換を、 Chapter 8 「光伝達のモデル化」では BRDF モデル、オフスペキュラー、マイクロファセットに基づく BRDF を、 Chapter 9 では色の規格、ディスプレイへの出力、トーンマッピングを、 Chapter 10 ではパンクチュアルライト、フォトメトリックライト、イメージベースドライトを扱います。 Chapter 11 はメッシュシェーダパイプラインで、メッシュレットを用いた描画まで実装します。 Appendix A がデバッグの仕方、 Appendix B が DirectX Agility SDK の使用です。
放射分析学と BRDF から組み立てる物理ベースライティングの読みどころ
物理ベースレンダリングが 2010 年代以降のゲームグラフィックスの標準になったのは、材質のパラメータが物理量に対応していれば、どんな照明環境に置いても破綻なく見えるからです。その土台になるのが、光をエネルギーとして測る放射分析学と、人の目の感度で重み付けする測光学の関係で、ルーメンやカンデラといった実世界の光源の単位でライトを設定できるフォトメトリックライトも、この単位変換を理解していなければ正しく実装できません。 BRDF はある方向から入った光がどの方向へどれだけ反射するかを表す関数で、マイクロファセット理論に基づくモデルは、表面の微細な凹凸の統計で金属や粗い塗装の見え方を説明します。そして計算した放射輝度をそのまま画面に出すことはできず、色空間の規格とトーンマッピングを経てディスプレイの表現域に収める必要があります。本書はこの一連の理論を式の導出から追い、同じものをコードで動かすので、Unity や Unreal Engine のマテリアル設定で「なぜこのパラメータなのか」を説明できる理解が残ります。版元が「現場で戦うための本当の基本」と表現するのは、エンジンの世代が変わっても持ち越せるこの種の知識のことです。 Direct3D 12 は明示的なリソース管理を開発者に委ねる低水準の API なので、その上で組む経験は GPU の動作モデルを身体で理解する訓練にもなります。
C++ と Direct3D 12 の前提知識、本書が扱っていない領域
コードは C++ で書かれ、 Windows と Visual Studio の環境を前提にするため、 C++ の読み書きができることは必須です。数学面では、ベクトルの内積や、立体角と積分で放射量を定義する議論に抵抗がない程度の素地があると、 Chapter 7 と 8 の導出をそのまま追えます。一方で、章と節の目次に照らす限り、シャドウマッピングやポストプロセス、レイトレーシングの実装を扱う章はありません。レイトレーシングパイプラインや可変レートシェーディングは Chapter 1 で Direct3D 12 の新要素として概説されるにとどまるので、影や画面効果の実装手順を求める人には別の資料が必要です。また Unity や Unreal Engine の操作方法を学ぶ本でもありません。
元が取れるのは、入門書で三角形やテクスチャの表示までは経験したものの、ライティングの式を「そういうものだ」と写して使ってきた人、ゲーム開発 の現場に入って 1 〜 2 年でエンジンのマテリアルの中身を理解したい人、グラフィックスプログラマーを志望して理論と実装の両方を示せるポートフォリオを作りたい学生です。読み終えると、 PBR のマテリアルパラメータと光源の物理単位が何を意味するかを説明でき、自分のレンダラで放射輝度からディスプレイ出力までの経路を組める状態になります。理論を飛ばさずに描画の基礎を固めたいなら、 2021 年時点の Direct3D 12 の機能まで含めて一冊で往復できる本書は、投じた時間に見合う選択です。
言及 Qiita 記事 (2 件)
この本に興味がある方におすすめ
この本に関連
関連記事
関連用語
依存グラフとは - モジュール間の依存関係を可視化する方法
依存グラフはパッケージやモジュール間の依存関係を有向グラフで表現する手法。循環依存の検出 / ビルド順序の決定 / 影響範囲分析での活用法を解説
グラフデータベース
ノード (エンティティ) とエッジ (関係) でデータを表現し、複雑な関係性のクエリに特化したデータベース
グラフアルゴリズム
ノードとエッジで構成されるグラフ構造に対する探索 / 最短経路 / 接続性の分析アルゴリズム
スレッドプール
事前に生成したスレッドを再利用し、スレッド生成のオーバーヘッドを削減する並行処理パターン
goroutine
Go の軽量スレッドで、数十万規模の並行処理を低コストで実現する
プロセスとスレッドの違いとは - メモリ空間 / 生成コスト / 通信方法を比較
プロセスとスレッドの違いをメモリ空間 / 生成コスト / 通信方法の 3 軸で比較。Node.js での使い分け、Lambda の実行環境、データ競合とコンテナの PID 1 の落とし穴まで解説