Поиск

Outliner — утилита для обводки спрайтов и PNG: история создания и возможности

Outliner — утилита для обводки спрайтов и PNG: история создания и возможности

Инди-разработчик под ником 3DPyramid, не имеющий коммерческого опыта в геймдеве, но давно занимающийся созданием игр в свободное время, столкнулся с рутинной задачей: необходимость быстро добавить обводку к PNG-спрайтам. Проблема проявилась при работе с анимацией в Spine — деформация персонажа искажала заранее нарисованную обводку, а нативного инструмента для динамической обводки в редакторе не обнаружилось.

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

Как проявилась проблема

При использовании скелетной анимации в Spine обводка, нарисованная на исходных кадрах, деформируется вместе с мешем персонажа. Это приводит к визуальным артефактам: линия меняет толщину, ломается, теряет равномерность.

Скелетная анимация деформирует обводку, появляются артефакты, спрайт выглядит обеспокоенно

Поиск встроенного решения

Поиск решения в документации и сообществе Spine выдавал лишь обходные пути — дублирование слоёв, использование мешей-контуров, пост-эффекты через шейдеры. Ни один из вариантов не давал простого, предсказуемого результата без дополнительных затрат времени.

Обзор существующих подходов и их ограничений

Костыли внутри Spine

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

Ручная правка в растровых редакторах

Экспорт кадров и обводка каждого в Photoshop или GIMP даёт контроль, но при десятках кадрах анимации превращается в часовую рутину. Для спрайтшитов с большим количеством кадров процесс становится нерациональным.

Шейдерная обводка в игровом движке

Написание outline-шейдера — базовый навык для программиста, однако значительная часть инди-разработчиков использует визуальное скриптинг или движки без доступа к шейдерам (Construct, GDevelop, ранние версии Godot без GDScript). Даже при наличии навыка шейдер не решает задачу, если нужна обводка только для части ассетов, или если требуется запечь обводку в текстуру для дальнейшего использования без рантаймовых затрат.

Принятие решения: требования к собственной утилите

Ключевые требования

Автор сформулировал минимальный набор функций, который закрывал бы потребность без излишеств:

  • Настройка цвета, толщины и мягкости (размытия) обводки.
  • Автоматическое расширение холста, если исходному изображению не хватает места для обводки.
  • Пакетная обработка: возможность подать на вход папку с кадрами или спрайтшит и получить результат за один запуск.
  • Работа с полупрозрачными пикселями — игнорирование или учёт альфа-канала при расчёте контура.
  • Кроссплатформенность и отсутствие зависимостей от тяжелых фреймворков.

Принцип минимализма

Цель — утилита, которая запускается, выполняет задачу и не требует изучения интерфейса дольше пары минут.

Функционал Outliner: от простой обводки до эффекта тени

Режимы обводки

Реализованный прототип покрывает заявленные требования и добавляет несколько полезных режимов:

Спрайт с ровной обводкой, свечением и тенью, инструмент применяет разные режимы обводки

  • Базовая обводка — равномерный контур заданного цвета и толщины вокруг непрозрачных пикселей.
  • Мягкая обводка (размытие) — имитация внешнего свечения или тени через гауссово размытие контура.
  • Режим тени — смещённый полупрозрачный контур, создающий эффект падающей тени без необходимости настраивать свет в движке.

Настройки и пакетная обработка

  • Порог прозрачности — слайдер, позволяющий исключить из расчёта контура пиксели с альфой ниже заданного значения, что устраняет шум на краях сглаженных спрайтов.
  • Авто-поля — автоматическое увеличение размера изображения на величину, достаточную для размещения обводки без обрезки.
  • Пакетный режим — обработка всей директории с сохранением структуры имён файлов.

Интерфейс сводится к окну с перетаскиванием файлов, набором слайдеров и кнопкой запуска. Результат сохраняется рядом с исходниками или в указанную папку.

Публикация и дальнейшие планы

Каналы распространения

Утилита опубликована на личном сайте разработчика (3dpyramid.ru) и на платформе itch.io. Версия распространяется бесплатно как прототип.

Направления развития

Автор открыт к обратной связи: приоритеты доработки будут определяться запросами пользователей — поддержка спрайтшитов с метаданными, интеграция в пайплайны через CLI, расширение наборов пресетов обводки.

Рефлексия: от геймдева к разработке инструментов

Сравнение опыта разработки

Работа над Outliner принесла автору не меньшее удовлетворение, чем создание игр. В отличие от игровых проектов, где результат часто невидим до релиза, утилита сразу решает чью-то конкретную задачу.

Призыв к сообществу

Это сдвинуло фокус: вместо попыток «исправить Spine» или написать очередной движок, разработчик видит перспективу в создании небольших специализированных инструментов, закрывающих узкие боли инди-команд. Призыв к сообществу — попробовать Outliner в реальных задачах и поделиться мнением о нехватающем функционале.

Читайте также на сайте

—
13:58
20
Нет комментариев. Ваш будет первым!