渲染管线输出合并顺序

Render pipeline output merge order

我想在一次绘制调用中绘制两个三角形。两个三角形平行。并且相机的向前方向是沿着垂直于两个三角形的那些三角形的法线。从相机角度看,两个三角形完美重叠。

A​​lpha 混合已启用,blendop 为 srcAlpha 和 invSrcAlpha。后面的三角形颜色是(0, 1, 0, 0.5),前面的三角形颜色是(1, 0, 0, 0.5)。并且 RT 被清除为黑色。像素着色器简单地输出三角形颜色。

这是一张展示场景的图片,三角形的顶点与图片中的索引相同。

RT 中的最终颜色可能是所有 (0.5, 0.25, 0)。在图形管线中,是否保证绿色三角形的像素先于红色三角形输出?

您对像素评估顺序没有任何保证,这里红色和绿色像素可以按任何顺序评估。准确地按照三角形在 vertex/index 缓冲区中的顺序执行。

它存在一个名为 Rasterizer Order Views 的功能,文档 here。但是,首先,它依赖于一个可选特性,其次,它只能在你使用无序访问视图时打开,当你简单地使用输出合并来编写示例时,情况并非如此。

看起来 DirectX 管道可以保证顺序。

"DirectX rendering follows a strict set of rule that ensure triangles are always rendered in the order they are submitted: if two triangles are overlapping on the screen, the hardware guarantees that Triangle 1 will have its color result blended to the screen before Triangle 2 is processed and blended."

这里是 link https://software.intel.com/en-us/gamedev/articles/rasterizer-order-views-101-a-primer,在 "DirectX Pipeline and the limitations of UAVs".

部分