Quick answer: Godot 4 Camera3D.look_at producing unexpected camera roll when target is directly above? Default up vector points along Y; near poles the cross product degenerates - pass explicit up vector.
Camera follows a flying target. As the target moves to directly above the camera, the view rolls sharply.
Pass explicit up
camera.look_at(target, current_up)Maintain the up vector frame-to-frame; pass it. Degenerate cross product becomes impossible.
Or use quaternion slerp
Compute the look-at rotation manually via quaternions; slerp between frames. Smoother than instantaneous look_at.
Damp orientation
For follow cameras, damp the look direction over 0.2s. The pole singularity is short; damping absorbs the artifact.
“look_at is a derivation. Derivations have singularities.”
For overhead-target cameras, compute orientation explicitly. The library helper handles the easy case; gameplay is the hard case.