还在魔改UE4?快来康康如何利用GPU在UE4中生成光线追踪焦散效果
焦散是现实世界中常见的光学现象,从水面闪烁的浪花到透明玻璃背光的弧形高光,无处不在。
但是,在3D图形中精确模拟焦散并非易事。那些参与创建光线追踪渲染器的人,可能会知道要模拟焦散的话,困难重重:要追踪从高度抛光的表面反射回来或多次穿过透明物体的光线,计算会变得很耗时,并且调整这种非直观的设置需要艺术家要付出额外的努力。
如今的游戏引擎是基于光栅化管道的,开发人员通常会选择忽略焦散线,或者是用其他“作弊”的方式来进行焦散造假,让渲染图看起来逼真。
近年来,GPU光线追踪的出现,为加速“光子映射(photon mapping)”(或“光子贴图”)的实时渲染来了可能性。(光子映射是用于渲染精确焦散的流行技术。)
从那时起,英伟达就开发了一些使用快速GPU光子映射生成焦散的新方法。这些开发工作是在虚幻引擎4上实现的,终端用户使用虚幻引擎产品就可以得到焦散的效果,同时,还可以享受一些开源的资源库。
焦散效果集中在两个方面:
1、金属和透明网格周围的精细焦散,称为网格焦散(mesh caustics)(如图1)
2、水面上方和下方的焦散,强调流体运动并能够覆盖大面积,称为水体焦散(water caustics)(如图2)
两种方法对于高帧率使用都是低成本的,与动态环境完全交互,并且无需数据预处理即可使用。



今天,我们就先来看看网格焦散如何实现?
一、网格焦散
英伟达从一种称为光子溅射(photon splatting)的光传播方法的类别开始,通过重构技术来模拟网格焦散,这是经典光子映射的一种变体。
光子映射使用的方法有两个阶段:
【跟踪阶段(Tracing)】从光源到场景的光粒子(即光子)的正向跟踪。
【密度估计阶段(Density estimation)】在表面上的指定点周围计算光子的密度,以进行照明信息重建。
在英伟达的解决方案中,第二阶段被替换为了光子溅射。它没有找出局部光子密度,而是在光子撞击不透明表面后使用加色混合的方法直接绘制颜色。
与传统方法相比,喷溅具有多个优点。它使用GPU光栅化来加快速度,只需要简单的数据结构就可以来存储光子了,重要的是,它允许与光子微分耦合,这是一种以较低的计算成本提高图像质量的重要技术。
| 在UE4中使用网格焦散 |
Beta版发布通知:本文中讨论的参数,编辑UI和命令行在发布版本中可能会更改。在使用焦散功能之前,请确保已正确配置UE4中的光线追踪设置。
要在UE4编辑器中启用网格焦散,请首先完成以下设置:
1、检查当前「post-process volume 后期盒子」中的「Ray Tracing Mesh Caustics 光线追踪网格焦散」是否勾选,选择「启用」打开网格焦散效果
2、勾选光源属性表中的「Cast Mesh Caustics 投射网格焦散」,选择用于投射焦散的光源。
3、选择网格并导航至材质来选择要产生焦散的对象。如果材质是透明的,则将材质编辑器打开到「Details 详细信息」选项卡,并勾选「Cast Ray Traced Reflection Caustics 投射光线追踪反射焦散」和「Cast Ray Traced Refraction Caustics 投射光线追踪折射焦散」。
配置完这些设置后,下图显示可以在玻璃和金属物体周围看到默认的焦散效果。大多数光属性(包括强度,颜色,纹理蒙版和衰减)都会对焦散的外观产生直接影响。到目前为止,支持四种类型的光源:平行光、点光源、聚光灯、区域光。在同一视图中,至多可以有八个灯光投射焦散。
来看看启用焦散效果的步骤:



除了光源,焦散线的形状、强度和颜色也受到网格材质的基色、不透明度、法线贴图、折射率、粗糙度和金属值的影响。具有较高粗糙度或较低金属值的不透明物体会产生较弱的焦散。透明物体可以投射反射和折射焦散,实现方式:在材质编辑器的「Details 详细信息」选项卡中勾选「Cast Ray Traced Reflection Caustics 投射光线追踪反射焦散」和「Cast Ray Traced Refraction Caustics 投射光线追踪折射焦散」。
在「post-process volume 后期盒子」中,还添加了可以调整网格焦散的一组参数:
【Intensity 强度】可缩放焦散图案的强度。
【Max Trace Depth 最大跟踪深度】限制每条射线的最大反弹次数,这可能会影响光线追踪的性能。
【Enable Temporal Filtering 启用时间过滤】可切换时间过滤,从而减少闪烁效果并提高性能。
| 光子调试 |
另外,如要要检查实际的光子密度,在「viewport」菜单中,选择「View」, 「Ray Tracing Debug」, 「Mesh Caustics Debug Data」,然后在「post-process volume」中设置调试屏幕数据类型为「photon」(见下图)。

光线追踪调试菜单也提供了一个嵌入的实时图表来显示前面的帧的总光子数(如下图)。它可以通过在「post-process volume后期盒子」中设置「Debug Light Data Type调试光数据类型」为「Photon Count」来打开光子计数。

| 色散 |
若要启用色散,在材质编辑器的细节选项卡中,在材质编辑器的「Details详细信息」选项卡中将「Ray Traced Caustics Dispersion Amount光线追踪焦散量」设置为大于0的值即可。为了避免色带分离,需要勾选「Ray Traced Caustics Jittered Dispersion射线追踪焦散抖动色散」(见下图)。

到这里,你是不是已经能初步做出焦散效果了呢?更多精彩内容下期呈现,敬请期待。