
Aim smoothing in Apex Legends: a spring and damper instead of an instant snap
An instant snap is several degrees in a single frame. A human hand does not move like that under any circumstances, which is exactly why the movement is smoothed. Here is how.
Two models
The simple one is linear: each frame the crosshair covers a fixed fraction of the angle that is left. The result is exponential decay — a sharp start and a long, listless tail at the target.
The second is a spring with a damper. The remaining angle acts as a stretched spring pulling the crosshair toward the target, while the damper bleeds off the speed it gathers.
acceleration = angle · stiffness − velocity · damping
velocity += acceleration · dt
angle -= velocity · dt
The chart shows the essential point: the spring has a ceiling on its speed, so the crosshair covers most of the distance at a steady rate and the damper absorbs what is left at the target. The linear model does the opposite — it starts with a jerk and then crawls.
Stiffness depends on how close you are
A constant stiffness gives either sluggish tracking across a wide angle or a twitchy finish right at the target. So it is recomputed every frame.
The remaining angle is divided by a configurable capture radius and turned into a "proximity" between 0 and 1. That proximity then enters the stiffness twice: linearly, and through a power with a configurable exponent. The result is a soft entry into the target, with no step at the edge of the radius.
Damping goes the other way and falls as you close in: at the target the spring is no longer accelerating, so there is nothing to bleed off, and the precision stays.
On top of all of it sits a speed ceiling. That is what really decides how fast the crosshair can cross a wide angle: however hard the spring pulls, it will not move more than the limit allows in one frame.
The crosshair does not travel in a straight line
Even a correct speed profile stays recognisable if the crosshair crawls along a perfect straight line. So a sideways offset is added to the target.
The size of that offset follows the parabola 4p(1−p): zero at the start, maximum in the middle, zero at the end. Its direction is perpendicular to the vector to the target, and its scale depends on how wide the angle is.
The random part is not redrawn each frame. It is smoothed by r ← 0.7·r + 0.3·noise — the new value is 70% of the previous one. Without that, instead of a smooth arc you would get a tremor, which reads even more clearly than a straight line.
The state resets when the target changes
A detail that is easy to miss: the spring holds accumulated velocity. Switch to a new target without clearing it and the crosshair overshoots — it arrives at the new target carrying the speed it built up chasing the old one.
So the state is reset on every target change, on releasing the key, and on losing the target. Every acquisition starts from zero.
What is configurable
Smoothing type, stiffness, damping, capture radius, the boost near the target, the ease-in strength and how curved the path is — each is its own menu setting, because a comfortable profile is personal and depends on mouse sensitivity. The module list is in the Apex Legends cheat description.
The equivalent problem is shaped differently elsewhere: in PUBG the hard part is ballistics and sight zeroing, in Rust it is the projectile speed table, and in War Thunder it is a flight time with two solutions.
If the product will not start, every step is in the launch guide.