- Home /
How to add color/alpha control to this shader?
EDIT: Wow... it was so simple, i searched more and ended up finding a solution. Basically, all i had to do was add
"float4 _Color"
under all those sample2d declaractions , and then change this:
float4 MaskedTex = float4(MainTex.x, MainTex.y, MainTex.z, Mask.x)
to this
float4 MaskedTex = float4(MainTex.x, MainTex.y, MainTex.z, Mask.x)* _Color;
And it's solved!
I changed all my textures to the ETC format to fix my game not running on certain android phones. Since the ETC textures have no alpha, i searched the internet for a shader that mixes the texture with an alpha texture, making them look like i want on the game. However, some of the textures of the game need to have controllable colors (because some buttons dissapear/appear constantly to draw attention, background fades to black, etc)
It was working fine before, but since i changed to a shader that has no color control, it stopped working. I tried everything, but i just couldn't add a _Color setting on this shader... Anyone there can help me?
I managed to make the color work, but it also disabled the mix texture with alpha texture part, making the entire thing useless. Is it possible to have both on the same shader?
Shader "==/Alpha Red with color"
{
Properties {
// _Color ("Color Tint", Color) = (1,1,1,1) // disabled so it works
_MainTex ("Base (RGB)", 2D) = "white" {}
_Mask ("Mask", 2D) = "white" {}
}
SubShader
{
Tags
{
"RenderType"="Transparent"
"Queue" = "Transparent"
}
Pass
{
Blend SrcAlpha OneMinusSrcAlpha
Ztest Always
Zwrite Off
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
sampler2D _Mask;
float4 _MainTex_ST;
struct v2f
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
};
v2f vert (appdata_base v)
{
v2f o;
o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
o.uv = TRANSFORM_TEX (v.texcoord, _MainTex);
return o;
}
half4 frag(v2f i) : COLOR
{
float4 MainTex = tex2D(_MainTex,(i.uv.xyxy).xy);
float4 Mask = tex2D(_Mask,(i.uv.xyxy).xy);
//assemble the RGB from _MainTex with the splatted channel from _Mask
//Note that XYZW is equivalent to RGBA so Mask.x is effectively Mask.r, change as needed.
float4 MaskedTex = float4(MainTex.x, MainTex.y, MainTex.z, Mask.x);
return MaskedTex;
}
#ENDCG
}
}
FallBack "Diffuse"}
Your answer
Follow this Question
Related Questions
Is there a way to set an alpha color? 2 Answers
How would I add an alpha mask to this shader? 1 Answer
Shader that does per Vert alpha with co 0 Answers
Strange artifacts on Vertex Color Shader 0 Answers
Alpha-based Color Mask 2 Answers