UE5 Lumen实时全局光照系统简单分析

这篇具有很好参考价值的文章主要介绍了UE5 Lumen实时全局光照系统简单分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

  做这个调研分析的时间应该在去年(2022)十二月初的几天时间,主要是通过UE官方的直播讲解和在SIGGRAPH 2021(Radiance Caching for Real-Time Global Illumination)及2022(Lumen: Real-time Global Illumination in Unreal Engine 5)的两次分享进行学习了解。没有看具体源码,所以文章内容全部为个人理解,同时Lumen经过后续更新,似乎一些方法也已经被更换。

什么是Lumen

  Lumen是UE5的实时全局光照(Realtime Global Illumination)解决方案,核心为一套实时的软光线追踪系统,但同时也支持硬件光追,本文的关注点也在其软光追部分。

UE5 Lumen实时全局光照系统简单分析
  简单来说Lumen实现实时GI的主要方式是就是在屏幕空间全局光照(SSGI)的基础上使用有向距离场(SDF)加速光线与场景求交,并通过Surface Cache存储材质光照信息,即基本过程如下:

  1. 使用SSGI进行光线追踪,得到一部分像素的全局光照信息
  2. 对于SSGI未命中的像素,通过使用屏幕空间探针插值来获得全局光照信息(屏幕空间探针发射多条射线对场景进行追踪)。这里也使用了稀疏的世界空间探针处理远光以降低噪点
  3. 光线追踪部分使用了场景的距离场进行求交,并通过Surface Cache获得光照信息(Surface Cache在运行时会有选择的进行更新)

SSGI

  屏幕空间全局光照的做法就是利用屏幕空间的深度、法线等信息进行光线追踪,Lumen中使用了层次Z缓冲(Hierarchical Z Buffer)的结构来加速求交。当然,SSGI最大的问题自然是无法获得屏幕外的信息(就像SSR实现的水面,低下头倒影也跟着屏幕上方被裁切掉了)。

屏幕空间探针

  只是SSGI并不能满足全局光照的需求,于是就还需要在场景中进行光线追踪。传统的方式是对屏幕上的每一个像素发射一条或多条射线与场景求交,而Lumen认为这种方式噪声相对较大,于是采用了在屏幕空间的物体表面每隔一定距离放置探针的方式,并在探针处追踪较多的光线,并对采样的Radiance进行缓存。探针先是稀疏均匀放置的,但如果某一像素不能使用周围探针进行插值,则会在该像素位置放置探针(如下图所示)。

UE5 Lumen实时全局光照系统简单分析
最后探针会进行一个3x3的卷积降噪,并最终将光照结果插值到像素上。同时这里也使用了BRDF以及上一帧的光照信息进行重要性采样,从而提高了采样的效果。

UE5 Lumen实时全局光照系统简单分析

世界空间探针

  只是屏幕空间探针仍然不能很好的解决远光问题,因此lumen引入了世界空间探针,在世界空间更稀疏的放置探针,但采样了更多方向的光。此时lumen将屏幕空间探针追踪距离设置为一个较短范围内,更远的距离使用世界空间探针,但为了防止漏光,世界空间探针追踪的方向可能和屏幕空间探针的方向不同,虽然这也引入了一定的偏差。

UE5 Lumen实时全局光照系统简单分析

Mesh SDF与Surface Cache

  前边提到了需要在场景中进行光线追踪,Lumen采用有向距离场SDF得到空间一个点到物体表面的最近距离(当在物体内部时,距离为负),使用RayMarching快速获得光线与场景的交点。因为通常模型都是三角面表示的,因此模型对应的距离场需要额外计算,而且表示精度会有一定损失。Lumen为每个静态网格单独生成Mesh SDF,在模型导入的时候被生成。

UE5 Lumen实时全局光照系统简单分析

Mesh SDF,可以看到场景中的物体表示是分离开的

  SDF只提供了交点和法线,不能提供光线交点的材质光照等信息,同时也需要对一些昂贵的计算进行缓存,于是Lumen采用了Surface Cache来存储物体的材质光照信息。简单来说,一个网格体被多个轴对齐的Mesh Card捕捉并存储。

UE5 Lumen实时全局光照系统简单分析
Surface Cache在运行时会不断更新,但并不是每帧都全部更新,而是根据与上次使用时间、上次更新时间相关的优先级选择其中的一部分。对于Surface Cache直接光照的计算会复用shadow maps,不能解决的部分向光源追踪光线判断是否在阴影中。间接光照则类似于上述讲到的屏幕空间探针,Lumen会以一定密度在表面放置探针并追踪光线,将结果插值至周围纹素。

Global SDF与Voxel Lighting

  上述内容理论上其实已经能够跑通了,但场景中通常存在大量的网格体,遍历所有Mesh SDF进行RayMarching代价过于昂贵,于是Lumen又为整个场景生成了一个Global SDF(动态物体与静态物体分别缓存,在运行时仅更新变化的部分)。

UE5 Lumen实时全局光照系统简单分析

Global SDF,精度更低但求交更快

相比于Mesh SDF, Global SDF精度要更低,Lumen选择在近距离追踪时采用Mesh SDF(在场景单元格内维护了从该单元格出发求交,所需求交的物体,因此只会求交一部分物体),在远距离追踪时采用Global SDF。但,这里就又出现了一个问题…Surface Cache是基于物体的,当光线与Global SDF求交时,找到了交点却不知道这是哪个网格体被击中了,无法对物体surface cache进行采样。因此Lumen又使用了Voxel Lighting,将相机周围体素化并将Surface Cache中的光照信息存储在里面,这样在与GDF求得交点后就可以对应至Voxel获得光照信息。

