Revision 48a86af by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:24 (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. Conflicts: source/blender/physics/intern/implicit.h |
Revision ac54ded by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:23 (GMT) |
Primitive transform operator support for strand vertices. This does not yet prevent root transforms and/or length changes. |
Revision eacc24c by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:23 (GMT) |
Ported over the relaxation method for hair vertices from particle edit mode. This method is simple, but not really very usable. It works by successively relaxing segments that are too long or too short, moving both vertices along the edge between them. This is repeated N^2 times (N: number of vertices on the strand). A true IK solver could give a lot better results, as well as providing many opportunities to apply weighting for targets (e.g. preferring to move non-selected over selected vertices). Many different methods for simple IK solvers exist, so there should be one that works well for large number of simple strands. See e.g. http://www.math.ucsd.edu/~sbuss/ResearchWeb/ikmethods/iksurvey.pdf |
Revision 208ddcd by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:23 (GMT) |
Use a simple low-pass filter to generate a smoother, more stable direction vector for the hair stroke tool. This is necessary for directional tools such as combing, where the stroke direction can lead to unwanted results if it changes too abruptly. |
Revision f3b22c5 by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:23 (GMT) |
Support for sim_debug drawing in hair edit mode (dev feature). |
Revision f7511b3 by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:23 (GMT) |
Improved hair combing tool, adjusting edge directions instead of vertex positions. This works a lot better with strokes perpendicular to the general hair strand direction. With the previous comb tool such strokes would only make a small dent in the hair curve and then vertices would slip out of the tool circle. The edge combing affects the local direction of strands, which acts as a kind of grabbing functionality by moving further vertices in front of the tool circle. The result is that drawing a curvy hair shape with the comb becomes much easier. In addition, the new tool also uses edge filtering and weighting rather than vertices. This means that small brushes also work well, instead of having no effect when hitting the edge segments between vertices. Further improvement could be achieved later by using a global strand solver, which adjusts vertex positions based on an error metric along the whole of the strand. |
Revision b70c815 by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:23 (GMT) |
Renamed the edithair files in BKE to editstrands. The rationale behind this is that the BKE code could be used for modeling hair and fur as well as a number of other features such as grass. The primary addition to BMesh is the limitation to strand-like topology (simple vertex chains, optionally rooted on a mesh surface). The editor code OTOH is quite hair specific, since the result should be suitable for hair simulation, and the workflow should mimick actual hair grooming intuitively. Eventually the hair edit mode could become a generalized strand edit mode with slightly different tool sets for various purposes, but for now it is quite specifically built for hair. Conflicts: source/blender/blenkernel/CMakeLists.txt source/blender/blenkernel/intern/particle.c |
Revision d0a1fc8 by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:23 (GMT) |
Sanity check for strand root/tip checks, now supports single vertices. |
Revision 2d1d909 by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:23 (GMT) |
MSVC compiler cannot handle standard C code. Conflicts: source/blender/editors/physics/particle_edit.c |
Revision 1e04723 by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:23 (GMT) |
Fix for hair-to-particle export: need to set weight=1.0 for hair roots, since the particle system uses this for pinning them to the mesh. |
Revision e9737da by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:23 (GMT) |
Fix scons build files for new hair edit code parts. |
Revision 142ef0b by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:23 (GMT) |
Fixed lib-linking for hair edit settings brush and object pointers. |
Revision 56a0943 by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:23 (GMT) |
Basic Add tool for creating new strands in hair edit mode. |
Revision 79e649a by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:23 (GMT) |
New simple storage method for single sample values. |
Revision 8672304 by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:23 (GMT) |
Fix for uninitialized return value. |
Revision a4664ef by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:23 (GMT) |
New mesh sample evaluation function for shape key data. |
Revision e5b25e3 by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:23 (GMT) |
Generic raycast method for generating mesh surface samples. Conflicts: source/blender/blenkernel/intern/mesh_sample.c |
Revision f95dde2 by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:23 (GMT) |
Better feedback about valid sample from mesh sampling methods. Conflicts: source/blender/editors/object/object_shapekey.c |
Revision 2c0616b by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:23 (GMT) |
Support for common operators, keymap entries and radial controls for hair brush settings. |
Revision 339a8b7 by Lukas Toenne (alembic, gooseberry, gooseberry_farm, hair_guides, hair_guides_grooming, hair_object, strand_editmode, strand_gpu, strand_nodes, temp_motionpaths, tmp_hair_curves) April 20, 2015, 10:23 (GMT) |
Fix for OpenlGL state restoration after strand drawing, disable color material option. |
|