Combining Reflective Maps with Materials
Members - Reputation: 560
Posted 21 September 2011 - 03:00 PM
Crossbones+ - Reputation: 6543
Posted 22 September 2011 - 06:15 AM
It is just a sharp relfection of the surrounding light, specular lights are just a simulation of the reflection of very bright light sources, which could be dimmed by the gloss factor. I would try out the following basic formula:
When applying reflections to my materials, which component of lighting should it be under? I'm out like to say specular, but diffuse may be more accurate. Materials that aren't reflective should be blended by the material color of that component of lighting reflections are applied to, right? For example, a reflective surface that is 50% reflective should multiply the color from the reflection map by 0.5, and the material's, say, diffuse color by the reaming 0.5. Is this correct?
I = em + dot(L,N) * diff + (reflection + pow(dot(L,R),spec))*gloss*fresnel em = emission diff = diffuse spec = specular exponent gloss = gloss fresnel = fresnel formula reflection = value from your reflection texture L = light vector N = surface normal R = reflected eye/camera vector I = final intensity
My game: Gnoblins
Developer journal about Gnoblins
Small goodies: Simple alpha transparency in deferred shader
Moderators - Reputation: 1794
Posted 22 September 2011 - 02:10 PM
Vincent, you are on the right track with your ideas. The key point is energy conservation. The optical model of how light reacts when hitting a surface is usually described by a bidirectional reflectance distribution function (BRDF). Depending on the material such a functions can be very, very complex (think of layered, partially translucent materials such as the human skin, for example), but they can also be quite simple. In fact, the Phong model is a very simple BRDF.
Just think about how simplified optics would work on a smooth surface, while keeping energy conservation. Photons come in, and some of them are directly bounced back when hitting the outer layers of the material. That's your specular reflection. Depending on the material type (metal, dielectric, etc), these reflections can be wavelength dependent or not. And depending on the roughness of the surface, they can be more or less blurred.
The remaining energy penetrates further into the material and will be gradually diffused, ie. partially absorbed and partially bounced back in random directions. That's your diffuse color term. If the material is transparent or translucent, some energy will neither be specularly nor diffusely reflected, but transmitted through the material, potentially being refracted and/or some wavelength absorbed (filter materials).
I like this PDF here. It's a description of how the Mental Ray architectural shaders work. Although for offline use, the same principles are universally applicable. It comes with nice rendering examples of how the individual components influence the appearance of a material. Chapters 1.3 and 1.4 are most important. A simple energy conserving shader can go a long way towards realistic materials, even without simulating the more difficult effects like refractions or translucency.