Estoy haciendo un juego basado en sprites, y tengo un montón de imágenes que obtengo en una resolución ridículamente grande y las escalo al tamaño de sprite deseado (por ejemplo, 64x64 píxeles) antes de convertirlas en un recurso de juego, así que cuando dibuje mi sprite dentro del juego, no tengo que escalarlo.
Sin embargo, si giro este pequeño sprite dentro del juego (motor agnóstico), algunos píxeles de destino se interpolarán y el sprite se verá manchado.
Por supuesto, esto depende del ángulo de rotación, así como del algoritmo de interpolación, pero independientemente, no hay suficientes datos para muestrear correctamente un píxel de destino específico.
Así que hay dos soluciones en las que puedo pensar. El primero es usar la gran imagen original, rotarla a los ángulos deseados, y luego reducir todas las variaciones resultantes, y ponerlas en un atlas, que tiene la ventaja de ser bastante simple de implementar, pero ingenuamente consume el doble de sprite espacio para cada rotación (cada rotación debe estar inscrita en un círculo cuyo diámetro es la diagonal del rectángulo del sprite original, cuya área es el doble de ese rectángulo original, suponiendo sprites cuadrados).
También tiene la desventaja de tener solo un conjunto predefinido de rotaciones disponibles, lo que puede estar bien o no dependiendo del juego.
Entonces, la otra opción sería almacenar una imagen más grande, y rotar y reducir la escala mientras se renderiza, lo que lleva a mi pregunta.
¿Cuál es el tamaño óptimo para este sprite? Significado óptimo de que una imagen más grande no tendrá efecto en la imagen resultante.
Esto definitivamente depende del tamaño de la imagen, la cantidad de rotaciones deseadas sin pérdida de datos hasta 1/256, que es la diferencia de color mínima representable.
Estoy buscando una respuesta teórica general a este problema, porque probar varios tamaños puede estar bien, pero está lejos de ser óptimo.