顶点着色器和片段着色器

6 阅读1分钟

顶点着色器代码

{
    Properties    //2.定义了shader的属性
    {
        _Color ("Color", Color) = (1,1,1,1) 
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
        _Glossiness ("Smoothness", Range(0,1)) = 0.5
        _Metallic ("Metallic", Range(0,1)) = 0.0
    }
    SubShader   //3.pass的容器
    {
        Pass   //4.定义了使用哪一张显卡来渲染图像
        { 
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            float4 vert(float4 vertex : POSITION) : SV_POSITION
            {
                return UnityObjectToClipPos(vertex);
            }
            fixed4 frag() : SV_TARGET
            {
                return fixed4(1,0,0,1);
            }

            ENDCG
        }
    }
    FallBack "Diffuse"
}

顶点着色器指的是vert函数,包含了输入语义、输出语义。该函数执行了三件事:
1.shader会通知Unity,将模型的顶点坐标作为输入,并存储到变量v中。
2.利用函数UnityObjectToClipPos(vertex)将模型的顶点坐标转换到裁剪坐标空间。
3.通知Unity,输出裁剪空间中的顶点坐标。
片段着色器指的是frag函数,会通知Unity,将用户的输出颜色存储到渲染目标中,即屏幕。