Quick answer: Godot Camera2D position_smoothing shaking visibly when combined with pixel snapping? The smoothing produces fractional positions that the snap floors — quantization noise.
Pixel-art game with camera follow shows ugly shimmer on tile edges. Smoothing produces 0.3-0.7 fractional values that round to either 0 or 1 each frame.
Two Settings Fight
Camera2D has position_smoothing_enabled (interpolates) and project-wide snap 2D transforms to pixel. Smoothing wants fractional; snap wants integer. Result: visible quantization.
Lerp Manually Then Floor
func _process(d):
var tgt = player.position
camera_smooth_pos = camera_smooth_pos.lerp(tgt, 0.1)
camera.position = camera_smooth_pos.floor()The smooth value lives in floats; the rendered value snaps. Smooth motion, integer rendering — no jitter.
Application Surface Scale
For multi-resolution support, render to a fixed-size SubViewport and scale the result. The camera lerps in viewport space; the upscale happens once per frame at integer ratios.
Verifying
Slow walks through pixel-art levels: tiles stay rock-solid. Camera tracks smoothly without per-pixel shimmer.
“Smooth motion, integer position. Lerp in code, floor at the camera.”
If you ship for 4K with integer scaling, render at 480p logical and scale. Every pixel-art camera bug disappears at that resolution.