● 鱼香肉丝的烹调流程
明白了ROP能干什么以及需要些什么,接下来我们就该看看ROP到底干了些什么,又是怎么干的了。只要你能明白鱼香肉丝是怎么从案板走向餐桌的,你就一定可以明白ROP单元是怎么把图像元素变成图像的。
构成图像的图元
首先,由TMU拾取的纹理以及由shader处理完成的像素会被传送到对应的z/stencil buffer,接下来ROP单元会首先对这些纹理和像素进行z/stencil检查,尽管经由光栅化处理之后的模型已经不具备实际存在的Z轴了,但其深度信息依旧会被保存下来,对于深度和模板信息的判断能够让ROP做出让那些像素被显示出来的决定,这不仅能够避免完全遮挡的像素被错误的显示在前面,同时也能够减少后续的color output部分的压力。由于存在对深度的判断和剔除操作,再加上Raster Operations Units这一特殊名称的误导,很多人都以为光栅化过程是在ROP单元才完成的,实际上Rasterization和ROP单元本身并没有什么直接联系的。Rasterization所进行的是对模型的3D-2D坐标投影变换,而ROP则是对像素的混合和输出。
当所有像素都完成了深度检查等操作之后,特定范围深度值的像素将被输送到alpha单元进行透明度检查,由透明度及透明混合所导致的效果对于雾化以及体积光等效果有至关重要的意义,因此alpha单元的检查与深度检查几乎可以说同等重要。根据程序的需要,ROP会以Blend单元对特定的像素进行alpha Blending操作。
经过上述步骤之后,剩下的像素将会被填充进2D化模型需要的范围内,也就是我们常见的Pixel Fillrate过程。Pixel Fillrate就好像一口大锅,作为肉丝、青椒、冬笋还有葱姜盐糖豆瓣酱之类原料出现的像素会在这里被正确的混在一起。经过混合,图形元素所包含的原本孤立的信息会像食材之间交互作用产生的香气一样被释放出来,最终形成我们能够接受的图像。
由于像素上的效果已经被shader以数学的形式处理完毕了,因此如果没有AA操作,那么到这里为止图形渲染工作就算彻底完成了,所有效果的混合及填充将会让正确的画面最终得以呈现,这幅完成处理的画面会被送入output buffer等待输出。而如果程序要求进行AA操作,比如MSAA,那么ROP中的AA单元还需要对填充完毕的画面进行若干次多重采样,然后再对采样出来的像素点进行color Blending操作,完成之后的画面才会被送入帧缓存等待输出到屏幕上。
装盘,上桌。混合,输出。