非有序三角形光栅化
Non ordered triangle rasterisation
我正在做一个三角形光栅器并且一切正常,但现在我想使用并行计算来绘制一堆三角形。
这意味着可以在每一帧中以任意随机顺序绘制三角形,问题是这种无序绘制会导致伪影。
作为测试用例,让我们考虑共享两个顶点的两个三角形,如下所示:
如果我们查看像素网格,顶点将如下所示:
我使用的填充约定就是 ceil()
所以如果我们画蓝色三角形,它看起来像这样
现在变得明显的问题是,如果我们现在绘制黄色三角形,因为它们共享两个顶点,所以黄色三角形将绘制在蓝色三角形之上:
这本身不是问题,问题是如果我们以相反的顺序绘制它们(先是黄色,然后是蓝色),那么蓝色的将被绘制过来:
这会导致明显的伪影,因为在任何帧中顺序都可能是随机的,因此您会看到闪烁的线条,因为一个三角形被绘制在另一个三角形上,反之亦然。
有什么办法可以确保无论三角形的绘制顺序如何,最终图像看起来都一样吗?
始终截断为整数设备像素,并且始终以相同的方式进行。这可能是下限或上限,甚至是四舍五入(如果您确定两个三角形的输入数值相同,那么它们应该四舍五入)。
并定义三角形的边界以包括最低端点但排除最高端点,即 min(x0,x1) <= x < max(x0,x1) 并且类似地用于 y 范围。
我正在做一个三角形光栅器并且一切正常,但现在我想使用并行计算来绘制一堆三角形。
这意味着可以在每一帧中以任意随机顺序绘制三角形,问题是这种无序绘制会导致伪影。
作为测试用例,让我们考虑共享两个顶点的两个三角形,如下所示:
如果我们查看像素网格,顶点将如下所示:
我使用的填充约定就是 ceil()
所以如果我们画蓝色三角形,它看起来像这样
现在变得明显的问题是,如果我们现在绘制黄色三角形,因为它们共享两个顶点,所以黄色三角形将绘制在蓝色三角形之上:
这本身不是问题,问题是如果我们以相反的顺序绘制它们(先是黄色,然后是蓝色),那么蓝色的将被绘制过来:
这会导致明显的伪影,因为在任何帧中顺序都可能是随机的,因此您会看到闪烁的线条,因为一个三角形被绘制在另一个三角形上,反之亦然。
有什么办法可以确保无论三角形的绘制顺序如何,最终图像看起来都一样吗?
始终截断为整数设备像素,并且始终以相同的方式进行。这可能是下限或上限,甚至是四舍五入(如果您确定两个三角形的输入数值相同,那么它们应该四舍五入)。
并定义三角形的边界以包括最低端点但排除最高端点,即 min(x0,x1) <= x < max(x0,x1) 并且类似地用于 y 范围。