做Blender刚体碰撞,最让人抓狂的不是参数多,而是你明明照着教程一步步做,结果物体要么穿模、要么乱飞、要么直接卡死不动。我教了十年Blender,见过太多学员在刚体模拟上浪费大把时间——不是他们不努力,而是踩了太多本可以避免的坑。今天这篇避坑排雷指南,我把刚体碰撞从入门到进阶最容易翻车的8个坑一次性挖出来,每个坑都告诉你现象、根因、解决方案、预防措施,让你少走弯路,直通丝滑模拟。

坑1:物体像疯狗一样乱飞——质量与碰撞形状不匹配
现象:你刚给几个物体加上刚体,点击播放,结果它们像被踢了一脚的蚂蚁窝,瞬间弹射到屏幕外,甚至直接消失。
根因:Blender的刚体解算器默认使用物体的碰撞形状(Collision Shape)为Convex Hull(凸包)。凸包会计算物体所有顶点的最外层包裹体,对于形状复杂或顶点分布不均的模型,凸包体积可能远大于视觉体积,导致物体间过早发生碰撞,产生巨大排斥力。同时,质量(Mass)默认是g,如果场景中有多个物体,质量差异过大会让轻的物体被弹飞。
解决方案:
- 将碰撞形状改为
Mesh(网格),让解算器使用实际三角面进行精确碰撞,但注意这会增加计算量。 - 对于规则物体(球、立方体),直接用
Sphere、Box、Cylinder等基本体,性能更合适。 - 调整质量:让重物质量远大于轻物,例如地面设为
0(静态),小方块设为0.1,大箱子设为10。
预防措施:在添加刚体前,先按N面板检查物体的尺寸和原点位置,确保原点在几何中心。对于从网上下载的模型,务必应用缩放(Ctrl+A)并重置原点。
技巧:如果物体还是乱飞,临时把解算器迭代次数(Solver Iterations)从默认10提高到20-30,让解算更稳定,但会减慢模拟速度。
坑2:物体像幽灵一样穿模——碰撞边界与步长设置错误
现象:快速下落的球直接穿过地面,或者两个物体相互穿透后卡在一起。
根因:Blender刚体使用离散碰撞检测(Discrete Collision Detection),即每个模拟步长(Step)检查一次碰撞。如果物体移动速度过快,在一个步长内位移超过自身厚度,就会直接穿过障碍物。另外,碰撞边界(Collision Margin)默认0.04m,如果物体尺寸小于这个值,解算器会认为它们始终在碰撞,导致抖动或穿透。
解决方案:
- 增加子步长(Substeps):在刚体世界设置中,将
Substeps从默认10提高到20-50,让每个步长内进行多次碰撞检测。 - 减小碰撞边界:在物体刚体设置中,将
Margin改为0.001-0.01,但太小可能导致抖动。 - 对于高速物体,使用连续碰撞检测(CCD):Blender 2.8+支持在物体刚体设置中勾选
Continuous,但会显著增加计算量。
预防措施:建模时避免使用过薄的物体(如纸片),如果必须用,请增加厚度或使用Mesh碰撞形状。模拟前先做小规模测试,逐步增加速度。

