Самая сложная и долгая часть для автора-одиночки. Тема, вызывающая самые ожесточенные споры в творческой среде. То, что сильнее всего влияет на первое впечатление о проекте. Эта статья — о том, как сделать визуал для настольной игры с помощью нейросетей и всё еще остаться её автором.
Ладно, немного собьем напряжение парой вводных абзацев. Во-первых, это статья по мотивам разработки собственной настольной игры «Переплёты: стычки и чаепития». О том, как вообще рождалась идея своей настолки и какие этапы она преодолевала на старте, смотрите в предыдущей статье цикла.
Во-вторых, сейчас будем говорить только о разработке иллюстраций, зато очень подробно и с кучей примеров. Разработку механик, тестирование, печать и дистрибуцию разберем в следующих материалах.
Почему нейросети?
Если кратко: чтобы игра стала реальностью, а не далёкой фантазией :)
Вот какой набор запросов был у меня:
— сохранить бюджет для печати и рекламы (т.к. издавать буду на собственные деньги);
— соблюсти конкретный стиль (т.к. сразу есть представление, какую игру я хочу);
— иллюстратор должен быть готов к куче правок и долгому циклу доработок (уже есть образ игры, но нет опыта создания — а значит многое еще будет меняться в процессе).
И это та ситуация, где в случае с «живым иллюстратором» можно выбрать только 2 пункта из 3 в лучшем случае.
Нет, безусловно, где-то есть художник, который сделает дешево, в нужном стиле и будет править иллюстрации столько, сколько нужно. Но поиск такого человека — это отдельный проект, который своими масштабами трудозатрат может превысить всю разработку настолки.
И всё это время рядом будет альтернатива, закрывающая все 3 пункта… С одним «но»: огромные репутационные риски, если хоть что-то пойдет не так. Любая ошибка, и проект будет записан в «нейрослоп».
Поэтому добавляем еще одно требование, теперь уже к самому себе. Нужно сделать прям круто! Не воспринимать нейросеть как «сейчас быстро нагенерю картинок», а подойти к ней как к полноценному профессиональному инструменту, где человек сохраняет свою самую важную роль: принятие решений.
Настраиваем себя
Работая с нейросетью, стоит сразу готовиться к тому, что результаты генераций не зависят друг от друга. А значит каждая новая иллюстрация по-умолчанию будет отличаться от предыдущих.
Какие-то из разминочных попыток сделать Кабана
При этом консистентность стиля — пожалуй, главная отличительная черта настоящего художника. Схожесть палитры, линий, степени стилизации, характера заливок: всё это формирует наше ощущение, что иллюстрации в игре сделаны конкретным автором со своим видением.
В работе с нейросетью никто не сделает этого лучше, чем ты сам, человек за экраном. Значит забираем эту часть на себя и сразу же продумываем будущий стиль.
Для «Переплётов» я изначально представлял такую смесь акварели, книжной и диджитал-иллюстрации. Думаю, на это примерно в равной степени повлиял «Эверделл» и тот факт, что на дворе была осень. Хотелось чего-то уютного, спокойного, атмосферного.
Не знаю, насколько это распространенный эффект. Но по себе понимаю, что зимой захотелось бы чего-то более грубого и тёмного, а летом — яркого и сочного.
А теперь лайфхак. Чтобы еще сильнее снизить разброс стиля при работе с нейронкой, советую решить, какой элемент иллюстраций будет константой — то есть постоянно использоваться в изображениях и выступать отправной точкой для каждой новой работы.
В «Стычках и чаепитиях» такой константой стал цвет. Еще когда я планировал комбинации героев в гугл-таблице, каждый из них для удобства получал свой цвет ячеек: лиса красная, кабан оранжевый, кролик зелёный…
И когда дошло дело до их воплощения, цвет стал логичным объединяющим компонентом для всех карт, по-умолчанию принадлежащих конкретному герою. Например, органичный комплект для Лисы — профессия Воришка и артефакт Палка-меч. Пусть доминирующим цветом для всех этих карт будет красный!
Получается, теперь мы сразу можем сообщить нейросети пожелания и по стилю, и по главному цвету. И это реально упрощает задачу, сводя все изначальные генерации к единому характеру.
Думаю, так можно не только с цветом, но и любыми другими компонентами. Например, вы можете решить, что все птицы в вашей игре должны быть на фоне неба, а звери — на фоне кустов. Отлично, теперь вам не придется преодолевать разброс по фонам с каждой новой картинкой!
Развиваем стиль
И вот теперь, когда мы всё это объединили в своей голове, начинаем… разъединять. Попробуем понять, что будет отличать одни иллюстрации от других, чтобы игроку не пришлось терпеть одинаковое месиво перед глазами.
В своей игре я решил, что должна меняться композиция карт, относящихся к разным категориям: существа, призвания, артефакты.
Так существа получили стиль портретов. Призвания — более широкие сцены как бы из глаз героя, обладающих этим самым призванием. Артефакты — предмет крупным планом с минимальным антуражем вокруг.
Всё, последний шажок, и переходим к самой генерации. Представить каждое изображение в деталях! Да, нейросеть заменит нам руки, но не заменит голову. Точнее, она активно будет пытаться это сделать, накидывая много разных вариантов, которые теоретически тоже могут подойти. Но если каждый раз соглашаться на эти компромиссы, можно обнаружить себя среди кучи несогласованных иллюстраций, которые еще и отличаются от вашего изначального видения.
Нееет, нам такое не подходит. А значит каждую иллюстрацию сперва рисуем в своем воображении. Вот наглядный пример — Ворона. У нейронки получались очень классные вороны в духе серьезных дам, умудренно глядящих в вечность. Но по изначальной задумке Ворона должна быть нежной, воздушной и немного наивной. В общем, создавать контраст с более привычными нам образами ворон.
Надеюсь, не только я вижу эту огромную разницу в характерах?
Соблазн «забить» и взять уже мудрую Ворону нарастал с каждым десятком новых генераций. Не поддаться ему помогло именно существование того образа, которого я хочу добиться. Так игра не лишилась милого персонажа, который привносит лёгкий флёр романтизма даже в самую напряженную стычку.
Выбираем сервис
Всё, идём писать промты, осталось только выбрать нейронку. Я работал с MidJourney, потому что с ней уже был опыт и на тот момент она обеспечивала наилучшее качество в том стиле, который мне нужен.
Теоретически, можно комбинировать разные нейросетки, но мне было очень удобно иметь все работы в одном окне и одной системе организации.
Создаём первую картинку
Моей первой иллюстрацией стала уже упомянутая выше Лиса. По опыту, я бы рекомендовал не раздувать сильно свой первый промпт — детали проще скорректировать потом, редактируя отдельные области.
Поэтому вот, с чего всё началось:
anthropomorphic fox, dressed like a thief women, watercolor style, mostly red colors
Это уже даст какую-то базу, с которой можно продолжить работу. Стандартный цикл выглядел примерно так:
— несколько генераций «вслепую», чисто стартовый промт;
— если всё кардинально мимо, добавляем в промт по 1-2 дополнительных параметра, отталкиваясь от наиболее частых неудач в генерациях (например, у Лисы добавилось autumn forest background);
— когда начали получать хоть сколько-то близкий к видению результат, создаём вариации (Vary — Subtle или Strong);
— отбираем лучшую вариацию и переходим к редактированию областей.
С редактированием прям нужно разобраться. Мне кажется, большинство ИИ-ошибок, которые мы можем видеть в изображениях, происходят ровно потому, что кто-то не разобрался с редактированием областей. Или забил.
Мы так делать не будем, поэтому смело жмём на Edit:
Сейчас в MidJourney есть два редактора: базовый и продвинутый по кнопке Open in Edit Tab. Когда я работал над иллюстрациями, у меня был только базовый, так что ориентироваться буду по нему — но в целом отличий не так много.
Итак, пора напрячь глаза! Нужно отсмотреть буквально каждый элемент изображения. Очень внимательно. Трижды. Ошибка может коварно поджидать вас в самых неожиданных местах. Например, что не так с этим ёжиком?
Подсказка: зачем ремню уходить куда-то под сумку?
Если это одна из первых итераций правок, можно сразу выделить на изображении все области, которые вы хотите отредактировать. Как правило, бывают «легкие» и «сложные» ошибки. Например, пуговицы поправить легко, а вот положение лапы — уже сложнее.
Выбрав все такие элементы, вы можете сразу закрыть несколько проблемных зон одной генерацией.
Убираем странные ремешки и непонятный кончик палки
Когда у вас останутся только сложные фрагменты, пора переходить к точечным правкам. То есть выделяем только одну конкретную область и дорабатываем сам промт. Например, если нужно, чтобы в углу стола появилась веточка, стираем весь текущий промт и просто пишем, что хотим такую-то ветку.
Когда получилась идеальная ветка, выбираем следующий фрагмент — допустим, баночки — и начинаем работать исключительно над ними. На такие доработки может уйти еще 10-20 генераций, но оно того стоит.
Совет: выделяйте область с небольшим запасом вокруг, даже если там все нормально. Если выделить объект очень точно, нейросеть будет оперировать только этой зоной и не сможет предложить вам варианты, которые подходят лучше, но занимают чуть больше места.
В моём случае это касалось всевозможных лап и хвостов. Да, иногда нужно просто дать хвосту чуть больше места, чем пытаться втиснуть его в то же место, где был предыдущий :)
Окей, первое изображение есть! Впереди — путь в тысячу миль, но уже будет попроще. Ведь теперь вы можете переиспользовать стиль уже готовой иллюстрации как основу для следующей.
Иногда это сработает, иногда нет. Но пробовать стоит. Для этого открываем картинку-референс и выбираем Use — Style. Теперь она прикрепится к вашему промту как образец стиля. Можно выбрать несколько, но больше трёх не советую: получится сомнительная мешанина.
В моём случае это лучше всего работало для генерации изображений, соответствующих картам из комплекта одного героя — например, как Лиса-Воришка с Палкой-мечом, где все картинки должны быть с доминирующим красным цветом.
Просто делаем
Мы на этапе, где нужно просто делать, и делать много. Сейчас я покажу побольше примеров для общего понимания, с какими ситуациями вы можете столкнуться.
Здесь примерно половина от всех попыток
Ох этот Крот! Иногда нейросеть элементарно не знает, как должно выглядеть существо. Сперва крот выглядел как хомяк, потом как мышь. А еще он упорно не хотел залезать внутрь своего туннеля.
Пришлось собирать крота буквально по частям. Берем более-менее похожего хомяка. Редактируем нос до чего-то типа пятака. Открываем миллион фоток кротов в соседней вкладке и перебираем лапы, пока не получим похожие.
Туннель в итоге сгенерировал отдельно и поставил туда уже готового крота, используя функцию Use — Image. Это почти как копирование стиля, только изначальное изображение переносится еще детальнее.
Концепцию Палки-меча нейронка тоже не понимает: знает либо палку, либо меч, но никак не вместе. Окей, разбираем наш артефакт на части:
small broken wooden stick with long knots on both sides, one sharp end, fantasy item for a card, watercolor style, book illustration style, red autumn leaves, fully filled background
А здесь у нас яркий пример того, что иногда придется очень сильно детализировать части запроса. Для Леса святлячков вышло так:
very dark forest full of fireflies, small luminescent mushrooms grow below, giant trees with wide spreading crowns and abundant foliage completely cover the sky, can’t see the sky, old trampled path in the center, wide panorama view, watercolor style, mostly purple colors
Здесь же можно встретить достаточно редкое выражение abundant foliage (обильная листва). Во всяком случае, лично я такое еще не встречал. Так вот — иногда вам может помочь перебор вообще всех возможных слов и выражений, которые только сможет выдать переводчик. Так вы отсечете любые возможные двусмысленности.
Допустим, слово leaves нейросеть может воспринять не только как листья, но и как что-то связанное с уходом откуда-то. Зато с foliage всё достаточно однозначно.
Ну а над локацией Бумажной бухты мы с девушкой сидели несколько часов. Здесь даже не буду вдаваться в детали, до сих пор травмирующие воспоминания.
Зато дам еще пару советов.
В MidJourney можно изменить пропорции изображения, сгенерировав недостающую часть. Делается это через параметр Scale в редакторе — можно уменьшить все готовое изображение, чтобы нарастить границы вокруг, или выбрать другое разрешение: например, сделать квадрат из 9:16.
Рекомендую пользоваться этим только в крайнем случае, а чаще все же стараться изначально продумать изображение так, чтобы оно встало в нужную вам пропорцию. Дело в том, что такая генерация создаёт заметный переход от изначальной зоны к новой.
Справа как раз наглядный пример неудачной дорисовки
Единственное, когда это действительно пригодится — совсем немного отодвинуть ключевой объект от краёв, чтобы его не перекрывали элементы макета или он хорошо встал под типографские вылеты.
Еще, если решите тоже поработать с акварельным стилем, добавляйте к своему промту параметры типа fully filled background или solid background. По умолчанию, у сгенерированной акварели будут пустоты, как будто мы так небрежно закрасили не весь фон. Параметры выше помогут от этого избавиться и сделать изображение цельным.
Слева одна их первых попыток сделать Корзинку, когда я забыл указать этот параметр
Милые детали
Отдельным пунктом упомяну одну мысль, которая должна идти фоном во всём этом процессе. Милые детальки — это круто!
Помимо явно выраженного авторского стиля, это одна из тех вещей, которые формируют общее впечатление от иллюстраций, делают их живее и интереснее.
Продумать детальки стоит изначально, а добавлять проще всего на этапе редактирования областей.
Так в Замёрзших оврагах появился излишне отважный заяц на сноуборде, а на Тыквенных грядках спрятался мышонок:
Да и в принципе получается интереснее, если картинка не просто показывает, а рассказывает. В «Переплётах» это лучше всего проявилось на картах призваний. Например, Пират совсем недавно прибыл на сушу с тыквенной контрабандой. Поэт явно нашел своё уединённое место для вдохновения. А наточенные поварские ножи подсказывают, что не стоит недооценивать эту добрую профессию.
Немного о пост-обработке
Как не объясняй нейросетке цвета, они всё равно будут менять оттенок от картинки к картинке. Чтобы не выдать себя такой оплошностью, идем в Photoshop и выбираем иллюстрацию-референс, где первым делом откорректируем цвета до нужных.
Затем открываем следующую иллюстрацию из той же цветовой палитры. Выбираем Изображение — Коррекция — Подобрать цвет. В пункте Источник указываем наше первое изображение. Ползунок Ослабить выставляем примерно в диапазоне 50-70, а остальные двигаем до тех пор, пока не получим максимально схожий оттенок.
Переводим в CMYK… Ладно, про это в одной из следующих статей, когда приблизимся к вопросу печати.
И снова человек
Мы начали эту историю с важности человека во всём процессе. Тем же и закончим.
Когда все очевидные косяки будут вычищены, цвета откорректированы, а картинки выучены до каждого сантиметра… дайте посмотреть кому-нибудь еще. К этому моменту вы уже столько раз видели свои изображения, что глаз замылился, а лёгкая усталость подбивает на компромиссы.
Подойдет любой свежий и критичный взгляд. Еще круче, если это будет взгляд реального иллюстратора или хотя бы человека с художественным образованием. У меня в этом плане был чит-код: моя девушка иллюстратор :)
И несмотря на предельную авторскую дотошность на всём пути, часть картинок все равно потребовалось подправить, некоторые дополнить, а пару переделать практически с нуля.
Понятно, что абсолютно всех ошибок не избежать. Даже сейчас, спустя все итерации этого большого процесса, я замечаю несколько иллюстраций, к которым можно придраться. Но уже очень хорошо, если всё это останется в мелочах. Если у картинок грамотная композиция и перспектива, реалистичные светотени и обоснованное содержание, небольшие грешки начинают смахивать на художественную вольность, а не типичный косяк нейросетей.
Послесловие
И вот такая красивая игра у нас в итоге получилась! Самые атмосферные, красочные и милые «Переплёты: стычки и чаепития»:
Работа с нейросетью позволила сохранить примерно 160 000—200 000 рублей бюджета, а еще дала возможность быстро вносить правки, когда это требовалось.
Изначально поднимать тему нейронок публично было очень страшно. Когда появился первый вопрос «а кто художник», мы два часа сидели в баре и перебирали формулировки для ответа. Но по мере того, как я видел всё больше позитивного отклика, накапливалась и уверенность в том, что всё получилось хорошо — а значит и стесняться здесь нечего.
Да, сейчас я смело могу сказать, что у меня получилась красивая игра! По плану еще около трех статей, где мы разберем геймплей, подготовку к печати и продажи.
Еще накопилось достаточно мыслей об этическом аспекте использования нейросетей и том, как на это реагирует общество. Если интересно почитать такой материал вне рамок основного цикла о разработке, пишите в комментариях — а я постараюсь собрать мысли в кучку :)