[自学记录09*]关于模糊效果降采样优化性能的小实验

news2024/11/15 21:06:59

一、降采样在模糊中的优化

这两天接手了几个高度定制化的模糊,包括不限于放射和旋转状的径向模糊,移轴模糊,景深的散景模糊等等,这些效果在游戏中非常常见。

其实模糊的原理都差不多,无非就是对UV偏移后重新采样再求平均。

这里面最费的自然是对整张屏幕的RT采样。询问了一圈,貌似如果在低端机上采样8次就已经算非常非常高了。

那就不得不搬出一个常见的优化手段,那就是降采样。

关于降采样还有一点,在径向模糊,景深等效果中,并不是使整个屏幕的画面全部模糊,一般来说会有一段距离/一个区域是保持清晰的。(如角色释放技能,以击中点为圆心的四周一定半径范围内都是清晰的,而超出范围距离越多模糊越强烈)。

如果单纯的降采样,周围模糊的区域分辨率低又模糊了不会产生太大影响。但中间清晰的区域被降采样之后,效果会有很大折扣,这个折扣会随降采样次数增加。

所以常见的办法是渲染一张原图,再渲染一张降采样的模糊图,然后用模糊强度(以景深为例,模糊强度的插值因子就是那张做了step得到的焦距深度图)去和原图进行插值。这样没有模糊的地方就是没有被降采样的地方,效果不会变,而模糊的地方即使降采样了也不会很影响。

 

 

1.测试

由于测试机器是3060ti,加上场景压力不大,所以参数调的变态一点,先不降采样,分辨率调成4K,模糊采样2000次,可以看到,平均FPS只有10。

(1) 2 Pass,插值,无降采样,采样次数:2000

该场景分为2个Pass,先渲染一遍原分辨率的原图,然后对原图进行模糊,接着在原图和模糊的图之间进行插值。可以说是最耗,且最没有意义的测试了,因为如果不降采样没必要去多申请一张纹理再插值,当然,这部分我们后面再说。

979a5e4522888663f8c233c20f11527b.png

(2) 2 Pass,插值,降采样/8,采样次数:2000

OK,我们还是用刚才的场景,这次我们开启降采样,调为8,其它参数不变,让我们来看看。

59d29a7e3665f673211091bf0f037be2.png

FPS涨幅非常夸张,翻了40倍。当然,因为降采样/8,采样的纹理大小是原来的64分之一,也就是比原来可以多采63张图。当然这里的涨幅这么变态的原因可能是因为瓶颈就是采样次数,因为场景本身复杂度并不高。在实际项目中可能不会有如此夸张的涨幅。

 

还有一点,两张图的效果明显差距很大,这是降采样带来的画面折扣,但其实不用太担心,因为我们的采样次数是2000,所以才会出现这种情况,在16采样的情况下,其实两幅画面差距不是特别明显,如下两幅图所示。

218deeef6fbb17362dbc700bf06c60d9.png

16次RT采样,降采样/8

37ab91f649fd88259914a09d819d6115.png

16次RT采样,无降采样

某种意义上来说,降采样参数完全可以当模糊半径参数使用了。反正对清晰的部分没有影响。

 

二、先降采样再模糊or先模糊再降采样

 

1.DOF测试

我们前面的操作的顺序是这样的:

  1. 先把相机存储在一张降了分辨率的RT上。

  2. 对该降了分辨率的RT进行模糊

  3. 把该RT和相机之间插值,返回相机。

在自己亲手操刀之前查过一些资料,他们有些的顺序是这样:

  1. 先把相机以原分辨率存到一张RT上

  2. 把该RT模糊,然后存到一张降采样RT上

  3. 把降采样并且模糊了的RT和原分辨率的RT插值

  4. 返回相机

中间一些申请纹理等等操作当然可以优化的更简练一些。

但这不是重点,而是先模糊还是先降采样这个问题。我们在一、中做的实验的顺序是先降采样再模糊,所以帧数涨的才这么多,但是如果按照网上的一些资料先模糊再降采样呢?

f9708b7160c35cb08e508cefaf0b7ace.png

其他参数都不变,仍然是4K分辨率,2000次采样,降采样/8,2 Pass,插值。

唯一区别是这次是先模糊,再降采样。可以看到,是有“提升”的,从10帧到50帧,但这是提升吗?别忘了我们最初的最初在没考虑优化和效果的时候 1个 Pass就可以完成这个效果,而10FPS那个场景是有不必要的申请纹理和插值的消耗的,所以那个结果不应该拿来和这个对比。

 

 

我们重新写一个DOF的景深效果,这次我们不考虑任何优化的事情,1个Pass,4K分辨率,插值,不降采样。

0214228c8554df017d8b92c1435fb73d.png

可以看到,换成单Pass以后从10FPS变到了12FPS,提升2%左右,很好想,既然怎么弄都要插值,那最后采样的模糊图肯定越小越好,那也就很好想了。

先降采样再模糊:这种顺序会节省模糊操作的消耗,同时也会节省插值前采样模糊图的消耗。

先模糊再降采样:这种顺序只是单纯的节省了插值前采样模糊图的消耗。

 

 

但是这里仍然有一个问题,那就是DOF这个效果的特殊性,这个东西无论做成单Pass还是双Pass都需要用那张深度去插值,所以实际上插值的操作我们并没有省掉,我们换一个效果继续测试,这次我们换成放射状的径向模糊。

 

2.径向模糊测试

首先,先看一下,单Pass,无插值,采样2000次,无降采样。大概15,16FPS这样子。

1457c042d73f12e172341819cdfaedab.png

单Pass,无插值,采样2000次,无降采样

 

 

然后是,双Pass,插值,采样2000次,降采样8次,先降采样再模糊。大概400FPS。

464e6ba4285f25d6aeca54f790481c14.png

双Pass,插值,采样2000次,降采样8次,先降采样再模糊

 

 

最后,双Pass,插值,采样2000次,降采样8次,先模糊再降采样。大概100FPS。

c96e333d46e12db28ca5ae76cfd1ff09.png

双Pass,插值,采样2000次,降采样8次,先模糊再降采样

 

可以看到,与我们前面的猜测差不多。

 

 

三、结论

  1. 无论降采样的顺序如何,它都会降低开销

  2. 先模糊再降采样降低消耗相对来说较少,因为它只节省了插值那步采样的消耗

  3. 先降采样再模糊降低消耗相对来说较多,因为它节省的是每次模糊的采样消耗,采样循环次数越多,节省越明显。

 

由于本人刚刚开始实习,这也算是开始工作进入项目后负责的第二个问题吧,研究了两三天,写出这篇测试小实验的文章分享一下自己的小发现,大佬就当看个乐就得了,也主要是记录使用。总之研究完之后感悟还挺身的吧,在项目中的工作心态和之前自己写demo的心态也完全不一样,希望未来能赶上前辈们的脚步,共勉。

 

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

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

相关文章

UI动画设计:提升用户体验的关键

传统的静态 UI 设计正在逐渐被淘汰,UI 动画设计正在脱颖而出。随着技术的成熟,UI 动画正试图超越现有的限制和规则,并通过应用程序形成、网站和其他产品的新互动模式。交互式动画也可以为 UI 设计增添活力,使用户界面更加丰富多彩…

【vue3|第20期】vue3中Vue Router路由器工作模式

日期:2024年8月6日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方&#xff…

ThreadLocal 详解(三)内存泄露原因,以及强弱引用

1、ThreadLocal内存泄漏 在Threadlocal的内部静态类中Entry将Threadlocal作为一个key,值作为value保存,他继承WeakReference,super(k),代表了Threadlocal对象是一个弱引用; static class Entry extends WeakReference…

mysql中B+树的数据存储

B树索引基础分析 B树的定义 B树是一种自平衡的树形数据结构,常用于数据库和操作系统的索引结构。它具有以下特点: 所有数据都存储在叶子节点,非叶子节点仅存储键值和子节点的指针。 叶子节点之间通过指针相互连接,形成一个有序链…

机器视觉应用基础: 工业镜头

文章转载自机器视觉应用基础: 工业镜头-工业相机镜头选型-少有人走的路 (skcircle.com) 工业镜头相当于人眼的晶状体,如果没有晶状体,人眼看不到任何物体;如果没 有镜头,那么摄像头所输出的图像;就是白茫茫的一片&…

职场办公人必备网站-办公人导航

“办公人导航”是一个综合性的网址导航网站,专门收录和分享各种优质的办公资源和工具。它涵盖了常用网站、在线工具、资源查找、素材查找、在线学习、在线影视、资讯信息、AI工具集等内容,是一个职场办公人必备的网址导航网站。办公人导航-实用的办公生活…

XJTUSE-离散数学-集合

基本概念 集合的包含与相等&#xff0c;如子集幂集&#xff1a;以A的所有子集组成的集合称为A的幂集AB <> 集合的基本运算 基本运算证明会考 交运算并运算补运算差运算&#xff1a;A \ B 环和运算&#xff1a;环积运算&#xff1a; 集合的其他表示方法 文图表示法 …

反向传播与梯度累积

反向传播算法&#xff1a;loss.backward()的实现细节 向前传播&#xff1a;输入数据得到预测结果。向后传播&#xff1a;计算梯度加更新参数。反向传播&#xff1a;计算梯度 计算图 计算图 有向无环图 基本运算 节点&#xff1a;变量节点 & 计算节点有向边&#xff1…

AI赋能医疗:应用场景丰富,智慧医疗进入大趋势!

在《超越想象的 GPT 医疗》一书开篇中描绘了一个虚构场景&#xff1a;面对患者病情突然恶化&#xff0c;医学住院实习生克里斯腾陈通过和 GPT-4 对话&#xff0c;完成了对患者的救治、得到了心理安慰、并为患者向保险公司申请了授权&#xff0c;后续在查房中&#xff0c;还为肿…

【MySQL】数据基本的增删改查操作

新增数据&#xff08;Create&#xff09; 在MySQL中&#xff0c;增加数据的操作主要使用 INSERT 语句。下面我们将分为两部分&#xff1a;单行数据插入和多行数据插入。 一、单行数据插入 全列插入&#xff1a; 当你要插入一行数据到表中并且要提供所有列的值时&#xff0c;可…

工业互联网产教融合实训基地解决方案

一、引言 随着“中国制造2025”战略的深入实施与全球工业4.0浪潮的兴起&#xff0c;工业互联网作为新一代信息技术与制造业深度融合的产物&#xff0c;正引领着制造业向智能化、网络化、服务化转型。为培养适应未来工业发展需求的高素质技术技能人才&#xff0c;构建工业互联网…

较新版本Cesium使用本地源码编译打包

0 写作背景 较新版本的Cesium&#xff08;1.100版本及以后&#xff09;在代码结构上做了一定的调整&#xff0c;打包方式也随之发生了一些变化。 Starting with version 1.100, CesiumJS will be published alongside two smaller packages cesium/engine and cesium/widgets …

JAVA中的volatile和synchronized关键字详解

1.volatile 保证可见性&#xff1a;当一个变量被声明为volatile&#xff0c;编译器和运行时都会注意到这个变量是共享的&#xff0c;并且每次使用这个变量时都必须从主内存中读取&#xff0c;而不是从线程的本地缓存或者寄存器中读取。这确保了所有线程看到的变量值都是最新的…

【数据结构】树型结构详解 + 堆的实现(c语言)(附源码)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;数据结构 目录 前言 一、树 1.树的概念与结构 2.树的相关术语 3.树的表示方法 4.树型结构的实际应用场景 二、二叉树 1.二叉树的概念与结构 2.二叉树的…

RabbitMQ再回首--往事如梦

这文章你就读吧&#xff0c;越读越&#x1f978;&#xff0c;一读一个不吱声 可靠的&#x1f430;警官&#xff1a;rabbitMQ&#xff0c;功能全面&#xff0c;不丢数据&#xff0c;体量小&#xff0c;容易堆积 声明exchange channel . exchangeDeclare ( String exchange , …

在EA框架下增强开展AI项目研发

1.在战略规划阶段实施AI模型选择的工作 有许多可用的 AI 模型&#xff0c;企业架构师必须从监督学习模型、无监督学习模型、强化学习模型和深度学习模型中选择正确的模型。这些模型支持跨不同领域的各种应用。**企业架构师应根据 AI 项目的具体要求选择合适的 AI 模型和架构。*…

WeiXin Video

WeiXin Video 微信视频号电脑版本流程 菜单 - 视频号直播工具 &#xff08;没有下载&#xff0c;需要下载&#xff0c;这里不写了&#xff09; 找到菜单里面的【视频号】 进入一个新的页面&#xff08;第①个页签&#xff09;&#xff0c;点击【头像】 进入一个新的页面&#…

编程深水区之并发⑥:C#的线程池

绝大多数情况下&#xff0c;我们都应该使用CLR线程池&#xff0c;而不是直接操作Thread&#xff0c;本章节介绍直接操作线程池的ThreadPool&#xff0c;但实际开发中也很少直接使用它。 一、CLR和线程池 1.1 CLR的主要工作 CLR&#xff08;Common Language Runtime&#xff0…

在Docker上部署Ollama+AnythingLLM完成本地LLM Agent部署

在当今快速发展的人工智能领域&#xff0c;本地部署大型语言模型&#xff08;LLM&#xff09;Agent正逐渐成为企业和研究者关注的焦点。本地部署不仅能够提供更高的数据安全性和隐私保护&#xff0c;还能减少对外部服务的依赖&#xff0c;提高响应速度和系统稳定性。本文将介绍…

04 Haproxy搭建Web集群

4.1 案例分析 4.1.1 案例概述 Haproxy是目前比较流行的一种群集调度工具&#xff0c;同类群集调度工具有很多&#xff0c;如LVS和Nginx。相比较而言&#xff0c;LVS 性能最好&#xff0c;但是搭建相对复杂;Nginx 的upstream模块支持群集功能&#xff0c;但是对群集节点健康检…