DirectX 12の魔導書 3Dレンダリングの基礎からMMDモデルを踊らせるまで(川野 竜一)|翔泳社の本
  1. ホーム >
  2. 書籍 >
  3. DirectX 12の魔導書 3Dレンダリングの基礎からMMDモデルを踊らせるまで

DirectX 12の魔導書 3Dレンダリングの基礎からMMDモデルを踊らせるまで


形式:
書籍
発売日:
ISBN:
9784798161938
定価:
本体4,600円+税
仕様:
B5変・664ページ
分類:
プログラミング・開発

本書籍の他の形式を確認する

  • このエントリーをはてなブックマークに追加

複雑なライブラリも、
一歩ずつ進めれば怖くない。

「DirectX 9~11に比べて超高機能/高性能だと聞いたけれど、
 複雑すぎて何をしているかわからない」

「ゲームエンジンのメンテナンスをするために、
 最新のDirectXの基礎を知りたい」

「フルスクラッチでMMDのモデルを
 表示/アニメーションさせてみたい」

そんなC++プログラマーに向けた、
DirectX 12の「導きの書」がついに登場!

◆3Dグラフィックスの基礎
◆グラフィックスパイプラインとステージ
◆PMDデータの読み込みと描画
◆VMDデータの読み込みとアニメーション再生
◆IK
◆ポストエフェクト

など、本当に知りたかった
DirectX 12プログラミングの基本がこの1冊に!!

DirectXは初めてという人も、
DirectX 9や10で止まってしまっている人も、
本書を心強い相棒にして、挑戦の旅へと出掛けましょう!


■Part 1 基礎理論編

Chapter 1 前提となる知識とDirectX 12の概略
 1.1 本書で使用するC++
 1.2 本書で使用する数学
 1.3 初歩的なレンダリング理論
 1.4 ハードウェアの基礎知識
 1.5 DirectXの歴史と変化

Chapter 2 グラフィックスパイプラインとさまざまなシェーダー
 2.1 グラフィックスパイプラインとは
 2.2 シェーダーとは

■Part 2 実践編(1)

Chapter 3 初期化から画面クリアまで
 3.1 最初のプロジェクト
 3.2 ウィンドウ表示とDirect3Dの初期化
 3.3 画面色のクリア
 3.4 エラー対応

Chapter 4 ポリゴンの表示
 4.1 グラフィックスパイプラインのおさらい
 4.2 頂点情報の作成
 4.3 頂点バッファー
 4.4 頂点情報のコピー(マップ)
 4.5 はじめてのシェーダー
 4.6 シェーダーの読み込みと生成
 4.7 頂点レイアウト
 4.8 グラフィックスパイプラインステートの作成
 4.9 ルートシグネチャ
 4.10 ビューポートとシザー矩形
 4.11 三角形ポリゴンを四角形にしてみる

Chapter 5 ポリゴンにテクスチャを貼り付ける
 5.1 DirectX 12におけるテクスチャ
 5.2 頂点情報にuv情報を追加する
 5.3 シェーダーにuv情報を追加する
 5.4 テクスチャデータの作成
 5.5 テクスチャバッファー
 5.6 ID3D12Resource::WriteToSubresource()メソッドによるデータ転送
 5.7 シェーダーリソースビュー
 5.8 ルートシグネチャにスロットとテクスチャの関連を記述する
 5.9 描画時の設定
 5.10 ピクセルシェーダーのプログラムを変更
 5.11 画像ファイルを読み込んで表示する
 5.12 ID3D12GraphicsCommandList::CopyTextureRegion()メソッドによる転送
 5.13 d3dx12.h(CD3DX~)の導入

Chapter 6 行列による座標変換
 6.1 行列の基本
 6.2 定数バッファーとシェーダーからの利用
 6.3 行列を変更してみる(2D編)
 6.4 行列を用いて3D化してみる
 6.5 回転アニメーションさせてみよう

