Global Illumination_LPV Deep Optimizations

news2024/12/23 0:06:46

接上回,RSM优化技术介绍后,我们本部分主要看一下,光栅GI三部曲中的LPV,这个算法算是很巧妙了,算法思路基于RSM上拓展到世界空间,可以说很具学习和思考价值,之前也简单实现过Global Illumination_Light Propagation Volumes (LPV)有兴趣的可以去简单了解下,本部分主要对LPV技术进行优化介绍与分析,学习自用,大佬勿喷。

一、LPV简述

老规矩,首先我们先来看一下LPV技术的原理以分析其性能卡点,具体的就不介绍,有兴趣的找原文,本部分只简单介绍:原始算法的思想仍是基于场景RSM缓冲区生成的虚拟光源,随后把光源数据注入到一个均匀的体积网格(3DTexture)中,该网格覆盖场景,每个网格用球谐编码代表一个位置、通量和法线的缓存数据。

我们可以将场景分为n * n * n个网格,每个网格都可以存储其相邻网格的总辐照度。具体能量传输公式可如下图所示:

在这里插入图片描述

其中,M是单元格的邻居数(6),P是迭代传播的次数(任意数)。下面是一个简化的单次网格传播的可视化过程:

在这里插入图片描述

接下来我们看一下LPV的管线流程,如下图,即(生成->注入->传播->光照)四步走:

在这里插入图片描述
知道了大体流程我们,就看一下优化优化点。

二、RSM优化技术

2.1 降采样优化

如前所述,为了收集次级光源表面的辐射亮度(radiance),场景必须近似地在单元格网格中。这些单元格的数量取决于所提供的RSM纹理(通量/正常/世界位置)的分辨率,但是分辨率越高,光照注入和传输的成本就越高。如果原始的RSM的缓冲区是以2048x2048分辨率生成的,这对于生成2048三次方个表面的网格元素,之后无论是注入还是传输都需要执行这么多次的计算。因此,必须通过降低分辨率,减少计算量

不得不说降采样是解决这类问题的首选方法,那么降采样后的LPV渲染管线便更改为:

在这里插入图片描述
总的来说,降采样后场景的视觉质量是可以接受的,而且性能的提高非常明显。注入通道的计算复杂度变为:

在这里插入图片描述
传输过程降低的成本再加一个维度,会降低的更狠,其中,一般根据场景大小与分辨率来综合考量确定降采样因子,但也别降低的太多,否则效果会很差,正常采用𝑘=4的降采样因子差不多,而𝑟𝑠𝑚𝑊𝑖𝑑𝑡ℎ,𝑟𝑠𝑚𝐻𝑒𝑖𝑔ℎ𝑡是RSM缓冲区的原始维度。

可以看一下降采样和不降采样后效果对比,几乎差不太多,但是如果是超大场景,差异就会明显了,大家可以根据项目综合考虑。

原始效果(非降采样):
在这里插入图片描述
4倍降采样后效果:
在这里插入图片描述

注入渲染Pass,实际上就是从这些RSM缓冲区生成场景的点云的几何图形过程,在此优化后运行的会更快。下图展示了原始2048*2048分辨率下与4倍降采样后性能对比:

在这里插入图片描述
可以看出,性能提升直接形成了断崖式的优化。

2.2 计算着色器降优化

当然还可以将生成3DTexture的生成流程转换至计算着色器进行实现,在降采样着色器中节省更多的性能。

在这里插入图片描述
如上图所示,使用计算着色器也可以些许优化性能。此外传输过程也可以基于计算着色器进行优化,但由于其复杂度不高,连续迭代多次的话其实可以使用API的bundles来优化更好。

2.3 现代图形新特性优化(Bundles)

首先我们需要知道CPU的每次图形设置都是需要在驱动层校验命令正确性的,所以在GPU上运行的CPU提交命令可能相当昂贵。

而在LPV技术中,传播光照流程是独立的、相似的、小的绘制调用命令,它们会将光照累积到最终的3D纹理集合中。传播次数也就是这些命令的调用数量随着项目不同而不同,可能从1到100不等,一般采用50此迭代,所以此部分可以优化。所以很容易联想到DirectX 12功能中的捆绑包功能,具体可以参照之前的这篇文章DirectX12_初识之根签名、显存管理、资源屏障、栅栏同步、描述符与描述符堆、捆绑包。

