D5 实时焦散丨让真实的焦散光影映射到 3D 世界

联系我们

一、 前言

1. 什么是焦散?

你听说过焦散这个词吗?你能准确地定义焦散吗?

不是所有人都知道焦散的确切定义,但大家肯定都在生活中见过焦散现象。

如下图:

灯光照射在玻璃器皿上

模拟泳池底部和墙壁上的动态波纹

从定义上来说,焦散指的是光从光源—>镜面反射/折射的表面(经过一次或多次反射/折射)—>漫反射表面—>摄影机或眼睛的光照贡献。

画成光路分析图是这样:

如上图,光线在玻璃兔子上发生了 2 次折射后,打到漫反射的桌面,最后进入摄影机。

2. 产生焦散的条件

根据焦散的定义,我们可以总结出产生焦散现象的三个要素:

  1. 发出光线(确切说是焦散光子)的光源;
  2. 对光线有反射/折射特性的表面(如玻璃,金属等);
  3. 承接焦散的漫反射表面。

注意:现实生活中,只要是光,就可以带来焦散。但是在渲染器中,光源是通过发射“焦散光子”来模拟焦散现象的。

二、用户对焦散的“刻板印象”

长期以来,广大渲染器用户对于焦散渲染有两点刻板印象:

  1. 焦散原理抽象,需要学习焦散参数的设置方法;
  2. 焦散是一种“高级”特效,渲染比较慢。

这两个问题确实存在,焦散从原理上涉及到光源和材质的相互配合,要正确产生焦散,用户往往需要准确配置灯光的参数、材质的透光算法,以及合适的采样参数。这里面无论哪个环节出了问题,焦散都不会产生好的效果。

另外,焦散收敛成无噪点的结果确实需要一定时间,所有渲染器都在努力优化这方面的性能。

三、D5 的实时焦散解决方案

1. 解决痛点

D5 渲染器在 2.5 版本引入了实时焦散渲染功能。针对焦散常见的两个痛点,D5 实现了以下两大亮点:

  1. 参数简化:焦散参数被简化成灯光和材质面板中的开关,只需两次点击,便可以产生焦散效果,无需反复调整参数,一切都已预设好。目前,四种基础光源:点光源、聚光灯、灯带、区域光支持发射焦散。“自定义”材质支持反射焦散光子,“水”和“透明”材质同时支持反射和折射焦散。
  1. 实时渲染:D5 渲染器的焦散功能已经可以做到实时渲染,灯光与材质的交互反馈非常直观、迅速。

注意:实时渲染时为了追求性能,焦散的精度有一定压缩。出图、出视频时,焦散精度会进一步提高,但对内存的要求也会更高。

2. 技术背景

通俗地讲, D5 渲染器是这样计算焦散的:

  1. 通过光源发射光子,让光子经过多次反射和折射,记录下它们在空间中的位置和颜色;
  2. 根据光子的位置和颜色信息,进行散射计算,算出屏幕空间的焦散效果;
  3. 接着,对焦散效果进行时间和空间上的降噪,最后把它们叠加到画面上。

四、实际案例

以此场景为例:

此场景中的水纹灯,是一个表面凹凸不平的玻璃管模型。

注意:模型的凹凸也可以使用法线纹理的噪波代替,都可以影响焦散效果。

为了让玻璃管旋转,可以在视频界面定义玻璃管对象的旋转关键帧,也可以使用建模具制作玻璃管的旋转动画,并以 .abc 格式导入 D5 渲染器。

与现实生活中的水纹灯一样,我们把光源放置在旋转的玻璃管下方,并开启光源的焦散开关。

同时,使用材质吸管工具,设置水纹灯模型的材质为“透明”模板,也开启焦散开关,实时焦散效果立刻就会出现了。

可以调整灯光焦散的强度和柔化参数,得到想要的效果:

获取更多 D5 渲染器 2.5版本更新详细内容,可查看:D5渲染器 2.5 上线丨实时焦散、SU实时同步等