Overgrowth takes place in the savage world of Lugaru where rabbits, wolves and other animals are forced to use paws, claws and medieval weaponry to engage each other in battle. Combining 3rd person adventure platforming with intricate melee combat, Overgrowth achieves a unique feel. Overgrowth also benefits from Wolfire's brand new Phoenix Engine which has been built from the ground up to allow the use of cutting edge graphics, animation, and physics. Add to these exciting features Overgrowth’s realistic artificial intelligence and streamlined control system and the result is an astoundingly immersive experience.
When I loaded Aubrey's new rabbit model, it was clear that we needed a new rendering method in order to do it justice. Our basic object shader works best for hard surfaces like wood, leather and stone, not fuzzy ones like fur and cloth.
Posted by jeffr on Oct 1st, 2009
When I loaded Aubrey's new rabbit model, it was clear that we needed a new rendering method in order to do it justice. Our basic object shader works best for hard surfaces like wood, leather and stone, not fuzzy ones like fur and cloth. This problem was most obvious when the model was lit from behind:
It suffers from the 'plaster effect' -- it doesn't have the subtle shading effects that characterize the materials, so the surfaces that should look soft instead look harsh and rigid. In real life, fur and cloth always have tiny stray fibers that catch the light when lit from behind, giving a 'halo' effect. We can start to approximate this halo by lighting up surfaces that are perpendicular to our viewing direction, like this:
This is often used as a 'selection' effect in 3D games because it's an easy way to highlight edges. However, it needed to be toned down before we could use it as a realistic effect. First, I decided to modulate the brightness of the highlight by a softer version of the standard lighting equation, so that surfaces facing directly away from the light remain in shadow.
Finally, I used one of our unused texture channels (the alpha channel of the normal map) to specify which parts of the model are affected by rim lighting. This gives us detailed control of how fuzzy each surface should look. Here's the final shader applied to the rabbit model:
While I don't have time to make a detailed fur shader yet, I thought this effect went a long way towards making the rabbit's fur and clothes read as 'soft' materials. Does this effect work for you? Can you think of any ways that I could improve it? (permalink)