Important changes for the Animation Clip Editor AnimSaves folder

Hello Developers,

In January 2024, we will be making changes to how the Animation Clip Editor saves local animations and how published animations are handled to improve experience loading times.

The Animation Clip Editor currently saves its animation data under the animated rig in the data model. Unfortunately, those saves can add significant weight to an experience’s size and load time, resulting in a weakened player experience, especially on lower end devices. So, we are making three changes to how the Animation Clip Editor manages local animations in order to improve performance and load time, explained below.

How does this affect me?

Unless you specifically use the instances located under the AnimSaves folder of the animated rig (for example, if you access the KeyframeSequence or the CurveAnimation directly in your experience), this won’t affect your existing experiences. However, this update may affect your future workflows, so please keep reading.

What is changing?

Publishing animations: When publishing an animation, there is now a toggle in the Asset Configuration dialog box that allows you to delete the local instances automatically. This option is turned off by default, but if you only use animations using their asset ID and don’t need the KeyframeSequence or CurveAnimation instances, we recommend enabling “Delete Local Instances” to improve your experience’s loading performance.

New animations: Any new animations you create will be saved in a new ServerStorage.RBX_ANIMSAVES.<rig name> folder. The old AnimSaves folder will be replaced with an ObjectValue whose property points to that rig folder.

Migrating existing animations: We’ve added a migration tool to help you with this transition (see the guidelines below on how to use it). When you select a rig from the Animation Clip Editor to work on your animations, a dialog box will show up if you still have animations under the legacy AnimSaves folder. That dialog box will allow you to delete, migrate, or ignore animations.

  • If the animation data is used directly in your scripts, you should choose “Ignore” for now and make the necessary changes to your code so that it uses the new location as soon as possible. The animation will be left where it was — that is, as a direct child of the AnimSaves ObjectValue — and your scripts using local myAnimation = myRig.AnimSaves.myAnimation will still work. However, the dialog box will show up again the next time you select the rig, so we encourage you to address it as soon as possible.

  • If you are still working on that animation, you should choose “Migrate.” This will move it to the new location and create all the necessary instances and folders for you.

  • If the animation has already been published and you don’t need to access its instances in your experience, you should consider choosing “Delete”. You can always import it again later and make additional changes if needed.

This process is instantaneous, and to save time, you can delete or migrate or ignore all animations at once, as seen in the screenshot above.

Finally, if you migrated or deleted an animation by mistake, we recommend you immediately close the place file without saving the changes and load it again.

What if my experience/plugin uses the animation data directly?

In this case, you need to change the code that reads the animation. We highly recommend that you follow the value of the ObjectValue to find the folder, rather than accessing the folder by name coming from ServerStorage, in case multiple rigs have the same name.

More precisely, you should replace code similar to this:

local myAnim = myRig.AnimSaves.myAnimation

✓ WITH this:

local myAnim = myRig.AnimSaves.Value.myAnimation

✗ NOT with this:

local myAnim = ServerStorage.RBX_ANIMSAVES.myRig.myAnimation

Please note that the animation data is now located in ServerStorage, which means that it does not replicate anymore and is therefore not available from the clients. If your clients need access to that data as well, you will have to manually move the KeyframeSequence or CurveAnimation and its descendants to ReplicatedStorage.

Why are we making changes?

Until now, animations have been saved (either automatically or manually) in an AnimSaves folder under the animated rig. This allows you to work on your animations spanning multiple Studio sessions until you eventually publish them.

Once they are published, however, all of those instances — KeyframeSequence, Keyframe, CurveAnimation, FloatCurve, etc. — are no longer needed to play the animations. Unfortunately, all of those unused instances are located in a place that is replicated to all clients when the experience is loaded on your players’ devices, which increases its loading time.

Because of this positive performance impact, we are changing how and where the local animation instance data is stored.

We understand that in some circumstances, you might have used those instances directly from your experience. Or maybe you even worked on a plugin that creates or reads those instances. This is why we are trying to make this process as low impact as possible. If your experience’s design makes this process seem difficult, please let us know below. Thank you.

FAQ

What will happen to my experience if I don’t take any action?

  • Experiences that are already published won’t be affected, and if you don’t update your experience, it will still work as expected. If your scripts use the local animations present in the AnimSaves folder in the DataModel, but you don’t run the AnimationClipEditor or decide not to migrate these animations, publishing the experience again won’t have any effect. Your scripts will still find the animations where they expect them to be, in the legacy AnimSaves folder. If you don’t migrate or delete the animations, you won’t get the benefit of improved loading time, but your experience will still run as expected.

What if I have a lot of local animations in my experience – how long will this take me?

  • This process is instantaneous, and to save time, you can delete, migrate or ignore all animations at once by selecting this option in the table header.
194 Likes

This topic was automatically opened after 9 minutes.

It never made sense for me how animations got saved under the data model, this looks like a great change that won’t impact anything in a harmful way, great job!

