Retro, SEGA

Gráficos Retro: SEGA Super-Scaler

Spread the love

SEGA lanzo en 1985 su placa árcade de 16 bits con Hang On también conocida como Super-Scaler. Con ello SEGA abandono por completo las placas de 8 bits y entro en el mercado de las recreativas de 16 bits con una máquina árcade espectacular para 1985, tanto que ningún sistema doméstico en los años posteriores fue capaz de realizar una versión fidedigna al original por limitaciones obvias de hardware.

¿Cómo conseguían la tridimensionalidad los Super-Scaler?

 

Para dar una sensación correcta de tridimensionalidad los objetos han de estar situados en la posición correcta según dicha perspectiva, por lo que necesitamos versiones de diferentes tamaños de un mismo objeto para representar objetos de un mismo tamaño, pero alejados de la vista del espectador.Esto significa que necesitamos varias versiones de un sprite para representar el acercamiento y la lejanía de estos. Es por ello que SEGA hacía uso de la perspectiva cónica para generar sus juegos en 3D a partir de sprites.

La solución más simple que existe en ese momento algo que SEGA y otros ya habían probado antes de Hang-On/Space Harrier, en su placa arcade VCO y que no difería en lo que había hecho Namco con Pole Position. Esa vieja técnica es lo que hizo posible una conversión de Space Harrier a Mark III/Master System. Sin embargo, no es como trabajan las placas tipo Super-Scaler, ya que esta escala dinámicamente los sprites a tiempo real y al vuelo.

SEGA invento un proceso que permitía ahorrar la cantidad de patrones de bits en memoria, donde a partir de un patrón más grande se iba generando otros más pequeños de forma automática sin tenerlos que tener en memoria. Este algoritmo permite ahorrar grandes cantidades de memoria ROM y RAM a la vez de tener el tamaño correcto del sprite según la posición en la perspectiva cónica.

El hardware de los Super-Scaler

El Super-Scaler original hacía uso del mismo hardware generador de patrones/sprite que SEGA usaría en el System 16, dicho hardware es generador de patrones/sprites como el que se utilizaba en consolas y micro-ordenadores en la época, en dichas placas árcade SEGA utilizaba un generador de sprites que en funcionamiento era muy parecido al TMS9918A y derivados que se vieron en consola, el VIC-II del C64 y otros similares.

El diseño de SEGA tenía un nivel técnico superior a la hora generar los gráficos para sus sistemas árcade donde los costes no estaban tan limitados como en los sistemas domésticos.  En realidad SEGA no tenía un VDP en forma de un solo chip, sino varios procesadores distintos haciendo el trabajo de un VDP donde cada uno de ellos generaba un plano distinto y luego un chip final creaba la composición final. Además, las recreativas Super-Scaler añadían chips adicionales encargados de generar el plano de la carretera.

Por lo que a la hora de mostrar los gráficos, cada Super-Scaler era una combinación de diferentes chips.

Tile Generator en los Super-Scaler

El primer tipo se encargaba de generar los fondos de los juegos y es llamado «Tile Generator», se podían conseguir colocar varios de estos chips, lo que hacían era leer una Name Table producida por la CPU en la RAM del cada uno de ellos para generar los fondos o leían estos de una ROM.

Los fondos eran generados con la clásica tabla de caracteres haciendo referencia a la ROM, pero utilizando unos 2 bytes de información por carácter para marcar su posición en pantalla. Cada carácter o patrón de bits tenía un tamaño de 8×8 píxeles y 16 colores y estos se escogían de RAM de 32 KB por Tile Generator. Si una recreativa de SEGA tenía 2 planos de fondo entonces tenía 2 generadores de tiles, si eran 4 entonces 4.

Sprite Generator en los Super-Scaler

