Hilo de detalles y curiosidades de N64

@Señor Ventura
Depende de si el SO detecta esa cantidad de memoria extra, probé a hacer una función para saber la memoria disponible en un momento concreto y no me sirvió, porque la consola detecta la expansión y va cediendo dinámicamente más memoria, un jaleo [360º]

Así que algunas veces devolvía 3700kb libres, lo que da a entender que solo está accediendo a 4MB, o quizás sea la función la que solo accede a esos 4MB y no al resto, dado que el doble bufer ya consume 300KB de entrada, luego hay que añadirle el código fuente que se carga entero en la ram, variables y estructuras a parte, las texturas y el sonido ya son más controlables, el sonido de hecho se puede leer desde el cartucho y solo pasas a ram el buffer equivalente al canal y frecuencia, en plan de un ogg de 10mb, solo te pillará 100 o 200kb.

Los emuladores parecen diseñados para poder leer más de 8MB.

Lo de la cache es porque el RDP lee de ahí, si quieres pintar desde la RAM puedes hacerlo con la CPU.
--

De paso he recreado este escenario del Castlevania SOTN, ahora que el tema de los layers ya lo tengo más avanzando, en consola da 90fps, a fuerza bruta, pero aún me faltan 2 optimizaciones por añadir.
Imagen

Está compuesto de 6 layers, por lo que he visto solo en exteriores pone tantos y en interiores suele tirar más de 2 planos grandes tileados, lo he montado de la siguiente manera.

El plano principal, tiles de 16x16.
Imagen

Capa 1, 16x16, tiles pequeños para usar los huecos de arriba.
Imagen

Capa 2, 16x64, tiles alargados para aprovechar la cache, a la vez que se intenta aprovechar los huecos vacíos.
Imagen

Capa 3, 16x32, misma idea, pero menos alargados, por ser la capa más corta.
Imagen

Capa 4, 64x32, sin estrategia, cache al máximo.
Imagen

Capa 5, 64x32, tiles de fondo azul cambiados por fillcolor (4 pixels por ciclo, en lugar de 1)
Imagen

Si nos fijamos solo se ven estas capas a través de la ventana y ahí viene la primera optimización, comprobar desde dentro hacia afuera para recoger información sobre los tiles que quedan tapados por otros, en lugar de pintar todo a lo bruto, creo que eso ya daría margen para mucho más.
BMBx64 escribió:Si nos fijamos solo se ven estas capas a través de la ventana y ahí viene la primera optimización, comprobar desde dentro hacia afuera para recoger información sobre los tiles que quedan tapados por otros, en lugar de pintar todo a lo bruto, creo que eso ya daría margen para mucho más.


Esta es una de las cosas que en las 16 bits descartas hacer por falta de potencia, pero teniendo potencia de proceso de sobra en la n64, no es una mala idea, desde luego.

Así cargas en memoria solo los tiles que vayan a ser mostrados, y a cada frame se hace el cálculo pertinente.

Veo que vas avanzando bien, ánimo con eso [oki]
BMBx64 escribió:
Lo de la cache es porque el RDP lee de ahí, si quieres pintar desde la RAM puedes hacerlo con la CPU.
--

¿pero eso es viable en rendimiento?


Salud.
Dejo este video aqui que me ha parecido interesante para quien quiera jugar traducciones en n64
https://www.youtube.com/watch?v=i_HwiH5SM2g

Aunque quiza no venga con la tematica del tema
@Señor Ventura
Pues me ha dado por observar que hace la PSX en ese escenario y me he encontrado con esto..
Imagen

Muy parecido a lo que estoy haciendo sin optimización, obviamente hay clipping fuera de la pantalla (no queda así) y la distribución de los rectángulos es bastante distinta, para la hierba parecen tiles de 32x64 a lo bestia sin preocuparse de los huecos, yo he usado 16x16, quizás debería probar con esa configuración, los arboles van formados sueltos, la copa y el tronco, yo eso lo hago en 5 o 6 pasos y lo que es más importante, no veo que elimine de dentro hacia afuera que es lo que quiero hacer, pero igual puede que sea cosa del emulador y no lo que hace el juego.

@dirtymagic
Yo no lo haría pero la opción está ahí [oki]

@Flash-Original
Cualquier cosa que tenga que ver con la consola es bienvenida, el hilo suele estar muy parado [toctoc]

--

Ayer entré un rato al irc con los programadores de la scene N64, cosillas:
- Hay un emulador de GB y de SNES en desarrollo para N64, ambos programados por la misma persona y en ASM, usando el RSP y el RDP para acelerar.
- Motivo por el que additive blending no es posible en el RDP: el ADD para incrementar luz si que está disponible en el RDP, lo que pasa es que los componentes RGB se dan la vuelta al pasar de 255, supongamos que la suma de ADD de 2 luces amarillas es X, si ahora hubiera una tercera luz la mezcla quizás sobrepasaría el rango en lugar de llegar a una luz "máxima intensificada", solución? Mezcla controlada por software.
- El RDP se puede configurar para saltarse lineas de pintado en el buffer de pantalla, por ejemplo en un modo entrelazado, eso aumenta el ancho de banda.
- Libdragon tiene "bugs que se desconocen" y aunque los tests que lanzo funcionan en mi consola PAL, podrían no hacerlo en otras, incluso el medio en el que se carga la rom puede causar problemas en PI (interfaz del cartucho), la nueva librería que están preparando aún no es pública.
- El F3DEX2 acelera el cálculo de vértices (pone más polígonos que Fast3D, la primera revisión), ya lo puse en el hilo pero es bueno confirmarlo.
- El modo doble buffer lleva vsync, ese es el motivo del porqué los juegos bajan de 60 a 30, de 30 a 20 de golpe, etc, se puede mejorar usando triple buffer, pero no se aconseja desactivar el vsync por el tearing (cosa que hace PS2 en los God of War por ejemplo, curioso), hay juegos que podrían funcionar más suaves en N64 al usar Expansion pak, precisamente porque pasan de un modo doble buffer a triple buffer (requiere más memoria)
[boing] un emulador para snes y otro para Gb en desarrollo, son excelentes noticias se nota que tienen grandes proyectos es un gusto saber que hay personas poniendo talento y dedicación en la n64, seria genial poder disfrutar juegos de snes en la n64.

Es interesante ver como luce el escenario de castlevania SotN con todas sus capas en conjunto y la sensación de movimiento de las plantas.
Flash-Original escribió:Dejo este video aqui que me ha parecido interesante para quien quiera jugar traducciones en n64


no conocía ese artefacto pero creo que el everdrive 64 o el 64 drive son mejores opciones para jugar traducciones hize un breve análisis del everdrive https://www.youtube.com/watch?v=QUKjvvOVw2c&t=25s
BMBx64 escribió:@Señor Ventura
Pues me ha dado por observar que hace la PSX en ese escenario y me he encontrado con esto..
Imagen

Muy parecido a lo que estoy haciendo sin optimización, obviamente hay clipping fuera de la pantalla (no queda así) y la distribución de los rectángulos es bastante distinta, para la hierba parecen tiles de 32x64 a lo bestia sin preocuparse de los huecos, yo he usado 16x16, quizás debería probar con esa configuración, los arboles van formados sueltos, la copa y el tronco, yo eso lo hago en 5 o 6 pasos y lo que es más importante, no veo que elimine de dentro hacia afuera que es lo que quiero hacer, pero igual puede que sea cosa del emulador y no lo que hace el juego.

@dirtymagic
Yo no lo haría pero la opción está ahí [oki]

@Flash-Original
Cualquier cosa que tenga que ver con la consola es bienvenida, el hilo suele estar muy parado [toctoc]

--

