動機
こういうのが作りたくて、憧れて、Shaderを本気で勉強することにした。
勉強方法
前提として、シェーダーの特にUnity用のものを体系的に学ぼうとすると、ドキュメントが圧倒的に足りない。
色々失敗しながら、勉強を進めていくしかなさそうだ。
1.レンダリングパイプライン
シェーダーを学ぶにあたって、まず「レンダリングパイプライン」を学ばなければいけない気がした。
「レンダリングパイプライン」を、誤解を恐れず自分の言葉で表すと、オブジェクトを描画する一連の処理及び処理郡を実行する仕組みのこと。
安心安全のUnityジャパン公式、ということで、こちらを参考に勉強した。
この動画視聴後に勉強している資料の情報ももとに、自分なりにUnityのレンダリングパイプラインの各ステップを説明すると、以下のようになる。
1.3Dモデルを準備
前提として、Unityシェーダーは基本的に3Dモデルが必要!
2.Transformの値を4×4行列に変換
4×4行列のことをモデル行列ともいうらしい。
3.頂点ごとに描画位置を算出
モデル行列やカメラ情報などを参考に描画位置が算出される。
頂点シェーダー
4.(3点揃ったら)表裏を調べ、裏なら描画しない(カリング)
Unityでは設定変更可
5.描画点を確定(ラスタライズ)
6.描画点をデプスバッファと比較(Z Test)
描画済みの点が手前にあるなら描画しない⬅深度バッファ(Z Buffer,Depth Bufferとも)
Unityでは設定変更可
7.描画点に打つべき色を確定
テクスチャ、ライティング、シャドウ、フォグなどを考慮
フラグメントシェーダー
8.点を打つ(Z Write)
ブレンド関数を指定可
深度バッファも更新
Unityでは設定変更可
2.シェーダーの基本的な構造
最低限のシェーダーコードから、ひとつひとつ構造をみていく。
どうせ難しい部分があるのだから、おおよそわかるくらいの理解で進む。
なにか理屈があれば、記憶にも残りやすいだろうから、紐解く。
これを解読するにあたって、こちらの書籍のサンプル版を参考にした。
かなり勉強になっていて、とりあえず今日は第四章まで進めた。
自分のロゴマークをテクスチャとしてCubeに貼り付けるところまでできた。
この書籍、わかりやすいから購入を検討する...。
以上