miércoles, 26 de septiembre de 2007

Editor, Cámara, Acción!!

La última vez que escribí en este blog, estaba en Coquimbo celebrando las fiestas patrias. En ese entonces planifiqué que el siguiente paso en Avioncitos 3D sería la creación de un editor de terreno. De esta forma, cuando volví comencé a trabajar de inmediato en el editor.

El concepto de "Editor de..." corresponde a un programa externo al juego, que permite crear y modificar de manera relativamente fácil algún archivo que utilice el programa principal. En este caso es un editor de los archivos que guardan los ElevationMap, los cuales hasta ahora eran creados a mano en bloc de notas (mspaint, bloc de notas... no es claramente lo último en tecnología... al parecer son herramientas demasiado básicas para crear un juego 3D, aunque hasta ahora han funcionado). Hay que recordar que inicialmente el Sistema de terreno creaba el relieve basado en valores de variables que eran modificables sólo durante el diseño del juego, ya que formaban parte del código mismo del programa. En una segunda etapa, agregué soporte para cargar estos valores desde un archivo de texto externo, el cual guardaba todos los datos de elevación para un terreno en particular (ElevationMap), lo que permitía la edición desde fuera del programa, la creación de múltiples archivos, la posibilidad de compartirlos, editarlos sin tocar código, etc. Este sistema es el de elección para un juego de este tipo, ya que en teoría permitiría la adición de nuevos terrenos sólo mediante la incorporación de nuevos archivos de texto.
Hasta que volví de Coquimbo, todo funcionaba así. El problema más importante era que los archivos de elevación seguían siendo simples archivos de texto, por lo que toda la información que contenían no era más que números en un formato especial, que luego el Avioncitos 3D interpretaba como terreno. Debido a esto, los archivos eran complicados de editar, ya que requerían bastante imaginación para concebir a los números como una imagen, y por otra parte, no permitía manipulaciones más complejas como copiar un cerro completamente y pegarlo en otra parte del terreno, etc. De esta forma, hacer el terreno completo a mano, metro por metro, sería una tarea demasiado engorrosa y con resultados poco agradables estéticamente. Debido a esto surgió la necesidad de un programa con una interfaz más amigable, el cual fuese capaz de interpretar la información de los archivos en algún tipo de imagen, y permitiera manipulación más compleja de los datos.

A la fecha el editor de terreno está aún lejos de su funcionamiento planificado, pero ya posee funciones básicas como cargar un archivo de terreno, guardar una copia, mostrar el archivo completo o una fracción deseada, modificar directamente los datos (mediante una interfaz de texto) y copiar y pegar unidades de terreno, lo que facilitó enormemente la creación de áreas más extensas de terreno sin la necesidad de definir cada elemento individualmente. A la fecha también cuenta con herramientas para reemplazar masivamente áreas de terreno y mezclar distintas zonas a elección. De momento todo sigue operando en modo texto y botones, pero la interfaz gráfica con arrastrar y soltar, y funciones todavía más intuitivas está en desarrollo.

Cámaras

Gracias al aporte de la nueva herramienta, me fue posible crear un terreno algo más elaborado (sin reemplazar el anterior), para probar la nueva funcionalidad del avioncitos 3D propiamente tal: Las cámaras.

En un juego 3D, es de suma importancia el sistema de cámaras. A diferencia de las versiones bidimensionales, donde la visión suele ser fija, en un entorno tridimensional ocurren eventos en todas partes, que no pueden ser visualizados si no existe la posibilidad de cambiar el punto de vista. Básicamente la cámara corresponde al lugar ficticio desde donde el usuario mira al mundo 3D, la dirección hacia la que mira y algunos otros datos como el campo visual, la distancia máxima de visión, etc. Aparte de estos datos básicos, la cámara en los juegos 3D debe cumplir otra función: moverse "inteligentemente".
Hasta antes de crear el sistema de cámaras, el juego contaba sólo con una cámara básica que yo podía mover a voluntad (sin cámara no se vería nunca nada). Gracias a esto logre tomar todos los Snapshots desde ángulos distintos, y funcionaba bien hasta que el avión comenzó a moverse. Obviamente, el jugador debe preocuparse de mover su avión, pero la tarea de mover la cámara no le corresponde. Es por esto que la cámara debe seguir automáticamente la acción, manteniendo una visión óptima para que la jugabilidad no se vea limitada. Todo esto debe ser lo suficientemente autónomo para que casi pase desapercibido por el jugador, pero debe a la vez permitir la modificación de algunos parámetros para que el jugador tenga control sobre la cámara en cada momento. Claramente hay situaciones donde una posición de cámara es superior a otra, por lo que debe permitirse este nivel de personalización.

