Render To Texture
Render-To-Texture 是一种十分常见和简单的渲染技术,它将纹理对象和 FBO 绑定,把场景渲染到纹理中,以便之后可以反复使用。RTT 被广泛应用在 in-game cameras(virtual camera systems), post-processing 和各种特效中。本文主要比较 RTT 技术在两种不同的渲染架构下的不同和一些思考。
IMR vs TBR
IMR (Immediate Mode Rendering) 和 TBR (Tile-Based Rendering) 是两种不同的渲染架构,前者常见于桌面 GPU (NVIDIA, AMD), 后者常见于移动 GPU (Imagination, Mali)。
IMR
- 一整块一整块渲染,需要大量访存,所以必须有比较大的 L1, L2 Cache 来降低访存延时
- 需要大量带宽,所以功耗高
- 渲染管线执行流畅, 从顶点到片段一口气弄完
TBR
- 一小块一小块渲染, 对于每一小块来说,所需要的访存的带宽就相对较小,可以在片上做一小块高速缓存
- 需要的带宽小,所以功耗低
由上面的两张图可以看到,在 TBR 架构下,GPU 产生的每个像素并不是直接写入显存的,而是暂存在片上的 Color Buffer 中,对于 RTT 来说,如果渲染得到的纹理作为后面绘制命令的源纹理,那么如果没有显式地将还存在于片上的 Color Buffer 刷新入显存中,那么当前的绘制中,纹理采样获取的纹素就是旧数据。