Programación en Lenguaje Ensamblador

-El Verdadero Lenguaje de las Máquinas-

Anime, Videojuegos y Cálculo Diferencial

Tips para estudiantes de la carrera de Programación de Videojuegos

Hoy en día comienzan a aparecer universidades con carreras tan interesantes como Animación y Desarrollo de Videojuegos. Cuando yo era pequeño y no sabía nada de programación la existencia de una escuela donde uno apendiera a hacer juegos sonaba tan fantástica (en el sentido de fantasía imposible) como la de la escuela para magos de Harry Potter. Pasado un tiempo corrió el rumor de que empresas multinacionales como Nintendo tenían unos pocos centros de entrenamiento en los que capacitaban a sus ingenieros y en cierto momento a finales del siglo pasado se destapó el rumor de que esta misma empresa tenía uno de estos centros ubicado al norte del continete americano. Tal instalación era conocida como Digipen y se rumoreaba toda clase de cosas respecto a lo que pasaba ahi dentro. Para todo niño y adolescente gamer era un sueño entrar a un lugar como ese. Pero como si no fuera suficiente la enorme distancia, la muy reducida matrícula (entonces solo admitian 2 estudiantes por año) y la dificultad de las materias. Sus jefes habían puesto una sentencia que sonaba mas como una maldición para alejar a los profanos e impuros: “Si quieres aprender a hacer videojuegos con nosotros debes de ser muy bueno con las matemáticas”.

Les cuento esta historia para que los jóvenes de hoy sean conscientes de la enorme fortuna que tienen. Pues ya en México y otros paises de habla hispana existen carreras donde pueden aprender a hacer videojuegos. Tal vez no sean tan buenas como Digipen pero al menos cuentan como carreras profesionales y se encuentran registradas ante el gobierno. Existen carreras para todos los gustos y presupuestos que me llevaría mucho tiempo mencionar en detalle. De momento puedo mencionarles la Licenciatura en Animación y Arte Digital del ITESM que se da en una escuela de mucho prestigio y se enfoca al lado artístico y la Licenciatura en Multimedia y Animación Digital impartida en la UANL que se concentra mas por el lado de la ingeniería y tecnologiá. Pues bien, me han llegado rumores, sobre todo de esta última pero no dudaría que ha pasado también en otras escuelas de que hay un gran desencanto en los alumnos que entran a estas carreras.

Y aquí es donde entra la que podría llamarse como “La Maldición de Digipen” pues como ya habrán adivinado la principal queja sobre estas carreras es que tienen demasiadas matemáticas. No voy a regañar a los gamers y otakus ingenuos como muchos otros lo han hecho en internet sino que les voy a explicar en términos sencillos el porqué las matemáticas se relacionan tanto no solo con los videojuegos sino inculso con la animación tanto tradicional como por computadora.

Imagino que en este mismo momento varios de mis lectores se han de haber atragantado con un Pocky. Voy a darles un instante para que le den un trago a su Ramuné, terminen su partida en linea de Ragnarok y se les pase el susto. Estoy seguro que estos lectores no pueden creer que exista una relación entre las chicas mágicas en uniforme escolar, los emocionantes videojuegos de aventuras en linea y las aburridas y odiadas matemáticas. Pero existe. En esta entrada me voy a concentrar en el cálculo diferencial porque es el que mas se relaciona con la animación. Les recomiendo que sigan leyendo porque no los voy a aburrir e incluso sospecho que esto podría hasta llegar a gustarles.

Primero veamos lo que es la animación. Para que el ojo tenga la ilusión de que el cine y la animación tienen movimiento se presenta una secuencia rápida de imágenes donde cada una es ligeramente diferente de la anterior. Si lo hacemos bien, el ojo interpretará que esa secuencia de imágenes fijas tiene movimiento continuo. Los animadores antiguos hacían esas secuencias de imágenes con lapiz y papel que luego pasaban a una película cinematográfica. Con el tiempo mejoraron su técnica reciclando partes de dibujos, fondos y composiciones primero con materiales físicos y luego con computadoras. Pero sin importar cuanto ha avanzado la animación. La idea de presentar una secuencia rápida de imágenes con ligeros cambios de una a otra y que el ojo humano ve que se mueve sigue siendo la misma. Lo que debe de quedar por ahora claro es que para que la animación funcione los cuadros de animación deben de correr a suficiente velocidad y el cambio de uno a otro no debe de ser tan grande como para notarse. La animación es un cambio de posición con respecto al tiempo.

