打开网易新闻 查看精彩图片

这项由香港大学、上海科技大学、山东大学、德稿科技(Deemos Technology)等机构联合开展的研究,以预印本形式于2026年4月发布在arXiv平台,论文编号为arXiv:2604.09132。研究提出了一个名为SATO(Strips as Tokens,即"条带即令牌")的全新框架,目标是让计算机自动生成真正达到专业艺术家水准的三维网格模型,并同时完成贴图区域划分。

如果你曾经玩过3D游戏或者看过3D动画电影,你一定见过那些精心设计的角色和场景模型。这些模型在计算机里并不是一个光滑的实体,而是由成千上万个小三角形或四边形拼接而成的"网格",就像一件精心剪裁的纸模玩具。游戏公司雇用的专业3D建模师,会手工排列这些多边形,让它们沿着角色肌肉的走向整齐排列,在高曲率的面部多铺一些面片,在平坦的后背少用一些——这背后是大量人工和审美经验的积累。现在,SATO要做的事情,就是让计算机自动完成这件原本需要专业建模师完成的工作。

一、为什么"自动建模"这么难?

要理解SATO的价值,先得明白自动建模难在哪里。计算机当然可以从一张照片或者一团点云数据(就像激光扫描仪扫出来的一堆空间坐标点)中还原出一个大致的三维形状——这类技术已经相当成熟。但还原出来的东西,往往是密密麻麻、杂乱无章的三角形汤,每个三角形的方向、大小都是随机的,就像用砂砾堆出的城堡。这样的模型虽然看起来形状差不多,但完全不能用于正式的游戏开发或影视制作,因为它不利于后续的骨骼绑定、动画制作和贴图工作。

艺术家手工建的模型则完全不同。以人脸为例,建模师会让面片沿着眼眶、嘴角、颧骨的走势排列,形成一圈一圈的"边流",就像年轮一样有规律。在下巴这样曲率变化大的地方,面片会密一些;额头这种相对平坦的区域,面片就稀一些。这种规律性不是审美癖好,而是功能需求:只有这样的拓扑结构,后续的动画变形才会自然,绑骨骼才会方便,贴图才会准确。

过去几年,研究者们尝试用自回归Transformer(一种序列预测模型,和ChatGPT用的技术同宗)来生成这类艺术家风格的网格。思路是:把网格的顶点坐标序列化成一串数字,然后让语言模型一个一个地预测下一个坐标,就像预测文章里的下一个词一样。这个路线是可行的,但前人的做法有两个主要缺陷:一是直接按坐标排序,序列太长,效率极低;二是用一种叫"Delaunay"的数学方法把网格切成小块,这种方法追求数学上的"最优三角剖分"(比如让每个三角形尽量接近等边),但这和艺术家建模的习惯背道而驰,切出来的小块也会频繁打断面片的连续流动。

正是在这样的背景下,SATO的研究团队找到了一个新的灵感来源——计算机图形学里一个古老的概念:三角条带。

二、"条带":一个来自经典图形学的旧招式

三角条带(Triangle Strip)是一个在计算机图形学领域使用了几十年的技巧,原本是为了在显卡渲染时节省内存而设计的。它的原理很简单:普通存储方式下,每个三角形需要记录三个顶点,三个三角形就要存九个顶点数据;但如果这三个三角形是首尾相连的——也就是每两个相邻三角形共享一条边——那就可以只存五个顶点,因为每多一个新三角形只需要新增一个顶点。

用一个更生活化的比喻来解释:普通存储三角形就像把每个饺子的材料单独列出来,包括面粉、馅料各自的分量;三角条带就像做折纸,每一步只需要把纸向一个方向折一下,前一步的结果直接延续到下一步,不用每次都重新开始。

SATO的核心洞察在于:艺术家建模时,手工排列面片的方式天然地形成了一条一条的"条带"结构。建模师往往从某个起点开始,沿着某个方向一个面片一个面片地延伸,就像铺地砖一样,铺完一排再铺下一排。这种"条带"结构既保留了面片的连续性,又自然地记录了边流方向。

于是研究团队设计了一套"条带提取"算法(在论文里是Algorithm 1):首先建立面片与边的邻接关系,然后从坐标最低的未访问面片开始,沿着共享边不断延伸,把遇到的面片一个一个串成条带,直到碰到边界或者已经访问过的面片为止,再从下一个未访问面片开始新的条带。这个过程像拉链一样,一条一条地把整个网格"拉"成若干条有序的带状序列。

