Illustrator的矢量栅格化过程是什么?


19

我目前正在尝试了解有关矢量图形栅格化的一些知识,以及在各种应用程序类型中实现矢量栅格化的不同方式。

我测试并比较了一些程序,并注意到在光栅化过程中抗锯齿的行为方式存在很大差异。我对Illustrator中的渲染行为特别感兴趣。通过进一步阅读,您会明白为什么。

基本图片

在我的测试中,我使用了非常简单的三角形组成,这些三角形以不规则的六边形组织,并具有不同的颜色。

矢量图形软件

这是Illustrator,Affinity和Inkscape中相同矢量图形的三个渲染。(在Affinity和Inkscape中生成的图像完全相同。)

在流行的图形编辑工具中渲染的图像

如您所见,在用Affinity和Inkscape渲染的图像的每个边缘上都有一条多余的白线。抗锯齿不会用纯色填充此区域,从而导致相邻形状之间的间隙很小。

尽管Illustrator渲染中没有间隙,但是形状的边缘看起来像“亲和力”渲染一样平滑。

这是一张图像,显示每个图像放大后的相同区域。

高档渲染显示抗锯齿

这两个图像之间有非常细微的差异。Affinity渲染稍微更平滑,但是在查看原始大小的图像时几乎看不到差异。

浏览器

SVG渲染

在浏览器中显示导出为SVG的相同图形看起来与Affinity和Inkscape生成的栅格图像非常相似。

在浏览器中呈现的SVG文件

边缘抗锯齿的差异很小(在此处不值得展示),但是常见浏览器中的SVG光栅化行为几乎相同。

分解渲染

为了进一步测试Illustrator渲染,我尝试了分割图形的各个部分并分别导出它们,然后将它们与栅格编辑软件重新组合在一起。

图像重组方案

从理论上讲,它会产生与单张图像相同的图像,但是使用此方法时,结果会略有不同。

重组图像的结果

如图所示,当两个部分组成时,它们之间有一个很小的间隙。尽管它更加微妙,但它与Affinity中呈现的图形非常相似。

多边形渲染

搅拌器(3D软件)

Blender视口中的SVG

Blender允许您导入SVG文件并将其作为曲线对象进行操作。这是3D视口中显示的导入图形。(默认情况下,材质将受到场景中灯光的影响。在材质属性面板中选中无阴影属性将允许使用原始颜色渲染形状。)

这是Blender内部的SVG制成的渲染。

Blender中的实际渲染

三角形之间没有任何间隙。其他3D软件很有可能以相同的方式工作。那么Blender的行为就像Illustrator一样吗?也许是相反的方式?

真正的问题

  • Illustrator在幕后使用哪个矢量绘图库?
  • Illustrator是否有可能使用某种3D渲染引擎?它是开源的吗?(可能不会?)
  • 开罗和斯基亚(Skia)等任何知名的矢量绘图库都能实现相同的渲染行为吗?(形状之间无间隙)
  • 有没有鲜为人知的矢量绘图库,具有相同的行为?

4
其他常见的渲染器也存在此合并问题。请参阅w3.impa.br/~diego/projects/GanEtAl14/sample.html?contour
lhf 2015年

Answers:


12

据我所知,Illustrator有2或3种不同的光栅化器。屏幕预览还经过调整以最大程度地减少效果,因此也容易产生与显示相同的间隙假象。您的帖子似乎暗示您对“ 艺术优化 ”的输出。

艺术优化与插图画家的屏幕预览

图片1:插画家的不同渲染模式。优化的艺术在左边,暗示在右边。请注意,提示显示略有背景。我没有新的CC版本,所以我不能显示第三个。

美术优化如何工作

艺术优化的渲染模式只是简单地以高分辨率渲染的非抗锯齿图像,然后对其进行 框滤波。这称为昂贵的超级采样。盒子过滤器只是盒子中样本的平均值(像素)。实际上,这与搅拌器渲染中使用的多像素滤镜使用的技术类似。您可以手动执行相同的操作并获得相同的结果。

实际上,您从表单插图画家获得的渲染效果不是很好。它在非线性空间中渲染并且未经校正,可以通过交换到更高阶的滤镜并在线性颜色空间中进行计算来获得更好的结果。所有的多样本方法都具有相同的正确渲染效果(给定足够的样本甚至在数学上都是正确的)。

在此处输入图片说明

图片2:多像素过滤,位于左插图画家的本机“艺术优化”上。在右图的16x16像素的多瓣右图上性空间中 Lanczos滤波器在。确保缩放比例为1:1。

问题

实际上,您已经接受了当前一代屏幕渲染器的实际问题。他们试图避免多次抽样,以求覆盖率计算。但这根本不能完美地工作!仅仅因为alpha混合是:

C0=C1个α+C21个-α

当链接在半透明表面上时,永远不会达到0,因此背景显示为低谷。而且它不知道覆盖范围是如何分布的,因此会做错。在这种不重叠的情况下,根本无法解决此问题。但是,如果允许形状重叠,则可以解决覆盖率计算(请参见此处)。

其他问题您只需对非抗锯齿图像进行多重采样,即可在任何其他引擎中获得相同的结果。如果不做重叠技巧,就无法在屏幕渲染中获得效果,因为它们会优化速度。插画家使用3D吗?新CC可能取决于您对3D是什么的解释。这个问题与3D信号重构方法无关,因此它实际上不适用于该问题。


1
顺便说一句,要更详细地了解为什么在这种情况下alpha混合不能“做正确的事”,请查看本文:Andrew Glassner的Interpreting Alpha
内森·里德

@NathanReed看起来很不错,但是这里即使Alpha正常工作,覆盖率也不会知道哪些部分覆盖了像素,哪些没有覆盖。因此,具有50%Alpha的两层可能意味着完全不透明或只有一层可见,因为对象填充了我们所不知道的相同区域。
joojaa

2
@joojaa是的,这基本上就是本文要指出的重点:alpha可以表示不透明度,覆盖率或两者的组合。:)
内森·里德

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.