El Sprite Generator era un generador de sprites tiene 2 KB de memoria RAM para la tabla de atributos de unos 128 sprites en las recreativas de Hang-On y Out Run, no obstante, para la Board X se duplicó hasta los 256 sprites y pasaron a ser de 256 KB. Para evitar que la CPU al acceder a la VRAM no generase contención lo que hizo SEGA fue crear un doble búfer para la tabla de sprites  Esto le permitía a la CPU cambiar los valores de una de las tablas mientras la otra estaba siendo usada de manera activa por el generador de sprites.

No obstante para poder realizar los efectos de manipulación de los sprites a ese nivel un 68K como CPU no era suficiente e incluso configuraciones duales de estos. Por lo que SEGA añadió una serie de chips de apoyo. Para ello aparte del segundo 68K para los cálculos pertinentes,

Escalado de Sprites

After Burner

La magnificación viene de la siguiente fórmula.

  • Magnificación= Ancho o altura en pixeles del sprite original/Ancho en pixeles del sprite final.
  • Ancho o altura en pixeles del sprite original=Ancho en pixeles del sprite final* Magnificación

Si la magnificación es <1 entonces estamos hablando de que el sprite se hace más grande, si la magnificación es mayor que >1 entonces significa que el sprite destino será más pequeño que el sprite origen. Dado que el valor más pequeño es 1 esto significa que lo que se hace es disminuir de tamaño el sprite original generando otro de menor resolución.

El escalado es, por tanto, la eliminación de filas y columnas de pixeles del patrón original, el sistema ha de saber que pixeles del original ha de usar para componer el nuevo sprite, para ello el Sprite Generator de los Super Scaler tienen un espacio de KB adicionales donde hay una tabla de consulta que le permite saber que pixeles del sprite original ha de eliminar según el nivel de escalado. El motivo de utilizar una tabla es que los cálculos son redundantes y siempre dan los mismos resultados por lo que para acelerar el proceso se utiliza dicha tabla para construir los sprites a menor resolución de manera dinámica.

Rotación de sprites

La rotación en el caso de querer añadir ángulos adicionales es más compleja, ya que se necesita re-calcular la posición de cada pixel en el mapa de bits. Tomando como referencia el centro de cada sprite como centro de un eje de coordenadas cartesiano, en dos dimensiones la formula de la rotación sería:

  • x′=xcosθ−ysinθ
  • y′=ycosθ+xsinθ

Aquí nos enfrentamos a dos problemas, la primera son las razones trigonométricas de cada ángulo y la segunda en que nuestro sistema no entiende de decimales, ya que no podemos colocar un pixel entre medio de dos posiciones de la tabla. Es un engorro enorme que además requiere una gran cantidad de cálculos matemáticos solo para rotar un sprite en dos dimensiones y pedirle que esto lo haga el 68K mata su rendimiento por completo.

El problema viene a la hora de calcular las razones trigonométricas de cada ángulo, lo mejor es dejar una tabla con las razones trigonométricas de los ángulos notables, ya que los sistemas de la época necesitaban una ingente cantidad de ciclos para calcular una razón trigonométrica a mano por lo que lo mejor era referenciarlas.

Angulos notables

Por lo que el truco era dejar las rotaciones en esos ángulos notables para realizar los cálculos pertinentes. Con tal de acelerar el proceso, SEGA había añadido dos co-procesadores matemáticos, uno para multiplicaciones y el otro para divisiones, que ejecutaban dichos cálculos a una velocidad mucho más alta que los dos 68K utilizados como CPU.

Road Generator

El Road Generator no manipula sprites, sino líneas de escaneo enteras, pero al igual que con el Sprite Generator tenemos una tabla donde marcamos:

  • Cuantas líneas de escaneo dura la actual configuración.
  • Cuantos pixeles a la derecha y a la izquierda se desplaza la carretera.
  • La paleta de colores y los colores para esa línea de la carretera.

