How to add a light source with reflectance?

Hi everyone, I’m a novice of radiance. I tried to calculate indirect illuminance in a room illuminated by a large surface light source (bright polygon). However, the “light” material has no reflectance property. This results in low indirect illuminance. Is there a way to set the reflectance of a polygon and retain Lambertian luminescence properties?

Hello and welcome to the forum.

The assumption that light sources emit but do not otherwise interact with an environment is an old approximation that works most of the time, but not always. The simplest way to add reflection to a light source is using a mixfunc. You will need to double the desired radiance and reflectance values in a 50/50 mixture like so:

void plastic diffuse20tomix
5 .4 .4 .4 0 0

void light light400tomix
3 800 800 800

void mixfunc reflectingSource
4 diffuse20tomix light400tomix 0.5 .

reflectingSource polygon mySource
3*N ...

Give it a try.


Thank you very much.
I have a try on my model. But rtrace shows that “no light sources found”.
I am trying to upload my model for debugging.

Though the mixed light source have correct lumiance, but it seems that the mixed item don’t illuminate other thing.

Oh, hmmm… You are right of course. The light source search doesn’t look past the mixfunc to see the emitter.

I need to think on this some more. There may not be an easy way to do this in Radiance…


Thank you. I am looking forward to your further insights.

Well, I gave it some thought, and there are at least 3 possible solutions to this:

  1. Use your current description with the mixfunc, and just turn on the interreflection calculation. If your light source is large relative to the surroundings, which it probably is (otherwise why worry about its reflection), then setting -ab 2 should be equivalent to -ab 1 with an actual light source.

  2. Change the description to use a trans surface a millimeter or two in front of a normal light source surface. Make it so the trans has the desired diffuse reflectance, and transmits the rest of incident light specularly. Then, increase your original light source radiance by 1/transmittance. For our example, a 20% reflective trans would have 80% specular transmittance:

void trans refl20
0 0 7 1 1 1 0 0 0.8 1

  1. Model the reflective light source as purely reflective, then generate an image using vwrays with rcontrib, specifying the reflector material as the target. This requires a little more understanding of how Radiance works, but if you multiply the result by the radiance of your source, you should get the desired image in the end. I would suggest this only if the first two don’t work for you.


1 Like

Thank you for your suggestion.

I tried solutions 1 and 2.

For solution 1, though I turned on the interreflection. The light source of micfunc still does not illuminate other things.

For solution 2, It seems to work well. I will make further tests to ensure that the light source behaves as I expect.

Thank you again.

Just realized – for #1, you need to change the light material to a “glow” with effective radius of 0 (4th real argument). Then it should work.


Thank you, It works in #1, though it leaves a little trouble——I think if I want to calculate direct illuminance (Direct illuminance will be subtracted from the total illuminance to obtain indirect illuminance) in a room with mixfunc light source and ies light source, I have to create an additional model that does not use mixfunc, because the bounces number of “direct” is different.
And a small question: In solution #1, how can I set a reflectance larger than 0.5?

I think if you set -ab 1, that will just give you the “direct” contributions, and setting -ab 5 and subtracting the -ab 1 result should tell you the “indirect” contribution using #1.

Also, you can set the reflectance > 1.0 to get >50% reflection. So, 80% reflectance would be 1.6 in your plastic material. Just don’t go above 2.0, which would be non-physical in this scenario.