Как я делаю арт игры в Midjourney

Я начал создавать практически весь арт для своей инди-игры с помощью Midjourney — и не собираюсь поворачивать назад. В этой статье я покажу как игра выглядит сейчас, какой арт я создаю, и расскажу о том как я это делаю.

На днях здесь уже мелькала статья про то, как с помощью Midjourney студия сократила стоимость работы над артом на 80%. Там много копий сломано в комментариях, говорят что это находка для «трэшеделов» и так далее.

По мотивам этой статьи я тоже решил поделиться тем, как использую Midjourney для обновления арта в своей собственной игре.

Кто я такой

Меня зовут Алексей Дмитриев, я инди-разработчик. Несколько лет назад я создал студию Duck Rockets, мы были классные, но времена поменялись — и теперь я снова инди.

Игру Witchcraft я запустил без малого 12 лет назад, и в неё до сих пор активно играют несколько сотен человек, игра free-to-play. Не бог весть что, но на хлеб с маслом хватает, поэтому я продолжаю над ней работать. Развиваю игру в одиночку.

Вот так игра выглядит сейчас. DTF увеличивает размер картинки, отчего ещё сильнее сводит олдскулы.
Вот так игра выглядит сейчас. DTF увеличивает размер картинки, отчего ещё сильнее сводит олдскулы.

Поиграть в мою игру можно в Facebook, но сразу предупреждаю что потребуется заходить через desktop, на мобилах для входа нужен бубен и матерные слова: ) Вот ссылка: https://apps. facebook. com/witchcraftgame/

Задача

Создание арта для игры — одна из наиболее затратных задач, которую я и решил оптимизировать.

Каждые 3 месяца в игру необходимо добавить набор картинок для нового сезона:

  • порядка 30 новых предметов в магазин
  • около 20 из этих предметов должны одеваться на игровой аватар — мужской и женский
  • 1-2 новых монстров
  • 4-5 новых фонов для локаций битвы
  • несколько маркетинговых картинок — заставка сезона, фоны для распродаж и т. д.

Исторически так сложилось, что весь арт в игре моделировался в 3D, затем рендерился в растровые картинки и вставлялся в игру в виде JPG или PNG. Этот же подход использовался в игре до недавнего времени без особых изменений.

В общей сложности, если заказывать весь набор арта у 3D-моделеров на фрилансе, выходит что-то в районе $2000-2500 за весь пакет. По масштабам какой-нибудь студии это вообще не деньги, но для инди-разработчика это в целом заметная сумма.

Однако, пойти по альтернативному пути получения арта меня сподвигло не столько желание сэкономить, сколько отсутствие желания в очередной раз искать моделеров, объяснять пайплайн, писать ТЗ, менеджерить весь процесс и сводить результаты.

Игровые предметы

Началось всё с того, что я решил упростить себе задачу и сгенерировать референсы для моделеров используя Midjourney.

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

Я всегда думал что раз уж мы делали всё в 3D, то и альтернатив нет, надо так и делать. Однако когда я сгенерировал первые картинки игровых предметов в качестве референсов, внезапно оказалось, что они вполне себе сносно «натягиваются» на игровой аватар, и при этом выглядят получше многих рендеров, которые уже есть в игре.

Один из этих двух парней приоделся у нового модельера. Не скажу какой.
Один из этих двух парней приоделся у нового модельера. Не скажу какой.

Используя шаблон prompt-а для всех предметов сета, я смог добиться приблизительно одинакового внешнего вида для всех элементов аватара, а также побочных предметов — зелий, сундуков и прочих.

Само собой, всё это добро не совпало с аватарами «из коробки», не обошлось без коррекций (местами существенных) с помощью Photoshop. Однако даже моего, прямо скажем, скромного навыка вполне хватило для достижения сносного результата.

Сложнее оказалось с оружием и щитом, так как его Midjourney генерирует в прямой проекции, а мне было необходимо его использовать в том числе на аватаре, где оно развёрнуто под углом к камере. Однако я всё же смог добиться результата, который меня устроил.

В общей сложности на генерацию, коррекцию, обрезку и подгонку 27 предметов у меня ушло 10 рабочих дней. Больше всего гемора доставили перчатки (их надо на две руки, причём на правой должно быть видно внутреннюю сторону, которой на генерации нет) и насекомоподобное существо, для которого нейросеть упорно генерировала разбросанные по всем углам обломки конечностей, которые я потом собирал в нечто удобоваримое.

Превью всех предметов сета
Превью всех предметов сета

Фоны для битв

Наиболее прикольные и при этом наиболее сложные задачи — генерация существ и полей битвы с ними. Бои с монстрами — это базовая активность в игре, поэтому здесь чем больше контента, тем круче!

Поле битвы с титаном выглядит примерно так, только сверху ещё налепляется килотонна UI. Фон сделан в 3D, скелет - нарисован иллюстратором в 2D.
Поле битвы с титаном выглядит примерно так, только сверху ещё налепляется килотонна UI. Фон сделан в 3D, скелет - нарисован иллюстратором в 2D.

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

Нейросеть может рисовать красивые фоны, но добиться чтобы в этих фонах были правильные «платформы» — весьма непросто. К счастью, можно использовать несколько генераций и вариаций одной и той же картинки, чтобы собрать итоговый результат, подходящий для игры.

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

Иногда картинка в целом получается норм на первый взгляд, но если чуть-чуть приглядеться — сразу видны косяки. К примеру, на картинке ниже кристаллы в пещере как будто бы смотрятся как кристаллы, но всё же я решил их заменить на более детальные. Так при желании можно было бы поступить с каждой деталью — камнями по бокам, полом, потолком.

Кстати, за основу для генерации картинки пещеры я взял исходный арт этой же пещеры, который много лет назад мы делали в 3D:

Размер стартовой картинки - 760х680, размер итоговой - 3780х1620
Размер стартовой картинки - 760х680, размер итоговой - 3780х1620

Монстры

Это моя любимая часть!

Создание существ — наиболее долгая и затратная задача, отнимает кучу энергии и очень редко приводит к идеальному результату. Почти всегда на работу над новым титаном уходит не меньше недели времени, всегда куча правок, проблемы с позой и выражением лица, всякое такое. Если делать детально и хорошо — это зверски дорого, хоть в 3D делай, хоть в 2D рисуй руками. Короче, игра не стоит свеч, но играть в неё приходится.

Поэтому когда я сгенерировал первого монстра для нового сезона — я чуть не прыгал от радости, потому что он отлично вписался, за исключением нескольких лишних пальцев.

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

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

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

С монстрами мне ещё предстоит много работы, их надо сделать ещё 50 штук для тех предметов что уже есть в игре. А если считать те, что я уже заказывал иллюстраторам в 2D и которые теперь отчаянно проигрывают картинкам от Скайнета — все 80.

Давайте расскажу вам как строится моя работа над ними, вдруг вам тоже пригодится?

Этапы работы

Работа над существами для игры строится из нескольких этапов:

  • выбор референса и prompt-а
  • генерация, отбор годных вариантов, апскейл
  • коррекция
  • обрезка
  • наложение фильтров

Первый этап — референс и prompt. Для каких-то простых существ вроде крокодила или совы бывает вполне достаточно просто текстового описания, например такого:

fantasy adventure game creature, owl flying with its wings spread, full body, full color, side view

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

Возможно, стоило использовать кисть пожёстче, мог бы получить более чёткий контур в итоге
Возможно, стоило использовать кисть пожёстче, мог бы получить более чёткий контур в итоге

В качестве текстового prompt-а я использую шаблон вида "fantasy adventure game creature, *описание существа*, full body, full color, side view", он выдаёт примерно то что мне нужно в плане цветов и пропорций монстров. Если нужно делать предмет — пишу item вместо creature.

Этап генерации и отбора вариантов сводится к тому, чтобы перебрать 10-15 разных вариантов генерации, отобрать потенциально интересные с точки зрения пропорций, цветов и деталей, а затем их апскейлить.

На этом этапе важно обращать внимание на превью, которые генерит Midjourney, по ним уже можно заранее увидеть потенциальные проблемы — кривые конечности, отсутствие каких-то важных деталей (вроде второго крыла у шершня или ноги у крокодила) , размытость или цветовые пятна. Сделав несколько десятков апескейлов уже можно набить руку и углядывать проблемы заранее, а не когда ресурсы на апскейл уже потрачены.

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

Этап апскейла тоже имеет свои нюансы. К примеру, Midjourney выдаёт картинку 1024х1024 либо чуть больше, если пропорции заданы 3:2. Но этого для моей работы недостаточно, мне для работы с фильтрами нужно разрешение 2000х2000. Поэтому я беру готовую картинку от Midjourney и увеличиваю её ещё больше с помощью Topaz Gigapixel AI.

Апскейл аватара из игры через Gigapixel AI. Шакалы вымирают на наших глазах.
Апскейл аватара из игры через Gigapixel AI. Шакалы вымирают на наших глазах.

Итоговые картинки размером 4к пикселей я тащу в фотошоп и приступаю к следующему этапу — замазыванию партаков. Тут в ход идёт всё моё умение — обрезка лишнего, тени, копирование-вставка фрагментов из нескольких генераций, благо нейросеть даёт предостаточно запасных деталей.

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

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

Обрезку фона делаю через наложение маски, чтобы в случае чего можно было откатить обратно. Если маску сделать полупрозрачной — можно сразу увидеть где и чего фотошоп отрезал лишнего или оставил зазря.

