vincebagna opened this issue on May 04, 2010 · 14 posts
bagginsbill posted Tue, 04 May 2010 at 10:50 AM
Many different sub-topics are flying here.
There is a version of the shadow catcher that includes an AO node. That was for getting AO shadows caught when you did not use light-based AO.
With IBL + light-based AO, that version was not needed. The simple one that just uses Diffuse node alone as its sensor was sufficient.
With IDL, we have a problem. Actually two problems. If you also are using render GC we have three problems, one of which was always there even without IDL, but it's worse now. I don't see an easy solution to these.
First problem:
During IDL pre-calc, when the irradiance cache is being populated, all direct illumination is excluded. The values coming out of the Diffuse node are only what is produced by secondary lighting. Ignoring occlusion for the moment, the secondary lighting is entirely what is in the shadows.
Now the shadow catcher is trying to detect whether a given spot on the ground is getting only secondary illumination, or primary and secondary illumination. But during precalc, there is NO primary illumination being detected. So during precalc, the entire ground is "in shadow". Therefore, the entire ground will be opaque!!!
This leads to the second problem. The IDL pre-calc, seeing that the ground is opaque, will use the luminance of the ground as part of its lighting calculation. The "under" sides of props and figures will be under lit. (pardon the pun)
But when the final render is done, the direct illumination will be detected, and the ground will become transparent over most of its surface. Thus, whatever was under/behind it will be revealed, but that is not what was used in the lighting pre-calc. Things will look wrong.
Another problem is the calibration step. During calibration, the entire surface is opaque, and to calibrate it correctly, you're trying to measure the illumination of the directly lit areas and the shadowed areas and load those into the shadow catcher. But the calibrating ground will produce a lot of bounced light!!! Worse - it will be 100% reflected diffuse illumination, which you should know by now is a no no. This will illuminate other surfaces, which in turn will re-illuminate the ground again. So, by indirection, the ground is illuminating itself (if you have 2 bounces or more) and the measurement it is getting during pre-calc will be different than the measurement it gets during the render, when the ground is essentially not there.
Another problem with calibration is if the illumination of the ground is very high, which it often is in an outdoor scene with a very bright envsphere and a sun. The purpose of the calibration step is to sample the lit and unlit values. But the lit value can be greater than 1, as measured by a white Diffuse node with Diffuse_Value = 1. This problem is easily solved however. Just change the Diffuse_Value in the shadow catcher DIffuse node to something much less than 1. Usually .5 is enough to avoid trying to sample a hyper-color.
In the end, though, I can't figure out how to deal with the fact that the calibration step of the ground with IDL enabled interferes with the very thing it is trying to measure. I had thought that making the ground invisible to raytracing would take care of it. But it doesn't.
Renderosity forum reply notifications are wonky. If I read a follow-up in a thread, but I don't myself reply, then notifications no longer happen AT ALL on that thread. So if I seem to be ignoring a question, that's why. (Updated September 23, 2019)