Autor Tema: Sprites y Bobs del Amiga  (Leído 29786 veces)

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Sprites y Bobs del Amiga
« en: Febrero 19, 2016, 12:19:17 »
A raíz de este artículo publicado en Commodore Spain me he quedado "patidifuso" con las características de los sprites del Amiga...

Enlace: http://www.commodorespain.es/sprites-bobs-y-otras-criaturas-magicas-i-introduccion/

Citar
Los sprites tienen las siguientes limitaciones:

    Solo es posible emplear 8 sprites en una misma línea.
    Tienen un ancho máximo de 16 píxeles.
    Cada sprite, de manera aislada, puede mostrar un máximo de 4 colores (3 + transparente). Si emparejamos 2 sprites, ese límite de colores ascenderá a 16 (15 + transparente).

He quedado asi: :O :O :O

- ¿8 sprites por linea?: pero si eso es lo mismo que el C64 :O
- ¿ancho máximo de 16 pixels?: pero si los del 64 tienen 21 pixels!!! :O
- Colores: esto no me queda claro pero parece decir que son 4 colores por sprites, de hecho 3 porque uno es transparente... lo mismo que el 64! :O

A ver si los amigueros me convencen que los sprites del Amiga son altamente superiores a los del C64.
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Sprites y Bobs del Amiga
« Respuesta #1 en: Febrero 19, 2016, 12:20:19 »
Por otra parte, los Bobs esos son simples bloques gráficos no? lo que hace el Atari ST al no tener sprites.

www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

Laddh

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 233
    • Ver Perfil
Re:Sprites y Bobs del Amiga
« Respuesta #2 en: Febrero 19, 2016, 13:20:55 »
Josepzin, el ancho de los sprites en el C64 es 24, y si en el Amiga el ancho son 16. En lo que son diferentes es en el alto que en el Amiga es ilimitado, según el Hardware manual:

"You define a sprite by specifying its characteristics:
 On-screen width of up to 16 pixels.
 Unlimited height."

Con esto podías crear unos cuantos pseudosprites siempre que no coincidieran en horizontal con su sprite "madre"
Eso sí, con los Bobs podías hacer lo que quisieras y no echabas de menos los sprites.

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Sprites y Bobs del Amiga
« Respuesta #3 en: Febrero 19, 2016, 13:30:23 »
Cierto, cierto, 21 es el alto no?
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

Laddh

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 233
    • Ver Perfil
Re:Sprites y Bobs del Amiga
« Respuesta #4 en: Febrero 19, 2016, 13:31:39 »
Ok.

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Sprites y Bobs del Amiga
« Respuesta #5 en: Febrero 19, 2016, 13:33:15 »
Y con los Bobs esos había aceleración gráfica? Porque si no la había entonces era lo mismo que el Atari ST...

Lo siento si pregunto obviedades :-P

Menuda mierda de sistema de sprites que tiene el Amiga, yo siempre pensé que sería algo mucho más potente.

Y lo siento si meto la pata, hablo desde la ignorancia.
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

nandius_c

  • Commodorero
  • **
  • Mensajes: 31
  • SYS 0
    • Ver Perfil
    • El rincón de Fer (Commodore Spain)
Re:Sprites y Bobs del Amiga
« Respuesta #6 en: Febrero 19, 2016, 15:07:33 »
Hola a todos,

  soy Fernando Cabrera, el autor del artículo sobre BOBs y sprites en CommodoreSpain. En primer lugar, gracias a josepzin por sus comentarios y por abrir este hilo, siempre pueden surgir debates interesantes :). Por otra parte, comentaros que el artículo no está enfocado a programadores, más bien al contrario, la intención es que todo el mundo pueda entender cómo funcionan ciertos aspectos técnicos de los juegos en Amiga. Ello implica simplificar mucho las explicaciones, por supuesto, y no poder entrar en mucho detalle.

  No conozco a fondo el sistema de sprites del Commodore 64 pero os comento algunas cosas sobre el de Amiga, aunque ya las he estado hablando con josepzin por Twitter:
 
  - El Amiga dispone de 8 sprites hardware.
  - El ancho máximo es 16 píxeles y el alto es "ilimitado".
  - Los sprites pueden emplearse de manera individual o en parejas pre-establecidas:
      - Los sprites individuales permiten mostrar 4 colores y la paleta funciona así: 0 y 1 emplean los colores del 16-19, 2 y 3 del 20-23, 4 y 5 del 24-27 y 6 y 7 del 28-31, siendo siempre el primer color de cada grupo el transparente.
      - Los sprites que funcionan emparejados permiten mostrar 16 colores, del 16-31, siendo el 16 el color transparente. Evidentemente, al emparejar 2 sprites estos representarán un único elemento gráfico en pantalla.
  - Evidentemente, es posible multiplexar los sprites a lo alto del display, es decir, podemos reutilizar un mismo sprite hardware en el mismo frame siempre que entre cada 2 usos de un mismo sprite, haya al menos una línea en blanco.
  - Otra cosa es reutilizar un sprite en las mismas líneas de un frame. Los sprites pueden gestionarse de manera automática, cargando sus datos mediante el DMA, o de manera manual (cargando a mano los registros de control, datos, etc.). En este último caso es posible emplear el Copper para cargar dichos registros y reutilizar un mismo sprite varias veces en la misma línea, siempre dentro unos límites impuestos por el tiempo de DMA disponible para el Copper en cada línea del barrido. Esta técnica se empleó en juegos como Jim Power, Apidya o Risky Woods.

  En mi opinión, el sistema de sprites del Amiga es potente y versátil y quizás el mayor "pero" que se le pueda poner es lo limitado que resulta tener solo 8 sprites para según qué tipos de juegos, por ejemplo.