Esto no fue una novedad de Hang On/Space Harrier ya que recreativas más antiguas como el Pole Position de Namco ya usaba esa técnica para representar una carretera que no es recta. Si desplazamos las líneas de sprites más o menos en una dirección podemos curvar la carretera.

Y con tal de representar pendientes o bajadas repentinas solo hace falta subir o bajar la linea de horizonte desde donde dibujamos el punto de fuga.

Super-Scaler Road Generator Super-Scaler Road Generator

Además, hemos de partir del hecho que en la SEGA Board X se podía rotar también en el fondo, lo cual se ve perfectamente en After Burner

Out Run en cambio utilizaba varios Road Generator para poder mostrar a gran velocidad los diferentes bifurcaciones que ocurrían durante el juego.

Plano de Texto

El plano de texto es generado por un Tile Generator, no obstante, con la diferencia de que tiene un nivel de preferencia mayor y se muestra siempre en primer plano. Sirve para imprimir texto en pantalla como los mensajes de inserción de monedas o la tabla de récords que a veces se superpone en algunos juegos.

Para ello utiliza un Tile Generator, pero con la diferencia de que cada patrón es de 8 bits por píxel y hace uso de su propia memoria para patrones y paleta de colores.

5 1 vote
Article Rating
Subscribe
Notify of
guest
7 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Over
Over
6 months ago

Hay por ahí un comentario de Yu Suzuki afirmando que sus juegos se diseñaban con lógica 3D siempre en mente.

Y es que no es lo mismo el proceso técnico de rasterizado, en este caso con sprites, que la lógica previa que lleva a saber cómo utilizar esos sprites para representar las 3D con los píxeles planos de la pantalla.

Del mismo modo que Doom está limitado y no es 3d de propósito general según Carmack, pero está lleno de características 3D, como que los cohetes pueden pasar por encima y por debajo de las plataformas, pero está muy optimizado. O el Hexen usando el mismo motor y permitiendo mirar arriba y abajo, cosa que no le gustaba a Carmack y lo capaba porque se veía deformado debido a una de sus optimizaciones, el dibujado en columnas.

Incluso hay vídeos en YouTube que explicaban que aunque limitado, seguía siendo 3D.

El término 2.5D de la época se usaba porque los personajes eran sprites, y el diseño de los escenarios acostumbraba a ser en 2D con vista cenital, como con el motor del Doom. Pero Blood con el motor de Duke nukem 3D tenía «Room on room» para solventar esa limitación de diseño.

A Id le gustaba decir que Quake era «3D real» porque usaba mapeo de texturas como PlayStation, y personajes 3D, y diseñaban con editor multi view con distintas coordenadas. No tenían limitaciones y sí era de propósito general, sin optimizaciones limitantes específicas del juego.

También es Interesante leer el artículo que desgrana el motor de Doom.

Over
Over
6 months ago
Klayf
Klayf
6 months ago

No me esperaba un gráficos retro de las sega super scaler, realmente muy interesante, puede ser que esos chips de apoyo que usaba sega no fuesen siquiera dsp sino directamente fpga configurados por ellos para cumplir con esa función que pretendian?, tengo el recuedo de haberlo leido en algún lado, tal vez sega retro. En fin, muy esclarecedora la entrada sobre el funcionamiento, saludos!

trackback

[…] una tecnología llamada Super Scaler, hace casi 40 años SEGA nos introdujo en un mundo de carreras donde decenas de sprites (una […]

trackback

[…] una tecnología llamada Super Scaler, hace casi 40 años SEGA nos introdujo en un mundo de carreras donde decenas de sprites (una […]

trackback

[…] una tecnología llamada Super Scaler, hace casi 40 años SEGA nos introdujo en un mundo de carreras donde decenas de sprites (una […]

trackback

[…] una tecnología llamada Super Scaler, hace casi 40 años SEGA nos introdujo en un mundo de carreras donde decenas de sprites (una […]

7
0
Would love your thoughts, please comment.x
()
x