Thought I’d delete and repost my message since I was in a rush writing it before and I wanted to give a more in-depth explanation as I’ve been asked by several people on Discord about whether I’m going ahead with making my own implementation. I’ll be uploading this and many more suggestions as separate posts soon—assuming the useless application system finally processes my application that’s been pending for months on end.
What Are Animation Curves and Why Are They Important?
Curves are pretty much everywhere in the natural world — nature, mathematics, physics, animations, tween styles, you name it. So it’s no surprise that digital content (games, movies, etc.) tries to avoid using the linear style of interpolation (e.g., TweenService) because it just feels janky and off. If you’re struggling to make something feel fluid, smooth, or if your game’s output numbers feel off, the fix is probably an animation curve away! At its core, an animation curve is a predefined curve, as shown below.
The uses are too numerous to list, but here are a few random examples:
- Custom tween styles for anything you can imagine!! (welds, colors etc).
- Additive base recoil, which is really the bread and butter of smooth custom implementations.
- IK transition presets (my main use case at the moment, which is essential to my project).
- UI transitions and health bars.
- Custom audio fading.
- Particle properties and dynamic particle effects!!
- Simulating a suspension system that provides upward forces for a car (for PID-based implementations).
- Realistic/arcade braking forces suited to your game’s needs and aesthetics.
- Latency prediction for specific cases.
Seriously, Roblox?
It’s actually unacceptable that a game engine in 2024 lacks the basic functionality of animation curves—something so fundamental. As usual, you can trust Roblox to lack features that actually matter while focusing on more useless niche features. Most “serious” engines and even programs like After Effects include this functionality, and it’s used in most games you enjoy playing outside of Roblox.
Implementation: Why Not Use the Infamous Vector3Curves?
Some people browsing the engine docs may have come across Vector3Curve/EulerRotationCurve tucked away for using animation curves in animations. Although this could be used, @SoCalifornian kindly tested it along with myself testing it, and as expected, the instance-based implementation is “painfully slow.” This isn’t really Roblox’s fault—the overhead (memory and performance) of it being an instance, rather than built into the engine as a DataType, makes it much less viable as a long-term solution.
If this were a built-in DataType, it also allows it to be used as an attribute (giving a graph editor on screen), which would put the capabilities and workflow on par with Triple-A engines also giving non scripters the ability work on the curves in team projects.
In terms of using the curves Unity has a perfect implementation for curves and roblox really does not need to be awkward doing their own.
For those who want to explore further: