Often, I have found myself trying to render light shaft, laser, godray and other similar special effect.
A formula I like to use in my pixel shader is
abs(dot(NormalVec, ViewVec)); //NdotV
This would give 1 from the center of the object to 0 at the edge of object. Using this value to apply to alpha blending or multiply it to the color, would give a soft edge to the object.
It is also useful to control how soft the edges of the object are, we could use
float finalBlending = pow(NdotV, softness).
This would make the edge softer the higher the softness value.
For effects that have hard edge and soft center, use 1 – NdotV.
Recently I also have been using
2 * abs(NdotV – 0.5);
to create effects which have hard center and hard edge with a gradual fade off between the two.
Try this with normal mapping to create more interesting effect.