Blender 2.74: Particles
A large number of hair system improvements from the Gooseberry branch have been accepted into the main Blender code. This includes: Basic hair collision support with meshes, several changes to make hair simulations appear more realistic, widgets to control strand shapes, a new Kink mode, new visibility toggles in the particle settings, ...
The features mentioned below are a big step forward from the previous state of the code. However, more improvements are possible. Simulation of hair is still a young area of computer science and 3D graphics, and many new algorithms and approaches have been developed since the introduction of these features into Blender. Stay tuned!
- Fix for long-standing stability issues resulting from different hair segment lengths after cutting. Very short hairs almost inevitably result from using the cutting tool. When the ratio of shortest to longest hairs gets too extreme though, the simulation solver will not converge and the simulation "explodes" (this was already a problem during the Sintel open movie production, see e.g. )
- Collision support for hair! Hair now supports basic collision with objects in the Blender scene.
- Note on self-collision: The collision feature for hair works as a hair-mesh interaction, but does not support hair-hair self-collision. The reason is primarily computation cost: due to the large number of contact points of hair strands with themselves the amount of calculation is prohibitively high. In high-end productions these issues have been partially addressed using advanced threading schemes, but for the typical Blender use-case (small studios, small budgets) the development of true self-collision does not have a high priority. See also "Volumetric Calculations" below.
- Volumetric Calculations: Some phenomena of real world hair can be simulated more efficiently using a volumetric model instead of the basic geometric strand model. This means constructing a regular grid such as those used in fluid simulations and interpolating hair properties between the grid cells. Currently the hair system supports two volume-based features:
- Internal Friction: Simulate hair-hair collision and friction by smoothing velocity of nearby hairs.
- Target Density: Generate an outward force on hair above a critical density (puffing), to prevent hair from collapsing in on itself.
- Bending stiffness improvement: The force model used to describe stiffness of cloth does not work very well when applied to strand geometry. This made it impossible to create reasonably stiff strands and could lead to instability when trying to crank up the solver stiffness parameter. The new force model for hair bending creates an actual first order approximation of an angular spring:
- In addition the new bending model also allows a deformed rest shape for hair, rather than always returning hair into a straight shape. This makes actual grooming a lot more useful.
Child Hair Modifiers
- Child path calculation is now properly threaded again and integrated into the common Blender task scheduler.
- Optionally curve widgets can now be used instead of a "shape" value, to define clumping and roughness amount along child strands. This is much more flexible and intuitive than a fixed function with abstract parameters.
- Curling radius is now a user-defined parameter instead of using the distance from the parent. This is much more realistic because the curling radius of natural hair depends on the growth pattern and material only. grouping hair around a parent is a secondary effect (clumping), which does not affect the radius or frequency of the curl.
- New kink mode: "Spiral". This mode generates a spiral at the end of each hair. Radius and Resolution parameters define the overall size, while the Shape parameter makes a the spiral grow in- or outward.
|When hair is pointing straight up (along the chosen spiral axis, default Z), spirals may not show up! This is a limitation of the projection method used. Giving a slight tilt or random orientation to hairs fixes this.|
Tools and Operators
- Modifier Buttons for toggling particle systems are now displayed also in the particle systems list. This is much more convenient than having to switch between the particle and modifier buttons to toggle particle systems on and off.
- "Copy Particle Systems" is a new operator that allows copying of entire particle/hair systems from one object to another. This also includes possible grooming data ("hair edit"), which is important in a production pipeline where the underlying mesh may change slightly after grooming has already started.
- Note on Connect/Disconnect: The Connect/Disconnect feature in particle edit mode is similar to this operator. However, it requires somehow transferring mesh data and everything else to the particle system's object. The copy operator works the other way around: it copies the particle system over to another object instead, which is much more convenient and less risky.
- Note on other data: Particle systems share the same settings and may have dependencies that are not copied along with them, like UV maps, textures, materials, etc.. This means you may have to copy and adjust these additional features manually to get the same result on a different object.
- "Shape Cut" grooming tool trims hairs using a mesh object boundary. This is a quicker way of avoiding protruding hair sections from lengthening than using the cutting tool. It works especially well for characters with extensive fur, where working in a single plane with the cutting tool becomes tedious.
- Minimum-twist curve framing for the particle instance modifier removes ugly artifacts and degenerate mesh faces.
Developer Tools and Internal Improvements
- New code library `bf_physics` to avoid cluttering of `blenkernel` and allow easier integration of C++ code.
- Generalized mass-spring system solver for cloth and hair. Currently particle still use an intermediate fake cloth modifier, but should eventually use this API directly.
- Alternative solver for the Lagrangian cloth/hair dynamics equations based on the Eigen3 library (WIP)
- New visual debugging utility system for quickly displaying points, vectors, lines, etc.. This helps a lot when working with abstract physical properties that are not usually displayed in the viewport.