Saltar al contenido

Introducción a la Realidad Aumentada con ARKit

Apple nos facilitó la creación de hermosas y realistas aplicaciones y juegos de realidad aumentada a través de Xcode 9 y el hardware descrito anteriormente. Xcode 9 incluso viene con una plantilla dedicada que nos permite construir nuestra primera aplicación ARKit en minutos.

Abre Xcode y elige Archivo -> Nuevo -> Proyecto . Elige la plantilla Augmented Reality App :

Introducción a la Realidad Aumentada con ARKit
Introducción a la Realidad Aumentada con ARKit

Presiona Siguiente , luego elige un nombre para tu proyecto (por ejemplo, «FirstARKitApp»). Puede dejar los valores por defecto para los otros ajustes ( Idioma: Swift, Tecnología de Contenidos: SceneKit ). Haz clic en Next y crea el proyecto en una carpeta de tu elección.

¡Sí, lo has leído bien! No se requiere codificación. Y esto es lo que verás después de ejecutar la aplicación en un dispositivo real:

Ahora, veamos más de cerca el proyecto generado. El Main.storyboard contiene un controlador de una sola vista que tiene una vista principal de tipo ARSCNView. ARSCNView es una vista especial utilizada para mostrar escenas que mezclan la vista de la cámara del dispositivo con contenido 3D virtual. La vista se conecta a la salida de sceneView en el archivo ViewController.swift:

1@IBOutletvar sceneView:ARSCNView!

swift

A continuación, inspeccionemos el método viewDidLoad() del ViewController:

123456789101112131415overridefuncviewDidLoad(){super.viewDidLoad()// Establecer la vista delegar escenaVer.delegar =self// Mostrar estadísticas como fps e información de tiempo escenaVer.showsEstadísticas =true// Crear una nueva escena de scenelet =SCNScene(named: "art.scnassets/ship.scn")!// Establecer la escena a la vista escenaVer.scene = scene}

swift

El delegado de sceneView está listo para serlo, pero no usaremos el delegado de ARSCNView en esta demostración.

1sceneView.showsStatistics =true

swift

Al establecer el atributo showsStatistics como verdadero, veremos las estadísticas en tiempo real al ejecutar nuestra aplicación.

Si tocas el icono + en la parte inferior izquierda, se revelan más detalles:

  • La barra verde es el indicador de rendimiento. Una barra completa indica un buen rendimiento.
  • El motor de renderizado se muestra a la derecha del indicador de rendimiento. Los valores posibles son GL (OpenGL) y Mt (Metal). En los dispositivos modernos capaces de ejecutar ARKit, verás Mt.
  • El contador de FPS muestra la velocidad de fotogramas, el número de actualizaciones de pantalla por segundo. 60 es el máximo y los valores por encima de 30 son aceptables.
  • El recuento de nodos (el valor junto al icono con forma de rombo) muestra el número de nodos en el gráfico de la escena. Más sobre esto más tarde.
  • La siguiente información es el indicador de conteo de polígonos. Muestra cuántos polígonos están representados actualmente en tu escena.
  • El gráfico de rosquillas muestra en qué se está gastando el tiempo mientras se renderiza un cuadro. También podemos ver cuánto tiempo se tarda en renderizar un cuadro. En este ejemplo, sólo se tardó 0,4 ms en mostrar un cuadro. Por lo tanto, podríamos mostrar hasta 2500 fotogramas/s si el dispositivo soportara una velocidad de fotogramas tan alta.

Cargamos la escena a continuación:

1let scene =SCNScene(named: "art.scnassets/ship.scn")!

swift

Una instancia de SCNScene representa una escena 3D y su contenido, incluyendo luces, objetos 3D, cámaras y otros atributos. La escena actual se inicializa usando el ship.scn que está incluido en la plantilla ARKit:

Esta nave será mostrada y combinada con el mundo real en nuestra demostración. Finalmente, asignamos la escena al objeto ARSceneView:

1sceneView.scene = escena

swift

Ya casi estamos listos para hacer nuestra primera aplicación AR. Los últimos pasos de configuración se realizan en el método viewWillAppear() delegate:

1234567overridefuncviewWillAppear(_ animado:Bool){super.viewWillAppear(animado)// Crear una configuración de sesiónconfiguración =ARWorldTrackingConfiguration()// Ejecutar la escena de sesión de la vistaView.session.run(configuration)}

swift

Un ARSCNView tiene una sesión de AR asociada a él. La ARSession procesa la imagen de la cámara y rastrea el movimiento del dispositivo. El procesamiento de AR se inicia después de llamar al método run() de la sesión de AR. El método run() necesita una instancia de ARConfiguración válida. Este objeto de configuración define los comportamientos de rastreo de movimiento y de escena de la sesión.

La configuración del arco no puede ser instanciada directamente. En su lugar, utilice una de las siguientes subclases proporcionadas por ARKit.

Cita de la documentación de ARKit :

  • ARWorldTrackingConfiguration: Proporciona experiencias de RA de alta calidad que utilizan la cámara trasera para rastrear con precisión la posición y orientación de un dispositivo y permitir la detección de aviones y la prueba de impacto.
  • AROrientaciónSeguimientoConfiguración: Proporciona experiencias básicas de RA que usan la cámara trasera y rastrean sólo la orientación de un dispositivo.
  • ARFaceTrackingConfiguration: Proporciona experiencias de RA que utilizan la cámara frontal y rastrean el movimiento y las expresiones de la cara del usuario.

La plantilla de ARKit utiliza la clase ARWorldTrackingConfiguration. Este tipo de configuración rastreará también los cambios de posición y orientación del dispositivo. Como resultado, podremos movernos libremente por el modelo de la nave espacial que permanece en una posición fija en el lugar del mundo real.

Si en su lugar utilizara un AROrientationTrackingConfiguration, los cambios de posición del dispositivo no serían rastreados. En consecuencia, la nave estelar se movería junto con el dispositivo. Podríamos usar esta configuración para mostrar los planetas del sistema solar que orbitan alrededor de nuestro dispositivo.

Sin embargo, la falta de seguimiento del cambio de posición es un factor de ruptura para la mayoría de las aplicaciones y juegos de RA, así que probablemente acabes usando ARWorldTrackingConfiguration. Además de los cambios de posición y orientación, ARFaceTrackingConfiguration también puede rastrear las expresiones faciales , lo que abre más oportunidades.