这套算法有一个巧妙的设计:通过调整一个叫"步长"(stride)的参数,同一套逻辑既能处理三角形网格(每步新增一个顶点,步长为1),也能处理四边形网格(每步新增两个顶点,步长为2),而且产生的顶点序列是完全统一的格式。换句话说,一个四边形面片可以理解为两个相邻的三角形——SATO利用这个几何事实,让同一串数字序列既可以被解码成三角形网格,也可以被解码成四边形网格,只需要在解码时切换一下步长参数即可。这个性质后面还会发挥重要作用。

三、如何把三维模型"翻译"成数字序列?

把网格转换成序列,首先要把三维坐标离散化。SATO采用了一种三层分级量化的方法,把连续的坐标空间切成512×512×512个小格子(总共超过1亿个格子),每个顶点被分配到一个格子里。但不是直接用格子编号,而是分三层编码:第一层用一个粗粒度编号定位大致区域,第二层在第一层的基础上进一步细化,第三层给出最终精确位置。这就像快递地址:先写省,再写市,再写具体街道,一层比一层详细。

有了这个三层编码,还能做一件进一步压缩序列的事情:前缀共享。在一条条带里,相邻的两个顶点往往离得很近,它们的第一层和第二层编码可能完全相同,只有第三层不同。这时候就不用重复写前两层,只写第三层的差异就够了。论文中统计,在测试集上,约44.3%的顶点只需要一个第三层编码就能表示,35%的顶点需要第二和第三层,只有约20.7%的顶点需要完整的三层编码。这意味着平均每个顶点用不到两个数字就能表示,极大地缩短了序列长度。

在条带与条带之间的切换怎么表示呢?研究团队设计了一个扩展词汇表:当一个新条带开始时,它的第一个顶点使用一种特殊的"条带切换"编码,这个编码在数值上对应相同的空间位置,但它出现时会同时告诉解码器:重置前缀缓存,从这里开始一个新的条带。这样不需要额外插入分隔符,序列长度不会增加,但切换信息已经自然地嵌入其中了。

与之前的同类方法(如BPT和DeepMesh)相比,SATO的条带往往比它们的"小块"长得多,因此切换次数更少,前缀共享能持续更长时间。论文中用100个随机采样的Objaverse数据集网格做了测试,SATO的压缩率(序列长度除以面片数乘以9)为0.283,优于DeepMesh的0.330,尽管SATO的词汇表还额外为UV分区功能多加了一组特殊编码。

四、"UV分区"是什么?为什么要在生成时就做?

给三维模型贴图是游戏和影视制作中不可缺少的步骤。简单来说,贴图就是把一张二维图片"包裹"到三维模型的表面,就像给礼品盒包装纸一样。要做到这一点,需要先把三维表面"展开"成一张二维地图,这个过程叫UV展开(UV Unwrapping)。展开后的二维区域叫UV图,每个连续的区域块叫一个UV岛(UV Island)。

展开时需要沿着某些边"剪开",就像剪开一个纸盒才能把它摊平。剪开的位置叫缝合边(Seam)。专业建模师在放置缝合边时有一套约定俗成的规则:缝合边应该放在视觉上不显眼的地方,比如腋下、裤裆内侧;每个UV岛应该尽量完整、形状规则,便于绘制纹理;左右对称的部分最好共用同一个UV岛,节省贴图空间。

现有的大多数自动建模方法要么完全不管UV,要么在生成网格之后再单独跑一个UV展开算法,这样的结果往往不符合艺术家习惯,产生的UV岛形状不规则、缝合边位置奇怪。

SATO的做法是把UV分区信息直接编码进生成序列里。具体来说,在序列化网格时,先把所有面片按照它们所属的UV岛分组,然后在遍历时确保同一个UV岛内的所有面片先处理完,再跳到下一个UV岛。跨UV岛时,使用另一种特殊的"UV切换"编码来标记,这个编码不仅表示一个新条带的开始,还表示进入了一个新的UV岛。

这样,当模型生成时,它不仅在预测顶点位置,还在预测哪些面片属于同一个UV岛、哪里是UV岛的边界。生成结束后,UV分区结构已经完全确定。研究团队随后用Blender(一个开源的3D软件)的标准展开算法,根据这个分区结构计算出实际的二维UV坐标。也就是说,SATO学的是"如何分区",而不是直接预测二维坐标——这大大简化了学习难度,同时产生的分区结构因为遵循艺术家建模逻辑,展开后的UV质量也很高。

五、模型是怎么训练的?

整个训练分三个阶段,就像学开车先学理论、再练技能、最后考证一样。