Ayer entré un rato al irc con los programadores de la scene N64, cosillas:
- Hay un emulador de GB y de SNES en desarrollo para N64, ambos programados por la misma persona y en ASM, usando el RSP y el RDP para acelerar.
- Motivo por el que additive blending no es posible en el RDP: el ADD para incrementar luz si que está disponible en el RDP, lo que pasa es que los componentes RGB se dan la vuelta al pasar de 255, supongamos que la suma de ADD de 2 luces amarillas es X, si ahora hubiera una tercera luz la mezcla quizás sobrepasaría el rango en lugar de llegar a una luz "máxima intensificada", solución? Mezcla controlada por software.
- El RDP se puede configurar para saltarse lineas de pintado en el buffer de pantalla, por ejemplo en un modo entrelazado, eso aumenta el ancho de banda.
- Libdragon tiene "bugs que se desconocen" y aunque los tests que lanzo funcionan en mi consola PAL, podrían no hacerlo en otras, incluso el medio en el que se carga la rom puede causar problemas en PI (interfaz del cartucho), la nueva librería que están preparando aún no es pública.
- El F3DEX2 acelera el cálculo de vértices (pone más polígonos que Fast3D, la primera revisión), ya lo puse en el hilo pero es bueno confirmarlo.
- El modo doble buffer lleva vsync, ese es el motivo del porqué los juegos bajan de 60 a 30, de 30 a 20 de golpe, etc, se puede mejorar usando triple buffer, pero no se aconseja desactivar el vsync por el tearing (cosa que hace PS2 en los God of War por ejemplo, curioso), hay juegos que podrían funcionar más suaves en N64 al usar Expansion pak, precisamente porque pasan de un modo doble buffer a triple buffer (requiere más memoria)


Voy a tener que apuntarme todo esto, demasiada info
Por cierto para hacer todas cosas estudiaste algo?
Lo digo porque pasarias perfectamente de profesor o desarrollador


john D9 escribió:[boing] un emulador para snes y otro para Gb en desarrollo, son excelentes noticias se nota que tienen grandes proyectos es un gusto saber que hay personas poniendo talento y dedicación en la n64, seria genial poder disfrutar juegos de snes en la n64.

Es interesante ver como luce el escenario de castlevania SotN con todas sus capas en conjunto y la sensación de movimiento de las plantas.
Flash-Original escribió:Dejo este video aqui que me ha parecido interesante para quien quiera jugar traducciones en n64


no conocía ese artefacto pero creo que el everdrive 64 o el 64 drive son mejores opciones para jugar traducciones hize un breve análisis del everdrive https://www.youtube.com/watch?v=QUKjvvOVw2c&t=25s


Este se usaria para algo mas comercial o para cartuchos separados, pero para los juegos sigue siendo mejor el everdrive ya que no tiene compatiblidad del todo como se ve en el video
@BMBx64 probando el fullset de N64 he descubierto una curiosidad que igual te interesa analizar en el futuro. El San Francisco Rush es el único juego que he encontrado en cuyas opciones deja configurar la densidad de niebla que el jugador quiere. Te lo comento porque igual te sirve parar mirar el impacto de usar más o menos niebla, etc (el juego no me gustó todo sea dicho).
@Calculinho
Sí, aunque no me gusta como queda, ponerlo con niebla me recuerda a los primeros Rush, lo que si que recomendaría es la versión PAL, parece bastante más estable que la NTSC en cuanto caídas [360º]

@Flash-Original
Muchas de estas cosas hay que aprenderlas por tu cuenta [oki]

--

He montado la siguiente optimización en el render del scroll:
Imagen

Contra más pequeños son los tiles más hueco se puede ahorrar, pero más cpu toma hacer todos los cálculos, en PC pierdo unos 200fps con esto activado, mientras que en consola se ganan fps, interesante.. [idea]

Los resultados:
- 90fps, plano principal de 16x16 sin optimizaciones
- 116fps, 64x32 sin optimizaciones
- 160fps, 32x32 con recortes
- 179fps, 64x32 con recortes

Así que la clave parecen ser tiles de mayor tamaño, pero si son tan grandes el recorte es menos efectivo, para cubrir un tile de 16x16 a lo ancho se necesitan 2 de 16 o 1 uno de 32, si son de 64x32 ya se necesitaría un área de 128 y si los tiles cercanos no encajan acabaríamos llenando la pantalla, pero perdiendo cálculo.

Hierba y nubes de 64x32, el resto 32 de ancho, unos sobresalen más que otros, la consola es más rápida así que no si todo es de 32x32, una cosa por otra, pintar más pero recargar menos las texturas.
Imagen

Para saber lo que tiene que hacer el tile comprueba un mapa binario, ese mapa se genera con la herramienta que hice, averiguar que tiles tienen huecos transparentes en tiempo real sería una locura, el resultado es algo parecido a esto, 0 es tile sin transparencia, 1 debe pintar.
Imagen

Probaremos con la estrategia de recarga de texturas, pero no en este mapa que apenas repite si se usan tiles grandes.

Dejo descarga de prueba, con Z se desactiva el plano principal.
https://mega.nz/#!t4RSQCpT!gEQYQ_SJGDnqKV7h3TvAtZJybtj6mz_zEWrDE8DRDJQ
Sexy MotherFucker está baneado del subforo por "faltas de respeto"
Señor Ventura escribió:
BMBx64 escribió:Si nos fijamos solo se ven estas capas a través de la ventana y ahí viene la primera optimización, comprobar desde dentro hacia afuera para recoger información sobre los tiles que quedan tapados por otros, en lugar de pintar todo a lo bruto, creo que eso ya daría margen para mucho más.


Esta es una de las cosas que en las 16 bits descartas hacer por falta de potencia, pero teniendo potencia de proceso de sobra en la n64, no es una mala idea, desde luego.

Así cargas en memoria solo los tiles que vayan a ser mostrados, y a cada frame se hace el cálculo pertinente.

Veo que vas avanzando bien, ánimo con eso [oki]


Venía a contestarte lo que acaba de descubrir BMBx64; que la "Pley" trabaja prácticamente así la escena, con el único límite del pixel fill rate para dibujar, y la vram, la cual si no recuerdo mal admite un tipo de compresión muy primitiva.

@BMBx64 gran trabajo. Eres un referente grande en la scene [oki]
@Sexy MotherFucker Estoy leyendo que la N64 tiene un fill rate de 62.5 mpixels/s con el mip mapping y el resto de efectos desactivados. Mas del doble que la playstation.

Pero la saturn es la que verdaderamente es el mostruo aquí. Si esto está bien, y no hay nada que no cuente, sus números son para frotarse los ojos:
https://segaretro.org/Sega_Saturn/Hardware_comparison

@BMBx64 De lo mejor del foro, siempre leo atentamente todo lo que escribes [oki]



Editado: Joder, estoy leyendo de la misma página una comparativa entre las 16 bits, y que artículo mas engañoso, la madre que los parió... ya lo había leído hace tiempo, pero no me había percatado que son los mismos que comparan las saturn/psone/n64, y viendo las cosas que cuentan, como para fiarse...
https://segaretro.org/Blast_processing
Señor Ventura escribió:@Sexy MotherFucker Estoy leyendo que la N64 tiene un fill rate de 62.5 mpixels/s con el mip mapping y el resto de efectos desactivados. Mas del doble que la playstation.

Pero la saturn es la que verdaderamente es el mostruo aquí. Si esto está bien, y no hay nada que no cuente, sus números son para frotarse los ojos:
https://segaretro.org/Sega_Saturn/Hardware_comparison




Editado: Joder, estoy leyendo de la misma página una comparativa entre las 16 bits, y que artículo mas engañoso, la madre que los parió... ya lo había leído hace tiempo, pero no me había percatado que son los mismos que comparan las saturn/psone/n64, y viendo las cosas que cuentan, como para fiarse...
https://segaretro.org/Blast_processing


Yo habia leido en algun foro que saturn tenia filtros tipo n64 y que nunca lo usaron!
O sea que pudiendo evitar el pixelado 3d no pudieron implementarlo en ningun juego.
sera verdad?
https://youtu.be/NpCnnSkxIMg?t=8m17s

