書籍概要

Direct3D 12 ゲームグラフィックス実践ガイド

著者
発売日
更新日

概要

Direct3D 12を用いてグラフィックスプログラミングの理論と実装を丁寧に解説し,入門書レベルを卒業し脱初心者を目指している読者に有益な情報を提供する書籍です。 ゲームエンジンを利用していても,それを支えるグラフィックスAPI関連の知識を学ぶことはより理想に近い開発を行う上で重要な意味を持ちます。本書ではプログラム上の処理に留まらず理論の復習や導出を丁寧に解説することで,技術やシステムの進化に依らない真の実力を身に付けることができるようになります。

こんな方におすすめ

  • 理論から基本を復習したい社会人 1 ~2 年目のプログラマー,グラフィックスプログラマーを目指す学生

サンプル

目次

Chapter1 プログラミングを始める前に

  • 1.1 コンピュータグラフィックスとテクノロジーの発展
  • 1.2 Direct3D概論
  • 1.3 画面にポリゴンが表示されるまでの工程
    • 1.3.1 大まかな流れ
    • 1.3.2 描画コマンドの作成
    • 1.3.3 レンダリングパイプライン
    • 1.3.4 コンピュートパイプライン
  • 1.4 Direct3D 12はどこが変わった?
    • 1.4.1 コマンドリストとコマンドキュー
    • 1.4.2 パイプラインステート
    • 1.4.3 ディスクリプタ
    • 1.4.4 ルートシグニチャ
    • 1.4.5 バンドル
    • 1.4.6 インダイレクトコマンド
    • 1.4.7 シェーダモデル 6.0
    • 1.4.8 レイトレーシングパイプライン
    • 1.4.9 可変レートシェーディング
    • 1.4.10 メッシュシェーダパイプライン
    • 1.4.11 サンプラーフィードバック
  • 1.5 開発環境の構築
    • 1.5.1 開発環境について
    • 1.5.2 Visual Studioのインストール
    • 1.5.3 グラフィックスツールの設定

Chapter2 ウィンドウの表示

  • 2.1 プロジェクトの作成
  • 2.2 アプリケーションクラスの作成
    • 2.2.1 Appクラスの実装
    • 2.2.2 Appクラスの呼び出し
  • 2.3 Direct3D 12の初期化処理
    • 2.3.1 デバイスの生成
    • 2.3.2 コマンドキューの生成
    • 2.3.3 スワップチェインの生成
    • 2.3.4 コマンドリストの生成
    • 2.3.5 レンダーターゲットビューの生成
    • 2.3.6 フェンスの生成
  • 2.4 Direct3D 12の描画処理
    • 2.4.1 コマンドの記録開始
    • 2.4.2 書き込みのためのリソースバリア
    • 2.4.3 レンダーターゲットビューの設定
    • 2.4.4 表示のためのリソースバリア
    • 2.4.5 コマンドの記録終了とコマンドリストの実行
    • 2.4.6 表示処理
  • 2.5 Direct3D 12の終了処理
  • 2.6 リファクタリング
  • 2.7 スマートポインタの使用
  • 2.8 デバッグフラグの追加
  • 2.9 メモリリークチェック

Chapter3 ポリゴンの表示

  • 3.1 シェーダの準備
    • 3.1.1 シェーダファイルの作成
    • 3.1.2 頂点シェーダの実装
    • 3.1.3 ピクセルシェーダの実装
  • 3.2 描画に必要なインタフェースの生成
  • 3.3 頂点バッファの生成
    • 3.3.1 頂点データの準備
    • 3.3.2 リソースの生成
    • 3.3.3 頂点データの書き込み
    • 3.3.4 頂点バッファビューの設定
  • 3.4 定数バッファの生成
    • 3.4.1 定数バッファデータの定義
    • 3.4.2 ディスクリプタヒープの生成
    • 3.4.3 リソースの生成
    • 3.4.4 定数バッファビューの生成
  • 3.5 ルートシグニチャの生成
    • 3.5.1 ルートパラメータの種類
    • 3.5.2 ルートシグニチャの生成
  • 3.6 グラフィックスパイプラインステー
    • 3.6.1 入力レイアウトの設定
    • 3.6.2 ラスタライザーステートの設定
    • 3.6.3 ブレンドステートの設定
    • 3.6.4 シェーダの設定
    • 3.6.5 パイプラインステートの生成
  • 3.7 描画コマンドの生成
  • 3.8 インデックスバッファ
    • 3.8.1 インデックスバッファの生成
    • 3.8.2 描画処理の変更
  • 3.9 複数図形の描画
    • 3.9.1 Zバッファ法
    • 3.9.2 深度ステンシルビューの生成
    • 3.9.3 深度ステンシルステートの設定
    • 3.9.4 描画処理の変更

