- BrainTools - https://www.braintools.ru -

Опенсорсим YaGS Plugin: открытый плагин для работы с 3DGS внутри Unreal Engine

Опенсорсим YaGS Plugin: открытый плагин для работы с 3DGS внутри Unreal Engine - 1

Представьте, что вам нужна фотореалистичная 3D‑копия реального объекта или сцены: например, лица актёра для крупного плана или целой городской улицы. Сегодня для этого есть два инструмента: классическое 3D‑моделирование и фотограмметрия. Однако они съедают недели работы и ломаются там, где очень важны детали, — волосы, хром, стекло, отражения превращаются в артефакты. А на то, чтобы снять реалистичную сцену или объект так, чтобы это масштабировалось на тысячи единиц, обычно уходит слишком много времени и денег.

Выход из этого тупика для целого ряда задач мы нашли в Gaussian Splatting и прогнали технологию через несколько очень разных проектов: сканирование людей и локаций для кино (например, для «Кибердеревни»), создание цифровых двойников городских кварталов и симуляцию для автономного транспорта. Инструмент один — задачи разные. И именно на этом контрасте и родилось самое интересное.

Сегодня я расскажу, как риг из 15 камер заменяет установку за сотни тысяч долларов и зачем мы используем движущегося человека как калибровочную доску. Объясню, почему для беспилотного автомобиля фотореализм обязан рождаться из данных, а не из 3D‑редактора. Ну и, конечно же, расскажу про YaGS Plugin [1] — наш опенсорс‑плагин, который делает Gaussian Splatting полноценной частью сцены в Unreal Engine.


Что такое 3DGS и чем он отличается от меша

В классической 3D‑графике сцена — это полигональная сетка (меш) с наложенными на неё текстурами, а также настройки света, физики и камеры. Gaussian Splatting устроен иначе: сцена собирается из миллионов «сплатов» — крошечных объёмных частиц, у каждой из которых есть цвет, прозрачность и форма. Один сплат — это трёхмерный гауссиан: размытое «облачко» в форме эллипса с центром в некоторой точке пространства. 

3DGS‑сцену не собирают вручную — её «добывают» из фотографий. На старте есть разреженное облако точек из Structure from Motion — алгоритма, который восстанавливает положения камер по набору снимков. Дальше параметры всех гауссианов подгоняют градиентным спуском: рендер сравнивают с реальными кадрами и минимизируют расхождения. Так же работает адаптивное управление плотностью — там, где деталей не хватает, частицы клонируются и дробятся, а почти прозрачные удаляются. На выходе получается облако из сотен тысяч, а то и миллионов сплатов, повторяющее сцену.

Рендерится это не трассировкой лучей и не растеризацией треугольников. Каждый гауссиан проецируется («сплатится») на плоскость кадра в 2D‑эллипс, и эти эллипсы смешиваются по прозрачности в порядке глубины — отсюда и название splatting. При этом рендеринг сцены требует заметно меньше ресурсов, чем традиционная трассировка лучей.

Кроме того, в 3DGS хорошо работают сложные вещи, на которых обычная фотограмметрия часто спотыкается: отражения, блики, преломления света, тонкая структура материалов. 

Однако у такого представления есть и оборотная сторона, важная для дальнейшего рассказа. У облака сплатов нет ни поверхности, ни топологии, ни текстурных развёрток. Оно прекрасно описывает мягкие и полупрозрачные структуры — волосы, мех, листву, дым, — на которых меш разваливается, но плохо стыкуется с классическими движками, где нужны геометрия, коллизии и анимация. Эту нестыковку нам и пришлось чинить самостоятельно.

YaGS Plugin для Unreal Engine

Наш основной фокус проекта в Фантехе был построен вокруг создания фотореалистичных высококачественных 3D‑реконструкций локаций для использования в кино. Бурное развитие технологии виртуального продакшена с использованием LED‑экранов и рендером фона для этих сцен в игровом движке Unreal Engine, а также более традиционный формат замены фона в материале, снятом в «зелёном павильоне» — на хромакее, позволило нам разработать и внедрить полный цикл создания и демонстрации Gaussian Splatting. 

Используя несколько беззеркальных цифровых фотокамер, находящихся на разной высоте, мы получали датасет, полностью покрывающий локацию со всех сторон. Для тренировки реконструкции использовались наши внутренние доработки публичного кода Gsplat, а также собственная инфраструктура, позволяющая ускорить процесс. 

Но получить качественную реконструкцию недостаточно. Воспроизведение и редактирование высококачественных GS‑сканов в real‑time и рендер видео требовали очень хорошей оптимизации.

