Mostrando entradas con la etiqueta realidad virtual. Mostrar todas las entradas
Mostrando entradas con la etiqueta realidad virtual. Mostrar todas las entradas

domingo, 22 de junio de 2014

Texturización con OpenGL

La texturización es una técnica ampliamente utilizada en el diseño de objetos 2D y 3D. Es, por tanto, muy útil a la hora del realizar el blending de objetos virtuales sobre una imagen real y perfectamente integrados en ella, que se realiza en la mayoría de las aplicaciones de Realidad Aumentada. Por este motivo, dedicaré un post a comentar los aspectos esenciales del proceso de texturización con primitivas OpenGL. Toda la información está extraída de un fantástico manual de José María Buades, el cual os recomiendo para completar lo aquí apuntado.


Gracias a la texturización el número de polígonos para representar un objeto se ve reducido enormemente. La texturización consiste en "pegar" un póster (una imagen) a una primitiva (un polígono) que sustituye (o complementa) el color de la primitiva. Si deseamos renderizar una pared de ladrillos, necesitamos un polígono para cada ladrillo, además de otros tantos para renderizar el espacio que hay entre estos, en cambio con texturas podemos renderizar una pared entera con solo un polígono y una textura que se repite a lo largo del polígono.

textura
ejemplo de textura
proceso texturización
proceso de texturización

En este caso la textura es 2D, pero puede ser de una dimensión o tres dimensiones (textura 3D). Además la textura puede contener una, dos, tres (R, G, B) o cuatro (R, G, B, A) componentes por texel (equivalente al pixel de una imagen). Lo más usual es tener una textura de dos dimensiones con tres componentes RGB.

Para OpenGL las texturas 1D, 2D o 3D son arrays uni, bi o tri-dimensionales respectivamente, que le pasaremos mediante una dirección de memoria. OpenGL no ofrece ningún mecanismo para llevar la textura desde un fichero hasta memoria, si deseamos cargar una textura debemos ser nosotros quienes usando alguna librería o el API correspondiente del SO cargue la imagen. Posteriormente debemos pasarla a un formato aceptado por OpenGL y finalmente se la entregamos a OpenGL como un puntero a memoria.

Pasos en la texturización
  1. Crear un objeto textura y especificar la textura para este objeto
  2. Indicar como como se aplica la textura a cada vértice
  3. Habilitar el mapeo de texturas
  4. Dibujar la escena, indicando las coordenadas de la textura y las coordenadas geométricas (vértices)
  5. Objetos textura
Los objetos textura son la encapsulación de una textura, al objeto textura le identifica un entero sin signo. Los objetos textura son creados y destruidos, pero no se comparten entre los distintos contextos de OpenGL (distintas ventanas). Las funciones relacionadas con los objetos texturas son las siguientes:

Para crear objetos textura:
void glGenTextures(GLsizei n, GLuint *textureNames): Solicitamos n objetos textura, el nombre o identificador de estos objetos son devueltos en textureNames que previamente le habremos reservado espacio.

Para eliminar objetos textura:
void glDeleteTextures(GLsizei n, GLuint *textures): Solicitamos que los n objetos textura especificados en textures sean borrados.

Para usar un objeto textura:
void glBindTexture(GLenum target, GLuint textureName): Selecciona la textura textureName como textura activa para el target especificado (GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D). Con esta función marcamos el objeto textura como el objeto activo, tener un objeto textura como objeto activo tiene dos funcionalidades, indicar que textura se utiliza y sobre que textura modificamos los parámetros de texturización, estos parámetros los veremos más adelante

Para especificar la textura disponemos de tres funciones, una para cada dimensión, veremos la función para 2D glTexImage2D y es extensible lo mismo para 1D y 3D.

