跳转至

LATTICE: Democratize High-Fidelity 3D Generation at Scale

会议: CVPR 2026
论文: CVF Open Access
代码: https://lattice3d.github.io (项目页)
领域: 3D视觉 / 3D生成 / 扩散模型
关键词: 3D生成, 半结构化latent, VecSet, 体素查询, test-time scaling

一句话总结

LATTICE 提出一种半结构化的 3D latent 表示 VoxSet——把 VecSet 那套紧凑的 latent token 锚定到粗体素网格上,从而能给扩散 transformer 注入位置信息;配合"先生成粗结构、再细化几何"的两阶段 pipeline,用纯 transformer 架构把 image-to-3D 模型规模化到 4.5B,同时实现了 3D 生成里少见的 token-level test-time scaling,在重建/生成质量上超过此前 SOTA。

研究背景与动机

领域现状:原生 3D 扩散生成目前主要围绕"用什么 latent 表示 3D 资产"这件事打转,主流是两条路线。一条是 Sparse Voxel(XCube、Trellis/SLAT),把特征锚定在物体表面附近的活跃体素上,天然带空间结构、利于编辑和泛化;另一条是 VecSet(3DShape2VecSet、Hunyuan3D-2、TripoSG),通过点云与一组查询 token 之间的 cross-attention,把整个 3D 物体压成几千个 latent 向量,紧凑、优雅、且全部用标准 self/cross-attention 实现,scalability 好。

现有痛点:Sparse Voxel 即便利用了 3D 稀疏性,活跃体素序列长度仍然爆炸(64³ 分辨率下 active voxel 超过 20,000),不得不上稀疏卷积、稀疏注意力等复杂系统设计,能不能 scale 仍是开放问题。VecSet 虽然紧凑高效,但长期被认为"全局建模、丢细节",质量上落后于 2D latent diffusion。两条路线整体都明显落后 2D 图像生成。

核心矛盾:作者把 3D 落后 2D 的根因归到生成任务被怎样定义这件事上。2D 图像合成里,空间网格是预先给定的——模型只需在固定像素坐标上推断 RGB 值(这是一个被忽略却极大简化去噪过程的"秘密条件")。而 3D 生成是开放式任务:既要决定在哪里放内容、又要决定放什么内容(SDF、RGB)。这种对"结构 + 内容"的联合推理把搜索空间炸大、引入歧义,让优化更难、scaling 行为更不可预测。

本文目标:从"对扩散生成器本身而言,什么才是好的 3D 表示"这个生成中心视角出发,把 3D 生成里"where"与"what"的预测解耦,像 2D 那样用结构/位置去引导原本无结构的 VecSet 生成。

切入角度:作者观察到 VecSet 用 point query 编码出来的 latent 其实偷偷带有位置信息——每个 latent 都和它对应 point query 附近的区域强相关(FlashVDM 指出过)。但这个信息在生成时用不上,因为 point query 采在表面、测试时位置未知。

核心 idea:真正重要的不是"局部性(locality)"而是"可定位性(localizability)"。于是用 Voxel Query 代替 Point Query——锚定在与表面相交的粗活跃体素中心上,测试时通过一个廉价的粗结构生成阶段就能拿到这些位置,从而给 VecSet 注入显式结构,得到半结构化表示 VoxSet。

方法详解

整体框架