Чтобы работать с 3DGS было удобно, служба развития технологий Персональных сервисов Фантеха Яндекса сделала плагин YaGS [1] для Unreal Engine 5 (версии 5.4–5.7). Наша команда решала задачи по созданию цифровых двойников кинолокаций, которые могли бы использоваться как виртуальные фоны при съёмке на хромакее или LED‑экранах виртуального продакшена. 

Большинство доступных решений работают с устаревшими версиями Unreal, многие из которых не позволяют делать ничего большего, чем просто отображать сцену, при этом с большим ограничением на размер сцены и производительность системы. Другие решения требуют довольно дорогостоящей лицензии, давая нередактируемый инструментарий, не всегда адаптированный под индивидуальные сложности проекта.

YaGS доступен как опенсорс‑решение по встраиванию Gaussian Splatting в стандартный UE‑пайплайн как полноценный ассет.

Модель можно разместить в сцене, совместить с классической геометрией, корректно обработать глубину, прогнать через постобработку Unreal Engine, удалить или «перекрасить» отдельные области, создать несколько дублей и не тратить на них дополнительную память [2], а результат редактирования можно выгрузить в отдельную модель в ply‑формате. Под капотом — экономия VRAM, ускорение через Mesh Shaders и умное размещение с учётом коллизий. Кроме операции редактирования модели, есть операции цветокоррекции и переосвещения.

Плагин полезен командам, которые работают с XR, virtual production, робототехникой, симуляторами и цифровыми двойниками: для них он переводит Gaussian Splatting из экспериментальной визуализации в рабочий инструмент внутри привычного пайплайна.

Опенсорсим YaGS Plugin: открытый плагин для работы с 3DGS внутри Unreal Engine - 2

В каких 3DGS‑задачах мы применяем YaGS Plugin

Сканирование людей

Исторически мы занимались 3D‑реконструкцией для кино, рекламы и volumetric video и в первых версиях пайплайна работали с мешами: восстанавливали геометрию, текстуры, готовили результат к продакшену.

С людьми этот подход упирался в потолок. Волосы традиционно очень тяжело представить мешем: тонкие пряди, полупрозрачность, мягкие границы, сложная структура — всё это быстро превращается в артефакты. При этом нам часто приходилось делать статические реконструкции людей, пригодные для крупных планов. Gaussian Splatting тут оказался удобнее: он лучше держит тонкие и мягкие структуры и при этом остаётся достаточно лёгким, чтобы перетаскивать модель между пайплайнами.

Однако у качественных ригов для Gaussian Splatting есть серьёзный недостаток — они дорогие. Кроме того, эти установки с десятками камер занимают много места и не годятся для выездных съёмок. Нам нужно было что‑то портативное.

Решение — поменять количество камер на время. Вместо стационарной стены из сотен камер мы стали «облетать» человека по кругу ригом из 15 обычных серийных камер. Один проход занимает около 12 секунд.

Опенсорсим YaGS Plugin: открытый плагин для работы с 3DGS внутри Unreal Engine - 3

Но тут вылезает главный подвох. За 12 секунд человек не остаётся неподвижным: даже если он задерживает дыхание [3] и старается замереть, микродвижения всё равно есть. Для реконструкции это беда — размытие деталей, артефакты, нестабильная геометрия.

Чтобы это побороть, после первичной калибровки мы разбивали изображение на сетку локальных виртуальных камер (в наших съёмках — 8 × 8 на кадр). У каждой такой камеры были свои параметры: и положение в пространстве, и характеристики оптики — то, что в фотограмметрии называют extrinsics и intrinsics. Дальше при оптимизации Gaussian Splatting мы подбирали не только параметры самих сплатов, но и параметры этих виртуальных камер.

Опенсорсим YaGS Plugin: открытый плагин для работы с 3DGS внутри Unreal Engine - 4

Фактически мы использовали человека как калибровочную доску — не буквально, а как объект, по которому можно уточнить локальные параметры наблюдений. Разница между «без виртуальных камер» и «с виртуальными камерами» на результате видна сразу: смазанная рука и плывущее лицо превращаются в чёткую модель.

Тот же приём с разбиением на тайлы и аккуратной сшивкой в единую модель мы применили в кино, значительно сэкономив время и ресурсы съёмочной группы.

В восьмой серии второго сезона «Кибердеревни» главный герой попадает на планету выброшенных роботов: цифровую модель актёра в костюме робота снимали в облёт на 360° десятком миниатюрных камер, и компенсация микродвижений работала ровно по этой же логике [4]. Готовую модель можно было свободно двигать в кадре — она подстраивалась под освещение и ракурсы.

«Кибердеревня», s2e8, Сергей Васильев, Кинопоиск, 2025

