June 7

Нейропиксели для небогатых

В наше время только ленивый не пишет статей про ИИ, нейросети, ChatGPT, и вот это всё. Но вот незадача, я-то пишу про мало кому интересные старые компьютеры из далёкого прошлого, где никакими нейросетями отродясь не пахло. Как же с таким багажом влиться в модно-молодёжную струю и хайпануть немножечко на горячем тренде?

Не волнуйтесь, решение есть. Сегодня речь пойдёт про следующую ядрёную смесь: пиксельная графика и нейросети применительно к разработке инди-игр. Примитивные технологии древности, новейшие достижения прогресса и бедные свободные творцы. High tech, low life — киберпанк ещё никогда не был так близок!

Сразу оговорюсь: это не практическое руководство, а скорее, наблюдения заинтересованного лица, пока ещё занимающего выжидательную позицию на заборе. Готового рецепта у меня нет — только общее направление для последующих изысканий. Поэтому не ждите высокого технического уровня материала.

▍ Киборги заполоняют

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

Галлюцинации DeepDream и типичная нейросетевая рука с пятью пальцами

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

Случайная выборка генераций из галереи на lexica.art

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

▍ Застенки геймдева

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

Инди-геймдев — это определённо не та область деятельности, где крутятся большие деньги. За редкими исключениями, это проекты, создаваемые энтузиастами-одиночками на коленке, за свой счёт, чаще всего себе же в убыток. С другой стороны, это поле для экспериментов, прибежище для идей, риски реализации которых не возьмут на себя разработчики большого геймдева.

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

Разнообразие визуальных подходов в некоторых популярных инди-играх из великого множества: Hollow Knight, Journey, Limbo, Shovel Knight

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

Конечно, иногда находятся единомышленники, готовые работать сообща за идею, и в том числе среди них встречаются художники. Но мало кому случается найти таковых, способных не только на слова, но и на дела, и пройти с ними весь путь до релиза игры, не разорвав в клочья перетягиваемое творческое одеяло в процессе. Ещё меньше одиночек-многостаночников, способных в одиночку вытащить весь проект.

Игра, задавшая в 2004 году тренд и на инди-игры, и на пиксельную графику в них — Cave Story

Вероятно, озвученные выше обстоятельства привели к широкому применению в инди-разработке игр двухмерной пиксельной графики, аналогичной играм 1980-х и начала 1990-х годов, которая с тех пор из устаревшего технического формата превратилась в особое визуальное решение в стиле «ретро».

Представитель экстремального минимализма в пиксельной графике, игра VVVVVV (2010)

Такая графика является хорошим компромиссом для малобюджетной разработки. Она не требует дорогих и сложных инструментов для создания — можно очень хорошо рисовать даже в штатном MS Paint (но есть редакторы и поудобнее), и не требует специальных технических знаний: просто бери и крась клеточки в разные цвета. Нужно только много-много времени и усидчивости, чтобы наработать мастерство — вполне рабочий рецепт для студента с горящими глазами.

Великий и ужасный изначальный Minecraft (2009-11) всегда был склонен к глубокой пикселизации

Но и пиксель-арт — это арт, и для создания действительно хорошей графики нужен талант, или, иначе, склонность именно к этому занятию. Без особых усилий можно создавать только довольно примитивные изображения. Впрочем, при креативном подходе и успешную инди-игру можно сотворить и с ними — такую, как, например, некогда нашумевшая VVVVVV, или даже всё ещё актуальный Minecraft. Но если хочется большего, особенно если это уровень качества графики лучших игр пиксельной эпохи, без пресловутого таланта никуда. А он есть не у всех. И конечно, его обладатели хотят достойной оплаты труда. Круг опять замыкается.

Разнообразные пиксельные ассеты на itch.io

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

Четыре ассета самой типовой локации: не найти двух стилистически и геометрически схожих решений

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

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

▍ Нейропиксели

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

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