void glTexImage2D(GLenum target, GLint level, GLint internalFormat, GLsizi width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *texels)
  • target debe ser GL_TEXTURE2D.
  • level nivel de detalle, se usa cuando aplicamos técnicas de mipmapping, en nuestro caso cero.
  • internalFormat podemos elegir entre una variedad, generalmente GL_RGB. Hace referencia al tipo de textura que deseamos.
  • width, height y border indican el tamaño que debe ser (2n+b)x(2m+b). Normalmente el borde (b) es cero, un tamaño posible es 64x128. Si no especificamos un tamaño correcto la textura no se muestra.
  • format generalmente GL_RGB o GL_EXT_BGR.
  • type tipo en el que esta almacenada la textura, puede ser GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_INT, GL_UNSIGNED_INT, GL_FLOAT, GL_BITMAP. 
  • texels array que contiene la textura, de izquierda a derecha y de abajo a arriba.
Especificamos cual es la textura para el objeto textura activo. Es conveniente por cuestiones de rendimiento que por cada textura que utilicemos tengamos un objeto textura y mantener los objetos textura durante toda la aplicación, en lugar de crearlo y destruirlo cada vez que se usa la textura, o tener un solo objeto textura y modificar la textura que se utiliza.

Habilitar texturas

Ya hemos visto como crear texturas, especificar cual es la textura que contiene el objeto. Para habilitar o deshabilitar la texturización lo indicamos con la instrucción glEnable() pasando como parámetro el tipo de textura GL_TEXTURE_1D, GL_TEXTURE_2D o GL_TEXTURE_3D. En caso de que este habilitada más de uno se aplicará el tipo de mayor dimensión.

Dibujar la primitiva

Cuando renderizamos la primitiva, debemos asignar una coordenada textura a cada vértice. Podemos especificar la coordenada o dejar a OpenGL que la genere automáticamente a partir de un método seleccionado.

Para especificarla nosotros mismos lo hacemos con la función glTexCoord*(). A cada pixel se le asigna un texel interpolando las coordenadas textura de los vértices de la misma forma que se hacia para el color. Recordar que la coordenada de la textura igual que el color, la normal u otros parámetros se especifican antes de indicar el vértice, una vez indicado no se puede modificar.

Las coordenadas de la textura (s, t) varían de 0 a 1. Por ejemplo un textura de 128x64 su rango viene dado por [0,1]x[0x1], los números mayores a 1 representan que la textura se repite, p.e:

glBegin(GL_QUADS);
glColor3f(1.0, 1.0, 1.0);glTexCoord2f(0.0, 0.0);// s = 0 t = 0
glVertex3f(-1.0, -2.0, 0.0);

glTexCoord2f(0.0, 3.0);// s = 0 t = 3
glVertex3f(-1.0, 2.0, 0.0);

glTexCoord2f(2.0, 3.0);// s = 2 t = 3
glVertex3f(1.0, 2.0, 0.0);

glTexCoord2f(2.0, 0.0);// s = 2 t = 0
glVertex3f(1.0, -2.0, 0.0);
glEnd();


Este ejemplo extiende la textura en el cuadrado repitiéndola 3 veces verticalmente y 2 veces horizontalmente. Otra posibilidad es que asigne el ultimo texel de la textura cuando la coordenada sale del rango [0, 1]. La selección entre un método u otro se hace con la función siguiente:

void glTexParameter{if}(GLenum target, GLenum pname, TYPE param): Indica como se trata la textura, target puede valer GL_TEXTURE_1D, GL_TEXTURE_2D o GL_TEXTURE_3D.

En función de pname tiene un significado u otro, aquí solo queda explicado lo referente a la extensión de la textura.

ParametroValores posiblesSignificado
GL_TEXTURE_WRAP_SGL_CLAMP, GL_CLAMP_TO_EDGE, GL_REPEATGL_CLAMP utiliza el color de borde en las coordenadas fuera del rango [0, 1]
GL_TEXTURE_WRAP_TGL_CLAMP, GL_CLAMP_TO_EDGE, GL_REPEATGL_CLAMP_TO_EDGE ignora el color de borde y usa el texel más próximo del rango [0, 1]
GL_TEXTURE_WRAP_RGL_CLAMP, GL_CLAMP_TO_EDGE, GL_REPEATGL_REPEAT repite la textura, usa como coordenada el modulo 1 de la coordenada especificada
GL_TEXTURE_BORDER_COLORUn array RGBEspecifica el color del borde


