天天看点

Shader基础《九》 基本的顶点片元着色器

 欢迎加入Unity业内qq交流群:956187480

一个简单的顶点/片元着色器 

Shader基础《九》 基本的顶点片元着色器
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'


Shader "a幻世界/顶点片元着色器"
{
    //暴露在外面的属性栏
    Properties{
    //声明一个color属性
    _Color("Color",Color) = (1,1,1,1)
    }
    //针对显卡a的shubshader
    SubShader{
                Pass{
                    //设置渲染状态和标签
                    
                    //开始CG代码片段
                    CGPROGRAM
                    #pragma vertex vert
                    #pragma fragment frag
                    //为了在cg代码段访问_Color属性,我们必须在这里定义一个跟Properties里面相对应的变量,名称和类型必须一致
                    float4 _Color;
                    //使用一个结构体来定义顶点着色器的输入
                    struct a2v {
                            float4 pos:POSITION;//用模型空间的顶点填充pos变量
                            float4 color:COLOR0;//用模型空间的颜色填充color
                            float4 normal:NORMAL;//用模型的法线方向填充normal变量
                            float4 texcoord:TEXCOORD0;//用模型的第一套纹理坐标填充texcoord变量

                        };
                    //使用一个结构体来定义顶点着色器的输出,在顶点着色器跟片元着色器之间传递信息
                    struct v2f {
                            float4 pos:SV_POSITION;//SV_POSITION语义告诉unity,pos里面包含了顶点在裁剪空间里的位置信息
                            float4 color:COLOR0;//COLOR0语义存储颜色信息
                        };
                    //写一个输出模型空间信息输出裁剪空间信息的函数
                    v2f vert(a2v v) {
                        v2f o;//创建一个顶点着色器输出的结构体
                        o.pos = UnityObjectToClipPos(v.pos);//把模型空间的顶点位置转换到裁剪空间的位置
                        o.color = v.normal*0.5f + fixed4(0.5, 0.5, 0.5,0.5);//把模型空间的法线方向分量[-1,1]映射到裁剪空间传递给片元着色器
                        return o;
                    }
                    //片元着色器接收到顶点信息后通过插值把颜色渲染到屏幕上
                    float4 frag(v2f i):SV_Target{
                        float4 c = i.color;
                        c *= _Color.rgba;
                        return fixed4(c);
                    }
                    ENDCG
                }
                //其他需要的pass
    }
        
        Fallback "Diffuse"
}