Lo encontre!
el piso no pixela.
Y eso no es magia.
es hardware.
diego777 escribió:
Señor Ventura escribió:@Sexy MotherFucker Estoy leyendo que la N64 tiene un fill rate de 62.5 mpixels/s con el mip mapping y el resto de efectos desactivados. Mas del doble que la playstation.

Pero la saturn es la que verdaderamente es el mostruo aquí. Si esto está bien, y no hay nada que no cuente, sus números son para frotarse los ojos:
https://segaretro.org/Sega_Saturn/Hardware_comparison




Editado: Joder, estoy leyendo de la misma página una comparativa entre las 16 bits, y que artículo mas engañoso, la madre que los parió... ya lo había leído hace tiempo, pero no me había percatado que son los mismos que comparan las saturn/psone/n64, y viendo las cosas que cuentan, como para fiarse...
https://segaretro.org/Blast_processing


Yo habia leido en algun foro que saturn tenia filtros tipo n64 y que nunca lo usaron!
O sea que pudiendo evitar el pixelado 3d no pudieron implementarlo en ningun juego.
sera verdad?
https://youtu.be/NpCnnSkxIMg?t=8m17s

Lo encontre!
el piso no pixela.
Y eso no es magia.
es hardware.

@Señor Ventura en realidad en Modo 2D la nintendo 64 tiene un Fillrate de 250 Mpx/seg en 16 bits y 125Mpix/seg en 32 bits.
Especificaciones de Nintendo 64

@diego777 La Sega Saturn no tiene filtrado bilinear en el VDP que texturiza los poligonos,el filtrado lo hace el otro VDP y sólo lo puede hacer en un plano al estilo Modo 7 de SNES,no en geometría poligonal,de ahí que se utilice en el suelo plano de varios juegos de lucha de Sega.

Salud.
Sexy MotherFucker está baneado del subforo por "faltas de respeto"
@Señor Ventura ¿pero y por qué me dices eso? Yo no estoy defendiendo a la PlayStation, simplemente hablaba del modo de trabajo en el sistema a tenor de vuestro comentario. Metal Slug X, que ya va bastante optimizado en la consola, tiene explosiones a puro pixel, y recorte brutal de animaciones; es evidente que cuanto más detalle hay en la escena más evidentes son sus limitaciones. Lo que pasa es que Symphony of The Night es un diseño inteligente en donde PETAN de animaciones al protagonista dejando a los enemigos normal, y aprovechan la potencia del sistema para bañarlo todo transparencias como si fuese una SNES dopada en modo aspersor, y rellenar de rectángulos visibles como si no hubiese un mañana. Por eso es un bellezón de juego.

Saturn claro que es un monstruo, y eso que está limitada por el soporte óptico. Su hermana melliza ARCADE (ST-V), que es exactamente igual pero con cartuchos rom, se mea en la Neo Geo, salvo en la capacidad máxima de las roms.

Saturn + expansiones de ram/rom + VDP 2 que es un ahorrarecursos hiperversátil con el que un día normal montas 4 backgrounds layers, y haces scaling/rotación a 60 fps en 2 de ellos a la vez desde el ángulo que quieras, y scrolling en el resto; es un bicho a considerar.

Y sí, Segaretro con pinzas, aunque como wikia (mirar x encimilla) sirve bien si sólo buscas specs y fechas. En cambio Sega-16 forum = fiabilidad y flames infinitos entre cuentapixels y algún exdeveloper. Te encantaría xDD

Aunque siendo justos la PS se la lleva en transparencias respecto a Saturn, y flexibilidad de resoluciones respecto a las dos yo diría: acepta desde modo SNES, MD, pasando por CPS, y ratios extraños de 364, y otros más clásicos como 512 en la horizontal.

Por lo demás la N64 es el verdadero misterio aquí. A ver si en un añito con nuestro ánimo y su currazo BMBx64 nos arroja luz y carnaza [beer]
Me gustaría saber porqué la Saturn es el monstruo que es para juegos 2D, por encima de PSX.
Sexy MotherFucker está baneado del subforo por "faltas de respeto"
@Expansion_Pack yo no lo considero así, creo que SIN expansiones de RAM ambas ofrecen resultados muy similares, pero con puntos fuertes y débiles diferenciados.

Con 4 MB de RAM extra o cartuchos de ROM ya hay poca discusión: Saturn.
Sexy MotherFucker escribió:@Expansion_Pack yo no lo considero así, creo que SIN expansiones de RAM ambas ofrecen resultados muy similares, pero con puntos fuertes y débiles diferenciados.

Con 4 MB de RAM extra o cartuchos de ROM ya hay poca discusión: Saturn.


Ok!

¿Y la N64 cuan capacitada está para 2D? Imagino que poco ya que vimos poquísimos juegos en 2D. ¿Sería posible un Metal Slug en ella de la calidad de Saturn?
Expansion_Pack escribió:
Sexy MotherFucker escribió:@Expansion_Pack yo no lo considero así, creo que SIN expansiones de RAM ambas ofrecen resultados muy similares, pero con puntos fuertes y débiles diferenciados.

Con 4 MB de RAM extra o cartuchos de ROM ya hay poca discusión: Saturn.


Ok!

¿Y la N64 cuan capacitada está para 2D? Imagino que poco ya que vimos poquísimos juegos en 2D. ¿Sería posible un Metal Slug en ella de la calidad de Saturn?



En teoría con un fillrate de 250Mpix con una profundidad de color de 16 bits, y texturas de 32*32*16 debería poner a 60 fps unos 4069 triángulos por frame que al tener que hacer cuadrados se quedarían en 2034 "sprites" por frame.

La Sega Saturn tiene un fillrate de 14.3 Mpix en VDP1 y 28.6 Mpix el VDP2, en teoría son 42.9 Mpix en conjunto lo que daría 698 "quads o sprites" en las mismas condiciones que la N64,pero como el VDP2 puede hacer esto:

El VDP2 es llamado “Background Processor”, su trabajo es el de generar la pantalla final combinando los diferentes planos/fondos con el búfer de imagen generado por el VDP1, tiene a su disposición unos 512KB de memoria divididos en cuatro bancos de 128KB cada uno de ellos a los que puede acceder para leer o escribir.

Puede leer el búfer frontal (mientras el VDP1 genera el búfer trasero) del VDP1 y manipularlo como si fuese un patrón/sprite con muy pocas instrucciones al vuelo y sin intervención de la CPU. Por ejemplo puede rotar a tiempo real todo el búfer de imagen sin que la CPU y el VDP1 tengan que calcular y rotar uno por uno los patrones/sprites.

Puede generar cuatro planos de scroll y dos planos rotatorios en una misma imagen: VDP2

Si se utilizan dos planos de rotación al mismo tiempo entonces los planos de scroll normales no se pueden realizar.
El VDP2 puede aplicar efectos de transparencia sobre los diferentes elementos, eso si, la transparencia es del tipo aditiva y no multiplicativa por lo que su precisión es menor. Este truco es utilizado por juegos como Burning Rangers y Grandia para aplicar transparencias.

El VDP2 puede operar a nivel de pixel, patron/sprite/quad, búfer de imagen entero a la hora de realizar una manipulación.
Pese a que el VDP2 esta conectado al VDP1 es posible renderizar la escena prescindiendo por completo del VDP1 ya que el SCU/DMA da acceso directo al VDP2 hacía la CPU y la RAM principal. Algunos juegos renderizan directamente sobre el VDP2 sin tocar el VDP1 para aprovechar la enorme ventaja que tiene el VDP2 es su mayor ancho de banda y por tanto el hecho de poder dibujar la escena a 28.6 Mpixeles/seg de tasa de relleno. Sea cual sea el caso en Saturn el hecho que el VDP2 sea el que este conectado a la salida de video hace que no sea posible prescindir por completo del VDP2 en la composición de la escena.Fuente de especificaciones de Sega Saturn.

