[comp.graphics] good radiosity question

aburke@ogicse.cse.ogi.edu (Andrew Burke) (05/03/91)

a few days ago wuly@vax5.cit.cornell.edu queried the net:
>> Howdy.
>> 	I have written a combination radiosity/raytracing rendering system
>> (whew!) and I'm somewhat confused on one point: I have a scene of 5 walls,
>> 10x10, with a light 3x3 pointing at one of the walls.  Now with 90% diffuse
>> surfaces, the relative energy out of the wall *behind* the light (i.e. light
>> left the lightsource, hit the wall in front, and was re-radiated to the back
>> wall, and re-radiated again) is about 1/1000 the energy leaving the light.
>> This seems wrong. ...

I have basically the same problem. I've read all the papers, scratched a 
bald spot on my head, but still am a bit puzzled. My code also just doesn't
seem quite correct. My solution has been to either increase the intensity
of the source light, or to make the surface area of the light source larger.
Clearly, though, if someone at Cornell is having problems (how close can you
get to Donald Greenberg & Co.?), many of us would benefit if someone posted
a standard radiosity scene which we all could use as a reference. This wouldn't
mean the poster would make our jobs any easier (everyone is getting pretty
paranoid about giving away "secrets" these days), it would just allow us
to confirm we're on the right track.

In any case, I also would be interested in any light anyone can shed on
this subject. 

andrew burke
aburke@cse.ogi.edu
"Reboot the system"

erich@eye.com (Eric Haines) (05/04/91)

In article <20917@ogicse.ogi.edu> aburke@ogicse.cse.ogi.edu (Andrew Burke) writes:
>a few days ago wuly@vax5.cit.cornell.edu queried the net:
>>> 10x10, with a light 3x3 pointing at one of the walls.  Now with 90% diffuse
>>> surfaces, the relative energy out of the wall *behind* the light (i.e. light
>>> left the lightsource, hit the wall in front, and was re-radiated to the back
>>> wall, and re-radiated again) is about 1/1000 the energy leaving the light.
>>> This seems wrong. ...
>
>I have basically the same problem. I've read all the papers, scratched a 
>bald spot on my head, but still am a bit puzzled. My code also just doesn't
>seem quite correct. My solution has been to either increase the intensity
>of the source light, or to make the surface area of the light source larger.

I just finished up my SIGGRAPH course notes on this and other problems in
radiosity algorithms.  Here's a relevant extract:


VI. Scaling

Once the radiosity solution has been computed, we often must scale the
results so that a meaningful image can be output.  The problem is that we
do not necessarily know what the best mapping of radiosity values is for
our solution.  That is, we do not know the best way to display the set of
generated radiosity values.

[...]

[On our solution:]
On output the user can specify a scale factor, a gamma curve for intensity
[not the same as gamma correction:  this one scales the RGBs uniformly, based
on intensity], and a minimum output level.  Optionally, the user can obtain
the level of intensity for the brightest reflector (i.e. not including light
sources) in the environment and use this for scaling.  By changing these and
seeing its effect on the output, the user can fine tune the appearance of the
illumination to create the desired effect.  This gives control to the user
similar to what is given to a photographer:  exposure time and contrast can be
adjusted for different effects.  These can be adjusted and the scene output
again, giving the user near-real-time feedback and control.

----

Eric

nujy@vax5.cit.cornell.edu (05/04/91)

In article <20917@ogicse.ogi.edu>,
aburke@ogicse.cse.ogi.edu (Andrew Burke) writes: 
> 
>> 	I have written a combination radiosity/raytracing rendering system
>> (whew!) and I'm somewhat confused on one point: I have a scene of 5 walls,
>> 10x10, with a light 3x3 pointing at one of the walls.  Now with 90% diffuse
>> surfaces, the relative energy out of the wall *behind* the light (i.e. light
>> left the lightsource, hit the wall in front, and was re-radiated to the back
>> wall, and re-radiated again) is about 1/1000 the energy leaving the light.
>> This seems wrong. ...
> 
> I have basically the same problem. I've read all the papers, scratched a 

I don't think this is a problem.  I don't have my radiosity stuff with me
but I think I can remember enough to go through this example.

First, lets assume that each wall is a single polygon and we find the form
factor at the center of it.  If we approximate the receiving polygon as a 
disk (of diamter 10), get the solid angle of the projected disk on a sphere
surrounding the center of the emitting polygon, and divide by 2PI, we get
a form factor of (2-sqrt(3))/2.  Multiplying this by 4/PI gives an
approximate form factor of a 10x10 polygon of:  (4 - 2*sqrt(3))/PI.  This
is about 0.17.

I'll denote the intensity of the light leaving the source as I (for a total
emitted energy of 9I = 3*3*I).

The energy falling on the receiving polygon is (I think):

   Er = Is * As * Brs

where Is is the intensity of light leaving the source, As is the area of
the source and Brs is the form factor for the source and receiver.  Plugging
in the numbers:

  Er = I * 9 * (0.17) = (1.53)I

On the next step,  Is = (1.53)I * (0.9) * (1/100) = 0.0138I.  The 0.9 is
for the reflectance of the surface, and the (1/100) for its area.

  Er = (0.0138I) * 100 * (0.17) = 0.235I.

