如何为 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 | 未单独测量 |
| 使用首个腰头约束的笼式拟合 | 28 | 9 |
| 当前后侧腰头修正 | 19 | 0 |
最终检查发现,在全部六个采样姿势中,后侧腰头均为零穿插,而每个姿势的其他区域仍有 19 个受影响的三角形。后侧区域根据源服装的三角形质心定义;这是局部结果,并不表示整条短裤已经通过检查。短裤测量数据同时包含上一个腰头版本和当前修正版本。

当前后视图。腰头穿插问题在已检查的姿势中得到修正;后侧下部接缝缺陷仍然可见。裤腿开口也需要进一步优化。
腰头目标值包含了围绕该模型预留的 14 mm 松量。最终边界与这些目标值的平均偏差为 2.0 mm,最大偏差为 5.4 mm。这些是在场景米制约定下的合身参数和目标误差,并非通用的裁剪尺寸或碰撞保证。
实际经验是,应分别为每件服装设定有关裆高、轮廓、接缝完整性、绑定和碰撞间隙的要求。对于短裤,下一步是围绕各自对应的大腿约束每个裤脚,并在不影响已修正腰头的前提下修复后侧接缝。之后还必须进行更大步幅的行走、坐下和深蹲测试。离散检查无法覆盖自碰撞、共面接触或采样帧之间的运动。
细节检查:袖子与手腕
在这套更完整的工作流程中,袖子是一个很有代表性的失败案例。按完整角色比例查看时,早期的合身毛衣与优化后的版本看起来很相似。只有在特写和手腕压力测试姿势下,两者的差异才更加明显。
下方查看器展示了优化后的袖口。启用优化前后对比可同时检查早期袖口;两者都已经完成拟合和蒙皮。选择手腕向前 45°或手腕向后 45°,然后检查袖口开口。这是优化前后的对比,而不是整个拟合流程的起点与终点。
我们提取了每个袖口的实际边界环,使手臂映射在肘部区域平滑过渡,并将袖口修正分散到相邻布料上。对于这只青蛙,将开口朝前臂方向移动 50 mm,为它的大手留出了更多空间。该偏移量是针对这个角色调节的参数,并非适用于所有服装的通用规则。
| 检查姿势 | 早期拟合:受影响的袖子三角形 | 优化后的拟合 |
|---|---|---|
| 静止 | 12 | 0 |
| 肘部弯曲 75° | 12 | 0 |
| 手腕向前 45° | 79 | 0 |
| 手腕向后 45° | 60 | 0 |
更广泛的测试仍然发现,22 个动画采样帧中有六帧存在一个受影响的袖子三角形。整件服装在静止状态下的袖子遮罩之外也仍有21 个受影响的三角形。四个没有问题的检查姿势并不意味着整套服装不存在碰撞。
这些是离线进行的离散三角形穿插测量。它们不包括服装自相交、共面接触和采样帧之间发生的事件;袖子遮罩也不包括最内侧的肩部过渡区域。演示不会实时计算碰撞评分。袖子测量数据和动画测量数据可分别查看。
6. 导出、重新加载并验证
穿好服装的角色需要在离开拟合工具后仍能正常使用。请在目标查看器或引擎中验证几何体、材质、UV、骨架绑定和动画。
我们将结果导出为 GLB,并在 Three.js 中独立加载。毛衣保留了纹理和蒙皮。UV 接缝使其导出的顶点数从 2,126 增加到 2,386,但这本身并不表示存在几何体问题。在文件的米制约定下,重新加载后测得的最大静止表面偏差低于 0.001 mm。
这是一项导出一致性检查,并不代表裁剪在物理上完全准确。本实验尚未集成或验证公开版 Rigger 的完整服装上传和导出工作流程。
AI 能提供哪些帮助,以及哪些工作仍需工程实现
人工审查发现了下垂的裤裆、短裤腰部过松,以及早期检查未能发现的后侧穿插。随后,AI 辅助视觉检查审视了正面、侧面和背面的特写视图,其中包括临时使用的纯色材质,以便更清楚地观察网格缺陷。我们将这些观察结果与实测几何数据相结合,并保留了失败的迭代版本。
这些反馈改变了方法:骨架匹配并不能证明服装形状合身,顶点没有穿插并不能证明三角形没有穿插,而碰撞数量减少也不能作为轮廓变形的理由。
这是使用明确标志点和拟合规则的 AI 辅助工程。我们没有训练通用服装拟合器,也没有证明视觉模型可以审核任意服装。
下一步是为短裤增加接缝和裤脚约束,在保持形状的前提下拟合长裤,使用真正的人体基础模型,并使用一件未参与参数调节的服装进行验证。我们还需要开展更广泛的动画测试,并开发接入真实 Rigger 工作流程的适配器。
可复用的工作流程已经很明确:选择合适的服装 → 确定身体与静止姿势 → 拟合形状 → 转移绑定 → 测试运动和碰撞 → 验证导出。本实验展示了这一流程的具体实现,同时也指出了仅凭一张看起来可信的图片仍不足以判断结果的环节。