No habría Shrek sin matemática, parte III

Julio 31, 2008

Por Enrique

En dos posts anteriores hablamos un poco de la matemática que se esconde detrás del proceso de modelado y el texturizado de un proyecto de animación por computadora. La parte final del proyecto es la animación misma. Esta es mi parte favorita, junto con el modelado. En la animación uno trata de imitar el movimiento de los objetos en el mundo real (aunque no siempre). Puede ser tan sencillo como el movimiento de traslación de una partícula hasta los complicados gestos de un personaje.

La forma más sencilla y directa de animar un objeto es mediante key frames. Un key frame no es mas que la posición que el objeto tiene en un instante dado. Si queremos animar una manzana cayendo de un árbol, lo que hacemos es empezar en un tiempo t=0 y crear un key frame cuando la manzana se encuentra en el árbol. Luego seleccionamos otro instante de tiempo y movemos la manzana a una nueva posición para crear otro key frame. Repetimos el procedimiento de especificar la posición y el tiempo hasta que cubrimos varios puntos de la trayectoria. Una vez que tenemos nuestros key frames la computadora hace el resto: dados distintos puntos de la trayectoria, el programa interpola la posición del objeto para cualquier instante de tiempo. Y entonces lo que tenemos es una fórmula que describe la posición de la manzana en forma continua. Si queremos movimientos realistas, es aquí donde la física ocupa su lugar.

Para un objeto en caída libre empezando desde el reposo — como la manzana de nuestro ejemplo — sabemos que su posición vertical está data por y=\frac{1}{2} g t^2. Entonces podríamos crear key frames con valores dados por esa fórmula.

El algoritmo de interpolación es muy flexible. En realidad, la mayoría de veces la trayectoria resultante después de crear los key frames necesita ser editada para lograr el movimiento que teníamos en mente. La edición no es otra cosa más que una reminiscencia de lo que se aprende en los cursos introductorios de física. El editor es una ventana que muestra un gráfico interactivo de posición contra tiempo. Allí uno manipula la forma de curva hasta obtener la trayectoria deseada. Si queremos añadir rotación, el procedimiento es el mismo, pero en lugar de coordinadas x, y, z tenemos ángulos de rotación alrededor de estos tres ejes.

Los movimientos se pueden hacer relativos. En una escena con el Sol, la Tierra y la Luna, uno puede hacer que la Luna gire alrededor de la Tierra y a su vez que la Tierra gire alrededor del Sol. El resultado final de la trayectoria de la Luna será la superposición de ambos movimientos, tal y como es estudiado en física al introducir diferentes marcos de referencia.

Dejando por un lado objetos individuales, otra forma de lograr efectos como fuego, viento o agua consiste en animar todo un sistema de partículas. Esto no es otra cosa más que física puesta en acción. Aquí uno hace que cierto objeto sea un emisor de partículas. Un plano, por ejemplo, puede ser seleccionado para que emita partículas desde sus vértices. Se especifíca la dirección inicial, velocidad inicial, número de partículas emitidas por unidad de tiempo y vida media de cada partícula. Para crear una fogata, uno puede hacer que las partículas sean emitidas en la dirección vertical positiva. Se agrega una variación aleatoria a la velocidad, lo que le da a las llamas ese aspecto de constante movimiento y también agregamos un campo de fuerza que acelere a las partículas en la dirección vectical positiva. La fuerza hace que las particulas se acumulen más en la parte de abajo de la fogata y se dispersen a medida que suben. Si quisieramos simular una fuente, la idea es similar, pero utilizamos un campo de fuerza en la dirección vertical negativa. La diferencia visual entre fuego y agua es la textura de cada partícula.

Programas de animación como Maya permiten que el usuario escriba fórmulas para especificar el movimiento de algún objeto. Incluso, Maya tiene un modo de animación en donde los objetos se rigen por las leyes de la física e interaccionan entre ellos teniendo en cuenta su forma. Con esa maquinaria se pueden crear de forma automática colisiones realistas donde los objetos no sólo se trasladan sino que giran y rebotan.

La animación es un mundo donde la imaginación es el límite. Cuando empecé a aprender, no me imaginé que iba a encontrar tanta física y matemática a nivel palpable. Si bien uno nunca escribe ni resuelve una sola ecuación, estas dos ciencias le dan a uno una percepción diferente y más profunda de este arte cuyo substrato es la ciencia y la tecnología misma.


Randy Pausch y la ciencia en Guatemala

Julio 25, 2008

Por litomd

