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

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

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

其实模糊的原理都差不多,无非就是对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.rhkb.cn/news/395616.html

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

相关文章

《Python爬虫逆向实战》绕过debugger的方法汇总

禁用断点 打开控制台,点击右边的禁用断点按钮。 点击之后再刷新下,就会发现debugger失效了。 注:这种方法有个 弊端,就是我们在代码中下的断点也都将失效。 Add script to ignore list 在代码文件中任意位置右键,然…

51单片机—串口

一、 串口基本认知 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方 式的扩展接口。串行接口(Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简 单&a…

【C++ 面试 - 基础题】每日 3 题(七)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…

【网络安全】玲珑安全第四期

鉴于玲珑安全漏洞挖掘前三期课程取得的优异成绩和获得的强烈反响,我们决定启动玲珑安全第四期漏洞挖掘培训计划。 文章目录 往期学员收获基础学员报喜(部分)课程反馈第四期课程课程内容免费课程往期学员收获 第一期课程总结及学员收获:->点我查看第一期学员收获<- …

性能测试工具LoadRunner

前言&#x1f440;~ 上一章我们介绍了性能测试的一些基本概念&#xff0c;重要的是性能测试的各项指标&#xff0c;今天我们使用性能测试工具LoadRunner简单的完成一次性能测试 性能测试Load Runner LoadRunner是什么&#xff1f; LoadRunner安装 LoadRunner脚本录制 1.录…

算法板子:质数——判定质数、分解质因数、筛质数

目录 一、判定质数 1. 代码 二、分解质因数 1. 质因数的概念 2. 代码 三、筛质数——获取1~n中所有质数的个数 1. 合数的概念 2. 代码 一、判定质数 1. 代码 #include <iostream> using namespace std;bool is_prime(int x) {// 1不是质数, 需要特判if (x 1) …

QT键盘和鼠标事件

这些事件都在QWidget 中的保护成员方法中 都是虚函数在头文件中声明了 需要类外重现实现 如果头文件中声明 类外无实现就会报错 void Widget::keyPressEvent(QKeyEvent *event) {switch (event->key()) {//获取按键case Qt::Key_W://按键wqDebug()<<"按下w"…

开源免费前端地图开发组件xdh-map

xdh-map是一个基于Openlayers的地图应用Vue组件&#xff0c;具有多方面的功能和特点。以下是对xdh-map的详细介绍&#xff1a; 一、功能与特性 内置多种地图瓦片&#xff1a;xdh-map内置了百度、高德、天地图等地图瓦片&#xff0c;使得开发者可以方便地在应用中集成多种地图…

【Material-UI】Checkbox 组件中的 Label Placement 设置详解

文章目录 一、Checkbox 组件简介1. 组件概述2. labelPlacement 属性 二、labelPlacement 属性的使用方法三、各标签位置的效果与应用场景1. Top&#xff08;顶部&#xff09;2. Start&#xff08;左侧&#xff09;3. Bottom&#xff08;底部&#xff09;4. End&#xff08;右侧…

大模型算力基础设施技术趋势、关键挑战与发展路径

文章目录 前言一、大模型技术发展趋势1.1 大语言模型1.2 多模态模型1.3 长序列模型1.4 混合专家模型二、大模型算力基础设施发展问题与挑战2.1 可用算力规模亟需算力利用效率提升2.2 集群性能提升依赖跨尺度、多层次互联三、大模型算力基础设施高质量发展路径总结前言 从大模型…

使用 `grep` 命令的常用方式

使用 grep 命令的常用方式 grep 是一个强大的命令行工具&#xff0c;用于在文件中搜索文本。无论是程序员、系统管理员还是普通用户&#xff0c;都可以通过 grep 快速定位需要的信息。本文将介绍 grep 命令的一些常用方式&#xff0c;并给出相应示例的执行结果。 示例文本 在…

C语言求平方和倒数

文章目录 1. 代码实现float类型数据double类型数据使用 double 类型的调整 2. 魔数与位级别操作浮点数表示位级别魔数操作 3. 牛顿迭代4. 复杂代码具体解释具体解释&#xff1a;目的&#xff1a;举例&#xff1a; 5.感谢 平方和倒数 广泛用于计算机图形学中&#xff0c;尤其是在…

Spring Boot - 通过ApplicationListener实现接口请求的性能监控

文章目录 概述1. ServletRequestHandledEvent事件2. 实现步骤3. 优缺点分析4. 测试与验证小结其他方案1. 自定义拦截器2. 性能监控平台3. 使用Spring Boot Actuator4. APM工具 概述 在Spring框架中&#xff0c;监控接口请求的性能可以通过ServletRequestHandledEvent事件实现。…

【数据结构】—— 内部排序算法详解

1、前言2、常见排序算法3、排序算法实现3.1 直接插入排序3.2 希尔排序3.3 选择排序3.4 堆排序3.5 冒泡排序3.6 快速排序3.6.1 单趟排序hoare法挖坑法双指针法 3.6.2 非递归实现3.6.3 常见问题基准值的选取小区间优化 3.7 归并排序3.7.1 递归实现3.7.2 非递归实现 3.8 计数排序 …

glibc的安装及MySQL的安全用户角色权限(twenty-one day)

一、glibc安装 mysql 清空/etc/目录下的my.cnf ls -l /etc/my.cnf rm -rf /etc/my.cnf yum -y remove mariadb find / -name "*mysql*" -exec rm -rf {} \; 安装mysql软件包 wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.33-li nux-glibc2.1…

面壁的智能开源 MiniCPM-V 2.6 边缘人工智能多模态功能与 GPT-4V 不相上下

"MiniCPM-V2.6 "是一个边缘多模态人工智能模型&#xff0c;仅拥有 80 亿个参数&#xff0c;却在单图像、多图像和视频理解任务中取得了低于 200 亿个参数的三项 SOTA&#xff08;艺术境界&#xff09;成绩&#xff0c;显著增强了边缘多模态能力&#xff0c;并与 GPT-…

爬虫入门--了解相关工具

目录 1.爬虫与python 2.第一个爬虫 3.web请求的全过程 3.1服务器渲染 3.2前端JS渲染 4.浏览器工具 4.1Elements 4.2Console 4.3Source 4.4network&#xff08;重点&#xff09; 5.小结 1.爬虫与python 首先我们要知道&#xff0c;爬虫一定要用Python么? 非也~…

云计算任务调度优化matlab仿真,对比蚁群优化和蛙跳优化

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 ACO蚁群优化 4.2 蛙跳优化 5.完整程序 1.程序功能描述 云计算任务调度优化,优化目标位任务消耗时间&#xff0c;调度后的经济效益以及设备功耗&#xff0c;对比蚁群优化算法和蛙跳优化…

三星、小米和 OPPO设备实验室将采用Android设备流技术

早在 5 月份的年度开发者大会上&#xff0c;Google就发布了 Android 设备流测试版。开发人员可以在Google数据中心的真实物理设备上更轻松、更互动地测试自己的应用程序&#xff0c;这些设备会直接串流到 Android Studio。今天&#xff0c;Google宣布与三星、小米和 OPPO 合作扩…

关于LLC知识5

RLC的增益曲线不知一条 频率升高&#xff0c;增益会越来越低 无论在容性区还是感性区&#xff0c;当负载加重的时候&#xff0c;R阻值会变小&#xff0c;所以R的分压也会变小&#xff0c;导致增益会变低 当负载突然加重&#xff0c;输出电压会变低&#xff0c;增益曲线由红色变…