Contents

BlendTreeAnimation

A collection of animations on the same property that the framework blends to a single animation.

Declaration

struct BlendTreeAnimation<Value> where Value : AnimatableData

Overview

This structure provides a way to form a single animation by mixing several other animations together. You define a source node for each animation, and a weight, which determines how much each individual animation takes effect in the resulting animation.

To create the blended animation, you define a blend tree that sprouts from root, which consists of one or more blend-tree nodes (BlendTreeNode). Each node may be one of the following conforming types:

Because source nodes reference no other nodes, they represent leaf nodes in the tree.

Blending two skeletal movements to a single movement

The following animation plays a sampling of the animations named anim1 and anim2. To fine-tune the interplay between the two animations, the code sets a blend weight for each animation. The weight of 0.25 for anim1 determines that the first animation’s behavior is 25% prominent in the final result. The anim2 weight is 0.75, as the cumulative blend weight across all animations in the tree needs to equal 1. This determines that the second animation influences 75% of the visual behavior of the blended animation.

let anim1 = FromToByAnimation<JointTransforms>(
    name: "anim1",
    from: JointTransforms([Transform(scale: SIMD3<Float>(1, 2, 3),
    rotation: simd_quatf(ix: 5, iy: 6, iz: 7, r: 8),
    translation: SIMD3<Float>(10, 20, 30))]),
    to: JointTransforms([Transform(scale: SIMD3<Float>(11, 21, 31),
    rotation: simd_quatf(ix: 50, iy: 60, iz: 70, r: 80),
    translation: SIMD3<Float>(100, 200, 300))]),
    duration: 1.0)

let anim2 = FromToByAnimation<JointTransforms>(
    name: "anim2",
    from: JointTransforms([Transform(scale: SIMD3<Float>(10, 20, 30),
    rotation: simd_quatf(ix: 4, iy: 5, iz: 5, r: 7),
    translation: SIMD3<Float>(100, 200, 300))]),
    to: JointTransforms([Transform(scale: SIMD3<Float>(110, 210, 310),
    rotation: simd_quatf(ix: 500, iy: 60, iz: 70, r: 80),
    translation: SIMD3<Float>(1000, 2000, 3000))]),
    duration: 10.0)

let blendTree = BlendTreeAnimation<JointTransforms>(
    blend(
        BlendTreeSourceNode(
            source: anim1,
            name: "anim1",
            weight: .value(0.25)),
        BlendTreeSourceNode(
            source: anim2,
            name: "anim2",
            weight: .value(0.75)),
        name: "blend"),
    name: "blendTree",
    bindTarget: .parameter("bar")
)

Topics

Creating an animation

Configuring the animation

Timing the animation

Repeating animation playback

See Also

Blend trees