D5 SSS|实时渲染中,捕捉半透明材质的流光

01 前言

1.1 什么是 SSS?

D5 GI 的文章中我们曾简单地讨论了现实世界中光的物理规律,提到了光线会在物体表面不断弹射,而计算机需要还原这种现象就能模拟出令人信服的真实感图像。

但事情并没有那么简单,如果你仔细观察的话,会发现相当多光线穿越物体表面进入内部的现象。这种现象是由于光线在传播过程中遇到了一些特殊的半透明(translucent)材质,例如蜡、大理石等,这时光线会进入这类物体的内部四处散射,并最终在表面的不同位置上离开。上述的物理规律我们称之为次表面散射(SubSurface Scattering),简称 SSS 或 3S

如图所示,当光线到达表面时,一些光将被表面反弹,产生镜面反射;另一些光线会进入内部继续传播。所谓“次表面(sub-surface)”,即指的是“表面以下”。

*图片引用自 Real-Time Rendering, 3rd Edition*

入射光线在击中材质表面后,继续被材质内部的“小颗粒”多次散射,这些被散射出材质表面的光线,从摄影机的角度看起来,就表现为材质的内部被光源“照亮”,材质看起来会有“透光”的感觉

1.2 SSS 能带来什么?

以往的渲染算法只考虑了光线在物体表面的行为,当然,这已经足够模拟很多材质;但在现实世界中,还有非常多常见的物体都是半透明材质的,例如浑厚的玉石、晶莹的水果、甚至我们人体的皮肤等。次表面散射考虑了光线在这类材质内部的情况,因此在渲染这类特殊材料时比前者能带来更多的真实感。

不仅如此,这类材质与光线的相互作用往往能够创造出十分动人的艺术效果,大幅提高画面的感染力。

SSS 关闭
SSS 开启

所以,当渲染器能正确表达出次表面散射时,可以更好地增强物体的质感,使其观感更加通透柔和;即使是在背光的场景中,光线也并不会被物体完全遮挡,而是会穿过半透明材质产生微妙的光感。也就是说,次表面散射的使用为画面增添了更高级的效果,并使得半透明物体更加生动鲜活,即所谓的“更纯、更透、更亮”。

总之,次表面散射是一种能够极大增强真实感渲染细节的技术。而 D5 渲染器 2.4 版本支持了 SSS 材质的渲染,为用户提供了更加强大的渲染工具。

02 D5 SSS 原理介绍

2.1 以往的解决方案

正如第一节所述,在虚拟的数字世界中还原次表面散射要比还原材料表面的反射复杂的多,而计算机想要正确模拟 SSS ,需要追踪光线在物体内部若干次弹射,直至最终从物体的表面射出的情况。无疑,次表面散射的模拟需要巨大的计算量,是业界一项艰巨的挑战,尤其是在时间预算只有不到0.03s的实时渲染中。

所以在任何专业的渲染器中,次表面散射都是作为进阶的材质特性存在,是高级的渲染技术。如果我们横向对比市面上主流的实时渲染器,就会发现大部分要么缺失 SSS 系统,要么是基于屏幕空间的算法实现。

屏幕空间的次表面散射是业界主流的实时次表面散射方案,在性能和效果上取得了很好的平衡,但它也存在一定的问题:例如,在复杂的遮挡时会出现缺失信息的情况;以及采样数量受到限制导致欠采样,最终表现出带状形或“团块感”等

可见,当前的 SSS 实时渲染在实际应用中仍然具有挑战性,即使在已有的解决方案中,也存在许多技术限制和缺陷,不能为设计师们提供较为理想的可视化体验。为了提供更好的解决方案,D5 团队决定提出更高质量的实时次表面散射方案—— D5 SSS

2.2 D5 SSS 方案

D5 团队在经过技术预研和需求对比后,决定采用将离线渲染算法与实时渲染方案结合的技术框架,实现实时的次表面散射效果。D5 SSS 能在保持实时性的同时,得到高质量的多次光线弹射结果。

Random Walk 是一种在物理上准确的 SSS 离线算法,光线会在模型内部散射并探索介质,因此能更准确体现模型的体积和表面的厚度。但是 Random Walk 虽然能保留精致的细节,但需要更长的时间计算,不能满足实时性的要求。因此,D5 团队将 Random Walk SSS 算法结合到了 D5 的 hybrid 渲染管线中,通过复用 GBuffer 的资源、时域上的降噪积累以及DXR的硬件加速,最终能呈现出实时的高质量 SSS 结果。

最终,用户只需要简单地调节一些参数后就能实时预览到半透明材质次表面散射的效果。并且,D5 SSS 还兼顾了实时预览下的效率和出图后的效果,提升了设计师的工作效率,提供了流畅的高质量可视化体验。

03 D5 SSS 效果与实操

3.1 D5 2.4 SSS 效果展示

目前,D5 2.4 已支持渲染 SSS 材质,这为设计师提供了一种更加强大的真实感渲染工具。

对于建筑行业的设计师来说,你现在可以更精确地渲染出大理石、石板等装饰性材料的通透效果,能更好地展示出设计的特色,展现出暧昧的光感,从而提升建筑的吸引力。

