立即渲染(IMR) vs. 基于块渲染(TBR)
DrawCall:
CPU指令,用来向GPU传输渲染数据和指令,
在Unity叫SetPassCall
CommandBuffer:
缓存DrawCall
RenderPass:
一次渲染流,有时完成一帧渲染需要多次RenderPass(如阴影)
每次执行RenderPass时,GPU会从CommandBuffer中取出所有的DrawCall,逐一执行。
立即渲染(IMR) vs. 基于块渲染(TBR)
IMR:
在一个RenderPass中,逐一执行DrawCall
----每个DrawCall
--------逐片元逐顶点做顶点变换
--------把变换后的顶点送去做光栅化
--------把光栅化后的片元逐个着色(着色过程中由于片元太大会与DRAM频繁交互,消耗大量带宽)
伪代码
for draw in renderPass: for primitive in draw: for vertex in primitive: execute_vertex_shader(vertex) for fragment in primitive: execute_fragment_shader(fragment)
TBR:
pass1:
在一个RenderPass中,逐一执行DrawCall
----每个DrawCall
--------逐片元逐顶点做顶点变换
把所有变换后的顶点收集起来,存在Frame Data中,并且分tile
pass2:
每个tile,单独做光栅化、着色、测试、混合等(由于每个tile的尺寸都不会超过On-Chip 高速缓存的大小,不会消耗大量带宽)
伪代码
# Pass one for draw in renderPass: for primitive in draw: for vertex in primitive: execute_vertex_shader(vertex) append_tile_list(primitive)
# Pass two for tile in renderPass: for primitive in tile: for fragment in primitive: execute_fragment_shader(fragment)
Tile-based Rendering Architecture(TBR/TBDR) - 简书 (jianshu.com)
Unity Shader学习笔记(一)DrawCall-腾讯游戏学堂 (qq.com)
【GPU】番外篇:从桌面端看移动端GPU架构 - 知乎 (zhihu.com)
(48条消息) 闲聊Framebuffer_认真的柯南的博客-CSDN博客_framebuffer 内存分配
(48条消息) 针对移动端TBDR架构GPU特性的渲染优化_leonwei的博客-CSDN博客