From 7e440c28aec2d149ae47e1fc8852fa701c3dbed4 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Wed, 28 Sep 2022 21:01:59 +0200 Subject: [PATCH] [unity] Moved common Spine/Blend shader functionality to shared include files. Closes #1721. --- .../Spine-Skeleton-PMA-Additive.shader | 69 +----------------- .../Spine-Skeleton-PMA-Multiply.shader | 71 +------------------ .../Spine-Skeleton-PMA-Screen.shader | 71 +------------------ .../Spine-BlendModes-NormalPass.cginc | 42 +++++++++++ .../Spine-BlendModes-NormalPass.cginc.meta | 10 +++ .../Spine-BlendModes-ShadowCasterPass.cginc | 34 +++++++++ ...ine-BlendModes-ShadowCasterPass.cginc.meta | 10 +++ 7 files changed, 104 insertions(+), 203 deletions(-) create mode 100644 spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-BlendModes-NormalPass.cginc create mode 100644 spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-BlendModes-NormalPass.cginc.meta create mode 100644 spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-BlendModes-ShadowCasterPass.cginc create mode 100644 spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-BlendModes-ShadowCasterPass.cginc.meta diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/BlendModes/Spine-Skeleton-PMA-Additive.shader b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/BlendModes/Spine-Skeleton-PMA-Additive.shader index 744ccb38e..95f608a33 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/BlendModes/Spine-Skeleton-PMA-Additive.shader +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/BlendModes/Spine-Skeleton-PMA-Additive.shader @@ -43,45 +43,8 @@ Shader "Spine/Blend Modes/Skeleton PMA Additive" { Pass { Name "Normal" - CGPROGRAM - #pragma shader_feature _ _STRAIGHT_ALPHA_INPUT - #pragma vertex vert - #pragma fragment frag - #include "UnityCG.cginc" - #include "../CGIncludes/Spine-Common.cginc" - uniform sampler2D _MainTex; - uniform float4 _Color; - - struct VertexInput { - float4 vertex : POSITION; - float2 uv : TEXCOORD0; - float4 vertexColor : COLOR; - }; - - struct VertexOutput { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float4 vertexColor : COLOR; - }; - - VertexOutput vert (VertexInput v) { - VertexOutput o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv = v.uv; - o.vertexColor = PMAGammaToTargetSpace(v.vertexColor) * float4(_Color.rgb * _Color.a, _Color.a); // Combine a PMA version of _Color with vertexColor. - return o; - } - - 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); - } + #include "../CGIncludes/Spine-BlendModes-NormalPass.cginc" ENDCG } @@ -94,35 +57,7 @@ Shader "Spine/Blend Modes/Skeleton PMA Additive" { ZTest LEqual CGPROGRAM - #pragma vertex vert - #pragma fragment frag - #pragma multi_compile_shadowcaster - #pragma fragmentoption ARB_precision_hint_fastest - #include "UnityCG.cginc" - struct v2f { - V2F_SHADOW_CASTER; - float4 uvAndAlpha : TEXCOORD1; - }; - - uniform float4 _MainTex_ST; - - v2f vert (appdata_base v, float4 vertexColor : COLOR) { - v2f o; - TRANSFER_SHADOW_CASTER(o) - o.uvAndAlpha.xy = TRANSFORM_TEX(v.texcoord, _MainTex); - o.uvAndAlpha.z = 0; - o.uvAndAlpha.a = vertexColor.a; - return o; - } - - uniform sampler2D _MainTex; - uniform fixed _Cutoff; - - float4 frag (v2f i) : SV_Target { - fixed4 texcol = tex2D(_MainTex, i.uvAndAlpha.xy); - clip(texcol.a * i.uvAndAlpha.a - _Cutoff); - SHADOW_CASTER_FRAGMENT(i) - } + #include "../CGIncludes/Spine-BlendModes-ShadowCasterPass.cginc" ENDCG } } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/BlendModes/Spine-Skeleton-PMA-Multiply.shader b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/BlendModes/Spine-Skeleton-PMA-Multiply.shader index 620487ac6..0fa270294 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/BlendModes/Spine-Skeleton-PMA-Multiply.shader +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/BlendModes/Spine-Skeleton-PMA-Multiply.shader @@ -43,86 +43,21 @@ Shader "Spine/Blend Modes/Skeleton PMA Multiply" { Pass { Name "Normal" - CGPROGRAM - #pragma shader_feature _ _STRAIGHT_ALPHA_INPUT - #pragma vertex vert - #pragma fragment frag - #include "UnityCG.cginc" - #include "../CGIncludes/Spine-Common.cginc" - uniform sampler2D _MainTex; - uniform float4 _Color; - - struct VertexInput { - float4 vertex : POSITION; - float2 uv : TEXCOORD0; - float4 vertexColor : COLOR; - }; - - struct VertexOutput { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float4 vertexColor : COLOR; - }; - - VertexOutput vert (VertexInput v) { - VertexOutput o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv = v.uv; - o.vertexColor = PMAGammaToTargetSpace(v.vertexColor) * float4(_Color.rgb * _Color.a, _Color.a); // Combine a PMA version of _Color with vertexColor. - return o; - } - - 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); - } + #include "../CGIncludes/Spine-BlendModes-NormalPass.cginc" ENDCG } Pass { Name "Caster" - Tags { "LightMode"="ShadowCaster" } + Tags { "LightMode" = "ShadowCaster" } Offset 1, 1 ZWrite On ZTest LEqual CGPROGRAM - #pragma vertex vert - #pragma fragment frag - #pragma multi_compile_shadowcaster - #pragma fragmentoption ARB_precision_hint_fastest - #include "UnityCG.cginc" - struct v2f { - V2F_SHADOW_CASTER; - float4 uvAndAlpha : TEXCOORD1; - }; - - uniform float4 _MainTex_ST; - - v2f vert (appdata_base v, float4 vertexColor : COLOR) { - v2f o; - TRANSFER_SHADOW_CASTER(o) - o.uvAndAlpha.xy = TRANSFORM_TEX(v.texcoord, _MainTex); - o.uvAndAlpha.z = 0; - o.uvAndAlpha.a = vertexColor.a; - return o; - } - - uniform sampler2D _MainTex; - uniform fixed _Cutoff; - - float4 frag (v2f i) : SV_Target { - fixed4 texcol = tex2D(_MainTex, i.uvAndAlpha.xy); - clip(texcol.a * i.uvAndAlpha.a - _Cutoff); - SHADOW_CASTER_FRAGMENT(i) - } + #include "../CGIncludes/Spine-BlendModes-ShadowCasterPass.cginc" ENDCG } } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/BlendModes/Spine-Skeleton-PMA-Screen.shader b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/BlendModes/Spine-Skeleton-PMA-Screen.shader index adc608447..9ddb59854 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/BlendModes/Spine-Skeleton-PMA-Screen.shader +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/BlendModes/Spine-Skeleton-PMA-Screen.shader @@ -43,86 +43,21 @@ Shader "Spine/Blend Modes/Skeleton PMA Screen" { Pass { Name "Normal" - CGPROGRAM - #pragma shader_feature _ _STRAIGHT_ALPHA_INPUT - #pragma vertex vert - #pragma fragment frag - #include "UnityCG.cginc" - #include "../CGIncludes/Spine-Common.cginc" - uniform sampler2D _MainTex; - uniform float4 _Color; - - struct VertexInput { - float4 vertex : POSITION; - float2 uv : TEXCOORD0; - float4 vertexColor : COLOR; - }; - - struct VertexOutput { - float4 pos : SV_POSITION; - float2 uv : TEXCOORD0; - float4 vertexColor : COLOR; - }; - - VertexOutput vert (VertexInput v) { - VertexOutput o; - o.pos = UnityObjectToClipPos(v.vertex); - o.uv = v.uv; - o.vertexColor = PMAGammaToTargetSpace(v.vertexColor) * float4(_Color.rgb * _Color.a, _Color.a); // Combine a PMA version of _Color with vertexColor. - return o; - } - - 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); - } + #include "../CGIncludes/Spine-BlendModes-NormalPass.cginc" ENDCG } Pass { Name "Caster" - Tags { "LightMode"="ShadowCaster" } + Tags { "LightMode" = "ShadowCaster" } Offset 1, 1 ZWrite On ZTest LEqual CGPROGRAM - #pragma vertex vert - #pragma fragment frag - #pragma multi_compile_shadowcaster - #pragma fragmentoption ARB_precision_hint_fastest - #include "UnityCG.cginc" - struct v2f { - V2F_SHADOW_CASTER; - float4 uvAndAlpha : TEXCOORD1; - }; - - uniform float4 _MainTex_ST; - - v2f vert (appdata_base v, float4 vertexColor : COLOR) { - v2f o; - TRANSFER_SHADOW_CASTER(o) - o.uvAndAlpha.xy = TRANSFORM_TEX(v.texcoord, _MainTex); - o.uvAndAlpha.z = 0; - o.uvAndAlpha.a = vertexColor.a; - return o; - } - - uniform sampler2D _MainTex; - uniform fixed _Cutoff; - - float4 frag (v2f i) : SV_Target { - fixed4 texcol = tex2D(_MainTex, i.uvAndAlpha.xy); - clip(texcol.a * i.uvAndAlpha.a - _Cutoff); - SHADOW_CASTER_FRAGMENT(i) - } + #include "../CGIncludes/Spine-BlendModes-ShadowCasterPass.cginc" ENDCG } } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-BlendModes-NormalPass.cginc b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-BlendModes-NormalPass.cginc new file mode 100644 index 000000000..9f6f85b53 --- /dev/null +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-BlendModes-NormalPass.cginc @@ -0,0 +1,42 @@ +#ifndef BLENDMODES_NORMAL_PASS_INCLUDED +#define BLENDMODES_NORMAL_PASS_INCLUDED + +#pragma shader_feature _ _STRAIGHT_ALPHA_INPUT +#pragma vertex vert +#pragma fragment frag +#include "UnityCG.cginc" +#include "../CGIncludes/Spine-Common.cginc" +uniform sampler2D _MainTex; +uniform float4 _Color; + +struct VertexInput { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + float4 vertexColor : COLOR; +}; + +struct VertexOutput { + float4 pos : SV_POSITION; + float2 uv : TEXCOORD0; + float4 vertexColor : COLOR; +}; + +VertexOutput vert(VertexInput v) { + VertexOutput o; + o.pos = UnityObjectToClipPos(v.vertex); + o.uv = v.uv; + o.vertexColor = PMAGammaToTargetSpace(v.vertexColor) * float4(_Color.rgb * _Color.a, _Color.a); // Combine a PMA version of _Color with vertexColor. + return o; +} + +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); +} + +#endif diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-BlendModes-NormalPass.cginc.meta b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-BlendModes-NormalPass.cginc.meta new file mode 100644 index 000000000..a85a32101 --- /dev/null +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-BlendModes-NormalPass.cginc.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6e28a50646b0e9542a1c93c2d9d993d0 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-BlendModes-ShadowCasterPass.cginc b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-BlendModes-ShadowCasterPass.cginc new file mode 100644 index 000000000..a6c22c458 --- /dev/null +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-BlendModes-ShadowCasterPass.cginc @@ -0,0 +1,34 @@ +#ifndef BLENDMODES_SHADOWCASTER_PASS_INCLUDED +#define BLENDMODES_SHADOWCASTER_PASS_INCLUDED + +#pragma vertex vert +#pragma fragment frag +#pragma multi_compile_shadowcaster +#pragma fragmentoption ARB_precision_hint_fastest +#include "UnityCG.cginc" +struct v2f { + V2F_SHADOW_CASTER; + float4 uvAndAlpha : TEXCOORD1; +}; + +uniform float4 _MainTex_ST; + +v2f vert(appdata_base v, float4 vertexColor : COLOR) { + v2f o; + TRANSFER_SHADOW_CASTER(o) + o.uvAndAlpha.xy = TRANSFORM_TEX(v.texcoord, _MainTex); + o.uvAndAlpha.z = 0; + o.uvAndAlpha.a = vertexColor.a; + return o; +} + +uniform sampler2D _MainTex; +uniform fixed _Cutoff; + +float4 frag(v2f i) : SV_Target{ + fixed4 texcol = tex2D(_MainTex, i.uvAndAlpha.xy); + clip(texcol.a* i.uvAndAlpha.a - _Cutoff); + SHADOW_CASTER_FRAGMENT(i) +} + +#endif diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-BlendModes-ShadowCasterPass.cginc.meta b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-BlendModes-ShadowCasterPass.cginc.meta new file mode 100644 index 000000000..c1d2f4039 --- /dev/null +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Shaders/CGIncludes/Spine-BlendModes-ShadowCasterPass.cginc.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 76beace455f83a8488bf044605212b2c +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: