LoginSignup
2
4

More than 5 years have passed since last update.

ShaderLab理解 コード追っかけてみた

Last updated at Posted at 2017-10-24

今回の目的
・どのように動作しているか流れを追う
・前回の内容をさらに細かく
 https://qiita.com/moca_uni/items/edd66190168994e58c89

環境
・Unity5.4
・Windows

※Unity ShaderLab Cg/HLSLを想定
自分なりに構造理解(間違っていたら指摘ください)

初期準備

①Unityからビルドインシェーダーを取得する
<Unity公式>
https://unity3d.com/jp/get-unity/download/archive

②取得したシェーダー内の以下のファイルのみUnityプロジェクトに入れる
 →builtin_shaders-5.4.4f1\DefaultResourcesExtra\UI

③UI-Default.shaderを開く

構造体

①struct部
・ユーザーが定義した構造体「appdata_t」に値が入る
・POSITION:ワールド座標、COLOR:色、TEXCOORD0:UV値が自動で入ってくる
 →これ最初わからなかった・・・
 ※UV値は画像の大きさに関係なく0~1の範囲、U(横軸)、V(縦軸)で値が入ってくる

②vertex部(v2f vert(appdata_t IN))
・ここでは取得した情報の加工を行う
 →何もしない場合はそのままフラグメントへ渡す変数「v2f OUT」にそのままの値を渡せばいい
 ※少しずらす場合は「OUT.texcoord.x = IN.texcoord.x + 0.1;」を「OUT.texcoord = IN.texcoord;」の後に追記する

③フラグメント部(fixed4 frag(v2f IN) : SV_Target)
・座標を変更した情報を元に着色するところ、今回は以下のコードを記述
 → return tex2D(_MainTex, IN.texcoord);
  →vertex部で加工したOUT.texcoordのピクセルを取得して、そのピクセルの色をreturnで確定

まとめ

・構造体で取得する値を決めて
・vertex部で座標を加工(移動・回転・拡縮)等して形を決めて
・fragment部で色の付け方を決める
・今回の場合「appdata_t→vert(appdata_t IN)→v2f→frag(v2f IN)→return」になっていた
※vertex部/fragment部の細かい内容は後でやる

最後に

・Shader本冬コミとかに出したい

お世話になった書籍・サイト
<Unityシェーダープログラミングの教科書 ShaderLab言語解説編>超オススメ!!
https://s-games.booth.pm/items/660001
<サイト>
https://qiita.com/sune2/items/fa5d50d9ea9bd48761b2

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4