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