Así que a lo mejor habría que que coger los datos que da la fuente de que el "VDP1 dibuja directamente sin tener que leer una textura de los 512KB, la parte de su memoria que es el búfer de imagen, entonces su tasa de dibujado es de 500K patrones/sprites/quads por segundo, cuando tiene que hacer una operación de lectura adicional para el mapeado de texturas la cosa baja a los 200K patrones/sprites/quads por segundo" lo que daría 8.333 y 3.333 Quads/sprite por frame a 60 fps respectivamente.Yo creo que ningún juego llega a esos niveles.

Salud.
Entiendo por 'fillrate' ratio de relleno, ¿no?

Me has dado mucha info técnica interesante aunque muchas cosas no las entiendo porque para mí es lenguaje demasiado técnico :)

Se ha hablado muy poco de las 2D de la 64, molaría que se especificara su potencial. ¿Es posible un Metal Slug en ella? Me refiero a tal cual se ve en una Saturn.
Expansion_Pack escribió:Entiendo por 'fillrate' ratio de relleno, ¿no?

Me has dado mucha info técnica interesante aunque muchas cosas no las entiendo porque para mí es lenguaje demasiado técnico :)

Se ha hablado muy poco de las 2D de la 64, molaría que se especificara su potencial. ¿Es posible un Metal Slug en ella? Me refiero a tal cual se ve en una Saturn.



Según la wikipedia las especificaciones de la Neo-Geo son:
Resolución de pantalla: 320x224 en modo NTSC y 320x256 en modo PAL
Paleta de colores: 65.5366​ ​
Máximos colores simultáneos en pantalla: 4.096
Máximos sprites simultáneos en pantalla: 380
Tamaño mínimo de los sprites: 1x2
Tamaño máximo de los sprites: 16x512 ​
3 planos de scroll simultáneos
Relación de aspecto: 4:36​ ​

Creo que la textura más grande que cabe en la cache de 4KB de la N64 sería 256x4x4 bits,yo creo que por fillrate si podría aunque tengo entendido que Neo-Geo tira mucho de animaciones directas de la rom,en vez de transformaciones(rotación,escalar,ect.),supongo que se podría adaptar cualquier juego de Neo-Geo a Nintendo64.

Salud.
Expansion_Pack escribió:Me gustaría saber porqué la Saturn es el monstruo que es para juegos 2D, por encima de PSX.


Porque Sega preparo el hardware de la Saturn para las 2D. Cuando vió que Sony daba más importancia al apartado 3D añadió apaños (añadir chips para manejo de 3D) que hicieron la consola más compleja de programar de sui generación.
A nivel de 2D es la mejor de su generación, a nivel 3D no. Los juegos de lucha o de shoot em up son mejores en Saturn y más con el cartucho de 1 Mb o 4 Mb) n general que en otras consolas de su generación, ya que a nivel de hardware 2D era la mejor.

https://www.youtube.com/watch?v=_IAqWJyUguI
https://www.youtube.com/watch?v=5jxCiPWUEzM
https://www.youtube.com/watch?v=kMWhT7G_k9g
@dirtymagic ¿Casi 12.000 sprites la saturn, y 4 planos de scroll?.

Joder, ¿es en serio?.
Señor Ventura escribió:@dirtymagic ¿Casi 12.000 sprites la saturn, y 4 planos de scroll?.

Joder, ¿es en serio?.

Perdón es o no y ,es decir 8.333 o 3.333 Quads/sprite el VDP1 y 4 planos de scroll el VDP2, en teoría podría dibujar tantos sprites el VDP1, pero yo creo que el fillrate lo limita a 698 Quads/sprite ,de ahí que se diga que se utilizaba más el VDP2 que le dobla en fillrate y sacaría 1396 Quads/sprite.
Salud
varios escribió:
Expansion_Pack escribió:Me gustaría saber porqué la Saturn es el monstruo que es para juegos 2D, por encima de PSX.


Porque Sega preparo el hardware de la Saturn para las 2D. Cuando vió que Sony daba más importancia al apartado 3D añadió apaños (añadir chips para manejo de 3D) que hicieron la consola más compleja de programar de sui generación.
A nivel de 2D es la mejor de su generación, a nivel 3D no. Los juegos de lucha o de shoot em up son mejores en Saturn y más con el cartucho de 1 Mb o 4 Mb) n general que en otras consolas de su generación, ya que a nivel de hardware 2D era la mejor.

https://www.youtube.com/watch?v=_IAqWJyUguI
https://www.youtube.com/watch?v=5jxCiPWUEzM
https://www.youtube.com/watch?v=kMWhT7G_k9g

pues tio el primer video la primera en la frente ,precisamente el raystorm de taito ,la versión psx le da una soberana paliza a la de saturn .
hay de todo eh,yo tambien considero a la saturn mejor en 2d pero despues hay matizes y uno muy grande para mi se llama castlevania sotn .
A mi lo único que me canta demasiado en la Saturn es el tema de las sombras y transparencias... incluso siendo la mejor consola "2D" adolece de ese fallo en juegos "de su terreno" (2D).
Sexy MotherFucker está baneado del subforo por "faltas de respeto"
@titorino @chachin2007, de hecho una conversión 1:1 de Symphony of The Night a Saturn es virtualmente imposible, no sólo por el tema de la resolución -que también-, sino por las transparencias. SotN hace un uso MASIVO y totalmente RANDOM de las transparencias de acuerdo a la equipación que lleve Alucard, a si el jugador está ejecutando ataques mágicos sólo o con armas, y dependiendo del tipo de enemigos que ronden por la pantalla; en un entorno tan caótico no hay forma humana de orquestar los VDP de la Saturn para que no se solapen entre sí en algún momento teniendo en cuenta el escaso margen de superposición y la menor calidad general de estos efectos en la consola de SEGA. No es como un entorno más controlado tipo Magic Knight Rayearth en donde el VDP 2 tiene precalculado como, cuando, y donde las va a calzar.

La "Crystal Cloack" (capa que genera transparencias multicolor por donde sea que te posiciones) no fue incluída en el port a Sarturn por un buen motivo, de hecho el caso más parecido que existe en un juego es el de la capa mágica semitransparente de la piva del Guardián Heroes, que ni de coña es un entorno tan problemático como el del Symphony, y aún así ya tienen que andar recortando el efecto según como se coloque por los diferentes planos.

A los que habéis jugado al Symphony original; imaginaos que tenemos puesta la crystal cloack por el Inframundo y nos aparecen dos de las brujas pivones que encienden y apagan sus pentagramas escudos de luz a plena transparencia, saltamos entre medias de las dos ejecutando un golpe con la Ice o Firebrand, y además llevamos equipado el familiar fantasma; la Saturn directamente implosionaría ahí. De hecho es sin la crystal cloack y esas escenas ya son un festival de tramas. En el único enemigo que usa transparencias en el juego son los Specter que yo recuerde.

Por eso yo a la Saturn a pelo no la veo "indiscutiblemente" superior a PlayStation en las 2D; simplemente considero que sus fortalezas están en unos campos concretos (manipulación de planos de fondo, + memoria de vídeo, diseño práctico para la programación en 2D), y los de la PS en otros (transparencias, flexibilidad de resoluciones, compresión de datos). Lo que sucede es que en las comparativas entre las dos siempre salen a pasear los juegos de lucha de CAPCOM y SNK más famosos, y ahí la Saturn siempre arrastra algún frame o detalle más en los fondos o luchadores. Pero es que hay otros géneros, y apartados artísticos, en los que las bondades de la Play son más adecuadas.

En cambio cuando entran en juego las expansiones de RAM/ROM, ya sí, la Saturn claramente se alza un nivel por encima. X-Men/Marvel VS Street Fighter fueron imposibles con modo tag en PlayStation, mientras que Saturn con su expansión de 4 MB de RAM gozó de una conversión espectacular. KOF 95 lo mismo; el de Saturn cuesta diferenciarlo del de una Neo Geo MVS/AES debido a que mezcla CD rom + cassette rOm. Mientras que el de PS tiene evidentes carencias, aunque en su defensa hay que decir que fue una conversión hecha de muy mala gana (jugablemente es hasta diferente).
varios escribió:
Expansion_Pack escribió:Me gustaría saber porqué la Saturn es el monstruo que es para juegos 2D, por encima de PSX.