Chapter4 テクスチャの表示

  • 4.1 テクスチャとは?
    • 4.1.1 画像形式
    • 4.1.2 テクスチャ座標
    • 4.1.3 テクスチャアドレッシングモード
    • 4.1.4 ミップマップ
    • 4.1.5 テクスチャフィルタリング
  • 4.2 DirectXTKライブラリの利用
    • 4.2.1 DirectXTK12のインストール
    • 4.2.2 テクスチャデータの準備
  • 4.3 テクスチャの描画
    • 4.3.1 シェーダの準備
    • 4.3.2 頂点バッファの変更
    • 4.3.3 ルートシグニチャの変更
    • 4.3.4 テクスチャの生成
    • 4.3.5 描画関数の変更

Chapter5 メッシュの表示

  • 5.1 assimpライブラリを利用したモデルの描画
    • 5.1.1 assimpライブラリのインストール
    • 5.1.2 メッシュファイルの準備
    • 5.1.3 ファイルのロード処理
    • 5.1.4 メッシュデータの変換処理
    • 5.1.5 メッシュの描画
  • 5.2 フレームワークの整備
    • 5.2.1 ディスクリプタプールクラス
    • 5.2.2 テクスチャクラス
    • 5.2.3 定数バッファクラス
    • 5.2.4 メッシュクラス
    • 5.2.5 マテリアルクラス

Chapter6 基本的なライティング

  • 6.1 光と材質
  • 6.2 Lambertモデル
  • 6.3 Phongモデル
  • 6.4 バンプマッピング
    • 6.4.1 法線マップとは?
    • 6.4.2 法線マップの計算方法
    • 6.4.3 接線空間への基底変換
    • 6.4.4 バンプマッピングの実装
    • 6.4.5 ワールド空間への基底変換

Chapter7 光の数値化

  • 7.1 立体角
  • 7.2 光
  • 7.3 放射分析学
    • 7.3.1 放射エネルギー(radiant energy)
    • 7.3.2 放射束(radiant flux)
    • 7.3.3 放射照度(irradiance)
    • 7.3.4 放射発散度(radiant exitance)
    • 7.3.5 放射強度(radiant intensity)
    • 7.3.6 放射輝度(radiance)
  • 7.4 測光学
    • 7.4.1 錐状体
    • 7.4.2 分光視感度(spectral luminous efficacy)
    • 7.4.3 光束(luminous flux)
    • 7.4.4 光度(luminous intensity)
    • 7.4.5 照度(illuminance)
    • 7.4.6 光束発散度(luminous exitance)
    • 7.4.7 輝度(luminance)
  • 7.5 放射量と測光量の単位変換

Chapter8 光伝達のモデル化

  • 8.1 光の伝達を表現するには?
  • 8.2 どのぐらい光が出射される?
    • 8.2.1 双方向散乱面反射率分布関数
    • 8.2.2 双方向反射率分布関数
  • 8.3 BRDFモデル
    • 8.3.1 Lambertモデル
    • 8.3.2 Phongモデル
  • 8.4 オフスペキュラー
    • 8.4.1 フレネル反射
    • 8.4.2 シャドウイングとマスキング
  • 8.5 マイクロファセットに基づくBRDF
    • 8.5.1 マイクロサーフェイス
    • 8.5.2 マイクロサーフェイスの射影
    • 8.5.3 マイクロファセットに基づくBRDFの導出
    • 8.5.4 シャドウイング・マスキング関数
    • 8.5.5 Cook-Torranceモデル
    • 8.5.6 GGXモデル

