Home » Guías » Analizando ARKit
ARKit

Analizando ARKit

ARKit es, sin duda, una de las tecnologías más interesantes que Apple ha presentado para iOS 11. No solo por sus infinitas posibilidades, sino también por lo sencillo que es de implementar. De hecho, **su implementación es casi anecdótica en muchos casos. Lo único que tenemos que tener presente es el hecho que estamos en un espacio 3D, y por lo tanto, nuestra cámara en el momento en que inicie ARKit será el punto 0, 0, 0 siendo ancho, alto y profundidad. A partir de ahí, se abre un mundo de posibilidades.

Cómo funciona ARKit

Básicamente, ARKit es una cámara convencional dentro de un mundo tridimensional, como la que incorpora cualquier editor 3D. La única diferencia es que está unida a la cámara de nuestro teléfono, permitiendo dos modos: el modo de 3 ejes donde solo podemos ver un mundo virtual tras la cámara (aunque podamos movernos por él) y el modo de 6 ejes, donde se une con el mundo real para “sincronizar” el movimiento de ambos mundos.

Como ejemplo práctico recordemos cómo Pokemon Go en dispositivos más antiguos o baratos (Android, principalmente), no te mostraba la realidad aumentada y te colocaba a los Pokémons en un entorno virtual, un escenario de un juego convencional que podías ver como asomándote por una ventana. Pero no había unión con el mundo real, solo una ventana al mundo que creaba el videojuego. Pues bien, ese modo donde nunca vemos la realidad es el modo de 3 ejes y el otro, donde sí vemos el mundo real con los elementos virtuales colocados en él, es el de 6 ejes. En la imagen bajo estas líneas, el juego en modo de 6 ejes a la izquierda y en modo de 3 a la derecha, debido a la presencia o no de una brújula digital (giroscopio) en el dispositivo.

Pokemon Go

Por lo tanto, cuando creamos una app, lo primero que hemos de hacer es configurar convenientemente las condiciones de esta para que aquellos dispositivos que no soporten ARKit no permitan a la app arrancar o incluso instalarse. Todo ello se basa en cambiar la clave de capacidades obligatorias en el info.plist incluyendo la cadena arkit a UIRequiredDeviceCapabilities.

ARKit en marcha

Básicamente, una sesión ARKit es aquella que configuramos y unimos a la vista apropiada. La forma normal de trabajar es haciendo uso de SpriteKit para integración 2D o de SceneKit para 3D. Lo importante que hemos de entender es que el funcionamiento de estas librerías de videojuegos (única forma de acceder a ARKit) es tan simple como situar las escenas con las que hasta ahora trabajamos dentro del espacio 3D usando para ello coordenadas 3D y escalas del mundo real donde un valor flotante 1.0 equivale a un 1 metro en el mundo real.

Cuando iniciamos la app de ARKit, esta inicializa el primer frame con la posición 0, 0 ,0 para la propia visión del dispositivo y a partir de ahí sitúa los elementos que tiene en la escena en las coordenadas que estén predefinidas. En el caso de SceneKit es sumamente sencillo porque estas escenas ya manejan un espacio de coordenadas 3D por lo que, como hemos dicho, si partimos de 0, 0 ,0 solo hay que situar los ejes de x, y, z a las distancias que queramos con respecto al punto de arranque de la cámara. El caso de SpriteKit es un poco diferente, porque en este no hay z y por lo tanto tenemos que trabajarlo uniendo nodos a puntos. Tenemos varios opciones: bien podemos lanzar un rayo y recuperar los puntos donde podemos poner cosas o directamente usar las coordenadas reales x e y, para buscar una z de medio metro o así para situar los elementos.

Es importante notar que mientras los objetos 3D en SceneKit serán mostrados como tales y podremos girar y verlos en cualquier perspectiva, en el caso 2D no es así y SpriteKit lo que hará será situar los objetos en el espacio 3D pero siempre nos mostrará la parte frontal del mismo (siempre nos mirarán de frente).

En el caso SceneKit, normalmente hemos de definir siempre al comienzo la cámara como nodo y añadirlo a la escena, pero en el caso de ARKit ni eso es necesario ya que ahora disponemos de una vista de tipo ARSCNView que es la vista sobre la que hemos de trabajar, añadir la escena de tipo SCNScene que queramos y a partir de ahí, ir añadiendo al rootNode los diferentes SCNNode que vayamos creando. La explicación de este cambio es simple: la cámara ahora es el dispositivo y ya está definida. Bajo estas líneas tenéis una pequeña demo que hemos cocinado en Apple Coding Academy con una esfera texturizada en varios planos para simular un planeta Tierra suspendido en el aire, con nubes y todo: nuestro particular “Hello World” de realidad aumentada.

