La siguiente imagen muestra dos sprites renderizados con muestreo de puntos en la parte superior de un fondo:
- El cráneo izquierdo no tiene rotación / escala aplicada, por lo que cada píxel coincide perfectamente con el fondo.
- El cráneo derecho se gira / escala, y esto da como resultado píxeles más grandes que ya no están alineados en el eje .
¿Cómo podría desarrollar un sombreador de píxeles que representara el sprite transformado a la derecha con píxeles alineados a los ejes del mismo tamaño que el resto de la escena?
Esto podría estar relacionado con la forma en que se implementó el escalado de sprites en juegos antiguos como Monkey Island, porque ese es el efecto que estoy tratando de lograr, pero con la rotación agregada.
Editar
Según las sugerencias de kaoD, traté de abordar el problema como un proceso posterior. El enfoque más sencillo era primero renderizar a un objetivo de renderizado separado (muestreado de forma descendente para que coincida con el tamaño de píxel deseado) y luego aumentar la escala cuando se renderiza por segunda vez. Abordó mis requisitos anteriores.
Primero intenté hacerlo Linear -> Point
y el resultado fue este:
No hay distorsión, pero el resultado se ve borroso y pierde la mayoría de los colores resaltados. En mi opinión, rompe el aspecto retro que necesitaba.
La segunda vez que lo intenté Point -> Point
y el resultado fue este:
A pesar de la distorsión, creo que podría ser lo suficientemente bueno para mis necesidades, aunque se ve mejor como una imagen fija que en movimiento.
Para demostrarlo, aquí hay un video del efecto, aunque YouTube filtró los píxeles:
Sin embargo, dejaré la pregunta abierta durante unos días más en caso de que a alguien se le ocurra una mejor solución de muestreo que mantenga la apariencia nítida mientras disminuye la cantidad de distorsión al moverse.
SpriteBatch
requiere que use el modo Inmediato, por lo que no vale la pena. Iré con esto :)