Browse Source

[unity] Added `Spine/SkeletonGraphic Fill` shader to provide functionality of `Spine/Skeleton Fill` shader for `SkeletonGraphic`.

Harald Csaszar 2 years ago
parent
commit
0a6a6962c7

+ 1 - 0
CHANGELOG.md

@@ -93,6 +93,7 @@
   * Added `SkeletonAnimationMulti` sample component methods `SetActiveSkeleton(int index)` and getter property `SkeletonAnimations` to more easily apply changes at all SkeletonAnimation instances instead of only the active one.
   * Added `SkeletonAnimationMulti` sample component methods `SetActiveSkeleton(int index)` and getter property `SkeletonAnimations` to more easily apply changes at all SkeletonAnimation instances instead of only the active one.
   * PMA textures now have `sRGB (Color Texture)` disabled by default, the preset template `PMATexturePreset.preset` has been adjusted accordingly. As PMA textures are only allowed with Gamma color space, `sRGB (Color Texture)` shall be disabled to prevent border artifacts when mipmaps are enabled. In Gamma color space having this setting disabled has no drawbacks, only benefits.
   * PMA textures now have `sRGB (Color Texture)` disabled by default, the preset template `PMATexturePreset.preset` has been adjusted accordingly. As PMA textures are only allowed with Gamma color space, `sRGB (Color Texture)` shall be disabled to prevent border artifacts when mipmaps are enabled. In Gamma color space having this setting disabled has no drawbacks, only benefits.
   * `SkeletonRenderTexture` and `SkeletonGraphicRenderTexture` components now support automatic down-scaling when required size on screen exceeds `Max Render Texture Size`.
   * `SkeletonRenderTexture` and `SkeletonGraphicRenderTexture` components now support automatic down-scaling when required size on screen exceeds `Max Render Texture Size`.
+  * Added `Spine/SkeletonGraphic Fill` shader to provide functionality of `Spine/Skeleton Fill` shader for `SkeletonGraphic`.
  
  
 * **Breaking changes**
 * **Breaking changes**
   * Made `SkeletonGraphic.unscaledTime` parameter protected, use the new property `UnscaledTime` instead.
   * Made `SkeletonGraphic.unscaledTime` parameter protected, use the new property `UnscaledTime` instead.

+ 8 - 0
spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/SkeletonGraphic/CGIncludes/Spine-SkeletonGraphic-NormalPass.cginc

@@ -26,6 +26,11 @@ fixed4 _Color;
 fixed4 _TextureSampleAdd;
 fixed4 _TextureSampleAdd;
 float4 _ClipRect;
 float4 _ClipRect;
 
 
+#ifdef ENABLE_FILL
+float4 _FillColor;
+float _FillPhase;
+#endif
+
 VertexOutput vert (VertexInput IN) {
 VertexOutput vert (VertexInput IN) {
 	VertexOutput OUT;
 	VertexOutput OUT;
 
 
@@ -73,6 +78,9 @@ fixed4 frag (VertexOutput IN) : SV_Target
 	clip (color.a - 0.001);
 	clip (color.a - 0.001);
 	#endif
 	#endif
 
 
+	#ifdef ENABLE_FILL
+	color.rgb = lerp(color.rgb, (_FillColor.rgb * color.a), _FillPhase); // make sure to PMA _FillColor.
+	#endif
 	return color;
 	return color;
 }
 }
 
 

+ 78 - 0
spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/SkeletonGraphic/Spine-SkeletonGraphic-Fill.shader

@@ -0,0 +1,78 @@
+Shader "Spine/SkeletonGraphic Fill"
+{
+	Properties
+	{
+		_FillColor("FillColor", Color) = (1,1,1,1)
+		_FillPhase("FillPhase", Range(0, 1)) = 0
+		[PerRendererData] _MainTex("Sprite Texture", 2D) = "white" {}
+		[Toggle(_STRAIGHT_ALPHA_INPUT)] _StraightAlphaInput("Straight Alpha Texture", Int) = 0
+		[Toggle(_CANVAS_GROUP_COMPATIBLE)] _CanvasGroupCompatible("CanvasGroup Compatible", Int) = 1
+		_Color("Tint", Color) = (1,1,1,1)
+
+		[HideInInspector][Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp("Stencil Comparison", Float) = 8
+		[HideInInspector] _Stencil("Stencil ID", Float) = 0
+		[HideInInspector][Enum(UnityEngine.Rendering.StencilOp)] _StencilOp("Stencil Operation", Float) = 0
+		[HideInInspector] _StencilWriteMask("Stencil Write Mask", Float) = 255
+		[HideInInspector] _StencilReadMask("Stencil Read Mask", Float) = 255
+
+		[HideInInspector] _ColorMask("Color Mask", Float) = 15
+
+		[Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip("Use Alpha Clip", Float) = 0
+
+			// Outline properties are drawn via custom editor.
+			[HideInInspector] _OutlineWidth("Outline Width", Range(0,8)) = 3.0
+			[HideInInspector] _OutlineColor("Outline Color", Color) = (1,1,0,1)
+			[HideInInspector] _OutlineReferenceTexWidth("Reference Texture Width", Int) = 1024
+			[HideInInspector] _ThresholdEnd("Outline Threshold", Range(0,1)) = 0.25
+			[HideInInspector] _OutlineSmoothness("Outline Smoothness", Range(0,1)) = 1.0
+			[HideInInspector][MaterialToggle(_USE8NEIGHBOURHOOD_ON)] _Use8Neighbourhood("Sample 8 Neighbours", Float) = 1
+			[HideInInspector] _OutlineOpaqueAlpha("Opaque Alpha", Range(0,1)) = 1.0
+			[HideInInspector] _OutlineMipLevel("Outline Mip Level", Range(0,3)) = 0
+	}
+
+		SubShader
+		{
+			Tags
+			{
+				"Queue" = "Transparent"
+				"IgnoreProjector" = "True"
+				"RenderType" = "Transparent"
+				"PreviewType" = "Plane"
+				"CanUseSpriteAtlas" = "True"
+			}
+
+			Stencil
+			{
+				Ref[_Stencil]
+				Comp[_StencilComp]
+				Pass[_StencilOp]
+				ReadMask[_StencilReadMask]
+				WriteMask[_StencilWriteMask]
+			}
+
+			Cull Off
+			Lighting Off
+			ZWrite Off
+			ZTest[unity_GUIZTestMode]
+			Fog { Mode Off }
+			Blend One OneMinusSrcAlpha
+			ColorMask[_ColorMask]
+
+			Pass
+			{
+				Name "Normal"
+
+			CGPROGRAM
+				#pragma shader_feature _ _STRAIGHT_ALPHA_INPUT
+				#pragma shader_feature _ _CANVAS_GROUP_COMPATIBLE
+				#pragma vertex vert
+				#pragma fragment frag
+				#pragma target 2.0
+
+				#define ENABLE_FILL
+				#include "CGIncludes/Spine-SkeletonGraphic-NormalPass.cginc"
+			ENDCG
+			}
+		}
+			CustomEditor "SpineShaderWithOutlineGUI"
+}

+ 10 - 0
spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/SkeletonGraphic/Spine-SkeletonGraphic-Fill.shader.meta

@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: c02377d9afbb50e49ab27049e59fb5f8
+ShaderImporter:
+  externalObjects: {}
+  defaultTextures: []
+  nonModifiableTextures: []
+  preprocessorOverride: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: