El Modo 7 y otros efectos de raster-vista técnica

Escuchando el último correo de la capsula número 7, veo que se habla del modo 7 de Super Nintendo y del “Line scrolling” utilizado en el suelo del Street Fighter II. Como el Modo 7 siempre me ha parecido un gran desconocido, voy a contar un poco por encima algunos aspectos técnicos sobre el tema, así como algunas técnicas similares que se usaban también en otras máquinas para hacer efectos similares (como el citado line scrolling).

Vamos a empezar con lo más fácil, el “line scrolling”, que es el que se usaba como se comenta en la cápsula para hacer el efecto 3D del suelo de Street Fighter II. Como muy bien se explica en la cápsula, el efecto se consigue haciendo que las líneas “más cercanas a la pantalla” en el plano 3D imaginario se desplacen más rápido que las que están “más lejanas a la pantalla”. ¿Cómo se consigue esto fácilmente, teniendo en cuanta que las consolas no tienen tantos planos de scroll como líneas a mover? Pues usando una combinación inteligente de hardware + software. Aquí llegan los “Efectos de rasterización”

La rasterización es el proceso de generar la imagen en pantalla. En las consolas se iba generando linea por línea de arriba a abajo, a una frecuencia de 50 ó 60 Hz según modo de televisión utilizado. En videojuegos que no usan efectos molones, un fotograma se empieza a dibujar cuando ya están hechos todos los cálculos necesarios para hacerlo, de modo que se programan unos registros concretos antes del dibujado, y la consola pinta el fotograma ella solita haciendo uso del hardware específico de dibujado de fondo y sprites.

Pues bien, en los juegos que usan efectos de raster, esto no es así. Estos juegos cambian los registros del hardware mientras el fotograma se está dibujando. De este modo, cada vez que en pantalla se termina de dibujar una línea del fotograma, mediante software se altera un registro para que cuando se dibuje la siguiente línea, algo haya cambiado. Esto se hace en una ventana de tiempo muy pequeñita, justo cuando acaba de dibujarse una línea y antes de que empiece a dibujarse la siguiente: el período de “blanqueo horizontal” (horizontal blanking), que es el tiempo que en los tubos de imagen de las teles/monitores de toda la vida tarda el haz de electrones en desplazarse desde el final de una línea hasta el inicio de la siguiente.

¿Cómo se utiliza esto para hacer el line-scrolling de SF2? Pues muy fácil. En primer lugar te creas un dibujo en perspectiva del suelo a mover y lo asignas a un plano de scroll. Este plano de scroll tiene un registro en el que escribes un numerito para moverlo. Pues en lugar de escribir ese numerito con el valor una única vez por fotograma, lo escribes con un valor distinto una vez por línea, de modo que cuando la línea se vaya a dibujar, esté un poco desplazada respecto a la anterior. De este modo sin tener que hacer cálculos 3D con matrices, únicamente hay que escribir numeritos fáciles de calcular en un registro.

 

 

 

No se si se entiende, pero lo importante es la idea: Dibujas un mapa 2D en perspectiva y calculas el desplazamiento de cada línea de manera independiente, como si tuvieras tantos planos de scroll como líneas a pintar. Luego esos valores calculados los escribes durante el dibujado en pantalla, línea a línea. Creo recordar que algunos emuladores te dejan desactivar las scanlines, y así puedes ver cómo es el suelo si no se le aplica este efecto de movimientos a distintas velocidades según la profundidad de la línea.

Esta técnica también se usa para hacer todo tipo de efectos de distorsión de fondos. Algunos juegos como por ejemplo Gunstar Heroes o Alien Soldier de Megadrive los usan constantemente.

Otro efecto de raster típico, es por ejemplo el cambio de paleta para simular agua en juegos como Sonic. Programas una interrupción de raster justo en la línea que divide aire/agua, y al final de la última línea de aire, cambias la paleta de colores, para que todas las demás líneas del fotograma se dibujen con la paleta para agua.

 

 