Si os fijáis en el vídeo, la esfera de la Tierra está animada y tiene su propia luz del Sol, debido a que cualquier tipo de animación, efecto, luz o cualquier cosa que incida sobre el objeto 3D o 2D en su aspecto o comportamiento, se trasladará al objeto de realidad aumentada porque la realidad, es que lo que tenemos en pantalla es exactamente lo mismo que tendríamos en una escena de SceneKit: esa es la magia. De hecho, si vemos una app ARKit en el simulador (que no soporta ARKit, por razones obvias) lo que veremos es la escena normal con un fondo negro.

Detección de planos

Cuando activamos la detección de planos (que no está activada por defecto) conseguimos una forma de localizar posiciones en el espacio 3D donde colocar objetos. Esto se consigue haciendo una detección de superficies que puedan permitir poner objetos a partir de la detección de sus geometrías (esquinas y bordes), así como del lanzamiento de rayos de trazado que chocan contra las superficies en la imagen y devuelven una estimación de distancia que nos da la matriz de 4 ejes necesaria para colocar cualquier objeto en dicha superficie.

Una vez hecho, el objeto se situará en la posición y respetará dicha superficie. Superficie que, por otro lado, se irá actualizando en su tamaño mientras movamos la cámara. De hecho, el mapeo de dicha superficie será continuo y si detecta el suelo y nos movemos, este suelo se irá ampliando y ARKit recordará las zonas por las que ya hemos pasado y ya estarán mapeadas al volver a ellas.

La detección de puntos en dichos planos se consigue con el hit test, que es ese choque que hemos comentado con una superficie. La principal diferencia de ARKit es que ha conseguido una precisión increíble teniendo que en cuenta que lo único que usa para detectar las superficies y la realidad son los sensores del dispositivo y la interpretación de las imágenes. No usa, como en el caso de Hololens, un mapeado infrarrojo mediante sensores.

ARKit vs Hololens

Desde Innoarea, empresa especializada en soluciones de Realidad Virtual y Aumentada para industria, el otro día nos hicieron llegar un interesante estudio que habían realizado comparando ARKit y Hololens, la solución de Microsoft. Y sus conclusiones son muy interesantes.

La clave de ARKit es que permite posicionar contenido virtual sobre la realidad sin requerir puntos de referencia, usando para ello únicamente la cámara del dispositivo. Esto lo hace diferente de otros dispositivos como las Microsoft Hololens que utilizan sensores para realizar un escaneo del entorno real. La presencia de estos sensores hacen que el dispositivo sea más preciso en el posicionamiento pero a la vez elevan su coste dificultando que muchas empresas puedan incorporarlo en tareas productivas.

Para hacer esta prueba, en Innoarea han portado una aplicación que ya tenían realizada para Hololens usando ARKit, y han probado la diferencia de funcionamiento y prestaciones de ambas plataformas, llegando a la conclusión que ambas son casi idénticas en cuanto a posibilidades de trabajo. Según palabras de Alfonso Soriano, CEO de Innoarea:

“ARKit es ligeramente inferior en precisión a Hololens pero esto no es relevante para la mayoría de casos de uso. ARKit va a permitir sustituir el uso de las Microsoft Hololens en determinadas tareas industriales democratizando con ello el acceso a la tecnología de Realidad Aumentada para empresas que antes no se lo podían permitir. Para una empresa industrial de tamaño medio, ahorrarse más de 2.000€ por operario supone un factor determinante a la hora de implantar una solución de Realidad Aumentada en sus procesos productivos. En muchas industrias ya se están utilizando actualmente dispositivos de tipo iPad y iPhone”.

Esto sin duda es un cambio importante ya que Hololens no supone un cambio productivo realmente destacado respecto a ARKit y si partimos que muchas industrias ya usan iPad o iPhone, la reducción de costes de implantación se reduce aún más.

Conclusiones

Sin duda, una tecnología que no ha hecho más que empezar y que ha demostrado ponerse a la altura de Hololens en cuanto a capacidades, y que por otro lado facilita mucho el uso de motores que ya se utilizan, no requiriendo que haya que re-aprender algo desde 0.

Iremos hablando más de ARKit y en septiembre, una vez Apple levante el actual acuerdo de confidencialidad sobre la tecnología (y haya una versión final, y no la actual de prueba) haremos cursos y formación sobre esta interesante tecnología, cómo implementar para apps y juegos y sacarle todo el partido. Un saludo y Good Apple Coding.

Acerca de Julio César Fernández

Analista, consultor y periodista tecnológico, desarrollador, empresario, productor audiovisual, actor de doblaje e ingeniero de vídeo y audio.

Otras recomendaciones

Codable (I)

Codable (I), cargando un JSON hacia un struct

Aprendemos a cómo cargar el contenido de un archivo JSON directamente en instancias de tipo struct con el nuevo protocolo Codable y la serialización de Swift 4. Un proceso no solo simple, sencillo y potente, si no que nos evita tener que usar diccionario, sabernos claves de memoria... simplemente cargamos el JSON, parseamos y listo. Magia Swift 4.