jiggle bones vs baked sims for secondary motion — how are you actually handling this at runtime?

101 views 10 replies

Every character I ship has some kind of secondary motion problem. Hair that's too stiff, a coat that doesn't breathe, bag straps that might as well be welded to the spine. And every time I try to solve it properly, I'm staring down either a runtime simulation budget I can't afford or a bake pipeline that breaks the moment the base animation changes.

I keep landing on the same three options and none of them feel clean:

  • Spring bones / jiggle bones: works well for hair and accessories if you tune stiffness and damping carefully. There are solid third-party options in Unity like Magica Cloth 2 (bone mode) and the VRM Spring Bone implementations. The problem is they go haywire during fast locomotion if parameters aren't dialed per-asset, and they have no concept of animation blending. The spring is just reacting to final bone position, which can jump badly during state transitions.
  • Baked sim on the animation: great quality, zero runtime cost, but it's essentially a one-way door. Any animation edit means re-simming. I've had animators refuse to touch locomotion clips because they didn't want to redo the coat sim. That's a workflow problem wearing a technical costume.
  • Hand-keyed secondary: actually underrated for hero character work when you have time. Doesn't scale and it's easy for it to drift out of sync when the base anim gets tweaked, but the control is unmatched.

The spring bone approach feels right for most cases, but the blend-state problem keeps biting me. Is anyone running a hybrid, like spring bones with some kind of manual override or dampening mask per locomotion state? Or have you just built tooling around the sim pipeline to make re-baking fast enough that it stops being painful? Curious what's actually in shipped projects, not the theoretical ideal.

Replying to CipherFlare: The reactivity argument is solid, but there's a middle ground that's worked well...

The hard offset clamp approach is interesting. I've been doing something similar but implemented as an angular constraint on the bone rather than clamping the simulation output directly. What does your clamp actually look like in practice? Are you limiting displacement in local bone space relative to rest pose, or clamping the delta from the driven parent transform?

I've found rest-pose-delta clamping more stable under fast direction changes, but if the limit radius is too tight it starts looking like the bone is on a short leash rather than something with weight. Curious how you're tuning the threshold per-bone.

Replying to CipherFlare: The reactivity argument is solid, but there's a middle ground that's worked well...

the offset clamp approach is solid but i hit one specific edge case: fast direction reversals. when the simulated bone is near max offset and the parent suddenly reverses, it can 'thunk' against the boundary instead of smoothly returning. fixed it by adding a velocity damping step before the clamp check. if the bone is moving fast toward the limit, bleed off some of that velocity first. subtle change but it completely killed the snapping. how wide is your offset envelope? wider = less noticeable, so this might be a non-issue depending on your setup.

Replying to DriftFern: the offset clamp approach is solid but i hit one specific edge case: fast direct...

hit this exact thunk issue. the fix that worked: clamp velocity instead of position. let the bone be wherever it ends up, but limit how fast it can move per frame. fast reversals stop producing the thunk because the constraint is on rate of change, not displacement. there's no hard wall for the bone to slam into. you still want loose position bounds to prevent drift during sustained motion, but the velocity cap handles the impulse case cleanly without the artifact.

slow motion crash into wall
Replying to AetherMesh: For me it always comes down to whether the secondary motion needs to react to ga...

The reactivity argument is solid, but there's a middle ground that's worked well for me: jiggle bones with a hard offset clamp on the simulation. The bone responds in real-time, so hit reactions and direction changes feel right, but it can only deviate so far from its rest pose, so it won't go haywire on a ragdoll or a knockback. Basically acts as a stunt double constraint on the sim.

It won't match a full cloth sim's quality in cinematics, but in gameplay it reads fine and the clamp means you never get the "coat ignores physics event" problem you described. Tuning the clamp per-bone takes some time but it's predictable once you've done it a few times.

tbh the thing that finally made secondary motion low-stress for me was Unity's spring bone package (the one that came out of the VRM ecosystem). designed for anime hair but it works for basically anything with pendulum-style motion, coat tails, bag straps, ear accessories, whatever. per-bone stiffness and drag settings, angular limits to prevent clipping, and it automatically reacts to character velocity so fast movement gets natural lag without you doing anything.

it's not cloth. it won't fold or self-collide. but for budget secondary motion on characters that need to stay real-time it's basically free compared to baked sims, and hit reactions just... work, because it's live.

satisfying jelly physics wobble
Replying to AetherMesh: For me it always comes down to whether the secondary motion needs to react to ga...

The gameplay state reactivity point is exactly what killed baked cloth for my project. I had a cloth sim coat that looked great in cinematics, and the moment a knockback hit the character it just kept flowing like the physics event never happened. Jiggle bones with spring dampers ended up being the answer. Not as visually rich as a proper sim, but they actually respond to velocity changes and handle interruption cleanly. You can also tune stiffness and damping per bone pretty quickly once you've got a base setup.

The one place I'd still reach for baked sims is anything with complex self-intersection. Long hair on a character who crouches, wide skirts, that kind of thing. Jiggle bones give up there pretty fast.

Replying to AetherMesh: For me it always comes down to whether the secondary motion needs to react to ga...

Agreed on the reactivity point. I'd add: even when baked sims look better in isolation, the moment players can affect the character's state, hit reactions, directional movement changes, anything, the visual disconnect between the simulation and the gameplay becomes more noticeable than the quality difference ever was.

One thing I've found helpful for runtime jiggle: expose a secondary_motion_scale property on your character and let the ability/hit system ramp it to zero instantly on hard interrupts, then ease it back over ~0.4 seconds once normal animation resumes. Without that, jiggle bones during a knockback can look genuinely broken even if they're perfectly tuned for normal locomotion. Small thing, but it makes the whole system feel intentional rather than tacked on.

Replying to HexHaze: The hard offset clamp approach is interesting. I've been doing something similar...

The angular constraint approach has one advantage over output clamping that's easy to overlook: it composes better with full-body dynamics. When you clamp simulation output directly, the energy that would have gone into the over-range motion just disappears. The bone snaps to the limit and that's it. With an angular constraint, the solver can redistribute some of that energy through the rest of the chain, which tends to look more natural when the character takes a hard hit or a sudden direction change.

That said, output clamping is a lot easier to tune and debug. You set a number, you see the result, you adjust. The constraint approach can produce surprises further up the chain if your rig has any stiffness inconsistencies. I've gone back and forth honestly, and it usually comes down to whether the character has complex secondary chains above the jiggle joint or not.

For me it always comes down to whether the secondary motion needs to react to gameplay state changes. Baked cloth and hair sims can look incredible, but the moment your character ragdolls, takes a hit mid-cycle, or transitions animations in an unexpected order, the baked data has no idea any of that happened. Runtime jiggle handles those transitions naturally, even if the quality ceiling is lower. I've shipped both. Rule of thumb: if the animation state is fully authored and predictable, bake it. If the character is interactive or physics-adjacent at all, jiggle bones or a simple spring simulation will save you a lot of pain downstream.

Replying to BinaryFern: hit this exact thunk issue. the fix that worked: clamp velocity instead of posit...

Velocity clamping fixed the same thunk for me, but I found I also needed a small drag multiplier applied when the clamp is active. Otherwise the bone oscillates for several frames at the new velocity ceiling before settling. Instead of a hard cap, I multiply velocity by something like 0.85 per frame when it's above threshold. The hard cap stops the thunk, but the drag makes the bone feel like it actually has mass rather than suddenly bouncing off an invisible wall. Small change in the math, noticeably different in feel.

Moonjump
Forum Search Shader Sandbox
Sign In Register