Porque Sega preparo el hardware de la Saturn para las 2D. Cuando vió que Sony daba más importancia al apartado 3D añadió apaños (añadir chips para manejo de 3D) que hicieron la consola más compleja de programar de sui generación.
A nivel de 2D es la mejor de su generación, a nivel 3D no. Los juegos de lucha o de shoot em up son mejores en Saturn y más con el cartucho de 1 Mb o 4 Mb) n general que en otras consolas de su generación, ya que a nivel de hardware 2D era la mejor.

https://www.youtube.com/watch?v=_IAqWJyUguI
https://www.youtube.com/watch?v=5jxCiPWUEzM
https://www.youtube.com/watch?v=kMWhT7G_k9g


Ni de coña. No añadieron "chips para el manejo de 3D", de hecho NO TIENE chips especializados para el 3D, lo que tiene la Saturn es que es demasiado versátil, puede con 2D, con 3D y con lo que le eches, pero en 3D es ligeramente inferior a PS1 en varios aspectos y si quieres sacarle todo su jugo a la Saturn has de sudar como desarrollador.
La "doble" cpu (que no es una doble cpu como las actuales si no una conf maestro-esclavo) tiene el gran inconveniente de conectarse ambas con el mismo bus a la RAM por lo que se molestan entre ellas, la idea del doble VDP me parece cojonuda, pero a medidas que metes más y más chips añades latencia al conjunto y el rendimiento final baja.
La PS1 tiene su GTE para procesar cálculos 3D, bueno, toda la consola está pensada para "funcionar" en 3D (aunque el juego sea 2D).

Os recomiendo este enlace donde se analizan las 3 consolas, Saturn, PS1 y N64
dirtymagic escribió:
Señor Ventura escribió:@dirtymagic ¿Casi 12.000 sprites la saturn, y 4 planos de scroll?.

Joder, ¿es en serio?.

Perdón es o no y ,es decir 8.333 o 3.333 Quads/sprite el VDP1 y 4 planos de scroll el VDP2, en teoría podría dibujar tantos sprites el VDP1, pero yo creo que el fillrate lo limita a 698 Quads/sprite ,de ahí que se diga que se utilizaba más el VDP2 que le dobla en fillrate y sacaría 1396 Quads/sprite.
Salud


¿Entonces su límite son 1396 sprites, y no 8333, o 3333?.
Señor Ventura escribió:
dirtymagic escribió:
Señor Ventura escribió:@dirtymagic ¿Casi 12.000 sprites la saturn, y 4 planos de scroll?.

Joder, ¿es en serio?.

Perdón es o no y ,es decir 8.333 o 3.333 Quads/sprite el VDP1 y 4 planos de scroll el VDP2, en teoría podría dibujar tantos sprites el VDP1, pero yo creo que el fillrate lo limita a 698 Quads/sprite ,de ahí que se diga que se utilizaba más el VDP2 que le dobla en fillrate y sacaría 1396 Quads/sprite.
Salud


¿Entonces su límite son 1396 sprites, y no 8333, o 3333?.


Con los datos en la mano,yo creo que esta mas cerca de esa cifra de 1396 sprites que de las otras.

Salud.
Sexy MotherFucker está baneado del subforo por "faltas de respeto"
@Señor Ventura es difícil dar una cifra exacta si se están empleando ambos VDP, ya que depende de cómo se compenetren entre sí.

Lo que te tiene que quedar claro es que VDP2 = MONSTER. Es casi como el Super Fx de PPU 3 en la SNES, sólo que con esteroides, y con un pozo de memoria propio.
@Sexy MotherFucker 1300 sprites + 4 planos por hardware a 700x240 tiene que ser un festival 2D de cojones.

Entiendo entonces que los 2400 sprites de la nintendo 64 a 640x480 no cunde tanto como eso.
250 Mpixels/s es igualmente una barbaridad para cualquier cosa 2D que se te quiera ocurrir hacer.

@dirtymagic Vamos, que de la saturn no se puede dar nada por sentado tampoco.
De todas formas en un escenario real con 1300 sprites no me veo un for y que cada uno tenga su lógica, su física y sus colisiones, bastante le debe costar ya a esas cpus tener un bucle activo tan ancho con más instrucciones dentro.

Supongo que todo eso es para encadenar, sigue al sprite 1, lo formas con 20 sprites, los 19 restantes todo lo que hacen es sumar o restar la coordenada del primer sprite o para operaciones simples, en plan partículas pero que ni comprueban el mapa de colisiones, solo saltan hacía algún lado, que a fin de cuentas está bien si lo que queremos es petar de efectos la pantalla, puede que de lo que si se encargue el chip sea de actualizar las coordenadas con respecto a la posición del scroll, o tenga una tabla interna para flags, z y otro tipo de variables, eso aligeraría bastante a la cpu.

En el test de los copos que hice en N64 cada rectángulo hace sus operaciones y tiene sus coordenadas únicas, pero la consola está procesando solo eso y no interactúa con nada, ni sigue un scroll (y si el RSP procesara los rectángulos y se los diera al RDP sería todavía más rápido).

La tasa de relleno lo mismo, en N64 es memoria unificada, ahí corre el programa, el sonido y los gráficos, de un test a un escenario real cambia la cosa, de un buen programa a otro también, con todo el tiempo que llevo programando no sé ni cual sería el rendimiento real de la maquina si cayera en buenas manos con buenas librerías, como para fiarse de unos números.

Lo de Saturn está muy bien porque comienzas con 4 planos de scroll, en las otras 2 tienes que montarte tu propio scroll a base de rectángulos, en N64 también puedes poner 4 planos y más pero es trabajo tuyo empezar desde "X" rendimiento, la idea de esto es usar la flexibilidad del chip gráfico, puede con 2D y puede con 3D, incluso con ventajas, todo está en el mismo chip y puedes mezclar efectos gráficos o combinar con 3D.

Es como esta cosa nueva que he hecho, un renderizado por orden de textura:
Imagen

En principio este test daba 104fps con tiles de 16x16, tras hacer que las texturas se pinten en orden para no recargarlas innecesariamente sube a 169fps, otros tests de scroll que he hecho previamente también suben de rendimiento y si diseñara específicamente mapas de scroll para usar tiles grandes y que se repitan (como el Yoshis Story) el rendimiento podría ser muy elevado.

He usado la función qsort para organizar en tiempo real los tiles en pantalla, básicamente primero se genera el scroll de forma habitual, pero en lugar de pintarlo se llena una lista, esa lista se ordena por número de textura y luego entonces se pinta, en este caso es una lista de 280 posiciones (16x16 de 320x224 son 20x14 tiles).

Dejo la descarga del último test:
https://mega.nz/#!R9R2RAQC!vLy-XwgGz6lR2irvO7twmrgMxHaSw4zGinRSJCzG2y0

Por otro lado ya entiendo porqué libdragon no trae transparencias por hardware o otros efectos, para que la consola haga transparencias hay que ponerla en modo CYCLE1, libdragon solo trae los 2 primeros modos, el FILL y el COPY, ya iré poniendo novedades sobre esto.

En cuanto a planos con zoom en N64 la penalización no parece demasiado elevada, una vez tenga corregido x_scale podría empezar a montar planos que hagan zoom sin demasiado problema.

Metal Slug claro que es posible en N64, ese juego corre a ¿30fps? en N64 podría hacerlo a 60.
Sexy MotherFucker está baneado del subforo por "faltas de respeto"
Mmm...

@Señor Ventura tú que creo que estás más puesto que yo en Neo Geo; ¿Metal Slug a 60 o 30?

