GPU PRO 5 - 4.1 Realistic Real-Time Skin Rendering on Mobile 笔记

本笔记仅为个人的理解,如果有误欢迎指出。

Realistic Real-Time Skin Rendering on Mobile

在移动平台上的实时真实皮肤渲染

本文讲述的是在移动端实现真实皮肤的渲染。

文章将皮肤渲染内容分为三个部分:

1,皮肤表面反射

2,皮肤次表面反射

3,颜色矫正

皮肤表面反射:

文章中应用了PBR常用的Cook-Torrance 光照模型的简化版本处理这个部分 。

具体来说:

(a) 使用 Beckmann 分布函数作为微表面法线分布函数(NDF);

(b) 使用一个非常粗略的几何项(Geometric Term)近似;

(c) 为了提高效率,我们牺牲了菲涅耳项(Fresnel Term)的严格正确性,改为根据每像素法线(per-pixel normal)而不是半角向量(half-vector)进行计算。

皮肤次表面反射:

这一部分文章采用的是常见的屏幕空间次表面散射实现。

利用一个屏幕分辨率1/4大小的Buffer作为光照累积缓冲区,将渲染场景中所有使用皮肤着色的角色入射光计算结果都存储到缓冲区中,然后在该Buffer进行一次高斯模糊用于模拟光线在皮肤内扩撒效果。

颜色校正:

由sRGB Gamma空间制作的 Albedo Texture 在进行光照计算的时候需要进行Gamma 校正,即转换到线性空间进行光照计算然后再转回显示器的sRGB空间。

优化:

文章表示皮肤的BRDF计算是最耗时的部分,这里可以用LUT优化,两个维度分别为:(法线与半角向量夹角)和 (法线与视线夹角)。

查找表存储4项:R通道存储 N·H 值,G 通道存储 N·V 值,B 通道存储预计算 Fresnel 项 ,A通道存储被镜面反射拿走之后,仍然留给漫反射的能量

额外项:

眼睛的散射:眼睛因为与人物整体着色风格格格不入所以需要特殊处理,文章并没有对眼睛进行次表面散射处理。对于近景镜头,额外加入少量视差偏移(Parallax Offset)来模拟眼球晶状体折射。

环境反射:

除了解析镜面反射之外,还使用预渲染 Cubemap 来模拟环境反射。该部分主要用于表现皮肤边缘区域(Rim Area)的反射效果。