Aplicar texturas

Una textura es un póster que adherimos al polígono, este póster los podemos combinar con el color del polígono, lo que nos abre un abanico de posibilidades. Podemos elegir entre cuatro modos de combinar el color del polígono con el color de la textura. La asignación del método para combinar el color y la textura se realiza con la función glTexEnv* :

void glTexEnv{if}{v}(GLenum target, GLenum pname, TYPE param): Indica cual es la función de texturización, target debe valer GL_TEXTURE_ENV.

Si pname vale GL_TEXTURE_ENV_MODE param puede valer GL_DECAL, GL_REPLACE, GL_MODULATE o GL_BLEND, para especificar como se mezcla el color del polígono con la textura. Si pname vale GL_TEXTURE_ENV_COLOR param es un array de cuatro puntos flotantes representando las componentes R, G, B, A. Estos valores solo se usan si se ha especificado el modo GL_BLEND.

Para simplificar veremos por encima que es cada modo cuando la textura es RGB, a continuación veremos una tabla donde se puede ver las fórmulas de combinación para cada modo, estos dependen de las componentes que especifica la textura.

GL_DECAL, GL_REPLACE : Usa el color de la textura, ignora el color del polígono.
GL_MODULATE : Usa el color de la textura multiplicado por el color del polígono, es útil para renderizar con iluminación las texturas. Con la iluminación activa, se renderiza el polígono en color blanco, que multiplicado por la textura, nos servirá como escalar de la cantidad de iluminado que esta.
GL_BLEND : Mezcla el color del polígono y el color especificado en GL_TEXTURE_ENV_COLOR, en las proporciones definidas por la textura.

Formato TexturaGL_REPLACEGL_MODULATEGL_DECALGL_BLEND
GL_ALPHAC = CfA = AtC = Cf
A = Af·At
undefinedC = Cf
A = Af·At
GL_LUMINANCEC = LtA = AfC = Cf·Lt
A = Af
undefinedC = Cf·(1 - Lt) + Cc·Lt
A = Af
GL_LUMINANCE_ALPHAC = ItA = AtC = Cf·Lt
A = Af·At
undefinedC = Cf·(1 - Lt) + Cc·Lt
A = Af·At
GL_INTENSITYC = ItA = ItC = Cf·It
A = Af·It
undefinedC = Cf·(1 - It) + Cc·It
A = Af·(1 - It) + Ac·It
GL_RGBC = CtA = AfC = Cf·Ct
A = Af
C = Ct
A = Af
C = Cf·(1 - Ct) + Cc·CtA = Af
GL_RGBAC = CtA = AtC = Cf·Ct
A = Af·At
C = Cf·(1 - At) + Ct·At
A = Af·At
C = Cf·(1 - Ct) + Cc·CtA = Af·At

Este es el resultado de un buen texturizado

texturización
ejemplo de imagen texturizada



lunes, 12 de mayo de 2014

AR Conceptos III

Esta es la tercera entrada de la serie de AR Conceptos, como en las anteriores, realizaré un listado y una breve explicación de los más importantes sin dejar, por ello, de dedicar diferentes entradas a otros tantos conceptos que requieran una explicación mayor.


Visualización 3D o gráficos 3D por ordenador

Es es conjunto de tecnologías y técnicas gráficas desarrolladas mediante software específico para crear objetos o diseños gráficos tridimensionales. Un gráfico 3D difiere de uno bidimensional principalmente por la forma en que ha sido generado. Este tipo de gráficos se originan mediante un proceso de cálculos matemáticos sobre entidades geométricas tridimensionales producidas en un ordenador, y cuyo propósito es conseguir una proyección visual en dos dimensiones para ser mostrada en una pantalla o impresa en papel.

Alrededor de  la visualización 3D existen diferentes técnicas y conceptos.

Modelado
La etapa de modelado consiste en ir dando forma a objetos individuales que luego serán usados en la escena creada. Existen diversos tipos de modelado, con NURBS y modelado poligonal o subdivisión de superficies. Además, aunque menos usado, existe otro tipo llamado Image Based Modeling (IBM) que consiste en convertir una fotografía a 3D mediante el uso de diversas técnicas, de las cuales, la más conocida es la fotogrametría cuyo principal impulsor es Paul Debevec. El Modelado de Superficies no tiene curvas calculadas en cada linea (ejemplo SketchUp).

modelado por superficies
Modelado por superficies NURBS

Iluminación
Creación de luces de diversos tipos puntuales, direccionales en área o volumen, con distinto color o propiedades. Esto es la clave de una animación. Gran parte de la iluminación en 3D requiere del entendimiento físico de la luz en la realidad, este entendimiento puede ir desde lo más básico en el tema como por ejemplo el concepto de iluminación global hasta comportamientos complejos y extraños de la luz como la dispersión en superficies y subsuperficies

Animación
La animación es muy importante dentro de los gráficos porque en estas animaciones se intenta imitar a la realidad misma; por esto es un trabajo que usualmente requiere muchas horas. Los objetos se pueden animar en cuanto a:
  • Transformaciones básicas en los tres ejes (XYZ), rotación, escala y traslación.
  • Forma: mediante esqueletos, mediante deformadores o dinámicas.

Renderizado
renderizado
Renderizado
Mediante el renderizado se consiguen imágenes realistas. Proceso de generar una imagen o vídeo mediante el calculo de iluminación global (GI) partiendo de un modelo en 3D. Este término técnico es utilizado por los animadores o productores audiovisuales (CG) y en programas de diseño en 3D como por ejemplo 3DMax, Maya, Blender, etc.

El proceso de renderizado se desarrolla con el fin de generar en un espacio 3D formado por estructuras poligonales; una simulación realista del comportamiento tanto de luces, texturas y materiales (agua, madera, metal, plástico, tela, etcétera) como también de los comportamientos físicos y animación, es el caso de la simulación de colisiones y fluidos, simulando ambientes y estructuras físicas verosímiles. Una de las partes más importantes de los programas dedicados a la renderización es el motor de renderizado, el cual es capaz de realizar complejos cálculos como radiosidad, raytrace (trazador de rayos), canal alfa, reflexión, refracción o iluminación global (GI).

El proceso de rénder necesita una gran capacidad de cálculo, pues requiere simular gran cantidad de procesos físicos complejos. La capacidad de cálculo se ha incrementado rápidamente a través de los años, permitiendo un grado superior de realismo en los rénders. Los estudios de cine que producen animaciones generadas por ordenador hacen uso, en general, de lo que se conoce como render farm (granja de rénder) para acelerar la producción de fotogramas.


Radiosidad
La radiosidad es un conjunto de técnicas para el cálculo de la iluminación global que tratan de resolver el problema básico de la renderización de la forma más realista posible en el campo de los gráficos 3D por computadora. Dicho problema es el transporte de la luz que sólo se puede modelar de forma óptima considerando que cada fuente luminosa emite un número enorme de fotones, que rebotan al chocar contra una superficie describiendo una cantidad de trayectorias imposibles de simular en un computador. Una de las técnicas empleadas en el cálculo de la radiosidad es el método de Montecarlo para resolver este problema mediante números aleatorios y de forma estadística.

Raytrace
Determina las superficies visibles en la escena que se quiere sintetizar trazando rayos desde el observador (cámara) hasta la escena a través del plano de la imagen. Se calculan las intersecciones del rayo con los diferentes objetos de la escena y aquella intersección que esté más cerca del observador determina cuál es el objeto visible.

El algoritmo de trazado de rayos extiende la idea de trazar los rayos para determinar las superficies visibles con un proceso de sombreado (cálculo de la intensidad del píxel) que tiene en cuenta efectos globales de iluminación como pueden ser reflexiones, refracciones o sombras arrojadas. Para simular los efectos de reflexión y refracción se trazan rayos recursivamente desde el punto de intersección que se está sombreando dependiendo de las características del material del objeto intersecado. Para simular las sombras arrojadas se lanzan rayos desde el punto de intersección hasta las fuentes de luz. Estos rayos se conocen con el nombre de rayos de sombra (shadow rays).