Como muchas personas, hoy, al enterarme de la muerte de Randy Pausch, busqué en YouTube alguna de las innumerables versiones de su “Última Lección”, es decir, el video que se publicó (y que luego se convirtió en libro) cuando el Dr. Pausch dictara la conferencia titulada “How to Achieve your Childhood Dreams” (Cómo Alcanzar los Sueños de tu Niñez) en la universidad Carnegie Mellon en Pittsburgh, en septiembre de 2007.

Para cuando dictó esa conferencia se le había diagnosticado cáncer en el páncreas, extendido al hígado, con un diagnóstico que auguraba solo unos meses más de vida, si no unas cuantas semanas. Así que lo que solía ser un ejercicio académico para el cual se invitaba a distinguidos profesores a dictar una conferencia que fuera como su “Ultima Conferencia”, se convirtió para él en algo mucho más patente y dramático.

Parte de lo extraordinario de su historia es que lo supo hacer como los grandes maestros: llegando al corazón de sus alumnos. En lugar de ver a una persona deprimida y triste por vivir sus últimos momentos, vieron a alguien lleno de energía, satisfecho de la vida que había vivido, de sus logros y de su legado.

Y no es para menos. Una búsqueda de “Randy Pausch” en la biblioteca digital de ACM - The Association for Computing Machinery, la sociedad de ciencias de la computación más importante del mundo - devuelve 210 resultados, la gran mayoría artículos científicos y reportes de investigación de los proyectos en los que participó.

Randy Pausch investigaba en un área que poco a poco va adquiriendo fuerza en las ciencias: la Interacción Humano-Computador o HCI por sus siglas en inglés (IPO en España, es decir, Interacción Persona-Ordenador) y uno de los productos de su trabajo - la plataforma de programación Alice - es conocida y de hecho utilizada en algunos colegios y universidades en Guatemala y en todo el mundo en un esfuerzo por hacer más atractiva la programación y las ciencias de la computación en general, a las nuevas generaciones de jovenes, más acostumbrados a visualizar resultados inmediatos que a diseñar un algoritmo.

Pero lo que me impulsó a compartir estas líneas con ustedes hoy son dos ideas de la “Última Lección” de Randy Pausch. La primera: “Espera lo suficiente y la gente te sorprenderá e impresionará” es una invitación a recuperar la esperanza en el ser humano, no importa que tan improbable sea esperar esos resultados impresionantes. Hoy, casualmente, también es el último día de Converciencias y aunque no he podido asistir a ninguna conferencia (mas que una, vía el sitio del Concyt) pienso que esta idea y las iniciativas tan importantes que van de la mano de Converciencias son las que con el tiempo posibilitarán el que nuestros paisanos nos sorprendan e impresionen… ¡y lo harán! No hay duda. De hecho, ¡muchos ya lo hacen!

La segunda: “los muros existen para darnos la oportunidad de demostrar con cuanto afán deseamos algo” (”brick walls are there for a reason: they let us prove how badly we want things”) nos viene tan a la mano porque a veces parece que el sueño de hacer ciencia en Guatemala tuviera una pared enfrente. Pero esa pared no está ahí para impedirnos pasar, sino para que demostremos que aún con los mayores obstáculos ese sueño es posible.

Personalmente siento una gran admiración por Randy Pausch y me alegra saber que parte de mi trabajo en la Universidad Rafael Landívar aquí en Guatemala fue impulsar la plataforma Alice para enseñanza de la programación en secundaria y diversificado. Estoy convencido de que este tipo de herramientas, donde se enseña a programar creando animaciones en 3 dimensiones, en forma accesible para los más jovenes, estimula la creatividad, el deseo de conocer, la curiosidad, la percepción de las estructuras, la abstracción, en fin, tantas habilidades tan necesarias para la investigación científica, podrían utilizarse con exito en una estrategia nacional de impulso de las ciencias y la tecnología.

Muere un gran científico que deja un legado lleno de lo más noble que un hombre de ciencia puede dejar: la materia para que otros puedan seguir sus pasos en la búsqueda del entendimiento del universo.


No habría Shrek sin matemática, parte II

Julio 21, 2008

Por Enrique

Como habíamos visto en la primera parte de este post , todo proyecto de animación por computadora consta de tres partes: modelado, texturizado y animación. Una vez que tenemos los objetos que conforman la escena, nos damos a la tarea de darles la apariencia adecuada. Es decir, les damos una textura.

La textura puede ser del tipo realista, en donde uno quiere que los objetos tengan el aspecto que tienen en el mundo real. O bien podría ser que el artista está interesado en una animación tipo caricatura, en la cual la textura de los objetos no es tan detallada. En cualquier caso, existen dos formas de darle textura a un objeto. La primera es mediante patrones generados por medio de un algoritmo, llamada textura procedural (procedural texture). La segunda es utilizando fotografías de la textura que se desea emular.

La textura procedural la proporciona el programa mismo y es controlada por medio de parámetros. Por ejemplo, se puede encontrar texturas que semejan nubes, madera, mármol, ruido, gradientes de color y rajaduras. Todas ellas son generadas por fórmulas matemáticas. Son funciones escalares de dos variables en el intervalo [0,1] donde un valor de 0 representa el negro y 1, el blanco (o a la inversa dependiendo el programa que se use). Estas simples imágenes en blanco y negro tienen un potencial increíble. La idea es que no solo proporcionan el color de una superficie o un sombreado. El rango de valores en el intervalo de cero a uno puede ser utilizado para modificar otros atributos del objeto. Por ejemplo, un simple plano puede ser transformado en un terreno con valles y montañas al utilizar una textura de nuble en donde el color de la nube (en escala de gris de 0 a 1) es mapeado a un desplazamiento en la dirección perpendicular al plano. Así, uno puede hacer que las regiones más obscuras sean los valles y las regiones más claras sean las cumbres de las montañas. Todo esto se hace presionando botones y deslizando cursores en los rangos de los parámetros.

También es posible hacer un mapeo entre la escala de grises y el vector normal a la superficie. Esto crea efectos muy realistas de superficies corrugadas. La escala de grises también se puede mapear a otros parámetros de la superficie, como la reflexión, luz de difusión, especularidad, transparencia y otros más. Al especificar valores para cada uno de estos parámetros uno crea el material de cada objeto. El material es lo que hace que una mesa de madera se vea diferente a una mesa de plástico. La madera tiene menos reflexión especular y esto le da un aspecto mate. Un metal pulido, por el contrario tiene mucha reflexión especular, lo que le da un aspecto brillante. Juntos, el material y la textura le dan la apariencia real al objeto. El cálculo del color que cada pixel en la pantalla debe tener — según el objeto que se despliega — se hace por medio del sombreador (shader). El sombreador puede correr en tiempo real, como el caso de los juegos de video (en general, aplicaciones que usan las librerías de OpenGL, por ejemplo); o puede ser llamado para hacer el cálculo (render) de un sólo cuadro en la animación. Un sombreador no es más que una fórmula o un algoritmo que toma en cuenta información como el vector normal, intensidad de luz incidente, reflexión especular, reflexión difusa, reflexión ambiental y devuelve el color adecuado en la dirección en la que el objeto es observado. Existen muchas clases de sombreadores entre ellas: Lambert, Phong y Blinn. Lambert funciona mejor para objetos de aspecto mate y Blinn para objetos brillantes. El tema de los sombreadores es muy extenso y existe mucha investigación en relación a gráficas generadas por computadora. Fabricantes de tarjetas gráficas como Nvidia están constantemente buscando la forma de hacer algoritmos más realistas y más rápidos. En los juegos de video, los cálculos (rendering) se hacen en tiempo real. El poder computacional de las tarjetas gráficas (GPU) es tan grande que actualmente sobrepasa el del procesador normal de la computadora. Aunque no es tan fácil escribir programas que corran en ellos, varias universidades en EEUU están empezando a desarrollar aplicaciones que se beneficien de la capacidad del GPU. ¡Qué gran oportunidad de trabajo para alguien con habilidades matemáticas y de programación!

Volviendo al tema después de este pequeño desvío, la otra alternativa para crear una textura es importando una foto de la textura deseada. Esta es la mejor forma de crear objetos con apariencia realista. Todo lo que hablamos anteriormente de la textura procedural aplica aquí también.

Para que no piensen que este post hubiera sido mejor si mostrara un ejemplo, aquí va uno. Esta animación es un intento de crear la superficie de un lago. Lo que se usa son dos texturas de nubes. Una para las ondas grandes y otra para los detalles pequeños. El sombreador es Blinn con alta reflexión especular. Esta textura se mapea al vector normal del plano para crear el efecto ondulatorio. El movimiento se logra haciendo que el parámetro de desplazamiento de la textura en la dirección perpendicular al plano dependa linealmente del tiempo. El efecto es bastante realista. La guía completa está aquí.


Una estrategia contra los riesgos en las tasas de interés

Julio 11, 2008

Por Eduardo

