12 de diciembre de 2009

CGI: parte II

¿Cómo representamos el objeto que tenemos almacenado en el ordenador?

Cuando vemos un objeto es porque uno de los rayos de luz de una fuente luminosa (rayos incidentes) da contra él, parte de la luz se absorbe, parte se refracta (si el objeto no es opaco),  y parte se refleja. Cuando el rayo reflejado entra a través de nuestro ojo a la retina, vemos un punto del objeto. Entrando muchos rayos nuestro cerebro "ve" el objeto entero:



Este enfoque tiene un problema: por cada rayo que llega a nuestro ojo, hay un montón que no llegan. Así que si simulamos en el ordenador una fuente luminosa que va lanzando rayos de luz que al final alcanzan la cámara (un ojo "virtual") habrá muchísimos rayos que no lleguen a la cámara, y por lo tanto son cálculos desperdiciados. El proceso que hay que hacer es el inverso: por cada punto de la imagen, lanzar un rayo hacia un objeto. Cuando el rayo lo alcanza, se calcula el color del objeto (luego lo expliiiico) en ese punto y ¡voilá!


Como véis, me mola dibujar con el OpenOffice.org Draw (deformación profesional).
A lo que íbamos ¿cómo se calcula el color de un objeto? Así a bote pronto, depende del color propio del objeto, y de la cantidad y color de la luz que le llegue. Voy a generar un par de imágenes con POVRay para que lo veáis:


Son 2 imágenes de la misma esfera bola de billar desde 2 puntos de vista distintos. El color del objeto en un punto lo descomponemos en 3 componentes:
  1. Especular: la parte blanca, el "destello". Como véis, no está en el mismo sitio en las 2 imágenes, luego depende del ángulo que forma la luz con el rayo proyectado.
  2. Difusa: la parte roja. No cambia con el ángulo en el que la mires. Sólo depende del ángulo entre el objeto y la luz.
  3. Ambiente: la parte negra. Es el color que tiene el objeto cuando no está iluminado. No depende de ningún ángulo.
Al final todo esto son números entre 0 y 1 (0-100%, si lo véis más fácil), que definen cuánto brilla un objeto, si es mate (componente especular cercana a 0), si está pulido (componente especular cercana a 1), si brilla con luz propia (componente ambiente mayor que 0).

El próximo artículo describo cómo se sabe si un rayo da en un objeto y cómo se calculan los ángulos (muy por encima). Que para algo di Informática Gráfica.

1 comentario:

Jota___ dijo...

Gracias por hacerme un poquito más listo.