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.