HLSL's, Cg and the RenderMonkey
Effects Materials And Shaders
It seems to me that everyone is getting a couple of basic concepts a little bit mixed up at the moment, mainly because we're using different names to refer to the same things. As far as I can see, an effect is something akin to a special effect in a film. For example, a car flies over a bridge, hits the ground, and explodes. When a programmer simulates the explosion, it becomes a special effect, or effect, for short.
A material, to me, is a state of the graphics card that renders a certain type of surface in a particular way. For example, consider a scene with a bumpy blue sphere. This can be split up into geometry and a material. The geometry is a sphere; the material is bumpy and blue. Within this coarse naming convention, you can further define a material to be the union of a shader and some data. In this case, the shader will be a bumpy shader; the data is either a blue diffuse color, or a blue texture. In this way, we can define material libraries by writing a set of shaders (bumpy, reflective, bumpy reflective, specular, bumpy specular, etc.), and then we allow the artists to set the material data (the texture, bumpiness, glossiness, etc.).
Unfortunately, I didn't get to specify the naming conventions that Microsoft, ATI, or nVidia use for their "effect" files. In Microsoft's case, an effect becomes a collection of "techniques," and we follow the idea that a technique is one way of achieving a particular effect. For example, blue metal might have one technique for vertex shaders and pixel shaders, another for just vertex shaders, and a multi-stage, fixed-function technique. Each of these will be used on simpler hardware, and so our idea of compatibility programming is inherent in each "effect." Parameters (or material data, in my thinking) are specified at the top of each effect file.
The real trickery comes about when we try to let our artists set which textures and "effects" they'd like to use with each model. In an ideal world, they'll be able to see the effect directly in their object editor, and they would just need to specify a small set of parameters for the effect. Some parameters only need to be set by the program (such as the world transform, etc.), so these should be hidden from the artist in the object editor.
Anyway, all of these basic principles are starting to get wrapped up. And so far, the most complete developer tool for material manipulation has been created by ATI.
Stay On the Cutting Edge: Get the Tom's Hardware Newsletter
Get Tom's Hardware's best news and in-depth reviews, straight to your inbox.