King, Witch and Dragon. DevLog #24

Сегодня поговорим о злободневном - о нейросетях и как они влияют на работу соло инди-разработчика. Осторожно, много картинок.

Небольшое резюме по поводу того, что за игру делаю:

King, Witch and Dragon - это 2.5D метроидвания наоборот или "Антивания".

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

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

ДИСКЛЕЙМЕР №1

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

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

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

Вы можете быть несогласны с моей позицией, это ваше право.

ДИСКЛЕЙМЕР №2

Все работы представленные ниже, это "чистые" результаты работы различных нейросетей без какой-либо пост-обработки.

ДИСКЛЕЙМЕР №3

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

Ну всё, с формальностями покончено, теперь к делу.

Цель и подготовка

Мои основные скиллы это геймлизайн и программирование. Также я могу на приемлимом уровне создавать 3D-модели и анимации, но вот 2D арт и в частности концепт-арты для меня всегда были камнем предкновения.

Так как я разрабатываю игру соло, в какой-то момент остро встал вопрос "а откуда, собственно, брать концепты?".

Для начала я решил проработать 4 основные игровые локации:

  • Парящие острова
  • Царство грибов
  • Подземные руины
  • Механическая долина

Вооружившись гуглом и Pinterest'ом я собрал рефы и мудборды для каждой локации. Выглядели они примерно так:

После этого снова возник вопрос "а дальше чё?"...

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

Пока я занимался блокингом, наступил июль 2022 и в открытую бету вышла Midjourney - нейросеть, которая генерит изображения по текстовому запросу. На тот момент под капотом была 3 версия сетки. Я, конечно же, пришёл на их Discord-сервер и попробовал себя в роли оператора нейросети :)

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

King, Witch and Dragon. DevLog #24

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

Немного разочаровавшись, я отложил Midjourney в сторонку и вернулся к блокингу уровней.

В декабре 2022 года я закончил работу над блокингом уровней и ИИ - врагов и пришло время вернуться к концептам окружения. И понеслось...

С чего начать?

Я рассматривал 3 кандидата:

  • Midjourney
  • Stable Diffusion
  • DALL-E 2

Немного поизучав тему, у меня сложилось впечатление, что DALL-E 2 больше заточена под реалистичные фото, в то время как мне нужна была стилизованная графика. Поэтому DALL-E я сразу отбросил.

В Midjourney к тому моменту у меня уже закончился триальный период и без оплаты подписки генерить новые изображения она не давала. У меня ещё было свежо первое неочень приятное впечатление и платить за подписку неочень хотелось, особенно когда альтернатывным вариантом была бесплатная опенсорсная Stable Diffusion. На неё и пал мой выбор.

Допрос с пристрастием

С помощью - нескольких - гайдов тут на DTF я без труда разобрался как скачать, установить и настроить Stable Diffusion на локальной машине.

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

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

Это модуль позволяет загрузить своё изображение в SF, проанализировать его разными алгоритмами и получить на выходе текстовое описание того, что нейросеть "видит" на данной картинке. По сути обратный процесс.

И вот тут мне пригодились мои собранные референсы и мудборды. Я "скормил" нейросети все до единой картинки и получил кучу вариаций запроса и ключевых слов для каждой игровой локации.

Так выглядит кусок большой гугл-таблицы, которую я получил по результатам допроса
Так выглядит кусок большой гугл-таблицы, которую я получил по результатам допроса

Это позволило чуть лучше понять как лучше строить фразы в запросе, на что обращать внимание и какие ключевые слова использовать, чтобы получить картинки, похожие на референсы.

После этого, имея всю необходимую вводную информацию, я сел за prompt-crafting и генерацию, непосредственно, изображений.

Первые результаты

За пару вечеров, путём проб и ошибок, мне удалось подобрать стиль, который мне казался приемлемым и более-менее соответствовал тому, что мне хотелось получить на выходе. По сути "стиль" заключался в том, что к описанию того, что должно быть на картинке, в конце приписывалось вот это (с незначительными вариациями):

detailed, masterpiece, high contrast, best quality, 4k, render, unreal engine, award winning, cinematic, fantasy, flat colors illustration

Также я поэкспериментировал с различными сэмплерами (алгоритмами, которые преобразуют шум в изображение) и выбрал для себя 3, которые выдавали наиболее подходящие для меня результаты:

  • DPM++ SDE Karras
  • DPM++ 2S a
  • DPM++ 2M Karras

