From 5a32e002b864d3dea0cf1d8fb208e5399a491eb7 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Tue, 15 Mar 2022 19:17:51 +0100 Subject: [PATCH] [unity] Fixed URP lit shaders ignoring straight alpha settings during fallback to unlit. Affected SkeletonRenderTexture. Closes #2044. --- .../Spine-SkeletonLit-UnlitPass-URP-2D.hlsl | 47 +++++++++++++++++++ ...ine-SkeletonLit-UnlitPass-URP-2D.hlsl.meta | 10 ++++ .../2D/Spine-SkeletonLit-URP-2D.shader | 44 +---------------- .../Shaders/2D/Spine-Sprite-URP-2D.shader | 23 ++++++++- .../Shaders/Spine-Sprite-URP.shader | 32 ++++++++++++- 5 files changed, 112 insertions(+), 44 deletions(-) create mode 100644 spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-SkeletonLit-UnlitPass-URP-2D.hlsl create mode 100644 spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-SkeletonLit-UnlitPass-URP-2D.hlsl.meta diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-SkeletonLit-UnlitPass-URP-2D.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-SkeletonLit-UnlitPass-URP-2D.hlsl new file mode 100644 index 000000000..9dc2ae9eb --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-SkeletonLit-UnlitPass-URP-2D.hlsl @@ -0,0 +1,47 @@ +#ifndef SKELETONLIT_UNLIT_PASS_INCLUDED +#define SKELETONLIT_UNLIT_PASS_INCLUDED + +struct Attributes +{ + float3 positionOS : POSITION; + float4 color : COLOR; + float2 uv : TEXCOORD0; +}; + +struct Varyings +{ + float4 positionCS : SV_POSITION; + float4 color : COLOR; + float2 uv : TEXCOORD0; +}; + +TEXTURE2D(_MainTex); +SAMPLER(sampler_MainTex); +float4 _MainTex_ST; + +Varyings UnlitVertex(Attributes attributes) +{ + Varyings o = (Varyings)0; + + o.positionCS = TransformObjectToHClip(attributes.positionOS); + o.uv = TRANSFORM_TEX(attributes.uv, _MainTex); + o.uv = attributes.uv; + o.color = attributes.color; + return o; +} + +float4 UnlitFragment(Varyings i) : SV_Target +{ + half4 tex = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv); + half4 main; + #if defined(_STRAIGHT_ALPHA_INPUT) + main.rgb = tex.rgb * i.color.rgb * tex.a; + #else + main.rgb = tex.rgb * i.color.rgb; + #endif + main.a = tex.a * i.color.a; + + return main; +} + +#endif diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-SkeletonLit-UnlitPass-URP-2D.hlsl.meta b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-SkeletonLit-UnlitPass-URP-2D.hlsl.meta new file mode 100644 index 000000000..aa35dcbc0 --- /dev/null +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-SkeletonLit-UnlitPass-URP-2D.hlsl.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 580dd7e812fc63c4a9330abe519946de +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-SkeletonLit-URP-2D.shader b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-SkeletonLit-URP-2D.shader index 77d99f1d7..d6731c66a 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-SkeletonLit-URP-2D.shader +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-SkeletonLit-URP-2D.shader @@ -193,52 +193,12 @@ Blend One OneMinusSrcAlpha HLSLPROGRAM + #pragma shader_feature _ _STRAIGHT_ALPHA_INPUT #pragma prefer_hlslcc gles #pragma vertex UnlitVertex #pragma fragment UnlitFragment - struct Attributes - { - float3 positionOS : POSITION; - float4 color : COLOR; - float2 uv : TEXCOORD0; - }; - - struct Varyings - { - float4 positionCS : SV_POSITION; - float4 color : COLOR; - float2 uv : TEXCOORD0; - }; - - TEXTURE2D(_MainTex); - SAMPLER(sampler_MainTex); - float4 _MainTex_ST; - - Varyings UnlitVertex(Attributes attributes) - { - Varyings o = (Varyings)0; - - o.positionCS = TransformObjectToHClip(attributes.positionOS); - o.uv = TRANSFORM_TEX(attributes.uv, _MainTex); - o.uv = attributes.uv; - o.color = attributes.color; - return o; - } - - float4 UnlitFragment(Varyings i) : SV_Target - { - half4 tex = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv); - half4 main; - #if defined(_STRAIGHT_ALPHA_INPUT) - main.rgb = tex.rgb * i.color.rgb * tex.a; - #else - main.rgb = tex.rgb * i.color.rgb; - #endif - main.a = tex.a * i.color.a; - - return main; - } + #include "Include/Spine-SkeletonLit-UnlitPass-URP-2D.hlsl" ENDHLSL } } diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-Sprite-URP-2D.shader b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-Sprite-URP-2D.shader index 7a50d3622..1d737398d 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-Sprite-URP-2D.shader +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Spine-Sprite-URP-2D.shader @@ -147,7 +147,28 @@ Shader "Universal Render Pipeline/2D/Spine/Sprite" ENDHLSL } - UsePass "Universal Render Pipeline/2D/Spine/Skeleton Lit/UNLIT" + Pass + { + Name "Unlit" + Tags { "LightMode" = "UniversalForward" "Queue" = "Transparent" "RenderType" = "Transparent"} + + ZWrite Off + Cull Off + Blend One OneMinusSrcAlpha + + HLSLPROGRAM + #pragma shader_feature _ _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON _ALPHAPREMULTIPLY_VERTEX_ONLY _ADDITIVEBLEND _ADDITIVEBLEND_SOFT _MULTIPLYBLEND _MULTIPLYBLEND_X2 + #if defined(_ALPHAPREMULTIPLY_VERTEX_ONLY) || defined(_ALPHABLEND_ON) + #define _STRAIGHT_ALPHA_INPUT + #endif + + #pragma prefer_hlslcc gles + #pragma vertex UnlitVertex + #pragma fragment UnlitFragment + + #include "Include/Spine-SkeletonLit-UnlitPass-URP-2D.hlsl" + ENDHLSL + } } FallBack "Universal Render Pipeline/2D/Spine/Skeleton Lit" diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Sprite-URP.shader b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Sprite-URP.shader index 6b72b7f20..79118a0f1 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Sprite-URP.shader +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Spine-Sprite-URP.shader @@ -113,7 +113,7 @@ Shader "Universal Render Pipeline/Spine/Sprite" #pragma multi_compile _ DIRLIGHTMAP_COMBINED #pragma multi_compile _ LIGHTMAP_ON - //-------------------------------------- + //-------------------------------------- // GPU Instancing #pragma multi_compile_instancing @@ -202,6 +202,36 @@ Shader "Universal Render Pipeline/Spine/Sprite" #include "Include/Spine-Sprite-DepthOnlyPass-URP.hlsl" ENDHLSL } + + Pass + { + Name "Unlit" + Tags { "LightMode" = "UniversalForward" "Queue" = "Transparent" "RenderType" = "Transparent"} + + ZWrite Off + Cull Off + Blend One OneMinusSrcAlpha + + HLSLPROGRAM + #pragma shader_feature _ _ALPHABLEND_ON _ALPHAPREMULTIPLY_ON _ALPHAPREMULTIPLY_VERTEX_ONLY _ADDITIVEBLEND _ADDITIVEBLEND_SOFT _MULTIPLYBLEND _MULTIPLYBLEND_X2 + #if defined(_ALPHAPREMULTIPLY_VERTEX_ONLY) || defined(_ALPHABLEND_ON) + #define _STRAIGHT_ALPHA_INPUT + #endif + + #pragma prefer_hlslcc gles + #pragma vertex vert + #pragma fragment frag + + #undef LIGHTMAP_ON + + #define USE_URP + #define fixed4 half4 + #define fixed3 half3 + #define fixed half + #include "Include/Spine-Input-URP.hlsl" + #include "Include/Spine-Skeleton-ForwardPass-URP.hlsl" + ENDHLSL + } } FallBack "Hidden/InternalErrorShader"