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.

Related reading