Revisando algunos papeles antiguos me encontré con la documentación de un proyecto en el que asesoraba un departamento financiero municipal. La idea de este trabajito era coordinar el manejo de los riesgos financieros de una ciudad y su municipio, parecido demográficamente a Mixco, de cara a la liquidación de viejos préstamos y la adquisición de nuevos. Cuento un poco del asunto ya que este es uno de los ejemplos más simples de un acercamiento racional y económicamente conservador - en oposición a especulador - al tema de los inevitables riesgos financieros.

Básicamente, todo centavo que tengamos o debamos está a la deriva en el mar de los factores de riesgo. Por eso, quien pide un préstamo a tasa fija, corre el riesgo de hacerlo a tasas de interés muy altas, si lo hace en el momento inadecuado. (De la misma forma, quien guarda divisas habrá notado recientemente que éstas tampoco brindan seguridades.) Los factores de riesgo, como los tipos de cambio, las tasas de interés o los precios de una acción, son variables estocásticas - en general impredecibles - e inevitablemente dividen al mundo en ganadores y perdedores.

Mi cliente de entonces, dicha municipalidad alemana había sido tradicionalista. Ésta había contraído préstamos, solamente a tasas fijas, independientemente de su valor. Pero como he mencionado, las tasas fijas aseguran solo un monto de pago, y no dicen si este será al fin grande o pequeño. Por eso también deben considerarse préstamos a tasas variables, que se adaptan periódicamente a los intereses cambiantes del mercado. Préstamos de este tipo son ventajosos si se cree que los intereses medios van a la baja, y darán pagos menores que los de una tasa fija.

El objetivo del proyecto fue entonces comparar el costo de préstamos a tasas fijas o variables, de acuerdo a varias simulaciones de los intereses futuros. Estos correspondían a los escenarios de evolución considerados como los más probables. Al fin evaluamos así una estrategia para establecer un portafolio de préstamos fijos y variables que redujera el efecto de cambios negativos de los intereses a un mínimo racional.

Es aún muy temprano para comparar los costos del portafolio actual contra una continuación de la estrategia pasada de tasas fijas indiscriminadas. No obstante, desde la perspectiva del manejo de riesgos, iluminamos dos detalles relevantes. Primero, que valía la pena cambiar varios intereses fijos de préstamos viejos por tasas de interés variables. Y segundo, que convenía dividir los intereses de préstamos nuevos en partes, dadas por las probabilidades respectivas de una evolución a la alza y a la baja. El resultado es un portafolio diversificado con relación a las tasas de interés como factores de riesgo.

La lógica y el método que presento son también aplicables al problema inverso, que es minimizar el riesgo en la búsqueda de ganancias por bonos. En general, estos también son aplicables a problemas de consumidores individuales, mientras se tenga acceso a préstamos a tasas variables en el mercado (una cosa simple en el caso de bonos). El cambio del tipo de interés de un negocio existente se hace por medio de un contrato denominado swap. En una entrada futura tendremos más al respecto.


No habría Shrek sin matemática

Julio 5, 2008

Por Enrique

John von Neumann dijo una vez: “Si la gente cree que la matemática no es simple, es únicamente porque no se dan cuenta de lo complicada que es la vida”. Muchas veces he escuchado personas expresando su disgusto por la matemática. Cada quien tiene su propio motivo. Ya sea que son muy complicadas o que no sirven para nada, la mayoría no son más que prejuicios adquiridos por malas experiencias. Es cierto también que cada quien tiene gustos particulares y que no todo mundo se va a inclinar por una sola disciplina o área del conocimiento. Sin embargo, sería ideal que toda persona adquiriera una idea de la basta influencia y beneficio que la matemática puede tener en diferentes escenarios.

Hay quienes han propuesto que el universo está hecho de matemática, que la realidad misma está creada por fórmulas. Es una idea poco convencional que ha encontrado mucha oposición. Si bien nuestro universo no está hecho de matemática hay un mundo que no existiría si no fuera por ella. Totalmente diseñado y manejado por la matemática, es raro encontrar a alguien que no sepa de él. Este es el mundo donde viven personajes como Shrek y Fiona junto a cientos de otros más. Es el mundo de la animación por computadora.

Desde hace ya algunos años he estado aprendiendo este nuevo arte en mis ratos libres. Cada vez que aprendo algo nuevo no dejo de admirarme la manera en que simples fórmulas le dan vida a las escenas más hermosas. No es difícil crear una animación de estas. Lo difícil es encontrar el tiempo para hacerlo. Tampoco es difícil aprender. Yo empecé con Blender, que es un software muy amigable y muy versátil. Es open source y corre tanto en Linux como Windows. Hace un par de años tomé un curso de animación en Maya que es software propietario y no corre en Linux. Ambos paquetes son diferentes. Sin embargo, los principios detrás de la animación son los mismos. Mi relato a continuación apenas rasca la superficie del tema. No son más que observaciones del substrato matemático detrás de este fascinante mundo de la animación por computadora.

