リアルタイムグラフィックスの数学 - GLSL ではじめるシェーダプログラミング
リアルタイムグラフィックスノスウガク ジーエルエスエルデハジメルシェーダプログラミング
- 著者:
- 巴山 竜来(ハヤマ タツキ)
- 出版社:
- 技術評論社
- 出版日:
- 2022年08月31日頃
- ISBN:
- 9784297130343
- 在庫:
- 在庫あり
なぜ注目されているか
書籍紹介
本書はリアルタイムグラフィックスの基本を理解するための解説書です。
リアルタイムグラフィックス、つまり「即時に生成される」グラフィックスは
いまやゲームからビデオチャットまで広く利用されており、多くの方が目にするものになっています。
この技術の根本には数学があり、数学的知識を身につけることで、多様なグラフィックスを生み出すコードの中身、グラフィックス生成のしくみを、きちんと理解できるようになります。
ゼロからしっかり理解したいと考える方に、本書は断然おすすめです。
第 0 章 Hello World
0.1 OpenGL,WebGL,GLSL について知っておくべき最小限のこと
0.2 フラグメントカラー
0.3 ビューポート解像度とフラグメント座標
■第 1 部 アート・オブ・ノイズ
第 1 章 補間
1.1 線形補間とグラデーション
1.2 階段関数によるポスタリゼーション
1.3 極座標を使ったマッピング
第 2 章 疑似乱数
2.1 レガシー
2.2 進数表示とビット演算
2.3 ビット演算を使ったハッシュ関数
第 3 章 値ノイズ
3.1 値ノイズの構成法
3.2 グラデーションの滑らかさと微分
3.3 偏微分と勾配
第 4 章 勾配ノイズ
4.1 勾配ノイズの構成法
4.2 パーリンノイズ
第 5 章 ノイズの調理法
5.1 再帰
5.2 画像処理
■第 2 部 距離がつくりし世界
第 6 章 胞体ノイズ
6.1 第 1 近傍距離とボロノイ分割
6.2 胞体ノイズの構成
第 7 章 距離と SDF
7.1 2 次元 SDF
7.2 物差しを変える
第 8 章 3D レンダリング
8.1 天地創造
8.2 SDF 形状のレンダリング
第 9 章 SDF の調理法
9.1 モデリング
9.2 空間の操作
技書の森解説
『リアルタイムグラフィックスの数学 GLSL ではじめるシェーダプログラミング』 (巴山竜来 著、技術評論社、2022 年 8 月刊) は、その場で生成されるリアルタイムグラフィックスの根本にある数学を、GLSL のシェーダを書きながら学ぶ解説書です。版元は、多様なグラフィックスを生み出すコードの中身や生成のしくみをゼロからしっかり理解したい人に本書を勧めています。版元の著者紹介によると、巴山竜来氏は専修大学経営学部准教授で、専門は数学 (とくに複素幾何学) と、数学の CG やデジタルファブリケーションへの応用です。同じ版元から『数学から創るジェネラティブアート』も出しています。
第 0 章と 2 部 9 章の構成、補間とノイズから SDF の 3D 描画へ
第 0 章「Hello World」は、OpenGL、WebGL、GLSL について知っておくべき最小限のことと、フラグメントカラー、ビューポート解像度とフラグメント座標を押さえる導入です。第 1 部「アート・オブ・ノイズ」は第 1 章「補間」で線形補間とグラデーション、階段関数によるポスタリゼーション、極座標を使ったマッピングを扱い、第 2 章「疑似乱数」でビット演算を使ったハッシュ関数へ進みます。第 3 章「値ノイズ」と第 4 章「勾配ノイズ」ではノイズの構成法を、微分や偏微分と勾配、パーリンノイズと合わせて取り上げ、第 5 章「ノイズの調理法」で画像処理などへの応用を示します。
第 2 部「距離がつくりし世界」は、第 6 章「胞体ノイズ」で第 1 近傍距離とボロノイ分割を扱い、第 7 章「距離と SDF」で 2 次元の SDF と距離の物差しの取り替えに進みます。第 8 章「3D レンダリング」で SDF で表した形状のレンダリングを扱い、最後の第 9 章「SDF の調理法」はモデリングと空間の操作で締めくくられます。
フラグメントシェーダが画素ごとに色を決める仕組み
フラグメントシェーダは、画面の画素ひとつひとつについて、その座標から色を計算する小さなプログラムです。GPU は多数の画素を同時に処理するため、1 回の描画の中では、隣の画素の計算結果を参照したり、ある画素の結果を次の画素へ持ち越したりする書き方は基本的にできません。そのため、ばらつきのある模様を作るには、座標を入力にとって乱数のような値を返す ハッシュ関数 が欠かせません。格子点に置いた乱数を補間でつなぐのが値ノイズ、格子点に勾配を置いて滑らかさを高めるのが勾配ノイズで、つなぎ目がどれだけ滑らかかは微分で調べられます。本書の目次の補間、疑似乱数、ノイズという並びは、この積み上げと同じ順序です。
距離の考え方も、同じ画素単位の計算に乗ります。ある点から最も近い特徴点までの距離で塗り分けるとボロノイ分割になり、形状の表面までの距離を符号付きで返す関数が SDF (符号付き距離関数) です。SDF で表した 3 次元の形状は、一般に視線に沿って距離の分だけ進む反復で表面を探す方法で描画され、複数の形状を組み合わせたり空間を繰り返したりする操作も、距離の計算式を書き換えるだけで表現できます。ポリゴンのデータを用意せずに数式だけで立体を描ける点が、この手法の大きな利点です。
前提となるプログラミングと数学、頂点変換中心の入門書との違い
GLSL は C 言語 に近い書き方の言語なので、何らかの言語で関数や変数、条件分岐を書いた経験があると読み進めやすくなります。数学は補間から始まりますが、第 3 章には偏微分と勾配の節があり、高校で学ぶ範囲を超える内容にも触れます。また目次には、頂点の座標変換やポリゴンを描画するパイプラインを主題にした項目は見当たりません。3D モデルを表示するアプリケーションの描画の流れを順に学びたい人は、OpenGL や WebGL の描画パイプラインを主題にした入門書を別に選ぶ方が目的に合います。
裏返せば、シェーダで模様や質感を作るクリエイティブコーディングやジェネラティブアートに取り組む人、ゲームの演出でノイズや距離関数を使っていても中身が分からないまま調整している人にとって、ノイズの構成から SDF による 3D 描画までを数学の筋道でたどれる本書は、使っている関数を自分で組み立て直せるようになるための一冊です。コードを書き換えながら式の意味を確かめていく読み方に向いています。
言及した記事 (3 件)
この本に興味がある方におすすめ
関連する本
関連記事
機械学習 / ディープラーニング本ガイド - エンジニアが読むべき AI 技術書の選び方
機械学習の基礎から実践まで学べる技術書の選び方を紹介。「Python ではじめる機械学習」などのハンズオン本を軸に、数学が苦手な人向けの学習ルート、ディープラーニング本への進み方、ML 本の賞味期限の見極め方を解説します。
機械学習に必要な数学の本ガイド - 「どこまでやるか」で選ぶ 3 レベル
機械学習 / ディープラーニングに必要な数学を学ぶ本の選び方を 3 レベル (数式アレルギーの解消 → 機械学習で使う数学だけ → 数理を体系的に) で整理。学び直しの範囲を絞り、挫折せずに必要十分な数学を身につけるルートを解説します。
ゲームが好きならプログラミングの本も読める
ゲームの攻略本を読んだことがあるなら、プログラミングの本も読めます。攻略本とプログラミング本の共通点から、読書のハードルを下げます。
関連用語
依存グラフとは - モジュール間の依存関係を可視化する方法
依存グラフはパッケージやモジュール間の依存関係を有向グラフで表現する手法。循環依存の検出 / ビルド順序の決定 / 影響範囲分析での活用法を解説
グラフアルゴリズム
ノードとエッジで構成されるグラフ構造に対する探索 / 最短経路 / 接続性の分析アルゴリズム
グラフデータベース
ノード (エンティティ) とエッジ (関係) でデータを表現し、複雑な関係性のクエリに特化したデータベース
カナリアリリース
新バージョンを少数のユーザーに先行公開し、問題がないことを確認してから全体に展開するデプロイ手法
マテリアライズドビュー
クエリ結果を事前に計算 / 保存し、読み取り性能を向上させるデータベースの仕組み
Blue/Green デプロイ
2 つの同一環境を用意し、トラフィックを切り替えることでゼロダウンタイムデプロイを実現する手法