“检验一流智力的标准,就是看你能不能在头脑中同时持有两种相反的想法,还能维持正常行事的能力。”

--F・斯科特・菲茨杰拉德(F. Scott Fitzgerald)《崩溃》

 

1936 年,菲茨杰拉德正处在他人生的低谷:一方面,他是爵士时代的象征、挥金如土的社交偶像;另一方面,他又想做一个严肃、克制、追求不朽的文学大师。这两种身份在现实里彼此拉扯、无法兼顾,让他一度“崩溃”。

在 GPU 架构的设计中,工程师们面对着同样两种截然不同的选择。“立即渲染”(IMR),它用最直接的管线赢得绘制的低延迟。而“分块渲染”(TBR),它则用分块重组后的管线赢得数据搬运的大部分功耗。

众所周知,移动端设备靠电池驱动,每一毫瓦都要精打细算。而在渲染一帧的全部能耗中,数据在芯片和主存间的搬运耗费的能量远超计算本身。于是分块渲染通过按 Tile 重新组织 Geometry 的顺序,把最昂贵的深度和颜色数据锁在片内,只在一个 Tile 绘制结束时向主存做一次集中搬运。省的不是数据的计算,而是数据的搬运。

因此,要权衡这两种架构的选择,必须要先计算清楚带宽究竟能省下多少。

 

带宽

渲染一帧画面,GPU 与主存之间的通信可以拆成三笔账:

𝐵𝑊 = 𝐵𝑊Geo + 𝐵𝑊Depth + 𝐵𝑊Color

 

  • 几何开销 𝐵𝑊Geo:顶点属性与三角形索引的暂存与读取。
  • 深度开销 𝐵𝑊Depth:深度缓冲的读写。
  • 颜色开销 𝐵𝑊Color:颜色缓冲的写入,以及 Pass 切换时额外产生的搬运。

下面从 IMR 和 TBR 的视角分别来拆解:

IMR 简单直接——深度缓冲和颜色缓冲都放在主存里,每次绘制都直接跟主存打交道。每画一个像素,不管它最后能不能被看见,都要做三件事:读深度、写深度、写颜色。

但现代 GPU 都有片上缓存。如果待访问的数据恰好在缓存里,就不需要去主存跑一趟。用 H 表示缓存命中率,真正穿透到主存的比例是 1−H。

由此,IMR 的三笔开销分别是:

𝐵𝑊Geo = 0

𝐵𝑊Depth = P × R × S × O × 2Bd × (1 − H)

𝐵𝑊Color = P × R × S × O × Bc × (1 − H)

三项相加,得到 IMR 总带宽:

𝐵𝑊IMR = P × R × S × O × [(2Bd + Bc) × (1 − H)]

  • P 表示一帧内的渲染 Pass 总数
  • R 为屏幕总像素数
  • S 为 MSAA 采样数
  • O 为平均 Overdraw 系数
  • Bd 为深度缓冲每个采样点字节数
  • H 为片上缓存命中率
  • Bc 为颜色缓冲每个采样点字节数

注意第一项 𝐵𝑊Geo:几何开销为 0。IMR 的几何处理是流式的——顶点数据经过着色器后直接进入光栅化,不需要在主存里暂存任何东西。这个“0”,是后面整个分析的胜负手。

 

TBR 换了一套完全不同的思路。它把屏幕切成一个个 Tile,每个 Tile 的深度测试和颜色混合全部在片上存储器里完成,跟主存没有任何交互。只有 Tile 渲染结束后,才把最终颜色一次性写回主存。

但这套方案的代价是:每个 Pass 开始前,TBR 必须把几何数据先写进主存暂存区,逐 Tile 光栅化时再读回来——一写一读,每个 Pass 产生 2G(G 为几何复杂度因子,即一帧内的顶点相关数据总量,单位是字节)的通信量。Pass 之间切换也有额外开销:Flush 强制写出多采样颜色,Restore 再读回来,一次 Pass 往返合计每像素 BC × 2S 的数据量。

因此,TBR 的开销是:

𝐵𝑊Geo = 2 × P × G

𝐵𝑊Depth = 0

𝐵𝑊Color = R × BC × [1 + 2S × (P − 1)]

三项相加,得到 TBR 总带宽:

𝐵𝑊TBR = 2 × P × G + R × BC × [1 + 2S × (P − 1)]

  • G 为几何复杂度因子,即一帧内的顶点相关数据总量,单位是字节
  • P 表示一帧内的渲染 Pass 总数
  • R 为屏幕总像素数
  • S 为 MSAA 采样数
  • Bd 为深度缓冲每个采样点字节数
  • Bc 为颜色缓冲每个采样点字节数

 

将两者的 BW 放在一起,结构一目了然:

开销类型IMRTBR
几何开销 𝐵𝑊Geo02PG
深度开销 𝐵𝑊Depth2PRSOBd(1 − H)0
颜色开销 𝐵𝑊ColorPRSOBc(1 − H)RBC[1 + 2S(P − 1)]
总开销 BWPRSO[(2Bd + Bc)(1 − H)]2PG + RBC[1 + 2S(P − 1)]

IMR 胜在几何零开销,TBR 胜在深度零开销。两种架构的优缺点互为犄角。

 

判别式

为了把讨论聚焦到真正可变的因素上,对部分参数按实际应用进行固化:

参数固化值依据
S1MSAA 在现代管线中已被 TAA、DLSS 等技术广泛替代。
O2从前向后绘制与 Early-Z 可以消除一部分但是无法完全消除 Overdraw。在实际应用中,基于包围盒的物体排序无法保证像素级深度顺序,交错遮挡必然引入冗余绘制,不透明物体的真实 Overdraw 通常在 1.5–2.5 之间。
Bd4常用 D24S8 格式,深度 3 字节 + 模板 1 字节,合计 4 字节。
Bc4常用 RGBA8 格式,4 通道各 1 字节,合计 4 字节。

