Skip to content

如何为 3D 模型穿上衣服 ​

作者:Oleg Sidorkin,Cinevva CTO 兼联合创始人

拟合优化前后红色毛衣袖口的并排特写。

你有一个角色和一项服装资产。怎样才能把它们变成一个能够活动的着装角色?

把衬衫放到躯干外面只是第一步。衬衫还必须匹配角色的身体比例、跟随正确的关节、保留材质,并在动画过程中避免穿入身体。这些是彼此独立的问题,解决其中一个并不会自动解决其他问题。

我们使用一件可复用的毛衣和一个已有绑定的角色,为 Cinevva 的自动绑定工具探索了这套工作流。你可以在下方查看该实验的实际阶段。这是一个以手动引导方式完成的原型:在一个人形青蛙角色上测试毛衣,并以长裤和短裤作为额外基准;针对任意上传资产自动完成服装处理仍是未来工作。

在 3D 中探索整个过程 ​

查看器打开时显示的是已拟合并完成蒙皮的模型。启用对比前后效果,即可在左侧显示较早的阶段,首先看到仅完成缩放和定位的结果。毛衣已调整到合适尺寸并放置在角色附近,但仍保留原始手臂姿势,也尚未附着到骨架。右侧已经拟合并完成蒙皮,因此会跟随角色的动画。

启用对比后,使用对比阶段,依次查看定位、身体对齐,以及较早版本的拟合与蒙皮结果。从静止开始比较形状。按播放,看看为什么拟合和附着是两个不同的步骤。拖动任意视图可让两个相机同步环绕,也可以从角色背后查看。

这些是实验中保存的阶段,并非人为制作的“错误”动画。在前两个阶段中,未蒙皮的服装会停留在原位,而身体则会移动。在第三个阶段中,两件服装都已完成拟合和蒙皮,因此剩余差异较小。后面的特写将进一步检查这些细节。

使用查找动作搜索含 260 个动作的通用动作包,然后选择一个动画以自动开始播放。使用暂停停止播放。可以尝试行走、跳跃、蹲伏待机或坐姿待机。动画片段按需加载,并使用与 Rigger 相同的重定向代码。两个对比角色共享动画片段的时间轴,以及工作台基于根运动和蒙皮的地面贴合规则。地面网格保持固定;全身相机会跟随水平位移,但不会抵消骨盆的垂直运动。切换服装或拟合阶段时,可以保留当前动作。

选择诊断姿势可返回原始姿势控件,并复现本文中的测量案例。通用动作仅用于目视检查;此处报告的碰撞数量并不能证明服装在这些动作中不会发生穿模。在未蒙皮的准备阶段,身体移动时服装会保持固定。

浏览器会播放准备好的动画资产并执行重定向。它不会实时拟合服装或模拟布料。

1. 选择真正可复用的服装 ​

有两种实用的起点:专为特定虚拟形象系列设计的服装,以及需要适配到新身体上的独立服装网格。前者拥有已知的身体、姿势,并且通常还有既定的附着规范。后者提供更多自由,但也会给拟合流程带来更多工作。

本次实验选择了 MargaretToigo 的 fisherman sweater(渔夫毛衣),来自 MakeHuman Shirts01 合集。该特定资产标注为 CC0。它包含 OBJ 网格、UV 纹理、材质说明,以及面向 MakeHuman 身体模板的对应关系文件。该服装包含 2,126 个顶点和 4,164 个三角形。

在将下载内容视为可复用衣橱单品之前,请检查实际资产的授权和内容。预览图并不能证明你获得了独立的服装网格、可用纹理,或拥有分发着装模型的许可。

这件毛衣的模板对应关系很有用,但并非通用。它针对的是 MakeHuman 的身体拓扑。我们的青蛙使用不同的网格和骨架,因此导入 OBJ 并不会自动应用该对应关系。身体模板的对应权重也不同于骨架蒙皮权重。

也试试长裤和短裤 ​

毛衣主要考验肩部和手臂。长裤带来了不同的拟合问题:腰带需要环绕臀部,两条裤腿要能独立运动,裤裆还必须连接二者。短裤面临相同的臀部问题,但长度止于膝盖上方。

选择工装长裤或牛仔短裤。查看器会显示手动拟合并完成蒙皮的原型。启用对比前后效果,即可在左侧加入缩放和定位阶段。尝试左膝弯曲和双膝弯曲,然后环绕到角色背后。显示膝盖会在两个视图中标记相同的左右膝关节;隐藏服装会露出身体,以便直接比较站姿。在检查的全部六个姿势中,膝关节位置都完全一致。不同的长裤拟合轮廓可能会造成膝盖看起来更靠近的错觉。这是两个彼此独立的可复用网格,保留了各自的原始纹理,并非毛衣的换色版本。

两项资产均由 Cortu 制作,并在 MakeHuman pants pack 中标注为 CC0。在本次实验中,我们对低分辨率网格进行了细分,将臀部和腿部区域映射到青蛙的关节,应用局部间隙修正,并从附近的身体三角形传递权重。控件会重放一段专门制作的下半身诊断动作。

这些服装示例仍处于原型阶段。毛衣、长裤和短裤的验证结果各不相同;下文的拟合经验会说明哪些方面得到了改善,以及哪些问题仍未解决。

2. 确定身体及其静止姿势 ​

拟合系统需要知道服装应当包围什么。在这个案例中,我们本地已绑定的青蛙拥有外露的身体网格、修长的手臂、较大的手掌,以及一套包含 22 个关节的人形骨架。这为我们提供了可用的目标表面,以及有明确意义的肩、肘、腕、髋和颈部标志点。

已经穿着外套的角色可能只包含外套的外表面,下方未必有完整的躯干。在这种情况下,可行的选择包括:在现有几何体外拟合另一层外衣、使用明确标注为近似形状的身体代理,或获取合适的基础身体。仅凭关节名称无法恢复缺失的表面。

拟合前,应将服装和身体置于同一个坐标系中。统一二者的缩放、朝向、对象变换和静止姿势。一件围绕下垂手臂制作的服装,不会仅仅因为其边界框与 T 姿势角色高度相同就自动匹配。

这也解释了为什么动画重定向不等于服装拟合:在骨架之间传递动作,并不会让衬衫适应新的胸部形状,也不会自动调整袖长。

3. 让服装形状适配身体 ​

第一个演示将简单定位与更精细的对齐区分开来。我们的原型从骨架读取目标标志点,并在毛衣上使用明确对应的标志点。躯干变形和手臂映射负责完成初始拟合,手臂各段之间采用连续混合。

下一步会执行受限的表面间隙修正,同时平滑位移。其目标是在不破坏服装形状的情况下,将与身体重叠的布料向外移动。这只是一个简单的静态拟合基准,并非布料求解器。

不同的输入约定适合不同的方法:

起点实用的拟合方式仍需检查的内容
为同一身体模板制作的服装应用已知的模板对应关系或受支持的体型控制姿势、比例和资产特有的假设
独立服装与不同的身体对齐标志点或拟合笼,变形服装,然后消除重叠接缝、轮廓、间隙和局部拉伸
宽松或多层服装使用代理和具备碰撞感知能力的拟合;考虑离线布料模拟层级顺序、自碰撞和体积保持

该表描述了可选的工作流。我们的实验采用第二种方式:先对毛衣和长裤进行标志点拟合,再为短裤使用变形笼。这些实验并不能验证所有方法或服装类别。

拟合时要保留设计意图。宽松外套不应像涂在身体表面一样紧贴塌缩。裙子需要为两条腿都留出空间。为了简化优化器的输入,不应不加区分地焊接 UV 接缝和独立层。

4. 将拟合后的服装附着到骨架 ​

拟合完成后,服装仍需要回答另一个问题:每个顶点应由哪些骨骼驱动?

将整件毛衣设为角色的子对象,可以让它跟随角色整体移动,但不会让袖子在肘部弯曲。骨架蒙皮会为每个顶点分配多个关节变换的加权组合。对于贴近身体的服装,身体已有的权重场是一个很有用的起点。

对于毛衣,我们的原型会传递可靠的表面权重,并使用可信邻近区域填补不确定区域,采用的方法参考了 Robust Skin Weights Transfer via Weight Inpainting。匹配结果会按几何条件筛选,而明确的附着意图用于处理存在歧义的区域。对于袖子,附近的手掌未必是正确的权重来源;但对于手套,它可能就是。