UE5 Lumen实时全局光照系统简单分析

总结

  所以Lumen的核心思路就是在SSGI的基础上对SDF的表达的场景进行更快的光线追踪,同时选择性的更新场景中的光照信息以降低压力,并使用屏幕探针和世界探针来进一步降低噪声。其中使用了Mesh Card捕捉物体表面并存储在Surface Cache中,Surface Cache用来提供SDF无法提供的物体表面材质、光照信息,体素化场景则是用来在更大场景中提供光照信息。

(再次说明:这是经过个人理解的旧的Lumen方案,其中可能存在错误,参考见前言部分)文章来源地址https://www.toymoban.com/news/detail-442189.html

到了这里,关于UE5 Lumen实时全局光照系统简单分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UE5增强输入系统 Enhanced Input

    : Enhanced Input 、 输入、映射、事件、鼠标、键盘、键鼠、动作、Trigger、触发器、 新输入系统怎么做一个基础的案例? Trigger修改器中每个项都是什么功能? 功能边界问题:如时刻、时段、单次事件、持续事件、可变频率事件,延迟事件、前置事件、后置事件? Inpu

    2024年04月22日
    浏览(36)
  • (UE5 5.2)HISM Mobile DrawInstance在渲染层的实现浅分析

    在 (UE4 4.27) UHierarchicalInstancedStaticMesh(HISM)原理分析 这篇博客大致介绍HISM组件从游戏线程到渲染线程的重建KD-Tree和剔除并提交DrawCall逻辑,但是没有分析渲染层的大致数据结构和实现.  可以看出FHierarchicalStaticMeshSceneProxy 实际存储Instance数组数据来自于FInstancedStaticMeshSceneProx

    2024年02月10日
    浏览(48)
  • UE5动画重定向:理解并实现动画系统

    本文详细介绍了UE5中动画重定向的概念和实现方法。文章内容包括动画系统的基本概念,动画重定向的原理和使用场景,以及如何在UE5中设置骨骼链和使用IK重定向器导出生成新动画。

    2023年04月11日
    浏览(72)
  • UE5C++学习(一)--- 增强输入系统

    一、关于增强输入系统的介绍 增强输入系统官方文档介绍 二、增强输入系统的具体使用 注:在使用方面,不会介绍如何创建项目等基础操作,如果还没有UE的使用基础,可以参考一下我之前UE4的文章,操作差别不会很大。 如上图所示,在自己创建好的项目工程中,找到.Bu

    2024年02月05日
    浏览(41)
  • UE5.2 LyraDemo源码阅读笔记(五)输入系统

    Lyra里使用了增强输入系统,首先知道增强输入系统里的三个类型配置。 一、Input Actions (IA): 输入操作带来的变量,与玩家的输入组件绑定,回调里驱动玩家行为。 二、InputMappingContext(IMC): 表示一套按键输入配置,让按键与IA绑定,从而使用按键携带的变量驱动IA生效。

    2024年02月12日
    浏览(36)
  • Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照)

    本文将会通过一个简单的场景搭建,介绍如何使用烘焙光照以及相关的注意事项。另外还介绍了Unity内全局光照(GI)的知识和GI实际在游戏内的表现效果。 Unity关于光照相关的参考文档地址:https://docs.unity.cn/cn/current/Manual/LightingOverview.html 下面是一些基本的概念 直接光照指的

    2024年02月15日
    浏览(39)
  • UE5 UDP通信 UE4.21-UE5.1

    目录 客户端,发送数据 1.建立字符串变量UDPConnection,绑定连接事件  2.连接初始化  3.发送数据  4.关闭UDP服务  服务器,接收数据 1.绑定连接事件  2.绑定数据接收事件  3.开启UDP服务  4.返回数据  5.关闭UDP服务   需要提供远程端IP地址和端口号 0.0.0.0表示监听所有ip,端口

    2024年02月15日
    浏览(82)
  • 初学UE5,UE4的教程适用UE5吗?

    UE5是最近推出的一款游戏引擎,相较于UE4而言,它有着更好的性能和灵活的工作流程,同时也引入了一些新的功能。对于一些游戏开发初学者来说,他们可能会想知道,是否可以通过UE4的教程来学习UE5。在这里,我们将介绍一下这个问题。 首先,UE5和UE4之间确实存在一些相通

    2024年02月06日
    浏览(57)
  • 【UE5】vsCode 调试 UE5 PuerTs

    配置PuerTs的步骤这里不赘述。 2.1 打开项目 正常来说,直接打开项目可以看到如下画面 如果直接点击运行,可以发现下方的 Output Log 窗口已经开始 Print 了很多案例。 是因为该项目默认执行的是QuickStart.ts。 2.2 打开TsGameInstance.cpp 3.1 在VsCode找到QuickStart.ts,随便断一个点 (这里

    2023年04月09日
    浏览(38)
  • UE5学习笔记(1)——从源码开始编译安装UE5

    0.1 在windows的话,建议装一个Git bash,同时还要有自己的github账号,注册github账号这里就不再赘述了,安装git bash后,设置自己的github账号。或者在windows装一个WSL。 0.2 把自己的github账号关联Epic官方,必须关联之后才能下载Unreal的源码。关联方式见官方教程 0.3 安装VS 2022,这里

    2024年02月08日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包