Blog of Rob Galanakis (@robgalanakis)

Skin Shader


The skinHero shader is designed for human skin, specifically the face, and replicates the unique properties of rim lighting, sub-surface scattering, and pore-level detail. Despite its visual fidelity, the shader is cheap (50 pixel shader instructions only), and uses less texture memory than a traditional normal-mapping shader with three 24-bit maps.

diffuseLight Texture: This is your color texture, it should be mostly void of lighting detail. An ambient occlusion map is held in the alpha channel.

normalSpecular Texture: This is a normal map. Note, this normal map should NOT have any high-frequency or small scale detail, as this will interfere with the micro-normal maps. It should, however, have wrinkles and unique skin detail. The alpha channel holds a specular level mask, which also functions as the gloss mask. Both use multipliers to get the final effect.

poreSSS Texture: This is the unique aspect of the skinHero shader. The RGB channels hold pore masks. White in the R channel is where the “striated wrinkle” micro-normal goes, such as the forehead and neck. Black in the R channel is where the “pore” MN goes, such as the nose. White in the G channel is where the “bumpy” MN goes, such as the beard area. White in the B channel is where there is no micro-normal detail, such as the ears, and this can also be used to “tone down” the effect of the other MN maps. The alpha channel holds the subsurface scattering texture, where the whiter something is, the more SSS it has. Should be 1/2 or 1/4 full size.

mn Textures: These are the micro-normal textures. It is suggested the provided textuers are used, though you can make your own, perhaps for unique effects.

ambCube Texture: This shader uses a diffusely convolved ambient cube map for ambient lighting.

specColor: This is the color of the specular highlights.

sssColor: This is the color of those areas where SSS contributes, especially on the ears, nose, and mouth area. The melanin color.

Leave a Reply