He llamado "programas de cámara" a 5 modos distintos en que la cámara se comporta según lo que ocurra en el juego. Esto da lugar a 5 tipos de cámara elegibles, todos con algún parámetro configurable por el usuario según necesidad.
De las 5 cámaras posibles, 4 corresponden a vistas externas del avión, mientras que uno es una vista interna desde la cabina del avión (vista de HUD).
Los 4 tipos de vistas externas corresponden a cámaras que siguen automáticamente al avión, ya sea trasladándose o rotando sobre su propio eje, de modo de no perderlo de vista. Según el tipo de cámara, el programa respectivo determinará la acción de la cámara para mantener la vista dentro de los parámetros configurables, como son la distancia al avión en cada uno de sus ejes, la posicion relativa, el radio máximo de rotación, etc. De esta forma, la cámara permite, por ejemplo en modo fijo, mantenerse siempre atrás del avión a una distancia fija, que puede ser modificada por el usuario, de modo de siempre tener la vista al frente. Por otra parte, el modo libre permite elegir mover la cámara para elegir una vista del avión arbitrariamente, para que luego la cámara mantenga esa misma visión del avión, independientemente de sus movimientos. Las vistas externas 1 y 2 mantienen al avión en el centro del campo visual, pivoteando la cámara sobre sus propios ejes, para evitar así traslaciones que pudieran desorientar al jugador. La cámara es también capaz de desplazarse para no perder el encuadre a pesar de los movimientos extremos del avión. La vista de HUD muestra la visión real que tendría el piloto del avión sentado en su cabina y observando a través del HUD. Este es el acrónimo de Head Up Display, y consiste en la proyección holográfica de los datos relevantes sobre el vidrio de la cabina (en realidad es una pantalla transparente justo al frente del piloto). Supongo que todo el mundo ha visto un HUD, y la mayoría lo recordará como los clásicos monitos, miras y relojes que aparecen en los aviones de TopGun, Stealth, y cada película de aviones fighters.) De momento el HUD es sólo una imagen fija (adivinen... Correcto, es paint!) proyectada en frente de la cámara de HUD. Más adelante el HUD se hará funcional, de hecho ya estoy diseñando los modos de display, el sistema de armas y toda la simbología que mostrará, pero no es prioridad actual. Cuando aparezcan nuevas necesidades, crearé modos de cámara nuevos, por ejemplo para seguir a un blanco designado, seguir a un misil, a un avión enemigo, etc.... (Se hace camino al andar...)

A continuación algunas imágenes del juego en su estado actual, con el archivo de terreno procesado por el esbozo de editor; y los modos de cámara en acción.


En la imagen anterior se observa al Shark volando sobre las clásicas casas de siempre. De fondo se observa un complejo montañoso que encierra un valle angosto ideal para ocultarse. Nótese que agregué en el juego mismo información sobre el frame rate (los cuadros por segundo a los que corre el juego; mientras más, mejor) y la cámara activa, en este caso Libre.


En la imagen anterior se observa al Sw71 desde una "vista de pájaro" lograda mediante el modo de cámara libre. Nótese como el frame rate cayó dramáticamente a 30 fps, debido a la mayor cantidad de polígonos en escena.


La anterior es una de mis favoritas: El Shark volando sigilosamente por el valle creadoentre las cadenas montañosas. De fondo se observan las casas donde esperan el retorno del intrépido piloto (XD)...



La imagen anterior muestra al veloz Pyrage cruzando a baja altura por el valle angosto. La cámara se ubica a ras de piso, siguiendo angularmente la trayectoria del avión.



