Environment virtuelle d'entrainement

C#

Ce projet a été réalisé lors de mon semestre d’échange à Amsterdam, dans le cadre d’un projet en groupe de cinq personnes réalisé pour un client externe.

L’objectif était de développer dans Unity un environnement de formation en réalité virtuelle permettant à des policiers en formation de s’exercer à l’analyse de traces de sang (Bloodstain Pattern Analysis, BPA). Le scénario devait notamment permettre de créer et d’analyser une scène de crime contenant différents motifs de projections de sang.

Le projet était organisé en quatre sprints, avec des phases régulières de conception et de développement.

Au sein du groupe, j’ai principalement travaillé sur la représentation des traces de sang dans Unity. J’ai exploré plusieurs approches pour obtenir un rendu suffisamment réaliste tout en restant compatible avec les contraintes du projet, avant de développer un système permettant de placer et gérer facilement les différents motifs dans la scène.

Recherche d’une solution pour les traces de sang

Ma première approche consistait à générer les traces directement à partir de la géométrie de la scène. Lorsqu’une trace devait être placée, un rayon était lancé dans la scène afin de détecter la surface touchée. À partir du point d’impact et de la normale de la surface, je récupérais une partie du maillage pour créer une géométrie légèrement décalée de la surface.

Un shader permettait ensuite d’appliquer le motif de sang sur cette géométrie. Cette approche permettait théoriquement de placer une trace sur n’importe quelle surface sans avoir à préparer la scène à l’avance.

Prototype

Cette solution fonctionnait correctement, mais elle s’est révélée trop coûteuse et surtout trop complexe à maintenir dans le cadre du projet. La génération nécessitait notamment de manipuler dynamiquement la géométrie des objets et le temps disponible ne permettait pas d’investir suffisamment dans cette approche.

J’ai ensuite exploré une approche basée sur la simulation de fluides afin de générer directement des motifs de sang sous forme de géométrie. Après une première expérimentation avec Blender, je suis passé à Houdini pour avoir davantage de contrôle sur la simulation et sa génération.

Malgré plusieurs itérations, je n’ai pas réussi à obtenir un comportement suffisamment proche de ce qui était recherché dans le temps disponible. Une partie du problème semblait finalement venir de la configuration de la simulation, notamment de l’interaction entre les fluides, mais cette piste a été abandonnée avant de pouvoir être approfondie.

Une autre solution que les membres de mon groupe ont essayé était de générer des motifs avec de l’IA générative, mais les résultats n’étaient pas satisfaisant pour le client.

La solution retenue

Après plusieurs expérimentations, nous avons finalement retenu une approche plus simple : utiliser des photographies réelles de traces de sang comme base pour les motifs. Cette solution était plus facile à contrôler et permettait d’obtenir rapidement un rendu satisfaisant dans Unity.

Nous avons progressivement établi un workflow pour extraire les traces des photographies et les préparer pour leur utilisation dans Unity. J’ai notamment travaillé sur la préparation des textures avec Substance Painter, en utilisant des normal maps et des height maps pour donner du relief aux motifs, puis sur leur intégration sous forme de decals.

Le placement manuel des motifs nécessitait cependant de configurer individuellement chaque Decal Projector. Pour faciliter l’intégration des motifs dans les scènes, j’ai donc développé une interface personnalisée dans l’éditeur Unity. Elle permet de sélectionner les motifs disponibles et de les glisser directement dans la scène sans avoir à configurer manuellement chaque Decal Projector.

Chaque motif est enregistré dans un registre intégré dans les paramètres du projet Unity contenant notamment son nom et ses tags permettant de le catégoriser. Cela permet d’ajouter de nouveaux motifs sans modifier l’interface elle-même.

Lorsqu’un motif est déposé dans la scène, l’outil configure automatiquement le Decal Projector correspondant, notamment son orientation à partir de la normale de la surface, ainsi que la texture et les autres paramètres associés au motif.


Le client s’est montré satisfait du résultat. Nous avons également rédigé un document présentant les différentes approches explorées pour la création des motifs, avec leurs avantages et inconvénients respectifs, afin de les aider à décider comment poursuivre le projet.