Что такое векторный процесс растеризации в Illustrator?

19

В настоящее время я пытаюсь понять несколько вещей о растеризации векторной графики и различных способах ее реализации в различных типах приложений.

Я протестировал и сравнил несколько программ и заметил, что есть существенное различие в поведении сглаживания в процессе растеризации. Особенно меня интересует поведение рендеринга в Illustrator . Вы поймете почему, читая дальше.

Базовое изображение

Для своего тестирования я использовал действительно простую композицию треугольников, организованных в неправильный шестиугольник с разными цветами.

Программное обеспечение для векторной графики

Вот три рендера одной и той же векторной графики в Illustrator, Affinity и Inkscape. (Изображение, созданное в Affinity и Inkscape, точно такое же.)

Изображения, отображаемые в популярных графических редакторах

Как вы видите, на каждом из краев изображения, отображаемого с помощью Affinity и Inkscape, есть нежелательная белая линия. Сглаживание не заполняет эту область сплошным цветом, что приводит к небольшому зазору между соседними фигурами.

Хотя в рендере Illustrator нет зазоров, края фигур выглядят такими же гладкими, как рендеринг Affinity.

Вот изображение, показывающее одну и ту же область каждого изображения в увеличенном масштабе.

Высококлассный рендер с сглаживанием

Между этими двумя изображениями есть очень тонкая разница. Рендеринг Affinity немного более плавный, но увидеть разницу в изображениях в их исходных размерах практически невозможно.

Браузеры

SVG рендеринг

Отображение той же графики, экспортированной в браузере как SVG, очень похоже на растровое изображение, создаваемое как Affinity, так и Inkscape.

SVG файл отображается в браузере

Существуют очень незначительные различия в сглаживании краев (которые не стоит здесь показывать), но растеризация SVG в обычных браузерах ведет себя примерно так же.

Разложенный рендер

Протестировав рендеринг Illustrator немного дальше, я попытался разделить части моей графики и экспортировать их по отдельности, а затем собрать их обратно вместе с программным обеспечением для растрового редактирования.

Схема перекомпоновки изображения

Теоретически это может привести к тому же изображению, что и к одному фрагменту, но результат немного отличается при использовании этого метода.

Результат перекомпонованного изображения

Как показано, когда две части составлены, между ними есть небольшой промежуток. Хотя он более тонкий, он очень похож на графику, отображаемую в Affinity.

Рендеринг полигонов

Blender (программное обеспечение 3D)

SVG в окне просмотра Blender

Blender позволяет вам импортировать файлы SVG и манипулировать ими как кривыми объектами. Вот импортированная графика, показанная в 3D окне. (По умолчанию на материал влияют источники света в сцене. Проверка свойства shadeless на панели свойств материала позволит отображать формы с их исходными цветами.)

Вот рендер из SVG внутри Blender.

Актуальный рендер в Blender

В нем нет разрыва между треугольниками. Другие 3D-программы, скорее всего, будут работать так же. Таким образом, Blender ведет себя так же, как Illustrator , или нет? Может, наоборот?

Реальные вопросы

  • Какую библиотеку векторных рисунков использует Illustrator за кулисами?
  • Возможно ли, что Illustrator использует своего рода движок 3D-рендеринга? Это с открытым исходным кодом? (возможно нет?)
  • Может ли какая-либо из известных библиотек векторного рисования, таких как Cairo и Skia, добиться такого же поведения рендеринга? (Нет разрыва между фигурами)
  • Есть ли какая-нибудь менее известная библиотека векторной графики, которая имеет такое же поведение?
Geeyoam
источник
4
Другие распространенные рендеры тоже имеют эту проблему слияния. См. W3.impa.br/~diego/projects/GanEtAl14/sample.html?contour .
LHF

Ответы:

12

Насколько я могу судить, в Illustrator есть 2 или 3 разных растеризатора. Экранный предварительный просмотр также подвержен тем же артефактам, что и ваше шоу, но настроен так, чтобы минимизировать эффект. Похоже, ваш пост подразумевает, что вы заинтересованы в « оптимизированном искусстве ».

