Описание
Когда-то давно я нарисовала одного полюбившегося мне персонажа, после чего у меня возникла идея сделать свою игру — 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»
Сюжет
В последующих генерациях я простраивала локации, служащие ключами для сюжетного пути, который проходит герой.
Сол, очутившись в глубинах ледяной пещеры, изучающе пробирается в заснеженные леса, где обнаруживает уютную хижину, скрывающую пугающие подземные ходы. Но в конце пути его ждет бесконечное лето и солнечная поляна, на которой он наконец-то сможет отдохнуть.




