【IMR、TBR、TBDR】【RenderTexture、Cbuffer】学习
1. 渲染架构比较
1.1 IMR (Immediate Mode Rendering)
IMR是PC和主机GPU使用的渲染方式,指每一次渲染API的调用,都会直接绘制图形对象。所以每一次物体颜色和深度的渲染都会读写Frame Buffer和Depth Buffer。IMR架构需要大量的带宽,这点可以通过L1和L2缓存优化,但对于移动端GPU的尺寸和功耗需求,不能使用IMR。
1.2 内存带宽消耗问题
在IMR中,三角形提交的顺序决定了访问顺序,但这种访问顺序是无序的,所以可能会导致访问效率低下。也可能会遇到较高的缓存未命中率,GPU缓存中的数据经常不是渲染下一个像素所需要的数据,导致频繁的内存访问。

1.3 Tiled Memory
贴图内存是一种优化内存带宽使用的技术,它将内存划分为多个二维的矩形区域,即“贴图”或“瓦片”。
工作原理:
- 瓦片化内存:每个缓存行覆盖帧缓冲和深度缓冲中的一个瓦片区域。与传统的线性缓存相比,这种布局使得渲染操作在缓存内部执行的更多,减少了对外部内存的访问
- 缓存命中率提高:由于相邻的三角形在渲染时往往连续提交,瓦片化的缓存可以更好地利用缓存行,提高缓存的命中率
- 减少内存带宽使用:由于更多的渲染操作在缓存内完成,因此与内存的传输变得更少
1.4 Rasterizing within tiles
在现实世界中,帧缓冲区相对于缓存瓦片来说可能会大得多,如果三角形特别大,屏幕上的每一行可能覆盖的瓦片数量超过了缓存能容纳的范围。所以我们可以改变三角形内像素的光栅化顺序:可以先绘制三角形覆盖的一个瓦片内的所有像素,然后再移动到下一个瓦片。
- 减少缓存失效:通过在一个瓦片内完成所有相关像素的渲染,不需要在渲染过程中频繁地加载和卸载瓦片
- 提高缓存利用率:因为一旦瓦片被加载到缓存中,就可以处理该瓦片内所有三角形的像素,而不是仅仅处理一个三角形
1.5 分箱 Binning
我们需要确定哪些三角形会影响每个瓦片。当几何体被提交渲染时,它不是立即被光栅化,而是被“分箱”到一个内存结构中,这个结构决定了它可能影响的瓦片。注意这个过程涉及到顶点着色(确定三角形在屏幕上的位置),因为这影响着三角形的位置,但不包括片段着色。

最低0.47元/天 解锁文章
1794

被折叠的 条评论
为什么被折叠?