El algoritmo básico de trazado de rayos fue mejorado por Robert Cook (1985) para simular otros efectos en las imágenes mediante el muestreo estocástico usando un método de Montecarlo; entre estos efectos podemos citar el desenfoque por movimiento (blur motion), la profundidad de campo o el submuestreo para eliminar efectos de aliasing en la imagen resultante.

En la actualidad, el algoritmo de trazado de rayos es la base de otros algoritmos más complejos para síntesis de imágenes (mapeado de fotones, Metropolis, entre otros) que son capaces de simular efectos de iluminación global complejos como la mezcla de colores (color blending) o las cáusticas.

Proyección
Es la transformación de coordenadas para convertir cada objeto 3D desde el sistema de coordenadas de visualización (coordenadas de la cámara) en un objeto 2D dibujado sobre en el plano de visualización (coordenadas de pantalla). Ecomputer vision existen distintos modelos de proyección, aunque los más utilizados son:

  1. Modelo de proyección paralelaConsiste en proyectar puntos del espacio contra el plano de proyección mediante haces de rectas siempre paralelas entre sí. Esta técnica de representación gráfica se utiliza en diseños de ingeniería y arquitectura ya que su principal ventaja es que mantiene las proporciones relativas de lo representado y se puede medir sobre él directamente. De esta manera se puede reconstruir el objeto fácilmente a partir de representaciones concretas.
  2. Modelo de proyección en perspectivaConsiste en la proyección de los vértices de los objetos de la escena mediante trayectorias convergentes en un punto central del plano de proyección. Se consigue efecto distancia al quedar representados los objetos más alejados con un menor tamaño. Las escenas generadas utilizando este modelo de proyección son más realistas, ya que ésta es la manera en que el ojo humano y las cámaras físicas forman imágenes.
    proyección en perspectiva
    Modelo de proyección en perspectiva


Visualización 3D para Realidad Aumentada

En esta entrada, trataré de explicar conceptos básicos sobre visualización 3D que son necesarios para trabajar en el ámbito de la Realidad Aumentada. Hablaré de sistemas de coordenadas, parámetros de visualización y transformaciones


Inicialmente, necesitamos definir un sistema de coordenadas de visualización para los parámetros de visualización de la cámara (en negro en el detalle, es la matriz P; que si además tenemos en cuenta la distorsión también se incluye el rojo) que nos permita definir el plano de proyección o visualización (en verde en el detalle; es lo que ve la cámara), donde podamos proyectar cada objeto 3D traído desde sus coordenadas locales (en el detalle en azul) hasta las coordenadas de visualización.

relacion entre sist coord
Relación entre los diferentes sistemas de coordenadas definidos

Se suceden diferentes transformaciones de coordenadas para llevar cada objeto 3D desde la escena (coordenadas locales) hasta el sistema de coordenadas de visualización (coordenadas de la cámara) y de ahí proyectarlos en el plano de visualización (coordenadas de pantalla). Esta última transformación dependerá del modelo de proyección elegida que en computer vision pueden ser diversos; aunque los más utilizados son el de proyección paralela y el de proyección en perspectiva. Dedicaré otra entrada a explicarlos.

transformaciones RA
Transformaciones RA
El proceso de visualización 3D, en concreto, comienza por posicionar y orientar los objetos de la escena respecto del SRU, obteniendo las coordenadas universales del objeto (transformación de modelado). A continuación se hace lo mismo con la cámara, obteniendo las coordenadas de visualización (transformación de visualización) y el volumen de visualización.
En este momento cámara y objetos están posicionados a partir del origen del RSU y mirando en dirección negativa del eje Z. ARToolKit hace estos dos procesos en uno solo, al cargar la matriz T en el modelview de OpenGL.

