Global Illumination_LPV Deep Optimizations

接上回,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.mzph.cn/web/51738.shtml

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

相关文章

利用session.upload_progress执行文件包含

1.session.upload_progress的作用: session.upload_progress最初是PHP为上传进度条设计的一个功能,在上传文件较大的情况下,PHP将进行流式上传,并将进度信息放在Session中(包含用户可控的值),即…

STM32嵌套向量中断控制器—NVIC

NVIC简介: NVIC,即Nested Vectored Interrupt Controller(嵌套向量中断控制器),是STM32中的中断控制器。它负责管理和协调处理器的中断请求,是STM32中处理异步事件的重要机制。 NVIC提供了灵活、高效、可扩…

基于ssm的实习课程管理系统/在线课程系统

实习课程管理系统 摘 要 互联网的快速发展,给各行各业带来不同程度的影响,悄然改变人们的生活、工作方式,也倒逼很多行业创新和变革,以适应社会发展的变化。人们为了能够更加方便地管理项目任务,实习课程管理系统被人们…

python-变量声明、数据类型、标识符

一.变量 1.什么是变量 为什么需要变量呢? 一个程序就是一个世界,不论使用哪种高级程序语言编写代码,变量都是其程序的基本组成单位。如下图所示的sum和sub都是变量。 变量的定义: 变量相当于内存中一个数据存储空间的表示&#…

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

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

【并集查找 图论】2421. 好路径的数目

本文涉及知识点 C图论 LeetCode2421. 好路径的数目 给你一棵 n 个节点的树(连通无向无环的图),节点编号从 0 到 n - 1 且恰好有 n - 1 条边。 给你一个长度为 n 下标从 0 开始的整数数组 vals ,分别表示每个节点的值。同时给你…

@antv/g6 业务场景:流程图

1、流程图是流经一个系统的信息流、观点流或部件流的图形代表。在企业中,流程图主要用来说明某一过程。这种过程既可以是生产线上的工艺流程,也可以是完成一项任务必需的管理过程。业务场景流程图如下: 2、绘制流程图的 Tips 流程图一般是用…

Vue -- 总结 02

Vue脚手架 安装Vue脚手架: 在cmd中安装(输入):npm install -g vue/cli 如果下载慢或下载不了,可以安装(cmd输入)淘宝镜像:npm config set registry https://registry.npmmirror.com 用命令创建Vue项目 在要创建的vue项目的文件夹里输入 cmd 回车 创…

基于Java的心灵治愈交流平台

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:Java语言;Spring Boot框架 工具:IDEA/Eclipse、Navicat 系统展示 首页 心…

学习资料销售平台小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,资料类型管理,学习资料管理,订单管理,系统管理 微信端账号功能包括:系统首页,学习资料,购物车,…

QT实现电子相册

使用带有UI界面的QWidget实现电子相册 1、实现功能 1、定时器的使用,在当前页面的停止总时长。 2、显示当前时间 3、图片的上一张与下一张 4、图片的显示 5、进度展示、一共十张图片、进度条的初始值为10。 2、widget.h #ifndef WIDGET_H #define WIDGET_H#i…

【微信小程序】SpringBoot集成微信小程序(多小程序集成)

SpringBoot集成微信小程序 前言一、前置工作1、获取appId和appSecret核心参数 二、SpringBoot集成微信小程序1、引入pom依赖2、yml配置3、java代码文件3.1、Properties 配置类3.2 Configuration 服务类 4、使用示例4.1、获取登录后的session信息:openId4.2、获取当前…

举办知识竞赛是线上好还是线下好

举办知识竞赛线上和线下各有优势,选择哪种方式取决于具体的需求和条件。 线上举办知识竞赛的优缺点: 优点: 便捷性:线上竞赛不受地域限制,参与者可以在任何有网络的地方参与。 选手数:可以同时满足人数较…

数据丢失?四款数据恢复免费版分享

作为一个办公室的文案策划人员,我深知数据的重要性。电脑里不仅有我辛辛苦苦撰写的文案,还有那些珍贵的创意灵感和客户资料。然而,就在上周,我因为一次不小心的误操作,把一个重要的文件夹给删除了。那一刻,…

基于web网上十字绣专营店设计与实现

(一)业务流程分析 没有实现网上销售的十字绣专营店,即店面销售方式,店面需要专人看管,而且销售范围有限,面向的对象很受限制,销售情况需要店主手工记录到账簿,以备利润汇总&#xf…

黄力医生谈健康:掌握这几个秘诀,帮你远离冠心病困扰!

随着生活水平的提高,人们的饮食结构和生活习惯发生了显著变化,这使得冠心病的患病率呈现出逐年上升的趋势,且发病年龄也越来越年轻化。面对这一严峻的健康挑战,提高对冠心病的认识,及早进行干预显得尤为重要。今天&…

HarmonyOS鸿蒙开发:在线短视频流畅切换最佳实践

简介 为了帮助开发者解决在应用中在线短视频快速切换时容易出现快速切换播放时延过长的问题,将提供对应场景的解决方案。 该解决方案使用: 视频播放框架AVPlayer和滑块视图容器Swiper进行短视频滑动轮播切换。绘制组件XComponent的Surface类型动态渲染…

10 个最佳网络爬虫工具和软件,零基础入门到精通,收藏这一篇就够了

据 Strait Research 称,数据提取的需求正在不断增加,预计到 2031 年将达到 18 亿美元。 使用最好的网络爬行工具启动您的数据提取项目,并告别烦人的爬行头痛。我们研究和测试了数百种免费和付费软件,然后为您提出了十种最佳网络爬…

JVM 内存参数

文章目录 引言I JVM基础知识Java 语言是解释型的OpenJDK和Sun/Oracle JDK和hotspot的关系JDK、JRE、JVM 之间的关系JVM基础功能JVM组成JIT:Just In Time CompilerJVM内存区域JVM运行时数据区JVM 堆内存布局II JVM 内存参数常用参数JIT编译参数GC信息打印GC参数III 例子引言 J…

disk manager操作教程 如何使用Disk Manager组件 Mac如何打开ntfs格式文件

macOS系统有一个特别明显的弱点,即不能对NTFS格式磁盘写入数据。想要适合Mac系统使用来回转换磁盘格式又十分麻烦,这该怎么办呢?Tuxera ntfs for mac作为一款Mac完全读写软件,大家在安装该软件后,能充分使用它的磁盘管…