1.部分相关名词

System Memory

手机内存,几个G到十几个G的那种,也是常说的DDR

On Chip Memory

手机自身的SRAM缓存,容量挺小(几百K到几M),但读写巨快

在TB(D)R架构下会存储Tile的Color,Depth,Stencil。

Stall

一个结果已经计算完了 但等另一个结果计算完成的等待过程

Fillrate

像素填充率是指图形处理单元在每秒内所渲染的像素数量,单位是MPixel/S(每秒百万像素),或者GPixel/S(每秒十亿像素),是用来度量当前显卡的像素处理性能的最常用指标。

像素填充率 = ROP运行的时钟频率 × ROP的个数 × 每个时钟的ROP可以处理的像素个数

2.常见渲染架构

IMR

Immediate Mode Rendering,中文立即渲染

直接且传统的渲染架构,就是直接和内存进行交互,要几何信息、贴图信息就找内存拿,要读写Buffer就找内存改

TBR

Tile-Based Rendering,会将屏幕上的区域分成一个个的Tile分开来渲染

在第一个阶段,先把顶点着色器给执行完了,然后执行分Tile操作,给每个图元指定到块元里,然后再以Tile为单位去执行后续操作如光栅化等

分Tile操作就是形成一个图元的列表存到SystemMemory里

TBR增加了与On Chip Memory的交互,对于Buffer的操作会放在On Chip Memory上方便读写,在ColorBuffer搞定后在传到手机内存的FrameBuffer里

Defer

Defer的意思就是,等数据都传过来之后再一起处理

在刚刚TBR里,把图元集合成Tile就是一次Defer

这个Defer又叫Binning过程,即确定哪些块元渲染哪些图元

TBDR

在TBR的基础上增加第二次Defer所以叫TBDR

这个Defer主要是优化Overdraw问题的。上节课说的EarlyZ除非严格从前往后不然无法完全优化Overdraw。

苹果:

PowerVR会在原来EarlyZ的基础上增加了HSR,HiddenSurfaceRemoval,通过硬件层面的特性解决Overdraw问题

对于每个通过EarlyZ的Fragment,先读取第一次Defer产生的图元列表,标记哪个像素由哪个图元绘制,等Tile上的图元都处理完成时,它们都被标记上了,然后再把最近的不透明和最近的透明对象标记为需要被渲染传到fragment shader里

其他GPU的第二次Defer

骁龙:

Arm Mali:

ForwardPixelKill,发生在EarlyZ之后,如果EarlyZ传过来的数据发现有同位置且深度较小的Quad时就会移除深度较大的Quad

TBR与IMR

上TBR,下IMR,黄色为处理单元,蓝色为存储区域,其实也基本和上面的内容一个样(啊这张图有必要截吗?我是不是又在做那种事了)

3.TBR的特点

就是上面说到的,一块一块处理的,所以颜色也是一块一块刷出来的,而且整体有一定的顺序性

可见IMR在交界的地方有挺强的随机性(GPU乱序执行),不过TBR也有一定的随机性

TBR渲染速率并不比IMR快,目的是降低带宽,减少功耗

优点:

TBDR解决Overdraw

因为做成了一个个Tile,所以很多操作都是可以On-Chip Memory上做好,最终再把Color Buffer传给内存,降低带宽。不做Tile的话,每个Pass的每个DrawCall这样把Buffer传来传去,折磨带宽呢

缺点:

tile要和DDR交互

部分如Tessellation的操作不支持TBR(因为本身对几何信息做出改变)

对于同时叠加在多个tile的三角形要绘制多次

4.移动端TBR优化建议

不使用FrameBuffer的时候清除掉,清空积累在tilebuffer上的数据 ,避免将tlebuffer刷新到system memory

不要在一帧里频繁切换FrameBuffer,减少tlebuffer和system memory的stall

移动平台建议用AB而不是AT(经验性结论,最好测试一下),必须用AT的话先做PreZ

图片压缩、mipmap

尽量使用Vertex传入的UV,不在fragment动态计算UV

延迟渲染尽量利用TileBuffer

如果在Unity中调整ProjectSetting---Quality---Rendering---Texture Quality的不同设置,或者不同分辨率下,帧率有很大的变化,大概率是带宽出问题了

MSAA在TBDR上很快

少在Fragment里Discard,防止打断EarlyZ

细心区分浮点类型(float half uniform等)优化带宽

尽量避免曲面细分,提倡LOD(TBR友好)

作业

结合课程,将demo打包到安卓平台,对比使用课上优化点前后的性能变化

使用UPR进行测试,设备是红米K30S,场景长这样

AssetStore找的,PolytopeStudio的资源,可以搜Lowpoly Medieval。总体是个Lowpoly风格,花花草草树树叶叶啥的都是AlphaTest做的,贴图大多是一个物体用一大张

自己经过一轮的测试发现测试的时候乱摆摄像头会导致数据有较大浮动,所以将摄像头固定在开始界面进行20秒的测试

1.默认

2.贴图压缩格式由No Override改为ETC2

