Unity关闭shader中的光照模型以及如何自定义光照模型

Posted 酷熊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity关闭shader中的光照模型以及如何自定义光照模型相关的知识,希望对你有一定的参考价值。

// Upgrade NOTE: replaced ‘_World2Object‘ with ‘unity_WorldToObject‘

// Upgrade NOTE: replaced ‘_World2Object‘ with ‘unity_WorldToObject‘

Shader "Custom/RadarWave" {
    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
        _TransVal("Transparency Value", Range(0,1)) = 0.5
        _StripWidth("Strip Width", Range(0.1,10)) = 0.2
        _Speed("Speed", Range(1,100)) = 1
    }
    SubShader {
        Tags { "RenderType"="Opaque" "Queue" = "Transparent" }
        LOD 200
        //Cull Off//关闭背面裁剪
        //Lighting Off//此设置在surface shader中不起作用,貌似是在Unlit Shader中使用的
        //ZWrite On
        //ZTest On
        Blend SrcAlpha OneMinusSrcAlpha
        
        CGPROGRAM
        // Physically based Standard lighting model, and enable shadows on all light types
        //#pragma surface surf Standard fullforwardshadows alpha vertex:vert
        #pragma surface surf NoLightModel fullforwardshadows alpha vertex:vert

        

        // Use shader model 3.0 target, to get nicer looking lighting
        #pragma target 3.0

        sampler2D _MainTex;

        struct Input {
            float2 uv_MainTex;
            float4 modelPos_;
        };

        half _Glossiness;
        half _Metallic;
        half _TransVal;
        half _StripWidth;
        half _Speed;
        fixed4 _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_CBUFFER_START(Props)
            // put more per-instance properties here
        UNITY_INSTANCING_CBUFFER_END

        void surf(Input IN, inout SurfaceOutput o) {
            // Albedo comes from a texture tinted by color
            fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb;
            //float4 tmp = mul(unity_WorldToObject, IN.modelPos_);
            if (fmod(floor((IN.modelPos_.z-_Time.y*_Speed)/ _StripWidth),3)!=0)
            {
                //clip(-1);
                discard;
            }
            //o.Alpha = c.a;
            o.Alpha = _TransVal;
        }

        void vert(inout appdata_full v, out Input o)
        {
            UNITY_INITIALIZE_OUTPUT(Input, o);
            o.modelPos_ = v.vertex;
        }

        //命名规则:Lighting接#pragma suface之后起的名字   
        //lightDir :点到光源的单位向量   viewDir:点到摄像机的单位向量   atten:衰减系数   
        float4 LightingNoLightModel(SurfaceOutput s, float3 lightDir, half3 viewDir, half atten)
        {
            float4 c;
            c.rgb = s.Albedo;
            c.a = s.Alpha;
            return c;
        }

        ENDCG
    }
    FallBack "Diffuse"
}

 

以上是关于Unity关闭shader中的光照模型以及如何自定义光照模型的主要内容,如果未能解决你的问题,请参考以下文章

通过使用Unity Shader实现基础光照效果

通过使用Unity Shader实现基础光照效果

Unity Shaders使用CgInclude让你的Shader模块化——创建CgInclude文件存储光照模型

Unity Shader 光照模型(基础公式和代码实现)

Unity shader学习之逐像素漫反射光照模型

Shader中基本光照模型