++基礎のオススメ学習順
Unity Shader Programming Vol.01 (v.1.1.2)【PDF】 - XJINE's - BOOTH
でシェーダ・レンダリングパイプラインの仕組みと基礎文法の習得
(基礎中の基礎について書かれた書籍であるが、この基礎をちゃんと書いてくれている文書がないので、非常に貴重な資料。これを抑えておかないと他のサンプルとか読んでなんとなく分かった気になれても理解不足で学習効果が低くなる)
=>
7日間でマスターするUnityシェーダ入門 - おもちゃラボ
=>可能な限りコードを再現してパラメータを弄るなどする。
Unity Shader 勉強会 - Google スライド
=>頂点シェーダについて勉強出来る
とりあえず、基本はこれで把握できると思う
楽しい!Unityシェーダー お絵描き入門! - Google スライド
=>フラグメントシェーダでお絵かき出来ることを知れる
+++++その他
++Shaderでメソッドを定義して使用する場合、使用するメソッドは使用されるより上の行に書かれている必要がある
++float4x4みたいなマトリクスの扱い
Per-Component Math Operations - Windows applications | Microsoft Docs
++教科書的なレンダリングパイプラインの解説
https://web.wakayama-u.ac.jp/~tokoi/lecture/gg/ggbook03.pdf
++配列の記法
shader 配列の文法 - イラスト、モデリング、Unity、VR関連
++ヘルパー関数・セマンティクスなどのUnityの機能
ビルトインシェーダーヘルパー機能 - Unity マニュアル
UnityObjectToClipPosなど
ビルトインのシェーダー include ファイル - Unity マニュアル
セマンティクスやappdataの内容など
プロパティ
Cg/HLSL でシェーダープロパティーを参照する - Unity マニュアル
Shader Code - Unify Community Wiki
cgincのコード
Unity-Built-in-Shaders/UnityCG.cginc at master · TwoTailsGames/Unity-Built-in-Shaders · GitHub
++UsePass
ShaderLab: UsePass - Unity マニュアル
importするみたく、他のシェーダを使える
++レンダリングパイプラインの概要
++座標空間について
ShaderLab 定義済みの値と座標空間とその変換について - イラスト、モデリング、Unity、VR関連
行列、MvpMatrix(モデル行列、ビュー行列、プロジェクション行列)について | whaison.jugem.jp
++数学関連
行列とは?行列の足し算・引き算・かけ算とその有用性【3次元以上のデータを一括計算する知恵】 | アタリマエ!
外積とは何か。ベクトルの外積の定義・意味・大きさについて | アタリマエ!
【内積とは】ベクトルの内積の意味や公式・計算方法を知って大学合格へ! | Studyplus(スタディプラス)
知っておくべき特殊な行列と便利な性質 (大学学部生の方にもおすすめ) - HELLO CYBERNETICS
++三次元の回転行列
HLSLではfloat3x3のように行列を表す。
float3x3 rotate = float3x3(1,0,0,0,cos(angle),-sin(angle),0,sin(angle),cos(angle));
X軸での回転行列ならこのようになる
++基礎的なShaderの文法の解説が比較的詳しい
Unity シェーダーチュートリアル 基本とサーフェースシェーダー – Tsumiki Tech Times|積木製作
++サンプル数が多く、解説まである
7日間でマスターするUnityシェーダ入門 - おもちゃラボ
++サンプル数は多いが、解説がないので自力で理解する必要がある
https://www.shadertoy.com/browse
すごいシェーダがたくさん投稿されているが、GLSL
とりあえず、以下を読んでおけばちょっと読めるようになる
(シェーダ†入門† | 東京工業大学デジタル創作同好会traP
ShaderToyで座標を変換して円を描くところまでを簡単な解説を交えてやってみる – 3DCG ストラグル!
=>まとめたもの:
GLSLの文法 - イラスト、モデリング、Unity、VR関連
++レイマーチング、特に分かりやすかったサイト
[GLSL] レイマーチング入門 vol.1 - Qiita
++レイマーチング・距離関数
GLSL Graphics Compo向けのレイマーチング向けのチュートリアルです
[SphereTracing:領域操作関数]ハニカム構造 - Qiita
GLSL でのレイマーチングについて雑に語ってみます - Qiita
[GLSL] レイマーチング入門 vol.1 - Qiita
Unity でオブジェクトスペースの Raymarching をフォワードレンダリングでやってみた - 凹みTips
Unity で Command Buffer を使って Raymarching をしてみた - 凹みTips
Unity でオブジェクトスペースのレイマーチをやってみた - 凹みTips
距離関数のfold(折りたたみ)による形状設計 | gam0022.net
正解するカドの「カド」をレイマーチングでリアルタイム描画する | gam0022.net
++距離関数リスト
Inigo Quilez :: fractals, computer graphics, mathematics, shaders, demoscene and more
++Fog
フォグは生成されたピクセルの色を、カメラからの距離にもとづいた一定のカラーに向けて、ブレンドします。フォグにより、ブレンドされたピクセルのアルファ値は修正せず、RGB のみ変更します。
ShaderLab: 古い Fog - Unity マニュアル
++Pass
Passブロックごとに1回レンダリングされる
++G-Buffer
Deferred Shadingについてまとめてみた - しゅみぷろ
++コマンドバッファ・GrabPass
ShaderLab: GrabPass - Unity マニュアル
Unity 5 の CommandBuffer を利用したレンダリングパイプラインの拡張について調べてみた - 凹みTips
【Unity】【シェーダ】GrabPassの説明とシェーダの実装例 - LIGHT11
ShaderLab: GrabPass - Unity マニュアル
ざっくりいうと、任意の時点でのレンダリング結果、つまり画面に映ってる画像をテクスチャとして取得しシェーダで扱えるようになる、らしい。
++Grabpass
【Unity】【シェーダ】GrabPassを使って屈折シェーダを作る - LIGHT11
Unity 5 の CommandBuffer を利用したレンダリングパイプラインの拡張について調べてみた - 凹みTips
++法線マップと接空間
[Unity] バンプマッピング(法線マッピング)をやってみる - Qiita
++ステンシルバッファ
++SurfaceShader
入力は、サーフェスシェーダーの input 構造体に
出力は、SurfaceOutputに
++裏と表で別テクスチャを張る方法
【Unity】ポリゴンの裏表で描画を変える - 7080 + 1
surfaceshaderで表裏で違うテクスチャーを貼る – TAKOYAKI (山神廉弥のブログ)
++vertex/fragment shader
Unityシェーダーチュートリアル Vertex/Fragment Shader の基本 – Tsumiki Tech Times|積木製作
++公式ドキュメント(初心者には優しくない
SurfaceOutputなどについて
pragmaについての解説
頂点シェーダーとフラグメントシェーダーのプログラミング - Unity マニュアル
++ジオメトリシェーダ
【Unity】【シェーダ】スクリーンに対してテクスチャをマッピングする方法を完全解説する - LIGHT11
++デブスバッファ
【Unityシェーダ入門】デプスバッファの内容を表示する - おもちゃラボ
++カスタムレンダーテクスチャ
CustomRenderTextureを使って波紋エフェクトを作る - e.blog
シェーダでレンダリングを行い、それをテクスチャとして使えるようになる、という代物。GrabPassっぽい
++Math系のメソッド
組み込み関数 (DirectX HLSL) | Microsoft Docs
++inout記法について
void surf (Input IN, inout SurfaceOutput o)
引数の先頭につけられる、in,out,inoutはそれが入力・出力となる変数であることを表してる。inoutならその変数は入力であると同時に出力・返り値(returnした場合の)となる。見かけ上、参照渡しと同じ
++Unityにおける正規化されたスクリーンのポジションの取得
SV_POSITION をつけた vertex はフラグメントシェーダでは [0, 1] の範囲の値ではなく、ビューポートの座標として渡ってきます(例えば (640, 480))。それに対し、TEXCOORD0 をつけた screenPos の方は、ラスタライザを経由して [0, 1] のスクリーン座標として渡ってきています。
Unity でオブジェクトスペースのレイマーチをやってみた - 凹みTips
++#include
シェーダファイルの取り込み、分割
【Unity】【シェーダ】シェーダでcgincファイルをインクルードして使う - LIGHT11
Cgのincludeはインライン展開として機能するっぽい
++uniform
uniformはvert関数/frag関数で自由に使える変数。
uniformはPropertiesで定義した変数をvert関数/frag関数でアクセスできるようにするやつ。
uniformで定義することでスクリプトから変数を制御することができるようになる。
頂点やピクセル毎の変数ではなく、マテリアル毎の変数となる。
++投影テクスチャマッピングの仕組み
Grabpassなど
Unityで投影テクスチャマッピングを実装する際に抑えておくべき基礎情報 - 土屋つかさの技術ブログは今か無しか
【Unity】【シェーダ】スクリーンに対してテクスチャをマッピングする方法を完全解説する - LIGHT11
++その他
【Unity入門】Shaderってなんだ?誰でもわかるシェーダー解説! | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト
Unity のシェーダの基礎を勉強してみたのでやる気出してまとめてみた - 凹みTips
Unity - マニュアル: ShaderLab 定義済みの値
Shader 勉強メモ 「サンプルを理解する2」 - Unity Days
Unity Shader 勉強会 - Google スライド
【Unity】【シェーダ】Unityシェーダチートシート - LIGHT11
++有料書籍
Unity Shader Programming Vol.01 (v.1.1.2)【PDF】 - XJINE's - BOOTH
=>買う価値あり。というか、サイト巡りするより、素直にこれ一冊買うのが時間を無駄にしないと思われる