长裤和短裤使用更简单的最近三角形重心坐标传递方式,将身体权重传递到服装,并将每个顶点的关节影响数量限制为四个。即便如此,仍需仔细检查裤裆和每个裤腿开口周围的区域。

最终得到的服装可以跟随现有动画,但还没有独立的布料运动。布料模拟、弹簧驱动的次级运动和烘焙布料动画都是额外选项,并不会仅仅因为网格拥有蒙皮权重就自动出现。

在主演示中,在播放期间比较缩放并定位与拟合并传递权重。这正是“服装只是放在角色周围”和“服装真正参与角色姿势变化”之间的区别。

5. 在运动中测试着装角色 ​

静止姿势下的拟合可能会掩盖不良附着,或隐藏只在关节弯曲时才出现的穿模。从正面、侧面和背面检查角色,然后测试最容易对服装造成压力的动作:抬起手臂、弯曲手肘、活动手腕,以及在服装覆盖相应区域时测试髋部和膝盖。

第一次使用真实服装的测试说明了为什么必须进行多项测量:

初始拟合阶段穿过身体的服装三角形数量
简单缩放352
标志点对齐495
表面间隙修正33

标志点阶段让服装定位更符合目标,但增加了穿模。表面修正大幅降低了数量,但仍未达到无碰撞标准。

仅检查顶点甚至更具误导性。该测试报告称,位于最近身体表面法线负方向一侧的顶点数量为零,但三角形检查仍发现了穿透。即使三角形的三个角看起来都避开了附近表面,三角形本身仍可能穿过身体。

长裤和短裤带给我们的经验 ​

下半身实验暴露了一个仅靠碰撞评分无法发现的问题:服装即使减少了穿模,看起来仍可能不正确。

长裤失去了原本的形状。 仅进行间隙修正保留了过宽的臀部。将布料向身体拉近虽然消除了这种外扩,却也把裤裆向下拖,使长裤看起来像一层紧绷变形的表面。两个角色的膝关节位置一致,并不能证明服装拟合正确。

随后,我们固定了腰带、裤裆、膝盖和裤脚的高度,并将间隙修正限制为水平方向移动。这恢复了裤裆深度,但从近距离正面、侧面和背面观察时,仍可看到裤裆处夹紧、膝部棱角明显、裤脚不齐,以及工装裤轮廓丢失等问题。当前长裤在静止时仍有 53 个受影响的三角形,在六个采样姿势中则有 50–92 个。下垂版本在静止时只有 21 处穿模,但其拟合效果不可接受。

短裤需要专门的约束。 应用较早的拟合基准后,腰部外扩、裤裆折叠,裤腿开口也过宽。我们用一个 5 × 5 × 5 变形笼替代了各顶点的独立移动:这是一种粗略网格,其移动会共同变形附近的布料。变形笼在固定垂直裤裆深度的同时,保留了源网格和 UV 接缝。它减少了参差不齐的褶皱,但最初仍导致腰带与躯干之间存在空隙。

接下来的修正识别出了腰带实际由 136 个顶点组成的边界环,并将其拟合到躯干横截面。这改善了侧面轮廓。随后从背面检查时,又发现了边界和顶点间隙检查未能捕捉到的穿模:即使各顶点都与身体保持间隙,顶点之间的布料三角形仍可能与身体相交。 后侧腰头需要进行三角形层级的修正。 我们收紧了边界约束,检查了整个腰头条带,并仅将发生相交的服装面片沿其穿过的身体三角形平面向外移动。腰头高度保持不变。

短裤版本整件服装:静止时受影响的三角形后侧腰头:静止时受影响的三角形
初始合身基线143未单独测量
使用首个腰头约束的笼式拟合289
当前后侧腰头修正190

最终检查发现,在全部六个采样姿势中,后侧腰头均为零穿插,而每个姿势的其他区域仍有 19 个受影响的三角形。后侧区域根据源服装的三角形质心定义;这是局部结果,并不表示整条短裤已经通过检查。短裤测量数据同时包含上一个腰头版本和当前修正版本。

从后方查看当前的牛仔短裤,展示修正后的腰头以及仍然存在的后侧下部接缝缺陷。

当前后视图。腰头穿插问题在已检查的姿势中得到修正;后侧下部接缝缺陷仍然可见。裤腿开口也需要进一步优化。

腰头目标值包含了围绕该模型预留的 14 mm 松量。最终边界与这些目标值的平均偏差为 2.0 mm,最大偏差为 5.4 mm。这些是在场景米制约定下的合身参数和目标误差,并非通用的裁剪尺寸或碰撞保证。

实际经验是,应分别为每件服装设定有关裆高、轮廓、接缝完整性、绑定和碰撞间隙的要求。对于短裤,下一步是围绕各自对应的大腿约束每个裤脚,并在不影响已修正腰头的前提下修复后侧接缝。之后还必须进行更大步幅的行走、坐下和深蹲测试。离散检查无法覆盖自碰撞、共面接触或采样帧之间的运动。

细节检查:袖子与手腕 ​

在这套更完整的工作流程中,袖子是一个很有代表性的失败案例。按完整角色比例查看时,早期的合身毛衣与优化后的版本看起来很相似。只有在特写和手腕压力测试姿势下,两者的差异才更加明显。

下方查看器展示了优化后的袖口。启用优化前后对比可同时检查早期袖口;两者都已经完成拟合和蒙皮。选择手腕向前 45°或手腕向后 45°,然后检查袖口开口。这是优化前后的对比,而不是整个拟合流程的起点与终点。

我们提取了每个袖口的实际边界环,使手臂映射在肘部区域平滑过渡,并将袖口修正分散到相邻布料上。对于这只青蛙,将开口朝前臂方向移动 50 mm,为它的大手留出了更多空间。该偏移量是针对这个角色调节的参数,并非适用于所有服装的通用规则。

检查姿势早期拟合:受影响的袖子三角形优化后的拟合
静止120
肘部弯曲 75°120
手腕向前 45°790
手腕向后 45°600

更广泛的测试仍然发现,22 个动画采样帧中有六帧存在一个受影响的袖子三角形。整件服装在静止状态下的袖子遮罩之外也仍有21 个受影响的三角形。四个没有问题的检查姿势并不意味着整套服装不存在碰撞。

这些是离线进行的离散三角形穿插测量。它们不包括服装自相交、共面接触和采样帧之间发生的事件;袖子遮罩也不包括最内侧的肩部过渡区域。演示不会实时计算碰撞评分。袖子测量数据和动画测量数据可分别查看。

6. 导出、重新加载并验证 ​

穿好服装的角色需要在离开拟合工具后仍能正常使用。请在目标查看器或引擎中验证几何体、材质、UV、骨架绑定和动画。

我们将结果导出为 GLB,并在 Three.js 中独立加载。毛衣保留了纹理和蒙皮。UV 接缝使其导出的顶点数从 2,126 增加到 2,386,但这本身并不表示存在几何体问题。在文件的米制约定下,重新加载后测得的最大静止表面偏差低于 0.001 mm。

这是一项导出一致性检查,并不代表裁剪在物理上完全准确。本实验尚未集成或验证公开版 Rigger 的完整服装上传和导出工作流程。

AI 能提供哪些帮助,以及哪些工作仍需工程实现 ​

人工审查发现了下垂的裤裆、短裤腰部过松,以及早期检查未能发现的后侧穿插。随后,AI 辅助视觉检查审视了正面、侧面和背面的特写视图,其中包括临时使用的纯色材质,以便更清楚地观察网格缺陷。我们将这些观察结果与实测几何数据相结合,并保留了失败的迭代版本。

这些反馈改变了方法:骨架匹配并不能证明服装形状合身,顶点没有穿插并不能证明三角形没有穿插,而碰撞数量减少也不能作为轮廓变形的理由。

这是使用明确标志点和拟合规则的 AI 辅助工程。我们没有训练通用服装拟合器,也没有证明视觉模型可以审核任意服装。

下一步是为短裤增加接缝和裤脚约束,在保持形状的前提下拟合长裤,使用真正的人体基础模型,并使用一件未参与参数调节的服装进行验证。我们还需要开展更广泛的动画测试,并开发接入真实 Rigger 工作流程的适配器。

可复用的工作流程已经很明确:选择合适的服装 → 确定身体与静止姿势 → 拟合形状 → 转移绑定 → 测试运动和碰撞 → 验证导出。本实验展示了这一流程的具体实现,同时也指出了仅凭一张看起来可信的图片仍不足以判断结果的环节。