Duda sobre programación y diseño en un videojuego.

Buenas gente,hoy debatiendo con un amigo,nos preguntabamos una cuestión que aún buscando no he logrado encontrar información;la duda es:cuando juegas a un juego,ya sea de conduccion,mundo abierto,etc..que se mueve,el personaje que manejas,o el entorno?
A ver si hay algun programador en cuestión o algun miembro que nos saque de dudas.

Gracias de antemano a todos.Un saludo!
@elantonimone

En realidad no se mueve nada. La imagen que ves se calcula en cada momento en base a operaciones matemáticas (conociendo la posición y orientación del punto de vista desde el que se representa la escena), pero no se "mueve" nada. Es una simple sucesión de imágenes estáticas actualizadas tan rápido que dan sensación de movimiento.

Quiero decir: en un instante X el personaje "está" en tal sitio y "mirando" a tal lado. Se calcula la escena que debe verse y se representa en pantalla. Un momento después sus coordenadas indican una posición u orientación distinta y se calcula la escena que corresponde a esos datos. ¿Realmente se ha movido alguno (escenario o personaje)? No. Solo han variado unos números y se ha representado una nueva "foto" en base a ellos. Que sean las coordenadas del personaje (lo que equivale a "moverse él") o que sea el sistema de coordenadas el que cambia ("mover el universo") no tiene importancia. Es el mismo cálculo.
Lo que comenta Deschamps no es exacto, aunque tenga sentido a nivel conceptual, sobre todo en 2d.

Si hablamos de un juego 3d, siempre se va a mover el personaje, coche, nave,... al que ira vinculada la camara. Esto es porque las geometrias q ves en el escenario son producto de un calculo de iluminación en base a dos tipos de luz : estáticas y dinámicas. Las estáticas se calculan en un prerenderizado antes de que llegues a verlas (la pantalla de carga) mientras q las dinamicas modifican lo que ves en tiempo real.

Por ello, si movieramos el escenario, habría q recalcular la iluminación estática, ya que cambia su posicion respecto a esas luces estaticas, es decir, pantallas de carga continuas. Interesa q el mínimo de geometrias se vean afectadas por ese calculo. De ahí que si te fijas, al cambiar el nivel de gráficos en un juego, quiten las sombras de personajes, xq es de las cosas q mas pesan.

Ya podríamos meternos en cuestiones de logaritmos de calculo diferentes para agilizar la iluminación global en tiempo real, que es donde estan tirando la mayoría de motores de renderizado, pero todavía les queda para lograr una calidad aceptable, aparte de que tendrías que sumarle la postproduccion q si q tiene el prerenderizado. Mucha gente se obsesiona al trastear con el 3d y ver q no le sale tan bonito como a los profesionales, y la mayoría de las veces es por efectos de postpo (bloom, flare, bokeh, color balance,...)
Muchas gracias @Turilly @Deschamps !Se han aclarado las dudas.Un saludo!
@Turilly Las luces estáticas forman parte, como cualquier otro elemento, del universo que configura el mundo del juego. Cuando hablaba de cambiar el sistema de coordenadas, me refería (por entendernos) a trasladar los ejes de coordenadas convenientemente. Cierto que es conceptual, pero de facto eso equivale a mover el universo entero (sin que cambie en esencia su configuración, incluyendo luces, perspectivas, oclusiones, etc).

En resumen, que como decía en la práctica no se mueve nada, todo es un simple cálculo. O puestos a aceptar como "movimiento" los cambios en la escena, lo mismo da que se produzcan por cambios de coordenadas con un sistema fijo que por cambios en el sistema de referencia, manteniendo al personaje siempre en el origen.
No no, si no niego lo q comentas. Es como en la realidad, en donde conceptualmente nosotros nos movemos en el universo o es el universo el que se mueve a nuestro alrededor. Todo es cuestión de en que sistema de coordenadas nos movemos, por lo que por ejemplo el sistema de Ptolomeo seria igual de cierto q las orbitas newtonianas

Solo queria aclararle el como se programa y visualiza un videojuego, y el porque de las configuraciones graficas y los pasos de renderizado. Presupongo q lo hace pensando algún día en meterse en el mundillo, y por eso la aclaración, q además se ve mucho mas claro en cuanto coges una escena de Unity o similar. Podrías hacer personaje y cámara fijos, y hacer q toda la escena (geometrias, luces, audios, fondos,...) se moviera, al estilo juego sobre raíles solo q falseando al poner una animación al personaje, q andaría estilo Michael Jackson. Pero lo normal es q respecto al 0,0,0; el personaje se mueva y el mundo no. Ademas me estoy imaginando diseñar rutinas de movimiento para los enemigos respecto a una escena q se mueve, y me da q seria un doble calculo, para mantener coherencia con el entorno. Que ya podriamos meternos además en hacer ciertas geometrías afectadas solo por la iluminación global, por los rebotes secundarios,... pero ya nos vamos de madre

No se si m he explicado bien ;)
Sí, comprendo a qué te refieres. Y es cierto que la estrategia habitual a la hora de manejar la representación es la que comentas, realizando cálculos sobre coordenadas del protagonista y manteniendo un sistema de referencia fijo.

Ahora bien, "habitual" no significa que sea la única forma, ni la mejor. Es más una limitación (o imposición) del modelo geométrico implementado por el motor (mucha gente usa soluciones de terceros -que no son flexibles en ese terreno- o recurre a lo "tradicional") que no por imposibilidad de hacerlo de otro modo. No hay razón para que el álgebra que subyace en esos cálculos fuera diferente, con idéntico coste de hecho. En resumen, "mover el mundo" sería idéntico a "mover el personaje", pero habría que partir de cero para hacerlo posible, y eso en la práctica lo deja como algo marginal, sobre todo si se depende de librerías o motores de terceros.
6 respuestas