Liste des projets dans le domaine du rendu 3D

Unity - Projet SmartUpp

Au sein de l'entreprise ITECA, j'ai travaillé sur l'application SmartUpp. Je vais donc présenter le fonctionnement de l'application ainsi que le but final de son développement.

L'application SmartUpp a été créée dans le but de réaliser des jumeaux numériques de l'usine des clients. Ces derniers devaient pouvoir réaliser plusieurs actions dans l'application :

  • Créer une nouvelle usine
  • Importer des fichiers 3D
  • Aménager les objets dans la scène
  • Animer la scène
  • Relier des automates au moteur de simulation
  • Simuler les flux de production

Les scènes, ainsi que tous les objets qui sont ajoutés, sont stockés dans une base de données no-SQL ArangoDB. Les accés à la base de données sont réalisés grâce à une API REST en PHP qui est utilisée dans tous les outils qui sont liés à cette application. Les clients peuvent réaliser la gestion de la base de données grâce à une application WEB où ils pourront modifier la majorité des tables.

Concernant l'automatisation des machines du client, ITECA a un partenariat, sous forme de laboratoire commun, avec le laboratoire P Prime de Poitiers. Pour cela, nous avons dû passer toutes l'application SmartUpp en repère indirect, car les simulations et les données constructeurs sont dans ce repère. Ensuite nous avons dû réaliser une interface permettant de rentrer les informations des différents repères utiles pour la simulation. Le but final est de pouvoir brancher (ou lancer un simulateur) un automate qui pourra conduire en même temps l'objet dans l'application ainsi que la machine en temps réel.


Blender

Lorsque j'ai travaillé pour ITECA, j'ai souvent eu l'occasion de travailler avec Blender. Certains clients s’adressaient à l'entreprise avec des fichiers CAD qu'ils n'arrivaient pas à ouvrir et modifier, nous devions donc trouver un moyen de les ouvrir et de créer une scène afin qu'ils puissent réaliser leurs projets. Cependant, le plus souvent les fichiers que l'on arrivait à ouvrir et à simplifier grâce à nos outils n'étaient pas suffisants (soit des objets étaient manquants, soit les fichiers étaient mal réalisés, c'est-à-dire pas réalisé dans un objectif de visualisation). Nous devions donc les reprendre sous blender afin de merge les différents objets dans un nombre de mesh raisonnable (en CAD tous les boulons, toutes les barres des grilles, tous les trous, etc ... sont modélisés) pour pouvoir ensuite les simplifier et appliquer des textures afin que le rendu final soit réaliste.


Unity - VR : HTC VIVE

Pour l'entreprise Iteca, j'ai eu l'occasion de travailler sur une application en VR SmartUpp. Cette application devait pouvoir être utilisé dans la plupart des configurations possibles en même temps, c'est-à-dire en VR, clavier souris et tactile. Donc chaque fonctionnalité que j'ai réalisée sur l'application SmartUpp, les interactions devaient être réalisées pour chaque controller en même temps.