Y lo de siempre chicos: Puto móvil, que si no hacía un festival de VDP2 en forma de gifs.

Paciencia graphichbitches!
BMBx64 escribió:De todas formas en un escenario real con 1300 sprites no me veo un for y que cada uno tenga su lógica, su física y sus colisiones, bastante le debe costar ya a esas cpus tener un bucle activo tan ancho con más instrucciones dentro.


Ojo, 1300 sprites, no 1300 objetos ^^u

Lo bueno es que pueden tener el tamaño que quieras porque no hay un límite de tiles como en las 16 bits (aunque si de pìxels, pero con el fill rate que tienen la saturn y n64, está lejos de ser una preocupación).

BMBx64 escribió:En principio este test daba 104fps con tiles de 16x16, tras hacer que las texturas se pinten en orden para no recargarlas innecesariamente sube a 169fps, otros tests de scroll que he hecho previamente también suben de rendimiento y si diseñara específicamente mapas de scroll para usar tiles grandes y que se repitan (como el Yoshis Story) el rendimiento podría ser muy elevado.

He usado la función qsort para organizar en tiempo real los tiles en pantalla, básicamente primero se genera el scroll de forma habitual, pero en lugar de pintarlo se llena una lista, esa lista se ordena por número de textura y luego entonces se pinta, en este caso es una lista de 280 posiciones (16x16 de 320x224 son 20x14 tiles).


La gracia está en no repetir sprites, creo que a estas máquinas se les puede exigir, pero bueno, siendo que aún está verde la cosa, las cifras son buenas.

Y si lo que dices del 40% estimado es finalmente real, lo que nos queda por ver tiene que sorprender por fuerza.

BMBx64 escribió:Por otro lado ya entiendo porqué libdragon no trae transparencias por hardware o otros efectos, para que la consola haga transparencias hay que ponerla en modo CYCLE1, libdragon solo trae los 2 primeros modos, el FILL y el COPY, ya iré poniendo novedades sobre esto.


Lo mejor que tiene la n64, sin duda, es que lo que está, no es todo lo que hay, siendo una máquina tan programable a mas "bajo nivel" de lo que suele, o solía ser normal.

Obviamente no es lo mismo hacer un juego en 2D con un "driver" pensado para 3D, así que todavía está por ver cuánto se puede alcanzar con microcódigos orientados únicamente a esto, pero me da la sensación de que estas máquinas no sufrirían gran cosa con la mayoría de juegos indies 2D de hoy en día, salvo por la resolución.

El cuphead de xbox one que tanto revuelo ha causado, no te creas que no lo veo funcionando (a 640x480) en una n64. El cartucho es una gran ventaja para las animaciones.

BMBx64 escribió:En cuanto a planos con zoom en N64 la penalización no parece demasiado elevada, una vez tenga corregido x_scale podría empezar a montar planos que hagan zoom sin demasiado problema.


Confunde un poco porque tiene algunas animaciones a 1 tic, pero si da la impresión de funcionar a 30 fps.

El donkey kong country funciona a 60fps con animaciones a 2 tics, y si pones ambos vídeos grabados a 60 fps al 0.5 de velocidad, puedes apreciar una clara mejoría en la suavidad de el de snes.

Vamos, que puedes apostar a que funciona a 30fps... pero yo prefiero recortar de frames con tal de que la carga gráfica sea impresionante.

De hecho (y no me gusta hablar de estas cosas porque luego pueden quedarse en nada), he planificado algo a 20 fps en snes, además de saltarme algunos límites solo a base de diseño, y lo que puede ponerse en pantalla... yo de verdad que no se para que queríamos una neo geo...

Hale, ya está, ya lo he dicho xD
Imagen


Sexy MotherFucker escribió:@Señor Ventura tú que creo que estás más puesto que yo en Neo Geo; ¿Metal Slug a 60 o 30?


Me apuesto la firma mas humillante durante un mes a que funciona a 30 fps.

No tan humillante como tener que trabajar a 30 fps en neo geo xDD
@Señor Ventura
Lo que vengo a decir es que esos datos de poco me sirven, lo primero que me planteo es que puedo hacer con esos "1300" sprites, en N64 no sería puedes poner X rectángulos, sino simplemente "puedes ponerlos", ya la velocidad que consigas depende de ti y de otros factores, la que tenga mejor cpu va a mover mejor el código de los mismos.

Esa función que he hecho es muy necesaria, en los juegos 3D en un escenario no usan 300 texturas como yo hago en un mapa de tiles, igual tienen 50 o 60 texturas activas en plan todo el suelo entero con la misma por ejemplo, también hay un listado para pintar en orden.

Aunque no quieras repetir el plano principal si deberías repetir partes del fondo en otros planos, porque dejas más rendimiento para poner sprites, utilizas la cache que está para acelerar y los planos cíclicos suelen repetir. [oki]
BMBx64 escribió:@Señor Ventura
Lo que vengo a decir es que esos datos de poco me sirven, lo primero que me planteo es que puedo hacer con esos "1300" sprites, en N64 no sería puedes poner X rectángulos, sino simplemente "puedes ponerlos", ya la velocidad que consigas depende de ti y de otros factores, la que tenga mejor cpu va a mover mejor el código de los mismos.

Esa función que he hecho es muy necesaria, en los juegos 3D en un escenario no usan 300 texturas como yo hago en un mapa de tiles, igual tienen 50 o 60 texturas activas en plan todo el suelo entero con la misma por ejemplo, también hay un listado para pintar en orden.

Aunque no quieras repetir el plano principal si deberías repetir partes del fondo en otros planos, porque dejas más rendimiento para poner sprites, utilizas la cache que está para acelerar y los planos cíclicos suelen repetir. [oki]


Si, no solo es que repetir algunos tiles/sprites no va a mermar el impacto visual, sino que directamente no tienes por qué no hacerlo en todo el plano.

Un cielo azul perfecto puedes dibujarlo a base de solo un tile azul... o un plano de unas montañas puedes hacerlo sin repetir tiles, pero los huecos no los dibujas, y todo lo que esté encima tampoco.

Vamos, que no es necesario meter 4 planos con hasta el último tile siendo cargado sin repetir patrón. Ciertamente (la cuestión era que un juego muy ambicioso pueda hacerlo).


Sobre los "sprites", desactivar el buffer z te da mucho margen para que la caché de texturas permita tamaños muy grandes a 8 bits (que para un juego 2D ya está bien). Esto está muy bien porque en realidad puedes poner "sprites" de todos los tamaños que quieras, y los mas grandes van a dibujar los objetos mas grandes mucho mas rápido, pero, ¿aún a pesar de la perspectiva plana, la ausencia de buffer z afectaría en algo al "ensamblado" de dos polígonos demasiado grandes?.


Por cierto, sobre lo de los planos en nintendo 64 sin perder mucho rendimiento... ¿como sería eso?, ¿tiene alguna función para dibujar bitmaps a plena pantalla sin recurrir a polígonos o algo así?, ¿cuántos?.

editado: ¿Por qué unas texturas de 8 bits para sprites no serían suficientes para un metal slug, si realmente el propio metal slug no tiene tanta profundidad de color tile a tile? (en incluso de grupos de muchos tiles a grupos de muchos tiles).
@Señor Ventura
Un cielo de color solido puedes hacerlo con fill color, eso va como un tiro, pinta a 4 pixels por ciclo en modo 16bits y la diferencia entre pintar un fondo de 320x240 o no hacerlo es casi nula.

Cuando quieres pintar texturas tienes que irte al modo copy, este también va a 4 pixels por ciclo, sin embargo algo raro hay en la librería que no le deja ir a pleno rendimiento, en teoría tendría que ser tan rápido como fill color, pero sale a 10 o 15 veces más lento o probablemente más, por supuesto aquí no es 1 rectángulo, se le instruyen rectángulos de 64x32 o X hasta llenar 320x240 por ejemplo, también con recarga de textura previo paso, pero es más lento de lo esperable ahora mismo.

