Registrarse

3D en GBA

Estado
Cerrado para nuevas respuestas.

cosarara97

Dejad de cambiar de nick
Miembro de honor
Bueno, pues el otro día me pregunté: ¿Sería posible hacer un juego de pokémon para GBA en 3D? (Como D/P, con las limitaciones gráficas correspondientes). - Unos lo hacen en RPGMaker, otros hacemos cosas raras.
Obviamente la pregunta es a nivel teórico, ya que no tengo suficiente interés para ponerme a hacerlo.

La GBA no tiene ninguna unidad 3D de hardware, de modo que hay que hacer todo el rendering por software, como en los viejos tiempos. Hubieron algunos títulos comerciales que lo hicieron, en este blog hay una lista (quizá falta alguno): 3D graphics on the Game Boy Advance: How well could it be done? - GBA feature at Thunderbolt

El tema está en repintar toda la pantalla cada frame (por que por algo es un juego en 3D) en modo de bitmap (sin usar tiles), y conseguir que la cosa tire con un framerate decente.
Para esto hay que usar el modo 4 de la GBA y hacer page-flipping.

Además, los floats de GBA son lentos, de modo que hay que usar Fixed-point math y otros trucos para los cálculos.

Con todo esto, y unas cuantas mates (he tenido que aprender a hacer multiplicación de matrices y proyectar puntos en un plano 2d :O), he escrito una demo:
https://www.dropbox.com/s/vnjho1ihaanazp4/3D.gba?dl=0


Código fuente (necesita tonclib y devkitpro): https://www.dropbox.com/s/5cx25gqy8t37hh7/3d_on_gba.tar?dl=0
 
Última edición:

PkPower

Webmaster
Miembro del equipo
Webmaster
Interesante. La verdad yo recuerdo a ver jugado juegos 3d como dices renderizados.

Aun así creo q seria un trabajo demasiado laborioso. Mas si aun encima es un Hank de pokemon. No solo es eso, luego tocaria integrarlo en la rom.
 

eing

Miembro de honor
Miembro de honor
Como te dije por perfil la idea es interesante, e inclusive editando el código asm de los juegos de pokémon es posible hacer esto, pero me resultaria coñazo trabjar a nivel de bitmaps y cargar uno y otro.. Pero bue, es un gran avance e idea!
Espero ver pronto alguna secuencia ingame! -ya de por si es un avance lo del rectangulo..-
 

cosarara97

Dejad de cambiar de nick
Miembro de honor
Como te dije por perfil la idea es interesante, e inclusive editando el código asm de los juegos de pokémon es posible hacer esto, pero me resultaria coñazo trabjar a nivel de bitmaps y cargar uno y otro.. Pero bue, es un gran avance e idea!
No, no cargas bitmaps, sino que pones la GBA en uno de los modos bitmap (en lugar de en uno de los de tiles) y dibujas directamente en la VRAM.
Sustituir la función de renderizado de un juego original sería interesante, pero no me he mirado las rutinas de overworld así que no tengo ni idea de lo difícil que sería.

Espero ver pronto alguna secuencia ingame! -ya de por si es un avance lo del rectangulo..-
Es un cubo e_e

PD: El siguiente paso es rasterizar, es decir, pintar triangulitos.
 

Telius

Trabajo en secreto.
Si quieres hacer un juego en 3D, para eso lo haces en el Rom Hacking de DS. -_-
 

cosarara97

Dejad de cambiar de nick
Miembro de honor
(yay, doble post)

https://www.dropbox.com/s/hyonz9bjeyo33s6/3D_v2.gba?dl=0

Ahora la cosa sabe pintar triangulitos y cuadriláteros (que en su momento se dividen en triangulitos), y usa el algoritmo del pintor para que las caras de arriba salgan arriba y viceversa (en el eje Z, claro).
Aún así, se ordenan los quads y los triángulos por separado, cosa que significa que si usamos los 2 a la vez las cosas se van a sobreponer - esta demo solo usa quads.
Oh, y aún así, sin texturas, y usando código bastante optimizado, ya empieza a haber problemas de rendimiento al renderizar. Ese número de a la izquierda es el número de ciclos que se tarda en hacerlo - vblank pasa cada 234000 ciclos, así que vamos unas 3 veces más lentos de lo que deberíamos si queremos 60 fps.

Y he puesto el repo en github:
https://github.com/cosarara97/3d-gba
 

Dani_SR_17

¡Pokémon LionHeart!
Pufff, una propuesta increíble la verdad, es todo un reto la verdad.

Sería impresionante un hack en GBA en 3D, claro, que será muy laborioso....
Aveces pienso que tendría que haberme metido en Informática, pero como al final me metí en Matemáticas, poco puedo aportar...
 

cosarara97

Dejad de cambiar de nick
Miembro de honor
Pufff, una propuesta increíble la verdad, es todo un reto la verdad.

Sería impresionante un hack en GBA en 3D, claro, que será muy laborioso....
Aveces pienso que tendría que haberme metido en Informática, pero como al final me metí en Matemáticas, poco puedo aportar...
Bueno, pues la verdad es que nunca había usado tantas matemáticas en un programa como esta. Ya lo dije en el primer post, he tenido que aprender a hacer álgebra linear con multiplicación de matrices para poder rotar vectores xD.
 

Dani_SR_17

¡Pokémon LionHeart!
Bueno, pues la verdad es que nunca había usado tantas matemáticas en un programa como esta. Ya lo dije en el primer post, he tenido que aprender a hacer álgebra linear con multiplicación de matrices para poder rotar vectores xD.
Jajajaja, ya, pero lo digo, porque mis conocimientos de informática pues son algo nulos, yo como mucho se hacer un par de tonterías en Haskel o Scala, pero ya esta (Y bueno, algo de C,pero hace mucho que no lo uso).

Pero que lo de rotar los vectores no es para tanto eh, si vieras el examen que hice en Junio, me cago en to...
 

TrifindoRH

Héroe de WaH
Hey, que gran trabajo!

Tengo algunas preguntas sobre el sistema:
- Soporta la intersección de las caras?
- Soporta el cambio y posición de la cámara?
- Crees que soportará texturas de más de 16x16 sin la caída de fps?

Tengo más preguntas pero de momento quiero que me respondas a esto, me encanta el tema del 3D.
 

cosarara97

Dejad de cambiar de nick
Miembro de honor
Hey, que gran trabajo!

Tengo algunas preguntas sobre el sistema:
- Soporta la intersección de las caras?
- Soporta el cambio y posición de la cámara?
- Crees que soportará texturas de más de 16x16 sin la caída de fps?

Tengo más preguntas pero de momento quiero que me respondas a esto, me encanta el tema del 3D.
1 - ahora mismo no
2 - la abstracción hecha aún, pero mover la camara o mover el mundo es un poco lo mismo ;)
3 - No he empezado aún con las texturas, pero puedo asegurarte que al activarlas el framerate bajará significativamente. Si el hecho de que sean de 16x16 o más influye especialmente dependerá de como se diseñe e implemente el sistema.

Ahora mismo mi prioridad es aumentar el framerate un poco más mediante culling/hidden surface removal.
Hoy he escrito un caso especial para quads que hace que se renderizen más rápido y sin artefactos. Haría una actualización decente, pero estoy desde el mobil con una cobertura pésima :p
 
Estado
Cerrado para nuevas respuestas.
Arriba