Также я постоянно использовал скрипт X/Y plot который позволяет одновременной вывести несколько изображений в виде таблицы, при этом в разных столбцах и строках могут использоваться разные параметры. Я использовал семплер как один из параметров таблицы, чтобы видеть как разные семплеры генерят изображение по одному и тому же запросу с одним и тем же зерном (random seed):

Выглядит это примерно так. Одинаковый запрос, одинаковый seed, разные семплеры, разный результат.
Выглядит это примерно так. Одинаковый запрос, одинаковый seed, разные семплеры, разный результат.

После этого я начал генерить картинки для конкретных локаций.

Так как нейросеть генерит картинки из шума, у того, кто пишет запрос, нет полного контроля над тем, что получается и бОльшая часть картинок идет мимо кассы. В среднем я сохранял себе 1 картинку из 10 сгенеренных.

Несмотря на КПД 10%, тот факт, что на создание одной картинки уходит несколько секунд, позволяет за достаточно короткий промежуток времени создать большое количество подходящих изображений.

Таким образом за пару вечеров я смог сгенерировать 100 концептов для первой локации. Примерно через 10 дней у меня было по 100 концептов для каждой из четырёх основных локаций.

Ниже несколько примеров того, что получилось.

ПАРЯЩИЕ ОСТРОВА

King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24

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

ЦАРСТВО ГРИБОВ

King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24

Это, пожалуй, была самая простая локация для генерации. SF достаточно быстро "уловила", что мне нужен лес, в котором растут гигантские грибы размером с дерево и со светящимися шляпками.

ПОДЗЕМНЫЕ РУИНЫ

King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24

Тут даже получились некоторые варианты, похожие на игровой уровень с видом сбоку. Для этого в запрос были добавлены ключевые слова "side view, platformer", но для других локаций они почему-то также хорошо не сработали. Но при этом неочень хорошо передается что они именно подземные.

МЕХАНИЧЕСКАЯ ДОЛИНА

King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24

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

Попытка в обучение

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

Я попробовал несколько итераций обучения с помощью textual inversion и hypernetworks. Я научил SD по запросу рисовать персонажа из игры по аналогии с картинками, на которых она обучалась.

Но когда я пытался использовать "выученное" ключевое слово при генерации концепта или когда пытался сделать inpaint, получалось совсем не то, что хотелось. Персонажа либо не было в кадре вообще, либо он был сильно размыт или искажён. Также сильно подвергался воздействию визуальный стиль всего изображения, несмотря на то, что я обучал сетку как subject, а не как style.

В итоге после нескольких итераций я решил, что не готов тратить на это больше времени и вполне могу довольствоваться концептами без персонажа на них ¯\_(ツ)_/¯

На этом всё? Или нет...

Казалось бы, на этом можно было бы и закончить. Есть 400 картинок, вполне достаточно, чтобы начать работать, лучше я сам не нарисую, что ещё для счастья надо? Но в голове зудела одна мысль...

Я уже имел небольшое представление о том, как составлять "правильные" запросы, как формировать стиль изображения и подумал, что, возможно, стоит дать Midjourney второй шанс, т.к. недавно вышла 4-я версия, в которой обещали заметное улучшение качества получаемых изображений. Тем более что у меня уже были заготовки запросов для всех сеттингов и не нужно было изобретать велосипед с нуля (спойлер: в процессе работы запросы, которые использовались в SF, всё равно заметно переработались, чтобы хорошо работать в MJ).

Я знал сколько времени требует калибровка запроса и какой примерно будет КПД, поэтому решил что базовой подписки будет недостаточно, чтобы полноценно "распробовать" и потестировать MJ, так что сразу взял подписку Standard за $30, которая даёт 15 часов "быстрой" генерации (с приоритетом в очереди) и неограниченное количество "медленных" (relaxed) генераций.

А дальше... да просто посмотрите картинки...

ПАРЯЩИЕ ОСТРОВА

King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24

ЦАРСТВО ГРИБОВ

King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24

ПОДЗЕМНЫЕ РУИНЫ

King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24

МЕХАНИЧЕСКАЯ ДОЛИНА

King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24

А теперь сравните это с первой картинкой парящих островов в начале поста :)

Итого

Возможно, я так до конца и не разобрался с параметрами Stable Diffusion. Возможно, неправильно настроил стиль. Но почему то Midjourney "из коробки" без всяких танцев с бубном и жонглированием параметрами steps, CFG, sampler и прочим, выдаёт результат сочнее, красивее и который гораздо лучше передаёт нужную мне атмосферу.

