Unity Web Shader IDE
Full source <URP>/Shaders/2D/RenderAs2D-Flattening.shader ShaderLab / HLSL 185 lines 30 symbols 4 includes Hide source Show source
RenderAs2D-Flattening.shader <URP>/Shaders/2D/RenderAs2D-Flattening.shader
Language
ShaderLab / HLSL
Lines
185
Symbols
30
Includes
4
Open IDE root

<URP>/Shaders/2D/RenderAs2D-Flattening.shader full source

Shader "2D/RenderAs2D-Flattening"
{
    Properties
    {
        // Legacy properties. They're here so that materials using this shader can gracefully fallback to the legacy sprite shader.
        [HideInInspector] _Color("Tint", Color) = (1,1,1,1)
        [HideInInspector] _RendererColor("RendererColor", Color) = (1,1,1,1)
        [HideInInspector] _Flip("Flip", Vector) = (1,1,1,1)
        [HideInInspector] _AlphaTex("External Alpha", 2D) = "white" {}
        [HideInInspector] _EnableExternalAlpha("Enable External Alpha", Float) = 0
    }

    SubShader
    {
        Tags {"Queue" = "Transparent" "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" }

        Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha
        Cull Off
        ZTest Always
        ZWrite On
        ColorMask 0

        Stencil
        {
            Ref       128         // Put this in the last bit of our stencil value for maximum compatibility with sprite mask
            ReadMask  128
            WriteMask 128
            Comp equal
            Pass zero
        }

        Pass
        {
            Tags { "LightMode" = "Universal2D" }

            HLSLPROGRAM
            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

            #pragma vertex ColorVertex
            #pragma fragment ColorFragment

            struct Attributes
            {
                float3 positionOS   : POSITION;
                UNITY_VERTEX_INPUT_INSTANCE_ID
            };

            struct Varyings
            {
                float4  positionCS  : SV_POSITION;
                UNITY_VERTEX_OUTPUT_STEREO
            };


            Varyings ColorVertex(Attributes v)
            {
                Varyings o = (Varyings)0;
                UNITY_SETUP_INSTANCE_ID(v);
                UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);

                // We need to flatten the object relative to the camera. After it has been transformed to clip space, we can set the z value to the object's origin.
                float4 originCS = TransformObjectToHClip(float3(0, 0, 0));
                o.positionCS = TransformObjectToHClip(v.positionOS);
                //o.positionCS.z = (originCS.z * o.positionCS.w) / originCS.w;
                o.positionCS.z = 0;
                return o;
            }

            half4 ColorFragment(Varyings i) : SV_Target
            {
                const half4 color = half4(0,0,1,1);
                return color;
            }
            ENDHLSL
        }

        Pass
        {
            Tags { "LightMode" = "NormalsRendering"}

            HLSLPROGRAM
            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

            #pragma vertex NormalsRenderingVertex
            #pragma fragment NormalsRenderingFragment

            struct Attributes
            {
                float3 positionOS   : POSITION;
                float4 color        : COLOR;
                float2 uv           : TEXCOORD0;
                float3 normal       : NORMAL;
                float4 tangent      : TANGENT;
                UNITY_VERTEX_INPUT_INSTANCE_ID
            };

            struct Varyings
            {
                float4  positionCS      : SV_POSITION;
                half4   color           : COLOR;
                float2  uv              : TEXCOORD0;
                half3   normalWS        : TEXCOORD1;
                half3   tangentWS       : TEXCOORD2;
                half3   bitangentWS     : TEXCOORD3;
                UNITY_VERTEX_OUTPUT_STEREO
            };

            TEXTURE2D(_MainTex);
            SAMPLER(sampler_MainTex);
            TEXTURE2D(_NormalMap);
            SAMPLER(sampler_NormalMap);
            half4 _NormalMap_ST;  // Is this the right way to do this?

            Varyings NormalsRenderingVertex(Attributes attributes)
            {
                Varyings o = (Varyings)0;
                UNITY_SETUP_INSTANCE_ID(attributes);
                UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);

                float4 originCS = TransformObjectToHClip(float3(0, 0, 0));
                o.positionCS = TransformObjectToHClip(attributes.positionOS);
                //o.positionCS.z = (originCS.z * o.positionCS.w) / originCS.w;
                o.positionCS.z = 0;

                return o;
            }

            #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/NormalsRenderingShared.hlsl"

            half4 NormalsRenderingFragment(Varyings i) : SV_Target
            {
                const half4 color = half4(0,0,1,1);
                return color;
            }
            ENDHLSL
        }

        Pass
        {
            Tags { "LightMode" = "UniversalForward" "Queue"="Transparent" "RenderType"="Transparent"}

            ZTest  Never
            ZWrite Off


            HLSLPROGRAM
            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

            #pragma vertex UnlitVertex
            #pragma fragment UnlitFragment

            struct Attributes
            {
                float3 positionOS   : POSITION;
                UNITY_VERTEX_INPUT_INSTANCE_ID
            };

            struct Varyings
            {
                float4  positionCS      : SV_POSITION;
                UNITY_VERTEX_OUTPUT_STEREO
            };


            Varyings UnlitVertex(Attributes attributes)
            {
                Varyings o = (Varyings)0;
                UNITY_SETUP_INSTANCE_ID(attributes);
                UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);

                o.positionCS = TransformObjectToHClip(attributes.positionOS);
                return o;
            }

            float4 UnlitFragment(Varyings i) : SV_Target
            {
                return float4(0,0,0,0);
            }
            ENDHLSL
        }
    }

    Fallback "Sprites/Default"
}