目次
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の動作について