A continuación, mediante la transformación de proyección (en perspectiva en nuestro caso) se transforma el volumen de visualización en un cubo unitario obteniendo las coordenadas normalizadas. Hemos pasado los objetos de 3D a 2D y las coordenadas Z de los puntos son almacenadas en un Buffer de profundidad (Z-Buffer). Los objetos que quedan fuera del volumen son eliminados o recortados para obtener las coordenadas recortadas (transformación de recorte).

Finalmente, se ajustan las coordenadas x e y del cubo a las coordenadas de la pantalla, pudiendo adaptarse a diferentes tamaños y resoluciones (transformación de pantalla). En una etapa final de rasterización, se toman las coordenadas de la pantalla y el Z-Buffer y se definen los colores de los pixels.

transformación de visualización
Transformación de visualización. Las zonas con sombra corresponden al volumen de visualización



domingo, 4 de mayo de 2014

AR Conceptos I

Muchas son las tecnologías implicadas y los conceptos técnicos asociados a la Realidad Aumentada (RA). En esta serie de entradas AR Conceptos, realizaré un listado y una breve explicación de los más importantes sin dejar, por ello, de dedicar diferentes entradas a otros tantos conceptos que requieran una explicación mayor.


La Realidad Virtual (RV)
realidad_virtual
Realidad virtual
Es una ciencia basada en el empleo de ordenadores y otros dispositivos, cuyo fin es producir una apariencia de realidad que permita al usuario tener la sensación de estar presente en ella. Se consigue mediante la generación por ordenador de un conjunto de imágenes que son contempladas por el usuario a través de un dispositivo denominado visor. A diferencia de la Realidad Aumentada, las tecnologías  de RV sumergen al usuario dentro de un entorno completamente sintético, sin  consciencia del mundo real que lo rodea.


Inteligencia Artificial (IA)
Es un área multidisciplinaria que, a través de ciencias, tales como la informática, la lógica y la filosofía, estudia la creación y diseño de entidades capaces de razonar por sí mismas utilizando como paradigma la inteligencia humana.

Visión por Computador (CV)
También llamada visión artificial o visión técnica, es un subcampo de la inteligencia artificial cuyo propósito es programar un computador para que "entienda" una escena o las características de una imagen. Entre sus objetivos se incluyen:

  • La detección, segmentación, localización y reconocimiento de ciertos objetos en imágenes (por ejemplo, caras humanas).
  • La evaluación de los resultados (por ejemplo, segmentación, registro).
  • Registro de diferentes imágenes de una misma escena u objeto, es decir, hacer concordar un mismo objeto en diversas imágenes.
  • Seguimiento de un objeto en una secuencia de imágenes.
  • Mapeo de una escena para generar un modelo tridimensional de la escena; este modelo podría ser usado por un robot para navegar por la escena.
  • Estimación de las posturas tridimensionales de humanos.
  • Búsqueda de imágenes digitales por su contenido.

Estos objetivos se consiguen por medio de reconocimiento de patrones, aprendizaje estadístico, geometría de proyección, procesamiento de imágenes, teoría de grafos y otros campos. La visión artificial cognitiva está muy relacionada con la psicología cognitiva y la computación biológica.


Esquema de las relaciones entre la visión por computadora y otras áreas afines

Computación Gráfica (CG)
Es el campo de la informática visual, donde se utilizan computadoras tanto para generar imágenes visuales sintéticamente como para integrar o cambiar la información visual y espacial probada del mundo real. Herramientas informáticas como maya, 3D studio MAX o blender son de las más utilizadas.

Marcador artificial o Marca
Son impresiones cuadradas o circulares  normalmente en blanco y negro, utilizadas, una vez detectadas, para posicionar la cámara virtual y ubicar objetos 3D en el registro. Los principales factores que afectan a la detección de marcas son su tamaño físico, su complejidad, su orientación relativa respecto de la cámara y las condiciones de iluminación. Algunos ejemplos de marcadores son:


marcadores


Plano de la imagen
En proyección, es el plano perpendicular a las líneas de mira (trayectorias paralelas desde el ojo del observador hasta un punto particular sobre el objeto observado). Este plano esta localizado entre el ojo del observador y el objeto que esta siendo mirado.

