From 8a30203ab943b837a28d1edad76dcb4e87e9d959 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Tue, 18 Jan 2022 18:59:52 +0100 Subject: [PATCH] [unity] Fixed incorrect normal orientation for lighting in URP 2D shaders. Closes #2023. Fixed compile error of `URP/2D/Spine/Sprite` shader on Unity 2021.2. Closes #2022. --- .../Include/Spine-Sprite-NormalsPass-URP-2D.hlsl | 13 ++++++------- .../Include/Spine-Sprite-StandardPass-URP-2D.hlsl | 11 +++++++++++ .../Shaders/2D/Spine-SkeletonLit-URP-2D.shader | 14 ++++++-------- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-Sprite-NormalsPass-URP-2D.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-Sprite-NormalsPass-URP-2D.hlsl index 0bdd83882..150a75d76 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-Sprite-NormalsPass-URP-2D.hlsl +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-Sprite-NormalsPass-URP-2D.hlsl @@ -51,16 +51,15 @@ half4 NormalsRenderingFragment(Varyings i) : SV_Target half4 mainTex = i.color * tex2D(_MainTex, i.uv); #if defined(_NORMALMAP) - half3 normalWS = calculateNormalFromBumpMap(i.uv.xy, i.tangentWS.xyz, i.bitangentWS.xyz, i.normalWS.xyz); + half3 normalTS = normalize(UnpackScaleNormal(tex2D(_BumpMap, i.uv.xy), _BumpScale)); + return NormalsRenderingShared(mainTex, normalTS, i.tangentWS.xyz, i.bitangentWS.xyz, i.normalWS.xyz); #else + half3 normalTS = half3(0, 0, 1); + half3 tangentWS = half3(0, 0, 0); + half3 bitangentWS = half3(0, 0, 0); half3 normalWS = i.normalWS.xyz; + return NormalsRenderingShared(mainTex, normalTS, tangentWS, bitangentWS, normalWS); #endif - - half3 normalVS = TransformWorldToViewDir(normalWS); - float4 normalColor; - normalColor.rgb = 0.5 * ((normalVS) + 1); - normalColor.a = mainTex.a; - return normalColor; } #endif diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-Sprite-StandardPass-URP-2D.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-Sprite-StandardPass-URP-2D.hlsl index c30493218..9556108c5 100644 --- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-Sprite-StandardPass-URP-2D.hlsl +++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/2D/Include/Spine-Sprite-StandardPass-URP-2D.hlsl @@ -92,7 +92,18 @@ half4 CombinedShapeLightFragment(VertexOutputSpriteURP2D input) : SV_Target half4 main = texureColor * input.vertexColor; half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.texcoord.xy); +#if UNITY_VERSION < 202120 half4 pixel = half4(CombinedShapeLightShared(half4(main.rgb, 1), mask, input.lightingUV).rgb, main.a); +#else + SurfaceData2D surfaceData; + InputData2D inputData; + surfaceData.albedo = main.rgb; + surfaceData.alpha = 1; + surfaceData.mask = mask; + inputData.uv = input.texcoord; + inputData.lightingUV = input.lightingUV; + half4 pixel = half4(CombinedShapeLightShared(surfaceData, inputData).rgb, main.a); +#endif #if defined(_RIM_LIGHTING) #if defined(_NORMALMAP) 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 bb2dd7f28..77d99f1d7 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 @@ -153,7 +153,7 @@ float4 positionCS : SV_POSITION; float4 color : COLOR; float2 uv : TEXCOORD0; - float3 normalVS : TEXCOORD1; + float3 normalWS : TEXCOORD1; }; TEXTURE2D(_MainTex); @@ -166,8 +166,7 @@ o.positionCS = TransformObjectToHClip(attributes.positionOS); o.uv = attributes.uv; o.color = attributes.color; - float3 normalWS = TransformObjectToWorldDir(float3(0, 0, -1)); - o.normalVS = TransformWorldToViewDir(normalWS); + o.normalWS = TransformObjectToWorldDir(float3(0, 0, -1)); return o; } @@ -176,11 +175,10 @@ float4 NormalsRenderingFragment(Varyings i) : SV_Target { float4 mainTex = i.color * SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv); - - float4 normalColor; - normalColor.rgb = 0.5 * ((i.normalVS)+1); - normalColor.a = mainTex.a; - return normalColor; + half3 normalTS = half3(0, 0, 1); + half3 tangentWS = half3(0, 0, 0); + half3 bitangentWS = half3(0, 0, 0); + return NormalsRenderingShared(mainTex, normalTS, tangentWS, bitangentWS, i.normalWS); } ENDHLSL }