其中UE默认的混合公式是:
\[
Lobe1 \cdot 0.85 \ + \ Lobe2 \cdot 0.15
\]
下图显示了UE4混合的过程和最终成像。
左:较柔和的高光层Lobe1; 中:较强烈的高光层Lobe2; 右:最终混合成像
非直接反射部分采用预卷积的cube map。
具体解析和实现请参看《由浅入深学习PBR的原理和实现》的章节3.3.2 镜面的IBL(Specular IBL)。
皮肤毛孔。
皮肤毛孔内部构造非常复杂,会造成反射(高光和漫反射)、阴影、遮挡、次表面散射等效应。
人类毛孔放大图,内部构造异常复杂,由此产生非常复杂的光照信息
在渲染毛孔细节时,需注意很多细节,否则会渲染结果陷入恐怖谷理论。
理论上,接近物理真实的渲染,毛孔的渲染公式如下:
\[
cavity \cdot Specular(gloss) \cdot Fresnel(reflectance)
\]
其中:
\(cavity\)是凹陷度。可从cavity map(下图)中采样获得。
\(Specular(gloss)\)表明高光项。
\(Fresnel(reflectance)\)是与视觉角度相关的反射。
然而,这种物理真实,使得凹陷太明显,视觉不美观,有点让人不适:
尝试微调高光和cavity的位置,可获得下面的渲染结果:
上图可以看出,高光太强,凹陷细节不足,也是不够真实的皮肤渲染结果。
实际上,可摒弃完全物理真实的原理,采用近似法:
\[
Specular(gloss) \cdot Fresnel(cavity \cdot reflectance)
\]
最终可渲染出真实和美观相平衡的画面:
UE4采用漫反射+粗糙度+高光度+散射+法线等贴图结合的方式,以高精度还原皮肤细节。
从左到右:漫反射、粗糙度、高光度、散射、法线贴图
具体光照过程跟Cook-Torrance的BRDF大致一样,这里不详述。
全局光照。
皮肤的全局光照是基于图像的光照(IBL)+改进的AO结合的结果。
其中IBL技术请参看3.3 基于图像的光照(Image Based Lighting,IBL)。
上图:叠加了全局光照,但无AO的画面
AO部分是屏幕空间环境光遮蔽(SSAO),其中AO贴图混合了Bleed Color(皮肤通常取红色)。
增加了红色Bleed Color的AO,使得皮肤渲染更加贴切,皮肤暗处的亮度和颜色更真实美观。
次表面散射(BSSRDF)。
这部分内容将在2.2更详细描述。
2.2 次表面散射次表面散射(Subsurface scattering)是模拟皮肤、玉石、牛奶等半透光性物质的一种物理渲染技术。
它与普通BRDF的区别在于,同一条入射光进入半透光性物质后,会在内部经过多次散射,最终在入射点附近散射出若干条光线。
由于R、G、B在物质内扩散的曲线不一样,由此产生了与入射光不一样的颜色。
红色光由于穿透力更强,更容易在皮肤组织穿透,形成红色光。
2.2.1 BSSRDFBSSRDF是基于次表面散射的一种光照模型,充分考虑了入射光在物质内部经过若干次散射后重新反射出来的光。
左:BRDF;右:BSSRDF,考虑了输入光在物质内散射后重新射出的若干条光