diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-Skeleton-Tint-Common.cginc b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-Skeleton-Tint-Common.cginc new file mode 100644 index 000000000..9d9989b07 --- /dev/null +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-Skeleton-Tint-Common.cginc @@ -0,0 +1,27 @@ +#ifndef SKELETON_TINT_COMMON_INCLUDED +#define SKELETON_TINT_COMMON_INCLUDED + +float4 fragTintedColor(float4 texColor, float3 darkTintColor, float4 lightTintColor, float darkColorAlpha) { + + float a = texColor.a * lightTintColor.a; + +#if !defined(_STRAIGHT_ALPHA_INPUT) + float3 texDarkColor = (texColor.a - texColor.rgb); +#else + float3 texDarkColor = (1 - texColor.rgb); +#endif + float3 darkColor = texDarkColor * darkTintColor.rgb; + float3 lightColor = texColor.rgb * lightTintColor.rgb; + + float4 fragColor = float4(darkColor + lightColor, a); +#if defined(_STRAIGHT_ALPHA_INPUT) + fragColor.rgb *= fragColor.a; +#endif + +#if defined(_DARK_COLOR_ALPHA_ADDITIVE) + fragColor.a = a * (1 - darkColorAlpha); +#endif + return fragColor; +} + +#endif diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-Skeleton-Tint-Common.cginc.meta b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-Skeleton-Tint-Common.cginc.meta new file mode 100644 index 000000000..333f4c1fc --- /dev/null +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-Skeleton-Tint-Common.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: cc9439c8e75fb7e4c82ad725b649b047 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/SkeletonGraphic/Spine-SkeletonGraphic-TintBlack.shader b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/SkeletonGraphic/Spine-SkeletonGraphic-TintBlack.shader index 0e731a730..9b9524810 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/SkeletonGraphic/Spine-SkeletonGraphic-TintBlack.shader +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/SkeletonGraphic/Spine-SkeletonGraphic-TintBlack.shader @@ -8,8 +8,9 @@ Shader "Spine/SkeletonGraphic Tint Black" [Toggle(_STRAIGHT_ALPHA_INPUT)] _StraightAlphaInput("Straight Alpha Texture", Int) = 0 [Toggle(_CANVAS_GROUP_COMPATIBLE)] _CanvasGroupCompatible("CanvasGroup Compatible", Int) = 0 - _Color ("Tint", Color) = (1,1,1,1) - _Black ("Black Point", Color) = (0,0,0,0) + _Color ("Tint Color", Color) = (1,1,1,1) + _Black ("Dark Color", Color) = (0,0,0,0) + [Toggle(_DARK_COLOR_ALPHA_ADDITIVE)] _DarkColorAlphaAdditive("Additive DarkColor.A", Int) = 0 [HideInInspector][Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp ("Stencil Comparison", Float) = 8 [HideInInspector] _Stencil ("Stencil ID", Float) = 0 @@ -66,6 +67,7 @@ Shader "Spine/SkeletonGraphic Tint Black" CGPROGRAM #pragma shader_feature _ _STRAIGHT_ALPHA_INPUT #pragma shader_feature _ _CANVAS_GROUP_COMPATIBLE + #pragma shader_feature _ _DARK_COLOR_ALPHA_ADDITIVE #pragma vertex vert #pragma fragment frag @@ -87,9 +89,8 @@ Shader "Spine/SkeletonGraphic Tint Black" float4 vertex : SV_POSITION; fixed4 color : COLOR; half2 texcoord : TEXCOORD0; - float2 uv1 : TEXCOORD1; - float2 uv2 : TEXCOORD2; - float4 worldPosition : TEXCOORD3; + float3 darkColor : TEXCOORD1; + float4 worldPosition : TEXCOORD2; UNITY_VERTEX_OUTPUT_STEREO }; @@ -108,34 +109,28 @@ Shader "Spine/SkeletonGraphic Tint Black" OUT.vertex = UnityObjectToClipPos(OUT.worldPosition); OUT.texcoord = IN.texcoord; - OUT.color = IN.color * float4(_Color.rgb * _Color.a, _Color.a); // Combine a PMA version of _Color with vertexColor. - OUT.uv1 = IN.uv1; - OUT.uv2 = IN.uv2; + OUT.color = IN.color * _Color; + OUT.darkColor = float3(IN.uv1.r, IN.uv1.g, IN.uv2.r); return OUT; } sampler2D _MainTex; + #include "../CGIncludes/Spine-Skeleton-Tint-Common.cginc" fixed4 frag (VertexOutput IN) : SV_Target { half4 texColor = (tex2D(_MainTex, IN.texcoord) + _TextureSampleAdd); - - #if defined(_STRAIGHT_ALPHA_INPUT) - texColor.rgb *= texColor.a; - #endif - texColor *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect); - #ifdef UNITY_UI_ALPHACLIP - clip (texColor.a - 0.001); + clip(texColor.a - 0.001); #endif - half4 color = (texColor * IN.color) + float4(((1-texColor.rgb) * (_Black.rgb + float3(IN.uv1.r, IN.uv1.g, IN.uv2.r)) * texColor.a * _Color.a * IN.color.a), 0); - #ifdef _CANVAS_GROUP_COMPATIBLE + float4 fragColor = fragTintedColor(texColor, _Black.rgb + IN.darkColor, IN.color, _Black.a); + #ifdef _CANVAS_GROUP_COMPATIBLE // CanvasGroup alpha sets vertex color alpha, but does not premultiply it to rgb components. - color.rgb *= IN.color.a; - #endif - return color; + fragColor.rgb *= IN.color.a; + #endif + return fragColor; } ENDCG } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Spine-Skeleton-Tint.shader b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Spine-Skeleton-Tint.shader index 367ea3735..06290f609 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Spine-Skeleton-Tint.shader +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Spine-Skeleton-Tint.shader @@ -7,10 +7,11 @@ Shader "Spine/Skeleton Tint" { Properties { _Color ("Tint Color", Color) = (1,1,1,1) - _Black ("Black Point", Color) = (0,0,0,0) + _Black ("Dark Color", Color) = (0,0,0,0) [NoScaleOffset] _MainTex ("MainTex", 2D) = "black" {} [Toggle(_STRAIGHT_ALPHA_INPUT)] _StraightAlphaInput("Straight Alpha Texture", Int) = 0 _Cutoff("Shadow alpha cutoff", Range(0,1)) = 0.1 + [Toggle(_DARK_COLOR_ALPHA_ADDITIVE)] _DarkColorAlphaAdditive("Additive DarkColor.A", Int) = 0 [HideInInspector] _StencilRef("Stencil Reference", Float) = 1.0 [HideInInspector][Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp("Stencil Comparison", Float) = 8 // Set to Always as default @@ -44,6 +45,7 @@ Shader "Spine/Skeleton Tint" { CGPROGRAM #pragma shader_feature _ _STRAIGHT_ALPHA_INPUT + #pragma shader_feature _ _DARK_COLOR_ALPHA_ADDITIVE #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" @@ -67,18 +69,15 @@ Shader "Spine/Skeleton Tint" { VertexOutput o; o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.uv; - o.vertexColor = v.vertexColor * float4(_Color.rgb * _Color.a, _Color.a); // Combine a PMA version of _Color with vertexColor. + o.vertexColor = v.vertexColor * _Color; return o; } + #include "CGIncludes/Spine-Skeleton-Tint-Common.cginc" + float4 frag (VertexOutput i) : SV_Target { float4 texColor = tex2D(_MainTex, i.uv); - - #if defined(_STRAIGHT_ALPHA_INPUT) - texColor.rgb *= texColor.a; - #endif - - return (texColor * i.vertexColor) + float4(((1-texColor.rgb) * _Black.rgb * texColor.a*_Color.a*i.vertexColor.a), 0); + return fragTintedColor(texColor, _Black.rgb, i.vertexColor, _Black.a); } ENDCG } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Spine-Skeleton-TintBlack.shader b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Spine-Skeleton-TintBlack.shader index 274e34684..72b069f98 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Spine-Skeleton-TintBlack.shader +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/Spine-Skeleton-TintBlack.shader @@ -9,10 +9,11 @@ Shader "Spine/Skeleton Tint Black" { Properties { _Color ("Tint Color", Color) = (1,1,1,1) - _Black ("Black Point", Color) = (0,0,0,0) + _Black ("Dark Color", Color) = (0,0,0,0) [NoScaleOffset] _MainTex ("MainTex", 2D) = "black" {} [Toggle(_STRAIGHT_ALPHA_INPUT)] _StraightAlphaInput("Straight Alpha Texture", Int) = 0 _Cutoff ("Shadow alpha cutoff", Range(0,1)) = 0.1 + [Toggle(_DARK_COLOR_ALPHA_ADDITIVE)] _DarkColorAlphaAdditive("Additive DarkColor.A", Int) = 0 [HideInInspector] _StencilRef("Stencil Reference", Float) = 1.0 [HideInInspector][Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp("Stencil Comparison", Float) = 8 // Set to Always as default @@ -47,6 +48,7 @@ Shader "Spine/Skeleton Tint Black" { CGPROGRAM #pragma shader_feature _ _STRAIGHT_ALPHA_INPUT + #pragma shader_feature _ _DARK_COLOR_ALPHA_ADDITIVE #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" @@ -65,8 +67,7 @@ Shader "Spine/Skeleton Tint Black" { struct VertexOutput { float4 pos : SV_POSITION; float2 uv : TEXCOORD0; - float2 uv1 : TEXCOORD1; - float2 uv2 : TEXCOORD2; + float3 darkColor : TEXCOORD1; float4 vertexColor : COLOR; }; @@ -74,20 +75,16 @@ Shader "Spine/Skeleton Tint Black" { VertexOutput o; o.pos = UnityObjectToClipPos(v.vertex); // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' o.uv = v.uv; - o.vertexColor = v.vertexColor * float4(_Color.rgb * _Color.a, _Color.a); // Combine a PMA version of _Color with vertexColor. - o.uv1 = v.uv1; - o.uv2 = v.uv2; + o.vertexColor = v.vertexColor * _Color; + o.darkColor = float3(v.uv1.r, v.uv1.g, v.uv2.r); return o; } + #include "CGIncludes/Spine-Skeleton-Tint-Common.cginc" + float4 frag (VertexOutput i) : SV_Target { float4 texColor = tex2D(_MainTex, i.uv); - - #if defined(_STRAIGHT_ALPHA_INPUT) - texColor.rgb *= texColor.a; - #endif - - return (texColor * i.vertexColor) + float4(((1-texColor.rgb) * (_Black.rgb + float3(i.uv1.r, i.uv1.g, i.uv2.r)) * texColor.a*_Color.a), 0); + return fragTintedColor(texColor, _Black.rgb + i.darkColor, i.vertexColor, _Black.a); } ENDCG }