Tutorial | Трассировка пиксель-артаДо того как появились прекрасные редакторы векторной графики…Даже до дисплеев с разрешением 640x480…Совершенно привычным делом было играть в видеоигры с тщательно прорисованными пикселями на дисплеях с низким разрешением.Этот вид искусста мы называем "Pixel Art".Inkscape использует libdepixelize — библиотеку автоматической векторизации изображений в стиле пиксель-арт. Вы можете использовать этот инструмент и для обычной растровой графики, но результат не будет так же хорош. Для прочих изображений мы рекомендуем обычный векторизатор в Inkscape на основе Potrace.Давайте начнём с образца изображения, чтобы показать вам возможности этого движка векторизации. Ниже приводится пример растрового изображения (взято из Liberated Pixel Cup) слева и его векторизованного вывода справа.libdepixelize использует алгоритм Kopf-Lischinski для векторизации изображений. Этот алгоритм использует идеи из нескольких методов компьютерной науки и математических понятий для получения хорошего результата из пиксель-арта. Заметьте, что алгоритм полностью игнорирует альфа-канал. libdepixelize не имеет в настоящее время расширения, для восстановления данного класса изображений, но все изображения в стиле пиксель-арт с поддержкой альфа-канала дают результаты, аналогичные основному классу образов, распознаваемых алгоритмом Kopf-Lischinski.Изображение выше имеет альфа-канал, и получившийся результат просто отличный. Тем не менее, если вы найдете изображение в стиле пиксель-арт с плохим результатом, и вы уверены, что причина в альфа-канале, напишите об этом создателю libdepixelize (например, чтобы заполнить ошибку на странице проекта), и он будет рад улучшить алгоритм. Если автор проекта не будет знать об ошибках, улучшить алгоритм он не сможет.The image below is a screenshot of Pixel art dialog in the English localisation. You can open this dialog using the PathTrace BitmapPixel art menu or right-clicking on an image object and then Trace Bitmap.Это диалоговое окно состоит из двух разделов: эвристика и вывод. Эвристика ориентирована на продвинутых пользователей, но настройки по умолчанию уже хороши, и вам не нужно об этом беспокоиться, так что давайте оставим это на потом и начнём с объяснения вывода.Алгоритм Kopf-Lischinski работает (с точки зрения высокого уровня) как компилятор, конвертируя данные из нескольких типов представления. На каждом шаге алгоритм имеет возможность изучить операции, которые это представление предлагает. Некоторые из этих промежуточных представлений имеют правильное визуальное представление (как реконструированный клеточный граф вывода алгоритма Вороного), а некоторые — нет (как графы подобия). Во время разработки libdepixelize пользователи просили добавить возможность экспорта промежуточных этапов, и разработчик согласился внести предложенное новшество.The default output should give the smoothest result and is probably what you want. You saw already the default output on the first samples of this tutorial. If you want to try it yourself, just open the Trace Bitmap dialog, select Pixel art tab and click in OK after choosing some image on Inkscape.Вы можете увидеть вывод алгоритма Вороного ниже — это «реформированное пиксельное изображение», где клетки (ранее пиксели) были изменены, чтобы содеинить части одного объекта. Кривые при этом не создаются, и изображение по-прежнему состоит из прямых линий. Разница будет видна при увеличении изображения. Ранее пиксели не могли разделять край с соседом по диагонали. Но теперь (благодаря графу цветового подобия и настраиваемой эвристике, которые дают лучший результат) возможно заставить две диагональных клетки разделить край (ранее разделялись лишь единичные вершины).Стандартный B-Spline вывод даст вам гладкие результаты, потому что предыдущий вывод Вороного будет преобразован в квадратичные кривые Безье. Тем не менее, преобразование не будет один к одному, потому что там больше эвристик, решающих когда кривые будут объединены в одну при достижении алгоритмом Т-образного перекрёстка среди видимых цветов. Подсказываем про эвристики этого этапа: их пока нельзя настроить.Заключительный этап libdepixelize (в настоящее время не экспортируется в интерфейсе Inkscape из-за своей недоработанности) — это оптимизация кривых для удаления ступенчатого эффекта кривых B-Spline. На этом этапе также выполняется обнаружение границ, чтобы предотвратить некоторые особенности сглаживания, и применяется триангуляция, чтобы исправить положение узлов после оптимизации. Вы сможете индивидуально отключать каждую из этих функций, когда этот вывод перестанет считаться экспериментальным в libdepixelize (надеемся, скоро).Раздел эвристики в интерфейсе позволяет настраивать эвристики, используемые libdepixelize для решения, что делать, когда он сталкивается с пиксельным блоком размером 2x2, где две диагонали имеют схожие цвета. «Какое соединение я должен сохранить?» — вот что решает libdepixelize. Он пытается применить все эвристики для конфликтующих диагоналей и сохраняет соединение «победителя». Если происходит связывание, оба соединения удаляются.Если вы хотите проанализировать влияние каждого правила и поиграть с числами, лучший вывод — вам лучше выбрать вывод Вороного. Вы можете легче увидеть эффекты эвристики на выводе Вороного и когда вы будете удовлетворены полученными настройками, можете просто изменить тип вывода на нужный вам.Изображения ниже построчно состоят из оригинального изображения и B-Splines вывода с единственной включенной эвристикой. Обратите внимание на фиолетовые круги, которые указывают на различия в выполнении эвристик.Для первой попытки (верхнее изображение) включена только эвристика кривых. Эта эвристика пытается сохранить длинные кривые, связанные вместе. Можно заметить, что её результат аналогичен последнему изображению, в котором применена эвристика разрежённых пикселей. Одно из отличий состоит в том, что «сила» этой эвристики более справедлива и применима, когда действительно важно сохранить связи. Определение «справедливости» основано на «человеческой интуиции», применяемой к пикселю из базы проанализированных данных. Ещё одно отличие в том, что эта эвристика не может решить, что делать, когда группа соединений состоит из больших блоков, а не длинных кривых (представьте себе шахматную доску).Для второй попытки (среднее изображение) включена только островная эвристика. Единственное, что делает эта эвристика — пытается удержать связь, которая в противном случае приводит к нескольким изолированным пикселям (островам) с постоянным «весом голосования». Подобная ситуация встречается не так часто, поскольку такие ситуации обрабатываются другими эвристиками. Но этот эвристический подход в таких случаях даёт ещё лучшие результаты.Для третьей попытки (нижнее изображение) включена только эвристика разрежённых пикселей. Эта эвристика пытается сохранить кривые, связанные с основным цветом. Для определения, что это цвет переднего плана, эвристика анализирует окно с пикселами вокруг конфликтующих кривых. Для этой эвристики вы настраиваете не только её «силу», но также и размер окна анализируемых ею пикселей. Но имейте в виду, что при увеличении окна анализируемых пикселей максимальная «сила» для «голоса» этого окна также будет увеличиваться, и, возможно, вам придётся настроить множитель для голосования. Автор оригинальной версии libdepixelize думает, что эта эвристика слишком жадная и предпочитает использовать значение "0,25" для её множителя.Даже если эвристика кривых и эвристика разрежённых пикселей дают сходные результаты, вы можете оставить их обе включенными, эвристика кривых может дать дополнительную безопасность, чтобы важные кривые контуров пикселей не мешали в тех случаях, которые могут быть разрешены только эвристикой разрежённых пикселей.Подсказка: вы можете отключить все эвристики, установив значения множителя/веса равным нулю. Вы можете испортить любую эвристику с помощью отрицательных значений для множителя/веса. Почему бы вам, при желании, не заменить настроенное поведение эвристики противоположным поведением? Потому что вы можете… Потому что вы хотите «художественный» результат… Да и неважно… Просто вам так захотелось.Вот и всё! В первом выпуске libdepixelize есть пока вот эти возможности. А если исследование автора оригинальной версии libdepixelize и его творческого наставника окажется успешным, вы сможете получить дополнительные функции, которые расширят диапазон изображений, для которых libdepixelize даёт хороший результат. Пожелаем им удачи.Все изображения, используемые здесь, были взяты из Liberated Pixel Cup, чтобы избежать проблем с авторскими правами. Ссылки ниже:http://opengameart.org/content/mementohttp://opengameart.org/content/rpg-enemies-bathroom-tilesVinícius dos Santos Oliveira; Nicolas Dufour; Kris De Gussem; Gellért GyurisИгорь Жигунов — 2016; Александр Прокудин — 2017Esteban Capella — 2019