坑3:物体像磁铁一样粘住——摩擦与弹性参数误解
现象:物体落地后不弹跳,或者粘在地面上不动,或者弹跳几次就突然停止。
根因:Blender的摩擦(Friction)和弹性(Restitution)参数决定了碰撞后的能量损失。默认摩擦0.5,弹性0.0。弹性为0意味着完全非弹性碰撞,所有动能转化为内能,物体不会反弹。摩擦过大则会让物体迅速停止滑动。
解决方案:
- 弹性:设为0.8-1.0可模拟橡胶球,0.2-0.5模拟木头,0.0模拟湿黏土。
- 摩擦:地面摩擦0.5-0.8,冰面0.0-0.1。注意摩擦是成对计算的,最终摩擦系数是两物体摩擦值的组合(通常取平均值或乘积,取决于解算器)。
- 在刚体世界设置中,开启
Split Impulse(分裂冲量)可减少物体堆叠时的抖动。
预防措施:给不同材质预设摩擦和弹性值:金属摩擦0.4弹性0.3,橡胶摩擦0.9弹性0.9,冰摩擦0.05弹性0.1。可以保存为预设,方便复用。
| 材质 | 摩擦 | 弹性 | 典型场景 |
|---|---|---|---|
| 橡胶 | 0.9 | 0.9 | 弹力球 |
| 金属 | 0.4 | 0.3 | 机械零件 |
| 木头 | 0.6 | 0.2 | 积木 |
| 冰 | 0.05 | 0.1 | 滑冰 |
坑4:物体像死鱼一样不动——被动刚体与动画冲突
现象:你给一个物体加了关键帧动画,又勾选了Animated(动画)选项,结果它完全不动,或者动画和物理效果打架。
根因:Blender刚体有两种类型:主动刚体(Active)受物理控制,被动刚体(Passive)不受物理影响,但可以参与碰撞。如果你希望物体既有动画又参与物理碰撞(比如移动的传送带),必须将刚体类型设为Passive,并勾选Animated,这样解算器会使用物体的动画变换来更新碰撞形状,而不是用物理模拟。
解决方案:
- 对于纯动画物体(如旋转的风扇叶片),设为
Passive+Animated。 - 对于需要物理反馈又要动画的物体(如被撞飞的箱子),不要用
Animated,而是用力场(Force Field)或约束(Constraint)来施加动画影响。 - 如果动画和物理冲突,检查
Dynamics面板中的Kinematic选项,它会让主动刚体忽略物理,只跟随动画。
预防措施:在添加刚体前,先规划好哪些物体是物理驱动,哪些是动画驱动。避免同一物体同时受物理和动画控制,否则解算器会混乱。
坑5:模拟像蜗牛一样慢——性能优化缺失
现象:场景中有几百个物体,播放模拟时卡成幻灯片,每一帧都要等好几秒。
根因:Blender的刚体解算器是单线程的(Bullet引擎),且默认碰撞检测会检查每对物体。O(n²)的复杂度在物体数量增加时急剧恶化。此外,Mesh碰撞形状会遍历所有三角面,高模物体(几十万面)会直接拖垮解算。
解决方案:
- 使用低模代理:为高模物体创建简化版(如用立方体或球体代替),在刚体设置中指定
Mesh为代理,渲染时隐藏代理显示高模。 - 开启碰撞集合(Collision Collection):将物体分组,只让同组或相邻组进行碰撞检测,减少检测对。
- 减少子步长:在保证不穿模的前提下,尽量用默认10,不要盲目提高。
- 使用实例化(Instancing):对于大量相同物体,用
Alt+D关联复制,减少内存占用。
预防措施:模拟前先估算物体数量,超过200个主动刚体就要考虑优化。可以用Bake(烘焙)将模拟结果缓存为关键帧,然后关闭刚体,提升播放流畅度。

