“检验一流智力的标准,就是看你能不能在头脑中同时持有两种相反的想法,还能维持正常行事的能力。”
--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)] |
|
注意第一项 𝐵𝑊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)] |
|
将两者的 BW 放在一起,结构一目了然:
| 开销类型 | IMR | TBR |
|---|---|---|
| 几何开销 𝐵𝑊Geo | 0 | 2PG |
| 深度开销 𝐵𝑊Depth | 2PRSOBd(1 − H) | 0 |
| 颜色开销 𝐵𝑊Color | PRSOBc(1 − H) | RBC[1 + 2S(P − 1)] |
| 总开销 BW | PRSO[(2Bd + Bc)(1 − H)] | 2PG + RBC[1 + 2S(P − 1)] |
IMR 胜在几何零开销,TBR 胜在深度零开销。两种架构的优缺点互为犄角。
判别式
为了把讨论聚焦到真正可变的因素上,对部分参数按实际应用进行固化:
| 参数 | 固化值 | 依据 |
|---|---|---|
| S | 1 | MSAA 在现代管线中已被 TAA、DLSS 等技术广泛替代。 |
| O | 2 | 从前向后绘制与 Early-Z 可以消除一部分但是无法完全消除 Overdraw。在实际应用中,基于包围盒的物体排序无法保证像素级深度顺序,交错遮挡必然引入冗余绘制,不透明物体的真实 Overdraw 通常在 1.5–2.5 之间。 |
| Bd | 4 | 常用 D24S8 格式,深度 3 字节 + 模板 1 字节,合计 4 字节。 |
| Bc | 4 | 常用 RGBA8 格式,4 通道各 1 字节,合计 4 字节。 |
代入后,两个公式显著简化:
𝐵𝑊IMR = 24PR(1 − H)
𝐵𝑊TBR = 2PG + 4R(2P − 1)
判别式 Δ
选择 TBR 的条件是 𝐵𝑊TBR < 𝐵𝑊IMR。代入,移项,整理:
Δ = G − 2R(4 − 6H + 1/P)
于是有以下直观的判定建议:
| 判别 case | 结论 |
|---|---|
| Δ < 0 | TBR 带宽更优 |
| Δ > 0 | IMR 带宽更优 |
| Δ = 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 的代表作,采用前向渲染管线,场景包含大量植被、建筑和半透明特效。选取高端移动设备在典型画质下的渲染参数:
| 参数 | 取值 | 说明与依据 |
|---|---|---|
| P | 3 | 基础渲染、阴影/特效、后处理/UI,保守估计 3 个核心 Pass |
| G | 12 × 106 字节 | 估算平均每个 pass 顶点数 30 万,取每个顶点 40 字节,每个 pass 几何数据量约 12MB。 |
| R | 2.07 × 106 | 手机分辨率取值 1920×1080 |
| H | 0.10 | 移动端小缓存命中率极低 |
带入判据公式计算:Δ ≈ −3.456 × 106,Δ < 0 → TBR 更优
解读:移动端的核心特征是极低的缓存命中率和适中的几何负载。IMR 的深度和颜色开销因 1−H ≈ 0.9 几乎全部穿透至主存,像素端支出高昂;而 TBR 的几何暂存成本仅 2PG = 72MB,换取了深度端的零开销和颜色端与 Overdraw 脱钩的固定成本。在这个案例上,TBR 的带宽优势明确——这也正是许多移动 GPU 倾向采用基于 Tile 的渲染思路的主要原因。
案例 B:桌面 3A 游戏:延迟渲染引擎与复杂后处理场景
该案例是桌面 3A 开放世界 RPG 的标杆,采用延迟渲染引擎,支持大量动态光源、屏幕空间反射和丰富的后处理链。选取 4K 分辨率、最高画质下的渲染参数:
| 参数 | 取值 | 说明与依据 |
|---|---|---|
| P | 25 | 延迟渲染 + 丰富后处理链 |
| G | 192 × 106 字节 | 估算平均每个 pass 顶点数 300 万,取每个顶点 64 字节,每个 pass 几何数据量约 192MB。 |
| R | 8.29 × 106 | 取值 3840×2160 |
| H | 0.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 阶段的那一整趟等待。这其中的具体细节较多,此不赘述,可以查阅我们的专利。