Y de aquí pasamos ya al Modo 7, pero antes vamos explicar un poco una capacidad de Super Nintendo de la que Megadrive carecía: SNES permite por hardware rotar y escalar (ampliar/reducir) un fondo o mapa. Simplemente escribes los coeficientes de rotación/escalado en unos registros y la consola ella solita rota y escala el fondo.

Pues bien, usando esta capacidad de rotación/escalado sumada a los efectos de raster, ya lo tenemos, el famoso MODO 7. Y es que el Modo 7 no es un modo gráfico en sí (el nombre que se le ha dado es marketing nada más), sino un truco que usa la capacidad de rotación/escalado hardware de SNES combinado con efectos de raster para generar efecto pseudo 3D. Esta capacidad en SNES estaba disponible sólo en el modo gráfico 7, y de ahí el nombre de esta técnica, pero por ejemplo en GBA podía usarse en los modos 1 y 2, con lo que queda obvio que el nombre “Modo 7” no es el más adecuado. ¿Cómo se hace este efecto en la práctica? Pues de un modo parecido al line scrolling:

1.- Dibujas el plano que quieres poner en 3D como si lo vieses desde arriba (esto es diferente, con el line scrolling se dibuja en perspectiva).

 

 

2.- Para crear efecto de profundidad, cambias durante el dibujado de cada línea el factor de escalado, haciendo que se aumente el tamaño de las líneas que están más cercanas a la pantalla (las líneas de la parte inferior si se quiere hacer un suelo).

 

 

3.- El ángulo de giro será el mismo durante todo el fotograma, pero según queramos girar el fondo, irá variando fotograma a fotograma.

 

 

Y a grandes rasgos esto es el Modo 7. Esto lleva unas matemáticas detrás en las que no voy a entrar, porque sólo quiero dar una visión general del truco.

Estos trucos son muy ingeniosos porque permiten ahorrar mucha potencia de cálculo, ya que a la manera tradicional, para calcular la rotación de un plano 3D hay que hacer una serie de cálculos con matrices por cada pixel de la pantalla, lo cuál es muchísimo más costoso que cambiar un parámetro por cada línea a dibujar.

En Megadrive se podían lograr cosas parecidas, pero generalmente este efecto no se podía lograr tal cuál, ya que la consola no puede calcular por hardware la rotación/escalado de fondos, por lo que no se podía utilizar esta característica y había que usar otros trucos sacrificando algún elemento.

Las imágenes explicativas del modo 7 de este artículo han sido extraídas de www.coranac.com. Allí encontraréis una explicación detallada del modo 7, incluyendo todos los aspectos matemáticos y el código necesario para hacer este efecto en una GBA.

Share

Acerca de doragasu

Si no está roto, ¡yo lo arreglo!
Esta entrada fue publicada en Artículos, Consolas, Curiosidades. Guarda el enlace permanente.

11 respuestas a El Modo 7 y otros efectos de raster-vista técnica

  1. Otro artículo parido en el foro por el amigo doragasu. Una explicación cojonuda.

    ¡Saludos!

  2. Buen artículo

  3. habia un shooter que se basaba por completo enel Modo 7, ¿no?

  4. Grandísimo artículo. Siempre tuve curiosidad por el Modo 7… y por el famoso chip FX 🙂

  5. Sip, Axelay. Gracias Random 😉

  6. Sí, debe ser Axelay el shooter del que habláis, aunque no estaba basado enteramente en modo 7. Alternaba fases en modo 7 con fases de scroll clásico.

  7. Lo que es la mala memoria. A ese juego le eché muchas horas porque lo tenía un vecino y no recuerdo para nada las fases normales.

    Voy a tener que tomar fósforo 😀

  8. Muy bueno el artículo !!

    Siempre que pienso en el MODO 7 de la SNES, me viene a la cabeza un juego en particular: F-ZERO.

  9. Muy bueno doragasu!!!
    Es complicado explicar estas cosas y lo has hecho de puta madre.
    Me a molado lo de la paleta de Sonic y el efecto del agua!

    Un saludo chumachos!!!

  10. Pedazo de explicación, te lo has currado chaval 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *