Loading Speed Comparison for Animations?

(Gilles38) #1

Hi all,
Before choosing a workflow for animations, I was wondering whether some file formats were faster than others to show up online
Maybe the staff can comment on that.
Is it Blender format (in my case) or other native softs, FBX, Stop-Motion, mesh-cash/MDD?
Is there a file format loading faster with the very same animation ?
Thanks to the staff to help on this.

PS: In my case for instance, I have tested a rigged human mesh (20k faces, 10k vertices) with shapekeys and a 15 frame animation in Blender.
I used about all formats that were available (did I miss one or two other possibilities?) and looked at the loading speed online :
- Blender file: nearly 1 min.
- FBX : didn't try because as far as I understand shapekeys are not supported in FBX files
- Stop-Motion (tuto here): 10-20 sec.
- Blender file after applying Mesh Cache MDD (from the tuto here) : 10-20 sec. So far the latest strategy is the best for me: I don't have to deal with bones, modifiers, drivers and I stay in the Blender format which Sketchfab can take. It's a bit like Stop-Motion but smoother with the Sketchfab interpolation.

(Mrchlblng) #2

@gilles38 that's an interesting question. In a ideal world there would be no difference. In reality, it's quite hard to draw any generic conclusion as things may happen either on the software used for conversion or on our side when loading the data.

Without going into much details, we have 2 different compressions involved:
1. 3D compression in which we try to reduce the number of bits required to represent animation/geometry
2. classic "archive compression" that losslessly reduces the generated buffers

It might happen that 1. will work better (i.e. generate smaller binary buffers) on model A than model B but 2. would make the final data smaller for B than for A. So there is no generic conclusion.

So I'd not advice to use stop motion or mesh cache for performance/playback smoothness; the reason is that we do not have optimized compression for this case i.e. we do not try to detect if it is the same mesh being deformed which means that there will be more kind of duplicated data which should always result in bigger final data.

We do support shape keys in both blender and fbx (I'm just not sure blender can actually export them in fbx). As you don't want to go with rigged animation, I'd advise to use shape keys as some information is shared between all frames (mainly the mesh topology) so it should result in smaller filesizes.

In the end, I'm afraid that only experiments on your specific data will give you a reliable answer.

(Gilles38) #3

Thanks for this detailed reply.
Actually I would love working directly with rigged animation, but in my case loading of the Blender file online is much longer than Mesh Cache (still in a Blender file).
In the Mesh Cache case, I though you try to detect if it is the same mesh because a) annotations follow the mesh, b) there is interpolation in between frames and the whole thing is pretty smooth (more than Stop Motion)

I have two complementary questions:
1) Do you read the beggining of the animation before the whole animation is loaded (a bit like you tube videos) ?
2) And does it help to have several small multiple actions instead of a large one ?

(Mrchlblng) #4

Ok so actually, the mesh cache is processed as morph animation hence the smoother result. Note that, related to your alembic post, we have an extra optimization for alembic, in which we actually try to detect if a geometry may be processed as morphed instead of using stop motion.

Regarding your questions:

  1. we load an animation at once; there is no streaming (I'm not sure I understood the question though)
  2. we download all animations and will start playing the first that is downloaded (then we play the animations in the saved ordering); so it should be faster to make small animations but you may not have consistent results in the playback

(Gilles38) #5

OK yes, in my test I think your alembic optimization seemed to process my model as morph because the animation didn't look as a true stop and motion that I have also tried with the same animation.
1) yes I meant streaming, sorry
2) this is unclear to me. So you mean there is some kind of streaming here?. If I have a 100 frame animation in a single Action (as defined in Blender at least), it will take more time to download and start playing than the same animation cut into, say 10 Actions of 10 frames for each? If so will it start playing 10 times faster? and is this true for all formats, alembic, FBX, Blender ?
That's an important question for me to know whether it is worth breaking down animations.
Thank you

(Mrchlblng) #6

We do not have any streaming. Every action is written in a dedicated asset that needs to be downloaded. When loading a model, we trigger animation buffer downloads all at once and play the first being fully downloaded.
The smaller the data to download, the faster playback should start so I'd advice to split your data in distinct tracks.