- Home /
 
What is wrong with my shader?
I have a shader which essentially is meant to make an animated gradient. I made a texture which is a square with an alpha gradient towards the centre. The shader reads this texture and only displays pixels which have an alpha value above _Cutout. _Cutout is edited by a script.
Shader "Unlit/RadialSprite" { Properties { _MainTex ("Texture", 2D) = "white" {} _Color ("Color", Color) = 1, 1, 1, 1 _Cutout ("Cutout", Range(0, 1)) = 0.5 } SubShader { // Treat this material as transparent Tags { "RenderType"="Transparent" "Queue"="Transparent" "IgnoreProjector"="True" } LOD 100
     // Set up alpha blending
     ZWrite Off
     Blend SrcAlpha OneMinusSrcAlpha
     Pass
     {
         CGPROGRAM
         #pragma vertex vert
         #pragma fragment frag
         #include "UnityCG.cginc"
         struct appdata
         {
             float4 vertex : POSITION;
             float2 uv : TEXCOORD0;
         };
         struct v2f
         {
             float2 uv : TEXCOORD0;
             float4 vertex : SV_POSITION;
         };
         sampler2D _MainTex;
         float4 _MainTex_ST;
         // Add shader variables for our material properties.
         fixed4 _Color;
         float _Cutout;
         v2f vert (appdata v)
         {
             v2f o;
             o.vertex = UnityObjectToClipPos(v.vertex);
             o.uv = TRANSFORM_TEX(v.uv, _MainTex);
             return o;
         }
         fixed4 frag (v2f i) : SV_Target
         {
             fixed4 col = tex2D(_MainTex, i.uv);
             // Hide any part of the image that's darker than 
             // the current alpha value of the particle color
             col.a = saturate((col.r -_Cutout) * 10.0f);
             // Replace the visible color of the image
             // with the material color
             col.rgb = _Color.rgb;
             return col;
         }
         ENDCG
     }
 }
 
               }
My problem is that when I put the texture on the material, the entire quad goes white, my texure doesnt appear.
Answer by Namey5 · Jun 16, 2019 at 11:11 AM
That's because just before you output a colour, you overwrite the texture with the primary material colour;
 //This;
 col.rgb = _Color.rgb;
 
 //Should be this;
 col.rgb = col.rgb * _Color.rgb;
 
              Your answer
 
             Follow this Question
Related Questions
Soft edge shader - Issues when objects using same material overlap 0 Answers
How can i get mixed texture from one shader and set it for another object with another shader? 0 Answers
Double sided shader lighting problem? 1 Answer
Change GameObject material/color animated spreading from hitting point 1 Answer
Line Renderer repeating tiled texture every other tile is flipped 1 Answer