从零开始在Blender中导出布料动画到GLTF/USD
本文记录一个菜鸡完整的在Blender中创建布料动画并导出为glTF/USD格式的过程,作为笔记供后续查阅。
创建布料动画
本部分完全参考Gemini给出的流程(不得不说Gemini已经强到可以教人用Blender的程度了):
在Blender中制作“风吹晾衣绳上的床单”是布料模拟(Cloth Simulation)的一个经典案例。这涉及到三个核心环节:布料设置(Cloth)、固定点(Pinning)和风力场(Wind Force Field)。
以下是详细的分步教程:
第一步:场景建模 (Modeling)
- 创建床单:
Shift + A新建一个 Plane (平面)。R->X->90将其立起来。S->X拉宽,使其变成长方形(像床单一样)。
- 细分网格 (至关重要):
- 布料需要足够的顶点才能弯曲。
- 选中平面,进入 Edit Mode (Tab键)。
右键-> Subdivide (细分)。在左下角菜单中,将 Number of Cuts 设为 50 或更高(网格越密,褶皱越细腻,但计算越慢)。
- 创建晾衣绳:
- 回到 Object Mode。
Shift + A新建一个 Cylinder (圆柱体)。- 将其旋转、缩放,做成一根细长的棍子,放在床单的上方边缘处。
第二步:设置固定点 (Pinning)
这是让床单“挂”在绳子上而不是掉下去的关键。
- 选中床单,进入 Edit Mode。
- 如果你希望床单是搭在绳子上:选中床单中间的一排顶点。
- 如果你希望床单是被夹子夹住:选中床单顶部边缘的两个或多个点(模拟夹子的位置)。
- 设置顶点组:
- 在右侧属性面板,点击绿色倒三角图标 (Object Data Properties)。
- 在 Vertex Groups 栏点击
+号。 - 将其命名为 "Pin"(或者"Holder")。
- 点击 Assign 按钮(此时权重 Weight 为 1.0)。
- 回到 Object Mode。
第三步:添加物理属性 (Physics)
- 给晾衣绳添加碰撞:
- 选中晾衣绳。
- 在右侧属性面板,点击蓝色圆圈图标 (Physics Properties)。
- 点击 Collision (碰撞)。这样床单碰到绳子时不会穿过去(如果你的固定点做得很好,这一步可以选做,但加上更真实)。
- 给床单添加布料系统:
- 选中床单。
- 点击 Physics Properties -> Cloth (布料)。
- 关键设置 1 (Shape):
- 向下滚动找到 Shape 选项卡。
- 在 Pin Group 中,选择刚才创建的 "Pin" 顶点组。
- 解释:这告诉Blender,除了这些被选中的点不动(或跟随父级),其他部分都要受重力影响掉下来。
- 关键设置 2 (Collisions):
- 向下滚动找到 Collisions。
- 勾选 Self Collisions (自碰撞)。这非常重要,否则风吹的时候床单会穿插进自己身体里。
第四步:添加风场 (The Wind)
Shift + A-> Force Field (力场) -> Wind (风)。- 使用
G(移动) 和R(旋转) 将风场放置在床单的侧面或正面,箭头指向床单。 - 调整风力参数:
- 选中风场对象,去右侧属性面板(最后一个图标 Physics)。
- Strength (强度): 默认值太小,对于布料通常需要设为 1000 到 5000 甚至更高,取决于你的场景比例。
- Noise (噪波): 设为 1.0 到 5.0 之间。
- 解释:Noise非常重要,它让风忽大忽小,产生自然的“飘动感”,而不是像吹风机一样死板地吹。
第五步:调整与运行模拟
- 播放动画:
- 按下
Space(空格键) 播放。你应该能看到床单下垂,并被风吹动。 - 注意:如果电脑卡顿,这是正常的,布料解算需要时间。
- 按下
- 美化床单外观:
- 选中床单,
右键-> Shade Smooth (平滑着色)。 - 在右侧 Modifier Properties (蓝色扳手) 面板:
- 布料修改器(Cloth)应该在最上面。
- 添加 Solidify Modifier (实体化):增加一点 Thickness (厚度),让床单看起来不是纸片。
- 添加 Subdivision Surface (表面细分):放在最后,让褶皱更圆润。
- 选中床单,
- 微调物理参数 (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格式。
从零开始在Blender中导出布料动画到GLTF/USD
https://hyiker.github.io/2026/01/14/从零开始在Blender中导出布料动画到GLTF-USD/