Google ARCore au service de votre décoration intérieure

Introduction

Dans cet article, nous allons décrire la création d’une application mobile en réalité augmentée qui implémente le Software Development Kit de Google, ARCore. À la genèse de ce projet, notre vocation était de tester la technologie par le biais d’un cas d’usage métier. Nous nous sommes orienté vers le retail ainsi que la décoration d’intérieur en nous inspirant des possibilités offertes par une application bien connue aujourd’hui, IKEA Place (Android et IOS)

Preview

Voyons tout de suite nos objectifs.

Décoration Simple

Nous voyons ici la puissance du SDK ARCore qui permet, dans ce premier cas d’usage, la détection de surface simple ainsi que leur modification.

Décoration Avancée

La décoration avancée a été le vrai challenge du développement de ce projet. Dans ce cas d’utilisation nous devons délimiter une zone spécifique via la surface détectée par ARCore et pouvoir y modifier la texture choisie.

Stack de développement

Unity

C’est un moteur de jeu multi-plateforme (smartphone, ordinateur, consoles de jeux vidéo et Web) développé par Unity Technologies. Il est l’un des plus répandus dans l’industrie du jeu vidéo, aussi bien pour les grands studios que pour les indépendants du fait de sa rapidité aux prototypages et qu’il permet de produire des jeux sur tous les supports. Nous utilisons Unity afin de concentrer tous les besoins techniques (SDK + Librairies) de l’application ainsi que pour la création des interfaces graphiques de l’application. Unity nous permet de générer une application Android directement de l’environnement de développement.

ARCore

C’est un kit de développement logiciel développé par Google qui permet de construire des applications de réalité augmentée. ARCore utilise trois technologies clés pour intégrer du contenu virtuel au monde réel tel qu’il apparaît à travers l’appareil photo de votre téléphone :

  • Le suivi des mouvements permet au téléphone de comprendre et de suivre sa position par rapport au monde,
  • La compréhension de l’environnement permet au téléphone de détecter la taille et l’emplacement de surfaces horizontales plates comme le sol ou une table basse,
  • L’estimation de la lumière permet au téléphone d’estimer les conditions d’éclairage actuelles de l’environnement afin de le répercuter sur un modèle virtuel.

La dernière Google IO (7 – 9 mai 2019) nous a appris que de nombreuses nouvelles fonctionnalités vont bientôt voir le jour concernant ARCore.

Nous utilisons ARCore pour sa capacité à détecter les surfaces ainsi qu’à générer un quadrillage sur celle-ci.

Le cas d’application

Le cas d’usage que nous avons choisi est très simple. Il suffit de lancer votre application Android, de filmer votre sol ou votre mur et d’y changer la texture (carrelage, peinture, parquet, tapisserie). Il est possible de délimiter une zone sur laquelle la texture doit être posée. Il est aussi possible de charger vos propres textures dans l’application afin de voir quel revêtement irait le mieux chez vous. Une fois choisi, vous verrez la texture de votre sol / mur être modifiée à travers l’écran de votre smartphone.

Comment faire ?

Vous pouvez télécharger Unity en utilisant la licence Personnal (free). Une fois installé vous verrez qu’un nouveau monde de création s’offre à vous.

