渲染管线输出合并顺序
Render pipeline output merge order
我想在一次绘制调用中绘制两个三角形。两个三角形平行。并且相机的向前方向是沿着垂直于两个三角形的那些三角形的法线。从相机角度看,两个三角形完美重叠。
Alpha 混合已启用,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".
部分
我想在一次绘制调用中绘制两个三角形。两个三角形平行。并且相机的向前方向是沿着垂直于两个三角形的那些三角形的法线。从相机角度看,两个三角形完美重叠。
Alpha 混合已启用,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".
部分