知り合いに聞かれたので自分が参考にしたやつをまとめます。本といいつつ、本はほぼないです。
凹みTips
Unityのシェーダ、グラフィック、レンダリングに関して、素晴らしい記事がとても多いです。
Unity のシェーダの基礎を勉強してみたのでやる気出してまとめてみた - 凹みTips
http://tips.hecomi.com/entry/2014/03/16/233943
の記事から時間とともに技術レベルが上っていくので、記事を1つずつ見ていくととても勉強になります。
テラシュールブログ
みんな大好きテラシュール、Unityを学ぶ上で死ぬほど参考になります。
シェーダ関連だと記事は少ないですが、グラフィック関連だとライティングやポストエフェクト等の実用的なUnityの機能紹介とノウハウ共有が多いのが特徴です。
シェーダを自分で書く理由は 自分の表現したいビジュアルを出すこと であるはずなので、このためには Unityの既存機能を理解して美しく見せる技術 も同時に必要になります。シェーダを書かずに美しく見せる技術がないなら、シェーダを書いても美しくなることはありません。
また、シェーダ自体はただのプログラムなのでそれがどう使われるか(=Unityの内部的な仕組み)を理解していることはとても重要です。実用上の観点から考えると、UnityのシェーダではUnity特有の変数と関数(ビルトインの変数、関数、マクロ)を使うことが多いですが、これらはUnityの機能をそもそも理解していることが前提になります。
Unity Shaders and Effects Cookbook
英語本です。シェーダの仕組み、書き方、表現方法を網羅的に扱っていて、自分でコードを書きながら学んでいけます。教科書としては一番いい本ではないでしょうか。
Unityの情報的には古い本なのと、サンプルコードのところどころに不具合が見受けられるのがあれですが、、
Unity 5.xの新板もあります。
公式リファレンス
見づらすぎるので入門としてはオススメできません が、シェーダに慣れてきたら一通り目を通すと良いです。
ビルトインシェーダ
Unityはビルトインシェーダのソースコードを公開しています。
Standard Shaderのコードを全て読めば、PBRの仕組みやUnityの内部的な仕様(reflection probeって結局なにやってるの?とか)をほぼ把握できます。実用的には、uGUIの改造が役に立つことが多いです。
余談ですが、自分がStandard Shaderのコードを読み始めたのは「Shader Forgeが生成するPBRのシェーダとStandard Shaderの見栄えが微妙に違う」とデザイナーさんから言われて調べたのがきっかけです。あまりポジティブな理由ではないという・・・
Shader Forge
シェーダをノードベースで作るやつです。変数などが自動生成されるのでエンジニア的には辛いやつですが、アーティストから見た機能がコード上でどう表現されるかがわかります。
コード自体はパフォーマンス的によろしくない(特にPBRは)ので、最終的には手で最適化したほうが良いです。
OpenGL Wiki
Unityやシェーダ以前の話として レンダリングの仕組みを理解すること は非常に重要です。fragment/vertex shaderを書くことに慣れたらrendering pipelineあたりを読んでおくと良いです。GPUとGraphics APIの仕組みを学ぶことで、シェーダの呪術的な文法の意味が理解できるようになります。
UnityShader 入門
内容がほとんど入門ではないですが、、入門コンテンツはとても参考になります。
1から始めるUnityShader(全6回) - UnityShader 入門
http://unityshader.hatenablog.com/entry/2017/02/25/110446
primitive: blog
入門ではありませんが、強いモチベーションをもらえます。
シェーダをある程度扱えるようになると 何を作ったらいいかわからない 状態になります(シェーダにかぎらずプログラミング初心者全般に言えますが・・・)。
具体的には
- 役に立つ
- 見た目がかっこいい
- 技術的にすごい
このうち2個くらいは満たしていないとモチベーションが出ません。こういう時には 今の技術力でできなさそうなこと をやってみましょう。続けていればそのうちできるようになります。
その他
Unity Graphics Programming
初心者向けではないので、初心者を脱したら読むのが良いです。
7日間でマスターするUnityシェーダ入門
ものすごくよくまとめられています。 これだけ読んでおけば良い気がする。
wgld.org
HLSLではありませんが、情報が網羅的にまとめられています。