ShaderLab(一) surface表面着色器 关闭深度测试 把被物体遮挡住的物体 显示在遮挡物体的前面 + 通过设置LOD让shader脚本筛选使用哪个SubShader子着色器

80 篇文章 1 订阅
7 篇文章 0 订阅

 

Shader "Custom/LODShader" {

    //绑定到编辑器属性面板上的变量;
    Properties {
        _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 //金属 0=非金属 1=金属
    }

    
    SubShader { //子着色器

        Tags { "RenderType"="Opaque" }    //shader标签=队列渲染

        //设置subShader子着色器LOD值,Shader脚本每次只会根据情况来选择一个可执行的SubShader子着色器
        //    (也就是一直找到第一个<= Shader脚本.maximumLOD的 那个SubShader子着色器执行,如果都没有 就“降级处理”
        LOD 600

        CGPROGRAM  //CG代码开始         

        #pragma surface surf Standard fullforwardshadows //定义名为:surf表面着色器 Standard光照模型  Options可选参数
         
        #pragma target 3.0 //使用着色器模型3.0目标,以获得更好的照明

        sampler2D _MainTex;//为了使用属性块内的属性 命名1个同名的_MainTex(2d纹理图) 

        struct Input { //定义 表面着色器"Input结构体"

            float2 uv_MainTex;//uv_纹理图片名称
        };

        half _Glossiness;    //为了使用属性块内的属性 命名1个同名的_Glossiness
        half _Metallic;        //为了使用属性块内的属性 命名1个同名的_Metallic
        fixed4 _Color;        //为了使用属性块内的属性 命名1个同名的_Color


        // Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader.
        // See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing.
        // #pragma instancing_options assumeuniformscaling
        UNITY_INSTANCING_BUFFER_START(Props)
            // put more per-instance properties here
        UNITY_INSTANCING_BUFFER_END(Props)

        //表面着色的入口函数: void 表面着色器名称(1.表面着色器"Input结构体"  2.表面着色器"SurfaceOutputStandard结构体")
        void surf (Input IN, inout SurfaceOutputStandard o) {
             
            //fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;//获得纹理颜色
            o.Albedo = fixed3(1.0,0.0,0.0);    // _Color.rgb;//赋值颜色  
            //o.Metallic = _Metallic; //赋值 金属
            //o.Smoothness = _Glossiness;//赋值 粗糙/光滑
            //o.Alpha = c.a;//透明度
        }
        ENDCG//CG代码结束
    } 

    
    SubShader { //子着色器 

        Tags { "RenderType"="Opaque" }    //shader标签=队列渲染

        //设置subShader子着色器LOD值,Shader脚本每次只会根据情况来选择一个可执行的SubShader子着色器
        //    (也就是一直找到第一个<= Shader脚本.maximumLOD的 那个SubShader子着色器执行,如果都没有 就“降级处理”
        LOD 500

        CGPROGRAM  //CG代码开始         

        #pragma surface surf Standard fullforwardshadows //定义名为:surf表面着色器 Standard光照模型  Options可选参数
         
        #pragma target 3.0 //使用着色器模型3.0目标,以获得更好的照明

        sampler2D _MainTex;//为了使用属性块内的属性 命名1个同名的_MainTex(2d纹理图) 

        struct Input { //定义 表面着色器"Input结构体"

            float2 uv_MainTex;//uv_纹理图片名称
        };

        half _Glossiness;    //为了使用属性块内的属性 命名1个同名的_Glossiness
        half _Metallic;        //为了使用属性块内的属性 命名1个同名的_Metallic
        fixed4 _Color;        //为了使用属性块内的属性 命名1个同名的_Color


        // Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader.
        // See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing.
        // #pragma instancing_options assumeuniformscaling
        UNITY_INSTANCING_BUFFER_START(Props)
            // put more per-instance properties here
        UNITY_INSTANCING_BUFFER_END(Props)

        //表面着色的入口函数: void 表面着色器名称(1.表面着色器"Input结构体"  2.表面着色器"SurfaceOutputStandard结构体")
        void surf (Input IN, inout SurfaceOutputStandard o) {
             
            //fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;//获得纹理颜色
            o.Albedo = fixed3(0.0,1.0,0.0);    // _Color.rgb;//赋值颜色  
            //o.Metallic = _Metallic; //赋值 金属
            //o.Smoothness = _Glossiness;//赋值 粗糙/光滑
            //o.Alpha = c.a;//透明度
        }
        ENDCG//CG代码结束
    } 


    
    SubShader {//子着色器 

        Tags { "RenderType"="Opaque" }    //shader标签=队列渲染

        //设置subShader子着色器LOD值,Shader脚本每次只会根据情况来选择一个可执行的SubShader子着色器
        //    (也就是一直找到第一个<= Shader脚本.maximumLOD的 那个SubShader子着色器执行,如果都没有 就“降级处理”

        LOD 400

        CGPROGRAM  //CG代码开始         

        #pragma surface surf Standard fullforwardshadows //定义名为:surf表面着色器 Standard光照模型  Options可选参数
         
        #pragma target 3.0 //使用着色器模型3.0目标,以获得更好的照明

        sampler2D _MainTex;//为了使用属性块内的属性 命名1个同名的_MainTex(2d纹理图) 

        struct Input { //定义 表面着色器"Input结构体"

            float2 uv_MainTex;//uv_纹理图片名称
        };

        half _Glossiness;    //为了使用属性块内的属性 命名1个同名的_Glossiness
        half _Metallic;        //为了使用属性块内的属性 命名1个同名的_Metallic
        fixed4 _Color;        //为了使用属性块内的属性 命名1个同名的_Color


        // Add instancing support for this shader. You need to check 'Enable Instancing' on materials that use the shader.
        // See https://docs.unity3d.com/Manual/GPUInstancing.html for more information about instancing.
        // #pragma instancing_options assumeuniformscaling
        UNITY_INSTANCING_BUFFER_START(Props)
            // put more per-instance properties here
        UNITY_INSTANCING_BUFFER_END(Props)

        //表面着色的入口函数: void 表面着色器名称(1.表面着色器"Input结构体"  2.表面着色器"SurfaceOutputStandard结构体")
        void surf (Input IN, inout SurfaceOutputStandard o) {
             
            //fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;//获得纹理颜色
            o.Albedo = fixed3(0.0,0.0,1.0);    // _Color.rgb;//赋值颜色  
            //o.Metallic = _Metallic; //赋值 金属
            //o.Smoothness = _Glossiness;//赋值 粗糙/光滑
            //o.Alpha = c.a;//透明度
        }
        ENDCG//CG代码结束
    } 


    FallBack "Diffuse"//当所有着色器不支持就 降级处理
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AD_喵了个咪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值