Описание
Когда-то давно я нарисовала одного полюбившегося мне персонажа, после чего у меня возникла идея сделать свою игру — 2D платформер с атмосферным нарративом.
Soul Сatcher
Игра о путешествии измотанного бессоницей пса Соула через заснеженные леса и пещеры. На пути он встречает множество персонажей в виде антропоморфных зверей, каждый из которых несет в себе частичку души. Соулу предстоит собрать их, выстраивая доверительные отношения с персонажами, чтобы обрести покой и принести лето в долину.Цель проекта
В своем проекте я использовала генеративную сеть Stable Diffusion для того, чтобы обучить ее рисовать в моей стилистике и разработать концепт-арты персонажей и локаций для игры.
В процессе работы, помимо Stable Diffusion, также были задействованы: генеративная сеть Midjourney для увеличения и улучшения качества изображений; Google Colab для выполнения кода; Adobe Photoshop и Figma для коллажирования получившихся изображений.
Исходные изображения
Для проекта я нарисовала 9 персонажей в виде стилизованных зверей, стараясь придерживаться консистентности в расположении частей тела, но при этом добавляя вариативности в деталях.
Особенности стиля: определенная поза персонажей, плавная извилистая линия, общие принципы построения тела, животные черты и некоторые атрибуты одежды.
Исходные изображения
Процесс
В подготовительном этапе перед обучением Stable Diffusion XL я загрузила в Google Colab Notebook и установила необходимые для работы библиотеки (bitsandbytes, transformers, accelerate, peft, diffusers) и SDXL DreamBooth Lora.
Код с установкой библиотек
Далее импортирую свой датасет в Google Colab. Разрешение изображений: 512×512 Меняю масштаб до 256 и вывожу превью изображений.
Чтобы обучить модель, необходимо описать каждое импортированное изображение. Для генерации подписей и привязки к изображениям использую модель BLIP.
После этого, я создаю файл с подписями изображений и использую токен «my» в промпте, чтобы обучить нейросеть на собственном стиле.
Код с привязкой описаний и изображений
Наконец, перехожу к обучению модели и написанию промтов. В настройках ставлю 512 пикселей на выходе, устанавливаю количество иттераций обучения на 500 шагов и сохраняю промежуточные значения на 250 шагов.
Код для обучения модели и промтинга
Итоговые изображения
Обученная модель довольно хорошо справилась с передачей общей стилистики плавных, изогнутых линий, переплетенных текстур, дрожащих штрихов и повторением животных мотивов.
Также она хорошо справлялась с генерацией одежды и предметов в руках персонажей.
prompts: 1. «photo collage in my style, rabbit with a hat» 2. «photo collage in my style, a dog in armor, sword in hand» 3. «photo collage in my style, a dog the dog is bandaged all over»
Проблемы возникли в наследовании черно-белого стиля. Модель использовала цветные фоны, раскрашивала персонажа или его одежду.
Причем, при указании в промте «black and white color», результаты получались недостаточно качественными по общей форме.
На выходе было множество нелогичных линий и артефактов, а резуальтаты унифицировались, сильно привязываясь к одному образу.
promps: «photo collage in my style, black and white drawing, side view, …» 1. «… dog in raincoat» 2. «… a goat in a fur coat» 3. «… dragon in pajamas»
Попытки облачить персонажей в характерный образ с помощью костюмов зачастую приводили к хорошему результату, идеально подходящему для концепт-артов.
Временами генерировались изображения с множеством персонажей на одной картинке.
prompts: 1. «photo collage in my style, a crocodile in a suit» 2. «photo collage in my style, a horse in a jacket» 3. «photo collage in my style, a dog wrapped in a chain»
Развитие стиля
prompt: «art in my style, a tree»
После удачной генерации персонажей, я решила проверить, как модель будет справляться с иными объектами, не попадающие под строго заданный шаблон моего датасета.
Сначала я попробовала сгенерировать деревья и цветы для окружения, а после паттерн скалы для применения в ассетах.
prompt: «art in my style, background, rock»
Сюжет
В последующих генерациях я простраивала локации, служащие ключами для сюжетного пути, который проходит герой.
Сол, очутившись в глубинах ледяной пещеры, изучающе пробирается в заснеженные леса, где обнаруживает уютную хижину, скрывающую пугающие подземные ходы. Но в конце пути его ждет бесконечное лето и солнечная поляна, на которой он наконец-то сможет отдохнуть.
prompts: 1. «art in my style, background for a platformer game, ice caves, side view» 2. «art in my style, background for a platformer game, winter forest, side view»
Midjourney
Upscale
Для платформеров традиционно используются горизонтальные фоны с разрешением 16:9, поэтому я выбрала генерации, показавшиеся мне подходящими, и расширила их через Midjourney.
Upscale
prompt: «art in my style, background for a platformer game, the snow covered house, side view»
prompt: «art in my style, background for a platformer game, interior of a cabin, fire in the fireplace, warm light, snow outside the window, side view»
Модель отлично уловила характер линий и сумела интерполировать мою стилистику на пейзажи.
Изначально я хотела ограничиться черно-белой палитрой, но так генерации получались слишком гротескными. Цветные же варианты выглядели довольно приятно, с ноткой доброй фэнтезийности.
prompt: «art in my style, background for a platformer game, dungeon»
prompt: «art in my style, background for a platformer game, several layers, a magical forest, and glowing lights in the sky»
Интеграция персонажей
Собрав все частицы души, сердце Сола вспыхнет ярким пламенем, и заснеженная долина наконец пробудится со всеми обитателями и расцветет яркими красками. <3
prompt: «art in my style, a white heart burning white fire»




