分块渲染

介绍

Tile based rendering,分块渲染。

通过阅读本文,你将知道,

  • 什么是 Tile based rendering
  • Tile based rendering 相较于 Immediate rendering 的优缺点有哪些

渲染

在介绍分块渲染之前,先介绍一下什么是渲染。

image

如上图,将模型转换为图像的过程称为渲染。例如,

图. 3D模型

image

图. 图像

image

渲染的底层原理是计算机图形学。

渲染的逆过程称为计算机视觉,比如,

图. 人脸识别

image

图. 自动驾驶

image

渲染的分类

渲染分为实时渲染(realtime)和离线渲染(offline),例如,

图. 电影或模型的制作。离线渲染对实时性要求不高,更加注重渲染效果

image

图. 电脑游戏。对实时性要求较高,30帧/秒以上并伴随着实时的操作

image

按照渲染管线,可以分为,

  • 固定功能的渲染管线(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)即可,深度模板缓冲区不必写回。这样既提升了访存效率,又减少了访存操作。

分块渲染带来的副作用是,在渲染管线的几何阶段需要额外的访存操作。这是为什么呢?

传统的立即渲染方式的处理流程为,

而分块渲染的处理流程为,

每个方块在开始渲染之前,需要统计出该方块所覆盖的所有的图元。所以,出现了上图中的竖线所示的截断现象,也叫延迟。

并且,每个方块所覆盖的图元信息需要写回到显存,然后在后续的操作中再从显存读取出来。因此,分块渲染相较于立即渲染增加了额外的访存操作。

附录

图片来源

参考资料

posted @ 2022-07-21 14:39  专注于GPU的程序员  阅读(553)  评论(0编辑  收藏  举报