Ворон эффектно перелетает из мира машин в мир игры
Ворон эффектно перелетает из мира машин в мир игры

Затем обрезанную картинку я пакую в smart-объект и уменьшаю до 2000 пикселей по длинной стороне. Это мой основной размер, который я использую для наложения фильтра Cartoonizer в Befunky. Оптимальная для меня толщина линий, цвета, всё как надо.

Итог — крупноформатное изображение монстра в нужной стилистике!

Ужасный взгляд осьминога стал ещё ужаснее! Вы же заметили разницу, да?
Ужасный взгляд осьминога стал ещё ужаснее! Вы же заметили разницу, да?

Итоговая картинка с фильтрами идёт в игру, уменьшенная до высоты примерно 500-600 пикселей, то есть в половину высоты экрана смартфона в горизонтальной ориентации.

В общей сложности на одного монстра может уйти от 1 до 4 часов, в зависимости от детализации контура, сложностей с генерацией, количества косяков и необходимых поправок. Пока что мой рекорд — 3 монстра за 1 рабочий день, но это пришлось конечно постараться.

Пока что из главных проблем этого подхода я вижу некоторую разницу в стилях, на которую мне уже любезно указали коллеги, у которых я просил фидбэк. Где-то я схалтурил, где-то просто не обратил внимание, в общем всё это нужно будет ещё причёсывать и приводить к единому виду, а возможно кое-что даже выкинуть и сделать заново. Но это не сильно сложно, уверен что я справлюсь.

Прочие картинки

Помимо предметов, существ и фонов для игры мне ещё требуется некоторое количество разного рода материалов. Например, подложки для предметов, фоны для анонсов эвентов и распродаж, случайные персонажи и так далее. Да и помимо игры ещё есть соцсети, которым сколько картинок ни скорми — всё мало.

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

Сколько это стоит?

За подписку на Midjourney я плачу $15 в месяц. Её мне хватило на генерацию пакета арта, упомянутого в самом начале статьи. У пакета есть ограничение по количеству вычислительных минут, и когда оно заканчивается — можно докупать исходя из расчёта $4 за час вычислений.

Стоимость отрисовки одного существа в 3D для меня выходила не меньше $200, поэтому создание десятков картинок для игры через нейросеть мне всё ещё обходится дешевле, чем заказать одну модель.

Не стоит сбрасывать со счетов тот факт, что я сижу руками редактирую весь арт, поэтому процесс как бы не бесплатный, он стоит мне некую условную ставку Х долларов в час за моё личное время. Однако мне эти же Х долларов в час стоят и написание ТЗ для художников, и проверка работы, и правки, и вся переписка, и подгонка итогового арта под формат игры. Вот и получается что я, возможно, трачу столько же времени, ну или по крайней мере не сильно больше.

Мои выводы

  • Создавать годный арт для игры с помощью нейросетей — можно, это эффективно и результат не обязательно получится стрёмный.
  • Я обязательно продолжу использовать Midjourney и возможно даже попытаюсь освоить Stable Diffusion, хотя бы чтобы посмотреть разницу.
  • Я совершенно точно снова буду работать с живыми художниками — когда задача этого потребует. Просто оказалось, что таких задач у меня меньше чем я думал.

Новые картинки я по мере готовности выкладываю у себя в twitter, милости просим.

Надеюсь, вы нашли в этой заметке что-то полезное для себя: ) Буду рад комментариям!

14K14K показов
8.5K8.5K открытий
33 репоста
70 комментариев

Ладно однотипные ассеты из Юнити стора в каждой второй инди хоть сделаны качественно (сами ассеты, не инди), так теперь в каждой второй инди будут генеративные ассеты, но теперь они будут сделаны плохо

Ответить

В точку. Думаю нейросети это худшее, что случилось с инди, да и всей игровой индустрией в принципе, только далеко не все это поняли.

Ответить

Как я смею делать арт игры в Midjourney нажимая пару кнопок и отбирать работу у бедных несчастных рисовак, которые обучались этому 20 лет

Ответить

Да не, как раз этот пост только подтверждает что нейронка художника и его вкус не заменит. Хуета же вышла, не?
Отдельный фон, сферический в ваккуме, выглядит ещё нормально, но вот когда два нейроарта соеденяются там уже такое себе.

Ответить

В данном случае у 3D скульпторов. Тоже хорошо. А то что они думают разобрались в збраше и теперь бабло зарабатывать можно по 15 баксов в час? На завод, мрази!

Ответить

Ужасный, ужасный я.

Ответить

Ну, будем честными - те, кто обучались ...дцать лет, либо занимаются чем-то другим, либо умеют лучше.

Ответить