I will preface this by saying that my undergrad signal processing course is very far back...


I am comparing images of global illumination (GI) passes. I want to be able to change the diffuse color of objects and approximate GI without rerendering. To do so, I imagined precomputing the GI response for pure red, green and blue objects (with black as a reference), then recombining those RGB components linearly to reproduce GI for any color.

The problem is that GI does not add-up linearly. GI intensity varies at different rates depending on the image region. For example:

GI for red diffuse (255, 0, 0)

enter image description here

GI for mid-red diffuse (128, 0, 0)

enter image description here

0.5 * GI for red diffuse (255, 0, 0)

enter image description here

As you can see, half of the GI emitted by a pure red diffuse color (255, 0, 0) does not equal the GI emitted by mid-red (128, 0, 0). Surfaces near other surfaces seem to decay in GI intensity more rapidly. My knowledge of how GI is computed is limited and I cannot intuitively explain why this is so.


How can I derive the transformation between the GI emitted by pure red and mid-red? My initial idea was to simply go pixel by pixel and fit a curve to different GI intensities for varying diffuse colors. This approach seems a little naive, and noise in the reference images complicates things.

I can produce these renderings at different noise levels and at any resolution. Things like camera position, lighting, shaders, etc. all remain the same. Only the object diffuse color changes.

Can anyone offer guidance?


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.