简而言之,捆绑包是一组保存一次并在需要时重新执行的命令。一个包将“引用”一些绑定到它的有用信息,例如缓冲区,并使用该数据的更新版本执行自己。这个功能非常适合传播传递,并节省了CPU上的工作负载,即几十个命令不再在每一帧一遍又一遍地重新添加。

简单看一下,开启和不开启Bundles的捕帧情况:
开启:
在这里插入图片描述

不开启:
在这里插入图片描述
由于捆绑包的使用只是一个CPU优化,所以在不同CPU上的性能差异会不同(性能越低、DrawCall越多效果越好)。

2.4 并行渲染管线升级

和上一章节RSM的介绍中一样,LPV其实也可以拆分成并行管线来处理,拆分后的异步管线如下图所示:
在这里插入图片描述

如果我们使计算队列中的RSM的并行计算传递过程处理大量图形工作以降低Buffer的异步等待,性能提高将比非异步场景中提高更明显。但是实现起来复杂且收益不高,可自行根据项目需求来。

三、小结

总的来说,LPV是一种很好的部分全局照明技术。在现代GPU硬件上经过上述优化后运行还行,并提供了可接受的一次diffuse反射的间接光照效果。但由于球谐函数的性能和低频存储的限制(一般都是用2或3阶的球谐系数,LPV一般用2阶),只有低频照明能够被映射出来,这使得间接镜面反射无法实现,如果需要再球谐函数上实现高频,需要重建高频信号,但可能很费,有兴趣的可以参照之前的这个文章Global Illumination_Spherical Harmonic Lighting(球谐光照)。

还有一个优化就是在注入阶段,生成体积数据需要RSM纹理。一些纹理,可以使用八面体编码来优化),可能会节省整体内存影响和带宽。最后,就是有些视角下网格中的许多均匀单元格都是空的,并且没有任何信息,这对于传播计算通常是非常浪费的。可以通过优化有效空间属性结构来优化,但是感觉直接使用VCT(VXGI)来应该更好,下一部分我们就主要来看一下VXGI的相关深度优化。

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

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

相关文章

【 html+css 绚丽Loading 】000028 九宫幻明轮

前言:哈喽,大家好,今天给大家分享htmlcss 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 &#x1f495…

AI智能导诊小程序源码,在智能导诊系统中,自然语言处理技术的运用

概述 智能导诊基于医疗 AI 、自然语言处理技术,推出的在线导医分诊智能工具,覆盖导诊、智能问答、科普宣教等就医服务;智能导诊通过人体图、症状列表等形式进行疾病自测,快速推荐就诊科室、医生推荐。产品可应用于微信线上挂号、…

SQLi-LABS通关攻略【51-55关】

SQLi-LABS 51关 51关和50关一样,只是改为了单引号闭合 依旧有报错信息,可以使用报错注入 构造payload,得到数据库名 ?sort1 and updatexml(1,concat(1,database()),1)-- SQLi-LABS 52关 52关和50关一样,但是没有报错信息,所以报…

智慧监管:地理信息与遥感技术驱动下的社会治理新纪元

在信息化浪潮席卷全球的今天,智慧监管已成为推动社会治理现代化的关键力量。本文将深入剖析智慧监管的概念、技术基础、应用场景及其对社会发展的深远影响,探讨如何在新时代背景下,利用地理信息与遥感技术构建更加智慧、高效的监管体系。 智…

仿华为车机UI--图标从Workspace拖动到Hotseat同时保留图标在原来位置

基于Android13 Launcher3,原生系统如果把图标从Workspace拖动到Hotseat里则Workspace就没有了,需求是执行拖拽动作后,图标同时保留在原位置。 实现效果如下: 实现思路: 1.如果在workspace中拖动,则保留原来“改变图标…

【u盘还原教程】如何把启动u盘恢复回普通U盘

之前制作ubuntu启动盘装双系统 1、插入U盘,右键点击“此电脑”,选择“管理”,在“计算机管理”的面板中点击打开“磁盘管理”,会看到目前电脑上的所有磁盘,找到U盘的索引名(如图标识,这里是“…

2024最新VMware17安装Windows10详细记录

本次将带来虚拟机VMware Workstation 17 pro安装Win10的教学,可用于各种软件测试,这里虽然只是示范了win10安装教学,实际上可以安装很多系统,步骤都差不多; 下载 一、下载虚拟机软件 下载方式一:官网下载…

虚拟机安装docker时yum错误及及解决方案

** Could not resolve host: mirrorlist.centos.org; 未知的错误 ** 出现这种错误,先尝试 ping www.baidu.com,然后再尝试 ping mirrorlist.centos.org 如果,baidu.com可以ping通,mirrorlist.centos.org 不能ping通&#xff0…

【三十四】springboot+easyRule初识规则引擎

代码场景:厂里有几个员工,现在厂长颁布了新的厂规关于薪资发放,如下: 1、加班时长超过80小时的,一个小时10块钱;不满80小时的,不算加班。2、上班打卡迟到3次以下的不扣钱,3次以上的一…

期权交易误区分享:喜欢重仓!

今天带你了解期权交易误区分享:喜欢重仓!期权交易虽然吸引人,但也有不少容易掉进去的坑。 有的投资者被单个期权的百倍利润吸引,喜欢“一口吃成胖子”。 重仓买入虚值和重度虚值的期权,当标的有大涨或大跌时&#xf…

零基础Opencv学习(一)

一、显示图片 #include "opencv2/opencv.hpp" #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp"cv::Mat image cv::imread("E:/OpencvStudyTest/1.png"…

量化投资策略与技术学习PART1.1:量化选股之再谈多因子模型(二)

在上一个多因子模型中,我手动对各个因子进行了回测,但是数据结果并不是十分理想,难道基本面指标真的和股票走势关系不大么? 这里我还是准备再测试一下,策略如下: (1)首先我获取了一下…

Doped code 介绍

doped是一款Python软件,用于缺陷超单元计算的生成、前/后处理和分析,以高效、可重复、用户友好、功能强大且完全可定制的方式实施缺陷模拟工作流程。 https://doped.readthedocs.io/en/latest/ 教程页面提供了演示代码功能和用法, 该软件包的…

考试评分系统设计与实现/基于django的在线考试系统

摘要 随着互联网技术的不断发展,各行各业的工作学习的模式都发生了不小的变化,们通过互联网技术不仅能够提高工作效率还能够降低出错的几率。而对于考试评分,一个专业的系统可以帮助管理者更加有效管理在考试评分,可以帮助提高克服…

vaspup2.0介绍

实时软件库:https://github.com/kavanase/vaspup2.0 vaspup是一个bash脚本集合,可以有效地生成和分析VASP收敛测试计算。 最初的vaspup是由Alex Ganose开发,用于基态能量收敛测试和POTCAR生成。 vaspup2.0的功能包括: 基态能量相对于ENCUT和k点密度的收敛…

Linux 配置wireshark 分析thread 使用nRF-Sniffer dongle

Linux 配置wireshark nRF-Sniffer-for-802.15.4 1.下载固件和配置文件 https://github.com/NordicSemiconductor/nRF-Sniffer-for-802.15.4 2.烧写固件 使用nRF Connect for Desktop 中的 programmer 4.3烧写 https://www.nordicsemi.com/Products/Development-tools/nrf-conne…

python07-单元测试框架unittest1-1

前言 单元测试是软件开发中不可或缺的一部分,可以帮助开发人员确保代码的正确性、可靠性和稳定性,python是一种广泛使用的程序语言,提供了多种单元测试工具,最常用的是unittest。本文将介绍unittest package, 包括如何编写测试Tes…

干货分享|分享一款高效的文件搜索工具 Everything

介绍:Everything软件是一款高效的文件搜索工具,主要用于快速定位计算机中的文件和文件夹。 官网地址:voidtools 下载方法:只需依据电脑配置与个人需求选择合适的版本下载,安装过程中一路默认即可轻松完成设置。 注&…

C语言刷题日记(附详解)(3)

一、选填部分 第一题: 以下的变量定义语句中,合法的是( ) A. byte a 128; B. boolean b null; C. long c 123L; D. float d 0.9239; 思路提示:观察选项时不要马虎,思考一下各种类型变量的取值范围,以及其初始化的形式是…

基于yolov8的课堂行为检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的课堂行为检测系统是现代教育技术的创新应用,该系统利用YOLOv8这一先进的深度学习算法,实现了对学生课堂行为的自动、高效和精准监测。YOLOv8在目标检测领域以其卓越的性能和速度著称,通过对学生上课视频或实时摄像…