This is more of a discussion than an answer. I learned how to make Display plugins in RViz and made one called Light (wrapping Ogre::Light) and one called AmbientLight (wrapping Ogre::SceneManager::setAmbientLight). Right now Light is always an Ogre::Light::LT_DIRECTIONAL. I could probably make it changeable to a point light or spotlight, or make separate plugins for those. If I can get more time (working toward a deadline at the moment) I would also like to figure out how to attach the light to a frame and figure out how to disable the default light source attached to the RViz camera.
By default there is no ambient light in RViz, so viewing geometry from a non-default direction using a camera plugin reveals areas that are completely black. Adding AmbientLight fixes this, and adding extra Lights illuminates some shape in these areas.
After trying this I would probably never again make an RViz scene without these light plugins. If I have more time to fix things up, is this worth contributing to ROS for other people to use?
Adding ambient light has an interesting side-effect: hovering the mouse over an InteractiveMarker causes it to brighten. I believe I saw this "highlight" feature while browsing the code a couple weeks ago but didn't see a way to use it. Now it seems like it must be a feature that's fallen into disrepair without the presence of default ambient light.
I also see places in Rviz's robot_link.cpp and mesh_resource_marker.cpp where material ambient is set to the same color as material diffuse * 0.5. I would recommend removing the * 0.5 so that the full range of ambient light can be used, modulated only by the scene's ambient light value.
Thoughts?