Как я делал кино с помощью нейросетей

В прошлой статье я рассказывал,  как использовал нейросети в создании украшений. Сегодня расскажу, как с помощью нейросетей делал фильм для планетария.

В итоге этот фильм получил приз на фестивале купольных фильмов в Токио

Горизонтальная афиша к фильму

Горизонтальная афиша к фильму

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

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

Неизменная рыба при присутствии в запросе

Неизменная рыба при присутствии в запросе

Или просто рыбий глаз. Сложно спорить с тем, что это fisheye

Или просто рыбий глаз. Сложно спорить с тем, что это fisheye

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

Поэтому панорамы пришлось собирать старым дедовским способом. Склеиванием прямоугольных картинок и преобразованием получившегося с помощью полярных координат. Сами прямоугольные картинки я делал через Mijorney. Мне нужны были максимально длинные изображения, поэтому я задавал экстремальное соотношение сторон 16:1. К моему удивлению, неросеть не возражала, хотя, конечно такую пропорцию не выдавала. Но это был максимально вытянутый формат из возможных (тогда это была еще версия v3. V4 еще так не умеет)

Панорама - исходник. В общей композиции таких требовалось три или четыре

Панорама — исходник. В общей композиции таких требовалось три или четыре

Кстати, при сшивке я также использовал нейросеть DALL-E 2. Она оказалась удобной для склейки панорам.

Сейчас, когда работа закончена, появились удобные средства, которыми можно получить эквидистант и из него уже проекцию фишай. Например, сервис https://skybox.blockadelabs.com/ который генерирует360 панорамы по запросу, или LatentLabs360 — LORA для создания таких панорам в SD. Насколько спустя всего пару месяцев стало проще жить :)

Просто создать панораму недостаточно. Даже в двухмерной мультипликации. Чтобы сцена жила, в ней должны быть объекты. Когда камера двигается, объекты двигаются относительно фона и друг-друга, так мы видим пространство. В обычной анимации достаточно расположить разные планы на разных слоях и двигать их с разной скоростью. В случае же сферического кино так, увы, не выйдет, поскольку у нас настоящее трехмерное пространство, и объекты размещены вокруг нас. Собственно, это и пришлось делать, плоскости с нарисованными объектами были расставлены вокруг камеры. Эти плоскости повернуты к камере, и когда она движется, они тоже поворачиваются вслед за камерой. Поэтому мы никогда не увидим такую плоскость с торца. К счастью, все это можно делать в AAE, и нет необходимости использовать 3D софт.

Есть и другой способ создания пространства. Добавление параллакса с использованием карты глубины. Именно так и был добавлен объем в интерьер хижины. Stable Diffusion умеет работать с нейросетью Midas, создающей карту глубины.

Карта глубины элемента интерьера

Карта глубины элемента интерьера

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

Вообще анимация в этом ролике была трех видов:

  1. Классическая анимация, когда слои с объектами анимируются стандартными средствами — с помощью эффектов или марионеточной деформации. Так анимировались свечи, деревья, летящие птицы.

  2. Анимация персонажа. Была сделана с помощью EbSynth. Чуть позже расскажу подробнее.

  3. Анимация сновидений. Это тот вид анимаций, который нейросети умеют делать лучше всего. Поэтому выбор колыбельной для экранизацией нейросетью — очень удачный выбор. Одни образы перетекают в другие по мере смены параметров генерации и ключевых слов. Для этого к Stable Diffusion подключаются такие скрипты, как Deforum или Animation. Единственный недостаток — так можно создавать только сноподобные анимации или психодел.

Чуть подробнее расскажу про анимацию персонажа. Сложность состояла в том, что анимировать позу в то время нейросеть еще не умела. Сейчас с этим гораздо лучше, есть StableNet, в котором позу можно выставить с помощью манекена. А если анимировать манекен, то по этой анимации можно потом генерировать движущегося персонажа (все до сих пор не очень хорошо, например, на персонаже может меняться одежда или он будет «мерцать», но это гораздо лучше, чем ничего). Тогда же ничего подобного не было. И потому я использовал EbSynth.

Часто можно встретить утверждение, что EbSynth — это нейросеть. На самом деле, это не так, это вовсе никакая не нейросеть. Эта программа просто берет видео, смотрит как в нем двигаются одни пиксели относительно других, и переносит это движение на другую картинку. Та же марионеточная деформация, что в фотошопе.

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

Главная героиня созданная в Миджорней

Главная героиня созданная в Миджорней

После этого я сделал 3D модель с таким же силуэтом. И анимировал его в UE5. Таким образом, я получил последовательность кадров, с которой EbSynth смог снять движение.

Анимация манекена

Анимация манекена

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

Так же анимировалась и маска

Маски отдельных частей

Маски отдельных частей

Какие выводы у меня остались после этой работы

  1. Использовать нейросети в творчестве — возможно

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

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

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

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

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

Проекция на купол

Проекция на купол

© Habrahabr.ru