View Full Version : Energy Conservation?
halfPintMike 01-13-2010, 01:27 PM Hello there, I came across this term in this article about wall e: http://www.cgw.com/Publications/CGW/2008/Volume-31-Issue-7-July-2008-/Rampart-Risk-Taking.aspx (http://www.cgw.com/Publications/CGW/2008/Volume-31-Issue-7-July-2008-/Rampart-Risk-Taking.aspx). It goes:
"To help give the film a more cinematic look, Pixar also rewrote the illumination model used for lighting the 3D world. “We wanted the materials to feel more realistic in the way they reacted to light, and the lights to be more physically driven,” says Feinberg. “We’d had the same illumination model since A Bug’s Life. Ratatouille even used the same code but with big pieces added to change the color space.”
The new code builds energy conservation into the lighting and shading model. “We have one knob that takes the materials from rough and diffuse at one end and, at the other, highly reflective metal,” Feinberg says. “Before, we tuned diffuse, specular, and reflection separately. Now, they’re all on a continuum.”"
So what exactly does energy conservation in lighting mean? I understood the others(well, sort of!).
Thanking you,
Timothy.
|
|
TheNeverman
01-13-2010, 01:51 PM
From Autodesk's Maya helpfile:
Conservation of Energy
One of the most important features of the material is that it is automatically energy conserving. This means that it makes sure that diffuse + reflection + refraction <= 1, i.e. magically created and the incoming light energy is properly distributed to the diffuse, reflection and refraction components in a way that maintains the first law of thermodynamics.
In practice, this means for example that when adding more reflectivity, the energy must be taken from somewhere, and hence the diffuse level and the transparency will be automatically reduced accordingly. Similarly, when adding transparency, this will happen at the cost of the diffuse level.
More in-depth info at wikipedia:
http://en.wikipedia.org/wiki/Conservation_of_energy
ndeboar
01-13-2010, 03:09 PM
the mia shader docs have a section on this. Basicly,a surface should never return more energy than is being contribute by the incomming light.
playmesumch00ns
01-13-2010, 03:47 PM
the mia shader docs have a section on this. Basicly,a surface should never return more energy than is being contribute by the incomming light.
It should also (if set to be 100% reflective) return as much energy as hit it. There are no brdfs that actually do this at the moment. All lose energy to some degree at glancing angles.
halfPintMike
01-14-2010, 01:24 PM
Thank you very much for the reply. It make sense now. So would I be right in saying that to get a photorealistic render in an efficient way, the net value of the material properties must not cross 1? And the properties in concern are reflectivity, transparency and translucence?
Thanking you guys again.
The energy that goes out of the material cannot exceed the energy that goes into it. (Or the other way around.) It's the conservation of energy law.
So the energy can come from e.g. sunlight or through electricity or heat. Energy can be reflected, transmitted (transparency and translucency), or absorbed.
halfPintMike
01-18-2010, 09:09 AM
Thank you, Rens. Will keep this conservation in mind!
noizFACTORY
01-20-2010, 02:37 AM
To do this in a renderman shader which has say, diffuse, specular, reflection and subsurface components, would one need to individually clamp each component between 0-1 and then further clamp the final result between 0-1?
halfPintMike
01-20-2010, 06:14 AM
To do this in a renderman shader which has say, diffuse, specular, reflection and subsurface components, would one need to individually clamp each component between 0-1 and then further clamp the final result between 0-1?
I don't know about renderman shader but in yafaray all these values range from 0 to 1. And I now keep the total under 1. Not really sure if it is the way.
rendermaniac
01-20-2010, 10:31 AM
If you wanted to balance the different lighting models more automatically, you'd have to drive the passes off each other. Probably something like this:
dif_sss = mix(diffuse, subsurface, subsurface)
dif_transmission = mix(dif_sss, refraction, refraction)
beauty = mix(dif_transmission, reflection, reflection)
I think Ashikhmin did something like this in one of his papers.
I don't know how opacity fits into this - I guess strictly speaking it comes under refraction. And I don't know if it would be beneficial doing this.
Simon
noizFACTORY
01-20-2010, 01:13 PM
Hmm that looks interesting. I did try something like that today where:
frontScatter = mix(frontSSS, diffuse, frontSSS)
and that did give me much better results than usual. Burn outs were gone and the final colors looked more pleasant. I poked around in the architectural shader that comes with 3delight (its a 3delight port of mia_material) and found this block in it:
if (brdf_conserve_energy == true)
{
diffuse_scale *= 1.0 - min(scaled_refr_color_a * transparency, 1.0);
diffuse_scale *= 1.0 - min(scaled_refl_color_a, 1.0);
transparency_scale *= 1.0 - min(scaled_refl_color_a, 1.0);
}
scaled_refr_color *= transparency_scale;
RGBA_COLOR(scaled_diffuse_color);
scaled_diffuse_color = i_diffuse_color * diffuse_scale;
}
So it seems like the values are in fact being brought down within the 0-1 range.
CGTalk Moderation
01-20-2010, 01:13 PM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.
vBulletin v3.0.5, Copyright ©2000-2012, Jelsoft Enterprises Ltd.