Видеопродакшен в Unreal Engine 4
Текст написан преимущественно для ребят из моушен-дизайн индустрии, чтобы рассказать им, что скрывается за быстрым рендером, можно ли использовать игровые движки в видеопайплайне и к чему нужно готовиться при работе с движком. Дядьки, что делают игры, по идее, все это и так знают ;) Но повторить и систематизировать — всегда полезно. Статья будет состоять из трех разделов: сначала я познакомлю вас с возможностями движка, затем покажу варианты использования и, наконец, напомню о текущих ограничениях. Будет много видосиков и примеров.
Полная интерактивность
Выходите за рамки привычных видеоформатов и пайплайнов классических видеопродакшенов. Вы получаете практически полный контроль над картинкой в реальном времени: пользователь может выбирать сценарии происходящего на сцене, влиять на видеоряд, мгновенно заменять объекты в сцене, взаимодействовать с объектами. Это и возможности для архвиза, когда можно походить, потрогать, поменять фасоны, мебель и так далее. Это и форматы виртуальной и дополненной реальности, конечно же. То есть на выходе у вас будет не видеоролик, а полностью интерактивный продукт, который вы сможете запрограммировать как угодно. Для многого из этого не нужно знать C++ или другие сложные языки программирования. Все вполне делается на языке визуального программирования Blueprints. А это просто построение алгоритмов в виде блок-схем и соединение нужных нод. Вполне реально быстро выучить под свои задачи. А наличие шаблонов и ассетов на маркетплейсе делает эту задачу еще проще.
Красивая картинка
Совершенно внезапно прошли те времена, когда на рендер из игровых движков нельзя было взглянуть без слез. Сегодня Unreal Engine предлагает инструменты, с помощью которых можно добиваться достойного рендера, которого вполне может хватить за глаза под многие задачи. PBR материалы, глобальное освещение, партикловые системы, волюметрики — все это помогают делать красивую картинку. Epic Games настроена на развитие в направлении записи красивых рендеров — об этом говорят апдейты секвенсора, камер и релиз Unreal Studio. В отдельной статье я собираю красивые рендера на движке, хотите познакомиться с возможностями Unreal Engine — заглядывайте.
Скорость рендера
Основная причина, по которой моушен-дизайнеры и аниматоры открывают Unreal Engine — конечно же, скорость рендера. И здесь ему действительно есть, чем похвастаться. Да, если вам нужны стабильные 24 кадра в секунду на больших и сложных сценах, нужно будет приложить некоторые усилия для оптимизации. Но, зачастую, и без нее вполне хватает скоростей типа 2-6 секунд на кадр в разрешении 4К. То есть из достаточно высокой скорости рендера (по сравнению с нерилтаймовыми решениями) вытекают такие преимущества как большие разрешения и оперативность внесения правок. Ролики в 4К будут рендерится не сутками, а в пределах часа. Внезапные правки больше не потребуют лишних затрат на рендер-ферму.
Помимо этих трех пунктов ожидается внедрение Octane Render в Unreal Engine. Уже сейчас можно попробовать — бесплатная публичная бета доступна.
Новая технология RTX и поддержка DXR в Unreal Engine позволит еще больше повысить качество графики в игровых движках и как-то порешать что-то с рейтрейсингом.
Выход Unreal Studio с его датасмитом позволяет автоматически переносить некоторые материалы из V-Ray в Unreal Engine. Да, V-Ray как и Octane Render тоже интегрируется в движок. Также есть интеграция с Cinema 4D и работа с .c4d сценами через датасмит.
Ну и в целом, Unreal Engine — бесплатный софт (пока вы официально не зарабатываете с продуктов на движке больше $3,000 в квартал, иначе 5% с продукта; Unreal Studio пока бесплатна в бете, но, скорее всего, станет платной на релизе в сентябре 2019), который постоянно развивается, расширяется и уже все больше просачивается в видео индустрию.
ДА:
— Презентационные ролики, интро
Движок неплохо подходит для роликов-презентаций или для рендера несложных интрошек.
— Интерактив (VR, архвиз, студии)
Различные VR инсталяции и проекты, визуализация интерьеров и экстерьеров, по которой можно прогуляться в реальном времени, виртуальные студии и даже телешоу с наложением графики в реальном времени.
— Ролики с большим количеством растительности и объектов
Большие ландшафты, трава, леса — можно быстро и удобно собирать на движке, а затем также быстро рендерить.
— Игровые и подобные им синематики
Видео с персонажными анимациями, где явно не требуется фотореалистичность. Это могут быть просто рекламные ролики или синематики к играм. А если игра, к которой нужно сделать синематик, разрабатывается на Unreal Engine, задача будет еще проще.
— Некоторые виды видеомаппинга и в общем-то все ролики, которые подходят под критерий: сжатые сроки, большие разрешения (до 8К)
НЕТ:
— Броадкаст дизайн
Огромное количество стекла, шурешек и отражений — для такого Unreal Engine пока не подходит. Далее поймете — почему.
— Ролики, где важны крутые честные отражения (пока что — нет)
По тем же причинам, что и броадкаст.
Однако развитие RTX технологии, в принципе, даже сейчас начинает помаленьку эту проблему решать. На видео пример работы RTX в Unreal Engine:
— Фотореалистичный рендер
Если вам нужен рендер, который нельзя отличить от реальности, то вам пока не в игровые движки. Да, на Unreal Engine есть несколько примеров довольно крутой картинки в статике. Но в анимации до нерилтаймовых решений игровая графика пока не дотягивает. На видео ниже — пара примеров статичного фоторила в Unreal Engine:
— Видео со сложными визуальными эффектами
То, что делается в Houdini — пусть остается в Houdini :)
Переносить сложные физические явления и симуляции в игровые движки пока довольно сложно. Гораздо проще для видео отрендерить непосредственно в 3D редакторе.
Сага о рейтрейсинге
Основное ограничение, на мой взгляд, в игровых движках (хотя по сути это то, что дает преимущетсво в виде быстрого рендера) — отсутствие рейтрейсинга (трассировки лучей) в привычном для нас понимании (привет, растеризация). Просчитывать огромное количество лучей — довольно непростая задача, требующая как времени, так и ресурсов компьютера. Поэтому в большинстве игровых движков для того, чтобы сохранять стабильный рендер 30-60 кадров в секунду используются различные ухищрения, чтобы каждый кадр не считать лучи. Фейкование методов рейтрейсинга приводит к проблемам с тенями, отражениями и глобальным освещением (Global Illumintation).
Глобальное освещение — по сути, совокупность освещения прямого (свет, исходящий от источника света по прямой) и непрямого (отраженные отскоки света ото всех объектов в сцене).
Даже если по качеству света нам достаточно всего одного-двух отраженных отскоков света — все равно это огромное количество лучей, которые надо рассчитать. Делать такое решениями из коробки на среднестатическом компьютере пользователя каждый кадр — ситуация, стремящаяся к невозможности. Поэтому в движке есть деление источников света на динамические и статические. Динамические считаются в рилтайме, могут двигаться и изменяться и поэтому используют только прямое освещение. Статические источники будут давать прямое и непрямое освещение с заданным количеством отскоков, но и просчитываться будут заранее (просчет может занимать часы для одной сцены), не изменяются по ходу игры и результат их просчета записывается в лайтмапы, которые потом накладывается в виде текстур тени на объекты (поэтому у объектов должна быть нормальная UV развертка под лайтмапы), которые тоже должны быть статическими и не двигаться, иначе они не будут участвовать в просчете отскоков непрямого освещения.
Вот и получается, что для сохранения производительности в Unreal Engine в глобальном освещении в просчетах непрямого света у нас не участвуют объекты, которые двигаются, и источники света, которые двигаются.
Идем дальше — отражать всю сцену в глянцевом объекте тоже дорого для производительности. Это опять пускать и считать кучу лучей. Поэтому мы используем инструменты для запекания всех статичных объектов сцены в отражение, а для динамичных используем SSR (Screen Space Reflections) — что вижу на экране в данный момент, то и отражается. То есть пока отражающий и движущийся объект в поле вашего зрения — с отражением вроде все ок. Но стоит движущемуся объекту уйти из поля зрения вашей камеры — он тут же пропадает и из отражения первого объекта, что порождает кучу визуальных артефактов. При желании можно накостылить камеру в объект и проецировать результат из нее на отражения, но это тоже не панацея (для плоских объектов есть еще Planar Reflection).
Ну и тени. Для теней, получаемых непрямым освещением все понятно. А вот от динамических источников тени довольно примитивны. Например, размыть их еще как-то можно, а получить что-то такое — уже нет:
Разбавлю все же эти переживания двумя небольшими ложками меда:
— существуют кастомные сборки движка с технологией nVidia VXGI — воксельное динамическое глобальное освещение. Да, fps падает до неиграбльного (но кого это интересует, когда мы тут за видео говорим), но мы получаем просчет непрямого освещения в реальном времени для всех объектов (хотя с отражениями по прежнему не все так гладко).
— и введение DXR в движок из коробки (соответственно и поддержки nVidia RTX), что пока работает мальца криво-глючно (на версии 4.23), но в перспективе даст нам практически рейтрейсинг в реальном времени с блекджеком, динамическим глобальным освещением и отражениями.
Материалы
Исходя из вышесказанного, имеем проблемы с материалами. Это довольно примитивное стекло\вода, которое очень трудно сделать красивым и реалистичным. Это проблемы с отражениями на материалах — либо комбинация SSR и статических отражений, либо всевозможные костыли для полностью динамических отражений. Это и очень простое SSS (подповерхностное рассеивание) с минимумом настроек и возможностей. Да, очень круто иметь такое в играх, но мы сейчас говорим о видеопродакшене, планки которого ускакали далеко вперед.
Сложные анимации, физика
Невозможность из коробки и без костылей использовать в роликах сложные лицевые и мышечные анимации. Довольно примитивная физика взаимодействий и динамика из коробки. Системы частиц имеют большие ограничения и полное отсутствие флюидных симуляций — не думаю, что кто-то мог ожидать это от игрового движка, но на всякий случай уточню.
Ну и всякие мелочи
Ограничения в выводе видео в 8К из коробки. Да, рендернуть маппинг в 16К за раз не выйдет. Хотя я встречал на CG Эвенте парня, который выводил графику с большими разрешениями из UE, но для этого вам явно понадобятся прямые руки и как минимум один кодер в команде, который будет кастомайзить движок.
Ну и как не упомянуть про ужасные пассы и неудобный вывод альфы. То есть по факту это все конечно есть, но очень сильно отличается от того, к чему вы привыкли в 3D пакетах.
Резюмируя
В общем, как вы увидели, быстрая скорость рендера накладывает свои ограничения, которые, однако, не такие серьезные, чтобы совсем отказываеться от такого мощного инструмента, как Unreal Engine. В любом случае, врываться в геймдев со своими рекламками-мультиками-сферками или нет — решать только вам.
Текст: Дмитрий Соколов