参考一 省带宽、耗电小,腾讯游戏学院专家解析手游渲染架构 - GameRes游资网 后处理效率问题和Tile-Based GPU - 知乎 (zhihu.com) (16条消息) [引擎开发] 深入GPU和渲染优化(基础篇)(ง •̀•́)ง-CSDN博客
IMR(Immediate Mode Rendering) 立即渲染
- 控制模块PD过程
- IMR模式的第一个阶段是Vertex Processing,这个环节包括从DRAM/System Memory取Vertex Indices
- 计算模块PE过程
- 然后根据Vertex Indices去Vertex Buffer取相应的属性
- 取Indices/Vertex Attributes的阶段都会有L2 Cache在工作,表示如果顶点短时间内被share多次,则可以通过cache命中减少加载时间。
- 计算模块SM
- 加载完顶点数据后,Vertex Shader将会被加载到SM的Instruction Cache,紧接着就是VS在SM的执行。
- 计算模块PE过程
- VS执行完毕后,PE内的固定单元会执行顶点剔除来剔除一些视口外的三角形,背面剔除也在这个阶段发生。
- 计算模块Raster过程
- 接下来,由Raster对三角形进行光栅化,光栅化完毕的像素将会被打包成warp,经过XBAR重新流入SM(可能是同一个SM,也可能是不同的SM)。
- 计算模块PE过程
- 重新进入SM的每个pixel会根据其重心坐标,使用PE内的固定单元进行属性插值,从而得到depth,varying attributes等信息。
- 输出模块CROP ZROP
- early-Z
- 对于通过early-Z test的像素,在SM内执行pixel shader。
- Alpha Test
- 对于没有Alpha Test的pixel quad,由ZROP对其执行early-Z test。
- 对于开启Alpha Test的像素,由ZROP对其进行late-Z test,并根据结果决定是否更新FrameBuffer相应位置的颜色和深度值。
- 若需要更新,则ZROP根据depth test的设置更新z buffer,CROP根据blend的设置去更新color buffer。
- 注意,IMR的整个流程中,三角形是可以以Stream的形式逐步提交给管线的,先提交的三角形也不需要去等待同一个Render Target上的其他三角形。
- early-Z
- IMR是所有Desktop GPU的标配,因为Desktop GPU相较于Mobile GPU,有更多的带宽用于读写,有专用供电接口,也不受限于芯片发热的问题。IMR架构的好处是设计上会相对来说比较清晰简明,并且整个管线是连续的,draw call之间不需要互相等待,有利于最大化吞吐量。对于Mobile GPU来说,只有NV的Tegra系列是基于IMR的。
TBR(Tile Based Rendering)
- TBR架构的GPU会把整个逻辑渲染管线打断成两个阶段:
- 第一阶段和IMR类似,它负责顶点处理的工作,不同的是在每个三角形执行完他们的VS之后,还会执行一个称之为Binning Pass[18]的阶段,这个阶段把framebuffer切分成若干个小块(Tiles/Bins),根据每个三角形在framebuffer上的空间位置,把它的引用写到受它影响的那些Tiles里面,同时由VS计算出来的用于光栅化和属性插值的数据,则写入另一个数组(我们可以认为图中Primitive List就是我们说的一个固定长度数组,其长度依赖于framebuffer划分出的tile的数量,数组的每个元素可以认为是一个linked list,存的是和当前tile相交的所有三角形的指针,而这个指针指向的数据,就是图中的Vertex Data,里面有VS算出的pos和varying变量等数据)。在Bining Pass阶段,Primitive List和Vertex Data的数据会被写回到System Memory里。
Tips:TBR的管线会等待同一个framebuffer上所有的三角形的第一阶段都完成后,才会进入到第二阶段,这就表示,你应该尽可能的少切换framebuffer,让同一个framebuffer的所有三角形全部绘制完毕再去切换
第二阶段负责像素着色,这一阶段将会以Tile为单位去执行(而非整个framebuffer) ,每次Raster会从Primitive List里面取出一个tile的三角形列表,然后根据列表对当前tile的所有三角形进行光栅化以及顶点属性的插值。后面的阶段TBR和IMR基本是一致的,唯一区别在于,由于Tile是比较小的,因此每个Tile的color buffer/depth buffer是存储在一个on chip memory上,所以整个着色包括z test的过程,都是发生在on chip memory上,直到整个tile都处理完毕后,最终结果才会被写回System Memory。
Tips:TBR的优化实际上是利用缓存的局部性原理。
TBDR(Tile Based Deferred Rendering)延迟渲染
- 使用的是延迟渲染(Deferred Rendering)
- HSR(Hidden Surface Removal,隐藏面消除)等进一步减少了不需要渲染的过程