# Imagen generada por ordenador

Las imágenes generadas por ordenador nos acompañan en cada paso que damos (Animación, publicidad, efectos especiales...). El objetivo de esta lección es realizar una breve introducción a cómo se generan estás imágenes.

## Introducción

La Imagen generada por ordenador, en inglés Computer-Generated-Imagery (CGI), hace referencia a las imágenes generadas integramente en un ordenador (a excepción de elementos como texturas...), mediante complejas técnicas y algoritmos. Este término se suele utilizar para referirse a imágenes 3d, aunque también engloba a las imágenes 2d.
Las imágenes generadas por ordenador se utilizan en gran cantidad de ámbitos, como en el cine, videojuegos, publicidad o incluso simuladores.

## Modelado

Llamamos modelado al proceso de crear una representación matemática de un objeto, superficie o escena en 3d. De esta manera, el resultado de este proceso es un modelo 3d. Una vez creado, se puede mostrar como imagen 2d a través del renderizado o crearlo físicamente con impresión 3d.
La técnica más usada para construir un modelo en 3d es el modelado mediante polígonos. Se trata de construir polígonos conectados entre sí para modelar los objetos. De esta manera, cuantos más polígonos se compongan el modelo, más cercano será a la realidad el objeto modelado. Para facilitar este proceso se puede usar la técnica llamada LowPoly, en la que se usan dos imágenes de referencia, de frente y de perfil (pudiendo añadir una tercera con la vista en altura), del objeto que se quiere modelar. De esta forma, y empezando con un único polígono, se le va dando forma de forma que se ajuste a las imágenes de referencia (alternando entre las distintas vistas) hasta llegar a un modelo con el suficiente grado de detalle.

## Rasterización

La rasterización es el proceso por el cual una imagen descrita en un formato gráfico vectorial se convierte en un conjunto de píxeles o puntos para ser desplegados en un medio de salida digital, como una pantalla de computadora, una impresora electrónica o una Imagen de mapa de bits (bitmap). Este procedimiento se suele usar en momentos muy concretos:
* Cuando se trabaja con imágenes de una gran complejidad (con muchos objetos independientes, muchos rellenos degradados, muchas capas, etc.) Ahora bien, puesto que al crear un mapa de bits se elimina toda información de los objetos vectoriales, debe tenerse en cuenta la posibilidad de efectuar copias de seguridad del archivo vectorial antes de ser rasterizado, o bien esperar a que la parte de la imagen que se va a rasterizar sea ya definitiva.
* Cuando se van a aplicar filtros a la imagen resultante, cosa que no se efectúa con los objetos iniciales.
El resultado de este método de trabajo híbrido es un archivo que presenta ciertas partes vectoriales y ciertas partes bitmap. El mismo puede guardarse sin mayor problema en el formato correspondiente al programa de ilustración (en algunos casos, se permite que el mapa de bits no forme parte del archivo, sino que se enlace externamente al fichero vectorial solamente).
Un procesador de imágenes rasterizadas, o RIP, es un dispositivo que se usa en los sistemas de impresión para producir una imagen de mapa de bits.
Pasos de un Procesador de imágenes rasterizadas (RIP)
* Interpretación. Este es el paso donde el lenguaje de descripción de página soportado se transforma en una representación de una página particular. Muchos RIPs procesan páginas con tanta intensidad que el funcionamiento habitual de la máquina es solo para la página en curso, es decir, se procesa una sola página cada vez. Una vez que la página se ha generado se procesa la siguiente.
* Renderizado. Proceso a través del cual la representación interna particular se transforma en un mapa de bits de tono continuo. Hay que hacer notar que, en la práctica, la interpretación y el renderizado se hacen juntos con bastante frecuencia. Los lenguajes simples (en su mayor parte los más antiguos) se diseñaron para trabajar con mínimos requerimientos de hardware, por eso tienden a ejecutar el renderizado directamente.
* Proyección. Para que se imprima, un mapa de bits de tonos continuos se ha de transformar previamente en otro de tonos medios (patrones de puntos). Hay dos métodos o tipos para este paso. La proyección por modificación en la amplitud (AM o Amplitude Modification) y la proyección estocástica o por modulación en la frecuencia (FM o Frecuency Modulation). En la proyección AM, la variación del tamaño de los puntos depende de la densidad del objeto y sus valores tonales. Los puntos se colocan en una cuadrícula fija pero son mayores si corresponden a un área de la imagen de alta densidad. En la proyección FM, el tamaño de los puntos permanece siempre constante y se ubican en un orden aleatorio para crear áreas de imagen más claras u oscuras. El emplazamiento de los puntos, y la densidad de estos, se controla a partir de un sofisticado algoritmo matemático.

