Problema con mi primer videojuego con gráficos en 32 bits

Started by Windgate, July 11, 2009, 05:46:19 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Windgate

Estoy muy muy contento con el funcionamiento de los gráficos en 32 bits, y por fin he comprendido esas cosas tan extrañas de los 24 y 32 bits con su canal alpha de por medio.

He localizado varias imágenes en 32 bits para realizar pruebas, pero desgraciadamente no son imágenes que puedan servir en absoluto para hacer un videojuego.

He intentado buscar en Google Imágenes con las palabras clave: 32 bit png fire alpha y cosas similares

Mi idea era empezar con algo sencillito como una animación de fuego en 32 bits, o un relámpago... Pero no encuentro nada. Lo que sí tengo son unos gráficos en 16 bits de relámpagos y fuego con el fondo negro. ¿Existe alguna forma de convertir ese negro en el canal alpha de forma que el relámpago quede como un gráfico de 32 bits o sería demasiado complicado?

¿O alguno de vosotros conoce algún sitio donde encontrar recursos gráficos de 32 bits que puedan servir para hacer un videojuego? ???

EDIT: Me autorespondo parcialmente, he conseguido con Gimp convertir el negro en canal alpha, en mi blog os explico fácilmente cómo puede hacerse: http://trinitformacion.blogspot.com/2009/07/generar-graficos-en-32-bits-partir-de.html

También os dejo las capturas del antes y el después:

Antes:

Después:
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DCelso

Quote from: Windgate on July 13, 2009, 11:09:38 AM
¿Existe alguna forma de convertir ese negro en el canal alpha de forma que el relámpago quede como un gráfico de 32 bits o sería demasiado complicado?
A ver, esa conversión la hace actualmente fpgedit.
Bastaría con crear un fpg32bits, meter la imagen png de 24 bits dentro, exportarla a tga o bmp y abrirla con gimp para retocar y/o guardar en formato png.
También puedes usar gimp para ello.
Abres la imagen png de 24 bits, te vas al menú canales - transparencias y das a añadir al canal alfa.
Ahora con la herramienta de selección por color seleccionas el negro y se seleccionan todos los píxeles negros de la imagen.
Ahora tocas la tecla "supr" o te vas a "editar - eliminar" y verás que se convierte en transparente.
Ahora puedes retocar o añadir efectos y guardar. El formato guardado será ya en 32 bits.
Trucos:
puedes jugar con la tolerancia de las herramientas. La tolerancia es un valor entre 0 y 100 que indica a gimp qué colores cercanos y parecidos interpretar además del seleccionado. Pruébalo y verás los efectos, por ejemplo para seleccionar con la varita mágica si pones tolerancias bajas verás que va seleccionando también colores cercanos parecidos al seleccionado.
Cuando usas la herramienta borrador con tolerancias pasa algo parecido verás que no se borra del todo lo seleccionado sino que "va difuminando los colores" En realidad lo que pasa es que pone el canal alfa de lo que vas borrando a colores cercanos a 0 por eso se medio ven :D.
Hay herramientas de difuminado como la gota o el dedo que sirven para borronear por lo que puedes también usar tolerancia para acercar colores entre píxeles.
Con estas herramientas, imaginación y muchas, muchas pruebas conseguirás resultados muy buenos
También puedes aplicar los distintos tipos de filtros que lleva gimp para ver resultados, el enfocar y desenfocar también dan buenos resultados en imágenes de 32 bits.

Nota: El mayor problema que te puedes encontrar luego a usar los gráficos de 32 bits en tus juegos, es el comentado ya en varias ocasiones. Puede que algunos los píxeles que aparentemente en tu imagen se ven transparentes causen colisiones, esto es debido al efecto que alguna vez hemos llamado "cristal". Un cristal no se ve pero colisiona, pasa lo mismo con los píxeles transparentes.
A ver si puedo explicarlo con pocas palabras. El transparente en un pixel se produce al llevar su componente alfa al valor 0, pero recordemos que sigue teniendo información en sus componentes RGB, así que tanto el verde con alpha 0 como el amarillo con alfa 0 no se verán en la imagen, pero son colores distintos, por decirlo de alguna forma, uno es el verde transparente total y otro es el amarillo transparente total aunque no se vean ninguno de los dos.
SplinterGU ha programado Bennu para que el único color transparente total que no de colisiones sea el negro transparente total, osea componentes RGB negras y alfa 0. que su representación interna en 32 bits es un 0 absoluto. R = 0, G = 0, B = 0, Alpha = 0.

Volviendo a gimp. Cuando borramos un píxel con gimp lo que hace es tocar su componente alfa hasta ponerla a 0, pero no toca su componente de color RGB, esto implica que si verdaderamente una sección o región de tu imagen quieres que no produzca colisión deberás pintarla de negro y una vez pintada de negro seleccionarla y borrarla. Consiguiendo así que su componente de color RGB sea negro y su canal alpha sea 0.
Un truco para ver qué colores hay detrás del canal alpha de una imagen y así revelar qué regiones transparentes van a producir colisiones es abrir la imagen en xnview y en el menú view desactivar la opción "use alfa channel" Así verás la imagen sin el canal alfa y verás las regiones transparentes en el color de su componente RGB.

Otros problemas menor que me he encontrado es que algunos programas visores de imágenes cuando ven que todos los valores alfa de todos píxeles es 0 interpretan que no puede ser una imagen totalmente transparente y desprecian ese valor mostrando la imagen con sus valores ocultos.
Quote from: Windgate on July 13, 2009, 11:09:38 AM
¿O alguno de vosotros conoce algún sitio donde encontrar recursos gráficos de 32 bits que puedan servir para hacer un videojuego?
No creo que haya muchas, e incluso que existan, esto no es muy normal a la hora de programar en 2d, está muy verde el tema.
Podrías crearlos a través de modelos 3d ( estos recursos si que puedes encontrarlos en la red, :D)  al que le aplices efecto de luces y/o texturas y exportando un snapshot de la vista a imagen. Puedes usar blender para ello.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

Windgate

Has llegado tarde DCelso, ya había encontrado al forma de añadir un canal alpha con Gimp. En cualquier caso tu explicación servirá de ayuda para otros noobs como yo xD

Excelente idea lo de usar Blender para generar sprites a partir de modelos 3D de terceros, de hecho recientemente un alumno uso un visor de modelos de World of Warcraft para generar un FPG con un pícaro no muerto andando, incluso el scroll del juego era una captura de Durotar.

Lástima que por aquél entonces no conocíamos los 32 bits y los bordes del pícaro no muerto se veían negros... Si recupero el trabajo me ocuparé de migrarlo a 32 bits.

Gracias por todo DCelso!
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Drumpi

Anda, muchas gracias, Windgate, por el truco de cambiar un color a escala de transparencia, porque llevaba tiempo buscándolo. Ahora sólo hay que encontrarlo tambien para el potochof, pero vamos, teniendo ambos programas, como que da lo mismo XD.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)