UE5:Lumen 框架

1.Lumen渲染流程框架

UE5:Lumen 框架_第1张图片

 

2.Lumen基本概念

2.1 LumenCard & LumenMeshCards

LumenMeshCards:一组带有方向性的模型简化代理,视模型复杂度不同可能包含6个及以上数量的LumenCard;用来提供光照采样的位置和方向。

UE5:Lumen 框架_第2张图片

2.2 LumenCardPage & LumenCardTile

CardPage:128x128像素,LumenCard排布在上面。

LumenCardTile:8x8像素,用于Tile-Based lighting。

UE5:Lumen 框架_第3张图片

2.3 MeshCardCapture & SurfaceCache

MeshCardCapture :将LumenCard信息转换为SurfaceCache需要内容。

SurfaceCache:四个通道贴图

  • Lumen.CardCaptureAlbedoAtlas:存储 RGB:Albedo,Alpha:Opcity,格式:R8G8B8A8
  • Lumen.CardCaptureNormalAtlas:存储 RG:World Normal XY,格式:R8G8
  • Lumen.CardCaptureEmissiveAtlas:存储 Emissive,格式:R11G11B10
  • Lumen.CardCaptureDepthStencilAtlas:存储 Depth,系统当前 DepthStencil 格式。

UE5:Lumen 框架_第4张图片

2.4 LumenSceneFinalLighting

  • LumenSceneDirectLighting(第一次反弹灯光)
  • LumenSceneIndirectLighting(LumenRadiosity)

LumenSceneFinalLighting = (DirectLighting + IndirectLighting) * Diffuse_Lambert(Albedo) + Emissive;

UE5:Lumen 框架_第5张图片

2.4.1 LumenSceneDirectLighting(第一次反弹灯光)

Irradiance = LightColor * AreaLightFalloffColor * (CombinedAttenuation * NoL * ShadowFactor);

UE5:Lumen 框架_第6张图片

2.4.2 LumenSceneIndirectLighting(LumenRadiosity)

实际上严格来说 Lumen 并不是 Ray Tracing,而是 Ray Casting,因为光线在与 SDF 相交后并没有再次 Bounce,因此最多只能产生一次 Bounce 的 Indirect Lighting,为了弥补这一点,Lumen 使用 Radiosity 来生成 Indirect Lighting。

传统的 Radiosity 方法需要将场景划分为 Patch,而 Lumen 已经拥有了粗粒度的 Global DF 以及粗粒度的 Voxel Lighting,因此可以直接从 Surface Cache 上射出光线,与 Global DF 进行 Ray Tracing 求交,

交点采样上一帧的 Voxel Lighting 后转换为二阶球谐,最后再根据 Normal 计算 Diffuse Transfer 球谐系数,计算出最终的 Indirect Radiance。

这个 Indirect Radiance 也保存在 Radiance Cache 中,称为 Indirect Lighting,并与 Direct Lighting 合并计算得到最终的 Final Lighting,而下一祯的 Voxel Lighting 又来自于这一祯的 Radiance Cache,因此后续所有的 Lumen 光照流程自然具有了间接光照。

UE5:Lumen 框架_第7张图片

具体代码:Lumen:Radiosity-CSDN博客

原理解释:游戏引擎随笔 0x32:UE5 Lumen 源码解析(四)Radiosity 篇 - 知乎

2.5 MeshSDF & GlobalSDF

UE5:Lumen 框架_第8张图片

2.6 LumenScene

与 FScene 做个类比,SDF 相当于 Mesh,Surface Cache 相当于 Material,两者共同构成了低精度粗粒度的场景表达,这就是 Lumen Scene。

因此 Lumen Scene 包含了 DF 描述的场景几何表达以及 Surface Cache 描述的场景材质表达,是一个完整的系统。

Lumen Scene 管理着整个场景的 Mesh DF 更新、Global DF 合并以及 Surface Cache 的更新。

3.Lumen GI渲染(ProbeGather)

先摆放Probe,然后计算RadianceCache,通过TraceScreen(SSGI),TraceMeshSDF,TraceGlobalSDF三种全局光照技术,实现最终GI。

UE5:Lumen 框架_第9张图片

3.1 PlaceProbe

UniformPlacement:每16x16像素摆放一个Probe

AdaptivePlacement:UniformSize/2 循环摆放,默认停止条件是4。(8x8摆放一次,4x4摆放一次)

可视化效果如下:

  • 绿色圆圈内的Probe就是Adaptive产生
  • UE5:Lumen 框架_第10张图片

3.2 RadianceCache

UE5:Lumen 框架_第11张图片

 具体代码:LumenSceneProbeGather:RadianceCache-CSDN博客

 3.3 Tracing

UE5:Lumen 框架_第12张图片

3.3.1 TraceScreen 技术原理

 UE5:Lumen 框架_第13张图片

具体代码:LumenScreenProbeGather:TraceScreen-CSDN博客

3.3.2 TraceMeshSDF技术原理

UE5:Lumen 框架_第14张图片

具体代码:LumenScreenProbeGather:TraceMeshSDF-CSDN博客

3.3.3 TraceGlobalSDF技术原理

UE5:Lumen 框架_第15张图片

具体代码:LumenScreenProbeGather:TraceVoxels-CSDN博客

3.4 Integrate & TemporalReprojection

你可能感兴趣的:(#,UE之Lumen,ue5,Lumen)