Lighting an underwater scene?

I am attempting to create an underwater scene where a fish swims around in it. I have already completed the fish (modelling, texturing, rigging, animating) and the underwater part but when I combine the two the lighting for the fish is very poor and the shadow is a bit skewed.



I was wondering how to go about fixing this so I can clearly see the texture of the fish, have an appropriate shadow, and maintain the effect of the waters light.


Here is a picture of the scene. On the top is a plane which has an emission shader on it while the lamp goes through another plane which helps emulate caustics. There is obviously light on the top but I can’t get the fish to light up without ruining the caustic lighting in the scene.

I didn’t quite get how you emulated the caustics. What’s the purpose of the other plane ?
Maybe you can turn down the diffuse of the ground so you can turn up the light source ?

Using the trick where you don’t rely on caustics:
Mix shader with light path/isShadowray as mixer.
Your shader setup in Slot 1.
Fully white Transparent shader in Slot 2.
That way light can pass through your water unobstructed and not shadow anything.
Fish should still cast a shadow on the seabed surface.

However I’m pretty sure that this kind of scene is typically best suited for Luxrender, since Lux has bidirectional path tracing and therefore handles caustics infinitely better.
Or you can do a caustics-only pass with Yafaray, also infinitely better.

Here’s a simple example :


I cheated on the energy conservation which is not great but the quality difference doesn’t need explanation.