diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs
index cfc5ddf29..315f9e37e 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs
@@ -134,14 +134,16 @@ namespace Spine.Unity {
#region Runtime Instantiation
/// Adds and prepares a SkeletonAnimation component to a GameObject at runtime.
/// The newly instantiated SkeletonAnimation
- public static SkeletonAnimation AddToGameObject (GameObject gameObject, SkeletonDataAsset skeletonDataAsset) {
- return SkeletonRenderer.AddSpineComponent(gameObject, skeletonDataAsset);
+ public static SkeletonAnimation AddToGameObject (GameObject gameObject, SkeletonDataAsset skeletonDataAsset,
+ bool quiet = false) {
+ return SkeletonRenderer.AddSpineComponent(gameObject, skeletonDataAsset, quiet);
}
/// Instantiates a new UnityEngine.GameObject and adds a prepared SkeletonAnimation component to it.
/// The newly instantiated SkeletonAnimation component.
- public static SkeletonAnimation NewSkeletonAnimationGameObject (SkeletonDataAsset skeletonDataAsset) {
- return SkeletonRenderer.NewSpineGameObject(skeletonDataAsset);
+ public static SkeletonAnimation NewSkeletonAnimationGameObject (SkeletonDataAsset skeletonDataAsset,
+ bool quiet = false) {
+ return SkeletonRenderer.NewSpineGameObject(skeletonDataAsset, quiet);
}
#endregion
@@ -155,10 +157,10 @@ namespace Spine.Unity {
///
/// Initialize this component. Attempts to load the SkeletonData and creates the internal Spine objects and buffers.
/// If set to true, force overwrite an already initialized object.
- public override void Initialize (bool overwrite) {
+ public override void Initialize (bool overwrite, bool quiet = false) {
if (valid && !overwrite)
return;
- base.Initialize(overwrite);
+ base.Initialize(overwrite, quiet);
if (!valid)
return;
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonMecanim.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonMecanim.cs
index ef10112a1..6dff61cb4 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonMecanim.cs
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonMecanim.cs
@@ -69,11 +69,11 @@ namespace Spine.Unity {
public event UpdateBonesDelegate UpdateComplete { add { _UpdateComplete += value; } remove { _UpdateComplete -= value; } }
#endregion
- public override void Initialize (bool overwrite) {
+ public override void Initialize (bool overwrite, bool quiet = false) {
if (valid && !overwrite)
return;
- base.Initialize(overwrite);
+ base.Initialize(overwrite, quiet);
if (!valid)
return;
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs
index 2fea2f7d4..bf442ce19 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs
@@ -247,17 +247,17 @@ namespace Spine.Unity {
public SkeletonDataAsset SkeletonDataAsset { get { return skeletonDataAsset; } } // ISkeletonComponent
#region Runtime Instantiation
- public static T NewSpineGameObject (SkeletonDataAsset skeletonDataAsset) where T : SkeletonRenderer {
- return SkeletonRenderer.AddSpineComponent(new GameObject("New Spine GameObject"), skeletonDataAsset);
+ public static T NewSpineGameObject (SkeletonDataAsset skeletonDataAsset, bool quiet = false) where T : SkeletonRenderer {
+ return SkeletonRenderer.AddSpineComponent(new GameObject("New Spine GameObject"), skeletonDataAsset, quiet);
}
/// Add and prepare a Spine component that derives from SkeletonRenderer to a GameObject at runtime.
/// T should be SkeletonRenderer or any of its derived classes.
- public static T AddSpineComponent (GameObject gameObject, SkeletonDataAsset skeletonDataAsset) where T : SkeletonRenderer {
+ public static T AddSpineComponent (GameObject gameObject, SkeletonDataAsset skeletonDataAsset, bool quiet = false) where T : SkeletonRenderer {
var c = gameObject.AddComponent();
if (skeletonDataAsset != null) {
c.skeletonDataAsset = skeletonDataAsset;
- c.Initialize(false);
+ c.Initialize(false, quiet);
}
return c;
}
@@ -315,7 +315,7 @@ namespace Spine.Unity {
///
/// Initialize this component. Attempts to load the SkeletonData and creates the internal Skeleton object and buffers.
/// If set to true, it will overwrite internal objects if they were already generated. Otherwise, the initialized component will ignore subsequent calls to initialize.
- public virtual void Initialize (bool overwrite) {
+ public virtual void Initialize (bool overwrite, bool quiet = false) {
if (valid && !overwrite)
return;
@@ -361,7 +361,7 @@ namespace Spine.Unity {
#if UNITY_EDITOR
if (!Application.isPlaying) {
string errorMessage = null;
- if (MaterialChecks.IsMaterialSetupProblematic(this, ref errorMessage))
+ if (quiet || MaterialChecks.IsMaterialSetupProblematic(this, ref errorMessage))
Debug.LogWarningFormat(this, "Problematic material setup at {0}: {1}", this.name, errorMessage);
}
#endif
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-Skeleton-Lit-Common.cginc b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-Skeleton-Lit-Common.cginc
index 73a6e1875..10fbbf08a 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-Skeleton-Lit-Common.cginc
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-Skeleton-Lit-Common.cginc
@@ -109,16 +109,11 @@ sampler2D _MainTex;
fixed4 frag (VertexOutput i) : SV_Target {
fixed4 tex = tex2D(_MainTex, i.uv0);
ALPHA_CLIP(tex, i.color);
-
- fixed4 col;
- #if defined(_STRAIGHT_ALPHA_INPUT)
- col.rgb = tex * i.color * tex.a;
- #else
- col.rgb = tex * i.color;
- #endif
-
- col *= 2;
- col.a = tex.a * i.color.a;
+#if defined(_STRAIGHT_ALPHA_INPUT)
+ tex.rgb *= tex.a;
+#endif
+ fixed4 col = tex * i.color;
+ col.rgb *= 2;
return col;
}
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/ShaderShared.cginc b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/ShaderShared.cginc
index f7d6ffc65..dd5d83fe4 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/ShaderShared.cginc
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/ShaderShared.cginc
@@ -240,6 +240,20 @@ uniform fixed _Cutoff;
#endif
+////////////////////////////////////////
+// Additive Slot blend mode
+// return unlit textureColor, alpha clip textureColor.a only
+//
+#if defined(_ALPHAPREMULTIPLY_ON)
+ #define RETURN_UNLIT_IF_ADDITIVE_SLOT(textureColor, vertexColor) \
+ if (vertexColor.a == 0 && (vertexColor.r || vertexColor.g || vertexColor.b)) {\
+ ALPHA_CLIP(texureColor, fixed4(1, 1, 1, 1))\
+ return texureColor * vertexColor;\
+ }
+#else
+ #define RETURN_UNLIT_IF_ADDITIVE_SLOT(textureColor, vertexColor)
+#endif
+
////////////////////////////////////////
// Color functions
//
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpritePixelLighting.cginc b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpritePixelLighting.cginc
index 8c763f48d..8878df766 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpritePixelLighting.cginc
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpritePixelLighting.cginc
@@ -1,6 +1,6 @@
#ifndef SPRITE_PIXEL_LIGHTING_INCLUDED
#define SPRITE_PIXEL_LIGHTING_INCLUDED
-
+
#include "ShaderShared.cginc"
#include "SpriteLighting.cginc"
#include "SpriteSpecular.cginc"
@@ -24,24 +24,24 @@
#define _LIGHT_COORD_INDEX_0 4
#define _LIGHT_COORD_INDEX_1 5
#define _FOG_COORD_INDEX 6
-#endif // _NORMALMAP
+#endif // _NORMALMAP
struct VertexOutput
{
- float4 pos : SV_POSITION;
+ float4 pos : SV_POSITION;
fixed4 color : COLOR;
float2 texcoord : TEXCOORD0;
float4 posWorld : TEXCOORD1;
half3 normalWorld : TEXCOORD2;
#if defined(_NORMALMAP)
- half3 tangentWorld : TEXCOORD3;
+ half3 tangentWorld : TEXCOORD3;
half3 binormalWorld : TEXCOORD4;
#endif // _NORMALMAP
fixed3 vertexLighting : _VERTEX_LIGHTING_INDEX;
LIGHTING_COORDS(_LIGHT_COORD_INDEX_0, _LIGHT_COORD_INDEX_1)
#if defined(_FOG)
UNITY_FOG_COORDS(_FOG_COORD_INDEX)
-#endif // _FOG
+#endif // _FOG
UNITY_VERTEX_OUTPUT_STEREO
};
@@ -56,16 +56,16 @@ inline fixed3 calculateLightDiffuse(VertexOutput input, float3 normalWorld, inou
{
//For directional lights _WorldSpaceLightPos0.w is set to zero
float3 lightWorldDirection = normalize(_WorldSpaceLightPos0.xyz - input.posWorld.xyz * _WorldSpaceLightPos0.w);
-
+
float attenuation = LIGHT_ATTENUATION(input);
float angleDot = max(0, dot(normalWorld, lightWorldDirection));
-
+
#if defined(_DIFFUSE_RAMP)
fixed3 lightDiffuse = calculateRampedDiffuse(_LightColor0.rgb, attenuation, angleDot);
#else
fixed3 lightDiffuse = _LightColor0.rgb * (attenuation * angleDot);
#endif // _DIFFUSE_RAMP
-
+
return lightDiffuse;
}
@@ -96,7 +96,7 @@ fixed3 calculateAmbientLight(half3 normalWorld)
{
#if defined(_SPHERICAL_HARMONICS)
fixed3 ambient = ShadeSH9(half4(normalWorld, 1.0));
-#else
+#else
fixed3 ambient = unity_AmbientSky.rgb;
#endif
return ambient;
@@ -129,124 +129,124 @@ fixed4 calculateSpecularLightAdditive(SpecularCommonData s, float3 viewDir, floa
VertexOutput vert(VertexInput v)
{
VertexOutput output;
-
+
UNITY_SETUP_INSTANCE_ID(input);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
-
+
output.pos = calculateLocalPos(v.vertex);
output.color = calculateVertexColor(v.color);
output.texcoord = calculateTextureCoord(v.texcoord);
output.posWorld = calculateWorldPos(v.vertex);
-
+
float backFaceSign = 1;
-#if defined(FIXED_NORMALS_BACKFACE_RENDERING)
+#if defined(FIXED_NORMALS_BACKFACE_RENDERING)
backFaceSign = calculateBackfacingSign(output.posWorld.xyz);
-#endif
+#endif
output.normalWorld = calculateSpriteWorldNormal(v, backFaceSign);
output.vertexLighting = calculateVertexLighting(output.posWorld, output.normalWorld);
-
+
#if defined(_NORMALMAP)
output.tangentWorld = calculateWorldTangent(v.tangent);
output.binormalWorld = calculateSpriteWorldBinormal(v, output.normalWorld, output.tangentWorld, backFaceSign);
#endif
TRANSFER_VERTEX_TO_FRAGMENT(output)
-
+
#if defined(_FOG)
UNITY_TRANSFER_FOG(output,output.pos);
-#endif // _FOG
-
+#endif // _FOG
+
return output;
}
////////////////////////////////////////
// Fragment programs
//
-
fixed4 fragBase(VertexOutput input) : SV_Target
{
fixed4 texureColor = calculateTexturePixel(input.texcoord);
+ RETURN_UNLIT_IF_ADDITIVE_SLOT(texureColor, input.color) // shall be called before ALPHA_CLIP
ALPHA_CLIP(texureColor, input.color)
-
+
//Get normal direction
fixed3 normalWorld = calculateNormalWorld(input);
//Get Ambient diffuse
fixed3 ambient = calculateAmbientLight(normalWorld);
-
+
#if defined(SPECULAR)
-
+
//For directional lights _WorldSpaceLightPos0.w is set to zero
float3 lightWorldDirection = normalize(_WorldSpaceLightPos0.xyz - input.posWorld.xyz * _WorldSpaceLightPos0.w);
float attenuation = LIGHT_ATTENUATION(input);
-
+
//Returns pixel lit by light, texture color should inlcluded alpha
half3 viewDir = normalize(_WorldSpaceCameraPos - input.posWorld.xyz);
fixed4 pixel = calculateSpecularLight(getSpecularData(input.texcoord.xy, texureColor, input.color), viewDir, normalWorld, lightWorldDirection, _LightColor0.rgb * attenuation, ambient + input.vertexLighting);
-
+
APPLY_EMISSION_SPECULAR(pixel, input.texcoord)
-
+
#else
//Get primary pixel light diffuse
fixed3 diffuse = calculateLightDiffuse(input, normalWorld, texureColor);
-
+
//Combine along with vertex lighting for the base lighting pass
fixed3 lighting = ambient + diffuse + input.vertexLighting;
-
+
APPLY_EMISSION(lighting, input.texcoord)
-
+
fixed4 pixel = calculateLitPixel(texureColor, input.color, lighting);
-
+
#endif
-
+
#if defined(_RIM_LIGHTING)
pixel.rgb = applyRimLighting(input.posWorld, normalWorld, pixel);
#endif
-
+
COLORISE(pixel)
APPLY_FOG(pixel, input)
-
+
return pixel;
}
fixed4 fragAdd(VertexOutput input) : SV_Target
{
fixed4 texureColor = calculateTexturePixel(input.texcoord);
-
+
#if defined(_COLOR_ADJUST)
texureColor = adjustColor(texureColor);
-#endif // _COLOR_ADJUST
+#endif // _COLOR_ADJUST
ALPHA_CLIP(texureColor, input.color)
-
+
//Get normal direction
fixed3 normalWorld = calculateNormalWorld(input);
-
+
#if defined(SPECULAR)
-
+
//For directional lights _WorldSpaceLightPos0.w is set to zero
float3 lightWorldDirection = normalize(_WorldSpaceLightPos0.xyz - input.posWorld.xyz * _WorldSpaceLightPos0.w);
float attenuation = LIGHT_ATTENUATION(input);
-
+
half3 viewDir = normalize(_WorldSpaceCameraPos - input.posWorld.xyz);
fixed4 pixel = calculateSpecularLightAdditive(getSpecularData(input.texcoord.xy, texureColor, input.color), viewDir, normalWorld, lightWorldDirection, _LightColor0.rgb * attenuation);
-
+
#else
-
+
//Get light diffuse
fixed3 lighting = calculateLightDiffuse(input, normalWorld, texureColor);
fixed4 pixel = calculateAdditiveLitPixel(texureColor, input.color, lighting);
-
+
#endif
-
+
COLORISE_ADDITIVE(pixel)
APPLY_FOG_ADDITIVE(pixel, input)
-
+
return pixel;
}
-#endif // SPRITE_PIXEL_LIGHTING_INCLUDED
\ No newline at end of file
+#endif // SPRITE_PIXEL_LIGHTING_INCLUDED
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteUnlit.cginc b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteUnlit.cginc
index 4385ffcc5..60b37bbaa 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteUnlit.cginc
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteUnlit.cginc
@@ -6,7 +6,7 @@
////////////////////////////////////////
// Vertex structs
//
-
+
struct VertexInput
{
float4 vertex : POSITION;
@@ -22,7 +22,7 @@ struct VertexOutput
fixed4 color : COLOR;
#if defined(_FOG)
UNITY_FOG_COORDS(1)
-#endif // _FOG
+#endif // _FOG
UNITY_VERTEX_OUTPUT_STEREO
};
@@ -34,39 +34,35 @@ struct VertexOutput
VertexOutput vert(VertexInput input)
{
VertexOutput output;
-
+
UNITY_SETUP_INSTANCE_ID(input);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
-
- output.pos = calculateLocalPos(input.vertex);
+
+ output.pos = calculateLocalPos(input.vertex);
output.texcoord = calculateTextureCoord(input.texcoord);
output.color = calculateVertexColor(input.color);
#if defined(_FOG)
UNITY_TRANSFER_FOG(output,output.pos);
#endif // _FOG
-
+
return output;
}
////////////////////////////////////////
// Fragment program
//
-
-
-
-
fixed4 frag(VertexOutput input) : SV_Target
{
fixed4 texureColor = calculateTexturePixel(input.texcoord.xy);
+ RETURN_UNLIT_IF_ADDITIVE_SLOT(texureColor, input.color) // shall be called before ALPHA_CLIP
ALPHA_CLIP(texureColor, input.color)
-
fixed4 pixel = calculatePixel(texureColor, input.color);
-
+
COLORISE(pixel)
APPLY_FOG(pixel, input)
-
+
return pixel;
}
-#endif // SPRITE_UNLIT_INCLUDED
\ No newline at end of file
+#endif // SPRITE_UNLIT_INCLUDED
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteVertexLighting.cginc b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteVertexLighting.cginc
index 3d8ee540e..0fc7ad49d 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteVertexLighting.cginc
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Sprite/CGIncludes/SpriteVertexLighting.cginc
@@ -399,10 +399,10 @@ VertexOutput vert(VertexInput input)
////////////////////////////////////////
// Fragment program
//
-
fixed4 frag(VertexOutput input) : SV_Target
{
fixed4 texureColor = calculateTexturePixel(input.texcoord.xy);
+ RETURN_UNLIT_IF_ADDITIVE_SLOT(texureColor, input.color) // shall be called before ALPHA_CLIP
ALPHA_CLIP(texureColor, input.color)
#if defined(PER_PIXEL_LIGHTING)
diff --git a/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/Shaders/CGIncludes/Spine-SkeletonLit-ForwardPass-LW.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/Shaders/CGIncludes/Spine-SkeletonLit-ForwardPass-LW.hlsl
index f84e8f0f4..a2caada38 100644
--- a/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/Shaders/CGIncludes/Spine-SkeletonLit-ForwardPass-LW.hlsl
+++ b/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/Shaders/CGIncludes/Spine-SkeletonLit-ForwardPass-LW.hlsl
@@ -59,6 +59,8 @@ VertexOutput vert(appdata v) {
float3 positionWS = TransformObjectToWorld(v.pos);
half3 fixedNormal = half3(0, 0, -1);
half3 normalWS = normalize(mul((float3x3)unity_ObjectToWorld, fixedNormal));
+ o.uv0 = v.uv0;
+ o.pos = TransformWorldToHClip(positionWS);
#ifdef _DOUBLE_SIDED_LIGHTING
// unfortunately we have to compute the sign here in the vertex shader
@@ -69,7 +71,16 @@ VertexOutput vert(appdata v) {
#endif
half3 shadowedColor;
- color.rgb = LightweightLightVertexSimplified(positionWS, normalWS, shadowedColor);
+ if (color.a == 0) {
+ o.color = color;
+#if defined(SKELETONLIT_RECEIVE_SHADOWS)
+ o.shadowedColor = color;
+ o.shadowCoord = float4(0, 0, 0, 0);
+#endif
+ return o;
+ }
+
+ color.rgb *= LightweightLightVertexSimplified(positionWS, normalWS, shadowedColor);
#if defined(SKELETONLIT_RECEIVE_SHADOWS)
o.shadowedColor = shadowedColor;
#endif
@@ -78,10 +89,7 @@ VertexOutput vert(appdata v) {
half3 vertexSH;
OUTPUT_SH(normalWS.xyz, vertexSH);
color.rgb += SAMPLE_GI(input.lightmapUV, vertexSH, normalWS);
-
o.color = color;
- o.uv0 = v.uv0;
- o.pos = TransformWorldToHClip(positionWS);
#if defined(SKELETONLIT_RECEIVE_SHADOWS)
VertexPositionInputs vertexInput;
@@ -94,22 +102,19 @@ VertexOutput vert(appdata v) {
half4 frag(VertexOutput i) : SV_Target{
half4 tex = tex2D(_MainTex, i.uv0);
- half4 col;
+ #if defined(_STRAIGHT_ALPHA_INPUT)
+ tex.rgb *= tex.a;
+ #endif
+
+ if (i.color.a == 0)
+ return tex * i.color;
#if defined(SKELETONLIT_RECEIVE_SHADOWS)
half shadowAttenuation = MainLightRealtimeShadow(i.shadowCoord);
i.color.rgb = lerp(i.shadowedColor, i.color.rgb, shadowAttenuation);
#endif
-
- #if defined(_STRAIGHT_ALPHA_INPUT)
- col.rgb = tex.rgb * i.color.rgb * tex.a;
- #else
- col.rgb = tex.rgb * i.color.rgb;
- #endif
-
-
- col.a = tex.a * i.color.a;
- return col;
+ return tex * i.color;
}
+
#endif
diff --git a/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/Shaders/CGIncludes/Spine-Sprite-ForwardPass-LW.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/Shaders/CGIncludes/Spine-Sprite-ForwardPass-LW.hlsl
index ece0c54b3..403db1599 100644
--- a/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/Shaders/CGIncludes/Spine-Sprite-ForwardPass-LW.hlsl
+++ b/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/Shaders/CGIncludes/Spine-Sprite-ForwardPass-LW.hlsl
@@ -212,6 +212,7 @@ half4 ForwardPassFragmentSprite(VertexOutputLWRP input) : SV_Target
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
fixed4 texureColor = calculateTexturePixel(input.texcoord.xy);
+ RETURN_UNLIT_IF_ADDITIVE_SLOT(texureColor, input.vertexColor) // shall be called before ALPHA_CLIP
ALPHA_CLIP(texureColor, input.vertexColor)
// fill out InputData struct
diff --git a/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/package-2019.1.json b/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/package-2019.1.json
index 929bc1cff..b309970af 100644
--- a/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/package-2019.1.json
+++ b/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/package-2019.1.json
@@ -2,7 +2,7 @@
"name": "com.esotericsoftware.spine.lwrp-shaders",
"displayName": "Spine Lightweight RP Shaders",
"description": "This plugin provides lightweight render pipeline (LWRP) shaders for the spine-unity runtime.\n\nPrerequisites:\nIt requires a working installation of the spine-unity runtime, version 3.8.\n(See http://esotericsoftware.com/git/spine-runtimes/spine-unity)",
- "version": "3.8.1",
+ "version": "3.8.2",
"unity": "2019.1",
"author": {
"name": "Esoteric Software",
diff --git a/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/package-2019.2.json b/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/package-2019.2.json
index 0224c58af..fc57d566c 100644
--- a/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/package-2019.2.json
+++ b/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/package-2019.2.json
@@ -2,7 +2,7 @@
"name": "com.esotericsoftware.spine.lwrp-shaders",
"displayName": "Spine Lightweight RP Shaders",
"description": "This plugin provides lightweight render pipeline (LWRP) shaders for the spine-unity runtime.\n\nPrerequisites:\nIt requires a working installation of the spine-unity runtime, version 3.8.\n(See http://esotericsoftware.com/git/spine-runtimes/spine-unity)",
- "version": "3.8.1",
+ "version": "3.8.2",
"unity": "2019.2",
"author": {
"name": "Esoteric Software",
diff --git a/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/package.json b/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/package.json
index 929bc1cff..b309970af 100644
--- a/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/package.json
+++ b/spine-unity/Modules/com.esotericsoftware.spine.lwrp-shaders/package.json
@@ -2,7 +2,7 @@
"name": "com.esotericsoftware.spine.lwrp-shaders",
"displayName": "Spine Lightweight RP Shaders",
"description": "This plugin provides lightweight render pipeline (LWRP) shaders for the spine-unity runtime.\n\nPrerequisites:\nIt requires a working installation of the spine-unity runtime, version 3.8.\n(See http://esotericsoftware.com/git/spine-runtimes/spine-unity)",
- "version": "3.8.1",
+ "version": "3.8.2",
"unity": "2019.1",
"author": {
"name": "Esoteric Software",
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 01aba038d..ac32a9498 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
@@ -87,7 +87,9 @@ VertexOutputSpriteURP2D CombinedShapeLightVertex(VertexInput input)
half4 CombinedShapeLightFragment(VertexOutputSpriteURP2D input) : SV_Target
{
fixed4 texureColor = calculateTexturePixel(input.texcoord.xy);
+ RETURN_UNLIT_IF_ADDITIVE_SLOT(texureColor, input.vertexColor) // shall be called before ALPHA_CLIP
ALPHA_CLIP(texureColor, input.vertexColor)
+
texureColor *= input.vertexColor;
half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, input.texcoord.xy);
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 7cf903eeb..4a4c7a70e 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
@@ -98,14 +98,13 @@
half4 CombinedShapeLightFragment(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;
+ tex.rgb *= tex.a;
#endif
- main.a = tex.a * i.color.a;
+
+ half4 main = tex * i.color;
+ if (i.color.a == 0)
+ return main;
half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, i.uv);
return CombinedShapeLightShared(main, mask, i.lightingUV);
diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-SkeletonLit-ForwardPass-URP.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-SkeletonLit-ForwardPass-URP.hlsl
index d73bd55e5..453986e04 100644
--- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-SkeletonLit-ForwardPass-URP.hlsl
+++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-SkeletonLit-ForwardPass-URP.hlsl
@@ -59,6 +59,8 @@ VertexOutput vert(appdata v) {
float3 positionWS = TransformObjectToWorld(v.pos);
half3 fixedNormal = half3(0, 0, -1);
half3 normalWS = normalize(mul((float3x3)unity_ObjectToWorld, fixedNormal));
+ o.uv0 = v.uv0;
+ o.pos = TransformWorldToHClip(positionWS);
#ifdef _DOUBLE_SIDED_LIGHTING
// unfortunately we have to compute the sign here in the vertex shader
@@ -69,7 +71,16 @@ VertexOutput vert(appdata v) {
#endif
half3 shadowedColor;
- color.rgb = LightweightLightVertexSimplified(positionWS, normalWS, shadowedColor);
+ if (color.a == 0) {
+ o.color = color;
+#if defined(SKELETONLIT_RECEIVE_SHADOWS)
+ o.shadowedColor = color;
+ o.shadowCoord = float4(0, 0, 0, 0);
+#endif
+ return o;
+ }
+
+ color.rgb *= LightweightLightVertexSimplified(positionWS, normalWS, shadowedColor);
#if defined(SKELETONLIT_RECEIVE_SHADOWS)
o.shadowedColor = shadowedColor;
#endif
@@ -78,10 +89,7 @@ VertexOutput vert(appdata v) {
half3 vertexSH;
OUTPUT_SH(normalWS.xyz, vertexSH);
color.rgb += SAMPLE_GI(input.lightmapUV, vertexSH, normalWS);
-
o.color = color;
- o.uv0 = v.uv0;
- o.pos = TransformWorldToHClip(positionWS);
#if defined(SKELETONLIT_RECEIVE_SHADOWS)
VertexPositionInputs vertexInput;
@@ -94,22 +102,18 @@ VertexOutput vert(appdata v) {
half4 frag(VertexOutput i) : SV_Target{
half4 tex = tex2D(_MainTex, i.uv0);
- half4 col;
+ #if defined(_STRAIGHT_ALPHA_INPUT)
+ tex.rgb *= tex.a;
+ #endif
+
+ if (i.color.a == 0)
+ return tex * i.color;
#if defined(SKELETONLIT_RECEIVE_SHADOWS)
half shadowAttenuation = MainLightRealtimeShadow(i.shadowCoord);
i.color.rgb = lerp(i.shadowedColor, i.color.rgb, shadowAttenuation);
#endif
-
- #if defined(_STRAIGHT_ALPHA_INPUT)
- col.rgb = tex.rgb * i.color.rgb * tex.a;
- #else
- col.rgb = tex.rgb * i.color.rgb;
- #endif
-
-
- col.a = tex.a * i.color.a;
- return col;
+ return tex * i.color;
}
#endif
diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-ForwardPass-URP.hlsl b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-ForwardPass-URP.hlsl
index cb578cba9..f10b92bec 100644
--- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-ForwardPass-URP.hlsl
+++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/Shaders/Include/Spine-Sprite-ForwardPass-URP.hlsl
@@ -222,6 +222,7 @@ half4 ForwardPassFragmentSprite(VertexOutputLWRP input) : SV_Target
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
fixed4 texureColor = calculateTexturePixel(input.texcoord.xy);
+ RETURN_UNLIT_IF_ADDITIVE_SLOT(texureColor, input.vertexColor) // shall be called before ALPHA_CLIP
ALPHA_CLIP(texureColor, input.vertexColor)
// fill out InputData struct
diff --git a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/package.json b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/package.json
index 7aa32495a..dd02ce173 100644
--- a/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/package.json
+++ b/spine-unity/Modules/com.esotericsoftware.spine.urp-shaders/package.json
@@ -2,7 +2,7 @@
"name": "com.esotericsoftware.spine.urp-shaders",
"displayName": "Spine Universal RP Shaders",
"description": "This plugin provides universal render pipeline (URP) shaders for the spine-unity runtime.\n\nPrerequisites:\nIt requires a working installation of the spine-unity runtime, version 3.8.\n(See http://esotericsoftware.com/git/spine-runtimes/spine-unity)",
- "version": "3.8.1",
+ "version": "3.8.2",
"unity": "2019.3",
"author": {
"name": "Esoteric Software",