Todo proyecto consta de tres partes grandes: modelado, texturizado y animación. En el modelado uno crea los objetos de la escena. La forma de hacerlo consiste en poner juntas figuras geométricas básicas; como esferas, planos, cilindros, cubos, etc. las cuales uno deforma, alarga, subdivide, reescala hasta obtener objetos tan complejos como una cara humana. Existen dos formas de representar la figuras geométricas. La primera es por medio de NURBS (Non-Uniform Rational B-Splines), que no son más que polinomios racionales. Uno especifica ciertos puntos de control y el programa crea una fórmula que interpola la línea o superficie deseada. La otra forma de representar superficies es por medio de polígonos. En este caso uno provee la posición de cada uno de los vértices, pudiendo manipular también la posición de las aristas y las caras de los polígonos.

No está de más aclarar que el usuario no tiene que ingresar ninguna fórmula. El programa provee de un sin fin de herramientas para modelar el objeto deseado de forma óptima. En el ejemplo clásico de modelar una copa de cristal, lo primero que notamos es que la copa es un objeto de revolución. Sólo necesitamos dibujar medio perfil, especificar el eje de rotación y el programa genera la copa.

(Imágenes del manual online de Blender)

Cuando se habla de curvas, Maya tiene el concepto de niveles de continuidad los cuales son C0, continuidad posicional; C1, continuidad posicional y tangencial; C2 continuidad posicional, tangencial y de curvatura. Esto no es otra cosa más que el número de derivadas continuas que uno puede calcular de la curva dada. La idea es que la curva es más suave mientras más derivadas se le pueden calcular (hablando muy a la ligera).

Cuando se trata de superficies, existe el concepto de non-manifold mesh. En este contexto, una superficie es non-manifold cuando se intersecta a sí misma. De igual manera, esta idea tiene relación con el concepto matemático de lo que es un manifold. Un ejemplo de una superficie que es un manifold es una esfera. En general es toda superficie suave que tiene la propiedad de que cuando nos acercamos mucho a un determinado punto, la superficie se ve plana.

En el contexto del modelado de un objeto, una superficie que sea non-manifold causa problemas. El más notorio es cuando el programa calcula el vector normal a la superficie. El vector normal es de vital importacia pues es usado para los cálculos de reflexión y difusión de la luz. Para calcularlo el programa usa las coordenadas de la superficie y el producto cruz entre vectores. Si la superficie es non-manifold (se intersecta a sí misma) el vector normal no puede ser determinado de manera única en la intersección. Esto crea discontinuidades y sombreados artificiales en el objeto.

La localización de cada objeto en la escena se hace por medio de un sistema de coordenadas. Cada vez que se los objetos se trasladan o giran se aplica una transformación de coordenadas sobre los vértices que constituyen el objeto. La translación no es más que una suma de vectores y la rotación se logra a través del uso de matrices que especifican el ángulo y eje de rotación.

Afortunadamente, el usuario no necesita saber los detalles matemáticos detrás del modelo mismo. De lo contrario sería una actividad más científica que artística. El software en este caso, es una interfaz entre el mundo abstracto de la matemática y el mundo artístico de la animación.

El texturizado y la animación también tienen sus detalles, la física hace su aparición aquí. Pero para no extenderme demasiado, los dejaré para otra ocasión.


Phoenix Lander en Twitter

Julio 1, 2008

Por Enrique

Pues bien, el título lo dice todo. Uno puede seguir los detalles de la misión Phoenix Lander en Marte por medio de Twitter aquí.

Déjenme expandir un poco. Phoenix Mars Lander es la misión de la NASA dedicada a explorar el suelo de las capas polares de Marte. Sus objetivos son estudiar la historia del agua en el ártico marciano, recolectar evidencia de zonas habitables e investigar el potencial biológico en la frontera del hielo y el suelo.

Twitter es un sistema de micro-blogging en donde uno escribe mensajes de menos de 140 caracteres respondiendo a la pregunta: “¿Qué estás haciendo ahora?”. Según los últimos posts; el suelo marciano es amigable, pero las bajas temperaturas y falta de presión atmosférica evitarían el crecimiento de vegetales en el lugar.

Así es que ahora se puede seguir muy de cerca lo que sucede en Marte. ¡Leer los pequeños posts en twitter es como si hubiera un reportero en Marte, cubriendo las últimas noticias!