# Combinatory Operations on Animation Data
This document describes some thoughts on how to combine animation data. This is concerning Blender's current behaviour of the NLA, as well as possible behaviour of the new layered animation system.
## NLA & Blending
The NLA seems to work in this way:
1. NLA stores a list of animation channels "**C**". This is the union of all channels across all its strips, regardless of the placement of those strips.
2. At the start of evaluation, **all** animated properties in "**C**" are reset to their default value (as per RNA).
3. Stips are evaluated. When these have an influence < 100%, they are blended with underlying strips. If there are no underlying strips, they are blended with the default values.
Not sure if the diagram below helps...
```mermaid
---
title: NLA Evaluation & Blending
---
flowchart TB
store_list[Store list all channels ever animated]
eval_start([Evaluation at time T])
reset_props[Reset all properties in that list to their RNA default]
eval_start --> reset_props
for_each_strip{For each strip S\nactive at T}
reset_props --> for_each_strip
for_each_chan{For each channel C of S}
eval_chan[Evaluate channel at time T]
has_underlying{Has underlying strip?}
blend_strip[Blend with underlying strip]
blend_default[Blend with default value]
write[Write the result]
done_check_chans([done with channels?])
done_check_strips([done with strips?])
END([END])
for_each_strip --> for_each_chan --> eval_chan --> has_underlying
has_underlying --|yes|--> blend_strip
has_underlying --|no|--> blend_default
blend_strip --> write
blend_default --> write
write --> done_check_chans
done_check_chans --|no|--> for_each_chan
done_check_chans --|yes|--> done_check_strips
done_check_strips --|no|--> for_each_strip
done_check_strips --|yes|--> END
```