Приятный бонус хорошей реконструкции в Gaussian Splatting — из неё удобно вытаскивать геометрию. Например, через адаптивные тетраэдры поверх поля opacity у гауссианов (подход описан в статье про MAtCha [5]) мы получали детальную геометрию, пригодную для дальнейшей анимации.

Подход по извлечению геометрии со скана Gaussian Splatting нам вновь пригодился в другом проекте с «Кибердеревней» — при сканировании персонажей для интерактивного AR‑постера [6]

Используя наш метод, мы смогли получить качественную 3D‑модель главного героя с анимацией из того же самого 12-секундного обхода, что и для простых GS‑сканов. Получившаяся геометрия с текстурами оказалась значительно детальнее, чем если бы она создавалась напрямую в формате фотограмметрии.

Обучение автономного транспорта

После залов и людей следующим применением для Gaussian Splatting стала, неожиданно и для нас самих, симуляция для автономного транспорта. Здесь это уже вопрос безопасности, а не просто «ради красоты».

Автономный транспорт важно обучать и тестировать в симуляции, а не только на реальных проездах. Опасные ситуации (edge cases) одновременно редки и критичны: ребёнок, выбегающий из‑за припаркованного грузовика, слепящее солнце, внезапно перестраивающийся мотоциклист. Учить авто только на дорогах сложно: обучение [7] требует миллионов попыток, и определённая их часть будет ошибочной, а на дороге лучше не ошибаться. 

Симулятор позволяет «размножить» реальность: один зафиксированный опасный случай прогоняется в тысячах вариаций, и модель проживает бесконечный «день сурка».

Но есть разрыв между симуляцией и реальностью — Sim‑to‑Real gap. Стандартный движок с ассетами из 3D‑редактора даёт слишком «стерильную» картинку, на которой нейросеть автопилота ведёт себя не так, как в реальном мире, и доверять таким результатам нельзя.

У Gaussian Splatting фотореализм следует из исходных данных: представление сцены выучивается напрямую по данным с камер и лидаров автомобиля. Гауссианы кодируют реальные цвета и отражающие свойства материалов, засветку солнца на стекле, переходы «асфальт — трава» без текстурных швов, отражения дорожных знаков в лужах. Нейросеть за рулём «видит» ровно те же объекты, что и на настоящей дороге.

Что в итоге

Несколько выводов, которые мы вынесли, прогнав через 3DGS несовместимые на первый взгляд задачи:

  • Метод — это фундамент, а работает или нет — решает обвязка вокруг него. Один и тот же Gaussian Splatting закрывал и крупный план волос в кино, и облёт робота в «Кибердеревне», и обучение автопилота. Но в каждой задаче выручала своя инженерная деталь, а не сам метод: где‑то — компенсация микродвижений, где‑то — связка с лазерным сканом, где‑то — извлечение меша.

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

  • Иногда дешевле обменять железо на время и софт. Вместо дорогостоящей стационарной установки — риг из 15 камер и 12-секундный облёт. А неизбежные при таком подходе микродвижения человека мы добили виртуальными камерами, превратив самого человека в калибровочную доску.

  • 3DGS силён ровно там, где пасуют меш и фотограмметрия: волосы, хром, стекло, отражения. Цвет, который зависит от ракурса, — это не украшение, а та самая причина браться за метод, когда классические подходы дают артефакты.

  • 3DGS — не всегда финальный формат. Где нужна классическая геометрия, мы достаём из облака сплатов меш — так собрали AR‑постер к «Кибердеревне». А где речь о безопасности автопилота, фотореализм обязан рождаться из данных, а не из 3D‑редактора, иначе симуляции нельзя доверять.

Опенсорсим YaGS Plugin: открытый плагин для работы с 3DGS внутри Unreal Engine - 5

Дальше мы двигаемся в сторону автоматизации всего пайплайна — от запуска камер до выгрузки готовой модели в хранилище, с получением результата за часы, а не дни, облачным рендерингом на GPU и real‑time‑проигрыванием моделей в браузере. 

А пока забирайте YaGS Plugin [1] и добавляйте к своим сценам в Unreal Engine. 

Автор: s_eliseev

Источник [8]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/32554

URLs in this post:

[1] YaGS Plugin: https://github.com/yandex/yags

[2] память: http://www.braintools.ru/article/4140

[3] дыхание: http://www.braintools.ru/article/4500

[4] логике: http://www.braintools.ru/article/7640

[5] статье про MAtCha: https://arxiv.org/abs/2412.06767

[6] для интерактивного AR‑постера: https://www.kinopoisk.ru/special/kbdar/?utm_referrer=organic.kinopoisk.ru

[7] обучение: http://www.braintools.ru/article/5125

[8] Источник: https://habr.com/ru/companies/yandex/articles/1052328/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1052328

www.BrainTools.ru

Rambler's Top100