Shader 结构解析


// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'

Shader "TYC/Text01"  //shader 的名字 
{
    Properties //材质参数面板
    {
        _Float("Float",Float) = 0.0 //变量名字("外面显示的文本",变量的类型)= 默认值
        _Range("Range",Range(0,1)) = 0 //Range(min,max) 范围值   Vector 4维参数   Color 颜色  2D 贴图类型
        _Vector("Vector",Vector) = (1,1,1,1)
        _Color("Color",Color) = (0,0,1,1)
        _Texture("Texture",2D) = "black"{}
    }
        
    SubShader
    {//模型数据 -> 顶点shader -> 图元装配及光栅化 -> 片段shader -> 合并输出

        Pass{
            CGPROGRAM //CGPROGRAM ENDCG 之间是CG代码
            #pragma vertex vert //指定一个叫vert的顶点shader 
            #pragma fragment frag //指定一个叫frag的片元shader
            #include"UnityCG.cginc" //通过unity头文件获取数据
            
            struct appdata { //通过结构体向CPU 获取的输入数据
                float4 vertex : POSITION;// :POSITION 表示模型的顶点坐标  vertex是外面定义的变量的名字
                float2 uv: TEXCOORD0;   // :TEXCOORD0 :TEXCOORD1 :TEXCOORD2 :TEXCOORD3 uv 
                float3 normal : NORMAL; // :NORMAL 法线
                float color : COLOR; // :COLOR 顶点颜色
            };

            struct v2f { //向GPU 输出的类型的定义
                float4 pos : SV_POSITION;  //输出的顶点(在裁剪空间)
                float2 uv : TEXCOORD0; //通用 储存器 插值器  TEXCOORD0 ~ TEXCOORD15
            };
            float4 _Color;
            sampler2D _Texture;
            float4 _Texture_ST; // 关联 _Texture 的 Tilling(xy)  Offset(zw)

            //顶点shader
            // CPU输出类的型 顶点shader名字(获取的输入数据的结构 自定义名字) 
            v2f vert(appdata v) { 
                //获取数据->输出一个数据
                //顶点shader 的 工作内容  : 模型空间->世界空间->相机空间->裁剪空间
                v2f o;
                //矩阵乘法实现坐标系转换
                //float4 pos_word = mul(unity_ObjectToWorld, v.vertex);//模型空间->世界空间
                //float4 pos_view = mul(UNITY_MATRIX_V , pos_word);//世界空间->相机空间
                //float4 pos_clip = mul(UNITY_MATRIX_P, pos_view);//相机空间->裁剪空间
                //o.pos = pos_clip;//赋值
                o.pos = UnityObjectToClipPos(v.vertex); //模型空间 -> 裁剪空间
                o.uv = v.uv * _Texture_ST.xy + _Texture_ST.zw;
                return o;
            }


            //片元shader
            //返回的颜色值 片元shader名字(裁减控制的位置 i) :SV_Target 渲染的目标
            half4 frag(v2f i) :SV_Target
            {
                //float - 32位 坐标点
                    //half - 16位 UV、大部分向量
                        //fixed - 8位 颜色
                fixed col = tex2D(_Texture,i.uv);
                return col;
            }
            ENDCG
        }
    }
}

你可能感兴趣的:(Shader 结构解析)