Ce Projet a été réalisé en deux étapes, il y a donc deux vidéos de présentation.
This project was completed in two stages, so there are two presentation videos (in french).
Afin d'ajouter des retours haptiques à mes projets VR, dont Seeds dans lequel l’environnement est constitué de particules, j'ai eu envie de fabriquer des gants à retour haptique. Ce projet est réalisé dans le cadre du cours Lutherie Numérique, à l’UDEM. Les particules sont générées et contrôlées via le Vfx Graph du (à l'époque) nouveau Scriptable Render Pipeline de Unity. La partie commande et capteurs du projet est pour l’instant réalisée à l’aide d’un Arduino Uno pour du prototypage, mais je passerais à un microcontrôleur plus petit par la suite. Un capteur sur les gants permettra également de synchroniser le mouvement des particules avec les pulsations cardiaques de l’utilisateur.
In order to add haptic feedback to my VR projects, including Seeds, where the environment is made up of particles, i wanted to make haptic gloves. I was working on this project as part of the Digital Luthiery course at UDEM. The particles are generated and controlled via the VFX Graph of Unity’s (at the time) new Scriptable Render Pipeline. The control and sensor part of the project is currently done using an Arduino Uno for prototyping, but I will switch to a smaller microcontroller later. A sensor on the gloves will also synchronize the movement of the particles with the user's heartbeat.
La principale difficulté technologie est de capter les collisions entre les doigts virtuels et les particules. Le VFX graph est moteur de particules GPU, donc les scripts sont entièrement exécutés sur la carte graphique. Il n’est pour l’instant pas possible de récupérer des données pourtant lisibles dans le graph. Cette partie n’est pas non plus scriptable pour le moment. La solution future sera de développer un compute shader pour gérer la position des points depuis celui-ci. Ainsi je pourrais savoir quelles particules interagissent avec quels doigts.
The main technological challenge is capturing collisions between the virtual fingers and the particles. The VFX Graph is a GPU particle engine, meaning the scripts are entirely executed on the graphics card. It is currently not possible to retrieve data that is readable in the graph. This part is also not scriptable at the moment. The future solution will be to develop a compute shader to manage the position of the points from there. This way, I would be able to know which particles interact with which finger.
La solution actuelle est tordue mais fonctionnelle : Dans le VfxGraph, on peut détecter la collision entre les doigts et les particules. A chaque collision, la particule meurt, et déclenche un GPU event. Cet événement génère à son tour une particule au dessus de l’utilisateur afin qu’il ne puisse pas la voir. Chaque doigt donne une couleur en niveau de gris différente à la particule. Une caméra est dirigée sur la particule et génère une texture de rendu en basse définition (10px x 10px). Ensuite, un script permet de récupérer la couleur du centre de la texture et de deviner quel doigt a touché une particule, ce qui permet par la suite d’envoyer le bon message OSC pour faire vibrer le bon doigt.
The current solution is a bit convoluted but functional: In the VFX Graph, we can detect the collision between the fingers and the particles. Each time a collision occurs, the particle dies and triggers a GPU event. This event, in turn, generates a particle above the user, so they can't see it. Each finger assigns a different grayscale color to the particle. A camera is directed at the particle and generates a low-resolution render texture (10px x 10px). Then, a script retrieves the color of the texture's center to determine which finger touched the particle, allowing the system to send the correct OSC message to make the corresponding finger vibrate.