I pulled off one of the 1.8 TODO items today, shared parameter sets.
You can now define a named, shared parameter set by using GpuProgramManager::createSharedParameters. You define the structure of the parameter set through that, and set values on it in much the same way as you do for GpuProgramParameters. You can then reference that shared parameter set using GpuProgramParameters::addSharedParameters, and any values that match that you set in the shared parameter set will become available to that material. From then on when you need to update the parameters for all materials referencing this set, you only have to do so in one place, ie on the shared parameters.
Note that only manual parameters are supported in the shared parameter sets for now (no auto parameters). Since this is primarily designed to reduce the effort involved in updating manual parameters across many materials, auto parameters are not needed.
Also note that you can use the shared parameter set even if you don't use all of the parameters contained within it. It will simply match up the relevant ones and use those. Obviously, only named parameters are supported.
Shared parameter sets are named so that you can reference them easily in scripts and from elsewhere in code. I'm still working on the scripting interface to this though, only the code-level version is in SVN right now.
The base implementation involves the values in the shared parameter set being copied across to the individual parameter sets when being bound. However, it is up to the rendersystem whether this copying actually happens, and there are Ogre::Any variables on GpuProgramParameters, GpuSharedParameters and GpuSharedParametersUsage designed to hold RenderSystem-specific data should it wish to take another approach. For example, in Dx10 you could detect matches with a separate constant buffer defined in the code, and instead of copying / merging values, store the shared parameter set in its own constant buffer and only update it once per frame (there's a frame number counter on it to help with this). I haven't implemented this yet but the facility is there. This could also be done in GLSL with GL_EXT_bindable_uniform, although from the searching I've done it doesn't seem to be very well supported.
I'll be sorting out the script interface for my next update anyway. Hope this is useful to people.