LATTICE 的核心是 VoxSet 表示,外加一条"粗结构 → 细几何"的两阶段 coarse-to-fine pipeline。第一阶段(结构生成):拿一张输入图,直接用任意现成 3D 生成器(Hunyuan3D-2、Trellis 等)生成一个质量不完美的粗网格,再把它体素化(voxelize),得到一组稀疏的活跃体素网格——这一步只负责给出"where",即把内容该放在空间哪些位置定下来。第二阶段(几何细化,即 LATTICE 本体):以这些活跃体素中心作为 Voxel Query,在 VoxSet VAE 的 latent 空间里用 rectified-flow transformer(DiT)去噪生成细节几何的 VoxSet token,每个 token 通过 RoPE 注入对应体素的位置,最后由 VAE decoder(以 SDF 网格坐标为 query 做 cross-attention)解出 SDF、经 Marching Cubes 提取出带高频细节的网格。整条 pipeline 不含任何稀疏卷积/稀疏注意力,纯 transformer,因而可以从 0.6B 平滑 scale 到 4.5B,并支持任意 token 数(任意分辨率)解码与 test-time scaling。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
    A["输入图像"] --> B["结构生成阶段<br/>现成模型出粗网格→体素化<br/>得到活跃体素网格(where)"]
    B --> C["Voxel Queries<br/>锚定活跃体素中心<br/>替代 point query"]
    C --> D["VoxSet 表示<br/>半结构化 latent token"]
    D --> E["结构感知 DiT<br/>rectified flow + RoPE 注入位置"]
    E -->|采样更多 voxel query| E
    E --> F["VoxSet VAE 解码<br/>cross-attn→SDF→Marching Cubes"]
    F --> G["高保真细节网格"]

关键设计

1. VoxSet:给 VecSet 的 latent 加上半结构化的坐标骨架

VoxSet 要解决的是"VecSet 紧凑但无结构、Sparse Voxel 有结构但序列太长"这对矛盾。它沿用 3DShape2VecSet 的做法,用 VAE 对输入点云 \(P \in \mathbb{R}^{N\times 7}\)(每个点编码 3D 坐标、法向、以及标记是否落在尖锐边上的二值 sharpness 指示位)做 cross-attention,压成一串紧凑 latent token,保留 VecSet 的压缩与简洁优势;但关键改动是让每个 latent 都锚定在一个规则体素网格的格点上,从而把位置信息变成可直接注入 DiT 的显式结构。这样既不像 Sparse Voxel 那样序列爆炸(仍是几千 token 量级),又不像原始 VecSet 那样 latent 完全无序。更妙的是,由于 latent token 本质上编码的是全局信号、可以用任意长度序列表示同一物体,VoxSet 天然支持任意分辨率编解码progressive token scaling——从 1024 token 起步预训练、逐步加到更多,训练成本大幅下降。

2. Voxel Query:把"测试时位置未知"的 point query 换成可获取的体素中心

这是 VoxSet 区别于 VecSet 的命门。VecSet 里查询集有两种:learnable query(编码全局统计、好训但难 scale)和 point query(在表面做最远点采样、编码局部信息、支持任意分辨率、且 latent 强相关于其位置)。point query 看似理想,但它采在物体表面上,测试时表面未知 ⇒ 位置未知,所以那份"偷偷编码的位置信息"在生成时根本用不上。作者改用 Voxel Query——锚定在与表面相交的活跃体素中心:这些坐标在测试时通过粗结构生成阶段就能轻松拿到;而且体素中心和具体表面"解耦"(一个体素中心不绑死某条曲面),缩小了 training-test gap,显著提升测试时泛化。一句话:用"可定位的体素坐标"换掉"测试时拿不到的表面坐标",让位置引导真正落地。

3. 给扩散 transformer 注入结构(RoPE):用位置嵌入救活 3D 去噪轨迹

光有结构化表示还不够,得让 DiT 真正用上结构。作者在 rectified-flow transformer 的每个噪声 latent token 上加 RoPE 旋转位置嵌入,把 VoxSet 的体素坐标喂给生成器。这个改动看着不起眼,但对收敛极其关键,原因有二:其一,3D 数据量远小于 2D 图像/视频,latent 空间严重"占用不足",没有位置先验时去噪很难收敛;其二,几何生成本身比图像生成更稀疏更难——3D 表面只占包围盒一小块,而图像每个像素都有 RGB 值,此前只用单张图做 condition 的方法很难把去噪轨迹引导到细节几何上。RoPE 注入的位置正好补上了 2D 里"预定义网格"那个被忽视的秘密条件。

