В прошлом месяце я занялся придумыванием способа создания собственных спрайтов цивилизаций для наших с друзьями игр в Age of Empires II. В этой статье рассказывается о процессе создания гибкого генератора изображений на основе промтов. Для начинающих я посоветую Alpaca, а тем, кто умеет кодить — Stable Diffusion Web UI и Python. Выражаю особую благодарность сообществам моддеров AoEII OpenAge, SLX Studio и Age of Kings Heaven. Эта идея пришла ко мне во время экспериментов с трансфером изображений (img2img) скриншотов Age of Empires II. Во всех описанных ниже методиках используется генеративный «ИИ» Stable Diffusion (который я также называю моделью или сетью). Я начал в Photoshop с Alpaca и работал с полноэкранными скриншотами игры. По большей части я наблюдал за поведениями модели, смотрел, какие формы и текстуры она выбирает для сохранения изображения и что в своих стилистических поисках она убирает. В целом ей достаточно хорошо удавалось придерживаться перспективы и темы. Сразу стало интересно, как взаимодействуют между собой элементы изображения. Тайловый рельеф уступил место дорогам и тропинкам: возникает связь между зданиями и средой. Пока мы будем работать только со спрайтами зданий, но это демонстрирует, что машинное обучение может быть хорошим инструментом для смешения процедурных элементов игры. Затем я при помощи промта попросил сеть выдавать исключительно изометрическую перспективу, стремясь получить результат с согласованными освещением, цветом, формами и текстурой. Потрясающие результаты: с увеличением силы трансфера изображений части мини-карты и UI превращаются в другие здания или рельеф. Настало время создавать цивилизации. Для генерации модели требуются изображения размером 512×512; к счастью, все спрайты Age of Empires II примерно вдвое меньше, поэтому нам не придётся волноваться об увеличении размера. Вот первые результаты. Эти здания были выбраны из множества других, подчищены в Photoshop и не объединялись в батчи. Чтобы получить разнообразные результаты, я задал очень большую силу трансфера изображений, но из-за этого сильно варьировались освещение, пропорции и уровни детализации. Больше всего проблем создавал спрайт замка (слева), потому что он вдвое больше других зданий, однако сеть продолжала настаивать, что это просто очень большой дом. Для получения устойчивых результатов при наличии большой силы трансфера изображений мне необходимо было использовать Control Net — сеть, управляющую генерацией при помощи таких входных параметров, как штриховая графика, глубина и сегментация. На этом этапе всё работало, спрайты сохраняли перспективу и слушались промта, но им не удавалось быть творческими или неожиданными. Эту проблему нельзя решить, сделав силу промта чрезвычайно большой, ведь освещение или цвет начнут слишком варьироваться, и control net здесь не поможет. Вместо этого можно использовать методику под названием loopback — она пропускает сгенерированное изображение снова через себя с тем же промтом. Без неё сеть неспособна придумать новые изменения в формах, текстурах и цвете. В результате я остановился на методике использования Control Net с Zoe Depth Estimation и двумя loopback, каждый с силой примерно в 85% (сохраняется лишь 15% от исходного изображения). Наверно, это самая важная часть процесса, но я оставил её напоследок. Я не тратил особо много времени на подбор промтов, поэтому копирование того, что сделал я, возможно, помешает вашему творчеству. Но это всё равно будет неплохим началом. Для каждого изображения с показанными ниже промтами я использовал простую формулу. Единственное поле, которое менялось для каждого здания — это объект (например, Archery Range (стрельбище), Market (рынок), House (дом)). Форма Дескриптор Объект Стиль Акцент Модификаторы Isometric exterior of a ancient Roman Barracks in the style of Giovanni Paolo Panini 3D roman architecture, greco-roman stone and pillars with intricate stonework and roofs desaturated, 8k, bright sunny natural lighting, trending on artstation Кроме того, Stable Diffusion не создаёт прозрачности. Я подумал, что сработает обнаружение объектов, но, как ни странно, у него возникали проблемы с поиском маски объектов. Вместо этого я добавил в промт требование сплошного цвета фона  и при помощи ImageMagick создал несколько прозрачных заливок Можно также обратить процесс. Вместо создания разных стилей имеющихся спрайтов можно при помощи тонкой настройки модели Age of Empires II создавать новые спрайты в стиле оригинала. В качестве входных данных можно использовать или 3D-заготовки, или фотографии реальных зданий. Воспользовавшись одним из своих готовых проектов на Unity, я взял уровень из серых заготовок и применил к зданиям, земле и деревьям сегментацию согласно датасету ADE20k. Благодаря Control Net и сегментации объектов мы можем пропустить их через тот же промт Каспара Давида Фридриха. Такую методику можно использовать при создании концепт-артов или дизайна уровней для быстрой генерации графики окружений. Благодаря большому объёму доступной семантической и синтаксической информации об изображении, каждое изображение в проекте можно использовать как опору для синтезирования новых результатов. Создав 10-20 спрайтов при помощи традиционных процессов изготовления графики, будь то персонажи, здания или окружения, команда разработчиков сможет затем создавать новую графику. Студии, имеющие большой собственный каталог концепт-артов и графических ресурсов, могут заинтересоваться в предоставлении доступа к ним фанатов с целью расширения лора и миров. Эти модели на удивление гибки и с ними интересно работать. При желании разработчики игр в будущем смогут создавать наборы базовых ресурсов, которые затем можно использовать как основу для генерируемого пользователями лора или собственных разработок. Сам игровой мир — это модель изображений, поэтому подобные методики отлично подходят для видеоигр. Проект находится здесь: engine.study/sprite-diffuser/.  Переводчик-фрилансер