跳转至

边缘光特效

'''c Shader "Unlit/Edge" { Properties { _EdgeColor("Edge Color",Color)=(1,1,1,1) _RimMin("RimMin",Range(-1,1)) = 0.0 _RimMax("RimMax",Range(0,2)) = 1.0 } SubShader { Tags { "Queue"="Transparent" } LOD 100

    Pass
    {
        ZWrite Off
        Blend SrcAlpha One
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag

        #include "UnityCG.cginc"

        struct appdata
        {
            float4 vertex : POSITION;
            float2 uv : TEXCOORD0;
            float3 normal: NORMAL;
        };

        struct v2f
        {
            float2 uv : TEXCOORD0;
            float4 vertex : SV_POSITION;
            float3 world_normal: TEXCOORD1;
            float3 world_pos: TEXCOORD2;

        };

        sampler2D _MainTex;
        float4 _MainTex_ST;
        float4 _EdgeColor;
        float _PowEmiss;
        float _InnerAlpha;
        float _RimMin;
        float _RimMax;

        v2f vert (appdata v)
        {
            v2f o;
            o.vertex = UnityObjectToClipPos(v.vertex);
            o.uv = TRANSFORM_TEX(v.uv, _MainTex);
            o.world_normal=normalize(mul(float4(v.normal,0.0),unity_WorldToObject).xyz);
            o.world_pos=mul(unity_ObjectToWorld,float4(v.vertex.xyz,1)).xyz;
            return o;
        }

        fixed4 frag (v2f i) : SV_Target
        {
            //边缘光

            half3 world_normal=normalize(i.world_normal);
            float3 world_view=normalize(_WorldSpaceCameraPos.xyz-i.world_pos);
            float dotV=saturate(dot(world_normal,world_view));
            float fresnel=1-dotV;
            fresnel = smoothstep(_RimMin, _RimMax, fresnel);
            half emiss = tex2D(_MainTex, i.uv).r;
            emiss = pow(emiss, 5.0);
            float final_edge_alpha=saturate(emiss+fresnel);

            //float emiss=pow(fresnel,_PowEmiss);
            //fixed4 col = tex2D(_MainTex, i.uv);
            return float4(_EdgeColor.rgb,fresnel);
        }
        ENDCG
    }
}

}

''' 材质球面板:

效果: 20210209183117