帧率变化不大,不过纹理资源峰值倒是由原来的300M变成了250M

3.贴图大小由2048改成1024

变化也不大

4.关闭AlphaTest

 性能巨量优化,毕竟一地的草Overdraw可不是闹着玩的

5.关闭Mipmap

性能稍微降低

TA100 T3.7 TB(D)R相关推荐

  1. 图形学进阶——移动端TB(D)R架构基础

    移动端TB(D)R架构基础 百人计划学习链接:[技术美术百人计划]图形 3.7 移动端TB(D)R架构基础 一.当前移动端的设备概况 1. 移动端CPU占比 2. 移动端GPU占比 3. 各类电子设备 ...

  2. 移动端TB(D)R架构基础

    目录 1 各类电子设备功耗对比 2 名词解释 3 立即渲染 4 TBDR渲染流程 5 Binning过程(第一个Defer) 6 不同GPU的Early-Depth-Test(第二个Defer) 7 ...

  3. 百人计划(图形部分)移动端TB(D)R架构基础

    霜狼_may的个人空间_哔哩哔哩_Bilibilihttps://space.bilibili.com/7398208?spm_id_from=333.788.b_765f7570696e666f.1 ...

  4. TA100 T3.4

    前向/延迟渲染管线 渲染路径 渲染方式 FORWARD 流程 Unity中规则 DEFERRED 流程 几何处理Pass 光照Pass 透明物体 不同渲染路径的特性 异同 优劣 前向渲染 优点 缺点 ...

  5. 【TA-霜狼_may-《百人计划》】图形3.7 移动端TP(D)R架构

    [TA-霜狼_may-<百人计划>]图形3.7 移动端TP(D)R架构 @[TOC]([TA-霜狼_may-<百人计划>]图形3.7 移动端TP(D)R架构 3.7.1 当前移 ...

  6. android布局layout中的一些属性

    为什么80%的码农都做不了架构师?>>>    1.可以使某些资源文件或UI组件可重用 <include layout="@layout/other"/&g ...

  7. 2010 27寸 imac 升级固态_2017 款 iMac,27 寸升级换 SSD 固态硬盘拆机详解

    想要 iMac玩游戏?怎么能带动?如何解决卡顿问题?别急,给您带来2017 款 iMac,27 寸升级换 SSD 固态硬盘拆机详解,拆机并不复杂,动手能力差的同学看了这篇文章会觉得原来我也可以,那让我 ...

  8. NUAA无线传感器网络 复习重点整理

    鸣谢 授课老师:郝洁老师 个人主页 在cdsn博主:Matts Tian 基础上修改.添加 Matts Tian 体系结构 什么是无线传感器网络? 无线传感器网络(Wireless sensor ne ...

  9. MIT 18.06 +线性代数的几何意义+3Blue1Brown 笔记

    第一节 线性映射与线性变换 线性函数:初等f(x)=kxf ( x ) = k xf(x)=kx,满足可加性与比例行,几何意义为一条直线:高等线性函数:扩展初等线性函数,f(x1,x2,⋯,xn)=k ...

最新文章

  1. R-CenterNet:用CenterNet对旋转目标进行检测
  2. 元素的   is_enable()、is_displayed()和is_selected()
  3. 动态矩阵控制 MATLAB代码
  4. Faster R-CNN
  5. php 安卓实现实时导航,用安卓平板电脑轻松实现GPS实时导航
  6. 编写一个函数判断一个整数是不是素数c语言,设计一个函数,用来判断一个整数是否为素数。代码如下,按要求在空白处填写适当的表达式或语句,使...
  7. php session 释放,php中删除Session和销毁Session的方法
  8. 深度解析LSTM神经网络的设计原理
  9. onethink后台登陆修改验证码!
  10. 在浏览器地址栏输入一个URL后回车,背后会进行哪些技术步骤?
  11. python File operation
  12. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_8_字节输入流_InputStream类FileInputStream...
  13. ajax后台重定向会返回什么_处理jquery ajax重定向
  14. 服务器 备案 文档,备案需要备案服务器
  15. window.open父子页面,子页面关闭回调事件样例
  16. Linux下QProcess不产生finished信号、waitforfinished阻塞超时【defunct进程】
  17. android和苹果内存,安卓的8G运行内存为什么与苹果3G的运行内存不能抗衡?
  18. Linux 中Tomcat 服务器 启动项目,页面删除报错“该信息被其他信息引用”解决 (ORA-02292)
  19. OpenFaaS实战之二:函数入门
  20. C#托管代码和非托管代码的区别

热门文章

  1. 【逻辑思维训练 二】系统思维训练
  2. WAP(wml)开发问答
  3. [Swift]语言介绍
  4. 2020金融科技领域最具商业合作价值企业盘点
  5. Encoding Changed错误
  6. MATLAB | 生成视频文件
  7. 电力-涌流抑制与谐波
  8. js实现人物移动(附有全部代码以及解析)
  9. 2016年世界编程大赛_在2016年学习的最佳编程语言是什么?
  10. 【以太网通信】PHY 芯片回环测试