› Foros › Retro y descatalogado › Consolas clásicas
Sogun escribió:Quería saber cómo estaba hecho el fuego de Turok 2 ya que me parecía el mejor efecto que se puede encontrar sobre este elemento en este sistema.
Se trata de texturas de 64x64 8 bits IA (Intensity Alpha) -> 4 bits en escala de grises y 4 bits de canal alfa -> 16 tonos de color y 16 grados de transparencia. Por lo que he podido capturar y reorganizar, son un total de 20 cuadros de animación y por eso el movimiento es tan fluido. Si tenemos en cuenta que el juego intenta funcionar a 30 fps pero que la mayor parte del tiempo está funcionando por debajo (y el siguiente escalón ya son 20 fps) prácticamente es inmejorable. Son 80 kB de texturas dedicados al fuego (y hay otra animación para una llamarada más pequeña pero que usa el mismo tamaño de texturas y me parece que incluso más cuadros de animación).
Esto de tener 16 grados de transparencia y poder asignarlos por cada píxel independientemente del color es un curro tremendo pero realmente es la forma ideal de hacer el efecto de fuego. Un 10 para Acclaim por ser tan ambiciosos y lograr un resultado soberbio. A continuación dejo los gifs del canal de color y del canal alfa por separado y más lentos para que se puedan apreciar bien. En el canal alfa cuanto más cercano a blanco es el píxel es más opaco y cuando es más oscuro tiene mayor grado de transparencia.
Para quien quiera saber más sobre los distintos formatos de texturas con los que trabaja Nintendo 64 hay un artículo muy detallado, aunque en inglés:
https://n64squid.com/homebrew/n64-sdk/t ... e-formats/
Sogun escribió:Son 80 kB de texturas dedicados al fuego (y hay otra animación para una llamarada más pequeña pero que usa el mismo tamaño de texturas y me parece que incluso más cuadros de animación).
Sogun escribió:Puede que incluso demasiadas capas de semitransparencia afectara al rendimiento.
Sogun escribió:Esto de tener 16 grados de transparencia y poder asignarlos por cada píxel independientemente del color es un curro tremendo pero realmente es la forma ideal de hacer el efecto de fuego.
dirtymagic escribió:A mi con Gimp, las texturas de 64X32X8 en BMP, me pesan siempre un poco más de 2KB,cuándo no debería ser así,¿puede ser por el formato BMP que añade algo de información incrustada?.
EMaDeLoC escribió:El cartucho del Turok 2 ya era de 32MB, contaban con bastante espacio para texturas.
De hecho la ROM USA tiene 33KB libres, mientras que la ROM PAL tiene asombrosamente 320KB libres.
¿Mejora de compresión? ¿Optimización de espacio? ¿Material sobrante de la versión USA quitado en la PAL?
radorn escribió:Sogun escribió:Puede que incluso demasiadas capas de semitransparencia afectara al rendimiento.
En algún sitio vi explicado el bug, de qué formato de textura estaba puesto y cúal pusieron por error, y ambos son con alpha, así que no parece que fuera a haber gran diferencia por ahí. De hecho, el tipo de textura erróneo que pusieron era RGB+A, mientras que el formato correcto es I+A (I de Intensity, o sea, escala de gris). Si acaso, yo diría que RGB+A requeriría mas proceso. Lo que no acabo de entender es cómo interpretar datos IA como RGBA da ese resultado tan curioso, todo en negro, y sin haber colores por ningun lado.
EMaDeLoC escribió:¿Es posible encontrar el archivo tal cual de la textura, en el formato original de la consola? Nada de BMP, JPG ni otras mierdas...
Señor Ventura escribió:@Conker64 ¿Que juego es el de la plataforma de arriba, el que parece que se parapeta detrás de un contenedor a lo metal gear solid?
Conker64 escribió:EMaDeLoC escribió:¿Es posible encontrar el archivo tal cual de la textura, en el formato original de la consola? Nada de BMP, JPG ni otras mierdas...
La consola en sí no tiene un formato como tal para texturas, todo lo que hace es leer un array de 8 bits (primeros y segundos 4bit para texturas de 16 colores), de 16bits, etc en una posición de memoria que le indicas al llamar al comando, hacen falta otros parámetros para ese y varios comandos más que tienes que llamar, así que es tarea de si la librería tiene alguna macro y formato reconocido que ya hace todos esos pasos por ti o si los haces a mano o implementas en un motor.
También puedes crear al vuelo, de hecho la textura dentro de un cartucho podría ser perfectamente un bmp y que se convierta en tiempo de carga, un png, un tileset o spritesheet gigante con multiples texturas, etc, aunque yo al menos creaba las texturas con el array que necesita la consola.
Conker64 escribió:EMaDeLoC escribió:¿Es posible encontrar el archivo tal cual de la textura, en el formato original de la consola? Nada de BMP, JPG ni otras mierdas...
La consola en sí no tiene un formato como tal para texturas, todo lo que hace es leer un array de 8 bits (primeros y segundos 4bit para texturas de 16 colores), de 16bits, etc en una posición de memoria que le indicas al llamar al comando, hacen falta otros parámetros para ese y varios comandos más que tienes que llamar, así que es tarea de si la librería tiene alguna macro y formato reconocido que ya hace todos esos pasos por ti o si los haces a mano o implementas en un motor.
Conker64 escribió:Igual se sale un poco de lo que preguntabas, pero no está de más comentarlo..
Señor Ventura escribió:@Conker64 ¿Que juego es el de la plataforma de arriba, el que parece que se parapeta detrás de un contenedor a lo metal gear solid?
EMaDeLoC escribió:Bueno, pues entonces a ver si alguien puede pasar el array o decirme la posición de memoria de la ROM donde se encuentra, y ya me apañaría yo...
radorn escribió:La razon de que se vea negro en el juego, imagino, debe ser que luego aplicaron coloreado en el polígono donde va la textura, reduciendolo todo a negro.
ziu escribió:Hola!
Si al expansión pak les hubieran montado memorias rápidas con poco lag, se hubiera notado mucho el rendimiento o el cuello lo seguiría tendiendo?
ziu escribió:Hola!
Si al expansión pak les hubieran montado memorias rápidas con poco lag, se hubiera notado mucho el rendimiento o el cuello lo seguiría tendiendo?
EMaDeLoC escribió:ziu escribió:Hola!
Si al expansión pak les hubieran montado memorias rápidas con poco lag, se hubiera notado mucho el rendimiento o el cuello lo seguiría tendiendo?
Aparte de lo que te ha dicho el compi, las RDRAM montadas en la consola ya eran de las más rápidas del mercado. La única forma de mejorar el rendimiento era variando la arquitectura, como ampliando el bus de memoria a 18bits o asignando memorias y procesadores dedicados como tenía PS1, por ejemplo un procesador de audio con su propia memoria y un chip dedicado al framebuffer. La arquitectura de la N64 es de muy bajo coste de producción, y en ese termino el rendimiento es bastante bueno. Hablamos de una consola que salió casi al mismo tiempo que la 3Dfx Voodoo 1 que también venía con 4MB de RAM y dos procesadores.
Habría sido mucho más interesante que con el 64DD ya tan previsto como para implementar el expansion pak, directamente la hubieran sacado con 8MB de RAM. Así los desarrolladores habrían jugado desde el principio con más memoria disponible y veriamos cosas más interesantes. Puedo incluso que con un Mario 64 a 480i.
Pero son elucubraciones.
ziu escribió:@EMaDeLoC
Gracias x la explicación tan detallada, tiene su sentido si es para ahorrar costes a la larga a costa de perder algo de rendimiento...
Veo la Saturn por ejemplo y es todos lo contrario CPUs por un tubo, x eso dicen q fue la ruina es costes para sega..
Y si le quitaron un montón de chips entre el primer modelo de N64 y el último, ¿Se nota un empeoramiento auido-visual?
cegador escribió:Imágenes del prototipo del mando de N64:
https://twitter.com/shanebattye/status/ ... 7030618112
EMaDeLoC escribió:Edit: MVG dedica un vídeo a lo complicado que era desarrollar en N64:
Comete un fallo garrafal a partir del minuto 6. Dice que Turok 2 lee las texturas del cartucho en vez la TMEM o la RAM para superar el límite de los 4KB. Creo que los asiduos al hilo sabemos cuanto de incorrecto es eso.
Otro fallo es decir que el problema de la memoria era la latencia, cuando en realidad es el bus y la sobrecarga de trabajo (en un post anterior lo explico en detalle).
Son dos cosas que ya he comentado en los comentarios del vídeo.
Invoco a @Conker64, que es quien tiene más experiencia tocando código, a ver si encuentra más fallos en el vídeo con los que indignarnos.
Aunque me parece que aparte de lo mencionado esta todo bastante bien.
Enlace de descarga al parche -> https://www.mediafire.com/file/geu5yhjb ... delta/file
Arriba la textura normal, abajo con el efecto "activado".
El efecto consiste en tener varias capas de polígonos paralelas entre sí a muy poca distancia. La capa del fondo con la textura normal y el resto de capas con la textura con semitransparencias. De ese modo los téxels opacos o menos transparentes se irán apilado unos encima de otros dando la sensación de ser briznas de hierba o pelos. Es lo mismo que hicieron en Shadow of the Colossus.
En el ejemplo de arriba he modelado una retícula para poder encajar 16 texturas en escala de grises de 64x64 y 4 bits de profundidad de color para formar una imagen final de 256x256. Cuando se activa la transparencia en este tipo de texturas cada píxel adquiere un grado de transparencia según la intensidad del tono de color (blanco totalmente opaco y negro totalmente transparente) por lo que funcionan muy bien para la idea que tenía en mente.
Cada capa de la retícula tiene 1152 polígonos.
En la rom he sustituido los 20 niveles con varias configuraciones variando el número de capas con semitransparencias y el tamaño de los téxels. En todos los ejemplos la separación de las capas es de 1 unidad (1 cm).
La primera fila de niveles muestra únicamente la capa base, la segunda fila añade 2 capas de semitransparencia, la tercera fila añade 3 capas y la cuarta fila añade 4 capas.
Por columnas, en el primer nivel 1 texel = 1 unidad, en el segundo 1 téxel = 2 unidades, en el tercero 1 téxel = 3 unidades, en el cuarto 1 téxel = 4 unidades y en el útimo 2 téxels = 1 unidad.
Obviamente cuantas más capas y téxels más pequeños mejor va a lucir el efecto (la imagen corresponde al nivel de Egyptian) pero cuantas más capas añadamos peor va a ser el rendimiento y si los téxels son muy pequeños llega un punto en que ya no se ve la textura a su resolución original y pasa al primer nivel de mipmap perdiendo todo el detalle y nitidez que se estaba buscando.
A mí me parece que el rendimiento es muy bueno con 2 capas y aceptable con 3 capas a falta de añadir enemigos. Con 4 capas es muy bajo (quizás no llegue a 10 fps) pero hay que tener en cuenta de que el escenario está compuesto por 5760 polígonos. Sin embargo no estoy muy seguro de si tiene más importancia en la bajada del rendimiento la cantidad de polígonos a dibujar o tener que procesar tantas capas de transparencia prácticamente a pantalla completa (si te agachas y miras directamente al suelo sigue funcionando igual de mal).
En cuanto al tamaño de los téxels, en un experimento anterior determiné que con una relación 1:1 no se llega a apreciar en pantalla la textura a su resolución original y que la transición con el primer mipmap se produce justo en los bordes de la pantalla (hablando de GoldenEye en concreto):
1 texel = 1 unidad en texturas 32x32x8bits color
1 texel = 2 unidades en texturas 32x32x8bits color
1 texel = 1 unidad en texturas 64x64x4bits en escala de grises
1 texel = 2 unidades en texturas 64x64x4bits en escala de grises
Así que habría que hacerlos más grandes a no ser que queramos ver la textura original únicamente cuando miremos directamente al suelo. De ahí también la importancia de que la textura permita mipmaps o de lo contrario veríamos un baile de píxeles digno de PS1.
El mismo ejemplo de arriba pero con 3 capas de semitransparencia y téxels de dos unidades de tamaño (nivel Streets) queda tal que así:
Y se ve muchísimo peor en consola. Tan mal que ni se aprecia el efecto con tanta borrosidad. Y tanta borrosidad que hasta marea. Creo que dándole más separación entre capas puedo hacer que se vea mejor. Otra opción es hacerlo en objetos, cuya escala no va ligada a la del nivel.
Otras aplicaciones de este método servirían también para simular Normal mapping:
https://postimg.cc/1gBj2gpw
https://postimg.cc/8fmJmS8p
Flash-Original escribió:@Sogun Entonces a ver si lo entiendo.
Has puesto 3 capas
La 1 la imagen base (0 transparencia) la 2º un 50 y la tercera 75% supongo que la ultima es para la vista lejania cuand miras un arbusto o algo las puntas.
¿me equivoco?
gelon escribió:La verdad es que MVG no está muy fino últimamente.
radorn escribió:@EMaDeLoC Pues no tengo ni idea de si lo de modificar el comportamiento de la TMEM como caché transparente mediante microcódigo es posible o no. Puede que no, como dices tu, pero bueno. El razonamiento de que si fuera posible ya se habría hecho tampoco me parece algo grabado en piedra, dada la reticencia de Nintendo a permitir este tipo de acceso de bajo nivel.
radorn escribió:Respecto a lo del overclock aquel, lo que yo me pregunto es si overclockeó el bus de video o el bus de RDRAM.
En ambos casos, imagino haría falta código específico para la nuevas velocidades.
EMaDeLoC escribió:radorn escribió:Si aceleras el RCP probablemente te cargues la sincronizacion de video, provoques una gran inestabilidad, o directamente casque el software.
Pues ya colgué antes este video, no se si lo recuerdas:
Por lo que dice la descripción, le sube el reloj del RCP un 10%. Efectivamente el video analógico casca, pero aquí ya le habian metido un FPGA que interceptaba la señal digital del RCP, y ajustandolo se acaba obteniendo imagen de forma normal por HDMI. Bueno, lo de normal es un decir...
Si es viable como mod, no lo creo porque habrá juegos que tengan una sincronización CPU-RCP muy ajustada y apareceran errores de todo tipo.
Por cierto, el tío del vídeo sigue activo en la comunidad de mods y llego a estar haciendo cosas tan impresionantes como una placa de N64 ultrareducida para hacerla portatil.
Para flipar en colores...
Señor Ventura escribió:De todo lo que decís, lo que extraigo es que por culpa del bus el WDC no puede hacer uso de un z-buffer que podría ahorrar muchos polígonos que haber podido poner donde hicieran falta, y aumentar así la carga gráfica.
Una lástima.
Señor Ventura escribió:...peeero, la scene ha avanzado hasta donde muchos no alcanzamos a ver con nuestros profanos ojos... así que vamos a jugar un rato.
Si tuvierais que hacer un port del daytona usa, ¿de donde recortariais, y como sería vuestra visión de como debería ser el juego?, ¿que decisiones tomariais?.
Y lo mas importante, contando con conseguir la optimizacion ideal, y según vuestra visión, ¿que aspecto final tendría el juego?... ¿número de polígonos?, ¿calidad de las texturas?, ¿distancia de dibujado?.
¿Os atreveis con un boceto contextual para goce y disfrute de quienes os leen, u os leen en la sombra?