В настоящее время я пытаюсь понять несколько вещей о растеризации векторной графики и различных способах ее реализации в различных типах приложений.
Я протестировал и сравнил несколько программ и заметил, что есть существенное различие в поведении сглаживания в процессе растеризации. Особенно меня интересует поведение рендеринга в Illustrator . Вы поймете почему, читая дальше.
Для своего тестирования я использовал действительно простую композицию треугольников, организованных в неправильный шестиугольник с разными цветами.
Программное обеспечение для векторной графики
Вот три рендера одной и той же векторной графики в Illustrator, Affinity и Inkscape. (Изображение, созданное в Affinity и Inkscape, точно такое же.)
Как вы видите, на каждом из краев изображения, отображаемого с помощью Affinity и Inkscape, есть нежелательная белая линия. Сглаживание не заполняет эту область сплошным цветом, что приводит к небольшому зазору между соседними фигурами.
Хотя в рендере Illustrator нет зазоров, края фигур выглядят такими же гладкими, как рендеринг Affinity.
Вот изображение, показывающее одну и ту же область каждого изображения в увеличенном масштабе.
Между этими двумя изображениями есть очень тонкая разница. Рендеринг Affinity немного более плавный, но увидеть разницу в изображениях в их исходных размерах практически невозможно.
Браузеры
SVG рендеринг
Отображение той же графики, экспортированной в браузере как SVG, очень похоже на растровое изображение, создаваемое как Affinity, так и Inkscape.
Существуют очень незначительные различия в сглаживании краев (которые не стоит здесь показывать), но растеризация SVG в обычных браузерах ведет себя примерно так же.
Разложенный рендер
Протестировав рендеринг Illustrator немного дальше, я попытался разделить части моей графики и экспортировать их по отдельности, а затем собрать их обратно вместе с программным обеспечением для растрового редактирования.
Теоретически это может привести к тому же изображению, что и к одному фрагменту, но результат немного отличается при использовании этого метода.
Как показано, когда две части составлены, между ними есть небольшой промежуток. Хотя он более тонкий, он очень похож на графику, отображаемую в Affinity.
Рендеринг полигонов
Blender (программное обеспечение 3D)
Blender позволяет вам импортировать файлы SVG и манипулировать ими как кривыми объектами. Вот импортированная графика, показанная в 3D окне. (По умолчанию на материал влияют источники света в сцене. Проверка свойства shadeless на панели свойств материала позволит отображать формы с их исходными цветами.)
Вот рендер из SVG внутри Blender.
В нем нет разрыва между треугольниками. Другие 3D-программы, скорее всего, будут работать так же. Таким образом, Blender ведет себя так же, как Illustrator , или нет? Может, наоборот?
Реальные вопросы
- Какую библиотеку векторных рисунков использует Illustrator за кулисами?
- Возможно ли, что Illustrator использует своего рода движок 3D-рендеринга? Это с открытым исходным кодом? (возможно нет?)
- Может ли какая-либо из известных библиотек векторного рисования, таких как Cairo и Skia, добиться такого же поведения рендеринга? (Нет разрыва между фигурами)
- Есть ли какая-нибудь менее известная библиотека векторной графики, которая имеет такое же поведение?