UE教程

用心搭建好场景

ue5关于lumen相关知识点分享

Hello,大家好,今天给大家分享Unreal5关于lumen相关知识点。

感谢知乎Jiff的一张图解释了lumen的工作流程

Unreal5关于lumen相关知识点分享

稍微解释一下就是Lumen分为了两个部分,离线和实时运算

1、离线生成

离线部分就是首先为每个模型生成MeshCard。

Unreal5关于lumen相关知识点分享

MeshCard就是对每个mesh的捕获位置。但是mesh不能太过复杂,比如一个房间的的地面和墙等,需要被拆成单个mesh。以下这种就没有办法获取精确mesh card。

Unreal5关于lumen相关知识点分享

然后Lumen在各个meshcard捕获位置去获取每个mesh的材质属性等,并生成场景表面的自动参数化Surface Cache。Surface Cache可以快速查找场景中光线命中点的照明。

为静态模型生成Mesh Distance Field

Mesh Distance Field存储的是3D空间中的点距离物体表面最近的距离,就是软光追的一个加速器。有些mesh可能没有很好的距离场,并导致漏光的问题,所以可以直接在场景里面显示mesh distance field来检查问题。

Unreal5关于lumen相关知识点分享

然而在使用距离场mesh distance field之前,lumen会先使用屏幕空间追踪。因为屏幕追踪支持任何几何类型,可用于掩盖lumen场景和三角形场景之间的不匹配。并且屏幕空间追踪精度高。

如果在未找到命中或光线从表面后面通过时就使用mesh distance field来进行软光追。虽然lumen用mesh distance field去进行光线追踪效果已经很好了,但是考虑性能问题,渲染器将mesh distance field合并为global distance field以加速追踪,也就是,在每个mesh的前2米内使用mesh distance field去光线追踪(detail tracing),剩下的就直接使用global distance field去追踪整个场景(global tracing)。

Unreal5关于lumen相关知识点分享

上图红色表示Screen Trace,绿色表示mesh distance field,蓝色表示Global distance field。

2、实时运算

Lumen Scene就是一个进行软光追的低模场景,是很多的Mesh Card组成。

Unreal5关于lumen相关知识点分享

由于lumen scene只对摄像机附近的世界而不是整个世界进行操作,所以lumen在渲染的时候依靠Nanite的LOD和多视图光栅化来快速捕捉场景来更新surface cache。

Lumen是基于LOD来进行计算渲染的,所以如果传统模型没有LOD计算会非常慢。如果需要instance static mesh,它必须是Nanite而不是传统模型,因为在Nanite的网格上会快很多(大概快了10-100倍)。

以下是Lumen在Nainte和lumen scene的渲染对比

Unreal5关于lumen相关知识点分享

然后使用AtlasTexture等来存储meshcards上面的光照信息,最后将缓存的光照信息进行最终的IndirectLighting计算。

在最后的渲染阶段,Lumen非常依赖用Temporal Super Resolution在内部使用超低分辨率进行渲染,比如说在内部使用1080p的分辨率进行渲染,然后输出4k的分辨率。但是需要注意的是,如果你在PC平时使用时,没有调节Screen Percentage而使用默认的100,则在内部也会用4k分辨率去渲染。

Unreal5关于lumen相关知识点分享

3、其他

另外lumen的各种模型限制,材质限制和工作流程限制官网都有列出来

Unreal5关于lumen相关知识点分享

虽然lumen在unreal5中有两种光线追踪方法,软光追和硬光追,但是由于两者的一些限制,同时开效果会更好。

软件光线追踪,可以在任何DX11或更高版本的硬件上运行,并且可以选择超快运行,但是只支持有限的几何类型。而硬件光线追踪效果很好,但是消耗也非常高。并且硬光追对于PC来说,只能用D3D12,显卡最低配置Nvida RTX-2000和AMD RX-6000。

在early access的unreal5中,lumen支持使用的硬件光追的部分,也只有reflection和部分Final Gather,所以在早期,我们需要同时使用软光追的距离场和硬件光追来让lumen工作。

另外硬件追踪只会用Nanite的proxy 进行计算。目前硬件光线追踪作用的场景不能太大,不能多于10000个实例。

硬件光追比软件光追慢大概一半,但是更准确。使用硬件光追的时候避免重叠的物体,如果从场景里面有复制粘贴出来的重叠mesh,则会计算速度会明显变慢。

另外Lumen Reflections和Ray Traced Reflection(硬光追)的区别:

Lumen Reflection支持:

屏幕追踪

软件光线追踪

动态GI的反射(via surface cache)

天光的移动阴影反射(via surface cache)

两层Clear coat的反射

Ray Traced Reflections支持:

光照贴图Lightmap Gi的反射

多次反弹的反射

未来会把更多Ray Traced Reflection的其他功能添加到Lumen Reflection中