Registro o escena
Imágenes reales registradas por una cámara en el momento o previamente. El mayor problema que implica obtener el registro es calcular la posición relativa de la cámara real respecto de la escena para poder generar imágenes virtuales correctamente alineadas con esa imagen real (posición y rotación). El registro debe ser preciso (errores de muy pocos milímetros son muy sensibles en determinadas aplicaciones, como en medicina  o en soporte a las aplicaciones industriales) y robusto (debe funcionar correctamente en todo momento). El registro puede realizarse empleando diferentes  tipos de sensores y técnicas (las más extendidas son mediante el uso de tracking visual).

Tracking
Es un conjunto de métodos que tratan de obtener una estimación de la trayectoria en el espacio realizada por un objeto o sensor. Se pueden emplear diferentes tipos de sensores como mecánicos, magnéticos, ondas sonoras, inerciales o cámaras de visión.  Las cámaras están actualmente integradas en multitud de dispositivos portátiles y permiten realizar tracking a un coste reducido.

Tracking visual
El tracking basado en cámaras de vídeo es un subcampo del tracking 3D en el que se emplean técnicas de visión por computador para obtener el posicionamiento de seis grados de libertad de la cámara  (tres grados de la posición y tres de la orientación). Para calcular la posición de la cámara respecto al mundo real se necesitan un conjunto de referencias tridimensionales. Algunos  ejemplos de estas referencias pueden ser marcas con una descripción geométrica previamente conocida u objetos previamente modelados. Realizando una comparación con lo que percibe la cámara en el mundo real es posible obtener el posicionamiento relativo a estas  referencias.

viernes, 11 de abril de 2014

AR Aplicaciones

La prestigiosa publicación británicac The Economist aseguró en Septiembre de 2009 que “intentar imaginar como se utilizará la Realidad Aumentada es como intentar predecir el futuro de la tecnología web en 1994”. Según la consultora Juniper Research, la Realidad Aumentada en dispositivos móviles generará más de 700 millones de dólares en el 2014, con más de 350 millones de terminales móviles con capacidad de ejecutar este tipo de aplicaciones. 


Una de las principales causas de este crecimiento en el uso de la Realidad Aumentada (RA) es debido a que mediante esta tecnología se amplían los espacios de interacción fuera del propio ordenador. Todo el mundo puede ser un interfaz empleando RA sobre dispositivos móviles. Existen multitud de ámbitos de aplicación de la RA; prácticamente en cualquier área de trabajo puede tener sentido desarrollar aplicaciones de RA. En este post comentaré brevemente algunos de ellos a modo de resumen; aunque iré creando específicas para aplicaciones que me llamen la atención.

catalogoIKEA
Catálogo AR de IKEA

En el campo de la publicidad cada vez más empresas utilizan la RA como reclamo publicitario. Desde 2008, empresas como IKEA, Adidas, Ford, BMW, Lego, FOX, Paramount, Doritos, Ray Ban y Mac-Donalds estan utilizado estas técnicas.

En el post "AR Origenes" podemos ver sendos vídeos ejemplo de las empresas National Geographic o Goertz. Veamos como lo explica el siguiente vídeo:




diseño AR en arquitectura
También en el campo de la arquitectura numerosos son los despachos y oficinas técnicas que utilizan la Realidad Aumentada para compartir sus diseños con sus clientes.

No cabe duda de las ventajas que introduce esta tecnología a la hora de exponer o presentar un diseño en 3D sobre un soporte 2D.




En el campo industrial las aplicaciones son numerosas. Podemos encontrar esta tecnología en todas las etapas del proceso industrial; desde el diseño hasta la comercialización, pasando por la fabricación, el mantenimiento, el almacenamiento y distribución o la reparación. Numerosas son las compañías que introducen esta tecnología desde que en 1992 los ingenieros de Boing Tom Caudell y David Mizell fuesen pioneros en este campo. El siguiente vídeo muestra la reparación del futuro según BMW:




