Przeglądaj źródła

[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.

Harald Csaszar 3 lat temu
rodzic
commit
8a30203ab9

+ 6 - 7
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

+ 11 - 0
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)

+ 6 - 8
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
 		}