MeshMosaic: Scaling Artist Mesh Generation via Local-to-Global Assembly¶
会议: CVPR 2026
论文: CVF Open Access
代码: 项目页
领域: 3D视觉
关键词: 艺术家网格生成、自回归、局部到全局、边界条件、局部量化
一句话总结¶
MeshMosaic 把"整张网格一口气自回归生成"换成"先切块、逐块生成、再无缝拼接"的局部到全局策略,靠共享边界条件 + 逐块独立量化突破了序列长度和量化分辨率两大瓶颈,用 0.5B 小模型就把艺术家网格规模从约 8K 面拉到 10 万面以上,几何保真度和用户偏好都全面超过现有 SOTA。
研究背景与动机¶
领域现状:艺术家手工建模的三角网格(artist mesh)是影视、游戏、AR/VR 的基石,它的特点是拓扑风格化、边流有方向、三角面密度不均、有锐边和对称结构。继 MeshGPT 之后,主流做法是把无序网格"序列化"成 token,用 GPT 式自回归 transformer 来逐 token 预测三角面,代表作有 MeshAnythingV2、BPT、TreeMeshGPT、DeepMesh 等。
现有痛点:这类自回归方法卡在两个地方。其一是长序列瓶颈——整张网格序列化后 token 数巨大,transformer 难以处理,导致只能生成约 8K 面级别的网格;而生产级角色或主角资产动辄 10 万面以上,差了一个数量级。其二是量化分辨率受限——为了把坐标塞进有限词表,整张网格被统一量化(如 DeepMesh 用 \(512^3\) 网格量化整体),小物体的细节被粗糙的全局网格抹平,锐边和精细结构难以还原。
核心矛盾:想要高面数 + 高细节,就需要长序列 + 高量化分辨率;但 transformer 的算力和词表又把序列长度和量化粒度死死压住。"整张网格一次建模"这个范式本身把分辨率和规模耦死了。
本文目标:在不暴涨 token 序列、不牺牲量化粒度的前提下,把艺术家网格生成规模拉到 10 万面以上,同时保证跨区域的连续性、对称性和密度结构。
切入角度:作者从经典马赛克镶嵌艺术得到启发——整幅马赛克的全局复杂性和连贯性,是由一块块精致的局部瓷砖拼装出来的。网格也可以这样:把整张网格切成语义有意义的小块(patch),每块单独自回归生成、单独全分辨率量化,再靠共享边界把它们缝起来。
核心 idea:用"局部到全局的分块生成 + 拼接"代替"整体一次性生成"——每块 patch 用完整点云、全分辨率量化独立生成,相邻块之间共享边界条件保证无缝衔接,从根本上绕开长序列瓶颈并提升有效量化分辨率。
方法详解¶
整体框架¶
给定一个 3D 参考形状,目标是生成一张艺术家风格的三角网格。MeshMosaic 把这件事拆成"逐块生成":推理时先用 PartField 对输入形状做语义分割得到若干 patch,并确定它们的生成顺序;然后逐块自回归生成,每块在生成时都接收来自已生成相邻块的边界条件、当前块与整体形状的局部到全局点云特征,并在该块自己的归一化坐标系里做局部量化;最后把各块按边界位移补偿拼接(gluing)成一张干净、高细节的完整网格。整条流水线把"分辨率"和"规模"解耦:序列长度由单块大小决定(不再随整体面数爆炸),量化粒度则因为每块独立归一化到 \([0,1]\) 而获得更高的等效合并分辨率。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
A["输入:3D 参考形状"] --> B["语义分块 + BFS 排序<br/>PartField 切块、定生成顺序"]
B --> C["边界条件生成<br/>取 512 最近三角面<br/>GRU 编码"]
A --> D["局部到全局点云条件<br/>Michelangelo 编码<br/>当前块 + 整体形状"]
C --> E["局部量化逐块自回归<br/>每块独立归一化到 512³"]
D --> E
E -->|逐块循环 BFS 顺序| C
E --> F["边界位移补偿拼接<br/>对齐 seam"]
F --> G["输出:10 万面级完整网格"]
关键设计¶
1. 局部到全局的语义分块与 BFS 生成顺序:把"整张长序列"拆成可管理的小块
直接自回归生成整张网格,会同时撞上长序列和低量化分辨率两堵墙。MeshMosaic 的第一招是把形状切成多个 patch、逐块生成,这样每块的输入 token 数可控,又能在块内保留精细粒度。推理时用 PartField 做语义分割——它把形状表示为连续特征场,能产出贴合曲率流、语义对齐的边界,既利于真实感也方便后续编辑。切完块后还要定顺序:两个 patch 若有一对分属不同 segment 的相邻三角面就算相邻,于是从空间最低的 patch 出发做广度优先搜索(BFS),当前块有多个邻居时优先选坐标最低的那个,保证排序唯一确定。BFS 的关键作用是——除了新连通分量,每个后续块都至少连接到一个已生成块,从而能把关键的边界信息一路传播下去,维持结构的对称与平滑。
2. 共享边界条件与 GRU 注入:让相邻块"看见"邻居,避免断边、密度跳变、对称丢失
如果对每块都用同一套网络、不管它和邻居的连接关系,就会出现断裂边界、密度不规则、对称丢失等连续性问题。为此,生成某块时,作者把已生成相邻块的三角面当作边界条件喂进来。具体做法:对当前块只挑空间上最近的 512 个三角面(数据集里没有分割块的边界三角面超过这个数),避免序列过长导致的低效和信息稀释;这些三角面经 tokenizer 编码后,送进一个 GRU(门控循环单元) 网络得到边界 embedding。选 GRU 而非简单池化或定长编码器,是因为不同 patch 的边界长度随几何复杂度变化,GRU 能处理变长序列、捕捉时序依赖并选择性保留长上下文里的边界信息。拿到边界 embedding 后,作者把它拼接到目标块 token 序列的最前面,让自注意力同时作用于边界 token 和块内 token,使共享边界处的三角面自然延伸、融入邻块。对第一个块(没有任何先验边界),则喂入一段全是终止符的占位 token 作为中性起始上下文。
3. 逐块局部量化与边界位移补偿拼接:在不涨词表的前提下拿到更高有效分辨率,并消除 seam 错位
这是突破量化分辨率瓶颈的核心。以往方法(如 DeepMesh)对整张网格统一用 \(512^3\) 量化,小物体细节被全局网格抹平。MeshMosaic 改成每块独立归一化到 \([0,1]\) 再用 \(512^3\) 量化——因为每块只覆盖局部空间,归一化后同样的 \(512^3\) 词表对应到原始尺度上就是更细的格子,等效合并分辨率更高,锐边和精细结构得以保留。每块还配 16,384 个采样点作为输入(baseline 是对整体只采一组 16,384 点),既提分辨率又提供更丰富的条件信息。但局部量化会给每块带来微小位置偏移,若不处理,patch 接缝处会出现不连续。作者的解法是位移补偿拼接:计算当前块所引用的边界条件面,与它们在已拼装块中对应的原始量化位置之间的位移,然后把整个当前块按这个位移平移,精确对齐到已有部分。由于块间边界三角面是被精确复制的,这个 gluing 过程稳定且计算高效,最终拼出统一、细节丰富的完整网格。
4. 局部到全局点云条件 + 训练期随机分块:用全局上下文锚住局部生成,并提升泛化与多样性
边界条件只保证了局部连续,要保证全局协调还得给网络全局视野。作者在生成每块时,同时条件化于当前块点云和整体形状点云两组特征,二者都用冻结的 Michelangelo 编码器提取,再与 GRU 边界特征拼接,作为 transformer 的最终条件输入——这样每块既知道自己长什么样,也知道它在整体里该是什么样。训练侧则有意区别于推理:语义分割较慢且会降低多样性,所以训练时改用随机分块。给定有 \(N_f\) 个面的网格 \(M\),patch 数设为 \(N_{seg} = \frac{N_f}{2000} \times \lambda_{rand}\),其中 \(\lambda_{rand}\) 在 \([0.5, 2.5]\) 间随机采样以增加多样性;分母 2000 是为了让每块 token 化后的序列长度接近 9K 的窗口大小,利于高效训练。具体用最远点采样选 \(N_{seg}\) 个聚类中心,再用 Voronoi 分解按中心把网格切成块,BFS 排序取边界。作者还额外整理了一批带高质量连通分量标注的网格,直接用每个连通分量当一块,支撑更规整一致的分块并训练语义推理能力。推理时块数不显式约束,由 PartField 默认配置决定,模型能灵活适配从单块到几百块的情形。
损失函数 / 训练策略¶
实现基于已开源的 0.5B 参数 DeepMesh 模型微调:通过零初始化的线性层渐进融合新引入的 GRU 边界编码器和全局点云特征,局部点云特征直接映射到原始输入点云上。训练数据是精选的 310K 网格(其中约 90K 带连通分量信息),在 32 张 NVIDIA H20 96GB GPU 上训练 7 天,余弦学习率从 \(1\times10^{-4}\) 衰减到 \(1\times10^{-5}\),截断窗口大小沿用 DeepMesh 的 9K(50% 重叠)。训练和推理都用 KV-caching,采样温度 0.5 以保证生成稳定。
实验关键数据¶
主实验¶
在 ShapeNet、Thingi10K、Objaverse 三个公开数据集各随机取 100 个样本,与 MeshAnythingV2、BPT(0.5B,与本文同规模)、TreeMeshGPT、DeepMesh 对比,用 Hausdorff 距离(HD)、Chamfer 距离(CDL1/CDL2)、法向一致性(NC)、F-score(F1),以及专门衡量锐边保持的 Edge Chamfer Distance(ECD)和 Edge F-score(EF1)。
| 数据集 | 方法 | HD ↓ | CDL1 ↓ | NC ↑ | F1 ↑ | ECD ↓ | EF1 ↑ |
|---|---|---|---|---|---|---|---|
| ShapeNet | BPT | 0.017 | 0.003 | 0.962 | 0.875 | 0.040 | 0.159 |
| ShapeNet | DeepMesh | 0.037 | 0.004 | 0.967 | 0.791 | 0.056 | 0.177 |
| ShapeNet | Ours | 0.037 | 0.003 | 0.973 | 0.929 | 0.052 | 0.211 |
| Thingi10K | BPT | 0.157 | 0.035 | 0.875 | 0.496 | 0.051 | 0.179 |
| Thingi10K | DeepMesh | 0.165 | 0.026 | 0.853 | 0.321 | 0.031 | 0.137 |
| Thingi10K | Ours | 0.051 | 0.004 | 0.942 | 0.746 | 0.017 | 0.271 |
| Objaverse | BPT | 0.151 | 0.034 | 0.846 | 0.502 | 0.027 | 0.164 |
| Objaverse | DeepMesh | 0.111 | 0.016 | 0.866 | 0.471 | 0.021 | 0.168 |
| Objaverse | Ours | 0.072 | 0.007 | 0.919 | 0.785 | 0.006 | 0.348 |
可以看到:在简单的 ShapeNet 上本文与 BPT 互有胜负但综合最优(F1 0.929、EF1 0.211 均第一);而一旦形状变复杂(Thingi10K、Objaverse),本文优势急剧拉大——Thingi10K 上 HD 从 BPT 的 0.157、DeepMesh 的 0.165 降到 0.051,F1 从 ~0.5 提到 0.746;Objaverse 上 ECD 低到 0.006、EF1 高到 0.348,锐边保持遥遥领先。这印证了局部量化对细节和锐边的增益在复杂形状上最明显。
用户研究¶
采样 10 个测试模型,27 位有计算机图形学/3D 建模专长的专业用户匿名对 5 种方法在四个维度打分(每类只给前三名打 3/2/1 分,其余 0 分)。
| 方法 | Neatness ↑ | Artistry ↑ | Similarity to GT ↑ | Detail Recovery ↑ |
|---|---|---|---|---|
| MeshAnythingV2 | 0.864 | 0.780 | 0.612 | 0.628 |
| BPT | 1.040 | 0.932 | 1.072 | 1.084 |
| TreeMeshGPT | 0.696 | 0.684 | 0.600 | 0.512 |
| DeepMesh | 0.712 | 0.808 | 0.772 | 0.848 |
| Ours | 2.780 | 2.785 | 2.912 | 2.912 |
本文在四个维度全部第一,且分数(约 2.8–2.9)远高于第二名 BPT(约 1.0–1.1)——专业用户的偏好与几何指标趋势一致。作者解释,竞品分数低主要是因为单遍自回归模型在长而复杂的网格上经常"卡住"或失败,产出不完整网格;BPT 输出更稳定故排第二,但整体质量和细节仍不如本文。
关键发现¶
- 复杂形状上优势最大:三个数据集复杂度递增,本文领先幅度也随之扩大;对一架复杂战斗机模型,本文能用近 3 万面重建出精细细节,而其他方法通常只能产出几百到几千面。
- 锐边/边缘指标提升最显著:ECD、EF1 这类专测锐边的指标领先最多(Objaverse ECD 0.006、EF1 0.348),说明逐块局部量化的"高有效分辨率"主要兑现在高频细节和锐边上。
- 小模型大效果:仅 0.5B 参数就超过同规模 BPT-0.5B,几何完整性甚至超过未公开规模的商业版 Hunyuan3D。
- ⚠️ 各项条件(边界条件、不同分割输入、文本/图像输入、运行时间、多样性等)的消融实验在原文 Appendix A.2,正文未给消融表格,具体数字以原文附录为准。
亮点与洞察¶
- "分块 + 局部归一化量化"是提分辨率的免费午餐:不改词表、不增加单块序列长度,仅靠把每块独立归一化到 \([0,1]\) 再 \(512^3\) 量化,就换来更高的等效合并分辨率——这个思路可迁移到任何受词表大小限制的结构化 3D 自回归生成。
- GRU 处理变长边界条件很巧:边界三角面数量随几何复杂度浮动,用 GRU 而非定长/池化编码,天然吃变长序列又能选择性记忆,是个轻量但贴合问题的选择。
- 位移补偿拼接把"局部量化的副作用"反过来利用:局部量化必然引入接缝错位,作者不回避,而是用复制的边界面算位移、整块平移对齐,既消错位又因边界精确复制而稳定高效。
- 训练随机分块、推理语义分块的解耦:训练用随机 Voronoi 分块提多样性和泛化,推理用 PartField 语义分块求质量与可编辑性——同一框架两套分块策略,是很实用的工程洞察。
- 最"啊哈"的地方:把困扰自回归网格生成多年的长序列瓶颈,用"马赛克式分块拼装"这一范式级转变彻底绕开,而不是在 tokenizer/注意力上做边际优化。
局限与展望¶
- 远距离对称耦合弱:边界条件本质是局部的,距离较远的对称部件之间耦合不足。如原文 Fig.10 所示,人物两条手臂在连通性和密度合理的情况下仍出现轻微不对称;作者建议引入全局感知机制来耦合远距离部件。
- 依赖外部分割质量:推理时块的划分完全交给 PartField 默认配置,分割边界的好坏会直接影响拼接质量和最终网格结构(⚠️ 不同分割输入的影响在附录,具体以原文为准)。
- 生成速度与成本:逐块自回归仍是串行过程,10 万面级网格的生成耗时未在正文给出;作者把多节点同步生成、自适应量化列为未来工作以进一步提速提质。
- 训练成本不低(32×H20 训 7 天),复现门槛较高。
相关工作与启发¶
- vs DeepMesh / BPT(整体自回归): 它们都把整张网格序列化后一次性自回归,受长序列和统一量化双重限制,约 8K 面封顶;本文恰恰是基于 DeepMesh-0.5B 微调,但改成分块生成 + 局部量化,规模直接拉到 10 万面以上,且同参数量下质量更高。
- vs Meshtron(滑窗 hourglass): Meshtron 用 hourglass + 50% 重叠滑窗把长序列切成定长窗口来缓解长度问题,本文沿用了 9K 窗口设定,但更进一步从"切序列"上升到"切几何块",并配套边界条件和局部量化,解决的是分辨率而不只是序列长度。
- vs 基于分割的部件生成(PartCrafter / PartField): 它们把分块/部件作为结构先验用于可控合成或重建,本文把语义分割(PartField)当作生成顺序和量化粒度的组织工具,目的不是"生成部件"而是"为高分辨率自回归网格生成解耦规模与分辨率"。
评分¶
- 新颖性: ⭐⭐⭐⭐⭐ 从"整体一次生成"到"局部到全局分块拼装"的范式级转变,彻底绕开长序列瓶颈
- 实验充分度: ⭐⭐⭐⭐ 三数据集 + 6 项几何指标 + 27 人专业用户研究都很扎实,但正文未放消融表(在附录)
- 写作质量: ⭐⭐⭐⭐⭐ 动机—方法—实验逻辑清晰,马赛克类比贴切,图示丰富
- 价值: ⭐⭐⭐⭐⭐ 把艺术家网格生成推到 10 万面级且小模型可用,对游戏/影视生产管线有直接价值