La última imagen muestra la vista de HUD. Hasta el momento la proyección del hud es sólo una imagen fija superpuesta. Posteriormente agregué la capacidad de cambiar el color de la imagen del HUD, para evitar problemas de contraste entre fondo y HUD (como en la foto). Todo esto mediante el uso del blending multiple de texturas en una pasada. Más adelante el HUD se volverá totalmente operativo.

Posteen comentarios, sugerencias, ideas, etc. Se agradece a los que ya han escrito.

Nos vemos en un próximo informe de avance... (Antes que empiece la posta!!!)

7 comentarios:

Hernan.Stocke dijo...

exelente :D

creo q ati te sobra mas el tiempo que a mi :D
o mas bien yo no se aprovecharlo :D
no he avanzado mucho en conocimientos en el ultimo tiempo :S

bueno recuerda tu historia en el andres bello y la calculadora que hiciste :D

portate bien :D
estudia
aioz :D

Anónimo dijo...

amé la palabra "jugabilidad" jajaja

EnanOh reklamOn!... si habia leido lo ke habias eskrito, y ahora iwal lei esto... kaxai ke kon too lo ke he leido, voi a kear toa sekah pal juego jajaja 1313

Me gustó la fotiix de Shark volando entre los cerros (: ta bkncitah...

aahh oiie.. aiier no habia kaxao ke te referiiai a ir de dia a la playa a "playear" komo decii tu.. porke iwal hemos ido.. y ahora ke lo pienso iwal hemos ido varias veces de dia.. no solo de noxe.. pero weno... a playear, sip, tenii razon.. no te akompaño =P asip ke sorry... retiro lo dixo aier... aunke tb va a ver un rato pa ir a la playa a... a ke? a desplayar? jajaja no se ke termino le pondriai a lo ke vamos nosotros.. pero iwal se pasa bkn...

iap.. te aprovexo de eskribir eso porke si no se me va a olvidar... siempre me pasa lo mismo, de repente ando too el dia tratando de no olvidarme de algo ke te tengo ke decir.. y en la noxe siempre nos ponemos a hablar de kualkier kosa y se me olvida... tu kaxai mi memoria.. a proposito.. recien tuve una prueba de eso x) de memoria.. no di tanto jugo komo pensaba pero iwal un pokiits x) en la noxe te kuento porke ahora tengo ke ponerme a traducir una kustion.. toi puro ociando aki en la klase... me puse a leer esto (anoxe se me olvidó lalala) y no he avanzao na..

asi ke hasta aki dejo esto.. ademas he eskrito mxo kreo, y no te kiero hacer la kompetencia... jajaja

Te kiierOh EnanOh.. kuiidate.. hablamos más tarde... besiiwiihz !


x.Lah_aLe_Carter_Shining_Star.x

ja.. sOii sekah ! (H)

P.D: iia ps.. apurate decifrando la kustioncita.. si no es tan dificil... Don Peneto esta esperando ke vengas a explikarle too lo ke le dijiste el otro dia jajaja...

Anónimo dijo...

me ekivoke... donde puse "va a ver" era "va a haber" sorry.. es ke eskribi rapido..
sé ke se entiende.. pero se ve horrible..

ia eso.. besiitos..

Anónimo dijo...

osrey osptabaolde sal ru pese quo pelvaotro cetquo osrey ol ni u...

cisibi i dopatro quo ro quaote muphe y quo iyot mo pelopro ul tire y ro opho do moles...

ejini hibnomes hey... bosaaares ! !




P.D: oee.. arregla tu kustiiOn ps.. mira komo eskribe ! jajajaja

KESTEBA dijo...

POR AHORA DIGO MUY PROFECIONAL.

Anónimo dijo...

vis i rolot quo dit ul ctomae i quaol ro cesroi mis ! !
cetquo ebvae quo ye gile ! !
jajaja

os quo le his subade lidi
aguin ro olraolde cetquo ilde ol nis masmis quo ru
cote mo dey ul raomce citi osptabatro

Ro Quaote Melrelos !

mo tosftao ! =(
cet pinnojoti mo cisi
jaja... os ne quo hiy !

bosaaaaaareeees ! !

gtipais cet rede, cet nis pelvotsipaelos, cet rus cinibtis y cet osrit iha saomcto... ro idete !

Anónimo dijo...

si keri borra el ultimo post
ia me di kuenta de ke no es asi...
ke pa variar taba ekivokada.