FLAT: как треугольники заменили гауссовы blobs для генерации 3D-сцен

FLAT: как треугольники заменили гауссовы blobs для генерации 3D-сцен

Создать explorable 3D-среду из одной фотографии — задача, которая последние годы решалась через optimize-then-finetune подход: сначала генеративная модель создаёт кадры, затем 3D Gaussian Splatting (3DGS) оптимизирует сцену под эти кадры. Результат качественный, но медленный: на каждую сцену — минуты оптимизации на GPU. FLAT (Feedforward Latent Triangle Splatting) ломает эту парадигму. Из одной RGB-картинки модель за один forward pass предсказывает набор треугольных примитивов, готовых к рендерингу в реальном времени. При этом геометрия получается точнее, чем у любого гауссова подхода.

Проблема гауссовых blobs

3D Gaussian Splatting заменил NeRF как стандарт для neural rendering — сцена представляется как набор эллипсоидальных blobs, каждый со своим цветом, прозрачностью и позицией. 3DGS оптимизирован под визуальное качество: гауссовы blobs легко дифференцировать, они естественно описывают полупрозрачные структуры и тонкие края через игольчатые гауссовы элементы. Но геометрия страдает: blobs по определению размыты, нормали к поверхности получаются почти случайными, а извлечение mesh для стандартных графических пайплайнов требует отдельной процедуры с подбором гиперпараметров под каждую сцену. На RealEstate10K традиционные методы конверсии из 3DGS в mesh дают PSNR порядка 14–16 dB — это резкий контраст с PSNR 22+ у самого рендеринга.

FLAT задаёт вопрос: можно ли декодировать поверхностно-ориентированные примитивы — треугольники — напрямую из латентов видео-диффузии? Ответ — да, но есть нюанс. Декодировать треугольники из латентов сложнее, чем 3DGS: треугольники чувствительны к ориентации, ошибка в несколько градусов может дать нулевой вклад в loss, что приводит к нестабильному gradient flow и расходимости модели на ранних этапах обучения.

Два ключевых ингредиента

Ray-centered rotation parameterization. FLAT предсказывает каждый треугольник относительно луча камеры: декодер выдаёт глубину, три параметра формы через нижнетреугольную матрицу Cholesky, остаточные углы наклона и угол вращения в плоскости. Начинаем с канонического центрированного равностороннего треугольника и трансформируем его матрицей L — диагональные элементы положительны, что гарантирует положительную площадь и избегает вырожденных конфигураций, внедиагональный элемент управляет сдвигом. Вместо предсказания полного кватерниона предсказываем остаточные углы вокруг ray-aligned фрейма — это стабильнее численно, потому что треугольник наследует позицию от предсказанной глубины луча, а форма — от Cholesky-трансформа.

Product window function. Стандартный window function в triangle splatting вычисляет произведение расстояний до рёбер, но внутри max-редукция. FLAT убирает max и использует shifted clipping: каждый пиксель получает сигнал от всего треугольника, а не только от самого активного ребра, а сдвиг на ε даёт ненулевые производные за пределами границы — критично для стабильности на ранних этапах обучения, когда треугольники ещё не выровнены.

Архитектура: сцена-декодер на базе видео-VAE

FLAT использует видео-диффузионную модель Uni3C, построенную на Wan-2.1, и дообучает только сцена-декодер. Ключевое решение: вместо обучения нового transformer или mamba-decoder с нуля FLAT модифицирует декодер pretrained video VAE. Берём RGB-декодер Wan-2.1, добавляем camera conditioning через zero-convolutional blocks и lightweight output heads, которые предсказывают не RGB-пиксели, а параметры треугольников. Этот transfer-learning setup упрощает оптимизацию: pretrained декодер уже понимает локальный паттерн и пространственную структуру, модель фокусируется на высококачественном рендеринге и точной геометрии.

Камера кодируется через RPPC embedding: заменяем моментный вектор на точку на луче, ближайшую к началу координат. Это лучше раскрывает позицию и относительную глубину для декодера. RPPC кодируется отдельными encoder-ами для reference и direction компонентов, конкатенируется и проецируется в ширину декодера через fusion layer. Инжектится через zero-initialized blocks, чтобы камера-фичи оставались выровнены с визуальными латентами по мере того, как модель постепенно учится их использовать.

Обучение идёт в четыре стадии от 320p до 768p на 8 H100 GPU, 200,000 итераций, AdamW lr=1e-4. Тренировочные данные: RealEstate10K + DL3DV плюс 25,000 синтетических изображений из S3OD, для которых Uni3C генерирует видео с траекториями камеры. Камеры из MapAnything, нормали из NormalCrafter. Loss: L2 + LPIPS + scale-invariant disparity + supervision normals + opacity regularization.

Результаты: геометрия vs рендеринг

Метрика FLAT Triangles FLAT 3DGS variant FLAT 2DGS Lyra (3DGS)
PSNR (RealEstate10K) 21.45 22.39 22.03 21.79
SSIM 0.710 0.762 0.734 0.752
LPIPS 0.245 0.203 0.219 0.219
Cosine similarity (geometry) 0.853 0.686 0.587

FLAT Triangles уступает 3DGS variant по визуальному качеству, но геометрическая точность достигает 0.853 косинусной близости к Metric3D-нормалям против 0.587 у 2DGS и 0.686 у 3DGS variant. Гауссовы blobs не имеют чёткой поверхности по определению, 2DGS эксплицитно моделирует поверхности, но без прямого супервизиона нормалей — нормали 2DGS вычисляются через self-consistency, что даёт мягкие размытые границы. FLAT Triangles — единственный подход с прямым супервизором нормалей через NormalCrafter и стабильным градиентным потоком.

Mesh conversion конвертирует triangle soup в opaque mesh за один forward pass плюс 250 steps refinement: aggressive opacity selection пушит к бинарным значениям, удаляются triangles с opacity < 40%, merge mutually nearest boundary vertices. На выходе — 0.5M vertices с PSNR 21.23. Для сравнения: 3DGS с GS2Mesh конверсией даёт 4M vertices и PSNR 14.18 — разница в 7 dB. Архитектурная причина: 3DGS blobs требуют dense view coverage и чувствительны к гиперпараметрам, а FLAT triangles уже поверхностно-ориентированы и конвертируются почти без настройки.

Сравнение с альтернативами

ViewCrafter, Wonderland и Bolt3D полагаются на generate-then-optimize: видео-диффузия создаёт кадры, затем 3DGS или NeRF оптимизирует сцену под них. Это даёт качественные результаты, но per-scene optimization занимает минуты на GPU и не масштабируется. Lyra и LongLRM — первые feedforward подходы, но Lyra использует mamba-decoder ограниченной capacity, а LongLRM всё ещё работает с объёмными гауссовыми элементами. FLAT объединяет преимущества: reuse сильного generative prior видео-модели через latent decoding и стабильный feedforward surface prediction.

Ablation показывает вклад каждого компонента. Rotation parametrization: residual вокруг ray-frame даёт 20.09 PSNR, direct world-space rotation приводит к расходимости модели — треугольники коллапсируют в шум или пустой рендер на первых итерациях. Window function: product formulation (21.45 PSNR) превосходит original с max-редукцией из-за улучшенного gradient flow. Architecture: LongLRM decoder (21.24 PSNR) не хватает capacity для не-объёмных примитивов — mamba-based архитектура оптимизирована под sequential modeling, а не под рендеринг.

Почему это важно для индустрии

Сейчас neural rendering в продакшене — это либо медленная оптимизация, либо быстрые feedforward модели без геометрической точности. FLAT показывает, что один forward pass может давать game-engine-ready mesh с sub-centimeter геометрией. Приложения: mixed reality, где нужна не только картинка, но и физика взаимодействия с реальными объектами; robotics simulation, где геометрия используется для планирования и навигации; game asset creation, где результат напрямую экспортируется в Unreal или Unity; autonomous driving, где точность 3D-реконструкции влияет на качество HD-карт.

Game-ready representation — ключевое отличие. RASTERIZATION pipeline игровых движков работает с треугольниками: каждый треугольник — это три вершины, цвет, нормаль. 3DGS blobs — это множество эллипсоидов с covariance matrix, которые нужно конвертировать в triangles через Marching Cubes или TSDF, и результат чувствителен к hyperparameters. FLAT triangles — это уже тот формат, который понимает игровой движок, без промежуточной конверсии.

Ограничения и что дальше

