立即渲染(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博客

 

posted @ 2022-09-29 17:13  银龙背上的骑士  阅读(272)  评论(0编辑  收藏  举报