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