Created
March 3, 2017 15:15
Multiply blend mode shader for Spine.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Spine/Skeleton PMA Multiply | |
// - single color multiply tint | |
// - unlit | |
// - Premultiplied alpha Multiply blending | |
// - No depth, no backface culling, no fog. | |
// - ShadowCaster pass | |
Shader "Spine/Skeleton PMA Multiply" { | |
Properties { | |
_Color ("Tint Color", Color) = (1,1,1,1) | |
[NoScaleOffset] _MainTex ("MainTex", 2D) = "black" {} | |
_Cutoff ("Shadow alpha cutoff", Range(0,1)) = 0.1 | |
} | |
SubShader { | |
Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" } | |
LOD 100 | |
Fog { Mode Off } | |
Cull Off | |
ZWrite Off | |
Blend DstColor OneMinusSrcAlpha | |
Lighting Off | |
Pass { | |
CGPROGRAM | |
#pragma vertex vert | |
#pragma fragment frag | |
#include "UnityCG.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 = mul(UNITY_MATRIX_MVP, 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. | |
return o; | |
} | |
float4 frag (VertexOutput i) : COLOR { | |
float4 texColor = tex2D(_MainTex, i.uv); | |
return (texColor * i.vertexColor); | |
} | |
ENDCG | |
} | |
Pass { | |
Name "Caster" | |
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; | |
float2 uv : TEXCOORD1; | |
}; | |
uniform float4 _MainTex_ST; | |
v2f vert (appdata_base v) { | |
v2f o; | |
TRANSFER_SHADOW_CASTER(o) | |
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); | |
return o; | |
} | |
uniform sampler2D _MainTex; | |
uniform fixed _Cutoff; | |
float4 frag (v2f i) : COLOR { | |
fixed4 texcol = tex2D(_MainTex, i.uv); | |
clip(texcol.a - _Cutoff); | |
SHADOW_CASTER_FRAGMENT(i) | |
} | |
ENDCG | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment