![](https://habrastorage.org/getpro/habr/upload_files/848/e8d/868/848e8d8682f2b0d1c60fde85fd1b000f.jpg)
Оглавление
Введение
В данной статье мы рассмотрим возможности генеративной нейронной сети Kandinsky 2.1 для создания карточной игры. Недавнее обновление данной нейросети значительно улучшило качество генерации, что позволяет получать действительно качественные изображения. Мы предлагаем Вам познакомиться с Kandinsky 2.1 на практике, углубившись в реальный кейс использования генеративной нейросети.
В рамках этой статьи мы сосредоточимся на процессе создания игры, а именно визуальном оформлении карточной игры, используя Kandinsky 2.1. Мы рассмотрим оптимальные способы генерации изображений и дадим рекомендации по превращению сгенерированных артов в игральные карты для настольной игры.
Отметим, что данная статья не будет касаться игрового процесса и логики игры, а также других аспектов, выходящих за ее рамки.
Статья будет интересна людям, интересующимся генеративными нейронными сетями, дизайнерам, которые хотят оптимизировать свою работу, иллюстраторам и всем тем, кто хотел бы создать что-то подобное, но не имеет возможности нанять профессионального художника.
Почему Kandinsky?
Для создания карточной игры, как и для любой другой задачи, необходимо выбрать подходящий инструмент. В данном случае, для генерации артов мы можем использовать различные генеративные искусственные нейронные сети, такие как Midjourney, Stable Diffusion и другие.
Наш выбор пал на нейросеть Kandinsky 2.1. Основным и главным преимуществом этой нейросети является её доступность. Да, в сравнении с Midjourney нейросеть Kandinsky, пока что, уступает в качестве сгенерированных изображений, но для нашей задачи этих результатов вполне хватит.
Почему не Stable Diffusion? Вариант хороший и при этом бесплатный, но для получения качественных изображений необходимо углубляться в тонкости работы с этой нейросетью и потратить немало времени (и места на жёстком диске) для получения желаемого результата.
В конечном итоге была выбрана нейросеть Kandinsky 2.1, так как именно она позволяет получить приемлимый результат в короткие сроки и при этом является бесплатной. Немаловажным фактором является и то, что на данный момент нейросеть набирает популярность и находится на слуху у огромного числа людей, что подогревает интерес аудитории к данному продукту.
Опишем желаемый результат
Для того, чтобы не забраться в дебри и при этом показать результат, предлагаем ограничиться определённым количеством карт. Почти в каждой игре есть свои герои и предметы. Это первое и самое банальное, что приходит на ум, таким списком и ограничимся.
Создадим 2 типа карт:
Герой
Предмет
Герой
Карты с типом «герой» будут обладать изображением самого героя, наименованием героя, кратким описанием и аттрибутами (или характеристиками, кому как нравится) со значениями в цифрах.
Теперь нужно придумать, какими именно характеристиками обзаведутся герои. Здесь так же не будем выдумать что-то супер необычное и обойдёмся стандартными вариантами.
Характеристики героев:
Урон
Здоровье
Мана
Удача (не совсем стандартный вариант, но почему бы и да)
Теперь необходимо придумать самих героев. В игре будет 2 героя «война» и 2 героя «мага»:
Berserker — воин ближнего боя, имеет повышенный запас здоровья, средний урон, низкий запас маны и удачи
Lightning mage — маг, боец дальнего боя, имеет высокий урон и запас маны, но небольшой запас здоровья и удачи
Thief — воин ближнего боя, имеет повышенный показатель удачи, средний урон и невысокие значения здоровья и маны
Pyromancer — маг атакующий с дальней дистанции, много маны, но мало здоровья, средние показатели удачи и урона
Предмет
Карты с типом «предмет» обладают теми же свойствами, что и карты типа «герой», за тем лишь исключением, что у каждой карты типа «предмет» есть характеристики, которые они добавляют карте «герой» при экипировке.
Опишем 4 возможных предмета:
Knowledge book — книга знаний, незначительно увеличивающая удачу и запас маны
Dagger of faith — кинжал, увеличивающий урон владельца
Medallion of life — медальон жизни, дарует владельцу дополнительное здоровье
Lucky beer (ну а куда без пива?) — значительно увеличивает удачу на несколько ходов вперёд, но пропадает после использования
Создадим шаблон игральной карты
Перед генерацией изображений нам необходимо создать шаблон карты, в который будут помещаться эти самые сгенерированные изображения.
Дабы не удлинять статью мы вынесли часть с подробным разбором создания шаблона в отдельный мини-гайд, который Вы можете найти перейдя по этой ссылке.
Финальный шаблон игральной карты будет выглядеть следующим образом:
![](https://habrastorage.org/getpro/habr/upload_files/d6e/fe3/cda/d6efe3cda672558fea2d1e2197edda45.jpg)
Дизайн шаблона игральной карты готов. При желании можно будет ввести дополнительные параметры в игру, информацию о которых легко отобразить в верхней части карты.
Создадим карты типа «герой»
Как выбрать стиль?
Создавая несколько артов под одну тематику главной задачей становится сделать так, чтобы все изображения были стилистически похожи друг на друга. К счастью, нейросеть Kandinsky понимает, когда её просят сгенерировать изображение в определённом стиле.
Если нет какой-то уже наработанной базы и понимания того, что хочется сгенерировать, всегда можно зайти на сайты, где представлены изображения, сгенерированные нейросетями и запросы, которые были использованы для их генерации, например, можно подсмотреть понравившийся стиль на сайте promphero и использовать его в своих запросах к нейросети Кандинский.
Нам показался подходящим стиль художника живописца по имени Дэниел Ф. Герхарц (Daniel F. Gerhartz). Арт в таком стиле отлично впишется в уже заготовленный шаблон игральной карты — в каждом запросе будем добавлять правило, по которому нейросеть будет рисовать арт в стиле работ данного художика.
Как ускорить процесс генерации
На данный момент для генерации можно использовать телеграм бота от Sber AI или платформу Fusion Brain.
Мы будем использовать второй вариант поскольку сайт можно открыть сразу в нескольких вкладках браузера и генерировать огромное количество изображений за раз переключая вкладки и запуская процесс создания изображеня.
Таким образом, открыв хотя бы 4-5 вкладок мы будем получать сразу несколько результатов и уже из них выбирать понравившийся.
Карта героя «Berserker»
Этот герой будет войном ближнего боя. По сути это просто обычный воин с мечом, который есть почти в любой игре, где присуствует классовая система.
В ходе генерации были эксперименты с разного рода запросами, в конечном счёте наиболее приемлемые результаты были получены используя следующий промпт:
Full body shot, medieval woman. red eyes, crown on her head, gold hair, spear in the hand, action scene, beautiful painting by Daniel F Gerhartz
По итогу получилось несколько близких к замыслу вариантов:
![](https://habrastorage.org/getpro/habr/upload_files/972/46a/04d/97246a04d510e92b2ca1acc6b80955cf.jpg)
Kandinsky очень не очень рисует холодное оружие, мечи, луки и прочее, особенно если они находятся в руке, тем не менее, для карточки был выбран первый вариант изображения.
Идём обратно в Фигму. Теперь нам нужно вписать нашу сгенерированную женщину в шаблон ранее созданной карточки, написать описание и подогнать характеристики.
![Первая карточка для героя "Berserker" готова Первая карточка для героя "Berserker" готова](https://habrastorage.org/getpro/habr/upload_files/b07/a13/aab/b07a13aab973f03250010fac6509a3f4.jpg)
Карта героя "Lightning mage"
Магический герой дальнего боя, что-то похожее на Зевса, но более современное.
Первые результаты:
![](https://habrastorage.org/getpro/habr/upload_files/bfb/fae/134/bfbfae134dda0f78456e9350c6b5ec3d.jpg)
Получилось неплохо, но всё же не то, что задумывалось изначально, попробуем снова, но немного поэкспериментируем:
![](https://habrastorage.org/getpro/habr/upload_files/3cf/ea7/bab/3cfea7babf09ab7f677a7c4792d04207.jpg)
И снова не то пальто. Цвет не совсем подходящий, окружение не то. Немного изменили запрос. Ещё раз меняем условия:
![](https://habrastorage.org/getpro/habr/upload_files/7c1/0cc/ed4/7c10cced439c8bae83fded5bff19c80c.jpg)
Уже намного лучше, выглядит эффектно и очень близко к желаемому результату. Единственный момент, очень плохо проглядываются черты лица. А ведь черты лица передают характер изображаемого героя. Немного изменим запрос так, чтобы нейросеть генерировала героя по пояс.
Конечный запрос выглядит следующий образом:
Half-body portrait shot, diagonal shot, man, medieval mage, magician hat, glasses, lightnings, cloak, elegant, evil, action scene, art by Daniel F Gerhartz
Получаем результат:
![](https://habrastorage.org/getpro/habr/upload_files/f1d/81c/274/f1d81c2743b80e2e34a5c82ed22677ef.jpg)
Теперь имеем то, что нужно. Осталось выбрать самого подходящего повелителя молний…Спустя несколько генераций получаем то, что планировалось изначально:
![](https://habrastorage.org/getpro/habr/upload_files/3d0/098/a42/3d0098a42e4c111589b985f0d2adca69.jpg)
Выглядит довольно достойно. Чем-то напоминает Рейдена из Mortal Combat.
Вписываем его в шаблон карточки и переходим к следующему герою!
![Карта героя "Lightning mage" Карта героя "Lightning mage"](https://habrastorage.org/getpro/habr/upload_files/d63/9ff/8a7/d639ff8a7020927f4a41ceb6468f9b2c.jpg)
Карта героя «Pyromancer»
Изначально, планировался герой, чем-то напоминающий «чернокнижника». Но в итоге, как будто бы, эта задумка не совсем подходила для карточной игры, поэтому было решено сделать героя мага, а именно мага огня. Пол женский.
Первые результаты вышли такие:
![](https://habrastorage.org/getpro/habr/upload_files/a83/9dd/812/a839dd812a0e2143fcb9d4fe51760b72.jpg)
Получилось симпатично, но есть одно но…
Оформлять героя в красных тонах не очень хочется по двум причина, во-первых потому что это довольно заезженно, во-вторых у нас уже есть герой «Berserker», который выполнен в красных тонах. Будем использовать кислотно зелёный.
Пробуем составить запрос с новыми данными:
Half-body shot, frontal shot, medieval woman, mage cloak, an ancient ornate intricate old tome fiery spell book in hands, crown, elegant, kind, action scene, green tone, beautiful painting by Daniel F Gerhartz
Наблюдаем результат:
![](https://habrastorage.org/getpro/habr/upload_files/e2a/5c5/f39/e2a5c5f398c8d35c7a768420d93d01a1.jpg)
Получилось, по сути то, что планировалось изначально.
Из этих вариантов наиболее подходящим будет второй вариант за счёт удачной постановки ракурса, плюс интересного выражения лица. Возьмём его.
Забавы ради попробуем воспользоваться инструментов, который предоставляет Kandinsky 2.1 в телеграм боте, а именно смешивание двух изображений в одно. Смешаем первые варианты в красных тонах со вторыми вариантами в зелёных тонах. Получим:
![](https://habrastorage.org/getpro/habr/upload_files/4f5/895/ac7/4f5895ac705b0632fe46aa2403336aca.jpg)
Итог радует глаз!
Есть проблемы с пальцами, с книгой, с огнём, но в целом получилось хорошо. Берём первый вариант полностью зелёного героя и совмещаем с карточкой.
![Подкурить у такой лучше не просить... Подкурить у такой лучше не просить...](https://habrastorage.org/getpro/habr/upload_files/e81/ca2/969/e81ca296905cc1c52d245482756f5910.jpg)
Карта героя «Thief»
Герой задумывался как что-то, похожее на убийцу, но опять же не совсем банальное. Вдохновившись гильдией воров из серии The Elder Scrolls захотелось сделать что-то отдалённо похожее.
Первые варианты генераций:
![](https://habrastorage.org/getpro/habr/upload_files/ea2/9c8/894/ea29c88947b3f48d7de6f298a51f490b.jpg)
Слишком светло, не то фокусное расстояние, оружие по-прежнему рисуется ужасно.
Генерируем снова изменяя запрос, получаем:
Half-body portrait shot, medieval assassin, silver sword on the back, full of black suit, hooded head, leather belt, night time, beautiful painting by Daniel F Gerhartz
![](https://habrastorage.org/getpro/habr/upload_files/be2/759/3ab/be27593abed1ab97fa77e05edbeaffb6.jpg)
Больше всего понравился второй вариант, мимика и поза такие, какими планировались изначально. А вот меч нарисовался снизу-вверх. Ушло очень много времени на попытки сгенерировать меч в правильно варианте, но по итогу ничего так и не вышло.
Было принятно волевое решение дополнительно сгенерировать меч как отдельный арт и с помощью фотошопа прилепить его к нашему герою:
Dark ancient swort, Daniel F Gerhartz style
Получили вот такой меч:
![](https://habrastorage.org/getpro/habr/upload_files/fbd/39a/6cb/fbd39a6cb8f5e126c35d043621dba2a7.jpg)
Есть какие-то сопли, которые пристали к лезвию, но это не страшно, ведь нам всего лишь нужно взять верхнюю часть меча, а она получилась достойной.
Открываем Photoshop, вырезаем по маске верхнюю часть меча (рукоять и часть лезвия). Так же открываем в фотошопе ранее сгенерированного героя, инструментом штамп убираем некрасивое лезвие. Подгоняем новый меч по размерам, немного балансим по цвету и получаем нашего героя с новым мечом за спиной:
![Карта вора-убийцы под названием "Thief" Карта вора-убийцы под названием "Thief"](https://habrastorage.org/getpro/habr/upload_files/870/ed2/972/870ed2972e6b6fe39c3a60bcebbb3a71.png)
Соединяем, получаем новую карту:
![Последняя карта типа «герой» готова Последняя карта типа «герой» готова](https://habrastorage.org/getpro/habr/upload_files/29d/53d/195/29d53d195068f30f8add0cab9058cc18.jpg)
Создадим карты типа «предмет»
По задумке карта типа «предмет», при получении, должна увеличивать характеристики текущего героя. Эти карты имеют такую же структуру, что и карты типа «герой» за тем лишь исключением, что характеристик у карты может быть максимум две.
Чтож, приступим к генерации изображений наших предметов!
Карта предмета «Knowledge book»
Основная задача — сгенерировать магическую книгу, розовато-фиолетового цвета со свечением и повышенной загадочностью:
Book of knowledge, ancient book, table, pink magic glow, lightnings from book, darkness, dark library, object shot, volumetric light, Daniel F Gerhartz style
На выходе получаем результаты, лучшие из них:
![](https://habrastorage.org/getpro/habr/upload_files/749/7ad/6a5/7497ad6a568f60e960ab0ee7a0a8ca2e.jpg)
Получилось то, что нужно. Заберём второй вариант и создадим нашу первую карту предмета:
![](https://habrastorage.org/getpro/habr/upload_files/396/af4/929/396af4929a1e83cd2feb98d5a99c6b77.jpg)
Карта предмета «Dagger of faith»
Карта, увеличивающая урон владельца. В качестве визуализации силы был взят образ клинка. Ох и долго же пришлось повозиться для того, чтобы получить конечный результат. Первые варианты генераций:
![](https://habrastorage.org/getpro/habr/upload_files/dbe/abc/340/dbeabc340e63052f7df5009df6e6b4d3.jpg)
Клинок никак не хотел укладываться в траву, хотя такой изначально была задумка. По какой-то причине нейросеть почти всегда рисовала его висящим в воздухе ровно под 90 градусов. Помимо этого очень сложно было добиться того, чтобы все края клинка были полностью в кадре. Как было упомянуто чуть выше, пока что нейросети Кандинский 2.1 сложно справляться с отрисовкой холодного оружия.
Следующие попытки генераций:
![](https://habrastorage.org/getpro/habr/upload_files/2b6/469/6d2/2b64696d236ab34b2fec4e661747747d.jpg)
Здесь получилось сделать клинки в наклоне, но выглядит это, как будто бы ещё хуже.
Было принято решение оставить клинок в воздухе, но получить-таки уже какой-то результат:
Dark dagger lies in the grass, bloody sword, steel sword, full size sword, sword at 35 degree angle, gorgeous, diagonal angle, art by Daniel F Gerhartz
![](https://habrastorage.org/getpro/habr/upload_files/0d8/201/3ab/0d82013ab3ffaa8c075f7e2f7455503c.png)
Делаем игральную карточку:
![Карта предмета "Dagger of faith" Карта предмета "Dagger of faith"](https://habrastorage.org/getpro/habr/upload_files/a5f/3ee/32b/a5f3ee32b097d659ef52dbf19a53c3e5.jpg)
Бывает такое, что ничего не приходит в голову и неоткуда взять вдохновение. Как раз в этой ситуации генеративные нейросети очень хорошо выручают. Надо начать генерировать хоть что-то и интересная идея сама по себе всплывёт в голове. Так было и с этим предметом.
Задумка в том, чтобы создать изображение медальона в форме завивающейся к центру змеи, у которой в будет драгоценный камень в виде зелёного сверкающего глаза. Но задумка с глазом, как описано выше, пришла уже чуть позже.
Первые генерации:
![](https://habrastorage.org/getpro/habr/upload_files/5b2/ade/d07/5b2aded07b67b635be1d76911f169328.jpg)
По форме получился не совсем тот результат, который задумывался изначально. Плюс нейросеть сгенерировала скорее какого-то дракона нежели змею.
Второй подход:
![](https://habrastorage.org/getpro/habr/upload_files/246/3a7/380/2463a738085aac129b178e68676f089d.jpg)
От образа дракона нейросеть решила не отходить. В целом, дракон тоже неплохой вариант, поэтому можно оставить этот момент на усмотрение ИИ.
Эти медальоны получились лучше, осталось добавить сюда зелёное свечение (обычно здоровье ассоциируется с зелёным цветом):
Twisted snake medallion with green eye, metal chain, snake in center of medallion, pendant medallion, dark background, macro, object shot, art by Daniel F Gerhartz
Получаем:
![](https://habrastorage.org/getpro/habr/upload_files/be2/efc/7f9/be2efc7f95de45a90125ca8ff0463be8.jpg)
Здесь гармоничнее выглядит второй вариант, поэтому выбираем его и соединяем с шаблоном карты:
![Карта предмета "Medallion of life" Карта предмета "Medallion of life"](https://habrastorage.org/getpro/habr/upload_files/9de/c16/7cf/9dec167cfc6781cd0379fa18bc51ac01.jpg)
Карта предмета «Lucky beer»
Остался последний, заключительный предмет, без которого нельзя было обойтись — пиво!
Концепт очень простой, есть бутылка с магической жидкостью, при использовании увеличивает удачу владельца на несколько ходов вперёд.
Первая генерация дала следующий результаты (выбраны лучшие):
![](https://habrastorage.org/getpro/habr/upload_files/7e4/fce/945/7e4fce9455fdbb3381396131741e0299.jpg)
На этих изображениях видно, что нейросеть так же, как и вслучае с клинками отказывается полностью поместить объект в кадр так, чтобы грани не заходили за края.
Попробуем снова немного изменив запрос:
![](https://habrastorage.org/getpro/habr/upload_files/2f7/dc3/172/2f7dc317223165eb0a80c92d8b0c1d23.jpg)
После долгого количества генераций получились два этих пузырька с мутной (в прямом и переносном смысле) желтоватой жидкостью.
Оба этих изображения доставили много головной боли, потому что нейросеть изначально сгенерировала их с маленькими второстепенными объектами рядом.
При генерации через платформу Fusion Brain можно выбрать инструмент «Erase», это, грубо говоря, ластик, которым можно стереть ненужные объекты. Работает он очень сомнительно, по итогу эти изображения всё равно не подошли, потому что выглядят они довольно несуразно, но в научных целях было интересно довести их до приемлемого состояния заодно пощупав новый инструмент.
Конечный запрос на генерацию пива:
Painted ancient bottle with golden liquid, strong cork, bottom of the sea, runic symbols, object shot, Daniel F Gerhartz style
Получили довольно-таки симпатичный результат:
![](https://habrastorage.org/getpro/habr/upload_files/2b7/c11/1dc/2b7c111dcb1bedc5bac690787a8c35b0.png)
Соединяем всё вместе для получения заключительной карты
![Карта предмета "Lucky beer" Карта предмета "Lucky beer"](https://habrastorage.org/getpro/habr/upload_files/c54/dba/9f6/c54dba9f6a3f2cecfb8bc3a7f81bfdb4.jpg)
Результаты и итоги
Подведём итоги и посмотрим чего удалось достичь. В этой статье мы разобрались как:
сделать шаблон игральной карты в Figma
сгенерировать необходимые изображения по начальному ТЗ используя нейросеть Kandinsky 2.1
ускорить процесс генерации в нейросети Kandinsky 2.1
сгенерировать изображения в одинаковом стиле
![Итоговый результат Итоговый результат](https://habrastorage.org/getpro/habr/upload_files/080/4d7/5e2/0804d75e23650143b937fbe16f6c179d.jpg)
Всего было создано восемь игральных карт, из них четыре карты являются типом «герой», а четыре — типом «предмет». Однако стоит отметить, что реальная игра содержит гораздо большее количество карт. Важно понимать, что данная статья не затрагивает темы логики и механик игры.
Стратегия и механики игры — это огромная, отдельная тема. Напишите в комментариях, если материал по данной тематике был бы Вам интересен и мы с радостью сделаем статью, посвященную созданию сюжета игры с использованием искуственного интеллекта.
Создание карточной игры — это трудоемкий процесс, который требует значительных временных затрат. Несмотря на это, не следует опускать руки, поскольку если Вы решили создать карточную игру, то теперь понимаете, в каком направлении двигаться, чтобы достичь желаемого результата!
Спасибо, что дочитали до конца.
Все материалы из данной статьи (макеты, исходники), а также эксперименты и фишки по работе с Kandinsky Вы можете найти в этом телеграм канале.