ior wrote:There is something wrong here, why is a caustic on a mirror is so difficult to render if it render fast on direct geometry? A ray path when reach a mirrored object just bounces back and what one should see on the image is the color of the object it hits next, if that is already fine in the image, what is the problem of rendering this extra parts that are seen by the mirror, the same way the direct parts are, and then with little effort display them on the image?
This is a classical problem in unbiased rendering which goes by a number of names. The problem of insufficient techniques, the specular-diffuse-specular (SDS) problem, the sunlight-through-glass problem, etc.
The crux of the problem is that bi-directional path tracing is no better than standard path tracing at sampling reflections of caustic light paths, and standard path tracing is not very good at sampling indirect light paths from small light sources. The probability of randomly choosing a direction that hits a small or distant light source is very small (in the case of the sun, about 1 in 60,000), so in the case where this does happen you get a firefly.
Normally bi-directional would be able to make other connections to the light source, and reason along the lines of "this light path, however improbable, could have been made this way as well, so weight down the really improbable one since it's not really that exceptional". However, in the case of specular surfaces, there is only a single way the path can be constructed (in the perfect reflection direction), so other ways are impossible and such re-weighting cannot be done.
Again, this is a classical problem for which there is no published solution (that is still unbiased). I've Googled some references in case you're interested to read more about it:
From The Rendering Bible, Veach's thesis:
http://graphics.stanford.edu/papers/vea ... apter10.ps
Brief mention in a journal:
http://books.google.co.nz/books?id=OY09 ... es&f=false
About solutions, right now the best one can do is use Metropolis Light Transport (MLT) sampling, which makes small (!) perturbations to the paths in an attempt to find other light-carrying paths of the same type. Your max change tweak hurts this ability, since anything more than a few % change will move the sample position in the image a lot and it stands no chance of hitting that small light source indirectly again.