fabernovel loader

Jul 31, 2018 | 6 min de lecture

Dev

La Réalité Augmentée au service de l’expérience artistique

Comment nous avons fait une utilisation artistique d’ARKit, le framework d’Apple pour iOS

Thibault Farnier

Developer


FABERNOVEL TECHNOLOGIES
L'article suivant explique comment le framework Apple pour iOS, ARKit, est utilisé pour co-créer l'œuvre "In Memory of Me", produite grâce à la collaboration entre FABERNOVEL et l'artiste plasticien français Stéphane Simon.

FABERNOVEL s’est associé au plasticien Stéphane Simon et à son projet de sculptures imprimées en 3D prenant des selfies, In Memory of Me, oeuvre présentée aux Bains Numériques d’Enghien-les-Bains en juin 2018. Cette biennale, qui célébrait son 20ème anniversaire cette année, a pour objectif d’exposer des combinaisons entre l’art et le monde du numérique.

L’artiste perçoit les selfies comme des gestes fascinants qui se sont petit à petit ancrés dans notre quotidien, au point de devenir des rituels de l’expression de soi. La collaboration a consisté à emmener plus loin le concept d’auto-portrait et d’observation de soi par l’affichage d’un tatouage de narcisse animé sur le corps. Ce tatouage envahit progressivement la statue, en utilisant de la Réalité Augmentée et créant un effet étonnant pour l’utilisateur.

L’article suivant explique techniquement comment ARKit, le framework d’Apple permettant de faire de la Réalité Augmentée sur iOS, a été utilisé pour obtenir le résultat suivant :

L’objectif : donner l’illusion du tatouage s’animant sur le corps

Le challenge est essentiellement technique : comment fait-on pour appliquer une texture vidéo sur un objet réel ? Un modèle 3D “transparent” doit être placé à l’endroit précis de la statue réelle. Dans la première version d’ARKit cependant, cela n’était pas évident, puisque cette version ne permettait pas de reconnaître directement des modèles 3D. Nous avons choisi d’utiliser la reconnaissance d’image pour y parvenir, ainsi que d’autres techniques décrites ci-dessous.

Laisser la vraie statue visible par l’utilisation d’une vidéo transparente

La vidéo originale étant en noir et blanc, voici ce à quoi aurait ressemblé la statue sans aucun traitement de notre part.

Sans masque de transparence : la vraie statue aurait été complètement cachée

Le modèle est intégralement blanc. En effet, contrairement aux images, il n’existe pas de canal alpha sur les vidéos, ce qui oblige à recourir à d’autres techniques pour masquer le modèle. On ne voudrait voir que le tatouage noir et que le reste du modèle soit transparent, afin que l’on puisse voir les traits de la vraie statue derrière.

Il est possible d’utiliser des « masques de transparence » pour indiquer quelle partie de la vidéo on souhaite rendre transparente ou non. Ainsi, le blanc indique ce qui doit être caché, le noir ce qui doit être affiché. Bien heureusement pour nous, la vidéo est en noir et blanc, ce qui fait qu’on peut directement utiliser la même vidéo en tant que masque de transparence.

Avec un masque de transparence : mieux !

(Mention spéciale à ce projet Github qui explique comment utiliser cette technique, tout comme une autre nommée “chroma keying”)

Autre problème : comment placer la statue sans utiliser de tracking de modèle 3D

Le 4 juin 2018, Apple a ajouté la possibilité de tracker des modèle 3D avec ARKit 2, encore en beta à l’heure où ces lignes sont écrites. Comme cette fonctionnalité n’était pas disponible au début du développement, il nous a fallu trouver une autre solution. Nous avons choisi la Reconnaissance d’Images qui a été introduite dans iOS 11.3. En utilisant deux images placées de part et d’autre de la statue, il était aisé de placer le modèle correctement.

Un autre moyen de parvenir à un tel résultat repose sur l’utilisation de QR-Codes, grâce à la reconnaissance de plans et de l’utilisation du framework Vision. Néanmoins, la reconnaissance d’images est plus plaisante puisqu’elle permet de se passer de la reconnaissance de plans, et également de choisir de belles images à placer à côté de la statue. Plus une image est complexe, plus la reconnaissance est aisée. D’ailleurs, Xcode, l’IDE d’Apple permettant de développer sur iOS, donnera des avertissements et des conseils au cas où les images à reconnaître ne seraient pas suffisamment complexes.

