Construisez votre 1ère application ARKit

le 22/09/2017 par Kevin Ha
Tags: Software Engineering

Qu'est ce qu'ARKit ?

Durant la WWDC 2017, Apple a présenté leur framework de réalité augmentée ARKit. La réalité virtuelle n’est pas nouvelle mais Apple a créé un véritable engouement de la part des développeurs notamment par la rapidité et la facilité de créer une expérience de réalité virtuelle sur iOS 11. La sortie du dernier OS ainsi que l’arrivée de iPhone X et 8 devraient faire émerger de plus en plus d’applications de RA sur l’AppStore.

La principale force d’ARKit réside dans le fait qu’il n’y ait besoin d’aucun capteur supplémentaire pour être utilisé. Cependant, vous devez vous doter d’un appareil embarquant une puce A9 ou supérieure et donc au minimum un iPhone 6S ou un iPad mini 2.

ARKit dispose des fonctionnalités suivantes :

  • Tracking

Il permet de suivre la position de l’appareil dans l’espace et en temps réel (principe de l’odométrie) avec un haut degré de précision grâce à la caméra et aux capteurs de mouvements de l’iPhone. Ainsi au travers des informations récupérées, la position est recalculée pour chaque image vidéo, au moins 30 fois par seconde.

  • Scene Understanding

Apple a appelé cette technique “Plane detection” qui fournit la possibilité de détecter les plans (seulement horizontaux pour le moment) comme les tables ou les sols. Elle est actuellement encore en bêta car d’autres fonctionnalités comme la détection de mur devrait venir alimenter le framework.

  • Lighting Estimation

ARKit est également capable d’utiliser le capteur de luminosité pour déterminer la quantité de lumière dans la pièce environnante pour appliquer le degré de luminosité sur l’objet virtuel.

  • TrueDepth Camera

Avec l’introduction de l’iPhone X, ARKit a la possibilité de détecter la topologie, la position et l’expression du visage de l’utilisateur avec un haut degré de précision en temps réel. Cela rend plus facile d’appliquer des expressions de visage sur des personnages en 3D ou des effets pour les selfies.

  • Rendering

ARKit intègre des librairies graphiques 2D/3D internes telles que SpriteKit (2D), SceneKit (3D) ou encore Metal mais fonctionne également avec des librairies externes comme Unity ou Unreal Engine.

Concepts de base

  • Session

Une session représente le coeur d’ARKit, il vous faut démarrer une ARSession unique à chaque fois que vous lancez votre application. Elle va gérer la collecte de données des capteurs de mouvements et de la caméra. Un ARConfiguration doit être fourni en fonction des capacités de l’iPhone ou de l’iPad pour lancer la session.

  • Configuration

ARKit fournit 3 types de configurations :

AROrientationTrackingConfiguration pour seulement suivre l’orientation de l’appareil sur les 3 axes de rotations (profondeur, inclinaison, direction) communément appelés “3 degrees of freedom (3DOF)”. Cette configuration est adaptée pour les iPhones 6S par exemple.
ARWorldTrackingConfiguration est quand à lui utilisé pour suivre la position relative, l’orientation et les informations de l’environnement sur 3 axes de translation (avant/arrière, haut/bas et droite/gauche) en plus des 3 axes de rotation cités plus tôt appelés “6 degrees of freedom (6DOF)”.
ARFaceTrackingConfiguration fournit la possibilité de suivre le mouvement et l’expression du visage grâce à la caméra frontale de l’iPhone X.

  • Frames

Lors d’une session, ARKit va capturer en continu des images stockées dans un ARFrame qui va contenir les informations de suivi et de l’environnement telles que les points de suivis et le degré de luminosité.

  • Feature Points

Les “features points” représentent une liste de points ARPointCloud collectés durant le temps fournissant des informations détaillées de l’espace. C’est ainsi qu’ARKit est capable d’estimer ou de détecter des plans horizontaux.

  • Anchors

Un ARAnchor illustre une position et une orientation dans l’espace, il sert de point de référence sur lequel ARKit va fixer un objet virtuel et donner l’illusion que celui-ci ne bouge pas lorsque l’iPhone se déplace autour. Ils peuvent être ajouté manuellement ou automatiquement en utilisant l’option .planeDetection de la configuration.

  • Hit-Testing

Cette technique recherche les objets réels ou des ARAnchors dans les images capturées au cours d’une ARSession à un point spécifique dans l’espace. Cette méthode renvoie une liste de features points ordonnées du plus près au plus loin de la caméra.

4 types de détection sont disponibles :

.existingPlaneUsingExtent<br><br>En détectant le point d’ancrage présent dans la scène  (grâce à l’option .planeDetection) respectant la taille du plan..existingPlane<br><br>En détectant le point d’ancrage présent dans la scène (grâce à l’option .planeDetection) sans considérer la taille du plan.
.estimatedHorizontalPlane<br><br>En estimant un plan dont l’orientation est perpendiculaire à la gravité..featurePoint<br><br>En utilisant les features points

Codons !

D’abord, vous devez vous procurer la dernière version Xcode 9 afin de créer votre première application ARKit.

  • Configuration

Ici nous souhaitons utiliser la caméra arrière de l’iPhone pour placer des objets dans l’espace mais nous aurions aussi pu prendre en compte le ARFaceTrackingConfiguration  vu précédemment.

  • Créer et démarrer une session

Pour simplifier le code, ici nous initialisons une ARSession mais si vous intégrez SceneKit ou SpriteKit vous pouvez directement accéder au session à travers les classes ARSCNView et ARSKView.

  • Gérer une session

Une fois la session démarrée, vous avez la possibilité de la gérer comme ceci :

  • Gérer les mises à jours lors d’une session

Après avoir nommé le delegate, vous aurez accès aux méthodes qui gèrent les événements de la session :

  • Gérer les interactions avec le Hit-testing

A partir de là, nous allons placer un objet virtuel dans l’espace avec le hit-testing vu précédemment qui va rechercher les feature points les plus proches de la caméra.

La création d’un ARAnchor fera le lien avec un **SCNNode :**une classe spécifique à SceneKit, à travers la méthode renderer du ARSCNViewDelegate.

Nous obtenons le résultat suivant :

Pour aller plus loin...

Nous avons eu une première approche d’ARKit avec sa prise en main en intégrant SceneKit pour mettre en place des objets virtuels dans l’espace. Bien évidemment, ARKit est encore amené à évoluer et à proposer plus de fonctionnalités pour rendre des contenus plus réalistes notamment avec l’introduction de l’iPhone X qui embarque de nouvelles caméras comme la caméra “TrueDepth” proposant d’appliquer des effets virtuels sur nos visages.

Apple semble avoir donné un nouvel élan à la réalité augmentée, il suffit de consulter (@madewitharkit) pour se faire une idée de la puissance du framework et de ce que pourrait être le futur de celle-ci. Ceci a également poussé Google à sortir rapidement son framework ARCore pour venir concurrencer celui de la pomme.

A vous de trouver les meilleurs cas d’usages dès à présent. De grands acteurs semblent d’ores et déjà s’emparer de cette technologie comme en peut témoigner la future application “IKEA Place” qui vous aidera à meubler virtuellement votre logement avant même de vous rendre en magasin.

Allons-nous enfin assister à l’avènement de la réalité augmentée chez le grand public ?

Référence :

https://developer.apple.com/documentation/arkit

https://developer.apple.com/documentation/scenekit

https://www.whitesmith.co/blog/arkit-introduction/