В общем, пока что, лично для меня

Midjourney 1 : 0 Stable Diffusion

Меня настолько впечатлил результат, что я помимо 4 основных локаций нагенерил ещё несколько концептов для второстепенных локаций:

ДОМ ВЕДЬМЫ

King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24

ТЕМНЫЙ ЛЕС

King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24

ПРОКЛЯТЫЙ ЗАМОК

King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24
King, Witch and Dragon. DevLog #24

ДИСКЛЕЙМЕР №4

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

Не только картинки

Упомянутые выше нейросети не единственные, с чем я попробовал поработать. Также бешенную популярность набирает Chat GPT от open.ai, который представляет собой чат-бота, с которым можно говорить практически на любые темы.

В сети уже можно найти кучу всего, о чем спрашивали Chat GPT, я же решил начать с простого, но при этом оставаться в контексте игры.

Возвращаясь к четырём основным локациям, я решил попросить ChatGPT предложить по 10 вариантов фентезийных и литературных названий локаций, по предложенному описанию этих самых локаций.

King, Witch and Dragon. DevLog #24

Для каждой локации я выбрал по 4 наиболее, на мой взгляд, интересных и перспективных варианта. Ниже оригинальные английские названия, предложенные Chat GPT и мой вольный перевод. Что думаете?

Альтернативное название для Floating islands (Парящие острова)
Cloud Haven (Облачная бухта)
Heavenly Atoll (Райский атолл)
Celestial Archipelago (Небесный архипелаг)
Skyborn Kingdom (Королевство небес)
Оригинал лучше
Альтернативное название для Mushroom kingdom (Царство грибов)
Enchanted Glade (Зачарованная поляна)
Luminescent Forest (Светящийся лес)
Shroomlands (Грибоземье)
Twilight Grove (Сумеречная роща)
Оригинал лучше
Альтернативное незвание для Underground ruins (Подземные руины)
Depths of Despair (Глубины отчаяния)
Lost City of Stone (Потерянный город камня)
Subterranean Sanctuary (Подземное святилище)
Catacombs of Doom (Роковые катакомбы)
Оригинал лучше
Альтернативное название для Clockwork valley (Механическая долина)
Clockwork Kingdom (Механическое / Заводное королевство)
Wasteland of Gears (Пустошь шестерёнок)
Technological Temple (Технохрам)
Forgotten Foundry (Забытая плавильня)
Оригинал лучше

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

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

Я считаю, что среди всех последних расхайпленных IT-трендов, нейросети являются по-настоящему перспективными и полезными, в отличие от всяких метавёрсов и, прости господи, nft.

Что дальше?

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

Также подумаю как ещё можно применить Chat GPT для нарративного дизайна и не только. Если у вас есть идеи или предложения, делитесь ими в комментах.

Спасибо, что дочитали этот пост, который получился гораздо длиннее, чем я думал. Если вам интересен проект и вы хотите "пощупать" его самостоятельно и потестировать ранние билды, заходите на мой Discord-сервер:

Увидимся в следующем девлоге!

6464
18 комментариев

Но почему то Midjourney "из коробки" без всяких танцев с бубном и жонглированием steps, CFG, sampler и прочим, выдаёт результат сочнее, красивее и который гораздо лучше передаёт нужную мне атмосферу.

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

Если же кто-то пытается напрямую монетизировать (продавать) результат работы нейросетей, то тут я на стороне тех, кто выступает за жесткую регуляцию.

Тут вообще веселье. По правилам нейросеток если они сгенерят что то охраняемое АП так что степень сходства будет до уровня плагиата - то к тебе придут. И виноват в этом будешь только ты. При этом АП на генерацию той же миджоры у тебя по правилам Миджоры у тебя нет

4
Ответить

Из рекомендаций.
Рекомендую сразу после генерации делать поиск по картинке в гугле. Там тоже анализаторы стоят и иногда 1 раз в 100 картинок могут даже найти то что легко в основу базы данных что пошла на обучение нейросеток.

8
Ответить

Да, тож используем SD для генерации концептов. Художник видит их, вдохновляется и творит. Очень удобно

2
Ответить

Имхо. Как помощник для художников это отличный вариант.

1
Ответить

Вот такая хуерга тебе бы подошла https://twitter.com/TuxedoPato/status/1609557178884526081

1
Ответить

Чем именно подошла бы?

Ответить

Анимации круто стилизованы

Ответить