Blurry 2D Character when moving

Godot Version

4.2

Question

When I move my 2D Sprite character around it is very blurry.
Blurry Character Video

I’ve tried a ton of different 2D Camera settings, import settings, and render settings with no luck. My current settings are:

display/window/size/viewport_width → 1920
display/window/size/viewport_height → 1080
display/window/size/viewport_height → canvas_items
display/window/stretch/aspect → expand
display/window/vsync/vsync_mode → disabled
Rendering → Textures → Default Texture Filter = Linear (Swapping this to nearest for non pixel art doesn’t help)
Everything else default

I am animating this sprite movement using an AnimatedSprite2D node with my animations set to 10 fps.

The only way I can make it not blurry is by making the camera a child of the Sprite and turn off smooth movement on the Camera. Which I don’t want to do.

So it has to be something with the framerate or fps… I’m unsure

What Is your movement under code under?

_physics_process(): Or _process():

I would try swapping it to see if that changes anything.

Might be helpful to post that code.

Hey, checked out the video you’ve posted.
It doesn’t seem blurry to me. Could you specify the problem?
Check the video you’ve recorded frame by frame, and see if it still seems blurry to you.

2 Likes

Hey, i got the same problem. For me it worked, when i turned on Horizontal and Vertical enabled underthe point Drag.
Hope it helps you a little bit.

It’s currently under the _physics_process. I tried swapping, but I couldn’t really see any changes.

The code is pretty basic at the moment, so I don’t think I’m doing anything in here that would cause this.

extends CharacterBody2D


@onready var animated_sprite = $AnimatedSprite2D

@export_category("Movement Parameters")
@export var speed : int = 400
@export var jump_height : float = 150
@export var jump_time_to_peak : float = 0.3
@export var jump_time_to_descent : float = 0.28

@onready var jump_velocity : float = ((2.0 * jump_height) / jump_time_to_peak) * -1
@onready var jump_gravity : float = ((-2.0 * jump_height) / (jump_time_to_peak * jump_time_to_peak)) * -1
@onready var fall_gravity : float = ((-2.0 * jump_height) / (jump_time_to_descent * jump_time_to_descent)) * -1

func get_gravity() -> float:
	# Jump gravity if going up, fall if going down
	return jump_gravity if velocity.y < 0 else fall_gravity

func _physics_process(delta):
	# Add the gravity.
	if not is_on_floor():
		velocity.y += get_gravity() * delta
		
	# Handle jump.
	if Input.is_action_just_pressed("ui_accept") and is_on_floor():
		velocity.y = jump_velocity

	# Get the input direction and handle the movement/deceleration.
	# As good practice, you should replace UI actions with custom gameplay actions.
	var direction = Input.get_axis("ui_left", "ui_right")
	
	if direction < 0 :
		animated_sprite.flip_h = true
	elif direction > 0:
		animated_sprite.flip_h = false
		
	if direction:
		animated_sprite.play("run")
		velocity.x = direction * speed
	else:
		animated_sprite.play("idle")
		velocity.x = move_toward(velocity.x, 0, speed)

	move_and_slide()

I see what you mean @gamemakingmagpie. When I scrub through the video it’s not blurry… Maybe it’s just my eyes when I watch it at normal speed. I guess it might be better when I add more to the scene.

Thank you @gmpfc, I gave I couldn’t notice much of a difference :frowning:

Try multiplying your velocity.x formula by delta.

Direction * speed * delta

I think that should do it :slight_smile:

Do not multiply by delta, velocity takes frame timing into account. This would be good advice for chaging position over time in _process, but not when using move_and_slide in _physics_process.

Doesn’t seem blurry to me, going frame-by-frame confirms this. maybe the grey on grey is tricking your eye.

2 Likes

Thank you all. Trying all the above didn’t change much.
I agree that it could just be my eyes with the empty scene and only the mouse. I’ll just keep going for now and hopefully with a fuller scene it will start to look better.

I too had the same problem, if others saw it as normal I thought perhaps it was the high refresh rate monitor the was the issue, which it was, tried to run the game on a 60 hz display and with camera smoothing it looks normal, is your monitor above 60 Hz by any chance ?