It would be a big improvement, if there where lots of shader defines and shaders being compiled and used for the needed variations.
Things like fog, sun, number of lights effecting the object, alpha clipping, clipplanes, shadow receiver, animations and more.
This way one could write one "Übershader" assign it to all objects which are supposed to use it and it would just work for all different situations like a reflection view, indoor and outdoor levels and so on.
Sure one could do the same with branching, but with a noticeable performance hit.

It would also be great if there was a possibility not to clear the depth buffer before rendering some view, as for example in case of the PSSM shadows it should be a usefull performance gain to get rid of any overdraw by reusing the depth buffer.