Shader学习——自定义结构体的使用

2019-08-16  本文已影响0人  BacteriumFox
  1. 每个顶点着色器的输入输出需要有对应的结构体,方便把输出的结构传入片元着色器操作
  2. 结构体除自己定义以外,还可以引入UnityShader库 #include "UnityCG.cginc,在库中有unity方便开发者定义的一些常用结构类型,我们可以拿来直接使用
Shader "Unlit/003"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _Color("Color",Color) = (1,1,1,1)
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            //引入unityShader库
            //#include "UnityCG.cginc"
           
           //只有在CGPROGRAM内再次定义一个与属性块内名字与类型相同的变量,属性块对应的变量才能起作用
           fixed4 _Color;


           //定义输入结构体
           struct a2v//a application dao vert
           {    
                float4 vertex:POSITION;//用模型顶点填充V变量
                float3 normal:NORMAL;//用模型的法线填充n变量
                float4 texcoord:TEXCOORD;//用模型的第一套UV填充texcoord
           };

           //定义输出结构体
           struct v2f// v vert dao frag
           {
                float4 pos:SV_POSITION;//SV_POSITION 语义告诉Unity :pos 为裁剪空间中的位置信息
                fixed3 color:COLOR;//COLORO 语义可以储存颜色信息
           };
           
           //使用UnityShader库里预制结构体
           //v2f vert(appdata_full v)
           v2f vert(a2v v)
           {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                //将【-1,1】转变成【0,1】的常用方法 x/2+0.5
                o.color = v.normal * 0.5+fixed3(0.5,0.5,0.5);
                return o;
           }

           fixed4 frag(v2f i):SV_Target
           {
                fixed3 c= i.color;
                //.xyzw .rgb .x .y .xw
                c*=_Color.rgb;
                return fixed4(c,1);
           }

            ENDCG
        }
    }
}

上一篇 下一篇

猜你喜欢

热点阅读