Animation frame values in JSON: syntax question

Hi there,

When I create an animation using ACE, I’m a little confused about the JSON.
After I create an animation, it’s often easiest for me to perfect it by editing the JSON directly and saving it. When I do, I’m slightly confused by the syntax. I’m not facing any problems getting things to work, I’m just very confused about the syntax and wondering if I’m seeing bugs in how the data is stored?

Here’s a playground with a link to an animation snippet:

The animation JSON is:

{
  "animations": [
    {
      "name": "ScalingAnim",
      "property": "scaling",
      "framePerSecond": 60,
      "dataType": 1,
      "loopBehavior": 1,
      "blendingSpeed": 0.01,
      "keys": [
        { "frame": 0, "values": [0, 0, 0, [0, 0, 0], [0, 0, 0]] },
        {
          "frame": 15.728463015958313,
          "values": [
            0.9295120821088553,
            0.9295120821088553,
            0.9295120821088553,
            [0, 0, 0],
            [0, 0, 0]
          ]
        },
        {
          "frame": 40.461515110600395,
          "values": [
            0.20000712178012847,
            0.20000712178012847,
            0.20000712178012847,
            [
              -0.009667059021401886, -0.00999155619107051, -0.010180856465223206
            ],
            [
              -0.009667059021402009, -0.009991556587376412,
              -0.010180856465223206
            ]
          ]
        },
        { "frame": 100, "values": [0, 0, 0, [0, 0, 0], [0, 0, 0]] }
      ],
      "ranges": []
    }
  ]
}

I like to clean up the frame numbers to even numbers, since the timing of some of my animations needs to be very precise. I generally like to clean up the key frame values as well (separate issue, but snapping would be nice).

I’m wondering two things:
1 - Why does it appear that at each key, the vector3 value for scale is represented by 9 numbers instead of 3?

2 - Why are the keys formatted like
[ x,y,z, [x,y,x], [x,y,z]]
instead of
[ [x,y,z], [x,y,x], [x,y,z]]

Thanks!

The format of the serialization is what Animation.serialize() generates: [value, [inTangent], [outTangent]].

value is dumped as a varying list of numbers, depending on the type (float, Vector2, etc)
inTangent is the input tangent
outTangent is the output tangent

value is generated as a list of numbers instead of an array for historical reasons, I guess.

Thank you so much for that. It’s obvious now that the frames aren’t just values, but contain info on the spline handles as well. I overlooked that. Thank you!