2023-09-29 Layered Animation model & Grease Pencil v3

Present: Falk David, Nathan Vegdahl, Sybren Stüvel

Discussion: how Grease Pencil (GP) could integrate with the new layered animation system.

Some relevant context:

  • GP animation data consists of tuples (start_frame, cel_index), which are currently lives in the GP data-block itself. cel_index references CurvesGeometry data-blocks (the drawings themselves) that are also stored in the GP data-block.


  • The GP animation data will be moved from the GP data-block to the Animation data-block, to a new GP channel type. This channel will exist in a single animation layer.
  • GP layers can be referenced multiple times from different animation layers (albeit once per animation layer). A ‘mix mode’ determines how these are handled:
    • Replace replaces the GP animation data. Use animation strips to limit the duration of those replacements.

    • Add adds more curves to the referenced GP layer.

      We briefly discussed adding a “current cel index” property to the GP layer, which would determine which CurvesGeometry is shown. This property could then be written to by the animation system, making the interaction between the animation system and GP data very similar to how FCurves write a value to the evaluated data-block. This approach would be hard to unify with such an ‘Add’ mix mode, though.

  • GP layers will remain as an entity in the GP data-block for managing their own transform, compositing options, etc.
  • Evaluation of the animation system will evaluate the entire Animation data-block. This should produce a set of GP layers, ‘flattened’ to just one CurvesGeometry data-block per layer. These flattened GP layers are then fed into the modifier system for further processing.
  • In order to know when GP drawings can be deleted, GP data-blocks could keep a historical list of Animation IDs that store its animation data. That will help in updating the reference counts on its CurvesGeometry data-blocks.

UI code:

  • Christoph Lendenfeld is optimizing current dope sheet, might be interested in also building a new one for the layered animation editor.
  • Falk implemented a GP layer tree view from Julian Eisel’s TreeView component, and it was very simple to use.
  • Falk suggests maybe making a TimeView component that can be used for drawing things in various time-dependent editors (including the VSE?)

Next steps:

  • Create a branch for the new data-model.
  • Add a new ID data-block type Animation.
  • Add a new editor for managing the animation.