## Renderización

Renderizar puede definirse como el proceso de generar imágenes a partir de un modelo 2d o 3d. De esta manera podríamos ver la renderización como hacer una foto o un video en la vida real.

### Tipos

Distinguimos dos tipos de renderizado:
* Renderizado en tiempo real (Real Time). Es el que se realiza, por ejemplo, en videojuegos. El objetivo es conseguir una imagen medianamente realista con unos requisitos mínimos (25 fps).
* Not Real Time. Es el utilizado en multimedia como el cine, videos… . Este tipo de renderizado es mucho más lento.De esta manera, los tiempos de renderizado para un fotograma pueden ir desde varios segundos hasta varias horas. En el caso de escenas en las que se busca el realismo, se suelen emplear técnicas desarrolladas para simular el comportamiento natural o real de objetos, luces etc... Como habrás deducido, este renderizado tiene un coste computacional muy elevado, aunque el desarrollo tecnológico en los últimos años hace posible realizar este tipo de renderizado en equipos personales a un precio asumible.

### Modelos y algoritmos

Dentro de esta etapa de renderizado distinguimos encontramos modelos de reflexión y sombreado que son usados para describir el aspecto de una superficie. De esta manera:
* Modelos de reflexión: Describen como la luz interactúa con la superficie en un determinado punto
* Modelos de sombreado: Describen como las propiedades de los materiales varían a lo largo de la superficie.
La renderización está en continua evolución. De esta manera, nos encontramos con gran cantidad de algoritmos de renderizado, cuyo objetivo es conseguir escenas más realista. Para renderizar una escena existen gran cantidad de algoritmos, desde los más básicos hasta los más avanzados, como trazado de rayos (ray tracing) o renderizado de radiosidad.
Por ejemplo, El trazado de rayos consiste en trazar rayos desde el observador hasta la escena. Así, cuando se detecta un objeto, el algoritmo estima la luz entrante en ese punto, examina las propiedades del material (Si es opaco, translucido, brillante) y combina esta información para calcular el color de cada pixel. Esta técnica consigue gran realismo en las escenas, pero tiene un gran coste computacional

### Tubería gráfica

La tubería gráfica, tambien llamada tubería de renderización es la secuencia de pasos dados para renderizar la escena. De esta manera, la tubería gráfica recibe como entrada una escena tridimensional (modelo) y genera como salida una imagen en 2d. Aunque cada API gráfica tiene sus propios pasos, todas comparten el mismo concepto:
* Modelado Se recibe el modelo 3d de la escena. Generalmente generados con mallas de polígonos.
* Transformación: Se ubica el modelo en el espacio tridimensional
* Iluminación La geometría de la escena 3D es iluminada de acuerdo con la ubicación de las fuentes de luz, reflejo y otras propiedades de las superficies
* Proyección: Se proyecta la escena 3D sobre un plano 2D, de acuerdo con la proyección elegida.
* Recorte (Clipping): Se elimina la parte de la escena que cae fuera del area visible, para acelerar el renderizado.
* Rasterización: Se realiza un proceso de rasterización por el cual se determina el valor de cada píxel.
* Texturizado de fragmentos: Los datos de cada fragmento son procesados por un shader de fragmentos. Este paso es opcional.
* Visualización: Se visualiza la escena en pantalla.

### Shaders

Los shaders (a veces llamados 'sombreadores' en español) son programas que permiten al desarrollador ejecutar ciertas transformaciones sobre la escena en algunas de las fases de renderizado consiguiendo mejoras importantes en la escena final. En la figura que representa la tubería gráfica de OpenGL, podemos ver en azul las fases que son programables, que precisamente son shaders. De esta manera distinguimos distintos tipos de shaders, en función de sus características y en que fase de la tubería gráfica se aplican:
* Vertex Shader: Actúa sobre las estructuras de los vértices.
* Geometry Shader: Actúa generando nuevas primitivas como líneas, puntos o triángulos.
* Pixel Shader: Actúa sobre los píxeles. No tiene conocimiento de la geometría.
La principal ventaja de los shaders es que trabajan directamente sobre la GPU, ofreciendo al programador gran libertad para crear escenas y añadir efectos de iluminación.

