ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【技美百人计划】图形 3.7 移动端TB(D)R架构基础

2021-10-23 17:01:12  阅读:138  来源: 互联网

标签:技美百人 shader System 3.7 IMR 内存 Memory Alpha TB


笔记

IMR过程

在这里插入图片描述
直接和系统内存进行交互

TBDR过程

宏观上两个阶段

第一阶段:分图元
● 执行所有与几何相关的处理,并生成Primitive List(图元列表)
● 并且确定每个Tile(块)上有哪些Primitve(图元)
第二阶段:HSR
● 执行光栅化及后续处理
● 并在完成后,将FrameBuffe从Tile Buffe写会到System Memory中

出自PowerVR
On-Chip Buffers : 片上内存
System Memort :系统内存

Tiling过程:将顶点处理形成的各种几何数据刷到系统内存
经过光栅化、像素shader和ROP,最终把结果刷到片上内存,最终片上内存再刷到系统内存

TBR 和 IMR 对比

请添加图片描述
图(a)TBR架构
■ 几何处理数据形成了FrameData(放在System Memory上)
■ 这些Frame Data经过片段处理,结果放在了Tile Buffer上(片的内存上)
■ 最后的把结果刷到FrameBuffer中(System Memory上)
图(b)IMR架构
■ 对比TBR,少了两个环节:
● 几何处理数据直接到片段处理,没有中间数据(Frame Data)
● 直接刷到System Memory上了,没有经过片内存(On-Chip Memory)

执行顺序

请添加图片描述
IMRTBR
IMR从左到右,再从右到左。过度位置,会有犬牙交错的表现。

两者过渡的地方,没有严格按照从左到右或右到左,还是存在一定的随机性/不确定性。

TBR总结

核心目的

为了降低带宽,减少功耗,但渲染帧率上并不比IMR快

优点

  1. 消除OverDraw提供了机会:
    ○ PowerVR有HSR技术,Mali有Forward Pixel Killing技术,都有为了最大限度减少被遮挡的pixel的texturing和shading
  2. 缓存友好(Cache friendly),在cache的读写速度要比全局内存中快得多(以降低帧率为代价,降低带宽、功耗)

缺点

  1. binning过程是在vertex阶段之后,将输出的数据写到系统内存(DDR)上,然后才能被fragment shader读取。这样一来几何数据过多的管线,容易在此处有性能瓶颈
  2. 如果某些三角形覆盖到多个tile(块)上,会被绘制数次。这样就意味着:总渲染时间多于IMR

优化

  1. 记得在不使用FrameBuffer的时候clear或discard
    ○ 这样做主要是为了清空积存在tile buffer上的中间数据(前边提到的Frame Data),
    ○ 所以对Unity里的rt(render texture)的使用也特别说明一下:
    ■ 当我们不再使用这个rt的时候,尽量调用一次Discard
    ○ 在OpenGl ES上,要善用glclear,glInvalidateFrameBuffer,避免不必要的Resolve(tile buff刷新到system memory)行为
  2. 不要在一帧里频繁的切换FrameBuffer的绑定
    ○ 本质:减少tile buffer和system memory之间的stall(同步)操作
  3. 对于移动平台,建议使用Alpha混合,而非Alpha测试。todo为什么!!!
    ○ 是一个经验性的结论
    ○ 在实际使用的过程中应该使用比较两者的表现
    ○ 通常情况下,移动端应该避免使用Alpha混合来实现透明,如果确实要用,尝试缩小混合区域的覆盖范围
  4. 手机上必须用Alpha Test时,先做一遍Depth Prepass(参考Alpha Test 的双pass优化思路)todo为什么!!!
  5. 图片尽量压缩
    ○ 例如ASTC 、ETC2
  6. 图片尽量走mipmap
  7. 尽量使用从vertex shader传来的Varying变量uv值采样贴图(连续的),不要在Fragment shader里动态计算贴图的uv值(非连续的),否则CacheMiss
  8. 在延迟渲染中,尽量利用Tile Buffer,(参考传统延迟渲染和TBDR)
  9. 如果在Unity中调整ProjectSetting—Quality—Rendering—Texture Quality的不同设置,或者不同分辨率下,帧率有很大的变化,大概率是带宽出问题了
  10. MASS在TBDR下反而是非常快速的
    ○ MSAA是硬件上的,发生在片上的
    ○ 相比FSAA,在手机上是非常快的
  11. 少在Fragment shader中使用discard函数,调用gl_FragDepth从而打断Early-DT的过程(hlsl中为Clip,glsl中为discard)todo为什么!!!
  12. 在shader使用浮点数精度值时,有目的的区分使用float,half
    ○ 优点
    ■ 带宽减少
    ■ GPU中用的周期数减少,因为着色器编译器可以优化你的代码来提高并行化程度
    ■ 要求的统一变量寄存器的数量减少,这样反而又降低了寄存器数量溢出风险。
    ■ 具体参考:熊大的优化建议、shader数学计算优化技巧
  13. 在移动端的TBDR架构中,顶点处理部分容易成为瓶颈
    ○ 避免使用曲面细分shader,置换贴图等副操作
    ○ 提倡使用模型LOD,(本质上减少Frame Data的压力)
    ○ Unity中尽早的在应用阶段做umbra(Unity内置)遮挡剔除

作业

打包到安卓平台,对比 优化点前后的性能变化
苹果用户难受。。。

标签:技美百人,shader,System,3.7,IMR,内存,Memory,Alpha,TB
来源: https://blog.csdn.net/m0_37686228/article/details/120813379

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有