# 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 ```