4. Query Jitter + 渐进式训练 + token-level test-time scaling:低成本训练与训练后免费涨点

为支持多分辨率体素结构,作者不去随机采样各种分辨率的 voxel query,而是用更简单的 Query Jitter:训练时给 point query 加一个小随机偏移 \(\epsilon \sim \mathcal{U}\!\left(-\tfrac{1}{2R}, \tfrac{1}{2R}\right)\)\(R\) 是想支持的最小分辨率),测试/扩散训练时即可在任意大于 \(R\) 的分辨率上采样 voxel query。训练侧再叠两招降本:去噪时随机采样固定数量的结构 token(远少于 sparse voxel 方法),以及 progressive training——先在 1024 token 训、逐步 scale 到 6144 token。最终模型在 6144 token 上训练,测试时直接把 token 数加到 12288、24576 乃至 30720 都能持续涨质量(token-level test-time scaling,见下文实验),这是 3D 生成里很罕见的性质,也是 VoxSet 结构化设计带来的红利。

损失函数 / 训练策略

  • VAE 阶段:标准的几何 VAE 重建(编码点云、重建 SDF,Marching Cubes 提网格),其余设置与 Hunyuan3D-2 一致,但只从均匀采样点云里取 query。
  • 生成阶段:rectified flow(整流流)训练 VoxSet DiT;图像条件用 Dinov2-Giant 最后一层(去掉 class token),分辨率提到 1022(Hunyuan3D-2 为 518)以保细节,物体按二值 mask 裁剪保持长宽比、不额外加位置嵌入。
  • 规模:训练 0.6B–4.5B 一族模型;2B 基座可在 64 GPU 上 < 24 小时训完且仍超过此前方法。

实验关键数据

主实验

重建(LATTICE-Bench(R),CD ×10⁴、F1 ×10²):LATTICE 用更紧凑的 latent 就拿到最佳重建。

方法 Latent Size CD(↓) F1(↑)
Hunyuan3D-2 64×4096 12.35 82.78
Hunyuan3D-2 64×8192 9.157 91.57
SparseFlex (1024) 8×196028 2.972 97.76
Direct3D-s2 (1024) 64×46592 4.987 97.46
LATTICE 64×4096 5.321 95.31
LATTICE 64×8192 2.909 98.53
LATTICE 64×20480 1.893 99.59

生成(image-to-geometry,ULIP/Uni3D 相似度,越高越好):

方法 ULIP-T ULIP-I Uni-T Uni-I
Trellis 0.076 0.126 0.249 0.311
Hunyuan3D 2.0 0.077 0.130 0.251 0.315
Hi3DGen 0.066 0.112 0.246 0.299
Direct3D-s2 0.074 0.122 0.247 0.314
LATTICE-1.9B 0.078 0.130 0.254 0.315

LATTICE-1.9B(与对手体量最接近)在四项指标上全面领先或持平最优。

消融实验

VAE 训练策略消融(统一用 4096 token + voxel query 测试,节选不同分辨率列):

配置 CD(↓) F1(↑) 说明
Baseline(point-query VAE,换 voxel query 测) 10.7 85.3 训练-测试 query 不一致,严重退化
+ Fixed Train(固定分辨率训练) 5.73~5.69 94.5~94.7 改善但缺乏分辨率灵活性
+ Query Jitter 5.32 95.3 最优,且任意分辨率可用

Voxel Query / VoxSet VAE 增量消融(Fig.10):逐个加入 voxel query、VoxSet VAE,伪影逐步减少、细节增多——voxel query 因缩小 domain gap 减少伪影,VoxSet VAE 因更强重建带来更多细节。

