Han Yang's Portfolio
Skin Rendering
Intro
This is a project aimed at rendering realistic skin in real-time in OpenGL
Here I’ve implemented three methods:
Pre-integrated Skin Shading
Separable Subsurface Scattering
Screen space subsurface scattering using Burley’s normalized profile
TAA is used to reduce sampling noise and smooth zigzag edge
IBL is used to get a more realistic lighting
Shadow mapping is NOT implemented in this project
Pre-integrated Skin Shading
A lot of hacking, little math, low-cost method.
Could easily be insert into almost all pipeline (Forward or deferred)
Approximate real-skin with the cost of only a few additional textures(two LUT texture, one blurred normal map)
Almost no additional compute cost at runtime(relative to separable SSS or sampling method)
Here I used a compute shader to compute the LUT of skin shading before the rendering loop.
And a pre-computed curvature map of the head model is used to look up from the LUT.
The final normal dot light vector calculation used different normals for RGB channel (Used two normal texture, original and blurred, for interpolation)
Separable SSS
This is a screen space method
Approximate Kernel with truncated SVD
Used two passes of 1D convolution instead of a 2D convolution
Great quality with little GPU computing time
Screen space SSS with Burley’s profile
Profile from offline rendering
High quality scattering with the cost of screen-space sampling (Aligned to tangent space of the texel)
Used random rotation in screen space to reduce noise
Used inverse sampling of normalized burley's profile to get sample point
Can get physically plausible result with correct scatter distance of RGB
This is the subsurface scattering solution in unreal engine and unity’s HDRP

No SSS, point light only

Pre-integrated, point light only

Separable SSS, point light only

SSSSS with Burley's profile, point light only

No SSS, point light+IBL

Pre-integrated, point light+IBL

Separable SSS, point light+IBL

SSSSS with Burley's profile, point light+IBL

No SSS, point light+IBL

Pre-integrated, point light+IBL

Separable SSS, point light+IBL

SSSSS with Burley's profile, point light+IBL