見出し画像

『リアルタイムグラフィックスの数学』はこんな本です

8月31日に2冊目の単著『リアルタイムグラフィックスの数学:GLSLではじめるシェーダプログラミング』が発売されます!目次や内容の一部は出版社のサイトで見ることができます.

この本がどんな本なのかということについて,著者から紹介をします.

どんな本?

この本はCG(コンピュータグラフィックス)の一分野であるリアルタイムグラフィックスの技術を数学的な観点から解説する本です.リアルタイムグラフィックスでは高速な計算処理が必要となりますが,これを可能とするのがGPUであり,GPU上で走るプログラムをシェーダと呼びます.シェーダプログラミングで使われるプログラミング言語GLSLを使い,グラフィックスの数学的な仕組みを学びつつ,実装します.
前著『数学から創るジェネラティブアート』(以下,「数ジェネ」)はどちらかというと「数学→CG」という方向性の本であり,数学的な題材をどう可視化するのか,ということが書かれた本でした.一方,今回の本は逆に「CG→数学」の方向性であり,CGの技術を数学的に理解することを目的としています.数ジェネの発展的な位置づけではあるものの,内容は独立しているので,この本だけ単独で読むことができます.

この本で扱う内容

「リアルタイムグラフィックス」という言葉が指す範囲は広く,この本ではそのすべてを網羅的に扱うわけではありません.例えば,『リアルタイムレンダリング』のような重厚な本を期待されている方には,残念ながらご期待に添えないことをお断りしておきます.この本は,ノイズSDF(符号付き距離関数)という2つの題材に焦点を当てた,150ページ弱の入門者向け技術解説書です.現在のところ,日本の出版社から出た書籍でこの題材を詳しく扱ったものは,洋書翻訳のいくつかのCG専門書を除いてありません.

ノイズとSDF

ノイズとSDFという2つの題材は,前著の数ジェネからの流れの上にあります.これらはプロシージャルグラフィックスというCGの技法ですが,とくにジェネラティブアートやシェーダ芸と呼ばれるような領域では頻繁に使われます.ノイズはテクスチャ生成からVFX効果など様々な場面で使われており,いわゆる「ジェネ」的表現で多用されています.またSDFは主に3Dグラフィックスに使われる関数で,この関数1つで3D形状を滑らかに操ることができます.
ノイズ関数もSDFも,単に値を入れると値が出てくる数学的な関数にすぎないのですが,数学に関する仕事をしている私からすると,非常に奇妙で「よく分からない」関数でした.ノイズとSDFに関する解説記事は,ネットを検索すると山のように出てきますが,基本的に「使う視点」で書かれたものが多く,なぜこういう風に定義するとうまくいくのか,という私なりの納得を得ることはできませんでした.そういった私の理解不足やページ数の制限から,数ジェネはタイトルで「ジェネラティブアート」と謳っておきながら,そのスイートスポットとでもいうべきノイズや,SDFはおろか3D表現にも触れられなかったのです.この本を書いたそもそもの動機は,これらを自分自身で納得のいくよう数学的に理解できる本を書きたかった,というところにあります.ですので,これは数学者が書いたニッチな領域のCGの本であり,CGの専門家や制作現場の技術者が書いた一般的なCGの本ではないということに注意してください.
ノイズやSDFは古典的な技術であり,その元となる論文は80年代や90年代まで遡ることができます.またGLSLも非常に古臭いプログラミング言語です.しかしながら2022年の今もVFXやWebGLコンテンツ,インタラクション生成など様々な領域で活用されています.中身をゼロから理解して実装することで,「サンプルをコピペして使う」ところから一歩先の表現に到達することができます.

本を読むための準備と難易度

GLSLはC言語に似た言語であり,GPUプログラミング特有の分かりにくさがあるので,全くのプログラミング初心者には難しいかもしれません.かといって,バリバリ分かっている技術者向けの本でもありません.PythonやJavaScriptのような一般的なプログラミング言語の基礎を知っている程度の知識を仮定しています.開発環境としてVSCodeを使うので,コードエディタの基本的な使い方は理解している方が好ましいです.
技術書でありながらも,数学的な要素の強い本なので,数学についてある程度の知識があるとスムーズに読めます.おおよそ高校2年生までに習う程度の数学,具体的にはベクトル,微分,三角関数の基本について,ちょっと復習すれば思い出せる程度の知識を仮定しています.数ジェネを読んだ方ならば,その続編として読める本となっております.

既存文献との関連

ノイズやSDFのGLSL実装に関しては,The Book of Shadersiqのwebサイトなど,すでに定番の解説記事がいくつかあります.こういった文献をすでによく理解している方にとっては,本書で扱うトピックスはよく見知った内容であるように感じるかもしれません.しかしこの本では,それらについて数学的に深堀して書いているとともに,GLSL ES 3.0に準拠して新たに実装しています.シェーダに関する多くの解説記事ではGLSL ES 1.0に準拠したものが多いですが,1.0と3.0は機能やコードの書き方に大きな違いがあります.顕著な例の1つは,3.0ではビット演算が使用できるということです.例えば,乱数生成で使うハッシュ関数は,ビット演算を使うことによって,よりスマートに構成することができます.なおGLSL ES 3.0はOpenGL 4.3 / OpenGL ES 3.0 / WebGL 2.0以降のヴァージョンに対応しています.

この記事が気に入ったらサポートをしてみませんか?