Luego cada modo tiene sus limitaciones, esto es un poco como SNES [idea]

FILL:
- Solo puede poner rectángulos

COPY:
- Puede poner rectángulos y triángulos, esto es, cuando haces un sprite no haces 2 triángulos, le instruyes al chip que haga un rectángulo con X0,X1,Y0,Y1 coordenadas y de hecho solo le das X/Y, la librería según el tamaño del sprite le da el resto, hace una llamada a set_tile, que es como te comunicas con el RDP.
- No tiene Z-Buffer y no le hace falta, el Z buffer tiene utilidad en triángulos, aquí te montas tu Z o display list.
- No tiene transparencias
- La gracia de los triángulos es que seguramente pueda aplicar rotaciones en modo copy, aquí si me harían falta 2 triángulos para formar un sprite.

1CYCLE:
- Todos los efectos de la consola disponibles, pero pinta 1 pixel por ciclo, 4 veces más lento.

2CYCLE:
- Aplica el doble de efectos sobre la misma superficie, 1 pixel cada 2 ciclos, tiene su lógica.

Y en otro orden de cosas el RDP solo tiene 4 velocidades posibles: 4 pixels por ciclo, 2 pixels por ciclo (modo 32bits, el doble de lento, por eso me voy al modo 16bits), 1 pixel por ciclo o 1 pixel cada 2 ciclos.

Que quieres pintar una zona con transparencia como agua en el plano delantero del scroll? Haz primero todo con COPY y solo al llegar a la superficie de agua pones el RDP en modo 1CYCLE para que haga la transparencia, no solo eso, la cantidad de efectos disponibles al coste de 1 pixel por ciclo es enorme, te lee el buffer de pantalla, te combina colores o te puede hacer mil cosas más, como degradados, antialiasing, etc, pero necesita tiempo extra para esos cálculos internos, por eso hay 4 velocidades, esto también se puede hacer por software.

Sabes porque no funciona bien X_scale en la libdragon? Pues porque pinta 4 pixels por ciclo y en lugar de estirar la imagen no altera esa información que lee, me queda un acordeón si la extiendo demasiado:
Imagen

Lo que intentaré primero es ponerla en modo 1CYCLE a ver si pintando a 1 pixel se arregla, pero lo suyo es tener zooms a 4 pixels por ciclo, de hecho escalar verticalmente si lo es a 4 pixels.

--
Una textura de 8bits puede servir para pintar un mapa del Metal Slug, si Neogeo usa tiras de 16x512 y cada tira es de 16 colores, 64x512 serían 64 colores posibles, incluso si por un casual decidieran usar 16x16, serían 256 colores en un bloque de 64x64.

En las texturas de 4 o 8bits no puedes usar los 4KB enteros de cache, tienen que ser 2KB, 64x64 como máximo con una textura de 8bits.

--
Ante todo esto primero lo que estoy haciendo es optimizar mi código, el engine 2D corre entero por mi cuenta, la consola pues eso, lee como una condenada código C y pinta rectángulos hasta ahora, todas estas mejoras de rendimiento no es un bueno la consola parece que alcanza más, sino código mejorado que haciendo lo mismo y accediendo a los mismos recursos consigue ir más rápido, imagina que mañana sale la libn64 que está haciendo el tío de CEN64, donde puedo usar bien todos los recursos como las texturas de 4/8bits, usar hilos, acceder al RSP y sin estos problemas de rendimiento, este código entonces va a volar [360º]

Para que veas la importancia del código, este es el algoritmo de descarte inicial que hice:
int tile_sort(int ox,int oy,int num)
{
   int ot, zx, zy;

   ox=(ox+scroll_posx)/scroll_sizex;
   oy=(oy+scroll_posy)/scroll_sizey;
      
   for(zx=0;zx<tile_partx[num];zx++)
   {   
      for(zy=0;zy<tile_party[num];zy++)
      {   
         ot=(ox+zx)+((oy+zy)*scroll_row);
         
         if (ot<scroll_max) // max
         {
            if (ot>-1)
            {   
               ot=bit_map0[ot];
               if (ot==1) { return 1; }
            }
         }   
         else
            break;      
      }
   }
   return 0;
}


Y así como lo deje para conseguir mejorar el rendimiento, el código hace lo mismo solo que aquí:
- Se utiliza desplazamiento de bits que es más rápido que las divisiones
- Se elimina una asignación innecesaria, la de ot.
- Se mueven las operaciones de los for, en el primero hace muchas más sumas y multiplicaciones, innecesarias
- Hay una condición fuera de un for, menos comprobaciones, lo hace donde debe
- Está mejor alineado en memoria, ayuda a la pequeña cache de la CPU, sobretodo al programar hay que tener en cuenta que la cache de la CPU es muy pequeña.

uint16_t tile_sort(int ox,int oy,int num)
{   
   ox=(ox+scroll_x)>>bit_x;
   oy=(oy+scroll_y)>>bit_y;
      
   for(int zy=0;zy<tile_party[num];zy++,oy++) // y   
   {
      int ot=ox+(oy*bit_row);
      
      if (ot>-1) // min
      {
         for(int zx=0;zx<tile_partx[num];zx++,ot++) // x      
         {   
            if (ot<bit_max) // max               
            {
               if (bit_map0[ot]==1) { return 1; }
            }   
         }
      }   
   }
   return 0;
}
Qué nivelazo, intento seguir vuestras aportaciones pero debo volver a la escuela [carcajad]
Pensaba que siempre dibuja en triángulos, y no sólo cuando quieres darles rotación.
¿Sabes cuando van a liberar una versión más moderna de la Libdragon?,¿tendrá mejoras,más allá de corregir bugs?por lo que cuentas la actual está muy limitada.

Salud.
Algunas novedades [360º]

Por la parte de curiosidades, me acaban de pasar un editor de niveles de Super Mario 64, a este juego ya le hacen de todo, que si le meten funcionalidades del Odyssey, descubren formas o monedas secretas o esto..
https://www.youtube.com/watch?v=XNZk4ggJkcc

--
En cuanto a desarrollo pude hablar con Krom 2 días, se portó genial y me enseñó a como crear comandos directamente en el RDP, así que todo lo que no venga en libdragon lo puedo hacer yo a mano siguiendo el pdf oficial de documentación de Nintendo, no el SDK libultra, sino comunicándome directamente sobre el chip, la libultra al igual que la libdragon ya viene con "modos" formados, pero el chip tiene un registro inmenso.

Ahora mismo ando saturado con tanta posibilidad, así que primero quiero hacer un debug con todos los registros para probarlos en tiempo de ejecución y ver como reacciona la consola.

Cosas nuevas:
- Ahora se puede deshabilitar completamente el Antialias incluso en modo 16bits
- Ahora genero las roms en formato Z64, el formato V64 que usaba anteriormente es para DoctorV64 que tiene el byte swap invertido.
- He creado una función 1Cycle que permite pintar a 1 ciclo, por lo que he corregido X_scale y por ende puedo hacer Zoom de todo tipo, escalar o disminuir X/Y a la vez, solo X o solo Y.
- He creado una función con filtrado de texturas.
- Modo tinte, permite coger una textura y pintarla en una escala RGB, por ejemplo Alucard se tinta a azul y luego se hace semitransparente en el rastro, con esta función es posible hacerlo.
- He corregido unos cuantos fallos en la libdragon

Lol siempre he querido ver un muñeco de estos en N64 [hallow] , este sprite tiene 3 texturas encadenadas haciendo escalado.
Imagen

Krom me ha pasado un build actual de CEN64 donde funcionan mis demos, voy a poder acelerar mucho el desarrollo al no tener que estar sacando la SD del PC para ponerla en consola, lo subiría para que la gente pueda usarlo porque es muy difícil de montar (y además corre roms comerciales), pero viene con pifdata que son archivos de Nintendo y hay que conseguirlos por separado, me pensaré como puedo hacer la descarga, eso sí, requiere CPU moderna o no arranca y bastante potente.
Imagen

