Alembic Override Frame linked to cache FPS

I had a question about Alembic caches behavior when using the “Override Frame” option.

Currently it’s linked to FPS of the file you exported it from, causing the Alembic to have a baked in fps.
If I wanted to animate that value or play a previously cached file slower / faster, right now setting the custom frame value needs a multiplier.

For example:

I make at simulation at 120 fps in one file that I want to play back at 30 fps in another. (like a slow motion effect, or interpreting 120fps footage as 30fps in video)
When importing a 120 frame animation to the 30 fps project, it’s only 30 frames long because it’s interpolating the 120fps as 1 second.

When animating the Override Frame value I now have to deal with weird subframe values (or add a driver like #(frame/120)*30 when I just want to be able to say, animate the value from frame 1 to frame 40 regardless of the fps the alembic was created with. The Mesh Cache modifier works like this with point cache and it’s a lot more human readable and easier to work with.

I guess what I’m trying to say is if we can use “frame” as the base time measurement in an Alembic instead of “Seconds” @sybren? Or maybe have an “Ignore FPS” option when importing.

That’s the thing, an Alembic file doesn’t have any concept of frames, so it has no FPS setting. Alembic works purely with time, and values that are sampled over time. For example, there is no way to distinguish 30 FPS with 2 samples per frame, and 60 FPS with 1 sample per frame. This has caused numerous developers to be lazy and just hard-code 24 FPS when reading Alembic files (for example the Alembic plugin for USD).

When importing a 120 frame animation to the 30 fps project, it’s only 30 frames long because it’s interpolating the 120fps as 1 second.

Yup, that’s because all it knows to map from frame (in Blender) to time (in Alembic) is the current frame rate.

I guess what I’m trying to say is if we can use “frame” as the base time measurement in an Alembic instead of “Seconds” @sybren? Or maybe have an “Ignore FPS” option when importing.

Unfortunately that’s not possible as there is no FPS setting at all. I’ve been discussing this on the Alembic forum, mostly from the context of the hard-coded 24 FPS in many applications. Having such an option to time-scale from the original frame rate would be another useful possibility.

For reference, the FPS hint I suggested in that forum thread did make it to their issues list on GitHub, but hasn’t seen life since. I’ve just poked them and asked for an update on this.

2 Likes

Alright, thanks for the comprehensive answer. I’ll keep an eye on the GitHub discussion as well.

2 Likes

or add your Feedback on the Alembic Forum

1 Like

Actually, the ‘DCC FPS hint’ metadata support has been added to Alembic, and has been released as part of Alembic 1.7.12.

2 Likes