UE5:Lumen 框架

news2025/1/10 23:30:23

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1319610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

设备制造CRM:一文看懂设备制造行业CRM的作用和优势

设备制造行业客户需求多样化、服务链路长,企业在关注APS、EMS等工业软件之余还要以客户为中心,做好客户服务。设备制造行业CRM管理系统是企业管理客户关系的利器,设备制造行业CRM的作用有哪些?一文带您看懂。 设备制造行业需要解…

kitex快速入门

简介 kitex是字节跳动开源的一款基于 Go语言的rpc框架。 官网 github仓库 gitee地址 安装与使用 kitex具有一键生成的功能,能够一键生成rpc架构,使开发者只关注于逻辑的开发即可。自动生成的源码只需要简单的配置就可使用,十分方便。 安…

能在电脑同时控制苹果和安卓的软件,找到了!

开门见山,既能远程控制安卓手机又能控制iPhone或iPad的软件是AirDroid Cast。 AirDroid Cast是一款专业、强大且易于使用的投屏&控制工具。不仅可以将安卓手机(安卓7.0及以上版本)、iPhone、iPad的屏幕画面投射到电脑上,还支持…

RED影视级R3D文件变0字节加chkdsk恢复案例

随着千兆网络普及小型存储也开始越来越多,特别是在专业级影视领域,存储数据要的就是快速和稳定,所以小存储很适合专业级影视这个行业。下面我们来看一个36T的小存储恢复R3D文件的案例。 故障存储: 36T,Exfat文件系统 故障现象:…

【C++初阶】八、初识模板(泛型编程、函数模板、类模板)

相关代码gitee自取: C语言学习日记: 加油努力 (gitee.com) 接上期: 【C初阶】七、内存管理 (C/C内存分布、C内存管理方式、operator new / delete 函数、定位new表达式) -CSDN博客 目录 一 . 泛型编程 二 . 函数模板 函数模板…

【C语言】数组(一维)详解,手把手教你,保姆级!!!

目录 数组的概念 数组的创建 数组的初始化 数组的类型 数组使用下标 数组的打印 数组的输入 数组的储存 总结 数组的概念 数组是⼀组相同类型元素的集合; 从这个概念中我们有3点拓展: 1,数组中存放的是1个或者多个数据,但…

【Linux】进程周边005之环境变量

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》 🌝每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.环境变量是什么&#xff1…

引用阿里图标库,不知道对应的图标是什么,可在本地显示图标ui,再也不要担心刚来不知道公司图标对应的是什么了

项目中使用了阿里的图标库,但是无法看到对应显示什么,每次都要去阿里图标库里面找 在下载下来的文件中会发现有两个文件一个是iconfont.css和iconfont.json, 这两个文件的数据可以拿到然后显示在页面上 有两个问题: 1&#xff1a…

【Hadoop】执行start-dfs.sh启动hadoop集群时,datenode没有启动怎么办

执行start-dfs.sh后,datenode没有启动,很大一部分原因是因为在第一次格式化dfs后又重新执行了格式化命令(hdfs namenode -format),这时主节点namenode的clusterID会重新生成,而从节点datanode的clusterID 保持不变。 在…

ansible远程操作主机功能和自动化运维

ansible 两个功能:1、远程操作主机功能 2、自动化运维(play 剧本 yaml) 简述: 是基于python开发的配置管理和应用部署工具。在自动化运维中,现在是异军突起。 Asible能批量配置,部署,管理上千…

智能环境与可持续发展:人工智能为地球未来添翼

导言 在全球迅速发展的背景下,人工智能技术的应用逐渐深入到环境保护和可持续发展领域。随着全球环境问题的加剧,人工智能技术在环境和可持续发展领域的应用成为推动绿色未来的关键力量。本文将深入探讨人工智能在智能环境中的角色,以及如何通…

保护数据库数据安全就用行云管家!全方位保障!

对于企业而言,数据库是企业核心信息的存储和处理中心,所以保障数据库安全至关重要。而如何保障数据库数据的安全性也成为了企业亟待解决的问题。行云管家数据安全运维平台作为全面的数据安全运维平台,通过数据运维的事前阻断、事中控制、事后…

基于Java SpringBoot和Vue的医院信息管理挂号系统

摘要 医院信息管理系统(Hospital Information Management System,简称HIMS)是一种应用于医疗机构的信息化管理系统,旨在提高医疗服务质量、降低运营成本、提高工作效率和满足患者需求。HIMS通过对医院内各种信息的集成、管理和共享…

mybatis中oracle的sql没走索引导致特别慢(未加jdbcType的)

如果直接跑sql是能走索引很快,在mybatis中不能,可能就是jdbcType的原因。 比如,我有一个属性A,在表里面是VARCHAR2类型,但是在mybatis中的sql是#{a},缺少jdbcTypeJdbcType.VARCHAR,就会导致myba…

Excel小技能:excel如何将数字20231211转化成指定日期格式2023/12/11

给了一串数字20231211,想要转成指定格式的日期格式,发现设置单元格格式为指定日期格式不生效,反而变成很长很长的一串#这个,如图所示: 其实,正确的做法如下: 1)打开数据功能界面&am…

列举python2和python3的区别,python 2和python 3的区别

大家好,本文将围绕python2和python3的区别有哪些?展开说明,列举 python2和python3的区别?是一个很多人都想弄明白的事情,想搞清楚python2和python3的区别大吗需要先了解以下几个事情。 python不同于其他语言,python3并不对python2向下兼容 …

Java刷题篇——单链表练习题上

206. 反转链表 - 力扣(LeetCode) 1. 题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例1 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例2 输入:head [1,2] 输出&…

深入比较Input、Change和Blur事件:Vue与React中的行为差异解析

目录 前言 1. Input事件: 行为差异: 2. Change事件: 行为差异: 3. Blur事件: 行为差异: 4. 在Vue中的表现: Input事件: Change事件: Blur事件: 5.…

基于Vue的汽车服务商城系统设计与实现论文

摘 要 本课题是根据用户的需要以及网络的优势建立的一个基于Vue的汽车服务商城系统,来更好的为用户提供服务。 本基于Vue的汽车服务商城系统应用Java技术,MYSQL数据库存储数据,基于SSMVue框架开发。在网站的整个开发过程中,首先对…

【数据结构】树状数组总结

知识概览 树状数组有两个作用: 快速求前缀和 时间复杂度O(log(n))修改某一个数 时间复杂度O(log(n)) 例题展示 1. 单点修改,区间查询 题目链接 活动 - AcWing本活动组织刷《算法竞赛进阶指南》,系统学习各种编程算法。主要面向…