This is a long post. Sorry :
I’ll explain our current streaming workflow first.
We have a alembic file which contains one object (animated). The alembic file is fairly large (couple hundred MBs). To stream this data, I am extracting each frame into an OBJ file and compress it with Draco. These individual frames (draco) are sent to client. Client updates the geometry on every
requestAnimationFrame call as below.
mesh.geometry = getCurrentGeometryFrame(currentTime) mesh.geometry.attributes.position.needsUpdate = true
This workflow is okayish, but when the geometry has lot of vertices, decoding and updating them on every render call is becoming expensive. So, We want to explore animations in GLB. Here’s what I tried so far.
- Convert the alembic file into GLB (retaining animations)
- Split the GLB animation into clipped multiple GLBs (with
model.glbhas 500 frames. It’s split into
model_400_to_499.glbwhere each GLB has specified number of frames.
Not successful from here:
- I’m trying to do load and render the animations incrementally.
- When the animation of
model_0_to_99.glbis about to end, load
model_100_to_199.glband continue animations without interruption.
The GLB animation file has
morphTargets and mesh has
morphAttributes. I thought, to fetch GLBs and update the
morphAttributes on the mesh, but. BufferGeometry#morphAttributes – docs says,
morphAttributes cannot be updated on an instance.
Could you point out where I’m doing wrong / suggest a better workflow to stream animation data? Thanks a lot!