对于所有极端情况,实际上并没有有效分析的有效方法。尝试进行分析覆盖率计算的大多数或所有商业2D渲染器都会产生可预测的错误,而多重采样方法则不会。
一个典型的问题是共享相同边缘的两个重叠形状。常见的情况是Alpha通道的总和是太厚的Alpha边缘,导致其略为混叠。或者,如果形状的颜色不同,则系统会混淆背景的颜色。这非常烦人。
图片1:渲染引擎使覆盖范围混乱,并在不应有轮廓的地方绘制了一个细的白色轮廓。
第二个完美的覆盖范围相当于盒子过滤。我们当然可以做得更好。考虑到有很多特殊的拐角情况需要对形状进行布尔运算才能正确执行,因此超级采样仍然是更好的选择。实际上,覆盖率估计值可用于将采样集中在最可能需要的地方。
可以将情况简化为子像素级别的多边形,然后可以解决离散分析解决方案。但这是以牺牲灵活性为代价的。例如,将来的矢量系统可能希望允许可变宽度的模糊线,这与其他可变颜色的对象一样,对于解析解决方案来说是一个问题,这并非毫无疑问。
如何进行分析
图片2:假设您有此场景,右侧是分解图
现在,您不能只是分析性地执行此操作,而是将每个部分分开然后合并数据。因为这会导致错误的数据。如果进行了混合,请参见alpha混合将使蓝色发光穿过间隙。
您所要做的就是将场景分割开,以便每个形状都消除另一个形状:
图片3:您需要切割下面的表面。
现在,如果一切都是不透明的,那么一切就简单了。只需计算每块的面积,然后乘以颜色,然后将它们相加即可。现在您可以使用类似这样的东西。
如果您的个人形状不是不透明的,那么一切都会崩溃,但是即使在某种程度上也可以做到。
记得:
- AA计算需要在线性色彩空间中进行,然后转换回使用空间。