久々の書籍レビューです。今回はシェーディングの基礎からレイトレーシングまで学ぶことが出来る、『HLSLシェーダーの魔導書』という本について書きたいと思います。最初にいってしまうと、最高の一冊でした!
この本は去年2021年の6月に出たばかりの本ですが、この手の本の中では最高峰の出来なのではないでしょうか。知りたかった情報や、求めていた解説が体系立てられて、全てきちんと書かれている本です。専門書にありがちな小難しい、固い文章でなく、読みやすさ(ただし内容は簡単ではない)がある本としても良く出来ています。
シェーディングやレンダリングについて、基本を学びたいと思っている人はぜひ買ってください。ネットにある情報は断片的であり、有益なものもあるにせよ、やはりこの本のように順序だてて適切に分かりやすく、しかも日本人による日本語で書かれているテキスト、というのはあまりないのではないでしょうか。
(追記)本書を読むための前提として、ある程度以上のプログラミング能力は必要です。コーディング、プログラミングがそれなりに出来る人が、グラフィクスについて、学び始めるための本だと思います。
魔導書?
HLSL(High Level Shading Language)は、Unityでも使われている、シェーディング言語です。それの『魔導書』ということなのですが、この『魔導書』という言葉が、本書の実態を分かりにくくしているかもしれません。
まず、この本は魔導書ではございません!売り文句にしても、もう少し良いネーミングがなかったのかとは思いますが、この本は単純にクオリティの高い、入門書あるいは教科書になっています。
そして、注意すべきは、この本はHLSLそのものであったり、そのコーディング、文法を学ぶための本ではありません。それよりも実際のコードを示しながら、レンダリングおよびシェーディングが一体どのような処理をしているかの基礎であったり、『流れ』を学ぶための一冊だと言えます。
明確な目標を設定し、その目的のために、どういう考え方をして、それを実現するためにどういうコードを書けばいいか、という『流れ』です。
レンダリングの各工程の解説から始まり、拡散反射光や鏡面反射光、環境光というライティングの基本についての解説および、その実装の仕方・・・という風に基礎的な内容から順に追っていき、ディファード・レンダリングやポストエフェクト、レイ・トレーシングなどの応用的な内容へと発展していきます。
Unity使いとして
Unity使いであれば、その専門に関わらず読んでおくべき内容が多いです。ゲームプログラム側のコードにC++が使われているというUnity使いにとっての障壁がありますが、C#が一定以上読めるのであれば、それが問題にならないくらいには分かりやすいコードが提示されています。
筆者が組み上げたミニ・レンダリングエンジンを例にレンダリングエンジンについて学ぶパートもあります。筆者も述べていますが、Unityなどのゲームエンジンを使うとしても、レンダリング(エンジン)について学べば、ゲームエンジンをより上手く使えるようになるよ!とのことです。
Unityのスクリプタブル・レンダーパイプラインによって、レンダリングエンジンをC#で改造できるようになったので、個人的にもこの本で学んだことをUnityで活かしていきたいです。
Shader Graphへの応用
本書の中で使われている『考え方』は言葉の入れ替え、あるいは処理の置き換えが必要ではあるにせよ、それを参考にUnityのShader Graphでシェーダーを実装してみるということも可能なので、そういう役立て方も出来ます。
細かいことよりもグラフィックス周りの全体像、本質を学べるのが、この本の良い所ではないでしょうか。
例えば、0.0~1.0までの範囲の値を-1.0~1.0までの範囲に変換したい時、本書では…
というような処理をします。これはShader Graphであるなら、Remapノードを使って値の範囲を変更すれば済む話です。
こういう風に上手く翻訳していけば、この本で学んだ内容をほぼそのままにUnityで活かすことが出来ると思います。
まとめ
誤字脱字や、写真の間違いなど、いくつかのミスがあるにせよ、第一版にして、既に内容的にもほぼ決定版と言える完成度を持っていると思います。
定価5,060円ですが全然高くなく、むしろ1万円近い価値は十分にある本だと思うので、自分でシェーダーを書くつもりが無い人であっても、グラフィックス関連について基礎を学びたい、内部でどういうことをやっているのか興味がある、という方におススメです!