invizimals
invizimals de Sony
En el campo del ocio y del entretenimiento el potencial que demuestra la Realidad Aumentada es inmenso. La capacidad de interacción que ofrece esta tecnología está siendo explotada ya por compañías como Sony con sus Invizimals, como ya mostramos en el post "AR Origenes".




También en el campo de la medicina se está introduciendo el uso de la Realidad Aumentada. Quirófanos, formación y entrenamiento de de doctores y cirujanos constituyen las principales aplicaciones en la actualidad. Toda la información y datos 3D que en tiempo real proporcionan aparatos de resonancia magnética o tomografías pueden superponerse en la imagen real del paciente, dando una visión de rayos X al
especialista. La siguiente imagen muestra una aplicación de la RA a la traumatología:

ARmedicina
AR en medicina

Finalmente, y no menos importante, el mundo de la educación y formación también aprovecha las bondades de esta tecnología. La aplicación más inmediata es la generación de material y libros combinando técnicas tradicionales con técnicas novedosas como la Realidad Aumentada.



El siguiente vídeo muestra una extraordinaria experiencia del uso de códigos QR y Realidad Aumentada en educación, presentada por Domingo Santabárbara y Alma Ariza en el Congreso Nacional de Contenidos Educativos Digitales 2012 y premiada por Educared. Se trata del proyecto "Valdespartera es cultura" y está realizado por alumnos de 3 años.

viernes, 28 de marzo de 2014

AR Fundamentos

La Realidad Aumentada (RA) se encarga del estudio de técnicas que permiten la integración interactiva y en tiempo real entre el mundo real (normalmente a partir de imágenes capturadas u otra  información como geolocalización) y el mundo virtual (que normalmente añade información digital, cálculos o modelos 3D).


La RA trata de aumentar la percepción que tenemos del mundo real mediante elementos virtuales generados por ordenador. Esto difiere de la realidad virtual,  ya que ésta última introduce al usuario en un mundo totalmente artificial. De esta forma, una escena real vista a través de un dispositivo digital, como gafas o dispositivos de mano preparados para ello, puede incluir información virtual que mejore o amplíe la escena en  algún sentido. El objetivo no es una simple superposición de gráficos digitales en una escena real, sino que se persigue que el resultado de la aumentación sea realista y consistente con el entorno. Esto implica que la información y los gráficos generados deben ser coherentes con la iluminación natural del medio, e interactuar de  forma adecuada ante estímulos humanos o naturales. Este es el concepto de Alineación 3D.

taxonomía de RA
Taxonomía de Realidad Aumentada según Milgram y Kishino

El primer paso, y el más complicado, que deben realizar los sistemas de Realidad Aumentada en el proceso de generación de RA es el denominado registro, que consiste en calcular la posición relativa de la cámara real respecto de la escena para poder generar imágenes virtuales correctamente alineadas con esa imagen real. Este registro debe ser preciso (errores de muy pocos milímetros son muy sensibles en determinadas aplicaciones, como en medicina o en soporte a las aplicaciones industriales) y robusto (debe funcionar correctamente en todo momento). Este registro puede realizarse empleando diferentes tipos de sensores y técnicas (las más extendidas son mediante el uso tracking visual con o sin marcadores).

procesoRA
Proceso de generación RA

Así, la Realidad Aumentada se sitúa entre medias de los entornos reales y los virtuales, encargándose de construir y alinear objetos virtuales que se integran en un escenario real. El siguiente video muestra los fundamentos de la Realidad Aumentada:




Cuatro son los elementos necesarios en todo proceso de generación de Realidad Aumentada:
  • Elemento capturador
  • Elemento de proyección
  • Elemento de procesado
  • Elemento activador
La Realidad Aumentada abarca diferentes disciplinas:

  • Visión por computador
  • Geometría
  • Análisis numérico
  • Reconocimiento de patrones
  • Tecnologías de integración de sensores
  • Tratamiento de gráficos 3D por ordenador
  • Tecnologías de inmersión sensorial