剖析Unreal Engine超真实人类的渲染技术Part 1 - 概述和皮肤渲染 (3)

皮肤渲染技术经过数十年的发展,由最初的单张贴图+伦勃朗的渲染方式到近期的基于物理的SSSSS(屏幕空间次表面散射)。由此衍生出的皮肤渲染技术层出不穷,其中最最基础也最具代表性的是次表面散射(SSS)。

在虚拟角色渲染中,皮肤的渲染尤为关键。因为皮肤是人们每天亲眼目睹的非常熟悉的东西,如果稍微渲染不好或细节处理不足,便会陷入恐怖谷(Uncanny Valley )理论。至于什么是恐怖谷理论,参看这里。

剖析Unreal Engine超真实人类的渲染技术Part 1 - 概述和皮肤渲染

上图由于皮肤的细节处理不到位,陷入了恐怖谷理论

2.1 皮肤的构成和理论 2.1.1 皮肤构成

人类皮肤的物理构成非常复杂,其表层和内部都由非常复杂的构成物质,剖面图如下:

剖析Unreal Engine超真实人类的渲染技术Part 1 - 概述和皮肤渲染

绒毛(hair shaft)。附着于皮肤表面的细小的毛。

油脂(oil)。皮肤表层有一层薄薄的油脂覆盖,是皮肤高光的主要贡献者。

表皮(epidermis)。油脂层下是表皮覆盖,是造成次表面散射的物质之一。

真皮(dermis)。表皮下面是真正的皮肤组织,也是造成次表面散射的物质之一。

毛囊(hair follicle)。绒毛的皮下组织和根基。

静脉(vein)。呈深蓝色的血管。

动脉(artery)。呈暗红色的血管。

脂肪组织(fatty tissue)。脂肪组织也是造成次表面散射的次要贡献物质。

其它:皮肤表面的纹理、皱纹、毛孔、雀斑、痘痘、黑痣、疤痕、油脂粒等等细节。

剖析Unreal Engine超真实人类的渲染技术Part 1 - 概述和皮肤渲染

真实皮肤包含了非常多的细节:毛孔、绒毛、痘痘、黑痣、油脂......

2.1.2 皮肤建模

皮肤表面油脂层主要贡献了皮肤光照的反射部分(约6%的光线被反射),而油脂层下面的表皮层和真皮层则主要贡献了的次表面散射部分(约94%的光线被散射)。

虽然皮肤构成非常复杂,但图形渲染界的先贤者们利用简化的思维将皮肤建模成若干层。

剖析Unreal Engine超真实人类的渲染技术Part 1 - 概述和皮肤渲染

表面油脂层(Thin Oily Layer):模拟皮肤的高光反射。

表皮层(Epidermis):模拟次表面散射的贡献层。

真皮层(Dermis):模拟次表面散射的贡献层。

以上展示的是BRDF建模方式,只在皮肤表面反射光线,但实际上在三层建模中,还会考虑表皮层和真皮层的次表面散射(BSSRDF),见下图中间部分BSSRDF。

剖析Unreal Engine超真实人类的渲染技术Part 1 - 概述和皮肤渲染

2.1.3 皮肤渲染流程

皮肤渲染涉及的高级技术有:

线性空间光照工作流。这部分可以参看《Technical Artist 的不归路 —— 线性空间光照》。

基于物理的光照(PBR)。这部分的理论和实践可以参看笔者的另一篇技术文章:《由浅入深学习PBR的原理和实现》

大量后处理。

1~5个实时光照和1个预计算光照探头。

皮肤渲染的过程可以抽象成以下步骤:

皮肤反射。

直接反射部分采用Cook-Torrance的BRDF,公式:
\[ f_{cook-torrance} = \frac {D(h)F(l,h)G(l,v,h)}{4(n\cdot l)(n\cdot v)} \]
具体解析和实现请参看《由浅入深学习PBR的原理和实现》的章节3.1.3 反射方程。

UE的皮肤渲染采用双镜叶高光(Dual Lobe Specular)。双镜叶高光度为两个独立的高光镜叶提供粗糙度值,二者组合后形成最终结果。当二者组合后,会为皮肤提供非常出色的亚像素微频效果,呈现出一种自然面貌。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyfffj.html