@SuperPadLand Pues imagino que habría que reducir considerablemente la complegidad arquitectónica del entorno, y bastantes ajustes a la baja de la simulación física y la lógica del entorno (control de peatones y vehículos, etc)... La verdad, no se qué responder.
Aunque no lo parezca estoy bastante desconectado de todo esto aunque aún veo alguna novedad de desarrolladores como Kaze Emanuar, con sus super optimizaciones e investigaciones del hardware, desarrollando su motor de alto rendimiento.
No controlo mucho el hardware de Dreamcast, y no se qué diferencias hay entre su SH-4 (?) a 200MHz, y el R4300i modificado de SGi/Nintendo a 93.75MHz, y qué diferencias concretas hay en el sistema de memoria. Entiendo que DC una memorias dedicadas tradicionales y no la estructura de memoria semi-unificada (no particionada, pero sin control de conflictos por hardware) de N64, aparte de tener mas y seguramente más rápida.
Respecto a almacenamiento, recordemos que el mapa de memoria de la N64 reserva un rango de direcciones de memoria de 256MB para el PI, la ranura de cartucho, de los cuales el 64drive V2 ofreció 240 accesibles como ROM y 16MB reservados en exceso para dar acceso a los registros internos del cartucho para controlar cosas como la tarjeta SD, el USB y, si, el módulo Wifi integrado. Yo no tuve este modelo, si no el V1, con 64MB de RAM para ROMs, sin wifi, y con ranura para tarjetas CompactFlash aparte de microSD. Si estos 256MB no son suficientes, los cartuchos de ROMs modernos permiten acceso directo a una tarjeta SD en modo lectura y escritura sin pasar por ROM. Un desarrollo nuevo pensado para aprovechar esto podría usar el espacio ROM como RAM secundaria (ya que funciona en modo RW, salvo que algún cartucho concreto lo limite, al menos el 64drive no lo hacía, que yo sepa.
Por otro lado está la RDRAM interna que oficialmente nos da hasta 8MB con un EP, pero quizá se pueda tener una N64 de hasta 16MB modificando una consola de las primeras, las de 2 chips de 2MB, reemplazandolos por 2 de 4MB sacados de EPs, y añadiendo un EP de terceros de los que llevaban también 2 chips de 2MB y reemplazarlos con 2 de 4MB. Y ya para abusar, creo que teóricamente el mapa de memoria aguanta hasta 32MB, pero para eso harían falta chips de 8MB que no se si existen, suponiendo que el RCP aceptase el trato, que una cosa es el mapa de memoria y otro la compatiblidad del controlador de memoria que hay dentro del RCP.
Así que tenemos 8-16 (o 32) de RAM, 256 de ROM-RAM en el PI (Parallel Interface), SD "ilimitada" en tercer plano a través del PI, y quiźa acceso por WiFi o USB a alguna cosa mas, si nos esforzamos mucho.
En ese sentido, no debería haber mucha limitación en cuanto a espacio. Hasta se podrían incluír las voces.
El problema es la rapidez de acceso a todas esas cosas. Por lo que recuerdo que se comentó aquí y en otros lugares, el PI, aunque suficiente para cargar casi instantáneamente un mapa típico de un juego de N64, no se si sería suficientemente rápido para cargar dinámicamente los trozos de los mapas de un GTA3. Sin duda habría que recortar bastante muchas cosas. No lo se. Aquí ya entran conocimientos mas prácticos a nivel de programación que yo no domino.
Una cosa que he ido aprendiendo a valorar es que aunque normalmente se piensa en la complejidad gráfica de un entorno tridimensional como lo mas pesado de mover, en muchas ocasiones la lógica del juego puede resultar mucho mas pesada, o por lo menos mas determinante del rendimiento de un juego. Los gráficos, a fin de cuentas, siempre vienen precocinados y solo hay que hacerles unas cuantas transformaciones y pasarselos al renderizador, con el texturado, iluminación y otros efectos ya predefinidos en ROM. Pero decidir y calcular las acciones de los elementos interactivos puede llegar a ser mucho mas pesado, un problema mas abierto y complejo, especialmente en un entorno abierto. lleno de variabilidad. Hay que usar muchos algoritmos de búsqueda, decidir si gira a la izquierda o derecha, etc, a cada frame o sub-frame.
En mi breve experiencia en la comunidad de mods de GoldenEye y Perfect Dark, vi situaciones donde el simple hecho de no tener bien hecha la red de navegación que permite a los enemigos viajar por el mapa, generaba tremendísimas ralentizaciones con framerates de 0.x fps, simplemente porque los enemigos estaban intentando averiguar por dónde ir para encontrar al jugador. Podías ver cómo un personaje viajaba de nodo a nodo de la red de navegación facilmente, pero luego, si había alguna conexión mal hecha, o inexistente, podías ver como al intentar volver a encontrar el camino, se paraba todo porque la CPU estaba intentando buscar una ruta. O podías ver al guarda/enemigo acometer una acción como dispararte, a rendimiento normal, y luego, al levantarse e intentar dar unos pasos, se paraba todo por debajo de un frame por segundo. Incluso en un nivel correctamente construido, el hecho de tener varios enemigos en pantalla actuando ralentizaba mas el sistema no tanto por la carga gráfica si no por la carga lógica de calcular las acciones de estos enemigos.
Sospecho que esta problemática se vería exacerbada en un entorno tan abierto como un GTA3.
En todo caso:
@EMaDeLoC , si hablamos de ejemplos existentes en N64 que sean comparables a GTA3, ¿qué mejor que su precursor, Body Harvest? Hecho por DMA Design, luego renombrados Rockstar. Misma gente, concepto similar: mundo abierto con combate vehicular y libre acceso a vehículos encontrados en el terreno. De hecho, aunque Body Harvest no salió hasta 1998, ya fue mostrado como beta en 1995, mientras que los dos primeros GTAs para PC y otras plataformas usaban técnicas 2D para produdir un efecto pseudo-3D, siendo publicado el primero en 1997.
BH es el abuelo de GTA3. Retrasado mil veces, aunque salió en el 98, realmente es un juego de primera generación.
AÑADO: Se me dió por buscar un poco y me salió esta retrospectiva sobre GTA y mencionan algo interesante:
IGN Presents: The History of Grand Theft AutoAfter completing small but admired Uniracers for the SNES, DMA accepted an invite to join Midway, LucasArts and Rare on Nintendo's content "Dream Team" for the upcoming Ultra 64 console. Jones had a new home. He went to work on an exclusive launch title, Body Harvest, DMA's first 3D effort, and it did things a little differently from those other Nintendo games. You played an armed and armored soldier in a free-roaming mission to save humanity from hungry alien carnivores, able to jump into any vehicle you found. Less fortunate humans, whether they fell to invaders, careless driving or over-aggressive marksmanship, died screaming in a haze of 64-bit blood.
It didn't get a pass from Nintendo EAD lead Shigeru Miyamoto. Mario's creator wanted more puzzles, less gore.
Jones' opinion differed. The aggressively over-the-top gameplay and open-world environments fit like personally tailored brass knuckles. It needed more, not different. Body Harvest fell off Nintendo's schedule (to be picked up years later by Midway), but DMA was already moving on a newer, better project. Programming had an engine that simulated a top-down cityscape, and centering the camera on a moving object gave it a incredible sense of speed. Jones quickly dreamed up a cops-and-robbers chase game around that dynamic, set in a living, breathing city where the player could go anywhere and do anything. Then he got bold: The player wouldn't be the cop.
Yo si que creo que la violencia virtual/simulada es problemática y desensibiliza, facilitando mas violencia, Pero el mundo del entretenimiento siempre está con el rollo este de "solo la puntita", que me parece enórmemente hipócrita. Pero no quiero iniciar un debate, simplemente que yo solía tener mejor opinion de estas vacas sagradas de la industria, pero a medida que veo cosas no paro de pensar que no pararon de cagarla por cabezones. Tontendo, Chony, MocoSoft. Siempre jodiendo algo, de verdad.
Mas puzles, menos sangre... ¿y por eso anunciasteis el juego en 1995 para luego darle la patada hasta que lo rescató otra editora? Vete a rascarla, Shiguero Miyamoto. Hay que ser cabrón. Historias como esta y lo de el aparente Robo (y perfeccionamiento, no lo niego) del plataformas 3D de Yoshi de los de Argonaut como inspiración para Mario 64... la verdad, da la impresión de que este hombre es bastante cabrón, por ponerlo suavemente.
Yo puedo entender hasta cierto punto lo de querer mantener una linea editorial y todo eso, pero da la impresión de que el niño Shigeru, sin quitarle sus méritos, se tomaba unas libertades y un enseñoreamiento que son dificiles de justificar.
Pero volviendo a tu referencia a Carmageddon 64, quiero comentar que, dentro de lo oscura que es, la banda sonora tiene algunas pistas que siempre me fascinaron. Entre ellas, está una que recientemente llamó mucho mi atención tras familiarizarme con la banda sonora de Dirty Harry (Harry el Sucio en España). La pista de CM64 se llama "Scorpio", y en Dirty Harry el psicópata asesino se hace llamar así también, y cuando está intentando cepillarse a su segunda víctima desde una azotea y le interrumpe un helicóptero de la policía, suena esta pista, que, en la parte aquí señalada, considero que tiene mucha similitud a esta otra parte de la pista de CM64.
Dirty Harry - Scorpio's View
https://youtu.be/yp8DGoaDZ5k?t=110sCarmageddon 64 - SCORPIO
https://youtu.be/p_2SAfX3CBU?t=145Lista de reproducción de YouTube con toda la banda sonora de Carmageddon 64Sorprendentemente buena, y, por culpa de la mala calidad del juego que la contiene, poco apreciada.
---------------------------------------
Por cierto que Spooky Iluha volvió a responder, pero por circunstancias personales aún no me he puesto a analizar su respuesta, pero os la dejo aqui por ahora si quereis:
https://www.youtube.com/watch?v=xQ2lsyHd-xs&lc=Ugy_7gstvlQCEY-PZGt4AaABAg.AKIBNtrp2QTAKZxQ0huNbYd
The algorithm always renders consecutive fields for the VI to output, odd then even then odd and so on.
If the system takes too long to render a frame, VI spins the previous two available fields until its rendered and shows it on the next matching vblank. That way no rendered frame is wasted at all
I keep three 640x480 buffers to fit all the needed info for it to work. Technically it can fit in just two buffers, but it has noticeable artifacts with AA and dedithering. These use adjacent lines in the buffer for their inner workings, so we can't be rendering a new frame there while showing the neighbor field.
The VI does have some bilinear interpolation to its output, but I doubt its usefulness for smoothing out any jutter
ACTUALIZO: Bueno, pues vamos a ver qué nos está diciendo el amigo Spooky aquí.
Parece que tal como sospechaba, cuando su proceso de renderizado por campos entrelazados llega tarde a un refresco de pantalla, no se molesta en intentar el siguiente campo, que implica desechar el actual por que ya no encajaría en el siguiente. En vez de eso, directamente se salta el campo al que ha llegado tarde y también el siguiente, y así continua renderizando el actual en vez de desecharlo, y lo muestra en el siguiente refresco que corresponda con el tipo de campo. Mientras hace eso, vuelve a mostrar en pantalla los dos últimos campos que ya estaban renderizados. Esto necesariamente produce un renqueo en la acción, aunque el autor asegura no notar ningún problema "en un CRT". Seguramente sea un problema menor, pero a mi mente obsesiva le molesta xD.
Dice una serie de cosas respecto a cómo se almacenan los campos que no me quedan claras del todo. Tendré que ver de darle un poco mas la barrila para ver si me lo explica. Dice que tiene 3 búfers de 640x480, no de 640x240, y no se si es que almacena ambos campos en un mismo búfer o esos 480 están intercalados con lineas vacías. Dado que habla de problemas con AA (antialiasing) y el dedither por "usar solo dos (búfers)", imagino que esto hace referencia a combinar ambos campos en un mismo FB y que el VI lea información del campo opuesto durante los procesos de combinacion de colores del VI, causando efectos indeseados, así que deduzco que debe tener FBs separados para cada campo, intercalados de lineas de todo ceros o quizá todo unos (RGB 16 bits se supone que son realmente 5 bits por canal, que da 15 bits, aunque a veces se le dan 6 al verde porque somos mas sensibles a este color, completando los 16 bits; o también puede usarse el bit sobrante como bit de transparencia en algunos formatos de color, pero no se cómo funciona esto el VI de N64). Imagino que hace esto por alguna imposición rara del renderizado entrelazado en N64, que exige acceder a las lineas saltándose las del campo opuesto y no permite usar como "entrelazado" un búfer que no tenga las lineas correspondientes al campo opuesto. Pero esto es especulación mía.
También hace referencia a que causa problemas estar mostrando un campo del búfer entrelazado mientras escribes en el otro, y que por eso usa tres (dos para los ya renderizados, par e impar, y uno sobre el que se está renderizando, que se marca como último par o impar, mientras que el anterior se marca como nuevo target de renderizado, y así se van rotando.