Page MenuHome

Depsgraph: remove features incompatible with new system.
ClosedPublic

Authored by Brecht Van Lommel (brecht) on Mon, Jan 28, 7:11 PM.

Details

Summary

Some features are incompatible with multithreading and reliable evaluation
of dependencies. We are now removing them as part of a bigger cleanup to
fix bugs in keyframing and invalid animation evaluations.

  • Dupliframes have been removed. This was a hack added before there were more powerful features like the array modifier.
  • Slow parent has been removed, never worked in 2.8. It was always unreliable for use in production due to depending on whatever frame was previously evaluated, which was not always the previous frame.
  • Particle instanced objects used to have their transform evaluated at the particle time. Now it always gets the current time transform.
  • Boids can no longer do predictive avoidance of force field objects, but still for other particles.

Fixes T59495, T59992, T59904, T59178, T60598.

Diff Detail

Repository
rB Blender

Event Timeline

How about nuking the AnimData->recalc field completely? With COW it is totally broken anyway because it's never cleared once set in the main instance.

Brecht Van Lommel (brecht) marked an inline comment as done.Mon, Jan 28, 7:26 PM

Yes, @Sergey Sharybin (sergey) plans to remove that recalc flag.

Was discussing this with Brecht. I don't see other ways of moving forward without loosing those features which do not fit into threadable/localizable design.

As for adt->recalc, after this patch it should be relatively simple to remove it. As in, just go ahead and remove it, it shouldn't break anything and shouldn't cause any overhead. More careful look is needed though,

source/blender/blenkernel/intern/object.c
2220

Is this still needed?

Particle instanced objects used to have their transform evaluated at the particle time. Now it always gets the current time transform.

Does it mean that a cloud of birds or a school of fish will have all individuals with wings or tails in same position ?
Will there be another way to obtain decay in animation for all ?
Or does it mean that will just be impossible individually to shrink particles to a null scale just before their relative death ? It is really useful in many cases (explosions, fountains). Particles' disappearance may be unnoticeable if they are scaled down during their life.
It is not the case if they just pop out.

This is important point for users. If it is possible to restore this goals with extra-steps, users are ready to make them to keep this ability.
If we need to bake particle system first, and then press another button to adjust transforms to relative time, no problem.
If creation of action strip is required, users are ready to deal with that.

Does it mean that a cloud of birds or a school of fish will have all individuals with wings or tails in same position ?

This was never supported.

Will there be another way to obtain decay in animation for all ?

This is better done as a feature of the particle system, to handle the case where the lifetimes of all particles are not exactly the same.

It means that boids are no more able to avoid or to flee an animated main character.
Or user have to create a particle system emitting just one particle instancing main character for that.

This is only about predictive avoidance based on velocity, not avoidance as a whole.

Remove unnecessary double driver updates, remove AnimData.recalc flag.

Does it mean that a cloud of birds or a school of fish will have all individuals with wings or tails in same position ?

This was never supported.

I am not sure but when Slow Parent was working I think it was possible to have several meshes referring to one animated armature. We can still make a group with objects using several animations.
But if it is just for an offset option, it would be better.

Will there be another way to obtain decay in animation for all ?

This is better done as a feature of the particle system, to handle the case where the lifetimes of all particles are not exactly the same.

Of course an option at particle system level would be better. When particles are having same animation, result is weird. But it is worst to have similar poses when ages of particles are not the same.
Almost all addons to workaround that are converting particles to individual objects with their proper animation data. A very heavy solution.

Since 2.5x, it is really complicated to set up particles to not look all identical in their behavior. There was great improvement in physics but rendering improvements did not follow. Since Cycles, number of rendering options have even decreased. I hope that particles nodes will simplify ways to reach that goal.

Makes sense to me. Not much to add here, except that if we are removing those features, indeed better to do it now than later. ;)

This revision was not accepted when it landed; it landed in state Needs Review.Thu, Jan 31, 12:07 PM
This revision was automatically updated to reflect the committed changes.

Dupliframes is a real loss here, the array modifier and curves modifier don't cut it

Dupliframes is a real loss here, the array modifier and curves modifier don't cut it

Maybe we could add an 'official' operator to convert motionpaths to curves [as TODO/workaround]? Or you could use something like Btrace? (to get curves quickly [for array+curve modifiers])?
(just thinking out loud here...)