La actualización adaptativa de mosaicos es una técnica de gráficos por computadora para videojuegos de desplazamiento lateral . Fue utilizada por John Carmack de id Software en juegos como Commander Keen para compensar el bajo rendimiento gráfico de las PC a principios de la década de 1990. Su principal innovación es un uso novedoso de varias características de hardware EGA para realizar el desplazamiento en hardware. La técnica recibe su nombre por su otro aspecto, el seguimiento de elementos gráficos movidos para minimizar la cantidad de redibujado necesario en cada cuadro. En conjunto, la combinación ahorra el tiempo de procesamiento que de otro modo se requeriría para volver a dibujar toda la pantalla. [1] : 50 Carmack diseñó el motor de software basado en una pantalla de desplazamiento para imágenes grandes de la década de 1970. [2]
La generación de gráficos de IBM PC anterior a EGA es CGA , que carece de funciones para el desplazamiento en hardware. Por lo tanto, el desplazamiento CGA se realiza en software, redibujando toda la pantalla para cada cuadro, algo que estos sistemas no tienen el rendimiento para hacer para la animación de pantalla completa. La actualización de mosaicos adaptativa minimiza la potencia de procesamiento necesaria para los juegos de desplazamiento lateral, para estar al alcance del hardware contemporáneo. Esto funciona marcando los mosaicos de mapa de bits y redibujando solo los gráficos en la pantalla que realmente se actualizan. [3]
La actualización adaptativa de mosaicos mediante desplazamiento por hardware debutó en el juego prototipo inédito Dangerous Dave en Copyright Infringement , implementado por Carmack. El título de " Dangerous Dave " había sido utilizado previamente por John Romero mientras programaba juegos para Softdisk . Esto se desarrolló en una semana como una recreación del primer nivel de Super Mario Bros. 3 de Nintendo , pensado como un prototipo realista del concepto de actualización adaptativa de mosaicos. El equipo de futuros empleados de id Software, que todavía trabajaban para Softdisk, completó entonces la réplica de todo el juego, que se presentó a Nintendo para obtener la licencia para PC. Nintendo rechazó la oferta después de que id Software terminara el prototipo. [4] [5] [1]
El primer lanzamiento de la actualización de mosaicos adaptativa de Carmack llegó en la primera entrega de la serie de juegos Commander Keen de id Software , Marooned on Mars .
EGA tiene varias características que permiten el efecto de actualización de mosaico adaptativo:
Carmack utilizó estas capacidades para crear un búfer que es 64 píxeles más ancho y más alto que la pantalla, dejando espacio para dos filas y columnas de mosaicos adicionales en el búfer fuera del borde de la pantalla. Utilizó las capacidades de desplazamiento de la tarjeta para permitir que la pantalla se deslice a través del búfer para un desplazamiento suave, lo que revela parcialmente los mosaicos adicionales.
Cuando la parte visible llega al final del búfer, la posición del búfer se desplaza hacia atrás en un mosaico y los mosaicos modificados se vuelven a dibujar. [6] Esto hizo que la técnica dependiera de mosaicos repetidos para limitar la cantidad de mosaicos que se volvían a dibujar. [7]
Otra versión de la técnica introducida en Commander Keen en Keen Dreams envuelve la memoria EGA para mostrar datos del otro lado del búfer. [7] Para poder desplazarse por un nivel entero, cuando el desplazamiento equivale al valor de un mosaico completo, la siguiente fila de mosaicos del nivel se dibuja en el búfer, justo al borde de la pantalla, lista para mostrarse cuando el desplazamiento continúa en esa dirección.
Dado que solo se redibujan los bordes de la pantalla en cualquier momento, los sprites en la parte visible de la pantalla no se redibujarían hasta que alcancen el borde de la pantalla. Para contrarrestar esto, el código calcula qué mosaicos había cubierto previamente un sprite en movimiento y los redibuja para borrar la imagen del sprite anterior, luego dibuja la imagen del sprite nuevo en su nueva posición. Esto permite animar los sprites independientemente del desplazamiento con un mínimo esfuerzo computacional.
Dado que mover un sprite de esta manera implica primero borrarlo y luego volver a dibujarlo, la imagen del sprite borrado puede ser visible brevemente, lo que provoca parpadeos. La parte final de la técnica de Carmack es utilizar las mismas características de desplazamiento de hardware de EGA para implementar también el doble almacenamiento en búfer . Esto establece un segundo búfer en el que el código puede dibujar mientras se muestra el primer búfer, que luego se cambia durante la actualización de la pantalla. Esto garantiza que nunca se muestre ningún cuadro a mitad del dibujo, lo que produce una animación suave y sin parpadeos.