VertexShader入門 - saitocastel1900/UnityShader GitHub Wiki

スクリーンショット 2023-07-23 022005

  • Vert(頂点情報を処理)=>Surf(オブジェクトの色を変える)=>Lighting(ライティング)
  • v2fという構造体を定義。vertex to fragment の略
  • vertexで処理したものをfragmentに渡す
  • SV_POSITIONはセマンティックと呼ばれ、その変数が何に使われるかを示す。ここでは、Screen空間に変換されたオブジェクトの頂点座標
struct v2f
            {
                float4 pos : SV_POSITION;
            };
  • 引数に頂点の情報が入ってくる。
struct appdata_base {
    float4 vertex : POSITION;
    float3 normal : NORMAL;
    float4 texcoord : TEXCOORD0;
    UNITY_VERTEX_INPUT_INSTANCE_ID
};
  • 「o.pos = UnityObjectToClipPos(v.vertex);」で、3Dの座標を2Dのスクリーン座標に直している。
  • あとは、定義v2f(スクリーン座標)として返す。
 v2f vert(appdata_base v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                return o;
            }
  • COLORは出力する画面の色。明示的に色を返すことを示している。最近SV_Targetになった。
  • CGPROGRAMはここから書きますよみたいな宣言。
Shader "Custom/Chapter01"
{
    //shaderを書くところ(複数行かける)
    SubShader
    {
       //shaderの中身
        Pass
        {
            Tags
            {
                "RenderType"="Opaque"
            }
            LOD 100
            
            CGPROGRAM
            //vertxt と fragmentの関数。勝手に呼び出される。
            #pragma vertex vert;
            #pragma fragment frag;
            //便利な関数詰め合わせ
            #include "UnityCG.cginc"

            struct v2f
            {
                float4 pos : SV_POSITION;
            };

            v2f vert(appdata_base v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                return o;
            }

            half4 frag(v2f i) : COLOR
            {
                return half4(1, 0, 0, 1);
            }
            ENDCG
        }
    }
}