- Home /
Decal Shader, Change The Decal Color Separately
I have a decal shader that can have up to 6 different decals, the problem is just that I can only change all the decals to the same color. So I would like to change each decal's color separately.
Shader "Multiple Decals" {
Properties {
_Color ("Main Color", Color) = (1,1,1,1)
_MainTex ("Base (RGB)", 2D) = "white" {}
_DecalTex ("Decal (RGBA)", 2D) = "black" {}
_DecalTex2 ("Decal 2 (RGBA)", 2D) = "black" {}
_DecalTex3 ("Decal 3 (RGBA)", 2D) = "black" {}
_DecalTex4 ("Decal 4 (RGBA)", 2D) = "black" {}
_DecalTex5 ("Decal 5 (RGBA)", 2D) = "black" {}
_DecalTex6 ("Decal 6 (RGBA)", 2D) = "black" {}
}
SubShader {
Tags { "RenderType"="Opaque" }
LOD 250
CGPROGRAM
#pragma surface surf Lambert
sampler2D _MainTex;
fixed4 _Color;
sampler2D _DecalTex;
sampler2D _DecalTex2;
sampler2D _DecalTex3;
sampler2D _DecalTex4;
sampler2D _DecalTex5;
sampler2D _DecalTex6;
struct Input {
float2 uv_MainTex;
float2 uv_DecalTex;
float2 uv_DecalTex2;
float2 uv_DecalTex3;
float2 uv_DecalTex4;
float2 uv_DecalTex5;
float2 uv_DecalTex6;
};
void surf (Input IN, inout SurfaceOutput o) {
fixed4 c = tex2D(_MainTex, IN.uv_MainTex);
half4 decal = tex2D(_DecalTex, IN.uv_DecalTex);
half4 decal2 = tex2D(_DecalTex2, IN.uv_DecalTex2);
half4 decal3 = tex2D(_DecalTex3, IN.uv_DecalTex3);
half4 decal4 = tex2D(_DecalTex4, IN.uv_DecalTex4);
half4 decal5 = tex2D(_DecalTex5, IN.uv_DecalTex5);
half4 decal6 = tex2D(_DecalTex6, IN.uv_DecalTex6);
c.rgb = lerp (c.rgb, decal.rgb, decal.a);
c.rgb = lerp (c.rgb, decal2.rgb, decal2.a);
c.rgb = lerp (c.rgb, decal3.rgb, decal3.a);
c.rgb = lerp (c.rgb, decal4.rgb, decal4.a);
c.rgb = lerp (c.rgb, decal5.rgb, decal5.a);
c.rgb = lerp (c.rgb, decal6.rgb, decal6.a);
c *= _Color;
o.Albedo = c.rgb;
o.Alpha = c.a;
}
ENDCG
}
Fallback "Diffuse"
}
Comment