从图中可以看出,立面的大理石板不再是完全的遮光构件,而是略微透光,呈现出轻盈的效果。

对于室内、产品等行业的设计师来说,你现在可以更精确地渲染出陶瓷、玉石材质等的半透明效果,为设计增添柔和的质感。

从上图可以看到光线在物体表面内部散射,外观呈现出温润的光感

3.2 如何使用D5 SSS

使用“选择材质”工具(快捷键:I),吸取要修改的材质表面,在材质模板下拉菜单内,切换为“次表面散射”模板即可。

与自定义材质模板相比,次表面散射材质只有两个特殊的参数:

  1. 次表面颜色
  2. 散射强度

此外,在调节次表面散射材质的时候,常用到的参数还有三个:

  1. 基础色/基础色贴图
  2. 高光
  3. 粗糙度

这里我们以一个“玉石”材质的调节过程为例,演示 SSS 材质的参数使用方式。

初始材质

下图中,小兔子的材质为自定义模板,基础色为纯白色,为了排除参数的干扰,暂时把“高光”、“粗糙度”两个参数设置为0。

基础色/基础色贴图

为了制作玉石的纹理,在“基础色贴图”中,添加一张玉石纹理图:

开启“三向映射”,这样无需为小兔子模型展UV,便可以得到不错的纹理映射效果。

次表面散射参数

在材质模板下拉菜单内,选择“次表面散射”材质模板:

在这里,最初定义的基础色/基础色贴图,描述的是物体外表面的颜色,而“次表面颜色”参数,描述的则是物体内部被穿入的光线照亮后,散射出的颜色。

默认情况下,“次表面颜色”是50%的灰色,这意味着材质已经开始体现散射光线的效果,但是由于没有色彩倾向,看起来还不是很明显。

我们把“次表面颜色”改成自定义的色彩,就可以清楚地看到散射色彩对材质的影响:

次表面颜色的色彩,看起来就像是从物体的体积内部透出来的,在模型的阴影部分,体现得更为明显。

次表面颜色参数,本质上影响的是散射光线在物体内部散射的距离,RGB色值越大,红色、绿色或蓝色的散射光线就越明显,材质就会显得越透光。

散射强度参数,则是“次表面颜色”参数的倍增值,在原有的基础上放大或者缩小散射光线的穿行距离,进一步加强或者减弱材质的透光效果:

这里我们制作玉石效果,因此把次表面颜色设置为低饱和度的绿色,散射强度根据需要而定,本例中保留默认值1。

反射强度与粗糙度

玉石、宝石类材质,属于非金属材质中反射率最高的那一类,通常,它们的“高光”参数要设置为1。

“高光”参数控制着非金属材质的反射率,大多数非金属材质的高光数值在0.25~0.625之间,水的高光数值是0.25,宝石、玉石的高光数值是1.0。关于高光参数的详细解释,请参考D5渲染器帮助文档中关于高光的解释:材质参数分别控制什么效果?

高光设置为1后,玉石的感觉就出来了:

粗糙度描述的是材质表面是否粗糙,材质外观上体现为反射清晰程度的变化。玉石材质是示范粗糙度参数最好的例子之一,我们可以把粗糙度较高的玉石对应现实生活中未经打磨的玉石,经过抛光打磨后,玉石就会变得极为光滑,粗糙度接近0。

拖动粗糙度参数,可以实时预览到玉石抛光前后的质感变化:

最终,粗糙度设置为0.05,渲染结果如下:

3.3 SSS 注意事项

真实尺寸很重要

次表面散射材质的质感,会受到模型本身体积/厚度的影响。相同参数下,模型越小越薄,散射透光越明显,如下图所示:

因此,在实际使用过程中,推荐模型按照现实尺寸建模(例如玉石饰品通常大小只有几厘米),如果需要进一步加强或者减弱材质的透光程度,可以调节“次表面颜色”的明度值,也可以使用“散射强度”参数来修正材质的视觉效果。

已知问题

当前版本的次表面散射材质,仅支持直接光照(点光源、聚光灯、区域光、太阳光),暂时还不支持 HDRI 环境光照明,在未来的版本,D5渲染器会逐步完善次表面散射材质的功能。

04 总结

次表面散射是光线与半透明材质之间会发生的一种真实的物理现象,渲染器能准确还原这种规律无疑将会极大地提升画面的真实感。D5 2.4 中的次表面散射系统,可以为建筑、室内、产品等设计领域提供更强大的渲染工具,使得半透明材质的表现更加丰富与逼真,并为设计师提供了更多材质选择的可能,让可视化表达之旅无限延伸。

D5 SSS 方案的提出是 D5 渲染器迈向实时的照片级渲染一个重大进步,但并不意味它是终点。在 D5 渲染器的未来版本中次表面散射仍有潜力进一步增强和完善,为场景带来更真实的视觉效果。目前,D5 素材库已经提供了一系列 SSS 资产,包括了佛像、摆件等,未来将计划持续上线更多。

设计师们可以在 D5 2.4 中可以使用标签搜索(sss&3s)将这些资产添加到场景,或者利用次表面散射的模板制作自己的材质模型,在实时渲染中,捕捉半透明材质的流光