介绍
Tile based rendering
,分块渲染。
通过阅读本文,你将知道,
- 什么是
Tile based rendering
Tile based rendering
相较于Immediate rendering
的优缺点有哪些
渲染
在介绍分块渲染之前,先介绍一下什么是渲染。
如上图,将模型转换为图像的过程称为渲染。例如,
图. 3D模型
图. 图像
渲染的底层原理是计算机图形学。
渲染的逆过程称为计算机视觉,比如,
图. 人脸识别
图. 自动驾驶
渲染的分类
渲染分为实时渲染(realtime)和离线渲染(offline),例如,
图. 电影或模型的制作。离线渲染对实时性要求不高,更加注重渲染效果
图. 电脑游戏。对实时性要求较高,30帧/秒以上并伴随着实时的操作
按照渲染管线,可以分为,
- 固定功能的渲染管线(Fix-function rendering pipeline)
- 可编程的渲染管线(Programmable rendering pipeline)(主流)
按照渲染架构,可以分为,
- 统一渲染架构(Unified shader architecture)(主流)
- 分离式渲染架构
按照渲染方式,可以分为,
- 分块渲染方式(Tile-based rendering)(主流)
- 立即渲染方式(Immediate rendering)
本文主要介绍分块渲染方式,其他请参看其他文章。
分块渲染
分块渲染首先出现于移动 GPU。
移动 GPU 的设计在面对 PPA(性能 Performance、功耗 Power、面积 Area)的取舍时,总是优先考虑功耗,这是与桌面 GPU 设计的最大区别。桌面 GPU 更加关注性能。
那什么是分块渲染?为何分块渲染可以减少功耗呢?
将待渲染区域划分成若干块并行渲染的渲染方式称为分块渲染。如下图,
可以看到,分块渲染方式将一帧图像划分成了若干个小块分别渲染。
前面提到,分块渲染出现的一大目标是要降低功耗。影响功耗的常见因素有:时钟频率,芯片工艺,访存带宽,功耗管理等。
分块渲染可以明显降低访存带宽,从而达到降低功耗的目的。如上图,分块渲染相较于传统的立即渲染增加了一个片上缓存(Tile buffer)。该片上缓存包含渲染这个方块所需要的颜色缓冲区、深度模板缓冲区。所以,渲染该方块的缓冲区访问都是片上操作,并且渲染完成后,只需要回写颜色缓冲区到显存(Frame buffer)即可,深度模板缓冲区不必写回。这样既提升了访存效率,又减少了访存操作。
分块渲染带来的副作用是,在渲染管线的几何阶段需要额外的访存操作。这是为什么呢?
传统的立即渲染方式的处理流程为,
而分块渲染的处理流程为,
每个方块在开始渲染之前,需要统计出该方块所覆盖的所有的图元。所以,出现了上图中的竖线所示的截断现象,也叫延迟。
并且,每个方块所覆盖的图元信息需要写回到显存,然后在后续的操作中再从显存读取出来。因此,分块渲染相较于立即渲染增加了额外的访存操作。
附录
图片来源
- Saya: Big ambitions for Japanese 'digital daughter'
- On NVIDIA's Tile-Based Rendering
- GAMES101: 现代计算机图形学入门
参考资料
- GPU 渲染管线和硬件架构浅谈