---
# System prepended metadata

title: 2023-09-29 GreasePencil & the new Animation model

---

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

Discussion: how Grease Pencil (GP) integrates 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.

**Conclusions:**

- 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.

