背景主题文章:【Metal引擎剖析(二):传统延迟渲染和TBDR】
1. Raster Order Groups的作用
ROG是干什么的呢?官方解释:准确的控制并行的fragment shader线程访问同一个像素的顺序。
通俗点说,就是我们在渲染场景物体的时候,有些前后重叠遮挡的物体身上的fragment shader可能会同时访问同一个坐标的那个像素数据,造成竞争,导致结果错误。而ROG就是用来同步这个像素的访问次序,防止竞争的发生。
这样解释可能还是不够直观,这里来看官方给出的一个例子。
假设有下面这种情况,镜头场景中有两个重叠的三角形,开发者代码中绘制的时候对于这种透明物体会按照从后往前的顺序绘制,也就是先调用后面蓝色三角形的draw call,然后再调用前面绿色三角形的draw call,Metal也会按照我们代码的顺序去执行draw call指令,这样看似乎这两次draw call是依次串行执行,但实际上并不是这样,GPU上的运算过程是高度并行的,虽然CPU发出的指令是先绘制蓝三角形,但在GPU上Metal并不能保证蓝三角形的fragment shader会比绿三角形的先执行,Metal只能保证在blend混合的时候是按照draw call的顺序执行的,如下图所示:
Metal2的Raster Order Groups(ROG)解决了在并行渲染中因前后遮挡物体fragment shader同时访问同一像素导致的竞争问题。通过线程同步,ROG确保了同一像素数据的读写顺序,避免数据冲突。在Metal2 A11中,支持Multiple Raster Order Groups,允许更细粒度的线程控制,优化渲染效率,如在单Pass延迟渲染中的应用。
订阅专栏 解锁全文
1534

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