Генерация пригодной к применению именно пиксельной графики, а не графики высокого разрешения, интуитивно кажется более реальной перспективой самого ближайшего времени: она хорошо формализуется, менее требовательная к тонким деталям. Отсюда следует в общем-то ничем не обоснованная надежда, что в таких рамках артефакты нейросетевой генерации будут проявляться не так сильно. К тому же такую графику проще обрабатывать — мало нарисовать элементы, для использования в игре их придётся так или иначе дорабатывать руками.

К сожалению, пиксели хотя и давно уже вошли в поп-культурный мейнстрим, и про них даже снимают голливудские блокбастеры («Пиксели» 2015 года с Адамом Сэндлером), они всё же находятся где-то на его задворках. Поэтому в области генерации именно пиксельной графики сейчас сосредоточено не так уж много усилий.

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

Свидетельство существование пиксельных ИИ-картинок

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

▍ Сети и инструменты

Прежде всего, возникает вопрос, какой нейросетью воспользоваться. На текущий момент есть три лидера — это DALL-E, Midjourney и Stable Diffusion различных версий. Есть и другие, и они даже способны рисовать неплохие одиночные картинки, но я не встречал их упоминаний при поиске материалов по целенаправленной генерации графических элементов.

Среднее качество пиксельной графики в исполнении Midjourney, генерируемой наивными запросами

Midjourney и DALL-E обеспечивают наилучшее качество генераций графики в целом и даже довольно неплохо справляются с прямыми запросами именно пиксельной графики. Однако, они работают в облачном режиме, на удалённом сервере, что закрывает возможности для кастомизации и тонкой настройки. К тому же, они платные, а оплата доступа и сам доступ к ним из наших краёв, как известно, в последнее время сильно усложнились. В свете этих обстоятельств надёжным инструментом с гарантией непревращения в тыкву назвать их нельзя.

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

Stable Diffusion творчески подходит к рисованию пиксельной собаки

Stable Diffusion несколько слабее в любых базовых запросах. Заставить её выдать качественный результат сложнее, хотя она способна и на впечатляющие генерации. К сожалению, по умолчанию эта нейросеть плохо дружит с пиксельной графикой, часто скатываясь к абстрактной плиточной мозаике. Зато она очень хорошо кастомизируется. Есть множество моделей, стилизаций, разнообразных утилит для более тонкого управления генерацией, и всё это в совокупности уже сейчас позволяет получать более приемлемый результат даже в области пиксельной графики.

Другим важным качеством Stable Diffusion является её бесплатность, открытость, а заодно и возможность локального запуска. Это увеличивает и скорость работы, и гибкость — можно использовать множество сторонних моделей и дополнений, и даже дообучать сеть на собственных наборах данных. Определённо это более перспективный выбор, и практический интерес любителей нейро-арта сейчас в основном сосредоточен именно на Stable Diffusion.

Интерфейс AUTOMATIC1111

Работают со Stable Diffusion локально и онлайн, как правило, через популярный веб-интерфейс AUTOMATIC1111, в котором доступны текстовые запросы, разнообразные настройки, а также система плагинов. Реализовано это в виде довольно олдскульного набора полей ввода, закладок и галочек, и больше напоминает какую-то самописную систему складского учёта.

Интерфейс ComfyUI

Другой интересный, но менее популярный способ взаимодействия со Stable Diffusion — ComfyUI. Это уже не браузерный интерфейс, а обычное приложение, запускаемое на локальной машине. Интерфейс построен по принципу системы нод, последовательно передающих результат обработки друг другу — нечто подобное можно повсеместно наблюдать в Blender’е или в редакторе Unreal Engine 5. Это более гибкий и продвинутый, но и более сложный для освоения инструмент.

Интерфейс Fooocus