Saludos! :)

Laddh

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 233
    • Ver Perfil
Re:Sprites y Bobs del Amiga
« Respuesta #7 en: Febrero 19, 2016, 15:18:56 »
Aceleración gráfica? No se bien a que te refieres, los bobs dependen enteramente de la pantalla gráfica que hallas dispuesto, resolución, número de colores, controlados por el blitter a 28Mhz. No creo que sea lo mismo que en Atari porque este no disponía de chips dedicados como el Amiga, lo haría tirando del procesador, pero vaya que yo de Atari no se casi nada.
En cuanto a los sprites, juzgarlos por el ancho es relativo, puedes concatenarlos por parejas, 0 y 1, 2 y 3...,
y ahí ya tienes sprites de 32 y 8 colores por pareja, además de lo que te he comentado de ilimitados pseudosprites en columna.

nandius_c

  • Commodorero
  • **
  • Mensajes: 31
  • SYS 0
    • Ver Perfil
    • El rincón de Fer (Commodore Spain)
Re:Sprites y Bobs del Amiga
« Respuesta #8 en: Febrero 19, 2016, 15:54:15 »
En cuanto a los BOBs, efectivamente, la diferencia fundamental con el Atari ST (y es una GRAN diferencia) es que en Amiga se gestionan con el Blitter (de ahí el nombre de BOB = Blitter Object). De esta manera la CPU se libera de la tarea de mover los datos gráficos y todo lo que tiene que hacer es cargar los registros necesarios para hacer cada blit. Creo que el Atari STe ya disponía de Blitter pero no estoy seguro y tampoco tengo idea de las características de dicho blitter.

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Sprites y Bobs del Amiga
« Respuesta #9 en: Febrero 19, 2016, 19:34:03 »
Super interesante, gracias por las respuestas.

Me queda claro lo de los BOBs, cuando me refería a aceleración gráfica era a eso, que mover esos bloques no lo hace el procesador sino un coprocesador.

Me imagino que casi todos los juegos se harían con BOBs no?, porque con sprites es un comedero de cabeza y al final vas con limitaciones, me imagino uno de naves tipo R-Type, apenas si te alcanza para hacer los disparos usando sprites y eso sin contar todos los enemigos sueltos.

Sé que usando las interrupciones del barrido se puede hacer magia, pero más de 8 en ancho no...

Hace eones leí que para el Risky Woods habían usado sprites para el fondo en segundo plano y todo lo demás eran gráficos, aunque no sé si tiene sentido o lo entendí mal.
« última modificación: Febrero 19, 2016, 19:36:05 por josepzin »
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13630
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Sprites y Bobs del Amiga
« Respuesta #10 en: Febrero 19, 2016, 19:35:35 »
      - Los sprites que funcionan emparejados permiten mostrar 16 colores, del 16-31, siendo el 16 el color transparente. Evidentemente, al emparejar 2 sprites estos representarán un único elemento gráfico en pantalla.
¿Qué es eso de emparejar?


Cita de: nandius_c
  - Otra cosa es reutilizar un sprite en las mismas líneas de un frame. Los sprites pueden gestionarse de manera automática, cargando sus datos mediante el DMA, o de manera manual (cargando a mano los registros de control, datos, etc.). En este último caso es posible emplear el Copper para cargar dichos registros y reutilizar un mismo sprite varias veces en la misma línea, siempre dentro unos límites impuestos por el tiempo de DMA disponible para el Copper en cada línea del barrido. Esta técnica se empleó en juegos como Jim Power, Apidya o Risky Woods.
Esto también se me escapa :S
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

pastbytes

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 556
  • SYS 0
    • Ver Perfil