Ahora veamos como esto se relaciona con los videojuegos. Los juegos presentan también una secuencia de imágenes fijas que el ojo registra como una animación. La diferencia es que el videojuego es interactivo. La estructura de código mas importante en un videojuego y que hace posible esa interactividad se llama “Gameloop”. Se trata de un ciclo infinito en el que primero se leen los controles, se ejecuta el programa que controla el juego y al final se genera un cuadro de animación que se muestra en pantalla. En los juegos de acción rápida esto sucede unas 60 veces por segundo. Como esto es muy rápido el efecto es una secuencia rápida de imágenes fijas. Pero a diferencia de la animación que conocemos aquí esos cuadros de animación simplemente se pierden luego de que los vemos. A este proceso en el que se genera un cuadro de animación en una fracción de segundo y que no se guarda en ninguna parte es lo que se conoce como “Animación en Tiempo Real” y es necesaria para que un videojuego presente una animación con la que los jugadores puedan interactuar.

Si nos metemos mas a fondo en el Gameloop vemos que la lógica del juego debe de pensar en esa única fracción de segundo en que existe entre el anterior cuadro de animación y el siguiente. Para que el movimiento sea real y los controles se sientan bien hay que saber que tanto debemos de cambiar la escena. Si lo hacemos bien la animación se verá realista y los personajes jugables responderán a las órdenes del jugador. Ahora veamos un ejemplo muy simplificado de animación normal e interactiva.

Digamos que tenemos una linea recta por la que debe de volar una nave espacial. La nave comienza en el paso cero y cada cuadro de animación avanza uno de esos pasos. Si reproducimos la secuencia de imágenes vamos a crear una animación de la nave que avanza hacia adelante. Si quisiéramos que la animación fuera interactiva, digamos que queremos que la nave avance solo cuando oprimimos un botón haríamos lo siguiente:

Primero colocamos la nave en el punto cero y luego entramos al gameloop. Al inicio del gameloop vamos a ver si el botón está siendo presionado por el jugador. De ser así incrementamos en uno la posición de la nave. Si el botón no está siendo presionado no se aumenta la posición. Al final del gameloop generamos la imagen con la nave en su nueva posición. Podemos hacer que la condición para salir de ese gameloop infinito sea que la nave llegue al paso 100 o que se oprima el botón para terminar el juego. De ese modo tenemos una animación interactiva en la que hacemos que la nave avance cuando presionamos el botón.

Si presentamos la animación a una velocidad de 60 cuadros por segundo la nave hará su viaje en poco mas de segundo y medio en un vuelo ininterrumpido. Desde el punto de vista del programador la nave cambia de posición un poco en cada ciclo del gameloop. Ahora veamos una pequeña sorpresita.

La Animación son pequeños incrementos de movimiento respecto a pequeños incrementos de tiempo…
¡Y eso se llama Diferenciación!

La sorpresa que les tengo es que lo que acaban de leer en estos últimos párrafos es puro cálculo diferencial aplicado. Y mientras me imaginan poniendo una Trollface por haberlos hecho leer algo de matemáticas yo les voy a explicar con palabras sencillas como el ejemplo de animación es lo que lo que se llega a ver en el primer semestre de cualquier ingeniería.

La animación es movimiento. El movimiento se puede representar matemáticamente como la distancia en función del tiempo. En el ejemplo de la nave el movimiento es lineal a velocidad constante y sin aceleración. Se trata de una función lineal de primer grado. Ahora veamos donde entra el cálculo diferencial.

No voy a meter signos raros intercalados con las palabras “sea”, “tal que” y “entonces” porque ya los he trolleado demasiado para una sola entrada. Solo les voy a decir que el cálculo diferencial estudia el cambio de las funciones a medida que avanzan en pasos cada vez mas pequeños. Volviendo a la animación. A medida que el cambio en la secuencia de imagen y el tiempo que hay entre un cuadro de animación y el siguiente se reducen la animación se va haciendo mas y mas real hasta llegar a un punto teórico donde los incrementos se acercan al cero y suceden tan rápido que la animación comienza a ser igual al movimiento que existe en nuestro mundo físico.

El movimiento que definimos de la nave es a velocidad constante (un paso por cada unidad de tiempo) y no tiene aceleración (no aumenta su velocidad ni la disminuye). Al avanzar un paso por cada cuadro de animación la nave tiene una velocidad de un paso por cada unidad de tiempo. Y aquí viene otra sorpresita. Ustedes acaban de aplicar la derivada a una función de movimiento sin aceleración. Cuando diferenciamos una función de movimiento sin aceleración el resultado es una constante. En el caso de la animación de la nave esa constante es uno. Si quisieran cambiar la velocidad o definir movimientos mas elaborados, el proceso es el mismo.

