从零开始在Blender中导出布料动画到GLTF/USD

本文记录一个菜鸡完整的在Blender中创建布料动画并导出为glTF/USD格式的过程,作为笔记供后续查阅。

创建布料动画

本部分完全参考Gemini给出的流程(不得不说Gemini已经强到可以教人用Blender的程度了):

在Blender中制作“风吹晾衣绳上的床单”是布料模拟(Cloth Simulation)的一个经典案例。这涉及到三个核心环节:布料设置(Cloth)固定点(Pinning)风力场(Wind Force Field)

以下是详细的分步教程:

第一步:场景建模 (Modeling)

  1. 创建床单:
    • Shift + A 新建一个 Plane (平面)。
    • R -> X -> 90 将其立起来。
    • S -> X 拉宽,使其变成长方形(像床单一样)。
  2. 细分网格 (至关重要):
    • 布料需要足够的顶点才能弯曲。
    • 选中平面,进入 Edit Mode (Tab键)
    • 右键 -> Subdivide (细分)。在左下角菜单中,将 Number of Cuts 设为 50 或更高(网格越密,褶皱越细腻,但计算越慢)。
  3. 创建晾衣绳:
    • 回到 Object Mode
    • Shift + A 新建一个 Cylinder (圆柱体)。
    • 将其旋转、缩放,做成一根细长的棍子,放在床单的上方边缘处。

第二步:设置固定点 (Pinning)

这是让床单“挂”在绳子上而不是掉下去的关键。

  1. 选中床单,进入 Edit Mode
    • 如果你希望床单是搭在绳子上:选中床单中间的一排顶点。
    • 如果你希望床单是被夹子夹住:选中床单顶部边缘的两个或多个点(模拟夹子的位置)。
  2. 设置顶点组:
    • 在右侧属性面板,点击绿色倒三角图标 (Object Data Properties)。
    • Vertex Groups 栏点击 + 号。
    • 将其命名为 "Pin"(或者"Holder")。
    • 点击 Assign 按钮(此时权重 Weight 为 1.0)。
  3. 回到 Object Mode

第三步:添加物理属性 (Physics)

  1. 给晾衣绳添加碰撞:
    • 选中晾衣绳。
    • 在右侧属性面板,点击蓝色圆圈图标 (Physics Properties)。
    • 点击 Collision (碰撞)。这样床单碰到绳子时不会穿过去(如果你的固定点做得很好,这一步可以选做,但加上更真实)。
  2. 给床单添加布料系统:
    • 选中床单。
    • 点击 Physics Properties -> Cloth (布料)。
    • 关键设置 1 (Shape):
      • 向下滚动找到 Shape 选项卡。
      • Pin Group 中,选择刚才创建的 "Pin" 顶点组。
      • 解释:这告诉Blender,除了这些被选中的点不动(或跟随父级),其他部分都要受重力影响掉下来。
    • 关键设置 2 (Collisions):
      • 向下滚动找到 Collisions
      • 勾选 Self Collisions (自碰撞)。这非常重要,否则风吹的时候床单会穿插进自己身体里。

第四步:添加风场 (The Wind)

  1. Shift + A -> Force Field (力场) -> Wind (风)。
  2. 使用 G (移动) 和 R (旋转) 将风场放置在床单的侧面或正面,箭头指向床单。
  3. 调整风力参数:
    • 选中风场对象,去右侧属性面板(最后一个图标 Physics)。
    • Strength (强度): 默认值太小,对于布料通常需要设为 1000 到 5000 甚至更高,取决于你的场景比例。
    • Noise (噪波): 设为 1.0 到 5.0 之间。
    • 解释:Noise非常重要,它让风忽大忽小,产生自然的“飘动感”,而不是像吹风机一样死板地吹。

第五步:调整与运行模拟

  1. 播放动画:
    • 按下 Space (空格键) 播放。你应该能看到床单下垂,并被风吹动。
    • 注意:如果电脑卡顿,这是正常的,布料解算需要时间。
  2. 美化床单外观:
    • 选中床单,右键 -> Shade Smooth (平滑着色)。
    • 在右侧 Modifier Properties (蓝色扳手) 面板:
      • 布料修改器(Cloth)应该在最上面。
      • 添加 Solidify Modifier (实体化):增加一点 Thickness (厚度),让床单看起来不是纸片。
      • 添加 Subdivision Surface (表面细分):放在最后,让褶皱更圆润。
  3. 微调物理参数 (Cloth Settings):
    • Stiffness / Tension: 如果床单看起来像橡胶,增加 Tension (张力)。
    • Damping (阻尼): 如果床单抖动得太厉害,增加 Air Viscosity (空气粘滞度) 或 Damping。
    • Quality Steps: 如果穿模严重,将 Cloth 设置最上方的 Quality Steps 从 5 提高到 10 或 12。

进阶技巧 (让效果更真实)

  • 模拟夹子运动: 如果你想做夹子夹住床单的效果,你可以创建夹子模型,然后使用 Vertex Parenting (选中夹子,选床单,进编辑模式选顶点,Ctrl+P -> Make Vertex Parent),这样夹子就会跟着布料的那个点一起晃动。
  • 烘焙 (Baking): 当你对效果满意后,在布料设置的 Cache 选项卡下,点击 Bake。这样Blender会把运算结果存入内存/硬盘,之后拖动时间轴就会非常流畅,渲染时也不会出错。

常见问题排错

  • 床单穿过绳子了? 检查绳子是否加了 Collision,或者增加布料的 Collision Quality。
  • 风吹不动? 增加 Wind 的 Strength,或者检查风的箭头方向是否对准了床单。
  • 床单掉下去了? 检查 Cloth 设置里的 Pin Group 是否选中了正确的顶点组。

效果(这里没有固定床单):

烘焙为顶点动画

由于大部分目标格式glTF/USD都不支持Blender的物理模拟系统,所以我们需要先把布料动画烘焙成顶点动画(Vertex Animation),这一步是通过导出为MDD格式实现的。首先从Blender的插件市场安装 NewTek MDD Format

在Blender完成Bake布料动画之后,记得在第一帧按 Ctrl + A Apply Transform 应用变换。此时确保你的modifiers都是启用的状态(比如Solidify和Subdivision),然后选中布料对象,点击 File -> Export -> MDD (.mdd),选择一个路径保存MDD文件。这里启用modifier的目的是让烘焙的顶点动画包含所有修改器的效果,而不仅仅是原始的布料模拟结果。

因为带shape key的模型无法再应用modifier,所以在导入MDD之前需要先把Subdivision和Solidify的效果Apply到模型上。Cloth模拟的结果已经烘焙到顶点动画里了,所以可以直接删掉这个modifier。

此时选中床单,把刚刚导出的MDD文件导入到这个对象上,会发现动画已经成功地应用到模型上了:

对应的,Data-Shape Keys也会出现一堆关键帧。

导出为glTF/USD

这一步没什么好说的,和普通的流程类似。需要注意的是虽然两者都提供了基于weight的顶点动画支持,大部分第三方软件比如f3d等对于glTF的顶点动画支持都非常有限,所以如果需要在其他软件中使用,建议导出为USD格式。

作者

Carbene Hu

发布于

2026-01-14

更新于

2026-01-14

许可协议

评论