Happycake Development Notes:
Materials
28 August 2004
Since I'd been working on graphics stuff with the shadows, I decided it was time to add a couple of other graphics features that'd been on the slate for a while. First was adjustable materials. Materials are referenced by name (e.g. "shiny_metal") and are stored in files that get hotloaded, so you can tweak them and see the updates live in the engine. So far there are just five parameters per material: ambient albedo, diffuse albedo, specular albedo, specular power, and specular metalness (which controls the color of the specular highlight). Certainly I could have gone all-out and done more (Fresnel, anisotropic BRDFs, whatever). But the focus of this project isn't on graphics, so I stopped at these 5 parameters, which was a sweet spot of Good Benefit for Not Too Much Work.
Here's an example of 4 barrels that have the same color texture but 4
different materials:
The banding on the barrels is there because my procedural cylinder generator doesn't want to do shared vertex normals right now. Yeah, it sort of ruins the effect. When we start importing artist-created models, it'll look a lot nicer.
In this next shot you can see the difference in materials between the
pavement runway-ish thing and the rail beside it. The rail has a metal-ish
material parameters so the specular highlight results in color amplification of
that surface per pixel. The surface next to it has a non-metal-ish
setting, and a different specular power, so we get this broader white shininess
across it. (This stuff can be hard to see from still images like this, but
compare the walkway to the picture above to see the difference the specularity
makes).
The other thing I added was dual-hemisphere ambient lighting. Instead of a
constant, objects get lit by blue from the top, brownish-red from the bottom,
and a gradient in between. Atman and I were generally talking about a plan
to use an environment cube map to do ambient illumination as well as reflective
surfaces, but just in case we didn't get to that any time soon, I wanted to put
this in.
You can see it in action on the barrels in the above picture; here's a close-up:
The brown-ness on the bottom is the effect of the ambient. It's pretty heavily overstated right now; I imagine I'll turn it down.
Sensitive tuning of parameters like that probably won't happen for a little
while. Supposedly this engine is all-HDR, except that we're not actually
using HDR-scaled lighting coefficients right now, because we often need to run
in 8-bits-per-channel so that blending will work on our development hardware.
And if you try to use HDR-scale constants with an 8-bit frame buffer, you find
that a whole lot of stuff gets quantized down to nothing or saturated to white.
It's not a fun situation. Maybe at some point I will figure out the right
values for an appropriate HDR scale, and then put in some hack factors to
convert those silently when we run in 8-bit. Hmmm....
[Back to Happycake development log]