45 Likes

This is just going to be a problem again when you add instance attributes and objectvalues become obsolete

31 Likes

I thought this was the article which would finally allow us to create public animations. I was wrong.

48 Likes

For our game, the AnimSaves causes a lot of lag if you try moving the model, etc in studio (or in game). So I always removed it for production.

But great to see that this is now going to be default behavior.

Was the import feature from an animation id to an AnimSaves instance always available or is that new?

26 Likes

Didn’t think anyone left the animsaves folder in their rigs but here we are.

28 Likes

This is the “Import from Roblox” option in the main menu of the ACE. It has been there for a while.

25 Likes

Note for other developers - while this will improve client performance/memory usage, you should still try to delete the instances when you can (the Delete Local Instances option or manual removal) because these animations will still consume server memory when they sit in ServerStorage.

Another option that we use at Sawhorse is to have a separate place entirely for creating animations/assets where you can store that data without affecting either client or server resources in your actual experience.

29 Likes

Interesting how everyone has been having animation issues recently with no explanation for why and now suddenly a new animation “Feature” comes out… wonder if this has anything to do with the issues.

23 Likes

What kind of issues have they been experiencing? If it is related to animation blending, they can go back to the legacy behavior with an attribute attached to workspace. I have been able to edit and publish animations without issue.

17 Likes

We won’t see this Delete Local Instances button until next year? The migration tool will then allow us to load up all of our old animations to setup for the new changes and then we need to publish them again or can we just overwrite our existing animations with the new changes from the migration tool?

17 Likes

Hi there,

That is correct. The changes described in this post won’t be live until next year. We are making this announcement to make sure that developers aren’t surprised when things go live, and, in case they actively use the data located in the AnimSaves folder in their scripts, that we can answer all their questions in a timely manner.

Animations will not need to be published again just because they have been migrated. This migration only affects instances that the AnimationClipEditor uses internally to save your work in progress, but we know that some users rely on those instances for some very specific use cases.

So, once this goes live and you open a rig in the AnimationClipEditor, the migration dialog box shown above will list all the animations that are in the rig’s AnimSaves folder.

The main question to ask yourself is: do my scripts access the Keyframe, KeyframeSequence, CurveAnimation, etc… instances directly, or not?

If they don’t, you can simply migrate all your animations. All the instances will be moved to ServerStorage and the ACE will allow you to open them as usual; you won’t notice any change. Even better, if you realize that some animations have been published and you don’t need them anymore (or at least, not in the near future), you can also choose to delete them. You will always be able to reimport them later via the “Import From Roblox” menu option. You can also manually copy them to a “backup experience” if you want, before deleting them (although there is no tool for that, you will have to do it yourself).

However, if your scripts do access these instances, then you will need to update those scripts to access the instances in their new location, as explained in the post. If you can’t make those changes immediately, you should ignore those animations for now. This will keep them in the original AnimSaves folder and your script will still work; you will keep seeing the Migration window every time you open the rig, though.

Once all the animations of all the rigs have been migrated (or deleted), you should publish your experience again so that it can load faster.

I hope this answers your questions. Please let me know if anything is still unclear.

Cheers!

24 Likes

This is a change for lowering load times. An instance attribute will likely have zero difference in load times to ObjectValues. So there is no problem.

20 Likes

Slightly unrelated, but will the animation editor clearing the clipboard when opened be addressed soon? It makes it very tedious to use the “Import from Roblox” option, because if you’re copying the ID from some Animation in the explorer window, as soon as you reopen the editor and click import you can’t paste it in.

21 Likes

I do not load the AnimSaves models in my experience where the players are playing. My rigs only contain AnimSaves models in my developer place which is just a baseplate and several models that I work on to animate. Will this affect me?

16 Likes

Hi there, thanks for your feedback!

We are very much aware of this issue and we would love to see it fixed as well!

Unfortunately it goes beyond the scope of the ACE. The clipboard issue is related to how Studio as a framework handles shortcuts that are context-specific (Ctrl/Cmd C/V need to be properly redirected to the active viewport/editor window/plugin, etc) and requires a shared effort from many different teams, which is really hard to coordinate, to be fixed properly.

We have this on our radar, but I am unable to give you a timeline at this moment.

23 Likes

Hi there!

For your use case, the best course of action is to simply migrate all the animations in your developer place when the ACE offers you to. If you have many animations under the same rig, selecting the “Migrate” option in the header will mark them all for migration, you won’t have to click every single one of them!

Note that you will not have to re-publish the animations either.

16 Likes

This is pretty interesting. I hope this will improve load times in my game, which has a lot of animations. Will there ever be a way to allow access to others to see animations, instead of keeping them 100% private? Animations ownership is really annoying to deal with in Team Create.

16 Likes

can yall add the “Press Enter” to save the animation directly when exporting it? it’s a pain that this little feature was removed. it made workflow way faster when saving clusters of animations.

17 Likes