Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Programación Gráfica: Volumen de Vista

–Como se define el Campo Visual en los Videojuegos–

Cuando hacemos un juego 3D podemos crear mundos inmensos. Juegos de guerra con miles de unidades combatiendo en una gran ciudad, de aventura en linea con toda clase de paisajes, pueblos y bestias míticas o peligrosas pistas de carreras de varios kilómetros de extensión. En resumen, mundos tan grandes que no podamos abarcar solo con nuestra vista. Esta última declaración no es poética. A menos que lo que programemos sea una simulación de un juego de mesa cuyo tablero fuera mas pequeño que la pantalla (y aun ahí podríamos acercar la cámara a las piezas) lo que percibimos a cada momento en pantalla es una sección muy pequeña del mundo 3D que estamos explorando. Esa porción queda dentro de un volumen en forma de pirámide conocido como volumen de vista. En esta entrada discutiremos que es un volumen de vista y como funciona.

Si ustedes llevan tiempo queriendo hacer juegos 3D y nunca se habían preguntado que es un volumen de vista es normal. Pues las fronteras del volumen de vista nunca aparecen en la escena directo en la pantalla. Digamos que es como verse uno mismo la nariz. Siempre está frente a nosotros a donde quiera que vamos pero a menos que tengamos un problema de salud serio nunca entra en nuestro campo visual. El único rastro de la existencia del volumen de vista que los gamers pueden percibir es un error gráfico conocido como Pop-Up. En los juegos 3D antiguos (y algunos nuevos no muy bien programados) era muy común ver como algunas figuras aparecían de la nada. Esto era muy notorio en juegos de carreras o simuladores de vuelo. Primero el camino se veía completamente despejado y luego en la lejanía se materializaba de la nada una montaña o un edificio. A veces incluso podíamos ver como estos se ‘construian’ de adelante hacia atrás como si hubieran estado cubiertos con un manto de invisibilidad. Con el tiempo se fueron implementando técnicas mas o menos ingeniosas para disimular este problema como poner niebla u oscuridad y hacer aparecer esos objetos como si fueran sombras. La verdad es que lo que pasaba era que esos objetos que se materializaban de golpe era porque acababan de entrar en el volumen de vista por su cara mas grande. En realidad ocurría exactamente lo mismo con los objetos que entraban por un lado de la pirámide pero como estos quedaban fuera del campo visual nadie lo notaba raro. Ahora veamos que demonios es la figura de la primera foto.

El volumen de vista, como ya se dijo notas atrás, es una pirámide cuya punta o ápice se situa en el ojo del observador y se extiende conforme se aleja en dirección a lo que este está viendo. Ese es el volumen de vista infinito. Pero los usados en gráficas por computadora y por supuesto los juegos 3D no lo son. De hecho usar un volumen de vista infinito tiene muchos problemas. El primero es que ese volumen de vista no es realista. El ser humano tiene una distancia límite a la que puede ver con claridad y algunos objetos lejanos se generarían en tamaños tan pequeños que incluso serían mas pequeños que un pixel. El segundo problema tiene que ver con los objetos que se acercan demasiado al ojo. Si el vértice de algun objeto 3D llega a tocar el ojo del observador la ecuación de proyección en perspectiva daría una de las cosas mas temibles en el mundo de la computación: ¡División entre Cero!. Sin mencionar que los objetos serían demasiado grandes para ser visibles. El tercer problema es un poco mas dificil de explicar pero tiene que ver con que un volumen de vista infinito, o incluso uno finito pero demasiado grande generaría un volumen en unidades negativas en un sistema de coordenadas tridimensionales de mano derecha. Ahora veamos como convertir un volumen de vista infinito e inmanejable en un volumen de vista finito facil de programar.

Volumen de Vista Finito

Lo primero que vemos en la primera foto es que la figura cuenta con un ojo (la bola verde) y 3 planos (en la foto solo se representa el plano mas grande). El plano que está entre los otros dos es nuestro ya conocido plano de proyección y es donde las imágenes se van a proyectar. El cuadro que cierra el extremo mas grande es el plano posterior (plano B por backplane)del volumen de vista y limita hasta donde podemos generar nuestras imágenes. El mas pequeño es el plano frontal (plano F por front) y es el que limita que tan cerca pueden generarse los objetos que queremos proyectar. Recuerden que cuando trabajamos en 3D también manejamos algunas coordenadas fuera de la pantalla. Otra manera de considerar el plano posterior es como un cristal de seguridad que evita que los objetos de nuestro mundo 3D nos golpeen en los ojos. Una manera de recordar cual es el plano frontal y cual el posterior es simplemente recordar que estas posiciones son con respecto al plano de proyección y que estos 3 planos comparten el mismo vector normal (o un múltiplo escalar de este). Por lo menos así es como es al principio. Ahora veamos como controlar las dimensiones de un volumen de vista.

Un volumen de vista, sin importar si se trata de una proyección paralela (la que sirve para los editores) o perspectiva (la de los juegos en su gameplay) consta de 6 planos. La vista paralela es un cubo y la perspectiva una pirámide con el ápice o parte mas alta recortada. De momento nos vamos a concentrar en la proyección en perspectiva por ser la mas interesante para un programador de videojuegos. Pero antes de explicar como definir un volumen de vista vamos a discutir el porqué nos interesa hacerlo y que ganamos si logramos controlar sus dimensiones.

Como ya dijimos el volumen de vista abarca aquella porción del mundo que el jugador puede ver. Dependiendo de las circunstancias la vista puede cambiar. Por ejemplo si queremos cambiar de visión normal a visión telescópica o encuadrar un objeto distante en pantalla sin cambiar el punto de observación como podría ser el caso de una cámara externa o la vista por la mira de un rifle en un juego de disparo en primera persona solo tenemos que ajustar estos 6 valores. En otra nota futura voy a detallar esos 6 parámetros. Pero por ahora solo voy a comentar que 4 de ellos indican las distancias horizontales y verticales a partir del punto definido por el vector normal al plano de vista y los últimos dos indican la distancia hacia delante y hacia atrás del plano de visión. Se toma como centro, es decir si estos 6 valores fueran cero el volumen de vista se reduciría a tan solo un pequeño punto en el centro del plano de proyección.

Antes de irme quiero contar un poco sobre las últimas notas que vienen. Originalmente pensé que esta serie me iba a tomar a lo mucho cuatro meses pero esos 4 meses ya pasaron y apenas estoy alcanzando el final del segundo tercio de lo que tenía pensado escribir. Espero terminar esta serie de principiantes antes de que comience la temporada de calor y si se puede hacer una recopilación de estas entradas en un PDF de distribución libre para antes de que el verano termine. Lo que quiero comentar ahora que estoy reflexivo es hablar con ustedes sobre su propio volumen de vista. Y es que la segunda cosa que mas detiene el desarrollo de la programación gráfica entre los aficionados después del no saber matemáticas es precisamente el miedo que el 3D infunde a los principiantes. Soy lo bastante viejo para recordar los primeros juegos 3D para sistemas de 8 (si de 8) y 16 bits en la década de los ochenta. Ahora esos juegos se ven obsoletos y torpes pero en su momento esas estructuras de alambre verde en fondo negro, triángulos con dientes de sierra, texturas planas que parecían tableros de ajedrez y escenas con iluminación constante y cero sombreado despertaban exactamente los mismos comentarios que escucho de los desarrolladores en la actualidad. Que si para hacer 3D se necesita de miles de científicos y presupuestos de millones de dólares, que una sola persona no es capaz de hacer juegos 3D si solo tiene una PC y vive en un sótano (eso vayan y díganselo a John Carmack del DOOM a ver que cara les pone) o que no hacen 3D por la razón que se les ocurra.

El miedo que estas gráficas causan no se ha desvanecido a pesar de que ya se trata de algo bastante común. Lo único que tengo que decir al respecto es que esas empresas que crean este tipo de tecnología no comenzaron de ese tamaño y en el pasado hicieron juegos muy sencillos y quien no me crea solo busque en google juegos tan sencillos como Commander Keen o el One Must Fall 2099 y luego sorpréndanse al averiguar quienes los hicieron y qué están haciendo ahora. La habilidad de programar buenos juegos que tienen estos grupos fue lo que los hizo ricos y no como muchos piensan que fue la riqueza la que los hizo capaces de hacer buenos juegos. De hecho los algoritmos del 3D son muy viejos, algunos aún mas viejos que las propias computadoras. No deben olvidar que si le tienen demasiado respeto a una ciencia nunca la van a poder dominar, que estas cosas fueron creadas por humanos y que sobre todo programar es muy pero muy barato.

Como consejo, cuando alguien venga a decirles que ustedes no pueden hacer algo solo porque no tienen recursos (sobre todo si quien se los dice tuvo esos recursos y ni aun así pudo hacer las cosas) recuérdenle algo que le escuché gritar a un viejo hacker que conocí durante mis aventuras con el sistema GP32 cuando se dio una pelea típica sobre ensamblador: ¡El que TU no seas capaz de hacer algo no significa que NOSOTROS tampoco podamos hacerlo!

Así que si quieren hacer 3D ponganse a programar, lean algunos libros de matemtáticas y sobre todo no dejen que ningún desarrollador frustrado que se las de de profesional les cierre su propio volumen de vista.

Anuncios

febrero 18, 2012 - Posted by | Uncategorized | , , ,

Aún no hay comentarios.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: