GameTech/URP 渲染实战
源码 / Ch16/TransparentLit.shader
Ch16/TransparentLit.shader
// 最普通的半透明受光材质:Alpha 混合、默认不写深度。ZWrite 与 Cull 做成属性,用来复现排序问题。
Shader "Cookbook/Ch16/TransparentLit"
{
    Properties
    {
        _BaseColor ("Color (A = opacity)", Color) = (0.3, 0.7, 1, 0.45)
        [Enum(Off, 0, On, 1)] _ZWrite ("ZWrite", Float) = 0
        [Enum(UnityEngine.Rendering.CullMode)] _Cull ("Cull", Float) = 2
    }
    SubShader
    {
        Tags { "RenderType"="Transparent" "RenderPipeline"="UniversalPipeline" "Queue"="Transparent" }

        Pass
        {
            Name "ForwardLit"
            Tags { "LightMode"="UniversalForward" }
            Blend SrcAlpha OneMinusSrcAlpha
            ZWrite [_ZWrite]
            Cull [_Cull]
            HLSLPROGRAM
            #pragma vertex Ch16Vert
            #pragma fragment frag
            #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
            #pragma multi_compile_fragment _ _SHADOWS_SOFT _SHADOWS_SOFT_LOW _SHADOWS_SOFT_MEDIUM _SHADOWS_SOFT_HIGH
            #include "Assets/Cookbook/Ch16/Ch16Common.hlsl"
            CBUFFER_START(UnityPerMaterial)
                half4 _BaseColor;
                float _ZWrite, _Cull;
            CBUFFER_END

            half4 frag(Varyings i, FRONT_FACE_TYPE face : FRONT_FACE_SEMANTIC) : SV_Target
            {
                float3 N = normalize(i.normalWS) * IS_FRONT_VFACE(face, 1.0, -1.0);
                return half4(SimpleLighting(_BaseColor.rgb, N, i.positionWS, 0.8h), _BaseColor.a);
            }
            ENDHLSL
        }
    }
}