清原 隆行 著
DirectXだけでなくUnityでも使われているシェーダー言語HLSL。
本書は、グラフィックスプログラマやテクニカルアーティストをめざす人が、
ハンズオン形式の豊富なサンプルを使って、3Dグラフィックを演出するシェーディング技術を
学ぶための教科書です。
本書では、サンプルプログラムとして、DirectX 12のコーディングをほとんど意識せず、
HLSLプログラミングに集中できるようなミニエンジンが提供されます。
シェーダーの基礎であるレンダリングパイプラインから、最新技術であるレイトレーシングまで、
本書を読めば、あなたもグラフィックスプログラマの仲間入りです!
~本書の内容~
・Chapter 1:レンダリングパイプライン入門
・Chapter 2:はじめてのシェーダー
・Chapter 3:シェーダープログラミングの基本(2)
・Chapter 4:ライティング基礎
・Chapter 5:ライティング発展
・Chapter 6:さまざまなテクスチャの利用
・Chapter 7:PBR(物理ベースレンダリング)
・Chapter 8:2D描画の基礎
・Chapter 9:発展的な2D描画
・Chapter 10:ポストエフェクト
・Chapter 11:シャドウイング
・Chapter 12:ディファードレンダリング
・Chapter 13:ディファードレンダリングとフォワードレンダリングの融合
・Chapter 14:3Dゲームで使える発展的シェーダー
・Chapter 15:コンピュートシェーダー
・Chapter 16:TBR(Tile Based Rendering)
・Chapter 17:レイトレーシング
DirectXだけでなくUnityでも使われているシェーダー言語HLSL。本書は、グラフィックスプログラマやテクニカルアーティストをめざす人が、ハンズオン形式の豊富なサンプルを使って、3Dグラフィックを演出するシェーディング技術を学ぶための教科書です。シェーダーの基礎であるレンダリングパイプラインから、最新技術であるレイトレーシングまで、本書を読めば、あなたもグラフィックスプログラマの仲間入りです!
現在のハイエンドゲームのライティングの計算のディファクトスタンダード(事実上の標準)になっている、PBR(物理ベースレンダリング)について見ていきます。「PBR」や「物理ベースレンダリング」についてインターネットなどで調べると、難しい話がたくさん出ますが、本書では難しい言葉はできるだけ使わずに、かみ砕いて説明します。
最近の3Dゲームでは、カメラのピンボケ現象をシミュレーションする被写界深度や、光があふれ出るブルームといわれる現象を疑似的に再現しています。これらはポストエフェクトと呼ばれる手法で実現されています。本書では、ポストエフェクトの基礎となるオフスクリーンレンダリングについて説明したあとで、モノクロ化、ブルーム、被写界深度など、いくつかのポストエフェクトを紹介します。
3Dゲームでリアルなグラフィックスを実現するためには、「影(シャドウ) 」が非常に重要な要素です。また、影はグラフィックスの質という側面だけではなく、3Dオブジェクトが空間上でどこにあるかをユーザーに教えるための重要な要素となります。本書では、影描画の基本となる、古典的な影生成アルゴリズムの「投影シャドウ」について説明します。
ディファードレンダリングはXbox 360やPlayStation 3の頃に生まれたレンダリング手法であり、比較的新しい手法だといえます。特にPlayStation 3はこの手法に向いたアーキテクチャだったため、ディファードレンダリングが採用されたゲームがいくつもありました。本書では、現在の主流になってきているレンダリング手法、ディファードレンダリングについて見ていきます。
DirectX 9までは、これら2つのシェーダーステージしか用意されていませんでした。しかし、DirectX 10からは「GPUに汎用的な処理を行わせるプログラムを簡単に記述したい」という開発者の要望に応える形で、DirectComputeという名称のAPIが提供され、コンピュートシェーダーという新しいシェーダーステージが追加されました。コンピュートシェーダーはHLSLで記述でき、非常に柔軟に計算結果を出力できるようになっています。
レイトレーシング法(レイトレーシング、レイトレ)とは光の伝搬をシミュレーションすることによって、非常にリアルなコンピューターグラフィックスを表現する一般的な手法の1つです。本書では、PlayStation 5など次世代のリアルタイムCGプログラミングで重要な要素となるレイトレーシングについて見ていきます。
本書では、開発環境としてWindows 10上のVisual Studio 2019を使用しています。
また、動作環境として、ゲーミングPCなど、一定レベル以上の環境が必要となります。例として、動作確認を行った環境としては以下のようなものです。
※ Chapter 17で扱うDirectX Raytracing(DXR)が動作するためには、 GeForce GTX 1060もしくはGeForce GTX 1660以上のグラフィックスボード(GPU)が必要です。
Chapter 1 レンダリングパイプライン入門
1.1 CPUとGPU
1.2 メインメモリとグラフィックスメモリ
1.3 絵が表示されるまでの流れ
Chapter 2 はじめてのシェーダー
2.1 DirectX 7.1以前のレンダリングパイプライン
2.2 シェーダーの導入
2.3 頂点シェーダー入門
2.4 ピクセルシェーダー入門
Chapter 3 シェーダープログラミングの基本
3.1 座標変換
3.2 テクスチャマッピング
3.3 複雑な3Dモデルの表示へ
Chapter 4 ライティング基礎
4.1 ライティングなしの3Dモデル表示
4.2 ライトの種類
4.3 反射:Phongの反射モデル
Chapter 5 ライティング発展
5.1 ポイントライト
5.2 スポットライト
5.3 リムライト
5.4 半球ライト
Chapter 6 さまざまなテクスチャの利用
6.1 法線マップ
6.2 スペキュラマップ
6.3 アンビエントオクルージョンマップ(AOマップ)
Chapter 7 PBR(物理ベースレンダリング)
7.1 PBRとは
7.2 ディズニーの論文によるPBR
Chapter 8 2D描画の基礎
8.1 DirectX 12で2D描画
8.2 2D表示
8.3 αブレンディング
Chapter 9 発展的な2D描画
9.1 リニアワイプ
9.2 その他のワイプ
9.3 画像の色を変化させる
Chapter 10 ポストエフェクト
10.1 オフスクリーンレンダリング
10.2 モノクロ化
10.3 ブラー
10.4 ブルーム
10.5 川瀬式ブルームフィルター
10.6 被写界深度
10.7 カメラの絞りによる六角形ブラー
Chapter 11 シャドウイング
11.1 投影シャドウ
11.2 デプスシャドウ
11.3 PCF(Percentage Closer Filtering)
11.4 VSM(Variance Shadow Maps)
11.5 カスケードシャドウ
Chapter 12 ディファードレンダリング
12.1 フォワードレンダリングとは
12.2 ディファードレンダリングとは
12.3 ディファードレンダリングのメリット
12.4 ディファードレンダリングのデメリット
12.5 ディファードレンダリング入門~拡散反射~
12.6 ディファードレンダリング入門~鏡面反射~
12.7 ディファードレンダリング入門~法線マップ~
12.8 ディファードレンダリング入門~スペキュラマップ~
Chapter 13 ディファードレンダリングとフォワードレンダリングの融合
13.1 半透明問題
13.2 ハイブリッドエンジンの実装
Chapter 14 3Dゲームで使える発展的シェーダー
14.1 レンダリングエンジン
14.2 レンダリングエンジンのカスタマイズ
14.3 輪郭線の描画
14.4 ステルス処理
14.5 ディザリング
Chapter 15 コンピュートシェーダー
15.1 GPGPUとは
15.2 コンピュートシェーダーとは
15.3 データの入力と出力
15.4 構造化バッファー
15.5 アンオーダーアクセスビューとシェーダーリソースビュー
15.6 学生の平均点を計算するプログラムを眺めてみる
15.7 合計点を出力するように改造する
15.8 標準偏差を計算する
15.9 コンピュートシェーダーの並列処理
Chapter 16 TBR(Tile Based Rendering)
16.1 ポイントライト再び
16.2 TBDR(Tile Based Deffered Rendering)
16.3 TBFR(Tile Based Forward Rendering)
Chapter 17 レイトレーシング
17.1 レイトレーシングとは
17.2 レイトレーシング法とラスタライザー法の違い
17.3 レイトレーシング超入門
17.4 テクスチャマッピング
17.5 2次反射
17.6 DirectX Raytracing(DXR)
内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。
正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。
本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。
刷数は奥付(書籍の最終ページ)に記載されています。
書籍の種類:
書籍の刷数:
本書に誤りまたは不十分な記述がありました。下記のとおり訂正し、お詫び申し上げます。
対象の書籍は正誤表がありません。
発生刷 | ページ数 | 書籍改訂刷 | 電子書籍訂正 | 内容 | 登録日 | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|
1刷 | 120 「step-10 距離による影響率を計算する(HLSL)」のコード3行目 |
2刷 | 済 |
|
2022.03.08 | ||||||
1刷 | 141 「step-2 カメラ空間の法線を求める(HLSL)」2行目のコード |
3刷 | 済 |
|
2023.05.30 | ||||||
1刷 | 145 ページ上部のコード 最終行 |
4刷 | 未 |
|
2024.03.12 | ||||||
1刷 | 150 Note内の表5.3 「Bボタン」の「キーボード」 |
2刷 | 済 |
|
2022.03.08 | ||||||
1刷 | 159 グレーの枠内の最終行コード |
3刷 | 済 |
|
2023.05.30 | ||||||
1刷 | 176 「7.1.1 正規化Lambert 拡散反射の実装」の図7.3 |
2刷 | 済 |
|
2022.03.08 | ||||||
1刷 | 178 表7.1の「subsurface」の説明 |
3刷 | 済 |
|
2023.05.30 | ||||||
1刷 | 196 「step-6 テクスチャをロードする(C++)」3行目のコード |
3刷 | 済 |
|
2023.05.30 | ||||||
1刷 | 242 「step-4 offscreenRenderTargetに各種モデルを描画する(C++)」最終行のコード |
3刷 | 済 |
|
2023.05.30 | ||||||
1刷 | 243 図10.5の上のグレーの枠内のコード 2行目 |
3刷 | 済 |
|
2023.05.30 | ||||||
1刷 | 270 「10.4.3 ブルームを実装する」の「step-1 メインレンダリングターゲットを作成する(C++)」のコード |
2刷 | 済 |
|
2022.03.08 | ||||||
1刷 | 297 「10.6.3 被写界深度を実装する」の「step-12 ボケ画像書き込み用のピクセルシェーダーを実装(HLSL)」のコード |
2刷 | 済 |
|
2022.03.08 | ||||||
1刷 | 324 最上部のコード 6行目 |
2刷 | 済 |
|
2022.03.08 | ||||||
1刷 | 379 「step-11 シャドウマップにレンダリング(C++)」のコード 下から3行目 |
3刷 | 済 |
|
2023.06.01 | ||||||
1刷 | 381 「step-14 近~中距離のシャドウマップにアクセスするための変数を定義(HLSL)」見出しとコードの1行目 |
3刷 | 済 |
|
2023.06.01 | ||||||
1刷 | 394 「step-1 モデルを初期化(C++)」2つ目のグレーの枠内のコード 上から3行目 |
3刷 | 済 |
|
2023.06.01 | ||||||
1刷 | 417 図13.3 |
3刷 | 済 |
|
2023.06.01 | ||||||
1刷 | 426 「●1. シャドウマップへの描画」3行目 |
3刷 | 済 |
|
2023.06.01 | ||||||
1刷 | 427 本文上から2行目 |
3刷 | 済 |
|
2023.06.01 | ||||||
1刷 | 455 「15.3 データの入力と出力」本文4行目と コード5行目と9行目 |
3刷 | 済 |
|
2023.06.01 | ||||||
1刷 | 455 「15.3 データの入力と出力」のコード 1行目 |
2刷 | 済 |
|
2022.03.08 | ||||||
1刷 | 464 コード 下から5行目 |
3刷 | 済 |
|
2022.05.24 | ||||||
1刷 | 466 「図15.5 スレッドを利用した処理」の矢印 |
3刷 | 済 |
|
2023.06.02 | ||||||
1刷 | 468 「15.9.3 SV_DispatchThreadID セマンティクス」の最終行 |
2刷 | 済 |
|
2022.03.08 | ||||||
1刷 | 489 「16.1.1 ポイントライトでLambert 拡散反射」のコード 「// 1.」と「// 2.」 |
3刷 | 済 |
|
2023.06.02 | ||||||
1刷 | 492 「step-4 表示するモデルを初期化する(C++)」のコード |
3刷 | 済 |
|
2023.06.02 | ||||||
1刷 | 493 「step-6 モデルのドローコールを実行する(C++)」のコード |
3刷 | 済 |
|
2023.06.02 | ||||||
1刷 | 495 「step-9 ポイントライトの定数バッファーにアクセスするための変数を定義する(HLSL)」のコード 最終行 |
3刷 | 済 |
|
2023.06.02 | ||||||
1刷 | 522 「step-1 ZPrepassクラスを作成(C++)」のコード |
3刷 | 済 |
|
2023.06.02 | ||||||
1刷 | 532 「step-1 モデルをレイトレワールドに追加する(C++)」2つ目のグレーの枠内のコード |
3刷 | 済 |
|
2023.06.05 | ||||||
1刷 | 552 「17.6.1 Bottom Level Acceleration Structure(BLAS)」のNote 3~4行目 |
2刷 | 済 |
|
2022.03.08 | ||||||
2刷 | 297 「●step-12 ボケ画像書き込み用のピクセルシェーダーを実装(HLSL)」のコード 下から3行目 |
3刷 | 済 |
|
2023.06.01 |