Skip to content

Instantly share code, notes, and snippets.

@umiyuki
Last active August 12, 2016 13:01
Show Gist options
  • Save umiyuki/8588131e46fcd14b87be403cd06301eb to your computer and use it in GitHub Desktop.
Save umiyuki/8588131e46fcd14b87be403cd06301eb to your computer and use it in GitHub Desktop.
Shader "Custom/AlphaBlendLotOfTextures" {
{
Properties
{
_Texture1("Texture1", 2D) = "white" {}
_Texture2("Texture2", 2D) = "white" {}
_Texture3("Texture3", 2D) = "white" {}
_Texture4("Texture4", 2D) = "white" {}
_Texture5("Texture5", 2D) = "white" {}
_Texture6("Texture6", 2D) = "white" {}
_Texture7("Texture7", 2D) = "white" {}
_Texture8("Texture8", 2D) = "white" {}
_Texture9("Texture9", 2D) = "white" {}
_Texture10("Texture10", 2D) = "white" {}
_Texture11("Texture11", 2D) = "white" {}
_Texture12("Texture12", 2D) = "white" {}
_Texture13("Texture13", 2D) = "white" {}
_Texture14("Texture14", 2D) = "white" {}
_Texture15("Texture15", 2D) = "white" {}
}
SubShader
{
Tags{ "RenderType" = "Transparent" "Queue" = "Transparent" }
LOD 200
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha, One Zero
Lighting Off
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
//UNITY_FOG_COORDS(1)
float4 vertex : SV_POSITION;
};
sampler2D _Texture1;
sampler2D _Texture2;
sampler2D _Texture3;
sampler2D _Texture4;
sampler2D _Texture5;
sampler2D _Texture6;
sampler2D _Texture7;
sampler2D _Texture8;
sampler2D _Texture9;
sampler2D _Texture10;
sampler2D _Texture11;
sampler2D _Texture12;
sampler2D _Texture13;
sampler2D _Texture14;
sampler2D _Texture15;
v2f vert(appdata v)
{
v2f o;
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
o.uv = v.uv;
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}
fixed4 frag(v2f i) : SV_Target
{
fixed4 dst = tex2D(_Texture1, i.uv); //dst
fixed4 src = tex2D(_Texture2, i.uv); //src
fixed4 temp = fixed4(1,1,1,0);
if (src.a > 0)
{
temp.a = src.a + dst.a * (1 - src.a);
if (temp.a > 0)
{
temp.rgb = ((src.rgb * src.a) + (dst.rgb * (1 - src.a) * dst.a)) / temp.a;
}
}
else
{
temp = dst;
}
src = tex2D(_Texture3, i.uv);
if (src.a > 0)
{
dst = temp;
temp.a = src.a + dst.a * (1 - src.a);
if (temp.a > 0)
{
temp.rgb = ((src.rgb * src.a) + (dst.rgb * (1 - src.a) * dst.a)) / temp.a;
}
}
src = tex2D(_Texture4, i.uv);
if (src.a > 0)
{
dst = temp;
temp.a = src.a + dst.a * (1 - src.a);
if (temp.a > 0)
{
temp.rgb = ((src.rgb * src.a) + (dst.rgb * (1 - src.a) * dst.a)) / temp.a;
}
}
src = tex2D(_Texture5, i.uv);
if (src.a > 0)
{
dst = temp;
temp.a = src.a + dst.a * (1 - src.a);
if (temp.a > 0)
{
temp.rgb = ((src.rgb * src.a) + (dst.rgb * (1 - src.a) * dst.a)) / temp.a;
}
}
src = tex2D(_Texture6, i.uv);
if (src.a > 0)
{
dst = temp;
temp.a = src.a + dst.a * (1 - src.a);
if (temp.a > 0)
{
temp.rgb = ((src.rgb * src.a) + (dst.rgb * (1 - src.a) * dst.a)) / temp.a;
}
}
src = tex2D(_Texture7, i.uv);
if (src.a > 0)
{
dst = temp;
temp.a = src.a + dst.a * (1 - src.a);
if (temp.a > 0)
{
temp.rgb = ((src.rgb * src.a) + (dst.rgb * (1 - src.a) * dst.a)) / temp.a;
}
}
src = tex2D(_Texture8, i.uv);
if (src.a > 0)
{
dst = temp;
temp.a = src.a + dst.a * (1 - src.a);
if (temp.a > 0)
{
temp.rgb = ((src.rgb * src.a) + (dst.rgb * (1 - src.a) * dst.a)) / temp.a;
}
}
src = tex2D(_Texture9, i.uv);
if (src.a > 0)
{
dst = temp;
temp.a = src.a + dst.a * (1 - src.a);
if (temp.a > 0)
{
temp.rgb = ((src.rgb * src.a) + (dst.rgb * (1 - src.a) * dst.a)) / temp.a;
}
}
src = tex2D(_Texture10, i.uv);
if (src.a > 0)
{
dst = temp;
temp.a = src.a + dst.a * (1 - src.a);
if (temp.a > 0)
{
temp.rgb = ((src.rgb * src.a) + (dst.rgb * (1 - src.a) * dst.a)) / temp.a;
}
}
src = tex2D(_Texture11, i.uv);
if (src.a > 0)
{
dst = temp;
temp.a = src.a + dst.a * (1 - src.a);
if (temp.a > 0)
{
temp.rgb = ((src.rgb * src.a) + (dst.rgb * (1 - src.a) * dst.a)) / temp.a;
}
}
src = tex2D(_Texture12, i.uv);
if (src.a > 0)
{
dst = temp;
temp.a = src.a + dst.a * (1 - src.a);
if (temp.a > 0)
{
temp.rgb = ((src.rgb * src.a) + (dst.rgb * (1 - src.a) * dst.a)) / temp.a;
}
}
src = tex2D(_Texture13, i.uv);
if (src.a > 0)
{
dst = temp;
temp.a = src.a + dst.a * (1 - src.a);
if (temp.a > 0)
{
temp.rgb = ((src.rgb * src.a) + (dst.rgb * (1 - src.a) * dst.a)) / temp.a;
}
}
src = tex2D(_Texture14, i.uv);
if (src.a > 0)
{
dst = temp;
temp.a = src.a + dst.a * (1 - src.a);
if (temp.a > 0)
{
temp.rgb = ((src.rgb * src.a) + (dst.rgb * (1 - src.a) * dst.a)) / temp.a;
}
}
src = tex2D(_Texture15, i.uv);
if (src.a > 0)
{
dst = temp;
temp.a = src.a + dst.a * (1 - src.a);
if (temp.a > 0)
{
temp.rgb = ((src.rgb * src.a) + (dst.rgb * (1 - src.a) * dst.a)) / temp.a;
}
}
return temp;
}
ENDCG
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment