В прошлом месяце я занялся придумыванием способа создания собственных спрайтов цивилизаций для наших с друзьями игр в Age of Empires II.

В этой статье рассказывается о процессе создания гибкого генератора изображений на основе промтов. Для начинающих я посоветую Alpaca, а тем, кто умеет кодить — Stable Diffusion Web UI и Python.

Выражаю особую благодарность сообществам моддеров AoEII OpenAgeSLX Studio и Age of Kings Heaven.

Визуальное исследование

Трансфер скриншотов

Эта идея пришла ко мне во время экспериментов с трансфером изображений (img2img) скриншотов Age of Empires II. Во всех описанных ниже методиках используется генеративный «ИИ» Stable Diffusion (который я также называю моделью или сетью).

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

Age of Empires II в стилистике аниме, Марса, картины и других стилях.
Age of Empires II в стилистике аниме, Марса, картины и других стилях.

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

Бенчмарк Каспара Давида Фридриха

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

Ещё один скриншот и эксперименты с разными сидами и весами
Ещё один скриншот и эксперименты с разными сидами и весами

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

Sprite-Diffuser

Аниме-лоялисты, лунные колонисты, римляне-зомби

Настало время создавать цивилизации.

Для генерации модели требуются изображения размером 512×512; к счастью, все спрайты Age of Empires II примерно вдвое меньше, поэтому нам не придётся волноваться об увеличении размера. Вот первые результаты.

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

Улучшение результатов при помощи Control Net и Loopback

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

Оригинал изображения
Оригинал изображения
Карта глубин
Карта глубин
Готовый результат
Готовый результат

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

Вместо этого можно использовать методику под названием loopback — она пропускает сгенерированное изображение снова через себя с тем же промтом. Без неё сеть неспособна придумать новые изменения в формах, текстурах и цвете.

Благодаря циклической обработке в интерьере возникают новые формы
Благодаря циклической обработке в интерьере возникают новые формы

В результате я остановился на методике использования Control Net с Zoe Depth Estimation и двумя loopback, каждый с силой примерно в 85% (сохраняется лишь 15% от исходного изображения).

Создание промтов

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

Для каждого изображения с показанными ниже промтами я использовал простую формулу. Единственное поле, которое менялось для каждого здания — это объект (например, Archery Range (стрельбище), Market (рынок), House (дом)).

  1. Форма

  2. Дескриптор

  3. Объект

  4. Стиль

  5. Акцент

  6. Модификаторы

  1. Isometric exterior of a

  2. ancient Roman

  3. Barracks

  4. in the style of Giovanni Paolo Panini

  5. 3D roman architecture, greco-roman stone and pillars with intricate stonework and roofs

  6. desaturated, 8k, bright sunny natural lighting, trending on artstation

Оригинал, Древний Рим, Minecraft, космос, оригами и конструктор.
Оригинал, Древний Рим, Minecraft, космос, оригами и конструктор.

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

Готовый результат

Другие эксперименты и размышления

Собственные здания и тонкая настройка

Можно также обратить процесс. Вместо создания разных стилей имеющихся спрайтов можно при помощи тонкой настройки модели Age of Empires II создавать новые спрайты в стиле оригинала. В качестве входных данных можно использовать или 3D-заготовки, или фотографии реальных зданий.

Превращение серых заготовок в изображение

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

Image gallery image
Исходное изображение, карта сегментации объектов и результаты
Исходное изображение, карта сегментации объектов и результаты

Благодаря Control Net и сегментации объектов мы можем пропустить их через тот же промт Каспара Давида Фридриха. Такую методику можно использовать при создании концепт-артов или дизайна уровней для быстрой генерации графики окружений.

Сиды, генерация, изображения

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

Воссоздаём Age of Empires II внутри модели при помощи одной карты глубин и без референсов в виде скриншотов
Воссоздаём Age of Empires II внутри модели при помощи одной карты глубин и без референсов в виде скриншотов

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

Выводы

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

Проект находится здесь: engine.study/sprite-diffuser/.

Комментарии (1)


  1. MountainGoat
    08.06.2023 12:38
    +3

    Как изобрели этот ControlNet так и пихают его везде, без него уже забыли, как работать.

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

    • Чтобы сделать замок из книг, в img2img загружаем замок, а в запрос пишем "стопка книг". Ставим силу где-то в 60 и главное: чтобы каждая следующая картинка базировалась не на оригинале, а не предыдущей. Прогонов за 10 что-то интересное да выскочит.