Re:Sprites y Bobs del Amiga
« Respuesta #11 en: Febrero 19, 2016, 20:22:49 »
Supongo que es algo similar a cuando se ponen los sprites de C64 en modo multicolor, que en modo normal cada pixel del sprite tiene 1 bit de color (transparente o color del sprite), y en modo multicolor tiene 2 bits, logrando 4 colores (3 mas transparente). En el VIC esto se logra reduciendo la resolucion horizontal del sprite, usando 2 pixels por pixel multicolor, para representar los 4 colores de ese pixel. Si se hiciera al estilo Amiga, el VIC en lugar de reducir la resolucion horizontal, tendria que usar 2 sprites (emparejarlos) para lograr un sprite multicolor sin perder resolucion.
El hard de Amiga permite hacer eso, logrando entonces que cada pixel del sprite en lugar de tener 2 bits de color (4 colores) tenga 4 bits (16 colores).
« última modificación: Febrero 19, 2016, 20:25:10 por pastbytes »

nandius_c

  • Commodorero
  • **
  • Mensajes: 31
  • SYS 0
    • Ver Perfil
    • El rincón de Fer (Commodore Spain)
Re:Sprites y Bobs del Amiga
« Respuesta #12 en: Febrero 19, 2016, 22:18:33 »
Me imagino que casi todos los juegos se harían con BOBs no?, porque con sprites es un comedero de cabeza y al final vas con limitaciones, me imagino uno de naves tipo R-Type, apenas si te alcanza para hacer los disparos usando sprites y eso sin contar todos los enemigos sueltos.
Hay de todo, la verdad. Juegazos como Turrican II o Apidya hacen un uso anecdótico de los sprites mientras que otros como Battle Squadron, Silkworm o SWIV los usan mucho más. Lo normal en caso de querer usarlos para balas en un shooter, por ejemplo, es multiplexarlos de manera que los vas reutilizando en un mismo frame. Para ello se construye una lista con todas las imágenes que van a compartir un mismo sprite hw, ordenándola por coordenada Y ascendente. La desventaja como ves es que requiere cierto trabajo extra por parte de la CPU para montar esta lista. Y cuanto mayor sea la lista, más carga para la CPU.

Citar
Sé que usando las interrupciones del barrido se puede hacer magia, pero más de 8 en ancho no...
La manera de mostrar más de 8 en línea es cargando los sprites de forma manual (prescindiendo del DMA).

Citar
Hace eones leí que para el Risky Woods habían usado sprites para el fondo en segundo plano y todo lo demás eran gráficos, aunque no sé si tiene sentido o lo entendí mal.
Entendiste perfectamente! ;) Si no recuerdo mal, se emplean los 8 sprites agrupados de 2 en 2 (para que sean de 16 colores). Esos 4 sprites que resultan se repiten por todo el fondo dando lugar a franjas verticales de 64 píxeles de ancho (16 de cada sprite x 4 parejas de estos).

nandius_c

  • Commodorero
  • **
  • Mensajes: 31
  • SYS 0
    • Ver Perfil
    • El rincón de Fer (Commodore Spain)
Re:Sprites y Bobs del Amiga
« Respuesta #13 en: Febrero 19, 2016, 22:31:22 »
¿Qué es eso de emparejar?
Los sprites se pueden emplear aislados, 4 colores o 2 bitplanes, o se pueden emparejar de la forma que comenté en un post anterior, para que sean de 16 colores o 4 bitplanes. El emparejamiento siempre es: 0 y 1, 2 y 3, 4 y 5, 6 y 7. Para emparejar 2 sprites se pone a 1 un bit en la cabecera de control del sprite impar de la pareja que deseamos juntar.

Citar
Esto también se me escapa :S
Esto es más complicado de explicar, jeje, haría falta todo un tutorial dedicado a ello para introducir todos los conceptos necesarios. Durante 1 línea del raster el hardware de sprites dispone de 8 slots de tiempo para poder cargar, como máximo, los datos necesarios para poder mostrar los 16 píxeles de cada sprite en esa línea. Así funciona la gestión automática por DMA. Sin embargo, podemos desactivar el DMA de los sprites y cargar nosotros los registros de cada sprite hardware a mano, con el Copper. De esta forma, y dentro de las limitaciones del Copper, podemos emplear más de 8 sprites en la misma línea.

nandius_c

  • Commodorero
  • **
  • Mensajes: 31
  • SYS 0
    • Ver Perfil
    • El rincón de Fer (Commodore Spain)
Re:Sprites y Bobs del Amiga
« Respuesta #14 en: Febrero 19, 2016, 22:32:21 »
Supongo que es algo similar a cuando se ponen los sprites de C64 en modo multicolor, que en modo normal cada pixel del sprite tiene 1 bit de color (transparente o color del sprite), y en modo multicolor tiene 2 bits, logrando 4 colores (3 mas transparente). En el VIC esto se logra reduciendo la resolucion horizontal del sprite, usando 2 pixels por pixel multicolor, para representar los 4 colores de ese pixel. Si se hiciera al estilo Amiga, el VIC en lugar de reducir la resolucion horizontal, tendria que usar 2 sprites (emparejarlos) para lograr un sprite multicolor sin perder resolucion.
El hard de Amiga permite hacer eso, logrando entonces que cada pixel del sprite en lugar de tener 2 bits de color (4 colores) tenga 4 bits (16 colores).

Tal cual! ;)