› Foros › Retro y descatalogado › Consolas clásicas
Misscelan escribió:Esto es una extracción de la caverna que aparece en el menú. Hay otras habitaciones que no están conectadas físicamente. Unos 9k polys tiene el export.
EMaDeLoC escribió:¿Pero sí estaban seguros de que podían optimizar el código, porqué no lo optimizaban desde el principio?
A mí me suena más a marketing. En plan "mira el juego que hemos hecho en PS1 y solo hemos explotado 3/4 de su potencial!! eh! eh! mira aquí, a la PS1!! no, no mires la N64!! Aquí, la PS1!"
O´Neill escribió:@Conker64 podéis hacer un hilo con ese tipo de información (cantidad de polígonos que sacaban estás consolas ps1,Saturn,n64, dreamcast,etc)?
Me parece interesante ver lo que realmente sacaban estás máquinas y lo que nos vendían las compañías, aún recuerdo la publi de ps2 y sus 75 millones de polígonos xD
Sogun escribió:Otra prueba que hice fue comparar el rendimiento de los niveles vacíos de GoldenEye en ambos motores gráficos. Se movían básicamente igual, normalmente a 30 fps y bajando a 20 en los mismos sitios. Había zonas en las que en GE bajaba a 20 pero PD se mantenía a 30, y otras zonas donde pasaba al revés. Especialmente curioso el caso del final del nivel de Bunker, la zona exterior donde acaba el nivel. En GE se mueve a 60 fps si no miras a la puerta del bunker, pero en PD en todo momento funciona a 30 fps. Es como si GE sólo tuviera en memoria los trozos de nivel que se ven directamente (y está cargando y descargando parte del escenario constantemente) mientras que PD además gestiona trozos del escenario cercanos aprovechando que usa más RAM (se ve que para ayudar en la descompresión de datos).
Dentro de ps1 el motor que más me impresionó ha sido el de Spyro que mueve unos 2000 polys (algo más de 3000 triángulos), algunos son sin textura pero a una resolución horizontal de 512px
NTSC 440x330 "progresivo" con antialising
42 Video Display Modes
The VI is responsible for displaying the RDP-rendered images in different video modes. Currently, VI supports 42 video display modes -- 14 for NTSC, 14 for PAL, and 14 for MPAL. Each mode contains different settings to handle attributes such as interlaced and non- interlaced, 16-bit and 32-bit color pixel, and low and high resolution. Furthermore, a mode can be configured to rescale the image to sacrifice resolution for rendering speed.
These supported modes can be represented by 5 switches:
high/low resolution
16-/32-bit color pixel
anti-aliased/point-sampled
filtered/not filtered
NTSC/PAL/MPAL format
In low resolution (320 pixels by 240 lines), you have a choice between non-interlaced and interlaced mode. Non-interlaced mode repeats the same frame each field. Interlaced mode interpolates between adjacent lines, weighting 75% of the line above plus 25% of the line below in the first field, and then weighting 25% of the line above plus 75% of the line below in the second field. Note that there is no flicker because there are no high spatial frequencies.
In high resolution (640 pixels by 480 lines), you have a choice between normal interlace and deflickered interlace. Normal interlace uses just the data rendered in one field to display that field. This mode can use one high resolution frame buffer without additional double buffering because one field can be displayed while the next is being rendered without stepping on each other. However, any single pixel with high detail will flicker because it is only displayed in one field. Deflickered interlace averages adjacent lines to filter out the high frequency vertical detail, but at the cost of requiring double buffering of the entire high resolution frame because both rendered fields are used to display each field.
"The N64 has two possible output formats: 240p and 480i," Bartmann explains. "The most common rumour is that 240p is 320x240 pixels and 480i is 640x480, but that’s not true for 240p. If you take a look at Perfect Dark (NTSC version), in the menu you have the option to switch between high resolution mode and low resolution mode. However, the output is always 240p. So, what changes? Just the horizontal resolution, or not? The N64 has a constant pixel clock of about 12.5MHz in each possible resolution. So what’s going on here is 240p low resolution mode is 320x240, 240p high resolution mode is 640x240, and 480i is 640x480 – the horizontal resolution split in two frames, each frame with 640x240 – even and odd; that’s interlaced."
That's where Deblur comes into play. "What the N64 simply does in the 240p low res mode is that the console outputs 640x240, where in the horizontal direction every second pixel is a 'true' or 'useful' pixel and every other one just an interpolated version of the neighboured pixels," continues Bartmann. "This results into a blurry picture. However, if one blanks these interpolated pixels and simply holds the previous 'true' pixel, you can effectively "deblur" the image. The true challenge is to detect whether the 240p content is low res or high res.
Y la ampliación de memoria... pues bueno, la podias dejar en 8MB porque la podías dejar en 8MB, si no pudiera ampliarse si que sería una pega.
Conker64 escribió:In high resolution (640 pixels by 480 lines), you have a choice between normal interlace and deflickered interlace. Normal interlace uses just the data rendered in one field to display that field. This mode can use one high resolution frame buffer without additional double buffering because one field can be displayed while the next is being rendered without stepping on each other. However, any single pixel with high detail will flicker because it is only displayed in one field. Deflickered interlace averages adjacent lines to filter out the high frequency vertical detail, but at the cost of requiring double buffering of the entire high resolution frame because both rendered fields are used to display each field.
@radornkeldam 1 month ago
At 6:47 you say that some games RENDER in interlaced, so only half the lines (field) each time, but from what I understand, this just can't really be done, unless you can 100% guarantee you'll render the next frame by the time the video signal starts transmitting the next field. So games would need to render the full frame (640x480 or something else with scaling) and just drop half the frames to display the even or odd field the screen is synchronized to during the next slot.
If you only render the even or odd fields to save on render time and/or memory and your renderer misses the next screen refresh, you won't have the corresponding video information to fill those lines, and things will look really bad.
When I did have the console and a 64drive, I did some investigations and I don't recall finding a single hi-resolution interlaced game that rendered 1:1 with NTSC/PAL interlaced resolution. All of them rendered at some weird nonstandard resolution and then used the VI to scale the output so it filled the screen. For example, TUROK 2's famous fullscreen hi-rez mode with the expansion pak, renders to 4XX by 3XX and stretches that, like all games do, horizontally to 640, and vertically to 480i or 576i depending if it's NTSC or PAL.
On the topic of N64 video scaling, the usual third party and early first party PAL adaptation involved slower timings and/or black horizontal bars to compensate for the resolution difference between PAL and NTSC. Most first party titles and the third party ones that bothered with PAL fullscreen, went with stretching of the output, incurring in an extra layer of blur. Then there are a handful of British developed titles where the PAL versions do 1:1 rendering and displaying at 288p (Diddy Kong Racing, GoldenEye 007, Perfect Dark, and the 40 Winks prototype), and furthermore, there are oddball games, like Body Harvest which renders to a sub-240p framebuffer and stretches to fullscreen 240p for NTSC and 288p for PAL. Probably one of the blurriest games because of that. Or what about the Japanese release of the first Goemon game, the 3D roaming adventure, which renders to 240p, but scales it up to 480i for video output (USA release does the proper 1:1 rendering and display at 240p, and PAL just does the standard 240 to 288 stretch that most PAL fullscreen games do)
So anyway... RENDERING in interlaced... not unless you can guarantee 60 steady fps for NTSC or 50 for PAL. if you miss one single refresh without the corresponding framebuffer, you'll either have to repeat the last rendered frame that'd me 1 frame too old, and display it on the wrong lines, or use the last rendered frame for that field (even or odd) which would be 2 frames old and run the animation back, or, maybe, interpolate the lines of the last frame, which, now that I think of it, might be the best alternative, but wouldn't look too good anyway, and would be extra blurry, and I'm not sure if the VI would let itself be coerced into doing it.
@KazeN64 1 month ago
@radornkeldam Spooky Illuha has a REALLY cool tech for this! It's a bit complicated and too much to explain here right now, but it does solve this issue. But yo uare right that commercial games simply render the whole thing and only display half.
Sexy MotherFucker escribió:Según esos documentos... ¿Lo que haría el VI sería escalar y estabilizar un ratio a priori incompatible, haciéndolo compatible con los viejos CRT?
radorn escribió:Intenté encontrar a esa persona que menciona y esa técnica maravillosa, sin éxito. No tengo ni idea de qué forma se puede renderizar en entrelazado 1:1 en un sistema que ni de coña va a rendir a 60Hz 480i (campos de 640x240) o 50Hz 576i (campos de 640x288) sin perder ni un frame/field. Por que en el momento en que pierdas un paso se va a notar graficamente. No se cómo se "soluciona" eso. No lo veo ni lo he podido encontrar.
Full 480i TrueColor graphics at high framerates of up to 60 FPS without the expansion pak, extremely rare in N64 titles
@radornkeldam 55 minutes ago
What do you do when you miss a screen refresh? Reuse the last field-frame corresponding to the other group of lines causing spatial judder? Reuse the previous field-frame that matches the odd or even field that's currently on screen, avoiding special judder, but causing temporal judder? You interpolate the previous field-frame to fill the current field to simulate a progressive frame? Something else?
radorn escribió:@EMaDeLoC Madre mía... si que funcionan bien los buscadores. Kaze me dió bien el nombre, lo busqué tal cual, y no logré encontrar NADA. Que le diste al buscador para que te diera el resultado? xD
Sexy MotherFucker escribió:@radorn gusto en volver a leerte por estos lares
Tu sugerencia de coger nuestras consolas, atarlas en palos con alambre de espino, y después quedar en un descampado para darnos de hostias entre los foreros sigue inmortal en mi memoria
Sexy MotherFucker escribió:Respecto al tema, por más que os leo, lo que sigo interpretando es que el VI de la N64 es una "movida" que coge cualquier resolución entre 240 y 480, sea compatible o no con el monitor, sea real o estirada, y le pone un "parche" para que de el pego en pantalla.
EMaDeLoC escribió:El VI saca 640x480i o 320x240p.
Cuando es una resolución horizontal menor de 640, el VI puede meter una fusión leve entre un pixel horizontal y el siguiente, lo que da un efecto de desenfoque. Los cacharros que hacen deblur como el RGB de Tim alargan el primer pixel hasta el segundo, quitando esa fusión o desenfoque. Eso hace la imagen nítida.
Si no me equivoco esa fusión se puede desactivar, y creo que la información que ha aportado Conker64 lo respalda.
EMaDeLoC escribió:@Señor Ventura Que yo sepa todo lo que hace el VI es inmediato y sin gastar recursos.
Piensa que hacer una fusión o media entre dos pixeles es muy sencillo matematicamente: sumas el valor de cada color y lo divides entre dos. En binario es aún más sencillo: sumas el valor y luego haces shift hacia la derecha (shift es desplazar los bits a un lado, descartando el último).
El VI es bastante tocho dentro del RCP, no me extrañaría que tuviese un pequeño circuito que hiciera esta operación directamente, además de cualquier otra como reescalar.
Señor Ventura escribió:Entonces, se pueden obtener los postprocesos sin emborronamiento, a costa de:
-Resolución horizontal.
-Menos polígonos en pantalla, y menos texturización.
¿He entendido que la interpolación son solo pixels de cada scanline, y no scanlines entre si?.
radorn escribió:Señor Ventura escribió:Entonces, se pueden obtener los postprocesos sin emborronamiento, a costa de:
-Resolución horizontal.
-Menos polígonos en pantalla, y menos texturización.
¿He entendido que la interpolación son solo pixels de cada scanline, y no scanlines entre si?.
No acabo de entender lo que planteas ni lo que preguntas. perdona.
Señor Ventura escribió:si renderizas usando solo 100 scanlines, ¿que pasa con la imagen?, ¿se estira e interpola?, o quedan bandas negras y ya
radorn escribió:Yo nunca había oído eso de los 42 modos de video soportados por el VI. Yo entendía que era programable. Quizá esos 42 modos de video son las combinaciones documentadas, y que no está necesariamente limitado a ellas ni es que las tenga integradas dentro.
radorn escribió:Cuando tenía el hardware e investiqué estas cosas, nunca vi un solo juego que tuviese 640x480 (o 640x576 para PAL) "reales" o sea, que el framebuffer no era de ese tamaño si no menor y luego el VI lo estiraba.
Y al colación de esto mencionto también que si que creo que el VI puede estirar cualquier resolución de freimbúfer arbitraria a la pantalla, y no está limitada a "algunos modos fijos", y lo deduzco por mi esperiencia usando una funcionalidad que tiene el ActionReplay / GameShark v3.3.
radorn escribió:¿Sabrías decir si con el VI se puede hacer un mosaico en pantalla repitiendo el framebuffer? es una tontería que se me acaba de ocurrir, pero hasta podría tener utilidad para algún efecto
If AA_MODE = 11 (resampling disabled), TYPE = 10 (16-bit), X_SCALE is 0x200 or lower, and H_START is less than 128, the VI generates invalid output, consisting of the first 64 pixels from the framebuffer from the current line, then 64 pixels of garbage, and these two repeat for the rest of each scanline. A common case where this can happen is NTSC units (where H_START is usually 96) with a standard framebuffer of 320x240 (X_SCALE=0x200). For this very common situation, the simplest workaround is to activate resampling.
radorn escribió:¿Y la idea del marco? Se puede definir un relleno para las áreas de pantalla que no quedan cubiertas por el mapeado del framebuffer, digamos que un color sólido diferente al negro, o quizá algo mas elaborado como un marco? Imagino que lo segundo será que no porque añadiría demasiada complegidad al VI y a la configuración para hacerlo funcionar, y requiriendo doble acceso a memoria para el marco y el FB.
bit 23-0 ORIGIN[23:0]: RDRAM base address of the video output Frame Buffer. This can be changed as needed to implement double or triple buffering.
Extra Details:
ORIGIN must be a multiple of 8 (i.e. ORIGIN[2:0] must be 0). Otherwise the VI output may be noisy, shifted, or weirdly interleaved.
You can change ORIGIN mid-frame during horizontal blank. Notice however that VI internally keeps the running offset in the framebuffer since the frame started (accumulating VI_V_SCALE for each scanline) and that offset is *not* reset when ORIGIN changes. So the new framebuffer will be sampled starting from the same byte offset that the previous framebuffer would have sampled at.
Señor Ventura escribió:Es todavía mas compleja de lo que pensaba.
sgonzalez escribió:Es curioso y vídeo lo que habéis explicado que algún juego no ocupe pantalla completa, como por ejemplo el Beetle aventure, salvo por o bien desconocimiento de los desarrolladores o bien problemas de rendimiento.
@radornkeldam
What do you do when you miss a screen refresh? Reuse the last field-frame corresponding to the other group of lines causing spatial judder? Reuse the previous field-frame that matches the odd or even field that's currently on screen, avoiding special judder, but causing temporal judder? You interpolate the previous field-frame to fill the current field to simulate a progressive frame? Something else?
@Spooky Iluha
It uses the previous field frame that matches the oddness, I haven't seen any issues with it on CRT
@radornkeldam
Thanks for taking the time to answer
I guess it may not be too bad for such a small playfield and more or less 60fps. Did you try interpolating between lines to create a false opposite-oddness field? I don't know how the VI is programmed, so I don't know if it will easily acommodate this, or at all, but sounds like it might be the best solution. But if nobody has noticed any judder, I guess it's OK, at least for this particular game.
It might have been more noticeable in a game with more sweeping camera movements and ampler playfields.
-------
This just occurred to me:
Let's say you are trying to render the next field-frame for the odd lines, and you miss the vsync, so you drop that and display the previous odd-line buffer you had from before (I guess this means you keep double buffer odd and even separatelly too? four buffers overall? or maybe three: one of last odd, another for last even, and one for rendering). Now you've wasted the whole last refresh trying to render a field-frame that won't fit the next refresh because the screen will be asking for the even-line field-frame again. What if you also miss that vsync? I guess at some point you have to preemptively skip rendering for the next field-frame and go for the one after to try not to miss it again? Do you do that right away the first time you miss a vsync? Or something else entirely?
radorn escribió:@Sexy MotherFucker Estas informaciones era bueno ordenarlas y ponerlas en el wiki, este o algún otro, pero yo no se editar wikis y la verdad es que da pereza. No se tampoco si el wiki de EOL recibe mucho uso.
radorn escribió:@Señor Ventura Ni se cómo ni tengo ganas de meterme en algo así. Si tu sabes del tema, adelante y a ver qué sale, pero sospecho que el resultado dejará bastante que desear, con alucinaciones y conclusiones dudosas por todas partes, y habrá que revisarlo de arriba a abajo. Quizá me equivoque, pero en fin, esa es mi predicción.