De momento solo voy a mencionar todo lo que pueden hacer con esta técnica en el mundo de la animación y los videojuegos. Las funciones de segundo grado se usan para movimientos con aceleración constante como los que involucran a la gravedad en los juegos de plataformas, y las de tercer grado pueden simular la aceleración variable de un motor que varía su potencia. Hay muchas cosas mas de animación que pueden resolver tan solo sabiendo aplicar el cálculo diferencial. En un futuro mas o menos lejano les explicaré mas sobre el tema.

¿Todavía no te interesan las matemáticas?

Personalmente creo que esa aversión por las matemáticas que muestran los aspirantes a programadores de videojuegos viene en parte por los maestros que aunque dominan el tema no saben ni les importa nada del mundo gamer. Por otro lado, si los estudiantes supieran que para lograr un determinado efecto especial necesitan aprender cierta rama de las matemáticas probablemente no le tendrían tanto desprecio. Por ejemplo, a mis amigos y a mi nos tomó mas de un semestre darnos cuenta que para hacer una cámara movil necesitábamos entender el cambio de base en un sistema de matrices ortogonales. Si de inicio hubiéramos visto ese mismo tema en la clase de Algebra Lineal lo mas seguro es que nos hubiéramos quedado dormidos en clase. Pero si en la búsqueda por lograr una cámara movil en un juego 3D nos hubieramos topado con el cambio de base de matrices ortogonales la cosa habría sido mucho mas emocionante.

Tengo que admitir que la situación actual de estos estudiantes me resulta por completo desconocida. Pues cuando llevé las materias de matemáticas en la carrera ya había visto esos temas en libros de computación (especialmente la materia de Matemáticas Discretas) o por lo menos había escuchado que algunos de esos temas se relacionaban con la programación de videojuegos. Ya para terminar esta nota que ha quedado tan larga, mi consejo es que si quien lee esto tiene un cargo importante en alguna universidad (y si conocen al Rosas pásenle el enlace a esta página) organice las clases de modo que las matemáticas no sean tan obvias. Si comienzan la clase con “Vamos a hacer un Angry Birds pero necesitamos averiguar como programar el lanzamiento de los pájaros con la resortera” será mucho mas ameno y divertido que si empiezan con un “Y esto es un polinomio de segundo grado y deben de aprenderlo bien porque les va a servir cuando hagan juegos”. Al final de ambas clases los alumnos sabrán como se relacionan los polinomios de segundo grado con el tiro parabólico y el movimiento con aceleración constante pero los primeros habrán puesto mas ateción y lo mas importante: Habrán aprendido a resolver un problema de programación de videojuegos usando las mismas matemáticas que usaría un programador verdadero. Si los alumnos van con la idea de que hay un conocimiento oculto que les permitirá hacer sus juegos y los maestros los reciben con la conciencia de que sus alumnos quieren aprender cosas que les van a servir para hacer videojuegos y animación ambos se verán beneficiados y con ello será posible levantar en latinoamérica verdaderas escuelas de animación y desarrollo de videojuegos. Pues recuerden que hasta hace poco el decir que ingresarían en una escuela de programación de videojuegos sonaba tan increible como anunciar que pretendían aprender a manejar el Sable de Luz con el Maestro Yoda o ir a entrenar al Santuario para obtener la Armadura de Pegaso. Hoy en día ya existen verdaderas carreras universitarias que aunque no sean las mejores, al menos ya existen. Ustedes tienen una oportunidad que muchos otros nerds de hasta hace poco nunca tuvieron, y lo mas importante. Muchos ingenieros arruinaron su vida profesional o se amargaron en la carrera para lograr que las universidades tomaran en serio esta clase de temas. Y si un dia se sienten decepcionados por estas escuelas, recuerden que pueden recurrir a mi aunque sea para tener a alguien que los escuche quejarse.

Anuncios

junio 15, 2012 - Posted by | Uncategorized | , , , ,

3 comentarios »

  1. que buen aporte ,gracias amigo me has sacado de muchas dudas

    Comentario por anderson | marzo 12, 2016 | Responder

  2. ¡Excelente explicacion! Como bien dices, hasta ahora no habia encontrado a alguien que me explicara tan bien cual es la relacion de las matematicas con la programacion, lo unico que sabia es que debia de aprenderlas para poder programar, pero hasta ahi nada mas…..

    Comentario por Carl | octubre 14, 2016 | Responder


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: