Blender Git Loki
Git Commits -> Revision 8ea5cc4
Revision 8ea5cc4 by Lukas Toenne December 12, 2014, 12:48 (GMT) |
IK solver for hair strands that provides a better solution for keeping consistent segment lengths when transforming vertices. Warning: The implementation is not correct yet, but all the steps should be there. The main idea is to treat strands as a sequence of joints that are displaced out of their original locations by a transform or other tool. The solver then tries to find a global per-strand solution that keeps the segment lengths unmodified, with a minimum change in angles from the original starting shape. Such a solution is much more usable and efficient than the current O(n^2) attempt of "spreading the error" across the strand. The inverse kinematics method is very flexible. It can also include stretching, which would be very welcome for features like the length tool. Different parts of the strand could be weighted separately using scaling factors for the angle/stretch parameters. |
Commit Details:
Full Hash: 8ea5cc479617663e92c2fbe128f1326a3f462fd6
Parent Commit: 7247a2b
Lines Changed: +562, -123
2 Added Paths:
/source/blender/physics/BPH_strands.h (+44, -0) (View)
/source/blender/physics/intern/strands.cpp (+425, -0) (View)
/source/blender/physics/intern/strands.cpp (+425, -0) (View)
11 Modified Paths:
/source/blender/blenkernel/BKE_editstrands.h (+9, -1) (Diff)
/source/blender/blenkernel/intern/editstrands.c (+21, -107) (Diff)
/source/blender/bmesh/bmesh_class.h (+8, -0) (Diff)
/source/blender/bmesh/intern/bmesh_strands.h (+12, -4) (Diff)
/source/blender/editors/hair/hair_edit.c (+1, -1) (Diff)
/source/blender/editors/transform/transform_conversions.c (+6, -2) (Diff)
/source/blender/physics/CMakeLists.txt (+3, -0) (Diff)
/source/blender/physics/intern/eigen_utils.h (+31, -1) (Diff)
/source/blender/physics/intern/implicit.h (+0, -5) (Diff)
/source/blender/physics/intern/implicit_blender.c (+1, -1) (Diff)
/source/blender/physics/intern/implicit_eigen.cpp (+1, -1) (Diff)
/source/blender/blenkernel/intern/editstrands.c (+21, -107) (Diff)
/source/blender/bmesh/bmesh_class.h (+8, -0) (Diff)
/source/blender/bmesh/intern/bmesh_strands.h (+12, -4) (Diff)
/source/blender/editors/hair/hair_edit.c (+1, -1) (Diff)
/source/blender/editors/transform/transform_conversions.c (+6, -2) (Diff)
/source/blender/physics/CMakeLists.txt (+3, -0) (Diff)
/source/blender/physics/intern/eigen_utils.h (+31, -1) (Diff)
/source/blender/physics/intern/implicit.h (+0, -5) (Diff)
/source/blender/physics/intern/implicit_blender.c (+1, -1) (Diff)
/source/blender/physics/intern/implicit_eigen.cpp (+1, -1) (Diff)