技美知识学习3700:现代移动端的TBR和TBDR渲染管线
学习教程来自:【技术美术百人计划】图形 3.7 移动端TB(D)R架构基础
移动端GPU的TB(D)R架构
1. 当前移动端GPU概况
1.1 移动端和桌面端功耗对比
1.2 移动端和桌面端带宽对比
2. 名词解释
SoC(System on Chip):芯片。把CPU GPU 内存 通信基带 GPS模块等整合在一起的芯片
System Memory:手机内存。CPU和GPU共用的一块片内LPDDR物理内存,一般有几个G
On-chip Memory:缓存。CPU和GPU的高速SRAM的Cache缓存,一般几百K到几M,比内存快几倍到几十倍,他们都共享内存地址空间(桌面端是分开的)。在TB(D)R架构下会存储Tile的颜色、深度和模板缓冲
Stall:GPU必须串行的2次计算之间的等待过程
FillRate:ROP运行时钟频率 X ROP个数 X 每个时钟ROP可以处理的像素个数
TB(D)R/Tile-Based(Deferred)Rendering:主流的移动GPU渲染架构,对应PC的IMR(Immediate Mode Rendering)。屏幕被分成16或32的像素块渲染
TBR流程:VS-Defer-RS-PS
TBDS流程:VS-Defer-RS-Defer-PS(见7、8描述2个defer过程)
Defer:延迟,阻塞+批处理待渲染的一帧中的多个数据,然后一起处理
3. 立即渲染(IMR)
4. 基于块元的渲染TB(D)R
- 逐个图元(顶点着色+图元加入TileList):阶段1执行几何相关的处理,生成Primitive List/图元列表,确定Tile上的图元有哪些
- 逐个分块(片元着色等):逐Tile执行光栅化和后续处理,完成后将Frame Buffer从Tile Buffer写回System Memory中
5. TB(D)R的硬件渲染顺序
6. IMR和TB(D)R对比
总体上看,TBR降低了功耗和带宽,但帧率上并不比IMR快
TBR的优缺点:
优点:
- TBR有利于消除OverDraw,其中PowerVR的HSR技术和Mali的Forward Pixel Killing技术,都最大限度的减少了被遮挡像素的texturing和shading
- Cached Friendly,在缓存中的读写速度远高于全局内存,以降低render rate的代价,减低了带宽和功耗。
缺点:
- binning过程:在VS过程后输出几何数据到DDR,然后被FS读取,几何数据过多的情况下可能在此处产生性能瓶颈
- 当三角形覆盖在多个tile上时,需要绘制很多次,此时性能低于IMR模式
7. Binning过程(第一个Defer)
过程:图元分配到对应的块元
测试工具:Adreno Profiler
8. 不同GPU的Early-Depth-Test(第二个Defer)
8.1 Qualcomm Adreno的LDR(Android)
硬件的occlusion culling:在正常渲染管线之前,VS生成低精度depth texture,剔除不可见的三角形
8.2 Mali的FPK(Android)
Forward Pixel Kill技术:在Early-Z阶段之后,使用一个FIFO队列抛弃被遮挡的Quad(例子中是2*2的像素)
8.3 Power-VR的HSR(IOS)
Hidden Surface Removal技术:沿一条射线从第一个不透明片元向后剔除被遮挡的片元
9. 优化建议
- 不使用FrameBuffer时及时Clear或Discard:清空了在tile buffer上的中间数据。Unity中,不适用RT时调用Discard。OpenGL ES中善用glClear、glInvalidateFrameBuffer,避免不必要的Resolve(tile buffer刷新到系统内存)行为
- 减少一帧中FrameBuffer绑定的频繁切换:减少了tile buffer和系统内存之间的stall操作
- 考察Alpha Test和Alpha混合的实际表现,合理使用。减少Alpha混合实现透明时的混合范围(例如将透明区域的Mesh裁剪掉替换为多边形)
- 使用Alpha Test时先进行提前深度测试
- 图片尽量压缩,例如ASTC ETC2
- 图片尽量开启mipmap
- 贴图采样:UV值尽量使用VS中传出的Varying变量(VS向PS中传递的变量)(连续),不要再FS中动态计算UV(非连续),造成CacheMiss
- 在延迟渲染中尽量利用Tile Buffer
- 项目配置中不同的配置导致的帧率变化,可能是带宽占用的问题
- MSAA在TBDR下消耗很小:硬件速度快
- 减少FS中Clip(HLSL)、discard(GLSL)、gl_FragDepth的使用:会打断Early-DT的执行
- 区分使用float、half、fix:1). 降低带宽占用 2). 减少GPU周期提高并行程度 3). 降低统一变量寄存器数量,从而降低寄存器数量溢出风险,参考Unity3D shader优化技巧集合
- 减少FrameData压力:顶点处理部分容易成为瓶颈,应避免使用曲面细分shader、置换贴图等负操作。提倡使用模型LOD,且尽早进行遮挡剔除(如umbra)
作业
题目:打包场景到Android平台,对比优化前和优化后的结果
测试环境:2.84 GHz 骁龙865八核 8GB运存
提前总结:以下优化效果测试了贴图大小的影响,关闭了一些影响不大的后处理效果,没有进行shader的修改(菜~~ 没找到shader的位置,之后再完善吧)。
0. 优化前
场景来自Unity Asset 资源链接
优化1:从上边的图看,瓶颈在GPU。经过尝试后关闭了摄像机中一个后处理(远处场景模糊处理),
1. 关闭耗时的后处理
2. 贴图调整
- Texture Compression设置为ETC:没啥效果,依旧为38ms,看来默认就会有一些压缩
- Max Size 2048 -> 256 -> 32:差别不大,降低了5ms左右,画质变差了很多。可能由于开启了MipMap,远处的贴图降低了分辨率,近处的物体也不是很多。还有可能由于手机的性能瓶颈不在这里,故调整贴图大小差别不大
如图,当摄像机离散的变化到一个新位置时,渲染的时间会突然增加再慢慢减少,往复循环。
3. Shader
这个场景里的Shader没找到从哪里能改,卒
4. 一些后处理效果的删除
经测试,关掉这些后处理效果能在最终效果差别不大的情况下提升帧率(贴图在2048分辨率下)
技美知识学习3700:现代移动端的TBR和TBDR渲染管线相关推荐
- 技美知识学习3300:TESS and GS
学习教程来自:[技术美术百人计划]图形 3.3 曲面细分与几何着色器 大规模草渲染 Unity版本:Unity 2019.3.15f1 感谢老师的传道授业解惑,本篇用于总结复习和实践 1. 知识基础 ...
- 基于SSM+JSP实现的流浪猫狗救助系统(分为用户端和管理员端,领养动物、流浪动物知识学习、用户管理、评论管理、领养记录查询、流浪猫狗管理等)
博客目录 基于SSM+JSP实现的流浪猫狗救助系统 实现功能截图 系统功能 使用技术 完整源码 基于SSM+JSP实现的流浪猫狗救助系统 本系统是一个流浪猫狗救助系统,分为用户端和管理员端,用户端可以 ...
- Javascript 基础知识学习
Javascript 基础知识学习 参考自:https://www.w3cschool.cn/javascript/ javascript 简介 JavaScript 是互联网上最流行的脚本语言,这门 ...
- 关于 Unreal4 技美:如果你希望往UE技美方向发展。。。。
关于 Unreal4 技美:如果你希望往UE技美方向发展.... https://zhuanlan.zhihu.com/p/24766321 关于 Unreal4 技美:如果你希望往UE技美方向发展. ...
- 计算机毕业设计Java海南自贸港知识学习与测试(源码+系统+mysql数据库+lw文档)
计算机毕业设计Java海南自贸港知识学习与测试(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java海南自贸港知识学习与测试(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目 ...
- 【软件创新实验室2021年寒假集训】Java技术培训——Java前置知识学习
系列文章目录 [软件创新实验室2021年寒假集训]汇总篇 20级Java培训 第一天:[软件创新实验室2021年寒假集训]Java技术培训--Java前置知识学习 第二天:Java基础(一) 第三天: ...
- 「技美之路」图形 1.1 渲染流水线
今日起开始分享学习技美之路专栏,文章来源听课笔记以及业界大佬分享的经验文章,主要来自CSDN_知乎等.技美路漫长 一定要坚持 开始吧! 一.整体流程 整体流程(渲染管线可分为四个阶段)每一个阶段的输 ...
- 学习C++项目——数据库知识学习(主从原理,分离配置,远程工具只是了解,都没有实现)
学习数据库知识 一.思路和学习方法 本文学习于:B站平台UP主 IT 小当家,学习 MySQL 数据库,如里面加以自己的一些学习复现和理解,如有侵权会进行删除.学习Oracle以后也可以参考之前学 ...
- 2021-7-19-OpenStack基础知识学习
OpenStack基础知识学习 参考文献:Wolf_Coder,百度百科 1,云计算 1.1,出现原因 由亚马逊公司提出.1.随着业务增加公司内部的服务器不够使用,进行虚拟化技术->2.随着公司 ...
最新文章
- 继续不务正业,今天来弄弄R
- MySQL 错误对照表
- 038_Unicode对照表四
- mysql海量数据存储
- 2015服务器性能排名,【新年大礼】史上最全CPU天梯图2015年V3.5版 全平台性能对比参考...
- mysql不能正常yum remove怎么办?--noscripts
- idea数据库反向生成实体类_IntelliJ IDEA 的数据库管理工具实在太方便了
- sas sql 读取最后一行数据_SAS基础编程和数据处理
- matlab2c使用c++实现matlab函数系列教程-rot90函数
- 在xp3下,Apache , PHP, Zend Studio怎样配置环境?
- [RK3399][Android7.1] 调试笔记 --- 播放音乐没有声音
- html5实现在线动态画板,HTML5 canvas实现一个简易画板
- Redis面试宝典12道法
- sklearn.neighbors.KNeighborsClassifier()函数解析(最清晰的解释)
- 单片机循迹车c语言程序,基于单片机控制的简易自动循迹小车仿真与程序源码...
- 淘晶驰串口屏入门(四)进度条、滑块、定时器、单选框、复选框、二维码
- Android 音乐APP(二)启动白屏优化、定位当前播放歌曲
- python程序段的基本结构_python3 第三章 - 程序的基本结构
- 电子类专业毕业后到底是做什么的??挺有意义的
- spring boot 使用过滤器过滤非法字符
热门文章
- WampServer中localhost无法打开怎么办
- win10计算机运行在哪里,Win10运行在哪(开始、快捷键、所有应用)
- liferay mysql driver_liferay与mysql的联接
- opencv实现实时“无脸男”
- 从0开始部署基础的AlwaysOn
- 深度估计 DenseDepth 笔记
- Python知识点总结(1)
- 婚宴座位图html5,婚宴酒席座位安排图 20桌婚宴座位安排图
- 网络语言c三个字猫头鹰,在线语言学习平台 多邻国(Duolingo)更新猫头鹰图标...
- hdu 3374 String Proble