- Home /
 
Shader is ignoring alpha
I have an object with two materials attached. One is a custom terrain shader I wrote (which works fine). The second one is a very simple surface shader that is just supposed to add the R value of the sampled texture to the output color:
 Shader "Custom/ResourceMap" {
     Properties {        
         _MainTex ("Albedo (RGB)", 2D) = "white" {}        
     }
     SubShader {
         Tags { 
             "RenderType"="Transparent" 
             "Queue"="Transparent"
         }
         Blend SrcAlpha DstAlpha
         LOD 200
         
         CGPROGRAM        
         #pragma surface surf Lambert
 
         // Use shader model 3.0 target, to get nicer looking lighting
         #pragma target 3.0
 
         sampler2D _MainTex;
 
         struct Input {
             float2 uv_MainTex;
         };
 
     
         void surf (Input IN, inout SurfaceOutput o) {
             // Albedo comes from a texture tinted by color
             fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
             
             o.Albedo.r = c.r;            
             o.Alpha = c.a;
         }
         ENDCG
     } 
     FallBack "Diffuse"
 }
 
               The texture being used is almost entirely transparent, save for a few pixels which have their red channel set to a non-zero value, and full alpha. This is the code to generate that:
  public void GenerateTexture() {
         Color[] colors = new Color[WIDTH * HEIGHT];
 
         foreach(KeyValuePair<Vector2, int> location in locations) {
             colors[(int)location.Key.x + ((int)location.Key.y * WIDTH)] = new Color(location.Value * 0.01f, 0, 0, 1);
         }
 
         texture.SetPixels(colors);
         texture.Apply(false);
 
         // for debug
         System.IO.File.WriteAllBytes(Application.dataPath + "/../resourceMap.png", texture.EncodeToPNG());
     }
 
               I examined the output, and it is indeed mostly transparent, save for a few black dots.
The problem I am having is that the object is blending red all over the place, not just at the locations of the pixels with a positive alpha value in the texture. What could I be doing wrong?
EDIT: realized I forgot to apply the colors to the texture. I have updated the example code. I still have the problem though; alpha is ignored.
Your answer
 
             Follow this Question
Related Questions
Shader alpha depth problem? 1 Answer
Use multiple materials? 1 Answer
Soft edge shader - Issues when objects using same material overlap 0 Answers
Material alpha is 1 but still see through 0 Answers
Tinted alpha 1 Answer