Chapter 7 PMDの読み込みとモデルの表示
 7.1 MMDのダウンロード
 7.2 PMDデータとは
 7.3 PMDにおける頂点データ
 7.4 PMDヘッダー構造体
 7.5 PMDの頂点構造体とレイアウトの準備
 7.6 読み込んだ頂点データの描画
 7.7 インデックスデータの読み込みと利用
 7.8 法線データの表示
 7.9 深度バッファーの導入
 7.10 ランバートの余弦則
 7.11 シェーダー側でランバートの余弦則を実装する
 7.12 法線ベクトルも回転させて正しい結果を得る

Chapter 8 マテリアル(材質)
 8.1 マテリアルとは
 8.2 PMDファイルからマテリアルデータを読み込む
 8.3 シェーダーへの転送と表示
 8.4 マテリアルに合わせてテクスチャを貼る
 8.5 テクスチャの有無に応じた処理
 8.6 他のモデルも試してみよう
 8.7 スペキュラとアンビエントの実装
 8.8 テクスチャファイルがTGAやDDSの場合
 8.9 トゥーンシェーディング

Chapter 9 リファクタリング
 9.1 便利なクラスや構造体・マクロ
 9.2 main.cppからApplicationクラスへ
 9.3 用途によって簡単な分類を行う
 9.4 結果としてのApplication.cpp

■Part 3 実践編(2)

Chapter 10 スキニングとアニメーション
 10.1 スキニング(スキンメッシュアニメーション)
 10.2 ボーン情報のロード
 10.3 ツリーの構築
 10.4 頂点シェーダーでボーン行列の配列を扱う
 10.5 ボーン行列バッファーの作成
 10.6 回転行列でモデルにポーズを付ける
 10.7 MMDのアニメーションデータ(VMDファイル)
 10.8 クォータニオンと回転行列
 10.9 VMDデータを読み込んでポーズを付ける
 10.10 VMDデータを使ったアニメーション
 10.11 ベジェ曲線補間と2つの近似法
 10.12 ベジェによるイーズインイーズアウトの実装

Chapter 11 インバースキネマティクス(IK)
 11.1 インバースキネマティクス(IK)とは
 11.2 余弦定理を用いた簡易的IK(間点が1つ)
 11.3 CCD-IK(間点が複数)
 11.4 2DにおけるCCD-IKの実装
 11.5 PMDにおけるCCD-IK
 11.6 その他VMDやIKの仕様を考慮する

Chapter 12 マルチパスレンダリング
 12.1 マルチパスレンダリングとは
 12.2 レンダリング先を変更しテクスチャとして利用する
 12.3 単純なポストエフェクト

Chapter 13 影行列とシャドウマップ
 13.1 シャドウ(影)とは
 13.2 影行列を用いた地面影
 13.3 シャドウマップの導入(マルチパスの応用)

■Part 4 応用編

Chapter 14 マルチレンダーターゲットとその応用
 14.1 ピクセルシェーダーの出力を複数にする(色・法線)
 14.2 色・法線情報によるディファードシェーディング
 14.3 高輝度成分抽出とブルーム(光のもれ)
 14.4 簡易的な被写界深度の実装

Chapter 15 スクリーンスペースアンビエントオクルージョン(SSAO)
 15.1 アンビエントオクルージョンとは
 15.2 数式から考えるアンビエントオクルージョン
 15.3 スクリーンスペースアンビエントオクルージョン(SSAO)の実装

■Part 5 ライブラリ編

Chapter 16 imguiの利用
 16.1 imguiとは
 16.2 imguiの組み込み
 16.3 imguiの活用例

Chapter 17 Effekseerライブラリの利用
 17.1 Effekseerとは
 17.2 Effekseerライブラリの取得と準備
 17.3 Effekseerライブラリの組み込み

