Quick answer: Animate zoom with a Tween over 0.3–0.5s. Optionally disable position_smoothing during the tween to avoid combined motion artifacts. Use create_tween().tween_property for clean interpolation.

Player presses zoom-out. Camera jitters along the path because position smoothing fights the zoom change.

The Symptom

Camera jitters or oscillates during zoom transitions. Smooth at static zoom levels.

The Fix

extends Camera2D

func zoom_to(target: float, duration := 0.4) -> void:
    position_smoothing_enabled = false
    var tween := create_tween()
    tween.tween_property(self, "zoom", Vector2(target, target), duration)
    await tween.finished
    position_smoothing_enabled = true

Disable smoothing during the tween; re-enable after. Zoom interpolates cleanly without fighting position lerp.

Verifying

Trigger zoom changes during gameplay. Smooth, no jitter. Smoothing returns for normal follow.

“Tween zoom. Suspend smoothing. Re-enable. Smooth.”

Related Issues

For physics interpolation, see interpolation. For Sprite3D billboard, see billboard.

Tween. Pause smoothing. No fight.