ShaderLab理解 コード追っかけてみた
今回の目的
・どのように動作しているか流れを追う
・前回の内容をさらに細かく
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
Author And Source
この問題について(ShaderLab理解 コード追っかけてみた), 我々は、より多くの情報をここで見つけました https://qiita.com/moca_uni/items/29232d72d7525ab62446著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .