Comment créer une application de virtualité augmentée pour Quest dans Unity
Il y a quelques jours, j’ai posté cette vidéo sur mes réseaux sociaux où J’ai versé des biscuits provenant d’une boîte à biscuits du monde réel dans ma cuisine VR pour prendre un petit-déjeuner :
La vidéo a suscité l’intérêt de la communauté et certaines personnes m’ont demandé comment je l’avais fait. Puisque je suis toujours favorable au partage de connaissances, laissez-moi vous dévoiler les secrets de cette application, afin que vous pouvez également créer votre application de virtualité augmentée pour votre Quest !
Avant de commencer, permettez-moi de vous faire part de quelques mises en garde concernant cet article :
- Ce que j’ai fait était un prototype, donc les solutions que j’ai trouvées ne sont pas optimisées. Je voulais juste expérimenter la technologie, pas créer un produit
- Je ne vais pas faire un tutoriel étape par étape, mais si vous êtes un peu expérimenté avec Unity, vous pouvez utiliser les informations que je vous fournis pour créer vous-même quelque chose de similaire.
Virtualité augmentée et connexions entre les mondes réel et virtuel
Une chose qui me fascine le plus dans la réalité mixte est créer une connexion entre le monde réel et le monde virtuel. Je vois de nombreuses démos du Vision Pro ou du Quest en réalité mixte où le passthrough n’est qu’un arrière-plan pour un jeu virtuel, mais je pense que ce n’est pas la meilleure façon d’exploiter cette technologie. La meilleure façon d’utiliser la RM est lorsque il y a un mélange complet entre les éléments réels et virtuels. Et je suis particulièrement fasciné par la façon dont nous pouvons créer un lien entre ces mondes, et comment l’un peut influencer l’autre.
C’est pourquoi j’ai décidé de faire quelques expériences sur le sujet, l’expérience du petit-déjeuner en faisant partie. Le point principal de cette démo est que la vraie boîte à biscuits existe à la fois dans le monde réel et virtuelet même s’il s’agit d’un élément réel, il a une agence dans le monde virtuel (il verse des biscuits dedans).
L’expérience utilise une technologie appelée Virtualité Augmentée et j’ai été inspiré par mon ami Chris Koomen pour l’utiliser. J’aime classer les réalités en utilisant le continuum de Milgrams et la virtualité augmentée signifie essentiellement que vous êtes dans un monde virtuel, mais il contient des éléments réels. La cuisine est le décor virtuel et la boîte est le véritable élément qui l’habite.
Comment créer une expérience de virtualité augmentée pour Quest dans Unity
Créer cette expérience a été plus facile que je ne le pensais, grâce aux fonctionnalités offertes par le Meta SDK.
Initialisation
J’ai lancé Unity (j’utilise la version 2022.3 LTS, au cas où vous vous poseriez la question) et créé un nouveau projet URP. Ensuite, j’ai importé le nouveau SDK Meta All-In-One pour ajouter tous les packages Meta au projet.
À ce stade, j’ai utilisé les nouveaux outils intéressants proposés par Meta pour configurer le relais dans mon projet. Il y a maintenant une fonctionnalité étonnante du Meta SDK qui vous permet d’ajouter des fonctionnalités spécifiques de votre application en tant que blocs de constructionavec Méta prendre soin de leur configuration et de leurs dépendances. J’ai supprimé la caméra principale de la scène, puis j’ai sélectionné le menu vocal Oculus-> Outils -> Building Blocks et j’ai ajouté la caméra et le relais à mon projet. Ce faisant, je déjà configuré l’ensemble du projet pour en faire une application de réalité mixte, en seulement deux clics. Assez impressionnant, si vous voyez toutes les étapes que j’ai dû suivre dans mon tutoriel sur la configuration d’une application passthrough sur Quest.
Une fois l’application configurée pour le relais, il était temps d’ajouter les éléments virtuels. Puisque je voulais faire un prototype, je ne voulais pas passer du temps à créer des ressources, donc Je viens de télécharger des packages gratuits très intéressants depuis l’Asset Store.. Pour la cuisine, j’ai choisi celui-ci, et pour les cookies, cet autre. J’ai tout mis en scène, maintenant j’avais tout ce dont j’avais besoin, il ne me restait plus qu’à trouver un moyen de faire de la Virtualité Augmentée.
Comment créer des trous dans votre monde virtuel
En lançant la scène à ce stade, je pouvais voir la cuisine tout autour de moi, sans aucun passage visible. Un peu de retard dans la mise à jour de l’image qui m’a été dévoilée le passage était correctement rendu derrière la cuisine, donc il était là, mais je ne pouvais pas le voir parce que c’était comme la skybox de mon monde. Comme j’étais dans une cuisine VR fermée, je ne pouvais voir aucun arrière-plan derrière. Ce dont j’avais besoin c’était un moyen de créer un trou dans la visualisation de la cuisine pour voir la skybox d’arrière-plan. Mais comment le faire?
En consultant la documentation de l’API Passthrough, vous découvrirez qu’il existe de nombreux outils pour manipuler le passthrough. Ce que j’ai choisi, c’est de travailler au niveau du shader pour créer un trou dans le monde VR afin de voir le passage derrière. J’ai créé un cube dans la scène, et je lui ai appliqué un matériau basé sur le shader PunchThroughPassthrough que l’on peut trouver dans le package Meta XR Core SDK. Si vous utilisez cet outil, l’ensemble du maillage qui utilise ce shader devient un trou dans votre monde virtuel pour dévoiler le relais.
Un test dans l’éditeur avec le simulateur a montré que cela fonctionnait, j’ai donc trouvé un moyen de voir des choses réelles à l’intérieur d’un monde virtuel, ce qui était mon but en faisant de la virtualité augmentée ! Mais comment pourrais-je montrer quelque chose de significatif ?
Comment afficher un objet spécifique en Virtualité Augmentée ?
Je ne voulais pas seulement montrer un trou au hasard, Je voulais voir ma vraie boîte de biscuits dans le monde virtuel, donc le trou aurait dû montrer exactement cette boîte, même si je l’avais déplacée. Mais comment faire ça ?
Bon, faire un trou comme le paquet de biscuits est plutôt simple : j’ai juste pris le cube de l’étape précédente, et je l’ai fait aux mêmes dimensions que la vraie boîte : Unity fonctionne avec des mètres, donc c’était très simple de créer un mapping des deux tailles.
La localisation et le suivi du colis de biscuits étaient un peu plus complexes. La solution idéale aurait été d’avoir ce genre de Suivi d’objets 3D dont disposent les SDK AR comme Vuforia ou ARKit. Le problème est que Meta ne propose pas encore cela. Et comme nous, les développeurs, n’avons pas accès aux cadres de la caméra, je ne pouvais même pas penser à essayer un SDK externe pour essayer d’implémenter quelque chose de similaire. J’ai donc dû recourir aux seules options de suivi proposées par Meta : le suivi des mains et le suivi du contrôleur. Comme je voulais faire un test rapide, J’ai opté pour le plus rapide et le plus fiable : j’ai scotché ma manette droite sur le dessus de la boîteafin de pouvoir suivre la position de la boîte dans le monde virtuel.
Maintenant, je devais juste placez le cube 3D que j’ai généré ci-dessus en tant qu’enfant du contrôleur dans la scène Unity pour que ma boîte soit suivie dans les mondes réels et virtuels. Le cube doit être placé à une position et une rotation locales qui représentent la position de la boîte physique par rapport au contrôleur physique.
Pour ce faire, j’ai utilisé deux astuces pour faciliter mon travail : tout d’abord, j’ai posé la vraie boîte debout sur la table, pour que sa seule rotation était sur les axes Y dans mes coordonnées physiques globales (en supprimant deux degrés de liberté de variabilité), alors J’ai mis la manette plus ou moins au centre de la face supérieure de la box, aligné avec l’orientation de la boîte. Tout cela était nécessaire pour faciliter l’alignement entre le monde réel et virtuel. J’ai appuyé sur Play dans Unity et j’ai mis le cube en tant qu’enfant du contrôleur, en m’assurant que sa rotation se faisait uniquement sur l’axe Y en coordonnées globales et ajuster la position locale et l’orientation Y afin qu’elles correspondent plus ou moins à la description ci-dessus, donc avec le contrôleur assis plus ou moins au milieu de la face supérieure du boîtier, et le contrôleur et le boîtier ayant une orientation similaire. Cela a plutôt bien fonctionné : lorsque j’ai pris ma manette en main, le cube bougeait avec lui, ressemblant à la forme de la boîte, et créant un trou dans le monde virtuel qui ressemblait beaucoup à la forme de la boîte : J’ai eu mes biscuits en virtualité augmentée !
Il y a un problème que je souhaite signaler concernant l’utilisation de vos contrôleurs Touch Plus comme trackers. Ou mieux, deux problèmes. Le premier est que ces manettes se mettent en veille assez rapidement pour économiser la batterie, donc si vous ne les déplacez pas, ils se mettent en veille et vous perdez le suivi de votre objet. La seconde est que puisque Touch Plus est suivi avec une fusion de leur suivi LED IR et de leur suivi manuel, si vous ne mettez pas votre main autour du contrôleur, le suivi peut devenir instable, et même parfois, le système peut commencer à suivre votre main au lieu du contrôleur (surtout via la connexion Link). C’est pourquoi, lorsque j’attrapais la boîte, je la saisissais toujours de manière à ce que ma main soit autour du contrôleur.
Ajouter des biscuits
L’ajout des biscuits était quelque chose de relativement simple puisqu’il ne s’agissait que de la physique Unity. J’ai retiré le cube et l’ai remplacé par une boîte cubique ouverte, c’est-à-dire un cube sans face supérieure et avec des faces latérales plus épaisses, en ajoutant des collisionneurs partout. Dans cette boîte virtuelle que j’ai créée, j’ai mis les cookies, qui sont des corps rigides dotés de collisionneurs. Par ici, Je laisse le moteur physique faire tout: lorsque la boîte virtuelle était mise à l’envers, la gravité virtuelle aurait fait tomber les biscuits de la boîte.
La seule chose à laquelle il fallait faire attention était de ne pas mettre les biscuits comme enfants de la boîte, leurs transformations ne devaient pas être déplacées par celle du parent, mais devraient être les collisionneurs de la boîte qui les déplaçaient via des interactions physiques. De plus, ils ne doivent être activés que lorsque le contrôleur commence à être suivi, sinon lorsque le contrôleur démarre son suivi, il passe de la coordonnée d’origine à sa première position réelle détectée, et ce saut fait s’envoler tous les cookies.
Tests et construction
Je veux également vous donner quelques informations sur le processus de test et de construction. Pour les tests, j’ai trouvé très utile de tester l’application via le Quest Link. Il existe un paramètre dans l’application PC Oculus (maintenant appelée application Meta Quest Link) qui vous permet de diffuser des données passthrough via Oculus Link afin que vous puissiez appuyer sur Play dans l’éditeur Unity et tester votre application passthrough dans l’éditeur. Il a une qualité de passthrough de pomme de terre, mais c’est suffisant pour vérifier que votre application fonctionne avant de faire une longue construction sur l’appareil.
Il y a cependant quelques mises en garde lors des tests dans Editor : le suivi du contrôleur m’a semblé plus dépendant du suivi manuel lorsque j’étais sur Link, je devais donc toujours mettre mes mains autour du contrôleur lors du test, je ne pouvais pas simplement saisir la boîte. Aussi, le shader que j’ai sélectionné pour la Virtualité Augmentée sur la boîte ne fonctionnait que sur un œil sur le PC, alors qu’il était parfait sur la version Quest. De plus, l’exécution de l’ensemble de l’application était plus saccadée sur Link, alors qu’elle était fluide dans Build.
Quant au processus de construction, il était le même que pour n’importe quelle application Quest.. Le Meta SDK offre des fonctionnalités pour vous aider à définir les paramètres requis avant de créercomme l’outil OVR Performance Lint ou l’outil de configuration de projet qui se trouvent également dans le menu Oculus -> Outils.
Et voilà : j’espère que ce petit guide vous a inspiré pour créer votre application de virtualité augmentée sur Quest ! Si vous faites quelque chose avec, faites-le moi savoir, je suis curieux de voir vos expériences
(ou si vous souhaitez que je vous consulte pour créer des expériences audiovisuelles, contactez-moi simplement)