El Modo 7 y otros efectos de raster: una vista técnica
· Sergio Roldán
En la cápsula número 7 del podcast salió a colación el Modo 7 de Super Nintendo y el line scrolling que Street Fighter II usaba en el suelo de sus escenarios. El Modo 7 sigue siendo un gran desconocido pese a su fama, así que merece la pena repasar por encima los aspectos técnicos del truco y de las técnicas parecidas con las que otras máquinas lograban efectos similares.
El line scrolling del suelo de Street Fighter II
El efecto 3D del suelo se consigue haciendo que las líneas «más cercanas a la pantalla» en ese plano tridimensional imaginario se desplacen más rápido que las más lejanas. La pregunta obvia: ¿cómo, si las consolas no tienen ni de lejos tantos planos de scroll como líneas hay que mover? La respuesta es una combinación inteligente de hardware y software, los llamados efectos de rasterización.
La rasterización es el proceso de generar la imagen en pantalla. En las consolas de la época se dibujaba línea a línea, de arriba abajo, a 50 o 60 Hz según el modo de televisión. En un juego sin efectos especiales, el fotograma empieza a dibujarse cuando todos los cálculos ya están hechos: se programan unos registros concretos antes del dibujado y la consola pinta el fotograma ella sola, usando su hardware específico de fondos y sprites.
Los juegos con efectos de raster rompen ese esquema: cambian los registros del hardware mientras el fotograma se está dibujando. Cada vez que se termina de pintar una línea, el software altera un registro para que la siguiente salga ya con algo cambiado. Todo ocurre en una ventana de tiempo minúscula, el periodo de blanqueo horizontal (horizontal blanking): el tiempo que el haz de electrones de un tubo de imagen tarda en desplazarse desde el final de una línea hasta el inicio de la siguiente.
Aplicado al suelo de Street Fighter II, el truco es directo. Se dibuja el suelo en perspectiva y se asigna a un plano de scroll, que tiene un registro donde se escribe un valor para desplazarlo. En lugar de escribir ese valor una única vez por fotograma, se escribe un valor distinto una vez por línea, de modo que cada línea se pinte un poco desplazada respecto a la anterior. Sin cálculos 3D con matrices: solo números fáciles de calcular escritos en un registro en el momento justo.
La idea de fondo es esa: un mapa 2D dibujado en perspectiva y el desplazamiento de cada línea calculado de forma independiente, como si hubiera tantos planos de scroll como líneas. Algunos emuladores permiten desactivar los efectos de scanline, y entonces se ve cómo es realmente ese suelo cuando nadie mueve sus líneas a distintas velocidades.
La misma técnica sirve para todo tipo de distorsiones de fondos. Gunstar Heroes o Alien Soldier, en Mega Drive, la usan constantemente. Otro efecto de raster típico es el cambio de paleta para simular agua en juegos como Sonic: se programa una interrupción de raster justo en la línea que divide aire y agua, y al final de la última línea de aire se cambia la paleta de colores, de modo que el resto del fotograma se dibuje con los tonos subacuáticos.

Lo que Super Nintendo tenía y Mega Drive no
Antes de llegar al Modo 7 conviene explicar una capacidad de la SNES de la que Mega Drive carecía: rotar y escalar un fondo por hardware. Basta con escribir los coeficientes de rotación y escalado en unos registros y la consola transforma el fondo ella sola.
Sumando esa rotación/escalado hardware a los efectos de raster aparece el famoso Modo 7. Porque el Modo 7 no es un modo gráfico en sí: el nombre es puro marketing. Es un truco que combina ambas capacidades para generar un efecto pseudo-3D. En SNES esa transformación solo estaba disponible en el modo gráfico 7, de ahí el nombre; en Game Boy Advance, en cambio, podía usarse en los modos 1 y 2, lo que deja claro que la etiqueta no era la más adecuada.
Cómo se construye el efecto
En la práctica funciona de un modo parecido al line scrolling, con tres pasos:
El plano que se quiere poner «en 3D» se dibuja como si se viera desde arriba (aquí está la diferencia con el line scrolling, donde se dibuja ya en perspectiva).

Para crear la profundidad, durante el dibujado de cada línea se cambia el factor de escalado, aumentando el tamaño de las líneas más cercanas a la pantalla: las de la parte inferior, si lo que se quiere es un suelo.

El ángulo de giro se mantiene igual durante todo el fotograma, pero va variando de fotograma en fotograma según se quiera rotar el fondo.

A grandes rasgos, eso es el Modo 7. Detrás hay unas matemáticas en las que no hace falta entrar para captar la visión general del truco. Su ingenio está en el ahorro: calcular la rotación de un plano 3D a la manera tradicional exige operaciones con matrices por cada píxel de la pantalla, muchísimo más costoso que cambiar un parámetro por cada línea a dibujar.
¿Y en Mega Drive? Se podían lograr cosas parecidas, pero generalmente no este efecto tal cual: al no poder calcular por hardware la rotación y el escalado de fondos, había que recurrir a otros trucos sacrificando algún elemento por el camino.
Las imágenes explicativas del Modo 7 de este artículo proceden de www.coranac.com, donde hay una explicación detallada de la técnica, con todos los aspectos matemáticos y el código necesario para reproducir el efecto en una GBA.