1.34k likes | 1.38k Views
SIGGRAPH 2007 GPU Gems 3: Advanced Skin Rendering. Eugene d’Eon. Outline. Demo: Human Head The Appearance of Skin An overview of the system Specular Surface Reflectance Scattering Theory Advanced Subsurface Scattering. Demo. The Appearance of Skin. Difficult to simulate:.
E N D
SIGGRAPH 2007 GPU Gems 3:Advanced Skin Rendering Eugene d’Eon
Outline • Demo: Human Head • The Appearance of Skin • An overview of the system • Specular Surface Reflectance • Scattering Theory • Advanced Subsurface Scattering
The Appearance of Skin • Difficult to simulate:
The Appearance of Skin • Difficult to simulate: • Detailed
The Appearance of Skin • Difficult to simulate: • Detailed • Modern scanning
The Appearance of Skin • Difficult to simulate: • Detailed • Modern scanning • Translucent
The Appearance of Skin • Difficult to simulate: • Detailed • Modern scanning • Translucent • Subsurface scattering
Two Component Reflectance Model • Most materials use two components
Two Component Reflectance Model • Most materials use two components • Surface reflectance (specular)
Two Component Reflectance Model • Most materials use two components • Surface reflectance (specular) • Subsurface reflectance (diffuse)
Two Component Reflectance Model • Most materials use two components • Surface reflectance (specular) • Subsurface reflectance (diffuse) • Use Physically based models
Two Component Reflectance Model • Most materials use two components • Surface reflectance (specular) • Subsurface reflectance (diffuse) • Use Physically based models • Specular BRDF
Two Component Reflectance Model • Most materials use two components • Surface reflectance (specular) • Subsurface reflectance (diffuse) • Use Physically based models • Specular BRDF • Efficient subsurface scattering approximations
Skin Surface Reflectance • Start with a physically based model for skin [DJ2006]
Skin Surface Reflectance • Start with a physically based model for skin [DJ2006] • Consider top-most interaction
Skin Surface Reflectance • Start with a physically based model for skin [DJ2006] • Consider top-most interaction • How much light reflects?
Skin Surface Reflectance • Start with a physically based model for skin [DJ2006] • Consider top-most interaction • How much light reflects? • What direction(s)?
Skin Surface Reflectance • Only ~6% of the incident light (on average) reflects directly [Tuchin 2000]
Skin Surface Reflectance • Only ~6% of the incident light (on average) reflects directly [Tuchin 2000] • This is due to a Fresnel reflection • Not colored by the skin
Skin Surface Reflectance • Only ~6% of the incident light (on average) reflects directly [Tuchin 2000] • This is due to a Fresnel reflection • Not colored by the skin • The topmost skin surface is rough • Single incoming direction: many outgoing directions
Skin Surface Reflectance • Only ~6% of the incident light (on average) reflects directly [Tuchin 2000] • This is due to a Fresnel reflection • Not colored by the skin • The topmost skin surface is rough • Single incoming direction: many outgoing directions • Use a specular BRDF function
Skin Surface Reflectance • Which BRDF should we use?
Skin Surface Reflectance • Which BRDF should we use? • Phong and Blinn-Phong • Not physically based • We can do better
Skin Surface Reflectance • Which BRDF should we use? • Phong and Blinn-Phong • Not physically based • We can do better • Turn to more physically based models
Skin Subsurface Reflectance • What about the remaining 94%?
Skin Subsurface Reflectance • What about the remaining 94%? • We need to compute subsurface scattering
Skin Subsurface Reflectance • Subsurface scattering • Gives skin soft appearance and color
Skin Subsurface Reflectance • Subsurface scattering • Gives skin soft appearance and color • Expensive to compute
Skin Subsurface Reflectance • Subsurface scattering • Gives skin soft appearance and color • Expensive to compute • Essential for realistic appearance Subsurface scattering No Subsurface scattering *Scan data courtesy of XYZRGB Inc.
Overview • Two component reflectance • Specular BRDF • Subsurface scattering approximation
Overview • Two component reflectance • Specular BRDF • Subsurface scattering approximation • Specular • Kelemen Szirmay-Kalos 2001 BRDF • Schlick fast Fresnel • Weyrich et al. 2006 measured parameters
Overview • Two component reflectance • Specular BRDF • Subsurface scattering approximation • Specular • Kelemen Szirmay-Kalos 2001 BRDF • Schlick fast Fresnel • Weyrich et al. 2006 measured parameters • Subsurface • Advanced texture-space diffusion • Stretch map correction • Multiple Gaussian blurs mixed
Overview Diagram Start … blur blur blur Linear combination texture mapping Stretch maps Final pass: combine blurs + specular
Specular Surface Reflectance • Use a physically based BRDF
Specular Surface Reflectance • Use a physically based BRDF • Phong and Blinn-Phong can be improved upon
Specular Surface Reflectance • Use a physically based BRDF • Phong and Blinn-Phong can be improved upon • Torrance-Sparrow has proven realistic • Too lengthy to compute exactly
Specular Surface Reflectance • Use a physically based BRDF • Phong and Blinn-Phong can be improved upon • Torrance-Sparrow has proven realistic • Too lengthy to compute exactly • Kelemen Szirmay-Kalos 2001 • Faster than TS • Even faster with Schlick’s Fresnel term
Phong vs. physically-based BRDF * Phong KS BRDF Phong KS BRDF *[Kelemen and Szirmay-Kalos 2001]
Phong vs. physically-based BRDF • Increased specularity at grazing angles • Here we use Kelemen-Szirmay-Kalos 2001
Rendering with a BRDF • BRDFs • Several analytic terms • Fresnel
Rendering with a BRDF • BRDFs • Several analytic terms • Fresnel • Parameters • rho_s • Vectors N, V, L • Roughness (m) • Index of refraction (eta)
Rendering with a BRDF • BRDFs • Several analytic terms • Fresnel • Parameters • rho_s • Vectors N, V, L • Roughness (m) • Index of refraction (eta) specularLight += lightColor[i] * lightShadow[i] * rho_s * specBRDF( N, V, L[i], eta, m) * saturate( dot( N, L[i] ) );
Rendering with a BRDF • The dot( N, L ) is important • Only works for point/spot lights • Environment lights are expensive • Glossy reflections • See Kautz and McCool 2000 specularLight += lightColor[i] * lightShadow[i] * rho_s * specBRDF( N, V, L[i], eta, m ) * saturate( dot( N, L[i] ) );
Fresnel Reflectance for Rendering Skin • All physically based BRDFs have a Fresnel term, F
Fresnel Reflectance for Rendering Skin • All physically based BRDFs have a Fresnel term, F • Requires knowing index of refraction, eta • Look to skin research: use 1.4 [DJ2006]
Fresnel Reflectance for Rendering Skin • All physically based BRDFs have a Fresnel term, F • Requires knowing index of refraction, eta • Look to skin research: use 1.4 [DJ2006] • Dielectric, unpolarized Fresnel reflectance
Fresnel Reflectance for Rendering Skin • All physically based BRDFs have a Fresnel term, F • Requires knowing index of refraction, eta • Look to skin research: use 1.4 [DJ2006] • Dielectric, unpolarized Fresnel reflectance • Use Schlick’s fast Fresnel approximation: // H is the standard half-angle vector. F0 is reflectance at normal incidence (for skin use 0.028). float fresnelReflectance( float3 H, float3 V, float F0 ) { float base = 1.0 - dot( V, H ); float exponential = pow( base, 5.0 ); return exponential + F0 * ( 1.0 - exponential ); }
Fresnel Reflectance for Rendering Skin Using textbook Fresnel Formula Using Schlick’s Fresnel
Roughness parameter • How do we set roughness parameter m? *[Donner and Jensen 2005]