Consens
It’s not a good idea to remove the operator outright for 4.0
- It is still a valid way to shrink the filesize
- Some users rely on the bake functionality
However it would be good to rename it and update the description/manual to indicate its purpose.
Then a new baking operator is needed, one that provides benefits over the current hacky workflow of baking and unbaking the curve.
Then over the course of the 4.0 cycle we should be able to make the operator fully redundant by optimizing how keys themself are stored.
For the near tearm tasks I’ve added a small todo task to track the progress
#111050: Better Baking in the Graph Editor
Original Post
Blender has the Feature of baking FCurves which converts the BezTriple array into an FPoint array, this is called “Bake FCurve” in the UI (not to be confused with “Bake Action” which adds bezier keys). The baked curve cannot be edited, and it has a datapoint on every frame.
It can be accessed in the Graph Editor under Channel.
The reason given for why this exist is the following
* This is the bare-minimum data required storing motion samples. Should be more efficient
* than using BPoints, which contain a lot of other unnecessary data...
Why remove them
- Users are confused about that feature. In fact I thought it improved performance while it seems to only save disk space.
- It is a destructive operation and the resulting data can’t be edited, limiting its usefulness
- It adds complexity to the code.
- Subframe data is interpolated linearly so motion blur won’t work correctly.
- In order to save space it would be better to improve the FCurve storage instead. That way everyone profits automatically
Storage Saved
Assuming a character animation (62 bones) with 6000 frames, keyframes on every frame and euler rotations. That is 3.348.000 keys. With FPoint this would amount to 53.568.000 bytes or 53 megabytes. With BezTriple it is 241.056.000 bytes or 241 megabytes. This is of course a worst case example. Assuming sparse data, having a Bezier Key every 5th frame would be approximately the same size as the baked data.
Playback performance
Test Setup: 6000 frames of animation on a character with 62 bones. A key on every frame on all channels. Unlocked frame rate
There was no discernable performance difference. In both cases the playback was around the 700 frames per second mark.
Proposed Roadmap
4.0: Rename “Bake Curve” operator
4.x: Improve animation storage of Bezier Data
5.0: Remove baked FCurves from code
Waiting for 5.0 to completely remove it from code will allow any use case for this feature to pop up and be addressed. So far I’ve not heard from anyone that uses it.