Chapter 18 DirectXTKの利用(文字列表示)
 18.1 DirectXTKとは
 18.2 DirectXTK12の入手
 18.3 DirectXTKの組み込み
 18.4 フォントを指定して文字列を表示する
 18.5 文字セットの作成と日本語表示

付属データはこちら

会員特典はこちら

書籍への問い合わせ

正誤表、追加情報をご確認の上、こちらよりお問い合わせください

書影の利用許諾について

本書籍に関する利用許諾申請はこちらになります

追加情報はありません。

ご購入いただいた書籍の種類を選択してください。

書籍の刷数を選択してください。

刷数は奥付(書籍の最終ページ)に記載されています。

現在表示されている正誤表の対象書籍

書籍の種類:

書籍の刷数:

本書に誤りまたは不十分な記述がありました。下記のとおり訂正し、お詫び申し上げます。

対象の書籍は正誤表がありません。

最終更新日:2020年09月25日
発生刷 ページ数 書籍改訂刷 電子書籍訂正 内容 登録日
1刷 048
上から2番目のコードの3行目および4行目
_31 _32 _33 _14 _41 _42 _43 _14
_31 _32 _33 _34 _41 _42 _43 _44
2020.03.18
1刷 066
1つ目のコード3行目
IDXGISwapchain4* _swapchain = nullptr;
IDXGISwapChain4* _swapchain = nullptr;
2020.05.29
1刷 078
本文下から2行目
第3引数、第4引数はnullptrでよいため、第2引数のDXGI_SWAP_CHAIN_DESC1について
第4引数、第5引数はnullptrでよいため、第3引数のDXGI_SWAP_CHAIN_DESC1について
2020.03.03
1刷 083
3つ目のコード、1行目
std::vector<ID3D12Resouce*> _backBuffers(swcDesc.BufferCount);
std::vector<ID3D12Resource*> _backBuffers(swcDesc.BufferCount);
2020.03.18
1刷 136
2つ目、3つ目の箇条書き
●BlendOp:D3D12_BLEND_OP_ADD(加算) ● SrcBlend:D3D12_BLEND_ONE(描画元そのままの値) ● DestBlend:D3D12_BLEND_ONE(描画元そのままの値) 同様に、乗算合成は次のようになります。 ● BlendOp:D3D12_BLEND_OP_ADD(加算) ● SrcBlend:D3D12_BLEND_ZERO(使用しない) ● DestBlend:D3D12_BLEND_SRC_COLOR(描画元そのままの値)
●BlendOp:D3D12_BLEND_OP_ADD(加算) ● SrcBlend:D3D12_BLEND_ONE(描画元の色) ● DestBlend:D3D12_BLEND_ONE(描画先の色) 同様に、乗算合成は次のようになります。 ● BlendOp:D3D12_BLEND_OP_ADD(加算) ● SrcBlend:D3D12_BLEND_ZERO(使用しない) ● DestBlend:D3D12_BLEND_SRC_COLOR(描画先の色×描画元の色)
2020.05.29
1刷 145
1つ目のコード直後
(内容の追加となります)
それから、次のようにビューポートとシザー矩形を設定します。 ==== _cmdList->RSSetViewports(1, &viewport); _cmdList->RSSetScissorRects(1, &scissorrect); ====
2020.02.25
1刷 146
2つ目のコード
return float4((float2(0, 1) + input.pos.xy) * 0.5f,1, 1)
return float4((float2(0, 1) + pos.xy) * 0.5f, 1, 1)
2020.03.18
1刷 159
コード最終行
std::vector texturedata(256*256);
std::vector<TexRGBA> texturedata(256*256);
2020.03.02
1刷 174
本文下から7行目
$(DXTEX_DIR)Desktop_2019_Win10\x64\Debug
$(DXTEX_DIR)\Bin\Desktop_2019_Win10\x64\Debug
2020.03.06
1刷 177
本文1行目
第1引数以外はミップレベルです。
第1引数はミップレベルです。
2020.02.18
1刷 198
6.1.2直前の本文
特にDirectXでは、C++でXMMATRIX構造体(後述)を扱っているときには列優先となり、HLSLで乗算する際には行優先となります。注意しましょう。
特にDirectXでは、C++でXMMATRIX構造体(後述)を扱っているときには行優先となり、HLSLで乗算する際には列優先となります。注意しましょう。
2020.05.29
1刷 199
1つ目のNote
「HLSLは行優先」 先述のようにシェーダー(HLSL)では行優先のため順序が逆です。
「HLSLは列優先」 先述のようにシェーダー(HLSL)では列優先のため順序が逆です。
2020.05.29
1刷 201
本文下から2行目末
ひとまず案マップの必要はないので
ひとまずアンマップの必要はないので
2020.02.20
1刷 208
本文3行目(2つ目のコード直後)
(内容の追加となります)
ルートパラメータが配列になったので、rootSignatureDesc.pParametersの指定も配列化に合わせて書き換えてください。
2020.03.18
1刷 228
2段落目先頭行
先頭3バイトがシグネチャとして"pmd"という文字列になっているのです。
先頭3バイトがシグネチャとして"Pmd"という文字列になっているのです。
2020.02.18
1刷 263
Note内2行目
ID3D11DeviceContext
ID3D12GraphicsCommandList
2020.02.25
1刷 300
コード5行目および6行目
normalUV (※2箇所)
いずれも sphereMapUV となります。
2020.03.02
1刷 301
Note内コード4行目および5行目
normalUV (※2箇所)
いずれも sphereMapUV となります。
2020.03.02
1刷 301
1つ目および2つ目のコード、構造体内メンバー
XMMATRIX viewProj;
XMMATRIX view; XMMATRIX proj;
2020.03.02
1刷 302
1つ目のコード、構造体内メンバー
matrix viewproj;
matrix view; matrix proj;
2020.03.02
1刷 304
1つ目のコード、2行目
diffuse * diffuse
diffuseB * diffuse
2020.03.02
1刷 314
1つ目のコード中のfor文
for (; it != data.end(); it += 4) { auto col = (c << 0xff) | (c << 16) | (c << 8) | c; std::fill(it, it+4, col); --c; }
for (; it != data.end(); it += 4) { //RGBAが逆並びのためRGBマクロと0xff<<24を用いて表す auto col = (0xff << 24) | RGB(c,c,c); std::fill(it, it+4, col); --c; }
2020.09.25
1刷 329
3つ目のコード
D3D12CreateDevice(tmpAdapter, l, IID_PPV_ARGS(&_dev));
D3D12CreateDevice(tmpAdapter, lv, IID_PPV_ARGS(&_dev));
2020.03.18
1刷 382
本文5行目
現在のフレーム名をもとに
現在のフレーム番号をもとに
2020.05.29
1刷 448
コード7行目
auto targetNode = _boneNodeAddressArray[ik.boneIdx];
auto targetNode = _boneNodeAddressArray[ik.targetIdx];
2020.03.18
1刷 449
本文 上から4行目
テータの構造上
データの構造上
2020.05.25
1刷 464
図12.1 左側のオブジェクト
シェーダーリソースビュー(SRV)
レンダーターゲットビュー(RTV)
2020.05.29
1刷 484
図12.13 右上下、左下
(空欄にはいずれも1/256が入ります。)
2020.05.29
1刷 507
数式(2)
a(x − x0) + b(y − y0) + c(z − z0) + d = 0
a(x − x0) + b(y − y0) + c(z − z0) = 0
2020.05.29
1刷 589
4つ目のコード末尾
[ImGui::]
(不要)
2020.05.29
1刷 621
本文6行目および囲み記事「Releaseビルドの場合」内(2箇所)
Bin\Desktop_2017_Win10\x64
Bin\Desktop_2019_Win10\x64
2020.05.29