GPUGems3真实感皮肤渲染技

《GPUGems3》中的“Chapter14.AdvancedTechniquesforRealisticReal-TimeSkinRendering”一文,自其问世以来,都是皮肤渲染领域经常会被参考到的主要文章,可谓皮肤渲染技术的集大成者,奠基之作。

本文正好借着系列文章对《GPUGems3》中此章节进行提炼总结的机会,对真实感皮肤渲染技术,进行一个系统的总结和提炼。

除了对《GPUGems3》中该篇文章本身内容的提炼,本文也会在其基础上,结合这些年真实感皮肤渲染技术的发展,聊一些更多的东西。希望能对当前业界真实感皮肤渲染技术的现状与发展,做一个较为全面系统的总结与提炼。

一、总览:皮肤渲染技术发展史

按时间分布,近20年皮肤主流渲染技术的发展可以总结列举如下:

次表面光照传输模型(SubsurfaceLightTransport,SSLT)[]

扩散剖面(DiffusionProfile)[]

偶极子(dipole)[]

纹理空间模糊(TextureSpaceBlur)[]

多极子(multipole)[]

屏幕空间模糊(ScreenSpaceBlur)或屏幕空间次表面散射(SSSSS,ScreenSpaceSubSurfaceScattering)[]

路径追踪次表面散射(Path-TracedSubsurfaceScattering)与光线步进(RayMarching)[]

预积分的皮肤着色(Pre-IntegratedSkinShading)[]

可分离的次表面散射(SSSS,SeparableSubsurfaceScattering)[]

需要注意的是,上面列出的时间点,可能并不是严格意义上的该技术提出的时间点,而是该技术在论文或会议上被提出,被大众熟知,被引入到皮肤渲染技术中的时间点。

接下来,先看一些近年游戏中的真实感皮肤渲染画面,然后让我们从皮肤渲染的基础理论开始讲起,对上面列出的近20年皮肤主流渲染技术,按流派和内容分别进行介绍。

二、近年游戏与渲染业界中的真实感皮肤渲染画面

来看一些近几年,游戏中真实感皮肤渲染的典型效果图。

从《孤岛惊魂5》开始:

图《孤岛惊魂5》中的皮肤渲染

图《孤岛惊魂5》中的皮肤渲染

《神秘海域4》:

图《神秘海域4》中的皮肤渲染

图《神秘海域4》中的皮肤渲染

《底特律:变人》:

图《底特律:变人》中的皮肤渲染

图《底特律:变人》中的皮肤渲染

当然,怎么都不能少了今年的热门UE4的Siren:

图数字人Siren的皮肤渲染

UE4

图数字人Siren的皮肤渲染

UE4

三、皮肤渲染基础理论

皮肤的渲染一直是渲染领域的难点之一:皮肤具有许多微妙的视觉特征,而观察者对皮肤的外观,特别是脸部的外观会非常敏感。皮肤的真实感渲染模型须包括皱纹,毛孔,雀斑,毛囊,疤痕等细节的模拟,而真实还原人体皮肤上的这些细节则是一个较大的挑战。

皮肤作为一种属性复杂的材质,其物理结构由多层结构组成,其表面油脂层主要贡献了皮肤光照的反射部分,而油脂层下面的表皮层和真皮层则主要贡献了的次表面散射部分。实验测试表明,光线接触到皮肤时,有大约94%被皮肤各层散射,只有大约6%被反射。

图多层皮肤结构

对于皮肤而言,图形学研究学者们已经制作了使用多达五个独立层[KrishnaswamyandBaranoski]的非常细致的模型,用于描述皮肤中的光学散射现象,而真正的皮肤则更加复杂。在医学上,仅皮肤表皮(epidermis)即被认为包含五个不同的层[Poirer]。在这种复杂性下对散射进行模拟可能是过度和没有必要的,但是真实的渲染需要在油质层下面建模至少两个不同的层,因为至少有一个层要用于镜面反射(specular)项。Donner和Jensen[DonnerandJensen]在年证明了单层模型不足以对真实感皮肤进行渲染,并展示了使用三层建模的改进方案。

图多层皮肤模型

因为其具有半透明属性光线会在皮肤的表层进行多次散射,散射根据其通过的路径衰减,简单来说就是光线会扩散到周围,这对于表现皮肤的质感起到很大作用。

一般的材质采用BRDF(bidirectionalreflectancedistributionfunction)可以很好的表达,但皮肤往往需要更加复杂的建模,如BSSDF。

图多层皮肤对光的散射和吸收

经验表明,皮肤渲染的渲染过程可由两个分量组成:

镜面反射(specularreflection)

次表面散射(subsurfacescattering)

下文将对上述两个分量分别进行说明。

3.1镜面反射(specularreflection)

镜面反射项(specularreflection)相对而言很简单,Gems3中推荐KelemenandSzirmay-KalosspecularBRDF用于皮肤镜面反射项的计算。因为KelemenandSzirmay-KalosspecularBRDF在实现和Torrance-Sparrow模型一样的渲染效果时,计算量要小得多。而现阶段基于物理的一些其他高光模型或改进方案也应该会得到不错的效果。

3.2次表面散射(SubsurfaceScattering)3.2.1半透明材质与次表面散射(TranslucentandSubsurfaceScattering)

首先,半透明材质在生活中无处不在:树叶、纸、蜡烛、牛奶、布料、生物的皮肤、贝壳、玛瑙等。事实上,几乎所有非金属物体都存在一定程度的次表面光传输(SubsurfaceLightTransport,SSLT)现象[Pharr],皮肤犹是如此。

上文提到,皮肤是一个多层结构,其表面油脂层主要贡献了皮肤光照的反射部分(约占入射光中的6%),而油脂层下面的表皮层和真皮层则主要贡献了次表面散射部分(约占入射光中的94%)。任何没有直接从皮肤表面反射出去的光,都会直接进入次表面层。这种占主要主导因素的次表面散射属性,决定了皮肤半透明的特征以及柔软的视觉外观。

入射光与皮肤进行交互的过程中,被部分吸收(获取颜色)并经过多次散射,返回并从进入点周围的3D邻域处表面离开。而有时光线会完全穿过像耳朵这样的薄薄区域,形成透射(Transmittance)。

图多层皮肤对光的散射和吸收

对于次表面散射而言,Jensen在年的论文《APracticalModelforSubsurfaceLightTransport》是次表面材质建模最重要的一篇论文,推导了许多重要的物理公式,计算模型,渲染时的参数转换,以及测量了许多生活中常见材质的散射系数等等。大部分后来的论文都是在基于这篇文章中的理论的一些提升。

3.2.2BRDF与BSSRDF

模拟半透明物体的方法有很多,例如VolumetricPathTracing,VolumetricPhotonMapping和BSSRDF。

其中,BSSRDF(BidirectionalSurfaceScatteringReflectanceDistributionFunction,双向表面散射反射分布函数)是目前的主流技术。

简单来说,传统的BRDF模型是BSSRDF的一种简化。BSSRDF和BRDF的不同之处在于,BSSRDF可以指定不同的光线入射位置和出射的位置。

图:BRDF和BSSRDF与皮肤交互,光散射的对比

对于BRDF模型来说,一次反射光照的计算是在光线交点的法线半球上的球面积分。而对于BSSRDF来说,每一次反射在物体表面上每一个位置都要做一次半球面积分,是一个嵌套积分。

其中BSSRDF的定义是:

只接受一个标量参数,这个参数的意义是光线入射位置和初设位置的曼哈顿距离。直观的理解就是,BSSRDF尝试将光线在物体表面内部中数千次的散射后所剩余的能量用一个基于入射点和出射点之间距离的函数去近似只接受一个标量参数,这个参数的意义是光线入射位置和初设位置的距离。也就是说,BSSRDF尝试将光线在物体表面内部中数千次的散射后所剩余的能量用一个基于入射点和出射点之间距离的函数去近似。这个近似则是基于几个假设:

1.次表面散射的物体是一个曲率为零的平面

2.这个平面的厚度,大小都是无限

3.平面内部的介质参数是均匀的

4.光线永远是从垂直的方向入射表面。

正因为有这些假设,所以很容易把出射光的强度与出射点和入射点之间的距离用一个函数去近似。而真实的模型往往比理想中要复杂的多,光线也有可能从各个角度入射,因此通过BSSRDF渲染的结果会有一定误差。

的求解非常复杂,通过近似可以得到:

,有了可以得到

其中,可以看出和自然指数相互联系。

3.2.3BTDF与透射(Transmittance)

有时光线会完全穿过像耳朵这样的薄薄区域。这是因为,光线经过一部分次表面后,最终没有在入射侧进行出射,而是从入射侧另一侧透出来,形成透射(Transmittance)。透过光的手会产生桔红色视觉外观同理。

图透射(Transmittance)的图示

图透过光的手会产生桔红色视觉外观

透射一般可以通过BTDF(双向透射分布函数,BidirectionalTransmittanceDistributionFunction)来描述。

这里先对几种分布函数的全称进行列举:

BRDF(双向反射分布函数,BidirectionalReflectanceDistributionFunction)

BSSRDF(双向表面散射反射分布函数,BidirectionalSurfaceScatteringReflectanceDistributionFunction)

BTDF(双向透射分布函数,BidirectionalTransmittanceDistributionFunction)

BSDF(双向散射分布函数,BidirectionalScatteringDistributionFunction)

作为讲解内容,之前有一篇文章(zhuanlan.zhihu.

转载请注明:http://www.shijichaoguyj.com/wxnr/7256.html

网站简介| 发布优势| 服务条款| 隐私保护| 广告合作| 网站地图| 版权申明

当前时间: