立即渲染(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博客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了