Estoy renderizando sprites en coordenadas de píxeles exactas para evitar el efecto de desenfoque causado por el antialiasing (los sprites son pixel art y se verían horribles si se filtran). Sin embargo, dado que el movimiento de los objetos involucra velocidad variable, gravedad e interacciones físicas, la trayectoria se calcula con precisión de subpíxeles.
A velocidades de espacio de pantalla suficientemente grandes (vΔt mayores de 2 o 3 píxeles) esto funciona muy bien. Sin embargo, cuando la velocidad es pequeña, puede aparecer un efecto de escalera notable, especialmente a lo largo de líneas diagonales. Esto ya no es un problema a velocidades de espacio de pantalla muy lentas (v << 1 píxel por segundo), por lo que solo estoy buscando una solución para valores de velocidad intermedios.
A la izquierda está la trayectoria trazada para una gran velocidad, obtenida por simple redondeo de las coordenadas del objeto. En el centro puedes ver lo que sucede cuando la velocidad se vuelve más pequeña y el efecto de escalera del que estoy hablando. A la derecha, el lugar de la trayectoria que me gustaría obtener.
Estoy interesado en ideas de algoritmos para filtrar la trayectoria a fin de minimizar el alias, mientras se conserva el comportamiento original a velocidades grandes y pequeñas. Tengo acceso a Δt, posición instantánea y velocidad, así como a un número arbitrario de valores anteriores, pero dado que es una simulación en tiempo real, no sé acerca de los valores futuros (aunque si es necesario, una estimación podría extrapolarse bajo ciertos supuestos) . Tenga en cuenta que debido a la simulación física, también pueden ocurrir cambios repentinos de dirección.
velocity.y / velocity.x
por un factor de corrección proporcional a la velocidad.