The intensity leaving this surface is Is = (0.235I) * (0.9) * (1/100) =
0.0021.  So your problem isn't really an error, the numbers do come out
right.  In fact, if we obtain a more accurate form factor by integrating
form factors over differential areas over the entire source polygon, the
result is more like 0.00087I, even smaller than was indicated! 
-Chris

  Chris Schoeneman                  |  "I was neat, clean, shaved, and sober,
   nujy@vax5.cit.cornell.edu        |    and I didn't care who knew it."
                                    |               - Raymond Chandler

wiml@milton.u.washington.edu (William Lewis) (05/26/91)

In article <20917@ogicse.ogi.edu> aburke@ogicse.cse.ogi.edu (Andrew Burke) writes:
>
>a few days ago wuly@vax5.cit.cornell.edu queried the net:
>>> Howdy.
>>> 	I have written a combination radiosity/raytracing rendering system
>>> (whew!) and I'm somewhat confused on one point: I have a scene of 5 walls,
>>> 10x10, with a light 3x3 pointing at one of the walls.  Now with 90% diffuse
>>> surfaces, the relative energy out of the wall *behind* the light (i.e. light
>>> left the lightsource, hit the wall in front, and was re-radiated to the back
>>> wall, and re-radiated again) is about 1/1000 the energy leaving the light.
>>> This seems wrong. ...
>
>I have basically the same problem.   ...

    I'm hardly an expert in computer graphics, but might the problem
be that the human eye has a pretty nonlinear response to intensity?
As I remember most human senses are logarithmic in nature, not linear
(presumably for greater dynamic range --- this is why you can't see
a flashlight beam in bright sunlight...)  So this factor of 1000 difference
in power would correspond to, say, a factor of 3 difference intensity,
which seems reasonable. Try taking the log of the intensity or something
before displaying.


-- 
 wiml@milton.acs.washington.edu       Seattle, Washington   
     (William Lewis)   |  47 41' 15" N   122 42' 58" W  
 "Just remember, wherever you go ... you're stuck there."

aipdc@castle.ed.ac.uk (Paul Crowley) (05/26/91)

In article <1991May26.020248.10869@milton.u.washington.edu> wiml@milton.u.washington.edu (William Lewis) writes:
[...]
>As I remember most human senses are logarithmic in nature, not linear
[...]
>Try taking the log of the intensity or something before displaying.

Wouldn't this result in the log being taken _twice_?

image 
-- light level --> 
log() 
-- log(light level) --> 
display (which is linear)
-- log(light level) --> 
eye (which takes log)
-- log(log(light level)) -->
brain (which compensates for log somehow)
-- log(light level) -->
percieved light level (now the log of the correct light level)

Seems to me the best thing to do would be to allow your light source to
be massively overexposed -- I think this is what the eye does, and what
a good photographer will do when taking a picture that includes a light
source.
                                         ____
\/ o\ Paul Crowley aipdc@castle.ed.ac.uk \  /
/\__/ Part straight. Part gay. All queer. \/
"I could be wrong, I could be right" -- Public Image Ltd.

pelegrin@goofi.greco-prog.fr (Uncle Ben's) (05/29/91)

In article <20917@ogicse.ogi.edu> aburke@ogicse.cse.ogi.edu (Andrew Burke) writes:
>a few days ago wuly@vax5.cit.cornell.edu queried the net:
>>> 	I have written a combination radiosity/raytracing rendering system
>>> (whew!) and I'm somewhat confused on one point: I have a scene of 5 walls,
>>> 10x10, with a light 3x3 pointing at one of the walls.  Now with 90% diffuse
>>> surfaces, the relative energy out of the wall *behind* the light (i.e. light
>>> left the lightsource, hit the wall in front, and was re-radiated to the back
>>> wall, and re-radiated again) is about 1/1000 the energy leaving the light.
>>> This seems wrong. ...
>>I have basically the same problem.   ...


	I see two possible answers:

-	If you say you have five walls, your enironment may not be fully
	closed. The loss of energy resulting of this is HUGE; for
	example, if the closed world is a cube, removing a wall will
	divide the overall energy by two.

-	You say your surfaces are 90% diffuse (I guess they are 10%
	specular 8^) ), but how many percents of their incoming energy
	do they radiate?
	If they reemit 10% of the incoming overall emergy, they will
	effectively radiate 9% of the energy (we only consider the
	diffuse contribution), then with 2 reflections you get
	0.09^2 ~~ 0.0001. Not much. Good reemission percentages are
	usually between 20 and 50%.

-------------------------------------------------------------------------------
|   Zeu<FP> : The craziest programmer in France  |         _________          |
|------------------------------------------------|     /   |        \   \     |
| Francois Pellegrini is :                       |    /    |__   ___/    \    |
|      goofi!pelegrin@geocub.greco-prog.fr       |    \    |     |       /    |
| mcsun!inria!geocub!goofi!pelegrin@uunet.uu.net |     \   |     |      /     |
|         goofi!pelegrin@geocub.UUCP             |                            |
-------------------------------------------------------------------------------