移动端部分渲染架构

2.3k 词

渲染架构

IMR (Immediate Mode Rendering)

IMR (Immediate Mode Rendering)是 PC 和主机 GPU 使用的渲染方式,是指:每一次渲染API的调用,都会直接绘制图形对象。因此,每一次物体颜色和深度的渲染,都要读写Frame Buffer和Depth Buffer (深度缓冲)。
IMR
上图有2层结构:
上半部分:渲染管线
下半部分:涉及到的显存数据,包括几何数据、纹理数据、Depth Buffer (深度缓冲)、Frame Buffer
从上图,可以看出:
IMR (Immediate Mode Rendering)架构需要大量的带宽,这点可通过L1、L2缓存优化
但对于移动端可怜的GPU尺寸和功耗需求,不可能将Cache做得太大。因此,通常对于移动端,是不可能使用IMR (Immediate Mode Rendering)的

TBR (Tile-Based Rendering)

移动设备的显卡不能使用 IMR (Immediate Mode Rendering),使用的是TBR (Tile-Based Rendering),其核心思想是:将帧缓冲分割为一小块一小块,然后逐块进行渲染。
具体实现上是:渲染时,直接渲染对象不再是当前的Frame Buffer和Depth Buffer (深度缓冲),而是叫Tile Buffer的高速缓存。从而将IMR (Immediate Mode Rendering)中对Color/Depth Buffer进行的读写操作,改为对GPU中高速内存的读写操作。
TBR
上图有3层结构:
最上一层:Render Pipeline (渲染管线)
中间一层:On-Chip Buffer(a.k.a. 片上内存,Tiled Frame Buffer & Tiled Depth Buffer)
最下一层:系统内存,CPU和GPU共享
Primitive List
固定长度数组,长度为tile的数量
数组中,每个元素是一个linked list,存的是和当前tile相交的所有三角形的指针,指针指向Vertex Data
Vertex Data
存放顶点和顶点属性数据

TBDR (Tile-Based Deferred Rendering)

TBDR (Tile-Based Deferred Rendering) 在 TBR (Tile-Based Rendering)的基础上,通过硬件层面的特性HSR (隐藏面消除)解决了Overdraw问题
TBDR
如上图所示,相比 TBR,TBDR 多了个 HSR 和 TagBuffer,它们是PowerVR独有的特性,在硬件层面上,做到了零Overdraw。其基本思想是:不立即绘制通过 Early Z Test 的像素,而是只标记这些像素的图元,只绘制标记最终通过 Early Z 的那个像素点。

HSR 的具体过程大致如下
每个fragment,通过了Early Z Test后,先不绘制,而是HSR (隐藏面消除)阶段读取primitive list(图元列表),标记该像素由哪个图元绘制
HSR (隐藏面消除)读写片上的Depth Buffer (深度缓冲),以判断该由哪个图元绘制。等这个Tile上所有的图元处理完成,记录最终通过Early Z Test的那个图元
在Fragment Shader (片元着色器)绘制时,只绘制标记这个像素点,最终通过Early Z Test的那个fragment
但要注意:HSR (隐藏面消除)是要假设前面的物体会挡住后面的物体的,但当Alpha Test&Alpha Blend存在时,前面的物体并不会挡住后面的物体,这时,不仅没有作用,反而会打断现有的Deferred流程,导致性能降低。

总结

IMR (Immediate Mode Rendering)
每一次渲染的提交(可以是一个也可以是一批对象),都要读取当前的Color/Depth Buffer,然后再写回。需要大量的带宽,而对移动端的GPU来说,大量的带宽,带来的是高功耗,因此移动端采用下面TBR的方案

TBR (Tile-Based Rendering)
Tile-Based是指渲染不再以当前Frame Buffer尺寸为单位,而是分成一个个Tile。渲染前有个Tiling Pass,来判断三角形Rasterization (光栅化)到哪个Tile中。TBR 将 IMR 中对Color/Depth Buffer进行的读写操作,改为对GPU片上高速内存的读写操作,大大提升速度。

有时,也称TBR为 TBDR,这个延迟是指:在处理完所有的VS(几何处理)之后,才做的Rasterization (光栅化),但PowerVR不乐意了。
TBDR (Tile-Based Deferred Rendering)
某种程度上,确实PowerVR的才能叫真的TBDR (Tile-Based Deferred Rendering),因为TBDR (Tile-Based Deferred Rendering)在TBR (Tile-Based Rendering)的基础上,通过硬件层面的特性HSR (隐藏面消除)解决了Overdraw问题 。说它是真正的TBDR,是因为延迟不仅体现在TBDR是在处理完所有的VS(几何处理)之后,才做的Rasterization (光栅化),而且在Rasterization (光栅化)后,通过HSR (隐藏面消除)避免了不必要的Fragment Shader (片元着色器)计算,实现了从光栅化到片元着色器的延迟。

参考引用:https://zhuanlan.zhihu.com/p/390625258

留言