L'application devait continuer d'être accessible avec le clavier/souris et le tactile même si un casque VR était branché (par exemple l'interface en screen space). La caméra de base lorsqu'il n'y avait pas de casque branché était une caméra classique controlable avec le clavier, cependant lorsqu'un casque HTC VIVE était branché un bouton de l'interface devenait accessible nous permettant de passer de la caméra classique à la caméra VR.

Pour l'interaction avec les controllers VR nous utilisions des interfaces en worlds space dont les éléments interactifs ont une clollide box, il suffit donc de placer le controller Vive sur l'élément à interagir et appuyer sur la gâchette pour interagir. Cependant j'ai pu implémenter une nouvelle fonctionnalité du HTC Vive Pro : le eye tracking. Cela m'a permis d'implémenter 3 fonctionnalités dans l'application, l'animation du visage du personnage du joueur en fonction des mouvements des yeux de l'utilisateur, le rendu fovéale et l'interaction avec les interfaces en la regardant suffisamment longtemps. De plus, comme l'application est vouée à être utilsée pour faire des démonstrations avec plusieurs utilisateurs se relayant, j'ai dû implémenter directement le calibrage de la fonctionnalité dans l'application au lieu de devoir passer par l'interface HTC Vive pour lancer la calibration du eye tracking.


Unity - Gizmo de déplacement d'objet

Le premier projet que j'ai dû réaliser dans l'entreprise ITECA est un module de déplacement d'objet dans SmartUpp. Le module intègre plusieurs fonctionnalités de déplacements :

  • Déplacement par plan et par vecteur
  • Rotation par plan et par vecteur
  • Scale
  • Choix de l'espace dans lequel l'utilisateur souhaite réaliser ces transformations, par exemple repère local, repère monde ou encore n'importe quel repère d'un objet sélectionné.
  • Ancrage des déplacements, c'est-à-dire de donner la possibilité à l'utilisateur de paramétrer un pas (distance ou degrés) ainsi que la "force" de l'ancrage.
  • Changement du point de pivot

Le but de ce module est de pouvoir réaliser l'aménagement d'une scène par le client directement à l'intérieur de l'application. La scène est sauvegardée sur un server, les actions de déplacement sont aussi sauvegardées dans une pile d'action sur le server, permettant de do et undo l'action.


Unity - Module d'animation d'objet

Le second projet que j'ai dû réaliser pour l'entreprise ITECA et l'application SmartUpp est un module d'animation des objets. L'utilisateur de l'application devait pouvoir réaliser tout un ensemble d'animation des objets de la scène. Pour cela j'ai créé grâce à un pattern composite représentant les animations. Grâce à cela, une animation est aussi un groupe d'animation qui peut être intégré à d'autres animations.

Pour représenter et créer les animations, deux interfaces ont été créés. Une timeline d'animation ainsi qu'un éditeur nodal. Les animations sont toujours représentées de la même manière sur l'éditeur et sur la Timeline et elles sont mises à jour continuellement l'une vers l'autre.


Unity - Module de gestion des flux

Le troisième projet que j'ai réalisé pour l'entreprise ITECA dans l'application SmartUpp est un module de gestion des flux de production. Ce module permet de rajouter des éléments d'un flux de production, le paramétrer et le rattacher à d'autres éléments d'un flux.

Une fois le flux de production crée on peut réaliser une simulation du flux production afin de voir l'évolution de la production du flux ainsi que celui de chaque. La simulation crée une alerte dans le cas où un élément du flux est en surproduction et ne peut plus suivre la cadence.

Le but de cette application est de réaliser la simulation des flux en 3D afin d'allier conception et aménagement du flux directement d'un point de vue commercial grâce à la visualisation 3D réaliste du flux de production.


Unity - Import de fichier 3D

Pour réaliser la plupart des projets pour l'application SmartUpp de l'entreprise ITECA, le client devait pouvoir importer tous ces objets 3D dans l'application ITECA (tesselation et CAD). Pour cela j'ai implémenté deux bibliothèques C++, Assimp pour les objets tessélés et CoreTechnology pour les fichiers CAD. Une fois les objets chargés, il faut réaliser une étape de tesselaton pour les fichiers CAD et ensuite il faut optimiser les fichiers afin de pouvoir les afficher dans Unity. Une fois les meshs récupérés ils sont placés dans des GameObject depuis le C++.


Stage Rendu de la mer

Dans le cadre de la deuxième année de master ISICG j'ai eu l'opportunité de réaliser un stage de 22 semaines au sein du laboratoire Xlim à Poitiers, équipe ASALI-IG. Le sujet Initial du stage est : "Vers un méta-modèle de représentation graphique pour l’animation des déferlements en mer", encadré par Marc Parenthoën.

Les différentes tâches effectuées lors du stage :
  • Réalisation d'une recherche documentaire et un état de l'art sur l'animation de la mer
  • Réalisation d'une méta-texture dont le comportement et le rendu sont définis à l'aide de textures
  • Calcul de collision de particule sur GPU avec un objet modifié via un vertex shader (utilisation du tampon de profondeur).

Projet Impression 3D

Le but de ce projet est de réaliser un programme en Java permettant de découper un objet 3D en tranche pour calculer le chemin de l'imprimante 3D

Éléments implémentés lors de ce projet :
  • Calcul des intersections en fonction de la hauteur
  • Création des contours des couches, illustrées sous forme d'images
  • Remplissage par ligne de balayage
  • Calcul de la distance avec le bord du plus proche

Projet Tour Into the Picture

J'ai réalisé ce projet lors de ma deuxième année de Master. Il s'agit de l'implémentation du papier Tour Into the Picture. Ce projet est réalisé en WebGL et la création des objets 3D à l'aide des images. Le but est de transformer des images 2D en scène 3D.


Projet Simulation Physique Masses-Ressorts

Ce projet consistait à présenter un papier de recherche récent sur l'animation des vêtements et d'implémenter une partie du papier. Nous avons choisi le papier "Contact-Aware Matrix Assembly with Unified Collision Handling for GPU-based Cloth Simulation". Nous avons donc réalisé l'animation d'un tissu grâce à un système masse ressort. Nous avons commencé à réaliser la parallélisation des calculs de forces et nous avons seulement eu le temps de le faire pour le calcul de la gravité.


Projet Jeu Unity - Labyrinthe

J'ai eu l'occasion de créer un jeu en binôme sur le sujet de notre choix. Nous avons donc décidé de réaliser un jeu avec pour thème la génération procédurale de Labyrinthe. Nous avons réalisé ce jeu grâce au moteur Unity.

Éléments implémentés lors de ce projet :
  • Un menu et une interface
  • Une génération procédurale du labyrinthe
  • Une caméra première personne ainsi qu'une caméra vue de haut
  • Des objets permettant de modifier le comportement du joueur

Projet WebGL

Lors de ma licence j'ai réalisé un projet en WebGL afin de modéliser une flamme ainsi que de la fumer à l'aide de Three.js. J'ai dû réaliser ce projet lors de ma troisième année de licence avec peu de bagage en l'informatique graphique. Ce projet m'a permis de manipuler les shaders, les textures, les ombres et les systèmes de particules.

Éléments implémentés lors de ce projet :
  • Les Shaders
  • Les Textures
  • Les Ombres
  • Les systèmes de particules

Projet GobLim Eau

En première année de Master, j'ai eu l'opportunité de réaliser un projet sur le moteur 3D Goblim en OpenGL afin de réaliser une scène contenant de l'eau.

Notions vues et implémentées lors de ce projet :
  • Les Shaders
  • Les Textures
  • Les Ombres
  • Les Noises
Eau
Cliquer sur l'image pour voir le rapport

Projet GobLim BRDF

Pour ce projet de groupe, réalisé lors de ma première année de Master, nous devions ajouter une option sur le moteur GobLim en OpenGL afin de gérer des modèles de BRDF et de générer des shaders en fonction des paramètres choisis pour la BRDF sélectionner. Les BRDF implémentés viennent du logiciel BRDF explorer de Disney.

BRDF
Cliquer sur l'image pour voir le rapport

Projet Lancer de Rayons de A à Z

Pendant ma première année de master j'ai réalisé un moteur de lancer de rayons en JAVA de A à Z

Voici la liste des fonctionnalités implémentées dans ce moteur de lancer de rayons :
  • Affichage d'objet paramétrique (sphère, plan, ...)
  • Affichage d'objet obj
  • Structure accélératrice Octree
  • Arbre BSP
  • Gestion matériaux et BRDF
  • Textures paramétriques (noise)
Lancer de Rayons
Cliquer sur l'image pour voir le rapport