Sanity check gone wrong - Contribution of ground brightness

I’m currently doing some sanity checks to verify my scene setup—a step I should have taken earlier.

I used gendaylit to model the sky at a specific time, with predefined DNI and DHI values. The ground glow is replaced by a large ground plane (plastic with 20% spectrally uniform reflectance) as usual. The scene consists of a horizontal black square (10x10 m2, plastic, R=5%) that is elevated 10 cm off the ground.

I run rtrace (-i -ab 2) on the center of this black square. Incident irradiance on the front side was close to the total solar horizontal irradiance (~500 W/m2). However, the back side, at only 10 cm high, showed an unexpectedly high irradiance of ~80 W/m².

It seems that the presence of this large opaque surface does not significantly affect, at least locally, the amount of irradiance reflected by ground.

Any tips on what could be causing this would be greatly appreciated.

Alex

Hi Alex,

You may have inadvertantly created a corner case for which the Hessian irradiance interpolation method works poorly. It is unusual in the real world to have one surface floating above another with no supports, and the supports would typically cause enough interference to prevent cached irradiances from well outside your shadowed region of interest from influencing it.

In fact, I had to implement a change to the published version of this algorithm to handle the usual case of a low obstruction shading a point, and presented this at the 2014 Radiance workshop. (See this presentation, starting at slide 15.) However, this fix doesn’t work in your case, and cached values from your surrounding ground plane are likely to “leak” underneath your floating disk, spilling light where it doesn’t belong.

The simplest and most reliable option is to recalculate without the indirect cache by setting -aa 0. This will be slow for computing images, but for point calculations, it makes little difference and is much more reliable.

Another general rule of thumb is that you should not have a ground plane much larger than the one needed to capture shadows from your structure. This prevents far-away cached values from getting an inflated estimate of their own importance.

Cheers,
-Greg

Ok, so the issue arises from irradiance caching. Indeed, by adjusting -aa to 0, irradiance on the back side of the surface is close to 0, which is reasonable.

Playing around with the -aa setting (see attached image) revealed its importance for low heights, at least for this scene setup.

However, for the case of -aa = 0, irradiance levels do not eventually attain the expected ground reflected irradiance levels (~100 W/m2). Do I need to make other adjustments to rtrace when running with -aa = 0?

Once again, thanks Greg!

Notes:
The square’s size was reduced to 1x1 m2.
Other ambient settings: -ad 2048, -ar 128

Hi Alex,

This is a bit puzzling – I’m not sure what height you are playing with or the other rendering options and dimensions. Can you upload your scene and test scripts, so I might have a closer look?

Cheers,
-Greg

(Private messages happened…)

The main issue is your use of rtrace options. You would be better off leaving most of the settings at their default values. Your settings of:

rtrace -ab 2 -ad 2048 -aa 0 -ar 128 -av 0 0 0 -aw 0 -as 0 -lr 3 -lw 0.01 -st 0.05 -ss 1 -dt 0 -dj 0 -ds 0 -dr 0 -dp 0

have a couple of problems. The fact that you have set -ad 2048 and -lw .01 means less than 100 samples will actually be sent, and they will be low-weighted samples. You switched off Russian roulette with -lr 3, so your result will be underestimated, by a lot in this particular case. Setting -lr to a negative value turns Russian roulette on, which fixes it, or decreasing -lw to something substantially less than 1/2048 also fixes the underestimation.

I don’t know how you arrived at these parameter settings, but it’s very important to understand what a parameter does before you change it. “Rendering with Radiance” is a good resource in this regard, or you can use the “rad” program to help with settings if you aren’t sure.

Cheers,
-Greg

P.S. You shouldn’t mark something as “solved” then post further information – just wait until we’re done, thanks!

Hello Greg,

I appreciate your patience.

I misunderstood the use of -lw and -lr settings. I thought that by equating -lw to 0.01, I would essentially disregard any traced rays that have less that 1% of their initial weight.

For the sake of completion I’ve uploaded the updated graph.

Kind regards,
Alex

Excellent – these results are in much better agreement with expectations.

Your basic understanding of -lw is correct, but the interaction with -aa 0 and -lr 3 causes a situation where low-weight rays are truncated when they hit your dark surface. Russian-roulette is the best way to avoid this, which requires a negative limit to -lr. That is why RR defaults to “on” in rtrace.

Cheers,
-Greg

1 Like