Cachez-moi ce dos que je ne saurais voir

Le résultat commence à être sympathique. Sauf que nous avons encore un problème : on voit l’animation se propager au niveau du dos de la statue, alors que cette partie devrait être cachée par le corps de la statue !

Etape 1 : pas d’occlusion

Technique utilisée : l’occlusion, qui consiste à utiliser un certain type de texture pour masquer les autres qui sont derrière. Ce n’est pas un technique nouvelle, mais l’utiliser pour masquer des objets dans le monde réel n’est chose courante, la Réalité Augmentée étant une technologie récente.

On crée un deuxième modèle de la statue avec une texture occlusive et on la positionne au bon endroit pour masquer le dos. Choisir le “bon endroit” n’est pas forcément évident. Si on place le modèle occlusif  à emplacement exact du modèle avec la vidéo, on aura un effet… scintillant :

Superposition du modèle occlusif et du modèle vidéo → scintillement

Les textures du modèle vidéo et du modèle occlusif sont en conflit au moment du rendu.

La solution que nous avons utilisée consiste à placer le modèle occlusif légèrement derrière le modèle vidéo, en utilisant la position de la tablette de l’utilisateur et la position du modèle vidéo.

Création du modèle occlusif :

let occlusionClone = statueNode?.clone()
occlusionClone?.geometry = statueNode?.geometry?.copy() as? SCNGeometry

let occlusionMaterial = SCNMaterial()
occlusionMaterial.colorBufferWriteMask = []
occlusionClone?.geometry?.materials = [occlusionMaterial]

sceneView.scene.rootNode.addChildNode(occlusionClone!)

// This ensures occlusionNode is rendered first in order to hide what is
// behind it
occlusionClone?.renderingOrder = -1
statueNode?.renderingOrder = 10

Placement du modèle occlusif :

func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
guard let camera = sceneView.pointOfView else { return }
    // normalized() is defined in a SCNVector3 extension
    // https://github.com/apexskier/SKLinearAlgebra can provide one for instance
    let direction = (camera.position - statueNode.position).normalized() * 0.0005
    occlusionNode.position = SCNVector3(
        statueNode.position.x - direction.x,
        statueNode.position.y,
        statueNode.position.z - direction.z
    )
}

 

Etape 2a : placement du modèle vert (modèle occlusif) derrière le modèle rouge (modèle vidéo)
Etape 2b : résultat avec les bonnes textures

“Tracker” le monde réel en continu : l’application fonctionne, désormais comment maintenir une expérience continue ?

Une fois l’animation terminée, on aimerait éviter le processus plutôt fastidieux de devoir replacer le modèle 3D en utilisant les images. Si on laisse l’application tourner, il n’y aura pas de problèmes tant que la caméra de l’iPad n’est pas reposée en face cachée. En effet, ARKit utilise l’accéléromètre, le gyroscope et la caméra de l’appareil pour pouvoir se placer dans le monde réel. Si la caméra ne voit rien, la session AR sera interrompue. L’utilisation d’un stand est donc préconisée pour éviter toute interruption.

Ce problème est aussi résolu par ARKit 2 qui permet la persistance des expériences AR et ainsi de relancer une expérience en reconnaissant un environnement qu’il a déjà rencontré auparavant.

Conclusion

Le résultat final est satisfaisant. Cependant, à cause des limitations d’ARKit 1 qui ne peut reconnaître un modèle 3D, le modèle n’est pas placé correctement en se déplaçant autour de la statue. Une nouvelle version de l’application sera publiée. Elle permettra de “tracker” correctement le modèle 3D de la statue, en retirant ainsi la partie pénible de mise en place à l’aide des images et réparant les problèmes de placement du modèle.

Ceux qui ont expérimenté l’application ont été agréablement surpris. De sa propre initiative, le spectateur devient acteur en se déplaçant autour de la statue et en observant le tatouage sous tous ses angles. CQFD : la Réalité Augmentée innove la façon d’explorer nos sens.

Découverte d' »In Memory of Me »

Vous souhaitez échanger sur l'AR ?

Let's talk!
logo business unit

FABERNOVEL TECHNOLOGIES

150 talents pour répondre aux défis technologiques de la transformation digitale.

à lire