第一阶段是在大规模三角形网格数据上预训练。训练数据来自Objaverse、ShapeNet、Thingi10K等公开数据集,以及Shutterstock授权的商业数据集,经过严格的质量过滤(去除非流形、面数不在500到16000之间、顶点面比过高的模型等)后,约有147万个三角形网格。这个阶段让模型学会如何从点云生成合理的网格结构,建立起基本的几何先验知识。

第二阶段是引入UV分区信息的后训练。研究团队发现,如果一开始就同时学习网格几何和UV分区,模型会顾此失彼:既学不好几何形状,也学不好UV分区边界,训练容易崩溃或陷入随机输出的状态。即使换用预训练好的点云编码器也无济于事。正确的做法是:先用第一阶段的模型作为初始化,再引入UV分区序列继续训练。这时模型已经掌握了几何生成的基本能力,只需要额外学会UV切换时的行为,收敛快得多。有UV分区标注的数据约有111万个。

第三阶段是四边形网格微调。高质量的四边形网格数据远比三角形网格稀少,研究团队收集了约12万个有UV标注的四边形网格用于微调。由于条带表示本身就统一了三角形和四边形的格式,微调只需要让模型适应四边形特有的步长解码规则,不需要修改任何模型结构,成本很低。而且这个微调还有个意外收获:微调之后,模型生成的三角形网格质量也有提升——因为四边形训练数据让模型学会了更整洁的边流走向,减少了三角形条带中出现"转弯"的情况。

整个模型采用了5亿参数的Hourglass Transformer架构,点云编码器约2.7亿参数,在64到256块英伟达A800 GPU上分阶段训练,总计耗时约11天。推理时使用KV缓存加速解码,采样温度设为0.5。

六、实验结果:比较了多少方法,强了多少?

在三角形网格生成任务上,研究团队与四个公开权重的竞争方法进行了比较,包括MeshAnythingV2、TreeMeshGPT、BPT和DeepMesh。测试集来自ShapeNet、Thingi10K和Objaverse三个数据集,各50到100个形状,严格排除在训练数据之外。

评估使用四个几何精度指标:法向一致性(NC,衡量面片方向是否准确,越接近1越好)、Chamfer距离(CD,衡量重建表面和参考表面之间的平均点对点距离,越低越好)、Hausdorff距离(HD,衡量最坏情况下的误差,越低越好)、F1分数(衡量精度和召回率的综合,越高越好)。

在所有三个数据集的所有指标上,SATO几乎全面领先。以Objaverse数据集为例,SATO的NC达到0.909,CD为0.009,F1为0.503,而表现最接近的竞争方法BPT的相应数值分别是0.841、0.030、0.265。F1分数的提升幅度尤其显著,接近翻倍——这意味着SATO生成的网格不仅在平均情况下更准确,在覆盖细节方面也明显更好。

除了自动指标,研究团队还招募了25位来自3D工业界的专业人士进行主观评估,每人评估30组形状(三角形、四边形和UV分区各10组)。每组提供四个视角的渲染图和参考形状,让评估者给五个方法排名(第一名得3分,第二名得2分,第三名得1分,其余得0分)。在三角形网格评估中,SATO平均得分2.61分,远高于DeepMesh的1.17分和BPT的1.40分,方差也最小(0.49),说明评价最为一致稳定。

在UV分区任务上,最接近的开源对比方法是PartUV,它先用一个叫PartField的分割模型对网格进行语义分割,再在此基础上进行UV展开,但它本身不生成网格。从可视化结果来看,SATO生成的UV岛更整洁、更规则;PartUV无论是用在SATO生成的三角形网格上,还是用在原始的高质量真值网格上,产生的UV图都明显更杂乱。

研究团队还计算了四个UV失真度指标:L2拉伸、面积畸变、角度畸变和对称Dirichlet能量,数值越接近理想值(1或4)越好。SATO在全部四个指标上均优于PartField+展开算法的方案,说明SATO预测的UV分区边界更贴近几何特征,展开后的UV岛形状更规则。

在四边形网格生成上,由于QuadGPT(一个专门做四边形生成的方法)没有公开代码和预训练权重,研究团队转而与经典的参数化重网格化方法(IM、QuadriFlow、QuadWild)以及基于神经网络的方法(NeurCross、CrossGen)进行比较。这些方法的共同特点是在给定几何体的基础上进行重网格化,而SATO是从点云重新生成网格,任务难度更高。尽管如此,SATO在几何精度上与这些方法相当甚至略有优势,而在视觉质量、面片规则性和艺术家风格方面明显更优。用户调研结果也支持这一判断:SATO获得1.8分,优于NeurCross的1.48分、CrossGen的1.24分和QuadWild的1.08分。

七、消融实验:每个设计有多重要?

为了验证各个设计决策的实际效果,研究团队进行了一系列对照实验。

首先对比了SATO的条带化分词器和DeepMesh的块状分词器,在同一个茶壶模型上做过拟合实验(即让模型反复学习同一个形状,看谁学得更快更好)。结果显示,SATO的分词器在编码同一个茶壶时产生的序列约为2万个token,而DeepMesh产生约2.4万个,序列更短;条带切换次数也更少(约981次对比1654次),减少了上下文的干扰;最重要的是,编码时间从DeepMesh的2.061秒降至SATO的0.319秒,训练吞吐量从0.442步/秒提升至0.488步/秒。在视觉上,SATO在训练1万步时就已经能生成相当干净的UV分区,而DeepMesh在同等步数下仍然较为混乱。

研究团队还进行了大规模的分词器对比实验:用完全相同的模型架构、训练数据、优化器和超参数,只替换分词器,在64块A800 GPU上训练20万步。结果在所有四个几何指标上,SATO的分词器都明显更优(例如F1从0.455提升至0.560)。

在UV训练策略上,三种对比方案的实验结果清晰地支持了两阶段训练的必要性:完全从零开始训练UV模型的方案,以及使用预训练好的点云编码器但其余部分从零开始的方案,两者都无法让模型可靠地与输入点云对齐,产生的结果基本上是随机形状。只有先预训练几何生成、再引入UV分区的两阶段方案才能正常工作。

在四边形微调的效果上,对比了微调前后的三角形网格质量,发现微调后的模型产生的三角形网格更整洁,尤其是在原本容易出现细长尖三角形的区域,面片形状更接近直角三角形或接近正方形的四边形,更符合艺术家的建模习惯。

归根结底,SATO做的事情,本质上是把几十年来专业3D建模师积累的隐性知识,通过一个精心设计的序列化格式,注入到自回归生成模型里。条带结构不是一个噱头,而是一个把"艺术家怎么思考网格"这件事翻译成机器能学习的语言的关键媒介。当模型学会沿着条带延伸时,它其实是在学习"边流应该连续";当它学会UV切换编码时,它学的是"这里是一块独立的UV岛"。这种设计让几何学习和语义学习互不干扰,又在同一个框架下融为一体。

这项研究目前也有一些局限。四边形输出在少数情况下(如条带长度为奇数时)会出现局部三角形,需要后处理来修复。近球形物体的边流规则性仍然不够理想,这与训练数据中规则球形四边形网格样本较少有关。论文在结论中坦承,随着更丰富的四边形数据集出现,这些问题有望进一步改善。

对于普通用户而言,SATO意味着未来可能出现的工具:拍一张照片,或者用文字描述一个形状,就能自动生成可以直接导入游戏引擎或动画软件使用的专业级三维模型,不需要建模师手工调整拓扑,也不需要额外跑UV展开工具。这条路还在开拓中,但SATO让这个目标又近了一步。想进一步了解技术细节的读者,可以通过arXiv编号2604.09132查阅完整论文。

Q&A

Q1:SATO生成的三维网格和普通方法生成的有什么区别?

A:普通自动建模方法(比如Marching Cubes)生成的三维网格往往是密密麻麻、杂乱无章的三角形,面片方向随机,不符合动画绑骨和贴图的需求。SATO生成的网格模仿专业建模师的建模习惯,面片沿着形体表面的曲率方向整齐排列,高曲率区域密集、平坦区域稀疏,同时还能自动划分UV岛,可以直接用于游戏和影视制作流程。

Q2:SATO如何同时支持三角形和四边形两种网格输出?

A:SATO使用一种基于"条带"的统一序列格式来表示网格,利用四边形由两个相邻三角形组成的几何事实,让同一串数字序列可以用两种方式解码:解码步长设为1时输出三角形网格,步长设为2时输出四边形网格。切换输出类型不需要改变模型结构或重新训练,只需在推理时调整解码参数即可。

Q3:UV分区和UV展开有什么区别,SATO做的是哪个?

A:UV展开是把三维表面"摊平"成二维图的完整过程,包括决定在哪里"剪开"以及计算二维坐标两个步骤。UV分区(UV Segmentation)只是其中第一步——决定把三维表面分成哪几块独立区域。SATO做的是UV分区,即预测哪些面片属于同一个UV岛,但不预测具体的二维坐标。分区完成后,二维坐标由Blender的标准展开算法根据分区结构自动计算。