Chapter9 色を適切に扱う

  • 9.1 色を表現する
    • 9.1.1 混色
    • 9.1.2 等色実験
    • 9.1.3 CIE 1931 RGB表色系
    • 9.1.4 CIE 1931 XYZ表色系
    • 9.1.5 xy色度図
  • 9.2 ディスプレイへの出力
    • 9.2.1 ガンマ補正
    • 9.2.2 伝達関数
    • 9.2.3 色空間の変換
  • 9.3 色の規格
    • 9.3.1 IEC 61966-2-1規格(sRGB規格)
    • 9.3.2 ITU-R BT.709勧告
    • 9.3.3 ITU-R BT.2100勧告
  • 9.4 トーンマッピング
    • 9.4.1 Reinhardトーンマッピング
    • 9.4.2 HDRディスプレイとトーンマッピ
    • 9.4.3 Reinhardトーンマッピングの拡張
    • 9.4.4 GTトーンマップ
  • 9.5 プログラムの実装
    • 9.5.1 HDRサポートのチェック
    • 9.5.2 HDR画像の準備
    • 9.5.3 レンダーターゲットのフォーマッ
    • 9.5.4 色域変換
    • 9.5.5 トーンマッピングの適用
    • 9.5.6 OETFの適用

Chapter10 ライトの種類と表現

  • 10.1 光束と放射束の単位変換
  • 10.2 パンクチュアルライト
    • 10.2.1 ポイントライト
    • 10.2.2 スポットライト
    • 10.2.3 光の減衰
    • 10.2.4 ディレクショナルライト
  • 10.3 フォトメトリックライト
    • 10.3.1 配光測定のための座標系
    • 10.3.2 IESプロファイルの仕様
    • 10.3.3 IESプロファイルの変換
    • 10.3.4 IESプロファイルの適用
  • 10.4 イメージベースドライト
    • 10.4.1 逆変換法
    • 10.4.2 モンテカルロ積分法
    • 10.4.3 ライトプローブのフィルタリング
    • 10.4.4 ライトプローブの評価

Chapter11 メッシュシェーダパイプライン

  • 11.1 メッシュシェーダとは?
  • 11.2 ポリゴンの描画
    • 11.2.1 メッシュシェーダの実装
    • 11.2.2 パイプラインステートの生成
    • 11.2.3 描画コマンドの発行
  • 11.3 メッシュレットを用いた描画
    • 11.3.1 メッシュレットの生成
    • 11.3.2 シェーダの実装
    • 11.3.3 描画メソッドの修正

AppendixA デバッグの仕方

  • A1 基本的なデバッグ操作
    • A1.1 ブレークポイント
    • A1.2 データウォッチ
    • A1.3 ステップ実行
    • A1.4 特定の場所に移動する
    • A1.5 コールスタック
    • A1.6 メモリの表示
    • A1.7 データブレーク
    • A1.8 CRTデバッグライブラリ
    • A1.9 並列スタック/並列ウォッチ
  • A2 Direct3D 12のデバッグ
    • A2.1 デバッグレイヤーの有効化
    • A2.2 GPUクラッシュの解析
  • A3 PIX for Windowsを用いたグラフィックスデバッグ
    • A3.1 インストールとプログラムの起動方法
    • A3.2 GPUキャプチャー方法
    • A3.3 Pipelineビュー
    • A3.4 頂点シェーダのデバッグ
    • A3.5 ピクセルシェーダのデバッグ

AppendixB DirectX Agility SDKの使用

  • B1 Agility SDKの使用方法
  • B2 Agility SDKの動作について

サポート

ダウンロード

本書で使用したサンプルファイルをダウンロードできます。
以下より圧縮ファイルをダウンロードしていただき,適宜解凍してご利用ください。

ダウンロード
サンプルファイル

商品一覧