Final Project: Fake Fur Rendering

Thomas Smith

 

 

For my final project, I implemented Dan Goldman's "Fake Fur Rendering" to simulate fur in which the individual hairs are unable to be resolved. To do this, I implemented a new material in LRT called FakeFur and a new brdf called FurBRDF. The material essentially takes the parameters of the hair (which are hard coded except for the hair density) and passes them on the the brdf for evaluation. Hair is modeled with the following parameters: hair length, tangent, root radius, tip radius, and transmittance and reflection values. As a workaround for modeling the underlying skin using something like subsurface scattering, I included skin color in the material for use in blending with the hair illumination in the brdf. The underlying illumination model in the brdf is based on Kajiya's paper and is extended in Goldman's paper. The diffuse and specular compenents depend on the viewing, lighting, and hair tangent directions. Once these compenents are calculated and blended, they are attenuated by a forward and backward scattering function that relies on reflection coeffiecents and light, hair tangent, and viewing directions. The final piece is to use an opacity function to determine hair and skin shadowing and visibility.

The dog below shows the intended effect.

 

The implementation relies heavily on hair tangents and I implemented a simple hair tangent modeler in openGL. I am sure that there is an easier way to do this, but unfortunately, I was pretty inept at using 3d Studio Max. I ended up writing my own parser to convert the .ASE files produced by 3d Studio Max into rib files as well as files that the hair tangent modeler could use. I also initially started modeling my own dog, but decided after a few hours that the better idea was to use one from 3d Cafe (which is the dog in the image at the top). Other problems encountered were getting the tangents into LRT. This was accomplished via updating the function in api.cc.

The hair tangent modeler. Once a value for the tangent has been enter the tangents can be changed by running and clicking the pointer over them.

 

The rib file parameters to the FakeFur material are the diffuse and specular compenents and a hair density value "D". With other hard coded properties of the material, a D range of 1 - 15 works (corresponding to hairs per square unit area), where 1 is nearly all skin and on the other end is all hair. Below shows the effects of varying hair and density values.

Fur density in the top row has rougly halve the value in the bottom row. Tangents are varied for the squares from left to right. All the other parameters for the material are the same.

 

Files:
fakefur.cc
reflection.cc
reflection.h
api.cc
parser.zip(parsing ASE files into ribs and into files for TangentModeler)
TangentModeler.zip(without FLTK libraries)

ribs:
DogBody.rib
DogMouth.rib
DogRest.rib
fur.rib
dogone.ase(output from Studio Max)

References:
Goldman, Dan B, "Fake Fur Rendering."
Kajiya, James T., and Timothy L.. Kay, "Rendering Fur with Three Dimensional Textures."