代入后,两个公式显著简化:

𝐵𝑊IMR = 24PR(1 − H)

𝐵𝑊TBR = 2PG + 4R(2P − 1)

 

判别式 Δ

选择 TBR 的条件是 𝐵𝑊TBR < 𝐵𝑊IMR。代入,移项,整理:

Δ = G − 2R(4 − 6H + 1/P)

于是有以下直观的判定建议:

判别 case结论
Δ < 0TBR 带宽更优
Δ > 0IMR 带宽更优
Δ = 0两者持平

 

案例

一张表不足以看出门道,下面逐一剖析每个因子如何拨动尺子上的刻度。

分辨率 R:分块渲染对 R 复杂度几乎免疫。分辨率越高,减号后面的项越大,Δ 越小。立即渲染的像素开销被分辨率成倍放大,而分块渲染的几何代价纹丝不动。

缓存命中率 H:立即渲染的护盾。H 每提高 0.1,立即渲染的主存通信量削减 10%。分块渲染的几何暂存开销不受缓存庇护——它的便签存储器本不需要缓存,但也无法从中获益。当 H 高到让阈值(2R(4 − 6H + 1/P))变为负数时,判据无条件指向立即渲染。大缓存的存在,本身就改写了公式的符号。

Pass 数量 P:分块渲染的隐形税单。每增加一个 Pass,分块渲染就要多付一笔几何往返费和一次切换搬运费。立即渲染多一个 Pass,仅仅多一轮像素开销。渲染管线切得越碎,分块渲染的叠加成本越沉重。

几何数据量 G:分块渲染的逆鳞。G 越大,Δ 越大。现代图形细分技术(Tessellation 和 Mesh Shader)导致顶点规模在 GPU 内部成倍膨胀。对立即渲染而言,这只是流式管线的一次短暂路过;而对分块渲染而言,暂存区必须容纳的中间数据急剧膨胀。几何量每膨胀一分,分块渲染的包袱就重一分。

下面用 2 个具体例子,看看 Δ 在真实场景中如何裁决。

在本文采用的公开数据和自定义指标口径下,以下案例仅用于说明判据的使用方式,参数为简化假设,不代表任何特定游戏、设备或 GPU 的实测性能结论。本文不将其作为单一因果结论。

 

案例 A:某个移动端游戏,采用前向渲染场景

该案例是某个移动端开放世界 ARPG 的代表作,采用前向渲染管线,场景包含大量植被、建筑和半透明特效。选取高端移动设备在典型画质下的渲染参数:

参数取值说明与依据
P3基础渲染、阴影/特效、后处理/UI,保守估计 3 个核心 Pass
G12 × 106 字节估算平均每个 pass 顶点数 30 万,取每个顶点 40 字节,每个 pass 几何数据量约 12MB。
R2.07 × 106手机分辨率取值 1920×1080
H0.10移动端小缓存命中率极低

带入判据公式计算:Δ ≈ −3.456 × 106,Δ < 0 → TBR 更优

解读:移动端的核心特征是极低的缓存命中率和适中的几何负载。IMR 的深度和颜色开销因 1−H ≈ 0.9 几乎全部穿透至主存,像素端支出高昂;而 TBR 的几何暂存成本仅 2PG = 72MB,换取了深度端的零开销和颜色端与 Overdraw 脱钩的固定成本。在这个案例上,TBR 的带宽优势明确——这也正是许多移动 GPU 倾向采用基于 Tile 的渲染思路的主要原因。

 

案例 B:桌面 3A 游戏:延迟渲染引擎与复杂后处理场景

该案例是桌面 3A 开放世界 RPG 的标杆,采用延迟渲染引擎,支持大量动态光源、屏幕空间反射和丰富的后处理链。选取 4K 分辨率、最高画质下的渲染参数:

参数取值说明与依据
P25延迟渲染 + 丰富后处理链
G192 × 106 字节估算平均每个 pass 顶点数 300 万,取每个顶点 64 字节,每个 pass 几何数据量约 192MB。
R8.29 × 106取值 3840×2160
H0.9桌面大缓存几乎全覆盖

带入判据公式计算:Δ ≈ 214.55 × 106,Δ > 0 → IMR 更优。

解读:桌面端的高缓存命中率(H = 0.9)几乎将 IMR 的像素端开销压缩至理论最低——仅 10% 的访存需穿透至主存。与此同时,TBR 的两项固定成本被放大:几何暂存 2PG = 2×25×192MB ≈ 10GB;Pass 切换带来的带宽需求 4R×2(P−1) ≈ 1.6GB。这个案例上,IMR 的带宽优于 TBR。

 

尾声

真正的一流的架构师,不会做非 A 即 B 的选择,而是在头脑中同时装下两种互补的方案,最后却做出精彩折中的决策。

IMR 把信任交给流水线和缓存,TBR 把算计压在分块和片上存储。一个在几何带宽上零成本,另一个在像素带宽上几乎免疫,它们的优势互为犄角。

格兰菲的 Arise 系列 GPU 提出的 DCR(Dynamic Cache Rendering)渲染技术,针对一些场景,就同时获得了两端的优势:分块渲染的深度带宽零开销,和立即渲染的几何带宽零开销。不仅节省带宽,还有 Binning 阶段的那一整趟等待。这其中的具体细节较多,此不赘述,可以查阅我们的专利。