Why is needed a Cg shader?

I’ve been programming a little with OpenGL, but I never had to code a “vertex shader” neither I don’t understand why, before Cg was released, it was a task only suitable for people who feels comfortable programming in assembly.

What is a vertex shader? Why only in assembly?

Thanks for your replies.

I’d also like to know what the real benny is of Vertex Shaders, et al.

Is it fundamentally so that each pixel is lit more correctly?

Baffled in Beantown…

There is a lot of setup information required for fragment shaders for example (tangent space transform of various vectors for example). There are also things like animations for skinning of objects and pretty much any transformation and lighting you can come up with per vertex that doesn’t match the standard OpenGL matrix transformations and lighting.