Blender Git Commit Log

Git Commits -> Revision 6e44e4b

Revision 6e44e4b by Joshua Leung (depsgraph_refactor)
January 21, 2015, 11:03 (GMT)
Depsgraph: WIP attempt to resolve some problems with IK chains

This commit tried to fix the problems which occur when a bone that's
part of an IK chain has a constraint to another bone in the same chain.
Since all constraints are (or should still) handled before the IK solver runs,
that ended up causing a deadlock, since the offending bone would rely on the
"final" (done_node) transform of another bone in the same IK chain, which could
only run after the IK solver runs - but that cannot run as it's waiting on this
constrained bone.

* Added a dedicated "BONE_READY" noop, which sits after the constraints op,
before the done node, and before any link to an IK solver. This replaces
all the calls to bone_final_transform() by having a dedicated node which
can be queried for this purpose

* Simplified the way that bone relationships get set up: The idea is that
all bones in the same armature will use the "READY" nodes instead of "DONE"
to avoid any lockups when dealing with IK. This way, we can do without all the
common-root checks before doing parent links and so forth, as well as just
setting out all the major relationships at the same time.

(There is of course the risk that this breaks some old rigs (* see note below))


The result of all these efforts is that all the simple test cases and also the
test file with the offending setup which inspired this fix all work now. However,
it also seems to now be causing a range of weird regressions with production rigs
(notably, strange new unstable popping in Koro and Victor Layout, as well as lag
issues on some simpler IK leg rigs).

Commit Details:

Full Hash: 6e44e4b4968ed5ab4472c769d2d9687941d326da
Parent Commit: da96f8a
Lines Changed: +59, -13

3 Modified Paths:

/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp (+4, -0) (Diff)
/source/blender/depsgraph/intern/depsgraph_build_relations.cpp (+50, -10) (Diff)
/source/blender/depsgraph/intern/depsnode_opcodes.h (+5, -3) (Diff)
By: Miika HämäläinenLast update: Nov-07-2014 14:18MiikaHweb | 2003-2021