En cuanto al modo tinte.. todo azul [idea]
Imagen

Se consigue mediante el comando prim color, cambiando los últimos 32bits, 0xFFFFFFFF por defecto sería RGBA 255,255,255,255, lo he cambiado en esa imagen a 0,0,255,255, el último valor es alpha, esta función también permite semitransparencias pero hay que configurar correctamente el combiner para que funcionen.
__rdp_ringbuffer_queue( 0x0000FFFF );


Para entender un poco la locura de los comandos, la consola tiene un puñado y cada uno es de un registro de 64bits, creo que se llegó a preguntar en el hilo si realmente la consola usaba 64bits para algo, la cosa es que no tenía ni idea de como se comunicaba la libdragon con el chip y resulta que los monta en 2 veces de 32bits.
Imagen

Set Other Modes permite:
- Activar filtrado de texturas
- Activar corrección de perspectiva
- Activar Z-Buffer
- Activar condiciones de comportamiento para el chip, en plan haz semitransparencia si tocas "tal superficie"

Y muchas otras cosas, lo bueno es que todo esto se hace por superficie, no es en plan activas filtrado o corrección de perspectiva para toda la escena, puedes activar o desactivar cuando quieras, puedes tener texturas filtradas y sin filtrar a la vez.
Imagen

En cuanto a la penalización por usar 1cycle, no es exactamente 4 veces más lento, o almenos lo será sobre el papel pero no en el rendimiento final, el plano de scroll de SOTN pasó de 180fps a 122fps con todos los tiles en 1cycle, cuando me dí cuenta había configurado mal el combiner y estaba mostrando transparencias en todos los tiles de todos los planos de scroll, cuando desactive las transparencias para mi sorpresa el rendimiento era el mismo, así que parece que hay muchos efectos que son muy baratos al activar este modo, el chip es muy rápido.

Configurando directamente el RDP ya se pueden hacer cosas 3D, que supongo que esto ya gustará más cuando se saquen ejemplos, pero sería conveniente que sea el RSP el que gestione esos cálculos.
(mensaje borrado)
Tenía pendiente comentar algunas cosillas, pero estoy que me caigo, así que de momento lo tendré que posponer un poco mas.

Eso si, quería añadir algo...

BMBx64 escribió:AEn cuanto a la penalización por usar 1cycle, no es exactamente 4 veces más lento


Para un juego 2D, ¿lo ideal no sería 4 pixels por ciclo, y codear directamente sobre el RDP para cualquier efecto que necesitases? (mas laborioso, pero con una librería de efectos por software acabaría compensado, y tendrías un montón mas de rendimiento para meter mas tralla en pantalla).

Tal vez estoy razonando mal, pero supuestamente sería emplear por software parte de ese 60% de potencia sin usar, por lo que el modo 4 pixels por ciclo no solo no penalizaría en nada, sino que saldrías ganando, ¿no?.

De lo de emplear algunos planos por hardware sin mucho impacto en la generación de polígonos/rectángulos(Fill), habrá que hablar en profundidad algún día, porque suena a que todavía nadie tiene muy claro su alcance, y no se si es bueno, o malo... ^^u
Es una gozada leerte @BMBx64, en serio.
Me encanta leer tus explicaciones y las demos que vas creando y también los avances que se están haciendo en cuanto a librerías y emuladores sobre esta gran máquina. Ya me gustaría a mí tener los conocimientos que demuestras...
¿Crees que pronto y gracias a todo esto empezaremos a ver más juegos o emuladores homebrew en esta consola?
¿Sería posible ver juegos 2D de gran calidad al fin?
¿Y juegos que igualen en calidad o incluso superen a los juegos comerciales de la consola, sacando el máximo partido al hardware?
Vale, me acuesto ya y te dejo tranquilo...
[beer]

@Señor Ventura
Bueno el problema es que todavía no sé qué es compatible con el modo COPY (4 pixels por ciclo) y qué no, cuando tenga el debugger probaré todas estas combinaciones, igual el prim color si es compatible con copy y con esto tendría tintado y semitransparencia a 4 pixels, aunque alguna cosa igual no funcionaría porque el combiner si necesita el modo 1cycle, creo que aún así va a ser más rápido poner el chip un momento a 1 para la transparencia que quieras hacer, por software tienes que leer el buffer de pantalla manualmente, el RDP ya hace eso por DMA a todo trapo.

El mapa del SOTN sería hacerlo todo con COPY, salvo el rastro de Alucard o los efectos de pantalla, bastante rápido y con poca perdida.

También tengo que investigar como desactivar y activar el RDP en cada scanline, para en los modos entrelazados ahorrar ancho de banda, creo que la libdragon no hace nada de eso.

Comenta el resto de cosillas [hallow]

@bluedark
Se agrade [oki]

Pues no sé, la scene tiene potencial, pero falta un detonante, un foro global donde se junten todos a programar y enseñar cosas, hay en desarrollo muchas cosas pero no salen del irc.

Por ejemplo el Krom es un genio, está haciendo un emulador de SNES y GB para N64 en ensamblador, pero también tiene la demo esa del Bad Apple (que está en todas las consolas) y así con mucha gente del canal, está marathon, que es el programador de CEN64 y también está haciendo la nueva libn64, una vez finalizado será un SDK muy potente, yo ya me he ofrecido a ayudar en los tests o a que usen código o cosas que estoy añadiendo a la libdragon.

Sí, incluso con la libdragon ya se puede hacer un Metal Slug (con las implementaciones que he ido añadiendo), en cuanto a superar a los juegos comerciales, depende del tiempo que se invierta, yo creo que con un buen SDK más gente se animaría a portar sus juegos, porque la consola tiene RAM unificada y eso simplifica mucho las cosas, 8MB es bastante además.

A mi una vez alcanzadas unas buenas 2D me encantaría pasar a las 3D.
BMBx64 escribió:A mi una vez alcanzadas unas buenas 2D me encantaría pasar a las 3D.


Varios cientos de miles de polígonos por segundo 2cycle [sonrisa]

Sería como tener los típicos 80.000 poligonos por segundo con todos los efectos, pero como si tuvieras varias veces mas caché para texturas a base de polígonos mas pequeños.

Sigue siendo un desperdicio no poder contar con una caché mas grande, pero dado que se trata de una región de memoria dentro de los 4MB, como alguien encuentre el modo de expandirlo, va a ser un acontecimiento seguro. Es la clave de todo (que para todo lo demás está la expansión a 8 megas... o quien sabe, tal vez ahí se encuentre la puerta).

Nunca se sabe... yo sigo empeñado en encontrar la forma de aumentar el ratio de transferencia del DMA de la snes, y hace unos meses se me entre-abrió una pequeña ventana... antes de cerrarse de golpe, pero no desespero, porque no me voy de vacío a la hora de conocer el hardware (que es de lo que se trata).

...me quedé sin tiempo en el tren xD
me parecio escuchar daytona USA 64 ? XD
Imagen
alguien se anima ?
estas haciendo un trabajo impresionante BMBx64
Me encantan estos avances-descubrimientos.
Cuánto podría acercarse una n64 a la placa arcade del daytona usa?.

Harían falta lo menos 150.000 polígonos para poder simular una cierta cercanía variando el LOD. Luego habría que implementar una suerte de mip mapping para el reflejo de las nubes en los coches, que por suerte puede hacerse por hardware, pero parece que causa algún inconveniente adicional...

Luego el filtrado de texturas, antialiasing, z buffer... ya están ahí de serie.

Pero a ver que hacemos con los 4kb de caché.

Edit: y a 640x480, que esa es otra.
Ni 30fps, a menos que un día pueda salir el SDK definitivo tras un vueque total de la scene, exprimiendo el hard a tope.
Señor Ventura escribió: y a 640x480, que esa es otra.


¿No es posible poner menos resolución?
3272 respuestas