Hey guys,
Been playing around with the new feature of Unity 5.5 which allows you to send custom data via TEXCOORD channels from a particle system to a shader.
I’m using this in conjunction with Unity’s new colour picker, which allows each to select a random start colour.
The effect I want to achieve is to have a multi coloured particle system that also has an extra punch of vibrancy at the particles birth. Previously I would have achieve this effect by having a white to colour lifetime gradient:
which would often result in inefficient colour blending and a limited palate of colours to pick from.
But now with the ability to set up a selection of start colours:
I can get a nice range of colours without any weird colour blending issues.
In order to get a nice white hot burst at the start of the particle’s lifetime I can now pass the particle’s lifetime value to the shader via the renderer (ignore the pivot position - thats for some positional correction):
I then run that data through a custom shader:
float4 frag(v2f i) : SV_Target
{
float4 t = tex2D(_MainTex, i.uv);
float4 colour = t * i.color;
// invert the lifetime value so that it starts at 1(white)
// apply a speed modifier for how quick the burst occures
// amplify the brightness
float4 lifeTimeGradient = (1 - i.lifetime.x * _LifeTimeBurstSpeed) * _LifeTimeBurstVibrance;
colour.rgb += clamp(lifeTimeGradient,0,1) + _Vibrance;
return colour;
}
So this allows me to amplify the brightness of the particle over a certain period of it’s start lifetime. This is the end result: