延迟渲染G-buffer所占显存带宽计算(解决移动端和抗锯齿的若干疑问)

news2025/2/23 23:49:11

延迟渲染需要在前面阶段,将计算的内容保留在N张G-buffer中,但是网上的文章只是提及了G-buffer应该压缩,并且尽量少用,没有说明G-buffer所占带宽应该是多少,我将在下面介绍G-buffer所占显存带宽的详细计算方法

G-buffer的存储内容

为了减少G-buffer的内容,现在基本会对G-buffer内容进行压缩

我原来有段时间很喜欢玩《killing floor2》这个游戏,是拿ue3引擎做的,

(《killing floor》的发展史和虚幻引擎发展有着密不可分的关系,一代在当时就有很好的效果)

下面这张图是《killing floor2》的G-buffer存储方法

 可以看到除了深度模板视图,总共用了4张RT去存储G-buffer信息

G-buffer所占显存带宽的计算

首先每张RT有RGBA四个通道,每个通道是8bit,那么总共是4*8=32bit的通道信息

如果屏幕是1920*1080p的,一张RT整张屏幕存储的通道信息就为1920*1080*4*8bit

如果游戏流畅运行需要60fps(《杀戮空间2》是射击游戏,需要高刷新率),那么在一秒中一张RT所传递的信息就为

1920*1080*4*8*60bit=3981312000bit/s,大概是0.46GB

那么《杀戮空间2》用了四张G-buffer,单一次单向传输就用了将近2G/s的带宽

它的发售时间为2016年末,那时候平常游戏玩家用的卡的带宽在148.8GB/s

但是需要看游戏的最低要求配置,是GeForce GTS 250,这张显卡的显存频率为

1100MHz,显存位宽为256bit,带宽粗略为35G/s,但是显卡需要这个带宽去处理别的事情,可见显存带宽的宝贵性

关于移动端延迟渲染的障碍

移动端的瓶颈在带宽

带宽是电量消耗和发热的大客户。带宽是一种共享资源,因此使用过多会以不可预知的方式限制整个系统的性能。访问外部存储器需要大量功率,因此减少带宽使用可降低功耗,移动端GPU和CPU是共享内存的,因此 GPU 的高带宽使用会降低 CPU 性能

手机游戏的性能优化,要以极低的配置目标做优化,那我们选择一个几年前的手机去做计算

小米6的内存是LPDDR4X 1866MHZ,32bit 双通道

所以内存带宽是,1866 * 32 / 8 * 2 * 2

算下来大概为30 GB/s 

再算上屏幕缓冲区加上深度缓冲区,读写宽带,overdraw,cpu内存读取等开销

总共用30GB/s的带宽,可见移动端的开销是非常紧迫的

这时候上延迟渲染就很难了

不过,在ue5.1中,在关闭静态光的情况下, 使用三张G-buffer支持了桌面端全部的shadingmodel, 并在源码里预留了第四张gbuffer的开关

关于延迟渲染和ssaa与msaa

这个问题的争议比较大,我对这个问题的结论是,可以实现,但是效果可能不正确

延迟渲染和ssaa

ssaa是放大屏幕分辨率,最后再缩放,采样多个映射的子像素点进行插值

在前向渲染中,最后结果都在高分辨率的颜色缓冲区中,在高分辨率的颜色缓冲区中采样再进行插值计算,得到最后的结果

再延迟渲染中,在最后的光照计算后,也得到的是高分辨率的颜色缓冲区,也可以进行插值计算,得到最后的结果,但是在计算光照之前,需要多张高分辨率的G-buffer去存储信息,这个开销巨大

延迟渲染和msaa

msaa是在ssaa的基础上发展而来的,通过测试的子像素才能复制中心像素的颜色,一个像素只计算一次,最后再写入颜色缓冲区

再延迟渲染中,这个像素周围的信息已经丢失了,无法进行采样了,那么有没有办法解决这个问题呢

当然有办法了

在计算得到每一张G-buffer的时候,执行一遍子像素测试,这时候的每一张G-buffer都是取完插值的结果,这时候就保留了每一个像素的周边情况,最后再和光照做计算就没问题

但是,插值得到保留法线和深度的G-buffer可能插值不正确

所以msaa完全可以用延迟渲染,但是计算结果可能不正确

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

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

相关文章

4、DuiLib了解 XML使用和布局控制

文章目录 1、了解 XML使用和布局控制2、内外边距3、浮动4、占位符5、默认样式6、全局字体 1、了解 XML使用和布局控制 通过上一篇的学习我们可以制作一个简单的布局了,但是没有控件的窗口做再好的布局有什么用呀。赶紧找些素材,我们来做一个标准的 Wind…

黄金期货交易规则有哪些?黄金期货交易规则详解

黄金期货交易是一种高风险的投资工具,因此新手投资者在准备交易前建议先学习重要的黄金期货交易规则,对黄金期货产品交易有一个大概的了解。黄金期货交易规则有哪些?以下是重要的黄金期货交易规则详解 黄金期货交易规则一、交易前需要先开户 …

在Deepin虚机中共享使用主机文件夹

一、系统环境: 操作系统:Win11 虚机版本:VMWare workstation 16 pro 虚机系统:deepin 20.9 二、主机中操作 VMWare Workstation/虚拟机/设置/选项/共享文件夹 默认为已禁用,在右侧选择“总是启用”,在…

如何知道自己的论文适合哪个期刊呢?

