[Bf-committers] Durian/Hair Troubles

Brecht Van Lommel brecht at blender.org
Tue May 18 15:06:13 CEST 2010


Hi,

I've been looking into the implicit solver code since yesterday, and
made one change which seems to help stability (will be committed
soon). Instead of doing the implicit integration on all hairs at once,
it is now done on individual hairs. I found that usually the conjugate
gradient takes about 4-8 steps, but it sometimes takes 20 or even does
not converge, and returns bogus velocities. I'm not entirely sure why
that is, but it seems logical that a smaller system would be more
numerically stable. What I suspect is that since there are many hairs,
and it tests for the average error of those hairs, a few hairs may be
able to hide their high error in this average. This is just a guess
though, but I looked at all the values coming into the CG function,
the forces, their derivatives, etc, on the frames that explode, and
couldn't find anything out of the ordinary compared to other frames.

On Sat, May 15, 2010 at 1:12 AM, bjornmose <bjornmose at gmx.net> wrote:
> first glance at the example:
> same problems reported at ED Plumiferos ..
> time ( on goal , colliders  any thing 'outside' ) is too discontinuous
> reads  as: the 'outside' is too fast to keep physics in sync.
> this is a intrinsic problem of the blender animation system .. : no
> canonic way  to ask for the 'inter frame' state of any object.
> work around:
> 1. isolate physical actors ( with layers, groups ... what ever )
> 2. run isolated system at 1/10 or less time scale
> 3. join back in proper time scale
> 4. yada yada
> ..
> ask the the physics wizards, invited to BC

Thanks for the pointer, I will definitely look into the effects of
this. It seems the cloth/hair solver is interpolating the goal
positions between the previous and new frame. So that's not as smooth
as it could be if we were interpolating the actual f-curves, but at
least should not cause too sudden changes. It may actually be more
reliable to do simple interpolation, since animations are tweaked to
look good on frames, subframe there may be we weird motions, though
that sounds a bit unlikely.

I haven't started looking into collisions yet, but they seem to be
problematic now, so this may be causing problems. I couldn't
immediately find code that does a similar interpolation there, but I
imagine a linear interpolation between the locations could be added
without major changes. Also there's effectors, if those are animated
that's not subframe accurate. I'm not sure how those would be solved
without major changes, but with some luck these won't cause many
problems.

Thanks,
Brecht.


More information about the Bf-committers mailing list