---
# System prepended metadata

title: Combinatory Operations on Animation Data
tags: [NLA, ' Animation 2025']

---

# 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
    
    
    
    
    
    

```

