bio projects contact
computer graphics
computer graphics



Project Overview: NSERC

During my research study, I spent time developing a realistic surface shader for skin for their rendering application, JCinema, in order to generate a more photorealistic rendering. Since the computational simulations developed in the lab are of biomechanical simulations of musculoskeletal systems (such as tendons of the hand, eye and forearm), surface shaders of biomaterials, skin in particular, was required. 

Software: Implemented in RenderMan Shading Language using PIXIE.

Challenge: Skin Shader and Sub-Surface Scattering 
To develop photorealistic renderings of human skin so that it cannot be distinguished from real life is a challenge in computer graphics. To create the realistic appearance of human skin, one needs to model the different and multiple layers of human skin and its complexions. The  "Bidirectional Surface Scattering Reflection Distribution Function" (BSSRDF) is a method proposed by which we can model this sub-surface scattering effect at a point P. The challenge was to develop a reasonable sub-surface shader for the lab that did not look too "plastic" and hence unrealistic, the shader also needed to be applied for arbitrary geometry found in the simulations produced by the lab.

Solution: Develop a realistic procedural skin shader using RenderMan's Shader Language that realistically depicts this translucency. In order to produce this sub-surface scattering, I needed to collect the samples of all the light arriving at a surface at the point being shaded.  By studied general surface shaders as well as other open source skin shaders to help model a realistic skin shader, I was able to produce a reasonable skin shader. I first attempted one skin tone and once obtaining reasonable results I focused on attempting another skin tone and experimented with different skin tone shades researched by academics. In order to model the appearance of translucency; first, I needed to compute the outgoing radiance at a point "P" and a normal "Nf", and use a density function and ramp factor to multiple this with a hard coded skin tone.  I used RenderMan Shader Language's built-in "illuminance" function; this function provides a way of collecting samples of all the light arriving at a surface at the point being shaded (RenderMan Companion, Steve Upstill). Further, in order to mimic the little imperfections found in skin, I found reasonable results by combining Perlin's noise using different hues of the same skin tone. 

Shading Results:
Here are some results of the Caucasian shader, I used Suzanne to test arbitrary geometry:

s1 sz sz2
s2 sz3 sz4