立即渲染(IMR) vs. 基于块渲染(TBR)

DrawCall:
CPU指令,用来向GPU传输渲染数据和指令,
在Unity叫SetPassCall

CommandBuffer:
缓存DrawCall

RenderPass:
一次渲染流,有时完成一帧渲染需要多次RenderPass(如阴影)
每次执行RenderPass时,GPU会从CommandBuffer中取出所有的DrawCall,逐一执行。

立即渲染(IMR) vs. 基于块渲染(TBR)
IMR:
在一个RenderPass中,逐一执行DrawCall
----每个DrawCall
--------逐片元逐顶点做顶点变换
--------把变换后的顶点送去做光栅化
--------把光栅化后的片元逐个着色(着色过程中由于片元太大会与DRAM频繁交互,消耗大量带宽)
伪代码

1
2
3
4
5
6
7
8
9
10
11
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 高速缓存的大小,不会消耗大量带宽)
伪代码

1
2
3
4
5
6
# Pass one
for draw in renderPass:
    for primitive in draw:
        for vertex in primitive:
            execute_vertex_shader(vertex)
        append_tile_list(primitive)

  

1
2
3
4
5
# 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 @   银龙背上的骑士  阅读(289)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示