Искусство оптимизировано по сравнению с предварительным просмотром экрана иллюстратора

Рисунок 1 : Различные режимы рендеринга иллюстратора. Искусство оптимизировано слева и подсказано справа. Обратите внимание, что подсказка показывает небольшой фон. У меня нет новой версии CC, поэтому я не могу показать третью.

Как тогда работает оптимизированное искусство?

Художественно оптимизированный режим рендеринга - это просто сглаженное изображение, отображаемое с более высоким разрешением, которое затем подвергается блочной фильтрации . Это называется суперсэмплингом, который стоит дорого. Фильтр блока - это просто среднее значение отсчетов в блоке (пиксель). Это действительно технология, аналогичная той, которую использует многопиксельный фильтр, используемый в вашем рендере Blender. Вы можете сделать то же самое вручную и получить те же результаты.

На самом деле, рендер, который вы получаете, не очень хорош. Он отображается в нелинейном пространстве и не корректируется, и вы можете получить лучшие результаты, переключаясь на фильтры более высокого порядка и вычисляя в линейном цветовом пространстве. Все мультисэмпловые методы демонстрируют одинаковую правильную визуализацию (с учетом достаточного количества сэмплов, даже математически правильных).

введите описание изображения здесь

Изображение 2 : мультипиксельная фильтрация, слева - родной иллюстратор 'Art Optimized'. На том же изображении справа 16x16 пикселей с многолепестковым фильтром Ланцоша в линейном пространстве . Убедитесь, что ваш масштаб 1: 1.

Проблема

Вы на самом деле пришли к соглашению с реальной проблемой текущего поколения визуализаторов на экране. Они стараются избегать множественной выборки в пользу расчета покрытия. Но это просто не может работать идеально! Просто потому, что альфа-смесь это:

c0=c1α+c2(1α)

Когда сковано, никогда не достигает 0, когда сковано над полупрозрачными поверхностями, поэтому фон показывает корыто. Также он не знает, как распределяется покрытие, поэтому он сделает это неправильно. Там просто нет способа обойти это в непересекающемся случае, как это. но если вы позволите перекрывать фигуры, тогда можно будет рассчитать покрытие (см. здесь ).

Другие вопросы Вы можете получить тот же результат в любом другом движке, просто взяв многократную выборку не сглаженного изображения. Вы не можете получить эффект от визуализации экрана без выполнения трюка с перекрытием, потому что они оптимизируют по скорости. Использует ли иллюстратор 3D? Новый CC может зависеть от вашей интерпретации того, что такое 3D. Эта проблема не имеет ничего общего с 3D, только с методами восстановления сигнала, поэтому на самом деле она не применима к вопросу.

joojaa
источник
1
Кстати, для более подробного ознакомления с тем, почему альфа-смешение не «делает правильные вещи» в подобных случаях, ознакомьтесь с этой статьей: Интерпретация альфы Эндрю Гласснера.
Натан Рид
@NathanReed будет выглядеть thnx, но здесь просто, даже если альфа работала правильно, покрытие не будет знать, какие части покрывают пиксели, а какие нет. Таким образом, два слоя с 50% альфа могут означать полностью непрозрачный или видим только один слой, потому что объекты заполняют одинаковую область, которую мы просто не знаем.
joojaa
2
@joojaa Да, в этом и заключается суть статьи: альфа может представлять либо непрозрачность, либо покрытие, либо сочетание того и другого. :)
Натан Рид
4

И просто добавлю: это называется артефакт «слияние», и для этого в AntiGrain Geometry использовался растеризатор составных фигур , см .:

flash_rasterizer.png http://agg.sourceforge.net/antigrain.com/demo/flash_rasterizer.png

Кроме того, вот что NV Path Rendering заявляет об улучшении:

Введение в NV_path_rendering (стр. 67) или NV_path_rendering FAQ (# 29).

Ecir Hana
источник