How to change the alpha value in the vertex color using a shader ?
Hi guy what i'm trying to do is simple : Regarding the distance between the camera and each vertex in a mesh I want to set its alpha value. In my case the more my camera is close to a vertex more the vertex will be transparent. I made a shader :
 Shader "Custom/GradientTransparent" {
 Properties {
         _mainTexture("Texture", 2D) = "white" {}
         _range("Range", Float) = 100
     }
     
     SubShader {
         Tags { "Queue" = "Transparent" } 
          // draw after all opaque geometry has been drawn
       Pass {
          ZWrite Off // don't write to depth buffer 
             // in order not to occlude other objects
 
          Blend SrcAlpha OneMinusSrcAlpha // use alpha blending
 
          CGPROGRAM 
  
         #pragma vertex vert 
         #pragma fragment frag
          
          #include "UnityCG.cginc"
          
          float _range;
          sampler2D _mainTexture;
          
          struct vertIn{
              float4 vertexPosition : POSITION;
              float4 color : COLOR;
              float4 texCoord : TEXCOORD0;
          };
          
          struct v2f{
              float4 pos : SV_POSITION;
              float4 tex : TEXCOORD0;
              float4 color : COLOR;
          };
  
          v2f vert(vertIn i) 
          {
              v2f o;
              o.tex = i.texCoord;
             
             o.color = i.color;
             o.color.a = distance(i.vertexPosition, _WorldSpaceCameraPos) / _range;
             o.pos = mul(UNITY_MATRIX_MVP, i.vertexPosition);
             return o;
          }
              
          struct fragOut{
              float4 color : COLOR;
          };
              
          fragOut frag(v2f i)
          {
              fragOut o;
             float4 textureColor = tex2D(_mainTexture, i.tex.xy);
             o.color = textureColor * i.color ; 
             return o;
 
 
          }
  
          ENDCG  
       }
     }
 }
 
With this shader I have a Fade transparency but with the entire mesh and not with all vertices independently. And please I don't want a solution including surface shader. I'm a noob at writing shader so I just want a classic vertex and fragment shader.
PS: I'm using Unity 4.6 and I can't upgrade to 5. 
Answer by Tiras69 · Oct 09, 2015 at 10:05 AM
So I just achieved what I wanted to do. My error was to not converting the vertex position in world position while processing the distance function.
 v2f vert(vertIn i, appdata_full v) 
          {
              v2f o;
              o.tex = i.texCoord;
             
             o.color = v.color;
             o.color.a = distance(mul(_Object2World, v.vertex), _WorldSpaceCameraPos) / _range;
             o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
             return o;
          }
Your answer
 
 
             Follow this Question
Related Questions
I need a two Color gradient shader with alpha settings for for the top color. 0 Answers
Inside of a shader how can I convert a world direction relevant to a vertex's local position 1 Answer
AVPro plugin + Amplify Shader 0 Answers
Add contrast to projector/light? OR add fade in/out to projector/multiply 1 Answer
Shader refuses two UV offsets 1 Answer
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                