本技能用于在 Blender 5.2 中搭建和运行物理仿真。执行模型位于 blender-core,过程式仿真区域位于 blender-geometry-nodes。
一、用途 面向需要刚体、布料、流体、毛发及自定义逐帧逻辑的仿真场景,提供一次性调用即可完成设置、烘焙与验证的工作流,并支持无界面(headless)运行。
二、主要能力与求解器选择
- 刚体(Bullet):适用于下落、堆叠、破坏。可先用 Cell Fracture(扩展)或 GN Voronoi 预断裂。
- 经典布料:Classic Cloth 修改器 + Collision 修改器,适用于服装、旗帜、垂坠等生产验证过的场景。
- 基于节点的布料/毛发:Cloth Dynamics(实验性)/ Hair Dynamics 资产(5.2,XPBD),适用于自定义力与过程式设置。
- 流体(Mantaflow):液体、烟雾、火焰,使用流体域加流/效应器(fluid.bake_all)。
- 毛发造型:曲线对象 + 毛发节点资产(procedural_hair_node_assets),运动使用 Hair Dynamics。
- 生长、轨迹、自定义逐帧逻辑:GN Simulation zone。
- 游戏用软抖动:引擎内的弹簧/抖动骨骼,或 Wiggle 类约束烘焙为关键帧。
三、使用方式 支持单次调用脚本: scripts/sim_setup.py -- --rigid --active Crate1 Crate2 --passive Floor --density 500 --frames 1 120 --bake --to-keys scripts/sim_setup.py -- --cloth Flag --preset cotton --pin Pin --colliders Pole --bake scripts/sim_setup.py -- --gn-cloth Sheet --colliders Table --set Bendiness=0.5 Stretchiness=0.1 --bake --bake 会按顺序逐帧步进(对点缓存和 GN 仿真区域可在无界面下工作),并报告最终位置与 min_z,以便验证接触。--to-keys 将刚体运动转为关键帧供引擎使用。
刚体要点:真实比例与真实质量重要,mass = volume × density(木材 500–700、混凝土 2400、钢 7850、塑料 950 kg/m³),脚本会计算。碰撞形状:动态对象用 CONVEX_HULL(快速稳定),被动凹形碰撞体才用 MESH,形状匹配时用基本体(BOX、SPHERE、CAPSULE)。稳定性:子步 10、迭代 10(由脚本设置),使用小碰撞边距(1 mm),避免对象初始互相穿插。导出:烘焙为关键帧(--to-keys;内置 rigidbody.bake_to_keyframes 需要 UI,脚本自行采样 matrix_world),再导出动作(blender-export-pipelines)。
经典布料要点:预设包括 cotton、denim、leather、rubber、silk。网格需要均匀四边面密度(服装边 2–5 cm),使用细分平面或重拓扑后的服装,绝不用 ngon。固定:权重为 1 的顶点组即被固定(settings.vertex_group_mass),可用钩子/骨架动画被固定顶点。碰撞:碰撞体加 COLLISION 修改器(厚度 1–5 mm),折叠需自碰撞,快速运动需提高质量(steps)。可将布料作为形态应用(modifier_apply_as_shapekey)或烘焙为 Alembic/点缓存用于渲染;游戏用可烘焙到骨骼或应用静态垂坠。
基于节点的动力学(5.2,实验性):资产位于 datafiles/assets/nodes/geometry_nodes_dynamics_assets.blend,包括 Cloth Dynamics(Experimental)、Hair Dynamics、Collider、Set Effector、Custom Force、Custom Effector,脚本会追加它们。Cloth 输入包括 Pin Group(属性)、Stretchiness、Bendiness、Substeps(5)、Constraint Steps(15)、Mass、Friction、Collision Radius、Linear Damping、Gravity、Tearing(+模式/阈值)、Effectors Collection、Effectors(bundle)。碰撞体:在每个碰撞体对象上加 Collider 修改器,并把对象加入送入 Effectors Collection 的集合(脚本两者都做)。毛发:Add → Empty Hair 会设置表面 + Capture Rest Geometry,Hair Dynamics 通过几何 bundle 读取静止/变形表面。5.2 限制:尚无自碰撞,无内置风/湍流(可构建 Custom Force),接口可能变化,生产中请固定 Blender 版本。求解器本体(GeometryNodeXPBDSolver)接收 World bundle、Delta Time、Substeps、Constraint Iterations,直接基于它构建属于进阶用法,建议从资产入手。
流体(Mantaflow)快速设置:域对象(FLUID 修改器 fluid_type="DOMAIN",domain_type="LIQUID"|"GAS"),预览分辨率 64、最终 128–256,设置缓存目录并在无界面下用 cache_type="ALL";流对象 fluid_type="FLOW"(flow_type LIQUID/SMOKE/FIRE,flow_behavior INFLOW/GEOMETRY);障碍物用 EFFECTOR。在域处于活动状态的上下文覆盖下用 bpy.ops.fluid.bake_all() 烘焙。该过程较慢,先用低分辨率测试。
四、适用场景 适用于 Blender 中刚体、布料、毛发、流体与几何节点仿真的搭建、烘焙与导出到渲染或游戏引擎的流程。
五、限制与注意事项 仿真依赖帧率和比例,调整前先设置 scene.render.fps 与比例。渲染/导出前务必烘焙,不要依赖视口播放顺序。GN 仿真区域:按修改器烘焙(mod.bakes、object.geometry_node_bake_single),或在后台顺序步进帧(脚本)。后台点缓存:从 frame_start 步进帧会填充缓存,ptcache.bake_all(bake=True) 需要有效上下文。用 look(mode="frames") 加数值验证(min_z ≈ 碰撞体顶部即接触,无穿透)。
常见问题:对象穿透碰撞体(碰撞体太薄、子步太少或运动太快,可加厚、提高子步/质量或增大碰撞距离);第 1 帧布料爆炸(起始穿插或零面积面,可运行 blender-asset-qa、偏移起始);刚体世界缓存范围与场景范围分离(脚本会同步);更改任何内容(帧范围、设置)都会使缓存失效,需重新烘焙。
关于收费、价格与平台信息,资料中暂未提供。