论文写得好,不如期刊选得好! 如何才能快速、轻松地找到适合的SCI论文期刊呢?在这篇文章中,笔者将分享选择SCI期刊的方法,并总结了需要考虑的要素,可以帮助作者缩小期刊选择的范围,迅速做出最佳决…

自制开源的 Midjourney、Stable Diffusion “咒语”作图工具

本篇文章聊聊如何通过 Docker 和八十行左右的 Python 代码,实现一款类似 Midjourney 官方图片解析功能 Describe 的 Prompt 工具。 让你在玩 Midjourney、Stable Diffusion 这类模型时,不再为生成 Prompt 描述挠头。 写在前面 本文将提供两个版本的工…

0基础学习VR全景平台篇第44篇:编辑器底部菜单- 添加多态

大家好,欢迎观看蛙色VR官方系列——后台使用课程! 本期为大家带来蛙色VR平台,底部菜单—添加多态功能操作。 功能位置示意 一、本功能将用在哪里? 多态场景,指同一个空间场景不同状态下的无缝切换,通过拍…

netty 总结

1. NIO和BIO的比较 BIO以流的方式处理数据,而NIO以块的方式处理数据,块I/O的效率比流I/O高很多。 BIO是阻塞的,NIO是非阻塞的 BIO基于字节流和字符流进行操作,而NIO是基于Channel(通道)和Buffer&#xff08…

Android 反编译apk,然后修改内容后二次签名打包

1. 下载apktool.jar ,下载地址: iBotPeaches / Apktool / Downloads — Bitbucket 2. mac电脑使用 apksigner 方式签名, 需要配置环境. 2.1 命令行输入: open .bash_profile, 在打开的环境配置文件中添加,根据自己SDK目录配置 export APK_SIGNER_HOME/opt/android-sd…

QML TreeView 简单使用

本文主要介绍 QML 中 TreeView 的基本使用方法,包括:TreeView的适用场景; 控件简介 QML TreeView 是 Qt Quick 中的一个组件,用于显示树形结构的数据。它提供了一种以层次结构方式展示数据的方式,其中每个节点可以包含…

蒸汽朋克 VoxEdit 竞赛

欢迎来到蒸汽朋克 VoxEdit 比赛,在这个充满装备和蒸汽的世界里,创意和体素互相碰撞,激发无尽创意! 蒸汽朋克是将过去重新想象为带有未来主义色彩的风格。通过将维多利亚时代的优雅与蒸汽动力机械和黄铜装置相结合,将您…

【强烈推荐】 十多款2023年必备国内外王炸级AI工具 (免费 精品 好用) 让你秒变神一样的装逼佬感受10倍生产力 (2) AI修音

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享博主 🐋 希望大家多多支持一下, 我们一起进步!😄 🏅 如果文章对你有帮助的话,欢迎评论 💬点赞&#x1…

C# 特性

目录 什么是特性 Serializable DllImport Obsolete Conditional 自定义Attribute 特性定义:特性其实是一个类,是直接/间接继承自Attribute,约定俗成是以Attribut结尾,在标记的时候以[ ]包裹,尾部的Attribut可以…

竞赛知识点5【图论】

文章目录 前言基本概念图的定义和分类路径顶点的度、入度、出度图的存储图的DFS遍历图的BFS遍历判断是否为欧拉图拓扑排序关键路径前言 图论起源于著名的哥尼斯堡七桥问题——从这四块陆地中任何一块开始,通过每一座桥正好 一次,再回到起点。欧拉在 1736 年解决了这个问题,…

【计算机视觉】千字汇总:一文读懂计算机视觉,干货满满记得收藏

文章目录 一、前言二、计算机视觉为什么重要三、什么是计算机视觉四、计算机视觉的基本原理五、计算机视觉的典型任务5.1 图像分类5.2 目标检测5.3 语义分割5.4 实例分割5.5 目标追踪 六、计算机视觉在日常生活中的应用场景6.1 门禁、支付宝上的人脸识别6.2 停车场、收费站的车…

Android——布局管理器(十一)

1. 线性布局管理器:LinearLayout 1.1 知识点 (1)布局管理器简介; (2)线型布局管理器的配置; (3)通过Activity程序进行线型布局 1.2 具体内容 在android中&#xff…

java elasticsearch 实现以图搜图效果

前言: 现在需要用javaelasticsearch的方式实现以图搜图的效果,根据下面的文章内容做了一点修改 相关文章:https://blog.csdn.net/m0_52640724/article/details/129357847 一、相关环境 java:jdk11 elasticsearch:7.17…

行情不好进阶困难?那是因为你没有选对方向

关注“软件测试藏经阁”微信公众号,回复暗号【软件测试】,即可获取氪肝整理的全套测试资源 IT行情彻底崩盘了? 相信凡是在抖音关注过互联网相关内容的同学,应该会经常听到这句话吧!没错就是号称“某蛙之父”的那个人天…

【LeetCode】HOT 100(13)

题单介绍: 精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

JavaScript中getElementById与querySelector区别

JavaScript中getElementById与querySelector区别 1、getElement(s)Byxxxx 的用法1.1 getElementById() 方法1.2 getElementsByClassName() 方法1.3 getElementsByTagName() 方法 2、querySelector() 和 querySelectorAll() 用法2.1 querySelector() 方法2.2 querySelectorAll()…

Big O示例与Python数据结构的Big O

在Big-O示例部分的第一部分,我们将介绍各种Big-O函数的各种迭代。 让我们从一些简单的例子开始,探索大O是什么。 O(1) Constant def func_constant(values):Prints first item in a list of values.print(values[0])func_constant([1,2,3])# 1请注意&a…