## Fractales

Un fractal es un objeto geométrico cuya estructura básica, fragmentada o irregular, se repite a diferentes escalas. Muchas estructuras naturales son de tipo fractal. La propiedad matemática clave de un objeto genuinamente fractal es que su dimensión métrica fractal es un número no entero. Se han utilizado técnicas de fractales en la compresión de datos, Modelado de formas naturales, Sistemas dinámicos, en manifestaciones artísticas.

## Creatividad Computacional

El estudio y simulación del comportamiento creativo natural y artificial del ser humano por medio de computadoras y programas de computación. Inteligencia artificial aplicada a la creación musical, artística y literaria.
Para esto contamos con algoritmos y programas desarrollados con la finalidad de ser autosuficientes en la creación de imágenes como por ejemplo:
* The painting fool
* AARON
* The Next Rembrandt

## Hardware

No se puede hablar de Imagen generada por ordenador, sin hablar brevemente del hardware. Como hemos indicado anteriormente, los algoritmos de renderizado son muy costosos computacionalmente hablando. De esta manera, el hardware cobra especial importancia. El elemento del computador encargado de generar las imágenes que son mostradas en el computador o en cualquier otro dispositivo es la tarjeta gráfica. Estas constan de varios componentes siendo el principal la GPU. La GPU es un procesador dedicado exclusivamente al procesamiento de gráficos. Así, está optimizado para ejecutar operaciones en coma flotante, abundantes en la generación de gráficos por computador.
Aunque las tarjetas gráficas avanzadas tienen un precio elevado, hoy en día se pueden adquirir tarjetas gráficas a un precio asumible y con una potencia que permite a cualquier usuario, generar gráficos avanzados, sin la necesidad de realizar un desembolso muy elevado.

## Uso en la actualidad

En la actualidad nos encontramos con que las Imagenes generadas por ordenador son usadas en gran cantidad de ámbitos e industrias:
* Cine: Una de las industrias que más hace uso de estas imágenes es la del cine. La evolución de las imágenes generadas por ordenador y del hardware, permite que cada año veamos películas con efectos especiales más increibles y realistas.
* Videojuegos: Si hay algo con lo que todo el mundo asocia la "Imagen generada por ordenador" son los videojuegos.
* Marketing y publicidad: En la actualidad se ha generalizado el uso de imágenes generadas por ordenador para promocionar productos, realizar anuncios, renders.. , para captar la atención de los potenciales clientes.
* Arquitectura: No hay estudio de arquitectura que no use programas específicos, para generar imágenes de los edificios, viviendas, calles.. que se proyectan, antes de construirlos.
* Simuladores: Por ejemplo, con fines académicos para el aprendizaje del manejo de diversos tipos de vehículos (coches, aviones, etc.).

## Conclusiones

En este artículo, hemos realizado un breve repaso a las bases de la "Imagen generada por ordenador", haciendo énfasis en la generación de imágenes 3d. De esta manera, a modo de resumen, podemos decir que la generación de imágenes por ordenador sigue estos pasos:
* Modelado: Se construye un modelo en tres dimensiones, es decir, se dan los puntos en el espacio 3d para formar los objetos que componen la escena.
* Renderización: Se trata de tomar una foto del modelo generado. Es decir, se procesa el modelo 3d, con el fin de generar la imagen. Este es el proceso más costoso y complejo, donde se aplican complejos algoritmos, para que el resultado sea lo más realista posible.
Hoy en día la Imagen generada por ordenador nos acompaña en cada paso que damos. El uso de este tipo de imágenes se ha extendido a prácticamente todos los ámbitos, de ahí que esté en continua evolución, haciendo posible la generación de imágenes, cada día más realistas e impresionantes.

## Lecciones relacionadas

* Introducción, Formatos y Procesamiento de la Animación y Video
* Introducción, Formatos y Procesamiento de la Animación
* Animación 3D