Blender Git Loki

Blender Git "temp_merge_gooseberry_hair" branch commits.

Page: 7 / 11

January 19, 2015, 17:07 (GMT)
Fix for missing initialization of local cloth modifier inside particle
systems.
January 19, 2015, 17:07 (GMT)
Proper implementation of angular bending springs including jacobian
derivatives for stabilization.

The bending forces are based on a simplified torsion model where each
neighboring point of a vertex creates a force toward a local goal. This
can be extended later by defining the goals in a local curve frame, so
that natural hair shapes other than perfectly straight hair are
supported.

Calculating the jacobians for the bending forces analytically proved
quite difficult and doesn't work yet, so the fallback method for now
is a straightforward finite difference method. This works very well and
is not too costly. Even the original paper ("Artistic Simulation of
Curly Hair") suggests this approach.
January 19, 2015, 17:07 (GMT)
Unused function declaration.
January 19, 2015, 17:06 (GMT)
Basic solver result feedback from the mass-spring (cloth/hair) solver.

This returns a general status (success/no-convergence/other) along with
basic statistics (min/max/average) for the error value and the number
of iterations. It allows some general estimation of the simulation
quality and detection of critical settings that could become a problem.
Better visualization and extended feedback can follow later.
January 19, 2015, 17:06 (GMT)
Calculate bending targets based on the direction of previous segments.

This makes the bending a truely local effect. Eventually target
directions should be based in a local coordinate frame that gets
parallel transported along the curve. This will allow non-straight
rest shapes for hairs as well as supporting twist forces. However,
calculating locally transformed spring forces is more complicated.
January 19, 2015, 17:06 (GMT)
Simple debug drawing support inside the implicit solver.
January 19, 2015, 17:06 (GMT)
Added a damping term for angular bending springs.
January 19, 2015, 17:06 (GMT)
Simple initial implementation of angular bending springs.

These are much better suited for creating stiff hair. The previous
bending springs are based on "push" type spring along the hypothenuse
of 3 hair vertices. This sort of spring requires a very large force
in the direction of the spring for any angular effect, and is still
unstable in the equilibrium.

The new bending spring model is based on "target" vectors defined in a
local hair frame, which generates a force perpendicular to the hair
segment. For further details see
"Artistic Simulation of Curly Hair" (Pixar technical memo #12-03a)
or
"A Mass Spring Model for Hair Simulation" (Selle, Lentine, Fedkiw 2008)

Currently the implementation uses a single root frame that is not yet
propagated along the hair, so the resulting rest shape is not very
natural. Also damping and derivatives are still missing.
January 19, 2015, 17:06 (GMT)
Replace the dynamic root transform in the implicit solver data with a
single transform matrix.

Dynamic properties of the transformation are only needed during the
setup phase when they should be read from external data (hair system
roots) and generate fictitious forces on each point.
January 19, 2015, 17:06 (GMT)
More scons fixes for physics lib.
January 19, 2015, 17:06 (GMT)
Fixed scons build files for new physics subfolder.
January 19, 2015, 17:06 (GMT)
Disabled the velocity filtering feature for now, since the weighting is
incorrect.

The voxel grid needs better tool support to make it usable, so fixing
the filtering is not high priority right now.
January 19, 2015, 17:06 (GMT)
Added basic filtering feature for velocity smoothing.

This is part of the original method from "Volumetric Methods for
Simulation and Rendering of Hair". The current filter is a simple box
filter. Other energy-preserving filters such as gaussian filtering
can be implemented later.

The filter size is currently given as a cell count. This is not ideal,
rather it should use a geometrical length value, but this is too
abstract for proper artistical use. Eventually defining the whole grid
in terms of spatial size might work better (possibly using an external
object).
January 19, 2015, 17:05 (GMT)
Made the voxel grid size for hair interaction configurable and increased
the default to 32.

Conflicts:
source/blender/blenloader/intern/versioning_270.c
January 19, 2015, 17:05 (GMT)
Reduced the length threshold for disabling short hairs from 0.1 to 0.01.
January 19, 2015, 17:05 (GMT)
Fix for rB71271bb, was replacing the force vectors entirely instead of
adding.
January 19, 2015, 17:05 (GMT)
Fix for effector force fields on hair, using the world-to-root
transformation.
January 19, 2015, 17:04 (GMT)
Add weak repulsion forces to hair collision response to keep the hair
at a the margin distance ("outer" softbody margin).

This has to be clamped arbitrarily unfortunately, otherwise the
repulsion force can add too much energy into the system. A factor of
4 * restitution impulse seems to give good results for now, this can
be refined later on if necessary.
January 19, 2015, 17:04 (GMT)
Added back the velocity smoothing implementation.

This is now also decoupled from the internal solver data. The grid is
created as an opaque structure, filled with vertex or collider data
(todo), and then forces can be calculated by interpolating the grid at
random locations. These forces and derivatives are then fed into the
solver.
January 19, 2015, 17:04 (GMT)
Fix for Sintel hair bug.

The hair solver needs sane input to converge within reasonable time
steps. In particular the spring lengths must not be too difference
(factor 0.01..100 or so max, this is comparable to rigid body simulation
of vastly different masses, which is also unstable).

The basic hair system generate strands with equally spaced points, which
is good solver material. However, the hair edit operators, specifically
the cutting tool, can move points along the strands, creating tightly
packed hair points. This puts the solver under enormous stress and
causes the "explosions" observed already during the Sintel project.

The simple solution for now is to exclude very short hairs from the
simulation. Later the cutting tool should be modified such that it
keeps the segments roughly at the same length and throws away vertices
when the hair gets too short (same goes for the extension tool).

The hair system should have a general mechanism for making sure that
situations such as this don't occur. This will have to be a design
consideration for replacements in any future hair system.
Tehnyt: Miika HämäläinenViimeksi päivitetty: 07.11.2014 14:18MiikaH:n Sivut a.k.a. MiikaHweb | 2003-2021