Тонкие удлинённые структуры, отражения и полупрозрачные области остаются сложными для треугольной репрезентации. Opaque mesh не является watertight — локальная связность бывает неполной. Модель тренировалась на умеренном датасете из-за вычислительных ограничений, и масштабирование данных, вероятно, улучшит визуальное качество и геометрическую консистентность. FLAT также предсказывает сцену из одного входного изображения и одной сгенерированной траектории — extended to больших окружений требует интеграции с world-consistent video generation.

Тренировочный пайплайн и loss-функция

Uni3C генерирует от 49 до 81 кадров при разрешении 432×768. VAE энкодер временно downsampling на factor r_t=4 и пространственно на r_s=8. Это означает, что латентное пространство сжимает видео примерно в 32 раза по объёму данных, сохраняя ключевую информацию о геометрии и внешнем виде сцены.

Scene decoder получает на вход латент z ∈ ℝ^(F'×C'×H'×W') и camera embedding E_cam ∈ ℝ^(T'×C×H'×W') и предсказывает параметры всех треугольников в одном forward pass. Архитектурное преимущество: pretrained VAE decoder уже понимает локальную структуру изображения — границы, текстуры, паттерны — потому что обучался восстанавливать RGB из латентов. FLAT переиспользует это знание, добавляя heads для triangle parameters вместо пиксельных RGB.

Loss-функция — взвешенная сумма пяти компонентов: λ_rgb·L2 + λ_perc·L_LPIPS + λ_D·L_D + λ_N·L_N + λ_O·L_O с весами 1.0, 0.5, 0.01, 0.01, 0.01 соответственно. L2 и LPIPS — стандартные рендеринг-лоссы. L_D — scale-invariant disparity loss, адаптированный из MiDaS: глубина предсказанных поверхностей выравнивается с метрической глубиной из MapAnything. L_N — direct supervision нормалей через pseudo-ground-truth от NormalCrafter: L_N = Σ M_i(1 - n̂_i · N_i) / Σ M_i, где M_i = 1 если α_i > 0.5. Именно этот член отличает FLAT от 2DGS: NormalCrafter даёт качественные нормали, а direct supervision через L_N делает треугольники геометрически точными.

FAQ

Почему FLAT уступает 3DGS variant по PSNR, но это не проблема? PSNR измеряет пиксельное качество рендеринга, а не геометрическую точность. 3DGS blobs легче оптимизировать под PSNR — их гладкость и объёмность скрывают мелкие ошибки. Треугольники дают более резкие поверхности, но для приложений, где важна геометрия (симуляция, планирование, экспорт в игровые движки), cosine similarity 0.853 важнее, чем +1 dB в PSNR. На практике: FLAT Triangles + 250 steps optimization даёт PSNR 23.01, что уже превосходит все 3DGS baselines.

Можно ли использовать FLAT без post-processing? Да, triangle soup рендерится напрямую в реальном времени без конверсии в mesh. Semi-opaque render пригоден для многих задач — просмотр, навигация, визуальный рендеринг. Opaque mesh нужен для физического взаимодействия и экспорта в стандартные графические пайплайны. Post-processing занимает минуты на одной GPU, но triangle soup можно использовать сразу.

Почему Cholesky-параметризация важна? Cholesky matrix L ∈ ℝ²ˣ² — это единственный способ гарантировать положительную площадь треугольника без ограничений оптимизации. Прямое предсказание трёх вершин может дать вырожденный треугольник (нулевая площадь) на ранних этапах обучения, что ведёт к нулевым градиентам и расходимости. Cholesky decomposition гарантируетstrictly positive area при любых значениях параметров — модель учится геометрии с первой итерации.

**FLAT доказывает, что видео-диффузионные латенты можно маппить в эксплицитные поверхностные примитивы при правильной параметризации и рендер-формуле. Ключ — ray-centered rotation и product window function, которые делают gradient flow стабильным при декодировании не-объёмных треугольников. Один forward pass, 0.853 cosine similarity, game-engine-ready mesh. Геометрически точный feedforward 3D из одной картинки — ближе, чем казалось.

Источник: FLAT: Feedforward Latent Triangle Splatting, arXiv:2606.24876

Источник: FLAT: Feedforward Latent Triangle Splatting, arXiv:2606.24876

← Все записи