Как ИИ-агенты помогли поставить сцены для Dungeon Cult в Unreal Engine 5
Для игры Dungeon Cult были подготовлены два сюжетных ролика. В первом камера проходит через чёрную дыру к планете, за которой пробуждается гигантское существо. Во втором цифровой двойник разработчика произносит реплику, показывает неприличный жест, после чего рядом эффектно погибает профессор. Хронометраж сцен составил около 50 и 25 секунд.
Постановкой занимались с помощью ИИ-агентов: автор описывал нужное действие, проверял результат и отправлял сцену на доработку. Агенты писали вспомогательный код, настраивали анимации и запускали рендер. При этом итог оценивался вручную: формально успешный рендер не гарантирует, что взрыв не будет похож на одуванчик, а говорящий персонаж действительно выглядит говорящим.
Космическая сцена и синхронизация с музыкой
Первый ролик собирали под уже готовый музыкальный фрагмент длительностью около 50 секунд. Финальный аккорд должен был совпасть с открытием глаза существа и волной на отметке 47,733 секунды, а к 49,7 секунды камера должна была прийти к виду карты. Поэтому длительность космического пролёта, показа планеты и появления существа определяли исходя из музыкальной структуры.
Для усиления динамики агент разметил музыкальные акценты, расставил метеоры, движения камеры и вспышки. Однако результат оказался слишком нервным: кадр начал мигать, а последовательные появления глаза напоминали стрельбу. Вспышки убрали, а вместо них добавили тёмный силуэт, который проходил за планетой и временно закрывал звёзды. После утверждения траектории камеры участок финала за 37-й секундой больше не меняли, ограничивая дальнейшие правки только эффектами.
Дым и огонь: Blender вместо Unreal
Первые взрывы выглядели плоско: были вспышки, пыль и расходящиеся кольца, но облако почти не развивалось. Для следующей версии огонь и дым подготовили в Blender с помощью Mantaflow. Объём симуляции составил 20 × 20 × 12 метров, базовое разрешение сетки — 160, с детализацией до 320. Всего сохранили 126 кадров, а затем масштабировали эффект под планету.
Перенести объём непосредственно в Unreal Engine не удалось: рядом с поверхностью планеты он не отображался, а причину найти до конца не получилось. Поэтому из Unreal выгрузили камеру и координаты попаданий, а дым отрендерили отдельно в Blender Cycles и наложили на основное видео. Планету использовали как маску, чтобы облако с обратной стороны не оказалось поверх её поверхности. Эффект считали в разрешении 1280 пикселей по ширине и увеличивали до 2560, из-за чего он получился немного мягче основного изображения.
Отдельно переработали попадания в воду. Изначально они выглядели так же, как удары по суше, поэтому девять столкновений разделили на пять морских и четыре наземных. Над водой убрали кратеры и выжженные пятна, ослабили огонь, добавили светлый пар и волны. Затем подсветку дополнительно сократили, чтобы после удара на поверхности не оставался слишком заметный светящийся диск.
Проводник, синтез речи и липсинк
Во втором ролике появился Проводник — персонаж с внешностью и голосом автора. Для реплики использовали локальную модель 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 Engine отвечал за сцену и камеру, Blender — за объёмные эффекты, локальные модели — за звук и обработку речи, FFmpeg — за сборку видео, а ИИ-агенты связывали процессы скриптами. Такой подход ускоряет постановку, но не отменяет ручной проверки. Оба ролика являются заранее подготовленными кинематографическими сценами, поэтому их частоту кадров и эффекты нельзя напрямую считать характеристиками обычного игрового процесса.


