Unreal 中的光照函数材质为艺术家提供了对光照的更多控制。但这些函数仅适用于不透明网格和体积雾。此外,使用光照函数会导致光照遵循与投射阴影相同的昂贵渲染过程:光照函数贡献需要首先在屏幕空间中累积。然后第二遍评估屏幕空间中的光照。这是 GPU 上的顺序操作,因此由于资源同步和缓存刷新,需要更多时间。
使用传统管道和通道通过灯光功能渲染的场景。
这就是我们引入
光照
函数图集的原因,其中动画
光照
函数可以烘焙成 2D 纹理,存储起来,然后投射到场景中。将
光照
函数烘焙成 2D 纹理的过程是在 GPU 上完成的完全并行过程,结果在场景的所有视图之间共享。然后,在评估照明时,所有带有
光照
函数材质且未启用阴影投射的灯光都可以在屏幕上并行累积。这可以大大节省 GPU 时间:在运行
Talisman Demo 的
平台上,我们测量到 GPU 时间减少了 2 毫秒以上。
使用光照函数图集渲染的相同场景(降低了 GPU 成本)
但是也有一些限制。为了使
光照
函数材质有效并被烘焙到
光照
函数图集中,必须满足以下条件:
- 不允许采样深度缓冲区或世界位置
- 不允许采样 GBuffer
- 不应操纵 UV 来采样纹理。或者 UV 操纵必须与
光照
函数的纹理空间边缘对齐。否则,图集槽将不可重复。-
定向光被强制不采样图集(但我们计划取消该限制)。
当满足所有这些限制时,可以将光照函数烘焙到图集中,以便快速进行光照评估。我们会自动为您检测光照函数并将其路由进出光照函数图集。然后,您可以使用ShowFlag.VisualizeLightFunctionAtlas 1直观地看到哪些光照函数已包含在光照函数图集中或已从光照函数图集中排除,如下图所示。
光照
函数图集的可视化。单个
光照
函数被报告为不兼容。
如果您确实正确地操纵了 UV 或其他任何东西,您仍然可以使用详细信息面板中材质的“与
光照
函数图集兼容”属性强制将
光照
函数材质烘焙到图集中。然后,您负责确保光照函数在这种情况下正常运行。
艺术家有责任让光照函数在所有平台上都适合您为项目选择的图集的分辨率。图集分辨率受给定平台上 2D 纹理的最大分辨率限制。如果设置不符合这些限制,则插槽的分辨率将降低以适应硬件要求。
默认情况下,
光照
函数图集用于延迟照明、体积雾和流明。通过使用r.Translucent.UsesLightFunctionAtlas 1和r.SingleLayerWater.UsesLightFunctionAtlas 1 (需要重新启动编辑器才能重新编译着色器) ,可以对半透明和水材质启用光照函数图集采样,从而进一步提高项目的保真度 。
与上面的场景相同,但在半透明(后面的立方体)和单层水上启用了光照函数采样。
最后但并非最不重要的一点是,可以让
光照
函数图集考虑彩色
光照
函数材质。可以使用r.LightFunctionAtlas.Format 1 启用此功能(需要重新启动编辑器才能重新编译着色器)。设置为 0 时,使用 R8 纹理格式,否则使用 R8G8B8。
与上面相同的场景,但启用了彩色灯光功能图集。
需要注意的更多说明和 CVAR:
- 纹理图集中的光照函数将根据光照组件上设置的参数正确平铺和淡出。
- 实例光照函数材质将独立于其实例材质使用自己的插槽。
- r.LightFunctionAtlas:启用/禁用光照函数图集使用。
- r.LightFunctionAtlas.SlotResolution:烘焙光照函数材质的分辨率。
- r.LightFunctionAtlas.Size:图集的大小。值为 4 表示图集中最多烘焙 4x4=16 个光照函数材质。
扫描下方二维码,关注后点击菜单栏按钮“更多内容”并选择“联系我们”
获得更多虚幻引擎的授权合作方式和技术支持
。
“虚幻引擎”微信公众账号是Epic Games旗下Unreal Engine的中文官方微信频道,在这里我们与大家一起分享关于虚幻引擎的开发经验与最新活动。