[unity] Now supporting correct CanvasGroup alpha blending at SkeletonGraphic shaders via an additional parameter CanvasGroup Compatible. Closes #1576.

This commit is contained in:
Harald Csaszar 2019-12-16 14:50:03 +01:00
parent a9bdb3cd4f
commit 9d46a0c8bf
4 changed files with 16 additions and 1 deletions

View File

@ -6,6 +6,7 @@ Shader "Spine/Outline/SkeletonGraphic"
{
[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
[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)
[HideInInspector][Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp ("Stencil Comparison", Float) = 8

View File

@ -6,6 +6,7 @@ Shader "Spine/Outline/SkeletonGraphic Tint Black"
{
[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
[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)

View File

@ -6,6 +6,7 @@ Shader "Spine/SkeletonGraphic Tint Black"
{
[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
[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)
@ -64,6 +65,7 @@ Shader "Spine/SkeletonGraphic Tint Black"
CGPROGRAM
#pragma shader_feature _ _STRAIGHT_ALPHA_INPUT
#pragma shader_feature _ _CANVAS_GROUP_COMPATIBLE
#pragma vertex vert
#pragma fragment frag
@ -128,7 +130,12 @@ Shader "Spine/SkeletonGraphic Tint Black"
clip (texColor.a - 0.001);
#endif
return (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);
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
// CanvasGroup alpha sets vertex color alpha, but does not premultiply it to rgb components.
color.rgb *= IN.color.a;
#endif
return color;
}
ENDCG
}

View File

@ -6,6 +6,7 @@ Shader "Spine/SkeletonGraphic"
{
[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
[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)
[HideInInspector][Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp ("Stencil Comparison", Float) = 8
@ -62,6 +63,7 @@ Shader "Spine/SkeletonGraphic"
CGPROGRAM
#pragma shader_feature _ _STRAIGHT_ALPHA_INPUT
#pragma shader_feature _ _CANVAS_GROUP_COMPATIBLE
#pragma vertex vert
#pragma fragment frag
#pragma target 2.0
@ -119,6 +121,10 @@ Shader "Spine/SkeletonGraphic"
#endif
half4 color = (texColor + _TextureSampleAdd) * IN.color;
#ifdef _CANVAS_GROUP_COMPATIBLE
// CanvasGroup alpha sets vertex color alpha, but does not premultiply it to rgb components.
color.rgb *= IN.color.a;
#endif
color *= UnityGet2DClipping(IN.worldPosition.xy, _ClipRect);