[Bf-taskforce25] RNA-IPO

Brecht Van Lommel brecht at blender.org
Wed Jan 7 17:05:36 CET 2009


Hi,

I'm not an expert at the animation system at all, however to me there
does seem to be overlapping functionality here which is not useful but
rather historical. I think that we could make the system more powerful
by introducing something that is a merger between an IPO-block, an
Action, and a list of NLA strips. Let's call this a SuperAction. It's
not necessarily a merger but perhaps more like a base class .. the thing
that you manipulate to organize animations at a high level.

(Note I'm not the one who works on the animation much at all, so take it
as an just idea which is perhaps not feasible to implement in practice!)


Let's think of all structs and properties in a scene as having a static
and fixed value. A SuperAction then is a change to those values, which
can be just a change at one frame, but of course also over time. It is a
datablock that you can apply at some point in a scene, typically at an
object, or a material, but also at the scene level affecting multiple
objects for example.

>From the user point of view you don't need to think necessarily of what
it contains, IPO blocks, Actions, NLA strips .. it's just a set of
changes to the thing you apply it to. Kind of like a diff/patch or
perhaps a branch in developer terminology.

For simple cases it's just attached to a single ID block modifying it's
values. In that case it would just contain some Ipo curves and
expressions for example, and you don't have to worry about naming it or
making it reusable. In more complex cases you can of course then give it
a proper name and use it on multiple objects.


Now the second important thing is that SuperActions can use other
SuperActions. If you want to put everything in a single SuperAction that
would be possible, but if you want to reuse some part of that, a few Ipo
curves, a leg animation or a full character animation, you can make that
it's own ID block, and reuse it in another SuperAction. In fact that is
how I imagine NLA strips to work then, you can combine multiple
SuperActions, blend them, apply modifiers etc, and the result is again a
SuperAction.

The contents of a SuperAction are a bit more complicated because they
can contain a bunch of different things. The point is that you would
edit them differently depending on the contents but from the outside it
looks the same, it's just some change over time.

Also important is, how do you know what the contents of a SuperAction
affects? This is where RNA paths come in. For example you could have an
action attached to a Group containing multiple objects. This could
contain RNA paths and IPO curves for example.

Group SuperAction:
objects["body"].bones["lefthand"].loc[0] -> IpoCurve
objects["helmet"].rot[0] -> IpoCurve

However you might want to split that up a bit for clarity or reuse:

Body Wave SuperAction:
bones["lefthand"].loc[0] -> IpoCurve

Helmet Tilt SuperAction:
rot[0] -> IpoCurve

Group SuperAction:
objects["body"] -> Body Wave SuperAction
objects["helmet"] -> Helmet Tilt SuperAction


There are many possibilities and difficulties with such a system which I
can't all predict or explain, this is just the rough idea.

Brecht.




More information about the Bf-taskforce25 mailing list