Для Dungeon Cult, своей игры про строительство подземелья, я сделал два ролика. В первом камера летит через чёрную дыру к планете, за которой просыпается огромное существо. Во втором мой цифровой двойник жалуется на собственную сборку, показывает фак — и рядом взрывается профессор. Получилось 50 и 25 секунд. Но по дороге метеоры стали похожи на одуванчики, а говорящий персонаж выглядел так, будто молчит.
Сцены собирал с ИИ-агентами: я задавал действие, смотрел результат и отправлял на переделку; агенты писали код, настраивали анимации и запускали рендер. Ниже — переделки, которые действительно изменили картинку, с примерами до и после. Видео можно пропустить: текст понятен и без них. Со звуком, конечно, лучше слышно, зачем понадобились все эти правки.
Музыка понравилась. Переделывать пришлось ролик
Вступление к карте кампании, около 50 секунд. Здесь копия 720p; мастер — 2560 × 1440, 60 кадров/с.
У музыкального фрагмента уже было нужное настроение. Попытки дописать ему окончание мне не нравились, поэтому я оставил исходные 50 секунд и попросил сократить изображение под них. Открытие глаза существа и волну привязали к последнему аккорду — 47,733 секунды. К 49,7 секунды камера должна была закончить движение и прийти к виду карты. После этого стало понятно, сколько времени есть на космос, планету и появление существа.
Дальше я попросил добавить динамики. Агент разметил удары музыки, расставил метеоры, наезды камеры и вспышки. Три последовательных попадания, например, стоят на 27,13, 27,86 и 28,59 секунды. Только кадр от этого начал мигать, а короткие появления глаза выглядели как стрельба. Вспышки пришлось убрать. Вместо них за планетой заранее проходит тёмный силуэт и заслоняет звёзды: ещё непонятно, что это, но движение уже видно.
Принятую траекторию камеры после 37-й секунды больше не трогали. Для следующих правок я ограничивал агенту участок работы: здесь меняем эффекты, а камеру и музыку оставляем. Иначе просьба улучшить несколько секунд снова меняла весь финал.
Взрывы как на детском утреннике
Так я и описал первую версию: «одуванчики». Там были вспышки, пыль и расходящиеся кольца, но облако почти не развивалось. Добавление яркости это не исправляло.
Отвергнутый вариант, фрагмент без звука.
Для следующей попытки агент подготовил огонь и дым в Blender через Mantaflow. Объём симуляции — 20 × 20 × 12 метров, базовое разрешение сетки 160, с дополнительной детализацией до 320. Сохранили 126 кадров, а в сцене масштабировали эффект под планету. Физику столкновения астероида здесь не считали — нужна была форма облака.
Перенести объём в Unreal не вышло: возле поверхности планеты он не отображался, причину до конца не нашли. Поэтому камеру и координаты попаданий выгрузили из Unreal, дым отрендерили отдельно в Blender Cycles и наложили на основное видео. Планету использовали как маску: без неё дым с обратной стороны мог бы оказаться поверх планеты. Слой эффектов считали в ширине 1280 пикселей и увеличивали до 2560, поэтому он немного мягче основного изображения.
На просмотре заметил ещё одну вещь: попадание в океан выглядело как попадание в землю. Девять ударов разделили на пять морских и четыре наземных. Над водой убрали кратер и выжженное пятно, ослабили огонь, добавили светлый пар и волны. Потом сократили подсветку — иначе на воде надолго оставался бледный светящийся диск.
Голос есть, а рот еле шевелится
Во втором ролике нужно было показать Проводника — персонажа с моей внешностью и голосом. Про сборку головы и костюма уже рассказывал. Здесь модель готова, осталось поставить короткую сцену.
25 секунд. Реплика, жест и его последствия для профессора.
Текст новый: «Думал, загружу фото — и можно в игру. Ага. Осталось починить лицо, шею, руки. Зато характер уже работает». Локальная Qwen3-TTS 1.7B Base синтезировала его по образцу моего голоса. На RTX 5060 Ti 16 ГБ загрузка модели и генерация заняли 40,5 секунды; получилось 9,59 секунды звука. Это замер одного запуска, не время создания всей сцены.
Whisper medium проверил, не потерялись ли слова. Затем wav2vec2 помог совместить текст со звуком по времени, а скрипт перевёл разметку в шесть основных форм рта. Между ними были плавные переходы. Всё вроде работало, но на первом просмотре я увидел лишь пару слабых движений губ.
Исправлять пришлось и анимацию, и съёмку. Лицо приблизили к камере. Формы рта стали ненадолго удерживаться, а переходы между ними сократили примерно до 52 миллисекунд: прежнее сглаживание съедало артикуляцию. В паузах рот возвращался в спокойное положение. До и после можно переключить здесь — звуковая дорожка одна и та же. Крупный план оказался не менее важен, чем новые движения губ.
Когда речь устроила, захотелось плавности. В одном из проходов 30 кадров/с превратили в 60 интерполяцией движения, добавили наплывы по 0,2 секунды, мягкое свечение и поправили цвет. Обработка 25 секунд заняла 236 секунд. Промежуточные кадры рассчитывали внутри каждого плана, не через склейки: иначе алгоритм пытается превратить один ракурс в другой. Позже отдельные фрагменты пересняли в Unreal уже при 60 кадрах/с. Принятый звук при визуальных правках копировали без повторного кодирования.
Фак, пауза, профессор
Профессора я добавил уже по ходу. У него есть эффектная смерть в игре — захотелось связать её с жестом Проводника. Начало смерти поставили на 9,3 секунды, разрыв — на 9,6. Проводник после этого разворачивается и уходит, а остатки профессора видны в следующих планах.
Для разлёта использовали 46 фрагментов и 96 коротких струй. Траектории заранее рассчитали с шагом 1/120 секунды и вывели при 60 кадрах/с. Учитывался пол, но не все препятствия игровой карты. Жест не стал боевой способностью: его и смерть профессора свели на одной временной шкале для ролика.
Один из сбоев вообще не имел отношения к эффектам. Копия Sequencer, монтажной шкалы Unreal, сохранила привязки к персонажам старой карты. Последовательность скопировали, а снимала она не тех актёров. В новой сцене привязки пришлось создать заново. Поэтому перед длинным рендером теперь проверяю короткий кусок: тот ли персонаж в кадре, движется ли рот, происходит ли событие в нужный момент.
В этих роликах можно отдельно переделать дым, речь или движение камеры: Unreal держит сцену, Blender считает эффекты, локальные модели работают со звуком, FFmpeg собирает видео, а агенты связывают этапы скриптами. Но принимать результат всё равно приходилось на просмотре — ни успешный рендер, ни отсутствие ошибок не сообщают, что взрыв похож на одуванчик. Оба видео — подготовленные и смонтированные сцены; частоту кадров обычной игры по ним оценивать нельзя.
ссылка на оригинал статьи https://habr.com/ru/articles/1102896/