Nous avons ici plusieurs choses importantes :

  • Le squelette graphique de l’application est contenu dans la Scene,
  • Les composants de l’application sont dans la Hierarchy,
  • Dans le Project, nous retrouverons toutes l’arborescence des dossiers et fichiers (Script C#, images, plugins ainsi que toutes les ressources nécessaires à l’application),
  • Dans l’Inspector, nous avons toutes les informations sur le composant sélectionné dans la Hierarchy.

Le choix du moteur de jeu Unity n’est pas anodin dans le sens où l’on peut, avec un seul développement, déployer notre application sous Android et IOS. Comme nous le voyons ici, il nous suffit de sélectionner la plateforme Android, et de sélectionner ARCore Supported dans le Player Settings. Les deux scènes qui apparaissent dans le Build sont les deux fonctionnalités que nous avons développées.

ARCore et la simplicité

Depuis l’abandon du projet Tango (smartphone dédié à la réalité augmentée de Google en décembre 2017), nous avons pu constater que Google a fait beaucoup de chemin. Suite à cela, le SDK ARCore a pu voir le jour.

La première version de ce SDK ne fonctionnait que sur deux smartphones. Nous pouvons aujourd’hui avoir une compatibilité comprenant 120 appareils dont IPhone et IPad (ARCore embarque son homologue des chez Apple : ARKit).

Nous retrouvons aujourd’hui quatre grands SDK autour de la réalité augmentée :

  • ARCore : Gratuit, documenté, régulièrement mis à jour,
  • Wikitude : Payant, documenté, fonctionnalités supplémentaires,
  • ARKit : Compatible uniquement sur les produit Apple (inclus dans ARCore),
  • Vuforia : Payant, peu documenté, fonctionnalités supplémentaires (utilise ARCore selon les besoins).

Du fait de son adaptabilité aux divers appareils, ainsi que de sa simplicité d’intégration et des fonctionnalités proposées, ARCore nous est apparu comme un choix évident dans le développement de notre projet.

Un peu de code

Nous avons deux fonctionnalités principales dans l’application, qui sont :

  • La décoration simple : La texture choisie est appliquée sur toute la surface détectée,
  • La décoration avancée : La texture ne sera appliquée qu’à une surface sélectionnée par l’utilisateur.

Nous allons voir ici la classe ARManager.cs qui contrôle la détection de surface ainsi que le clic sur l’écran. Cette classe est rattachée à la fonctionnalité de la décoration avancée.

La méthode Start()

Cette méthode peut être utilisée à partir du moment où notre classe étend le MonoBehaviour. Cette classe est reliée à un composant contenu dans la Hierarchy. Elle permet d’exécuter du code lors de l’instanciation de ce composant.

La méthode Update()

Comme la méthode Start(), la méthode Update() est étendu de la classe MonoBehaviour. Cette méthode est appelée à chaque frame par seconde de l’écran. C’est pourquoi nous y mettons à jour le tracking des surfaces, ainsi que le fait de toucher l’écran ou non.

La méthode HandleTouchProcesses()

Cette méthode va prendre en considération chaque clic sur l’écran du smartphone effectué par un utilisateur. Nous allons d’abord déterminer si le clic est fait dans la zone “libre” de l’écran, ou dans la zone d’interaction avec l’application. Si nous sommes dans la zone libre, nous allons appeler la méthode suivante.

La méthode TouchLookingForSurface()

Cette méthode va récupérer le fait que l’utilisateur a cliqué sur l’écran. Elle va calculer la direction qui apparaît au centre de l’écran (nous avons un pointeur actif au niveau de l’interface graphique) et instancier un composant qui est le drapeau, afin de l’ancrer sur la surface détectée dans le monde virtuel. Ce composant apparaîtra donc sur la surface via le centre de l’écran.

Un peu de logique

Dans le but de sélectionner à l’écran une surface délimitée qui apparaîtra en réalité augmentée, nous avons dû mettre en place un algorithme assez spécifique.

Lors de la sélection d’une surface, l’utilisateur doit appuyer sur l’écran afin de poser un drapeau sur un sol / un mur. Une fois plusieurs drapeaux posés sur une surface, il est nécessaire pour nous d’assembler ces points ensemble et de reconstruire ensuite une surface au dessus de celle qui a été détecté précédemment (nous appellerons cette surface un mesh). Le but est donc de parcourir un tableau de points comportant des informations de positions dans un monde virtuel en 3D, ayant un rendu 2D à l’écran et de tous les reliés ensemble de manière optimisée. Nous nous sommes donc intéressé à la triangulation de Delaunay.

La triangulation de Delaunay va nous permettre de relier tous les points qui ont été posé sur la surface et de les remplir afin de constituer le mesh. Une fois le mesh construit, nous n’avons plus qu’a lui ajouter la texture choisie par l’utilisateur. Plus d’informations ici grâce à la thèse de Guendalina Palmirotta.

Conclusion

Le moteur de jeu Unity est aujourd’hui l’un des moteurs le plus utilisé dans le jeu vidéo, et dans la création d’application Cross Reality (XR) autant sur smartphone que sur casque de réalité virtuelle ou mixte.

La technologie ARCore nous fait de très belles promesses, n’ayant à la base que la fonctionnalité de détection de surface. Elle est disponible au départ sur 8 smartphones Android, elle a pu, en un an de temps, agrandir son panel de fonctionnalités et agrandir la gamme de smartphones compatibles. Dans ces smartphones compatibles, on y retrouve aussi l’IPhone et l’IPad, en effet ARCore supporte aussi la technologie ARKit d’Apple.

La vision de Google concernant ARCore est de faciliter le pont qui existe entre le monde réel et virtuel notamment sur la compréhension de l’environnement par le SDK. L’optimisation des algorithmes de reconnaissance est au cœur de leur développements.

Leave a Reply

Your email address will not be published. Required fields are marked *