NovaBone Dynamics
π What's New in v1.1.0
Bones no longer pop when they hit a collider β the jolt that showed up worst on the last bones of a chain. There were four separate causes, and all four are fixed.
The push was leaking into velocity
When a collision pushed a bone back out of a surface, that push was counted as if the bone had travelled there under its own power, and turned into velocity. Because it was divided by a single substep, even a tiny correction came back as a large speed.
The symptom was distinctive: raising Substeps made it worse, not better (4 β 8 β 16 β 32 each roughly doubled the jolt). Refining the solve should never do that. Now the push only fixes position, and momentum is handled once, by bounce and friction.
A welcome side effect: Friction does its actual job again. Setting it to 0 used to make the simulation 20x rougher β not because the hair needed friction, but because friction was the only thing scrubbing off this injected speed. Set it for the feel you want now.
Kink relief was undoing the collision
The anti-kink pass that straightens zig-zags in a chain ran after collision and re-checked nothing, so it blended resting bones back toward their neighbours β which meant back into the collider. The next substep pushed them out again. That push-pull loop, repeating every substep, was the popping.
Bones that are in contact are now left where the collision put them. Free-hanging bones still get the kink relief.
Push direction
Depth was measured to the closest point on the surface, but the push direction came from the nearest triangle's face normal β two different references. A face normal is a step function: it jumps the moment a different triangle becomes nearest. Measured while sliding along a collider, it swung up to 22.5Β° in a single step where the closest-point direction moved 1.1Β°. Subdividing the collider does not fix it, because the discontinuity sits at every face boundary regardless of face size.
Depth and direction now come from the same place.
Deforming colliders
The biggest one. A collider that deforms β a character mesh driven by an armature and shape keys β moves its vertices while the object itself stays put, so the simulation believed the surface was standing still. It would push a bone clear, the surface would move into it again, and it would push again, frame after frame.
The surface is now measured where it is actually touched: the face that answered the collision, compared against its own position last frame.
Also
- Removed the add-on preferences panel. It held one checkbox that did nothing and one internal safety value there was no reason to touch; the latter is now a constant in the code.
π‘ No new settings. Existing scenes open unchanged, and scenes whose colliders do not move produce identical results.
π‘ No new settings. Existing scenes open unchanged, and scenes whose colliders do not move produce identical results.