В недавнее время были сообщения о появлении ещё одного альтернативного интерфейса, Fooocus, обладающего более простым процессом установки и настройки, а также самим интерфейсом, но я пока не заметил массового перехода на него. По крайней мере, материалы по тонкостям использования SD в основном сфокусированы (каламбур) на AUTOMATIC1111, и изредка на ComfyUI.

▍ Для небогатых

Однако, для локальной работы со Stable Diffusion нужна могучая видеокарта. И если подходящей видеокарты в хозяйстве ещё не завелось, речь идёт об весьма серьёзных вложениях, возможно, слишком больших для «просто попробовать» без каких-либо гарантий пользы.

Для какой-никакой работы можно ограничиться не самой топовой конфигурацией, но определённо, чем карта мощнее и чем больше памяти на ней, тем лучше, а для более мощных нейросетей будущего требования скорее всего только вырастут. Речь идёт как минимум о хоть какой-нибудь видеокарте линейки NVidia RTX с 6-8 гигабайтами ОЗУ, а в желательных требованиях старшие модели RTX с 12 гигабайтами и более. Особенно важна мощная карта для увеличения скорости генераций, ведь процесс крайне итеративен, надо постоянно пробовать вариант за вариантом, и чем быстрее они создаются, тем лучше.

У меня никаких подобных видеокарт в хозяйстве не водится, и на практике воспользоваться всем богатством возможностей, которые открывает локальный запуск нейросети, я не могу. Мой опыт ограничивается попытками генерации через различные онлайн-сервисы, имеющие более скромные возможности для тонкой настройки — но и их достаточно, чтобы получить некоторые результаты.

О возможностях же локального запуска я сужу по многочисленным обучающим видео в интернете, которые создаются людьми, глубоко погружёнными в тему и имеющими необходимое техническое оснащение. И как вы понимаете, если я ещё не побежал в магазин мощных видеокарт, потрясая пачкой купюр, значит, перспективы генерации пока не видятся мне достаточно радужными.

Что касается бесплатных или недорогих способов приобщиться к нейро-арту, прежде чем решать вопрос востребованности локального запуска, есть пара вариантов:

  • Собственно демонстрационный интерфейс Stable Diffusion на Hugging Face. Это то место, с которого я начинал свои изыскания. Его плюс в бесплатности, минус — в крайнем ограниченных возможностях: только позитивный и негативный текстовый запросы. Также присутствуют долгое ожидание и нестабильность сервиса.
  • Различные сервисы, предоставляющие платный онлайн-доступ. Находятся в формате разнообразных сайтов, иногда в виде Телеграм-бота. Кто-то просит довольно скромные деньги, кто-то менее. Называть никакие конкретные сервисы я не буду, так как это прямая реклама. Могу сказать, что зарубежные сервисы предлагают возможности побогаче, включая полный онлайн AUTOMATIC1111, но они дороже, и их сложно оплачивать. Среди местных я (пока) не нашёл никого, кто предлагает что-то подобное, но нашёл варианты более простых самодельных интерфейсов с текстовым и визуальными запросами и с более-менее тонкими настройками, за 50 рублей в день. Неплохой компромисс.

Ранее также был, но теперь уже недоступен, вариант запуска Stable Diffusion на Google Collab, на облачных мощностях. В какой-то период времени AUTOMATIC1111 был бесплатно доступен и на Hugging Face, но и его прикрыли. Ситуация постоянно меняется, поэтому рекомендую погуглить, возможно на момент прочтения этого материала снова появились более доступные возможности.

▍ Свободная тема

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

Наивный запрос: suburban cyberpunk town

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

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

Более хитроумный запрос: Professional photograph of a suburban cyberpunk town during midnight, 4k, cozy wallpaper, ray tracing, Unreal engine, trending on Artstation, award-winning, art by Greg Rutkowski, by Chris Moore

Чтобы получить отличный результат, нужно представлять, какие ключевые слова склонят нейросеть к тому или иному результату, и пресловутый «prompt engineering» больше похож на эксплойт системы, чем на её штатное использование. Самые же впечатляющие арты получаются не из одиночного запроса, а по небольшим частям, с помощью более тонкого управления генерацией, а порой и с ручной дорисовкой.

Иными словами, кнопки «сделать красиво» всё ещё нет, и рисование с помощью нейросетей по прежнему требует человеческого труда, хотя и иного рода. Как минимум, нужно огромное терпение, чтобы пройти к нужному результату путём многих проб и ошибок, а возможно и сила самовнушения, позволяющая убедить себя, что именно такой результат и требовался.

С другой стороны, экспериментальная сущность нейро-арта в настоящее время как раз и подходит духу независимого геймдева, также склонного к экспериментам. Как говорится, звёзды сошлись нужным образом. Осталось уговорить нейросеть нарисовать хоть что-нибудь подходящее для применения в новой смелой игровой задумке, которая (не) перевернёт мир.

▍ Контролируй это

Наибольший прогресс последнего времени в нейросетевом арте произошёл именно в области тонкой настройки генерации. Были придуманы различные техники и способы управления получаемым результатом.

То, что будет рисовать нейросеть, прежде всего зависит от модели — на чём она обучена, то и будет лучше получаться. Например, для Stable Diffusion есть разные модели, созданные на различных подборках исходного материала — например, реалистичные изображения или мультики, и для разных задач лучше подходит та или иная модель.

Одинаковый запрос «a cute anime girl smiling into the camera, pink pigtails haircut, blue eyes, white dress» в исполнении трёх разных моделей

Также есть так называемые LoRA (сокращение от Localized Representation Adjustment, если вам это что-нибудь говорит). Грубо говоря, это дополнения к модели, её дополнительное обучение на данных определённого типа. Это относительно небольшой массив данных, с помощью которого можно научить модель имитировать особые визуальные стили, или распознавать запросы для конкретных персонажей — например, использовать в генерируемых сюжетах ваши собственные фотографии.

Разница между полноценной моделью и LoRA в том, что обучение полноценной модели с нуля — очень сложная и ресурсоёмкая задача, создание же LoRA значительно проще. Но всё ещё относительно сложно, и в любом случае не решает прочих проблем настройки.

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

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

Стабильность образа объекта, в частности, персонажей. Если нужно сгенерировать несколько кадров с одним и тем же персонажем, например, для комикса или заставки, нейросеть будет постоянно менять его облик — ведь она не знает про существование соседних кадров, а текстовое описание всегда недостаточно точное и однозначное.

Управление позой. Нейросеть генерирует объекты как ей заблагорассудится, в рамках весьма вольной интерпретации исходного запроса. Персонаж может стоять так или иначе, и объяснить через текстовый запрос, какая именно поза нужна, практически невыполнимая задача. В особенности это важно для анимации персонажей.

Для решения всех этих проблем придумано дополнение ControlNet. С точки зрения пользователя это плагин для AUTOMATIC1111.

Как следует из названия, это ещё одна нейросеть-надстройка над Stable Diffusion. Она реализует несколько методов, подталкивающих дальнейшую генерацию в нужном направлении. Теперь генерация начинается не из полностью случайного шума текстового запроса, а также и из определённого шаблона-затравки, заранее ограничивающего пространство вероятностей.

Собственно ControlNet

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

Перенос сюжета из исходного изображения во вновь сгенерированное

В качестве затравки может быть использована полноценная картинка, в том числе ранее сгенерированная самой же нейросетью. Или это может быть грубый скетч, на котором разными цветами размечены области интереса. Или силуэт, возможно в формате карты глубины, поверх которого нейросеть (с переменным успехом) дорисует «остаток совы». В текущей версии Stable Diffusion результат нередко оставляет желать лучшего, но в новейших нейросетях он просто умопомрачительный, и вероятно, апгрейд качества в SD тоже не за горами

Имитация рисованной анимации, созданная с помощью видеосъёмки и нейросети

В качестве входных данных может использоваться 3D-анимация с грубыми болванками. Или же можно использовать видео с персонажами, которые будут стилизованы согласно запросам, с сохранением основных черт и деталей. Получается продвинутая автоматизация для анимации, подобной классической ротоскопии в мультфильмах Fire and Ice и Heavy Metal — визуально не совсем похоже на ручную рисовку, но тоже вполне применимый на практике стиль.

Один из многих редакторов поз, OpenPose

Вычисление позы по картинке или плагины для ручной установки позы создают проволочный каркас-скелетик: палка-палка, огуречик, а дальше нейросеть рисует человечка. Это срабатывает для достаточно тривиальных поз с видом сбоку. Если же поза не вполне обычная, или используется хитроумное положение камеры, например, сильно снизу или сверху, этого способа будет недостаточно. Тогда поможет LoRA, обученная на картинках с подобными позами.

Менее актуальная для пиксельной внутриигровой графики, но важная для прочего оформления задача — управление выражением лица и направлением взгляда. Здесь уже недостаточно способов, аналогичных управлению позой. Для этого применяются LoRA, обученные именно на выражениях лиц.

Пример применения «врисовки» для замены фона

Помимо генерации целого нового изображения по затравке, ControlNet открывает возможность «врисовки» (inpaint). Можно удалить часть сгенерированного изображения, а нейросеть нарисует в пустом месте новые элементы, согласно тому же самому запросу с чуть другим рандомом, или согласно уточнённому запросу. Таким образом можно точечно переделывать не вполне удачные места (те же лишние конечности) и устранять артефакты генерации.

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

▍ Битый пиксель

Главная проблема генерации пиксельной графики с помощью нейросетей заключается в том, что нейросети толком не знают, что это такое.

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

Даже во вполне пиксельной на первый взгляд картинке скрыты половинки и четвертинки пикселей

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

Довольно часто нейросеть не соблюдает форму пикселей и позволяет себе заметные вольности

Нейросети не имеют никакого специального понимания про пикселизацию и количество цветов. Эти признаки присутствуют в модели для ключевых слов, имеющих отношение к пиксельной графике, но лишь косвенно. Поэтому арт в Midjourney и DALL-E хотя и получается в целом пиксельный, но нет-нет, да будут вкрапления пикселей неправильного размера или формы, а количество цветов будет произвольно высоким. Указывать в запросе разрешение и глубину цвета можно, и это окажет какой-то эффект, но соблюдены эти цифры скорее всего не будут.

Наивные попытки генерации простой сетки, квадрата, круга в Stable Diffusion

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

В пиксель-арте всего пара пикселей может существенно повлиять на общую картину

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

Классический шрифт 3 на 5 пикселей с заглавными и строчными буквами. Один пиксель может изменить всё!

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

Базовые техники рисования простейших линий в пиксельной графике

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

Безусловно, нейросети могут быть обучены всему этому, но это очень специфическая задача, на решение которой пока нет большого общественного запроса.

▍ И всё же пиксели

Несмотря на все перечисленные проблемы, примеры пиксельной графики, генерируемой в Stable Diffusion, всё же существуют. Как же их получают?

Случайный пример сгенерированного пиксель-арта

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

На практике работа со Stable Diffusion обычно происходит через интерфейс AUTOMATIC1111, а инструменты для пиксельной графики добавляются в него двумя плагинами.

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

Фильтр-пикселизатор позволяет как просто устранить огрехи в лице неидеальных пикселей неправильных размеров и форм, если таковые вообще удастся вытащить текстовыми запросами из нейросети, так и превратить в крупные пиксели заданного размера вообще любое содержание высокого разрешения.

Разный размер пикселей, получаемый с помощью алгоритма в плагине pixelization

Второй плагин — webui-rembg. Это вспомогательный инструмент, позволяющий выделить в изображении основной объект и удалить ненужный фон, сделав его одноцветным перед проведением пикселизации, что устраняет ненужные артефакты на границах объекта. Он также реализован в виде дополнительной модели для нейросети.

Результат работы rembg на фотографии. Чистая магия!

Также есть и плагины традиционных, не-нейросетевых пикселизаторов, которые устанавливают требуемую величину пикселей и выполняют квантизацию палитры традиционными методами до заданного количества цветов, в том числе и заранее заданных. Это, например, плагин webui-pixelart. Он может пригодиться и в качестве дополнительной обработки после генерации изображения с помощью предыдущих плагинов.

Работа фильтра pixelart

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

Никак нельзя сказать, что фильтры-пикселизаторы бесполезны. С их помощью можно получать довольно красивые изображения. Но у них есть ограничения, и в итоге связка фильтра с нейросетью просто по природе своего устройства не может привнести в получающуюся картинку ни точного планирования, ни продуманного расположения пикселей, ни классические техники обводки контуров.

Портретные пиксели, созданные разных LoRA. В генерациях энтузиастов ИИ-арта преобладают анимешные девочки

Однако, не фильтрами едиными жив нейро-пиксельарт. Качество генерации можно поднять на новый уровень, применяя LoRA или полноценные модели, обученные именно на пиксельной графике — и за недавнее время их появилось уже некоторое количество. Это позволяет склонить нейросеть к рисованию крупнопиксельных изображений вместо абстрактной мозаики или изображений высокого разрешения. Конечно, это потребует локального запуска и погружения в тонкости установки и настройки дополнительных моделей.

Примеры сгенерированных пиксельных спрайтов

Такие решения в комбинации с фильтрами для устранения неидеальных пикселей уже хорошо справляются с рисованием относительно крупных изображений, например, с пиксельными портретами персонажей. Некоторые из моделей дают неплохие результаты и с объектами среднего размера, подходящими для внутриигровой графики. Наибольшие трудности возникают с объектами маленьких размеров, того же классического 16 на 16 — примеров именно таких генераций в галереях практически нет.

Функциональное разделение по цветам, однопиксельная обводка, сверх-оптимальное использование доступных пикселей, чистота прорисовки — качества настоящих игр прошлого, пока не доступные нейросетям (Super Mario Bros, Final Fantasy III, Darkwing Duck)

И всё же, подобный подход к генерации имеет довольно принципиальные проблемы. Например, не получится имеющимися средствами повторить классический стиль изображения персонажей в 8-битных японских ролевых играх, где в спрайтах размером 16 на 16 пикселей используется чёрная обводка для части элементов, чтобы персонажи выделялись на фоне, но место внутри столь маленького спрайта не расходовалось попусту.

Идеально выверенная геометрия и отточенная техника рисования абсолютно необходимы для классической изометрической графики (Theme Hospital, Light Crusader, Tactics Ogre)

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

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

▍ Будущее

И совсем коротко помечтаю о светлом будущем.

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

Нейросеть должна вычленить в обучающей выборке базовые техники работы с пиксельными линиями всех видов — идеальными прямыми, идеальными диагоналями в 45, 22.5 и 11.25 градусов, а также всеми видами кривых; техники дитеринга и шейдинга, работу с кластерами пикселей и очень ограниченными палитрами. Иными словами, нужны более узкоспециализированные нейросети, специально ориентированные на пиксельную графику. Но их ещё только предстоит придумать и создать.

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

▍ Итоги

В сухом остатке мы имеем следующее. При умелом использовании имеющихся моделей и набора костылей уже сейчас можно получить довольно неплохое качество генераций, возможно даже пригодное для каких-то инди-проектов. Но это потребует немало терпения, креативного подхода и ручной доработки, а также мощной видеокарты для локального запуска Stable Diffusion.

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

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

Судя по скорости развития этой области, это может случиться уже очень скоро. Или нет. Как говорится, поживём — увидим. А пока что не подписывайтесь на мой Телеграм-канал, потому что у меня его нет.