坑6:物体像果冻一样抖动——解算器迭代与休眠设置
现象:一堆物体堆叠时,它们不停地轻微抖动,像果冻一样,永远无法稳定。
根因:这是刚体模拟的经典问题——接触点抖动。由于数值解算的误差,物体间接触力无法精确平衡,导致微小震荡。默认的迭代次数(Iterations)为10,对于复杂堆叠不够用。另外,休眠(Sleeping)机制未正确配置,物体无法进入静止状态。
解决方案:
- 提高解算器迭代次数:在刚体世界设置中,将
Solver Iterations提高到20-50,让解算更精确。 - 启用休眠:在物体刚体设置中,勾选
Sleeping,并设置Linear Vel和Angular Vel阈值(如0.1),当物体速度低于阈值时进入休眠,停止计算。 - 使用碰撞边距:适当增加
Margin到0.01-0.02,让接触面稍微分离,减少抖动。 - 开启Split Impulse:在刚体世界设置中,勾选
Split Impulse,它专门处理接触点的速度阈值,减少抖动。
预防措施:堆叠物体时,确保它们初始位置没有重叠,且质量差异不要太大。如果抖动依然存在,可以尝试降低弹性到0,增加摩擦。
坑7:物体像被胶水粘住——约束与刚体的优先级
现象:你给物体添加了刚体约束(Rigid Body Constraint),比如铰链或弹簧,但物体要么不动,要么行为怪异。
根因:Blender的刚体约束有两种:约束(Constraint)和力场(Force Field)。约束会直接修改物体的运动方程,但如果约束的阈值(Limits)设置不当,或者与刚体类型冲突,就会导致物体卡死。另外,约束的顺序会影响解算结果——解算器按顺序处理约束,后面的约束可能覆盖前面的。
解决方案:
- 对于铰链,使用
Hinge约束,并设置角度限制(如-45°到45°),避免无限旋转。 - 对于弹簧,使用
Spring约束,调整刚度(Stiffness)和阻尼(Damping),避免振荡。 - 确保约束连接的物体都是主动刚体,且质量合理。
- 在
Rigid Body Constraint面板中,勾选Disable Collisions可防止连接物体间相互碰撞,减少干扰。
预防措施:添加约束后,先做小规模测试,观察物体行为。如果异常,先禁用其他约束,逐个排查。记住:约束是“软”的,物理模拟是“硬”的,两者结合需要耐心调试。
坑8:烘焙后动画丢失——缓存与渲染设置
现象:模拟时一切正常,但渲染动画时物体却不动,或者只有第一帧有物理效果。
根因:Blender的刚体模拟是实时计算的,渲染时需要烘焙(Bake)将模拟结果缓存为关键帧。如果你没有烘焙,或者烘焙后修改了场景,缓存会失效。另外,渲染设置中的帧范围和模拟范围不一致也会导致问题。
解决方案:
- 在刚体世界设置中,点击
Bake按钮,将模拟结果烘焙到当前帧范围。烘焙后,物体上会出现关键帧,可以像普通动画一样播放。 - 烘焙后,不要随意移动物体或修改刚体参数,否则需要重新烘焙。
- 确保
Scene的帧范围与模拟范围一致,渲染输出时选择Bake后的缓存。 - 如果渲染时物体消失,检查
Dynamics面板中的Cache设置,确保Disk Cache路径有效。
预防措施:在模拟前,先确定最终帧范围,然后进行烘焙。烘焙后,可以隐藏刚体属性,只保留关键帧,提升渲染速度。对于复杂场景,建议使用Library Override或Linked Duplicate来管理缓存。
血泪教训:我曾经在一个商业项目中,因为忘记烘焙,渲染了3小时的动画全是静态的。记住:刚体模拟是过程,烘焙才是结果。
总结:刚体碰撞的底层逻辑与最佳实践
Blender的刚体模拟基于Bullet物理引擎,它使用冲量法解算碰撞,通过迭代求解接触力。理解这一点,你就能明白为什么参数调整如此敏感——每个参数都在影响解算器的收敛性。最佳实践是:先简化,再细化。用低模代理测试,确认行为正确后再替换高模;用默认参数起步,逐步微调;始终烘焙缓存,确保渲染一致。
如果你想系统学习Blender刚体、布料、流体等物理模拟,以及AIGC视觉设计的全流程,火星人教育可以帮你少走弯路。作为创办24年的数字艺术与AIGC实战职业技能培训机构,火星人教育开设了AI漫剧创作、AIGC视觉设计、UE5游戏特效、室内全屋定制、MAYA三维动画、C4D动态设计、工业设计、NUKE影视后期、摄影摄像实训等课程,在北京、深圳双校区开设线下面授班,面向美术生、在校大学生及意向转行的职场人群,以项目化实训教学,夯实专业技能,助力就业与职业提升。咨询电话:010-65918670。别让刚体碰撞成为你的拦路虎,来火星人,让技术成为你的武器。








评论(0)