[Bf-committers] Depsgraph proposal

Daniel Salazar - 3Developer.com zanqdo at gmail.com
Sat Dec 24 18:45:59 CET 2011


Indeed, when i think in DAG problems this is mostly what hits me, I wish
this was solved properly, it's a considerable disadvantage of our "armature
object" aproach

Daniel Salazar


On Sat, Dec 24, 2011 at 3:58 AM, Tobias Oelgarte <
tobias.oelgarte at googlemail.com> wrote:

> For me this would be the most important things:
> * Treat bones like own objects. Currently we have this armature A
> depends on armature B and vice versa problem, even so there isn't a real
> cyclic dependency. This could also fix the delay between bones from the
> same armature connected by drivers. Currently it is treated as a cyclic
> dependency.
> * Let an action store the animation for multiple objects at once, not
> just only for armatures.
> * Separate drivers from actions. Currently every action must inherit the
> drivers from a "driver action" or they won't be working, since they
> aren't there.
> * Give the the editors a tool to view the dependencies. They really like
> to see them to find possible errors, even if it is their own.
>
> Just some thoughts that came quickly to my mind thinking about the
> dependency issues i and others had.
>
> Tobias Oelgarte
>
> Am 24.12.2011 00:57, schrieb Nathan Vegdahl:
> >> And last but not least: I propose to implement a depsgraph system>
>  that's invisible for riggers or animators. It won't change the>  animation
> system or ways you set up rigs (apart from that you get less>  cyclic
> conflicts). It is just meant to work!
> > Awesome.  We are in agreement on that point. :-)
> >
> >> We can for sure check on inserting bones as nodes in depsgraphs,
> >> especially for a mixed object/bone graph.
> > That may be a good compromise.  Arguably, a lot of the
> > hard-to-work-around issues with the current depgraph are due to bones
> > not being independent nodes.  I'll think on this some more.
> >
> >> We should ensure that rigs you want to make are possible and solvable
> >> in general. But at some moment you hit a wall where blender's design
> >> won't cooperate anymore, we then have to be practical too.
> > Of course. :-)  I just want to make sure that we know what limitations
> > we're imposing on ourselves for the future, and that these limitations
> > are acceptable.
> >
> > --Nathan
> >
> >
> > On Fri, Dec 23, 2011 at 2:59 AM, Ton Roosendaal<ton at blender.org>  wrote:
> >> Hi Nathan,
> >>
> >> We can for sure check on inserting bones as nodes in depsgraphs,
> >> especially for a mixed object/bone graph. Even nicer; a group
> >> (instance) can have a 'flattened' despgraph too (all bones and objects
> >> in 1 tree). These cases are probably solvable well.
> >>
> >> We should ensure that rigs you want to make are possible and solvable
> >> in general. But at some moment you hit a wall where blender's design
> >> won't cooperate anymore, we then have to be practical too. That's why
> >> I like to try to stick to ID levels first.
> >>
> >> If a system is well threaded, having an occasional cycle solve (like
> >> 2% of total data) is very acceptable. That's the thing we can try to
> >> balance.
> >>
> >> And last but not least: I propose to implement a depsgraph system
> >> that's invisible for riggers or animators. It won't change the
> >> animation system or ways you set up rigs (apart from that you get less
> >> cyclic conflicts). It is just meant to work! And if that means we have
> >> to revise depsgraph specs to make it work, so be it too.
> >>
> >> -Ton-
> >>
> >> ------------------------------------------------------------------------
> >> Ton Roosendaal  Blender Foundation   ton at blender.org    www.blender.org
> >> Blender Institute   Entrepotdok 57A  1018AD Amsterdam   The Netherlands
> >>
> >> On 23 Dec, 2011, at 9:49, Nathan Vegdahl wrote:
> >>
> >>>> For sake of simplicity I would consider to have despgraph
> >>>> nodes be ID blocks only. It might give limitations (object ->
> >>>> bone ->  object deps), but having each ID be calculated as
> >>>> black box has a lot of benefits with current architecture of
> >>>> Blender data. Granularity can also be achieved by
> >>>> cycle-solvers (detect the cycle exceptions and just call these
> >>>> twice).
> >>> Or thrice, or four times, or five times...?  What about object ->  bone
> >>> ->  object ->  bone ->  object?  Or even within the same object: loc x
> ->
> >>> rot z ->  scale y?
> >>>
> >>> Maybe in practice these situations may not come up much, or can be
> >>> painlessly worked around by the user?  But it's hard to know ahead of
> >>> time.
> >>>
> >>> What if we have a character that's crawling over the head of a big
> >>> multi-tentacled monster, and the monster is trying peel him off with
> >>> its tentacles?  And say these tentacles are done with spline IK.  Then
> >>> that's monster_bone ->  character_bone ->  monster_bone ->
> >>> spline_ik_curve ->  monster_bone.  You'd have to re-execute the
> >>> monster's armature rig three times.  And say it's a complex armature
> >>> rig?  That could be a significant performance hit.  Unless you only
> >>> refresh the parts of the rig that are affected... but with that level
> >>> of sophistication you're basically making a fine-grained depgraph
> >>> anyway.
> >>>
> >>> In any case, even if we say this limitation is acceptable (arguably my
> >>> above example is a corner-case that can be worked around; even with
> >>> the finest-grain dependencies there are still issues like that which
> >>> can pop up), let's at least not pretend that "detect cycle + call x
> >>> times" is a real solution to granularity issues.  Blender will still
> >>> have a granularity issues with it's dependencies, it will just be
> >>> pushed x levels down (at a performance cost of x).
> >>>
> >>> Also, how do we then distinguish between "cycles" that are solved with
> >>> multiple calls, vs real cycles that aren't?  It's important to detect
> >>> the latter so that users can e.g. debug their rigs.
> >>>
> >>> (I also wonder how "detect cycle + call x times" would impact
> >>> straight-forward multi-threading implementation? Though I am by no
> >>> means knowledgeable about that.)
> >>>
> >>> --Nathan
> >>>
> >>>
> >>> On Mon, Dec 19, 2011 at 8:11 AM, Ton Roosendaal<ton at blender.org>
> >>> wrote:
> >>>> Hi all,
> >>>>
> >>>> Here's a proposal for how to split the depsgraph work in parts;
> >>>> hopefully it helps getting this project running that way. There's
> >>>> also
> >>>> a link to an excellent analysis from Joshua!
> >>>>
> >>>> http://wiki.blender.org/index.php/User:Ton/Depsgraph_2012
> >>>>
> >>>> Thanks,
> >>>>
> >>>> -Ton-
> >>>>
> >>>>
> ------------------------------------------------------------------------
> >>>> Ton Roosendaal  Blender Foundation   ton at blender.org
> www.blender.org
> >>>> Blender Institute   Entrepotdok 57A  1018AD Amsterdam   The
> >>>> Netherlands
> >>>>
> >>>> _______________________________________________
> >>>> Bf-committers mailing list
> >>>> Bf-committers at blender.org
> >>>> http://lists.blender.org/mailman/listinfo/bf-committers
> >>> _______________________________________________
> >>> Bf-committers mailing list
> >>> Bf-committers at blender.org
> >>> http://lists.blender.org/mailman/listinfo/bf-committers
> >>>
> >> _______________________________________________
> >> Bf-committers mailing list
> >> Bf-committers at blender.org
> >> http://lists.blender.org/mailman/listinfo/bf-committers
> > _______________________________________________
> > Bf-committers mailing list
> > Bf-committers at blender.org
> > http://lists.blender.org/mailman/listinfo/bf-committers
> >
>
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers
>


More information about the Bf-committers mailing list