Unity---表面着色器

【千锋合集】史上最全Unity3D全套教程|匠心之作_哔哩哔哩_bilibili

Unity---表面着色器_第1张图片

Unity---表面着色器_第2张图片

Unity---表面着色器_第3张图片

Shader "MyShader/Surface/Surface001" {
    Properties {

 float number=10;
        float2 pos=float2(0.3,0.5);//相当于unity中vector2
        float3 vector3=float3(1,1,1);//相当于unity中vector3
        float4 vector4=float4(0,0,1,1);//相当于unity中vector4

        half2 h2=half2(1,1);
        half3 h3=half3(1,1,3);

        fixed a=0.1;
        fixed3 color=fixed3(1,1,1);

        bool2 bl2=bool2(false,true);
        //纹理
        sampler2D tex;        
    }
    //表明着色器中不需要添加Pass通道
    SubShader {
        CGPROGRAM //------CGPROGRAM的开始------
        #pragma surface surf Lambert //表面着色器 函数名 光照模型
        struct Input{
            //定义输入颜色
            float4 color:COLOR;
        };//必须加分号
        void surf(Input IN,inout SurfaceOutput o)
        {
            //设置输出RGB
            o.Albedo=float3(1,1,0);
        
        }
        ENDCG//------CG语言的结束------
    }
}

Unity---表面着色器_第4张图片

Unity---表面着色器_第5张图片

Unity---表面着色器_第6张图片

Unity---表面着色器_第7张图片

Shader "MyShader/Surface/Surface002" {
    Properties {
        _DiffuseColor("漫反射颜色",Color)=(1,0,0,1)
    }
    //表明着色器中不需要添加Pass通道
    SubShader {
        CGPROGRAM //------CGPROGRAM的开始------
        #pragma surface surf Lambert alpha //表面着色器 函数名 光照模型 特殊设置
        //声明属性变量
        fixed4 _DiffuseColor;
        struct Input{
            //定义输入颜色
            float4 color:COLOR;
        };//必须加分号
        void surf(Input IN,inout SurfaceOutput o)
        {
            //设置输出RGB
            //o.Albedo=IN.color
            o.Albedo=_DiffuseColor.rgb;        
            //设置输出的Alpha
            o.Alpha=_DiffuseColor.a;
        }
        ENDCG//------CG语言的结束------
    }
}

Shader "MyShader/Surface/Surface003" {
    Properties {
        _DiffuseColor("漫反射颜色",Color)=(1,0,0,1)
        _MainTex("纹理图片",2D)=""{}
    }
    //表明着色器中不需要添加Pass通道
    SubShader {
        CGPROGRAM //------CGPROGRAM的开始------
        #pragma surface surf Lambert //表面着色器 函数名 光照模型 特殊设置
        //声明属性变量
        fixed4 _DiffuseColor;
        sampler2D _MainTex;
        struct Input{
            //定义图片的uv坐标***uv_图片类型
            fixed2 uv_MainTex;
            //定义输入颜色
            float4 color:COLOR;
        };//必须加分号
        void surf(Input IN,inout SurfaceOutput o)
        {
            //通过uv坐标查找纹理图片所对应的颜色值,赋给albedo
            o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;
            //叠加颜色值
            o.Albedo*=_DiffuseColor.rgb*2;
        }
        ENDCG//------CG语言的结束------
    }
}
 

Shader "MyShader/Surface/Surface004" {
    Properties {
        _MainTex("纹理图片",2D)=""{}
        _BumpMap("法线贴图",2D)=""{}
        _MainCol("颜色",Color)=(1,1,1,1)
    }
    //表明着色器中不需要添加Pass通道
    SubShader {
        CGPROGRAM //------CGPROGRAM的开始------
        #pragma surface surf Lambert //表面着色器 函数名 光照模型 特殊设置
        //声明属性变量
        sampler2D _MainTex;
        sampler2D _BumpMap;

        fixed4 _MainCol;
        struct Input{
            //定义图片的uv坐标***uv_图片类型
            fixed2 uv_MainTex;
            //定义法线贴图的uv坐标
            fixed2 uv_BumpMap;
        };//必须加分号
        void surf(Input IN,inout SurfaceOutput o)
        {
            //通过uv坐标查找纹理图片所对应的颜色值,赋给albedo
            o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;
            o.Albedo+=_MainCol.rgb;
            //通过法线贴图的uv坐标查找法线贴图所对应的颜色值,赋给albedo
            o.Normal=UnpackNormal(tex2D(_BumpMap,IN.uv_BumpMap));
            
        }
        ENDCG//------CG语言的结束------
    }
}

Unity---表面着色器_第8张图片

 Unity---表面着色器_第9张图片

Shader "MyShader/Surface/Surface005" {
    Properties {
        _MainTex("纹理图片",2D)=""{}
        _BumpMap("法线贴图",2D)=""{}
        _MainCol("颜色",Color)=(1,1,1,1)
        _RimCol("发光颜色",Color)=(1,1,1,1)
        _Rim("放光强度",Range(0,10))=0.5
    }
    //表明着色器中不需要添加Pass通道
    SubShader {
        CGPROGRAM //------CGPROGRAM的开始------
        #pragma surface surf Lambert //表面着色器 函数名 光照模型 特殊设置
        //声明属性变量
        sampler2D _MainTex;
        sampler2D _BumpMap;
        fixed4 _RimCol;
        fixed4 _MainCol;
        half _Rim;


        struct Input{
            //定义图片的uv坐标***uv_图片类型
            fixed2 uv_MainTex;
            //定义法线贴图的uv坐标
            fixed2 uv_BumpMap;
            //视图方向【顶点指向观察者的方向向量】
            half3 viewDir;


        };//必须加分号
        void surf(Input IN,inout SurfaceOutput o)
        {
            //通过uv坐标查找纹理图片所对应的颜色值,赋给albedo
            o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;
            //求发光系数
            half rimPower= 1-saturate(dot(normalize(IN.viewDir),normalize(o.Normal)));
            //通过发光系数进行自发光
            o.Emission=_RimCol*rimPower*_Rim;
        }
        ENDCG//------CG语言的结束------
    }
}

Unity---表面着色器_第10张图片

Shader "MyShader/Surface/Surface005" {
    Properties {
        _MainTex("纹理图片",2D)=""{}
        _BumpMap("法线贴图",2D)=""{}
        _MainCol("颜色",Color)=(1,1,1,1)
        _RimCol("发光颜色",Color)=(1,1,1,1)
        _Rim("放光强度",Range(0,10))=0.5
    }
    //表明着色器中不需要添加Pass通道
    SubShader {
        CGPROGRAM //------CGPROGRAM的开始------
        #pragma surface surf Lambert //表面着色器 函数名 光照模型 特殊设置
        //声明属性变量
        sampler2D _MainTex;
        sampler2D _BumpMap;
        fixed4 _RimCol;
        fixed4 _MainCol;
        half _Rim;


        struct Input{
            //定义图片的uv坐标***uv_图片类型
            fixed2 uv_MainTex;
            //定义法线贴图的uv坐标
            fixed2 uv_BumpMap;
            //视图方向【顶点指向观察者的方向向量】
            half3 viewDir;


        };//必须加分号
        void surf(Input IN,inout SurfaceOutput o)
        {
            //通过uv坐标查找纹理图片所对应的颜色值,赋给albedo
            o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;
            //求发光系数
            half rimPower= 1-saturate(dot(normalize(IN.viewDir),normalize(o.Normal)));
            //通过发光系数进行自发光
            o.Emission=_RimCol*rimPower*_Rim;
        }
        ENDCG//------CG语言的结束------
    }
}
 

o.Emission=_RimCol*pow(rimPower,_Rim);

Shader "MyShader/Surface/Surface006" {
    Properties {
        _MainTex("纹理图片",2D)=""{}
        _BumpMap("法线贴图",2D)=""{}
        _DetailTex("细节纹理",2D)=""{}
        _MainCol("漫反射颜色",Color)=(1,1,1,1)
        _RimCol("边缘发光颜色",Color)=(1,1,1,1)
        _Rim("边缘发光强度",Range(0,10))=0.5
    }
    //表明着色器中不需要添加Pass通道
    SubShader {
        CGPROGRAM //------CGPROGRAM的开始------
        #pragma surface surf Lambert //表面着色器 函数名 光照模型 特殊设置
        //声明属性变量
        sampler2D _MainTex;
        sampler2D _BumpMap;
        sampler2D _DetailTex;
        fixed4 _RimCol;
        fixed4 _MainCol;
        half _Rim;


        struct Input{
            //定义图片的uv坐标***uv_图片类型
            fixed2 uv_MainTex;
            //定义法线贴图的uv坐标
            fixed2 uv_BumpMap;
            //定义细节纹理的uv坐标
            fixed2 uv_DetailTex;
            //视图方向【顶点指向观察者的方向向量】
            half3 viewDir;


        };//必须加分号
        void surf(Input IN,inout SurfaceOutput o)
        {
            //通过uv坐标查找纹理图片所对应的颜色值,赋给albedo
            o.Albedo=tex2D(_MainTex,IN.uv_MainTex).rgb;
            //叠加细节纹理
            o.Albedo+=tex2D(_DetailTex,IN.uv_DetailTex).rgb;
            //叠加颜色
            o.Albedo+=_MainCol.rgb;
            //添加法线贴图
            o.Normal=UnpackNormal(tex2D(_BumpMap,IN.uv_BumpMap));
            //求发光系数
            half rimPower= 1-saturate(dot(normalize(IN.viewDir),normalize(o.Normal)));
            //通过发光系数进行自发光
            //o.Emission=_RimCol*rimPower*_Rim;
            o.Emission=_RimCol*pow(rimPower,_Rim);
        }
        ENDCG//------CG语言的结束------
    }
}
 

Unity---表面着色器_第11张图片

 

你可能感兴趣的:(unity3D,unity,着色器,游戏引擎)