Найти тему
Кир Ященко

Как сделать 3D анимацию из 2D при помощи нейросетей

Оглавление

Недавно я задался вопросом, а могут ли помочь нейросети в создании мультфильмов? И ответ - безусловно, да! Более того, нейросети явно способны на большее. Сегодня мы сделаем лже-объемную анимацию при помощи Midjourney и других бесплатных нейросетей.

Пример 3D анимации из плоской картинки от Миджорни
Пример 3D анимации из плоской картинки от Миджорни

Нам понадобиться:

Если вы не знаете, как пользоваться Midjourney бесплатно, посмотрите это видео. В нём я наглядно показал, как можно обойти ограничение в 25 бесплатных картинок.

Шаг 1. Генерируем фон

Итак, идем в Midjourney и генерируем фон. Сделать это можно по видео, на которое я сослался выше. Можно использовать один из этих запросов:

А. Для создания аллеи идущей вдаль:

/imagine prompt: city alleyway vanishing point in middle, cantral :: low-poly style, hi detailed, cool colors, blender render :: --ar 3:2 --no people --ar 16:9

Б. Для создания комнаты:

/imagine prompt: an empty room :: cartoon Studio Ghibli style, cartoon drawing comic, minimalistic, chieldish, watercolar style, by hayao miyazaki, pastel colors :: --ar 3:2 --no boy --no people

Я прогнал запрос через Midjourney несколько раз. Из того, что получилось, выбрал вот эту комнату:

Далее, я воспользовался кнопочкой "Upscale Redo", чтобы получить наибольшее разрешение картинки в Midjourney. Открыл в браузере и сохранил полученную картинку.

Upscale Redo → Detailed Upscale Redo → Клик по картинке → Открыть в браузере → Правой кнопкой на картинку → Сохранить изображение как
Upscale Redo → Detailed Upscale Redo → Клик по картинке → Открыть в браузере → Правой кнопкой на картинку → Сохранить изображение как

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

Шаг 2. Увеличиваем разрешение картинки

Я попробовал три бесплатные нейросети по увеличению разрешения:

Лучше и быстрее всего (на мой взгляд) с нарисованной картинкой справилась ImageUpscaler, однако если вы увеличиваете фото, результат может быть иным.

Увеличиваем качество изображения при помощи нейросети
Увеличиваем качество изображения при помощи нейросети

В целом, я не стал страдать перфекционизмом и перешел на следующий этап.

Шаг 3. Создание глубины

Способ «А» — простой

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

И всё, что нужно - это только регистрация. Пробная версия бесплатна:

Разрешение при экспорте из бесплатной версии так себе, но выглядит круто.
Разрешение при экспорте из бесплатной версии так себе, но выглядит круто.

Уже наша картинка как-будто бы стала объемной. Однако, в этом сервисе мы не сможем управлять камерой так, как захотим. Настройки весьма ограничены. И всё, что мы можем - это скачать "карту глубины" типа такой:

Карта глубины, чтобы сделать "иллюзию объема"
Карта глубины, чтобы сделать "иллюзию объема"

Аналогичную карту можно сделать, например, в нейросети MiDaS. Такие карты делаются, чтобы объяснить 3D программам, где нужно "продавить" плоскую картинку, чтобы она казалась объемной.

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

Способ «Б» — упоротый

Я скачал приложение fspy, а также его плагин для Блендера. На сайте есть подробная инструкция по установке, не буду вас грузить. Само приложение после загрузки выглядит так:

Окно приложения FSpy - бесплатной нейросети для создания 3D из 2D
Окно приложения FSpy - бесплатной нейросети для создания 3D из 2D

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

Располагаем оси X, Y и Z вдоль линий на нашей картинке.
Располагаем оси X, Y и Z вдоль линий на нашей картинке.

Я показал этой программе, границы пола (при помощи зеленых линий оси Y) и высоту задней стенки (при помощи синих линий оси Z). Можно проверить себя включив слева "сетку" и "расстелив" её на полу комнаты.

Когда я убедился, что всё хорошо, я сохранил файл (File → Save As) с разрешением *.fspy. В Блендере же установил и активировал одноименный плагин с их же сайта.

Установка плагина FSPY: Edit → Preferences → Addons → Install → Выбрал zip-архив с плагином → Нажал галочку, чтобы его активировать
Установка плагина FSPY: Edit → Preferences → Addons → Install → Выбрал zip-архив с плагином → Нажал галочку, чтобы его активировать

Шаг 4. Делаем псевдо 3D сцену

Теперь открываем в Blender наш файлик, созданный программой FSpy.

На скриншотах выше я показал, что именно делал. Открыв пустую сцену в Блендере и удалив всё лишнее: базовый куб, камеру и свет, я приступил к созданию объема. Последовательность примерно такая:

  1. Загрузил файлик с разрешением .fspy и переключился на вид из камеры
  2. Создал новую плоскость (Shift+A → Mesh → Plane)
  3. Достроил из этой плоскости "коробку", похожую на мою комнату (Edit mode → E → G+Z и потом соединил потолок и заднюю стену при помощи F). Коробка теперь состоит из 3-х стен, пола и потолка.
  4. Наложил текстуру на вкладке Shading: создал для "коробки" новый материал, удалил стандартный Principled BDSF и нажал Ctrl+T (чтобы вызвать Node Wragler) и открыл нашу текстуру из Midjourney.
  5. Добавил два модификатора: Subdivision (Simple, 5, 5) и UVProject (UVMap, Aspect ratio - разрешение нашей картинки, Object - наш файлик *.fspy). А также поменял в настройках текстуры "Repeat" на "Clip".
  6. Дублировал камеру (Shift+D) и назначил её основной (Правый клик → Set active camera). Предварительно заблокировав старую, чтобы она не двигалась и не вращалась.
  7. Теперь я могу переключаться между камерой и сценой через NumPad 0. Выглядит круто!
"Коробочка", которая получилась после этих 7 шагов.
"Коробочка", которая получилась после этих 7 шагов.

Если перечисленные выше 7 пунктов для вас - лишь набор непонятных слов, приглашаю вас пройти мой курс "Блендер для художников". После этого, вы легко проделаете все эти шаги в этой программе.

А нам осталось лишь довести до идеала нашу 3D-сцену. Вернее лже-три-дэ сцену 😀

Шаг 5. Убираем лишние объекты

Этот шаг совсем не обязателен, но меня раздражали объекты, "размазанные" по стенам комнаты. Например, мне не нравится как выглядит горшок с деревом в левом дальнем углу.

Я просто выделю объект Фотошопом (Selection Tool сделает это быстрее всего) и сохраню, как отдельную PNG-картинку. То же сделаю с телевизором и хламом слева.

Пример работы инструмента Selection Tool, довольно небрежной и быстрой
Пример работы инструмента Selection Tool, довольно небрежной и быстрой

В общем, я загрузил эти объекты отдельными плоскостями в Блендер. При помощи аддона "Image as planes". Получилось так:

Стол, деревце и тумбочка обычными PNG плоскостями с прозрачностью.
Стол, деревце и тумбочка обычными PNG плоскостями с прозрачностью.

Осталось убрать "размазанные" копии объектов со стен. Взгляните на телевизор: Когда поворачиваешь камеру, видно, что он просто "нарисован" на стене (картинка выше). Поэтому мы заменим его на плоскую картинку перед камерой, а со стены сотрём.

Для этого я воспользовался нейросетью RunWay, а конкретно её функцией "Erase and Replace", которая позволяет вырезать объекты с любого фото или рисунка.

Регистрируемся в РанВей и выбираем приложение "Erase and Replace"
Регистрируемся в РанВей и выбираем приложение "Erase and Replace"

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

Берем ластик, выделяем нужный объект, пишем что-то вроде "An empty corner of the room"
Берем ластик, выделяем нужный объект, пишем что-то вроде "An empty corner of the room"

В ответ нейронка предложила мне 4 варианта, как может выглядеть пустой угол комнаты. Я выбрал 4-й и нажал "применить".

Результат после удаления дерева в углу экрана
Результат после удаления дерева в углу экрана

Тоже самое проделал с остальными ненужными объектами. Сервис дает 25 бесплатных генераций, чего хватило мне с головой. Затем я скачал полученную картинку и обновил текстуру в Blender'е.

Обновляем текстуру нашей "коробочки" в блендер, размещаем объекты на места
Обновляем текстуру нашей "коробочки" в блендер, размещаем объекты на места

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

С первого взгляда и не скажешь, что это плоская картинка.
С первого взгляда и не скажешь, что это плоская картинка.

Собственно, любой нормальный человек на этом бы и остановился. Но где вы видите тут нормальных? Продолжаем!

Шаг 6. Анимация и финальный штрих

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

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

Финальная сцена после обработки: все объекты нарисованы нейросетью в 2D
Финальная сцена после обработки: все объекты нарисованы нейросетью в 2D

Можно ещё навалить эффекты на вкладке Compositing и размыть фон (сфокусировать камеру, например, на улитке). Но это уже вкусовщина. В целом, результат и так прекрасен.

Шаг 7. Кайфуем

Наша 3D сценка готова! Все объекты на ней созданы нейросетью в 2D. Хотя создается полная иллюзия объема.

На создание такой сцены у меня ушло пара часов. Рисуя фон в настоящем 3D (с текстурами, объектами и освещением) - ушла бы пара дней, если не неделя. Посему, правомерным считаю просить поставить лайк за экономию вашего времени.

Вот и прошу 🙃

А ещё от души приглашаю изучить:

Приходите, подписывайтесь и всё такое.

Прекрасных вам анимаций!

Ваш, Кир Ященко.

PS. - Ну и конечно, жду умных вопросов в комментариях.