Tutorial | Векторизація піксельної графікиВ часи, коли чудове програмне забезпечення з редагування векторної графіки було ще недоступним…Навіть, ще до появи комп'ютерних моніторів з роздільною здатністю 640×480…Було нормою грати у відеоігри з ретельно обробленими пікселями на моніторах з низькою роздільною здатністю.«Піксельною графікою» ми називаємо вид графіки, що з'явився в цей період.«Inkscape» оснащено «libdepixelize» зі здатністю автоматичної векторизації цих «спеціальних» картинок векторної графіки. Можна також спробувати інші типи вхідних зображень, але будьте обачні: результат не буде таким же вдалим і тому краще використовувати інший трасувальник «Inkscape» – «Potrace».Давайте розпочнемо зі зразка зображення, щоб показати можливості цього рушія векторизації. Внизу – приклад растрового зображення (взято з «Liberated Pixel Cup») зліва та векторизований результат – справа.Для векторизації зображень, «libdepixelize» використовує алгоритм Кофа-Ліщинського (Kopf-Lischinski). Цей алгоритм використовує ідеї декількох технік інформатики і математичних принципів для отримання задовільного результату для зображень піксельної графіки. Єдине зауваження: канал прозорості повністю ігнорується алгоритмом. Наразі, «libdepixelize» не має додатків для отримання першокласної обробки для такого класу зображень, але всі зображення піксельної графіки з підтримкою каналу прозорості дають результати подібні до основного класу зображень, що розпізнаються алгоритмом Кофа-Ліщинського.Зображення вгорі містить канал прозорості і результат якраз чудовий. Однак, якщо Ви знайдете зображення піксельної графіки з незадовільним результатом і якщо Ви вважаєте, що причиною цього є канал прозорості, то зв'яжіться з тим, хто підтримує «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.Це діалогове вікно має два розділи: «Евристика» та «Вивід». «Евристика» націлена на досвідчене використання, втім там вже задовільні значення за замовчуванням і можна не турбуватися за них, тому, давайте залишимо їх на потім і почнемо з пояснення результату.Алгоритм Кофа-Ліщинського працює (з високорівневого погляду) як компілятор, конвертуючи дані між декількома типами представлення. На кожному етапі, алгоритм має змогу дослідити операції, які пропонуються цим представленням. Деякі з цих проміжних представлень мають коректне візуальне представлення (як результати видозміненого результату клітинного графу Вороного (Voronoi)), а деякі – ні (як граф подібності). Під час розробки «libdepixelize», користувачі прохали додати можливість експорту цих проміжних рівнів до «libdepixelize» і автор першої версії «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-сплайнів буде плавним, тому що попередній результат Вороного буде конвертовано в квадратичні криві Безьє (Bézier). Однак, конвертація не буде 1:1, тому що там буде більше евристики при виборі кривих, які будуть об'єднані в одну, коли алгоритм доходить до Т-подібного з'єднання між видимими кольорами. Підказка стосовно евристики на цьому етапі: її неможливо налаштувати.Фінальна стадія «libdepixelize» (наразі, неекспортовувана через графічний інтерфейс «Inkscape» через її експериментальний і незавершений етап) – «оптимізація кривих» для усунення ефекту сходинок на кривих B-сплайнів. Ця стадія також застосовує метод визначення границь для запобігання згладжування деяких елементів і метод тріангуляції для виправлення положення вузлів після оптимізації. Кожну з цих опцій можна відключити окремо, коли цей результат вийде з «експериментальної стадії» в «libdepixelize» (сподіваємось, що незабаром).Евристичний розділ в графічному інтерфейсі дозволяє підлаштовувати евристику, що використовується «libdepixelize» для вирішення, що робити, коли вона зіштовхується з блоком пікселів 2×2, де дві діагоналі мають подібні кольори. «Яке з'єднання слід зберегти?» – ось, що запитує «libdepixelize». Вона намагається застосувати всю евристику до конфілктуючих діагоналей і залишити з'єднання-переможець. Якщо трапляється вузол, то обидва з'єднання видаляються.Якщо хочете проаналізувати вплив кожної з евристик і погратися з числами, то кращим результатом є результат Вороного. Простіше побачити вплив на евристику в результаті Вороного і, коли налаштування задовольняють, можна просто змінити тип результату на потрібний.Зображення нижче містить зображення і результат B-сплайнів з лише однією увімкненою евристикою для кожної спроби. Зверніть увагу на рожеві кола, які виділяють різницю, що дає кожна з евристик.Для першої спроби (верхнє зображення), увімкнена лише евристика кривих. Вона намагається зберегти довгі криві з'єднаними між собою. Можна помітити, що її результат подібний до останнього зображення, де застосовувалась евристика розкиданих пікселів. Різниця лише в тому, що її «сила» більш правдоподібна і вона дає лише великі значення, коли дійсно важливо зберегти ці з'єднання. Визначення/концепція «правдоподібна» базується на «людській інтуїції», даній базі даних пікселів, що аналізуються. Інша відмінність – евристика не може вирішити, що робити, коли з'єднання групують великі блоки замість довгих кривих (уявіть шахову дошку).Для другої спроби (середнє зображення), активізуємо лише острівцеву евристику. Єдине, що робить дана евристика – намагається зберегти з'єднання, яке інакше видасть декілька ізольованих пікселів (острівців) зі сталою вагою. Цей вид ситуації не є таким звичайним, як вид ситуації, що оброблюється іншою евристикою, але ця евристика – чудова і все ще допомагає отримати кращі результати.Для третьої спроби (нижнє зображення), активуємо лише евристику розкиданих пікселів. Ця евристика намагається зберегти криві, об'єднаних основним кольором. Щоб знайти основний колір, евристика аналізує вікно з пікселями навколо конфліктних кривих. Для цієї евристики, підлаштовується не лише її «сила», але й вікно з пікселями, що аналізуються. Але пам'ятайте, що збільшуючи вікно з пікселями, що аналізуються, максимальна «сила» по її рішенні також зросте і, можливо, потрібно буде налаштовувати множник її рішення. Автор першої версії «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 GyurisNazarii Ritter — 2018Esteban Capella — 2019