关键发现

  • 可定位性 > 局部性:把 point query 换成 voxel query 是涨质量的关键,验证了"测试时拿得到的结构位置"才是核心,而非传统认为的 sparse voxel 局部性。
  • Query Jitter 是训练-测试对齐的关键开关:原始 point-query VAE 换成 voxel query 测试会大幅掉点(CD 10.7 / F1 85.3),加了 jitter 后 CD 降到 5.32、F1 升到 95.3,且支持任意分辨率。
  • test-time scaling 真实存在:6144 token 训练的模型,测试时把 token 加到 20480 重建 CD 从 ~2.9 降到 1.893、F1 升到 99.59,免训练就涨质量。
  • 用户研究中对四个商业模型的 Overall 胜率差全部为正(约 +19.6% ~ +26.5%),主体/场景类目同样领先。

亮点与洞察

  • 重新定义"好的 3D 表示"的判据:从生成器视角指出 3D 落后 2D 的根因是缺少 2D 那种"预定义空间网格"的秘密条件,并用 VoxSet 把这个条件补回来——这是把问题框架本身讲清楚的洞察,比单纯堆模块更有启发。
  • "localizability not locality"这句口号很有迁移价值:很多 3D/4D 表示之争都纠结于局部建模能力,本文点明真正卡脖子的是"测试时能不能拿到位置",这个判据可以迁移去审视其它隐式表示。
  • token-level test-time scaling 几乎是白送的红利:因为 latent 编码全局信号 + 体素锚定支持任意分辨率,训练后只要多采 voxel query 就能涨点,工程上极具性价比。
  • 纯 transformer + 廉价训练:2B 模型 64 GPU < 24h,证明不靠稀疏卷积/稀疏注意力这些复杂系统也能做高保真 3D,降低了规模化门槛(呼应标题 "Democratize")。

局限与展望

  • 强依赖第一阶段的现成结构生成器:粗体素来自 Hunyuan3D-2/Trellis 等外部模型,若粗结构本身缺失或错位(如薄结构、被遮挡部分),第二阶段的细化能补救的程度未充分讨论;作者把"图像不对齐/缺失"列入 mesh/part refinement 应用,但量化评估有限。
  • 只做几何、未联合纹理/外观:全文聚焦 geometry(SDF/mesh),RGB/材质生成不在范围内。
  • 评测指标偏间接:生成质量主要靠 ULIP/Uni3D 相似度与用户研究,缺少更直接的几何细节定量指标;与闭源商业模型仅做用户研究胜率对比(因获取大量结果昂贵)。
  • 改进思路:把结构生成阶段端到端联合进来、或引入对粗结构错误更鲁棒的细化机制;把 localizable code 思想推广到纹理、4D 动态等。

相关工作与启发

  • vs VecSet / Hunyuan3D-2:都把 3D 压成紧凑 latent token,但 Hunyuan3D-2 的 latent 无显式结构、只靠单图 condition;LATTICE 给 latent 加体素锚定 + RoPE,把"位置"显式注入 DiT,因而细节与可 scale 性更强(重建 F1 82.78→98.53 同 4096/8192 量级)。
  • vs Sparse Voxel(XCube / Trellis / Direct3D-s2 / SparseFlex):它们靠空间局部性保细节,但序列长、需稀疏卷积/注意力;LATTICE 用半结构化 VoxSet 在远更紧凑的 latent(64×4096 vs 64×46592 等)下达到相当或更优的重建,且架构是纯 transformer。
  • vs FlashVDM:FlashVDM 指出 point-query latent 偷偷带位置且可 test-time scale,但没解决"测试时位置未知";LATTICE 用 voxel query 把这条洞察真正用进生成。

评分

  • 新颖性: ⭐⭐⭐⭐⭐ "localizability not locality" + VoxSet/voxel query 把 VecSet 与结构两全,视角与机制都新
  • 实验充分度: ⭐⭐⭐⭐ 重建/生成/消融/用户研究齐全,但生成指标偏间接、闭源对比仅用户研究
  • 写作质量: ⭐⭐⭐⭐⭐ 把"3D 为何落后 2D"的问题框架讲得透彻,动机与方法衔接清晰
  • 价值: ⭐⭐⭐⭐⭐ 纯 transformer 低成本 scale 到 4.5B + test-time scaling,对规模化高保真 3D 生成有实际推动