UE5:Lumen 框架

1.Lumen渲染流程框架

 

2.Lumen基本概念

2.1 LumenCard & LumenMeshCards

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

2.2 LumenCardPage & LumenCardTile

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

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

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 格式。

2.4 LumenSceneFinalLighting

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

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

2.4.1 LumenSceneDirectLighting(第一次反弹灯光)

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

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 光照流程自然具有了间接光照。

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

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

2.5 MeshSDF & GlobalSDF

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。

3.1 PlaceProbe

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

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

可视化效果如下:

  • 绿色圆圈内的Probe就是Adaptive产生

3.2 RadianceCache

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

 3.3 Tracing

3.3.1 TraceScreen 技术原理

 

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

3.3.2 TraceMeshSDF技术原理

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

3.3.3 TraceGlobalSDF技术原理

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

3.4 Integrate & TemporalReprojection

相关推荐

  1. <span style='color:red;'>Lucene</span>

    Lucene

    2023-12-18 10:40:04      63 阅读
  2. lucene

    2023-12-18 10:40:04       38 阅读
  3. UE5.1_TimeLine

    2023-12-18 10:40:04       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-18 10:40:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-18 10:40:04       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-18 10:40:04       82 阅读
  4. Python语言-面向对象

    2023-12-18 10:40:04       91 阅读

热门阅读

  1. C语言:高精度减法

    2023-12-18 10:40:04       74 阅读
  2. layui中,table行里加载图片,高度不够的样式处理

    2023-12-18 10:40:04       65 阅读
  3. 设计模式策略模式讲解和代码示例

    2023-12-18 10:40:04       58 阅读
  4. Shading是什么?

    2023-12-18 10:40:04       55 阅读
  5. 深入了解CSS

    2023-12-18 10:40:04       52 阅读
  6. 进程间通讯-管道

    2023-12-18 10:40:04       58 阅读
  7. 60道KafKa高频题整理(附答案背诵版)

    2023-12-18 10:40:04       54 阅读
  8. 工作中 cmakelist 的积累

    2023-12-18 10:40:04       47 阅读
  9. NPM包脚手架:开启前端开发新纪元

    2023-12-18 10:40:04       55 阅读