Projets Simulation

Réalité Virtuelle (IKEA Virtual Planner)

Titre: Développeur de logiciel C++/3D 

Projet (IKEA Virtual Planner): Application de design d’intérieur de cuisine qui intègre la technologie de la réalité virtuelle

Programmation C++, math 3D, librairie FBX (Autodesk) 

Mandat développer une application (module) qui permet de convertir des modèles 3D (cuisine au complet), du format interne vers le format FBX Autodesk (http://www.autodesk.com/products/fbx/overview ) afin d’être visualisé par un moteur de réalité virtuelle tel qu’UNREAL. 

Description Prototype de la nouvelle génération de l’application de design d’intérieur de cuisine afin d’évaluer la faisabilité de l’utilisation de la réalité virtuelle. L’utilisateur est plongé véritablement dans l’environnement tridimensionnel (casque 3D) d’une cuisine. L’utilisateur pourra bénéficier d’une vue complète à 360°, mais également de se promener autour des modèles virtuels et de ressentir les mesures et ainsi rendre l’expérience plus réaliste. Le principal avantage est d’être en mesure d’expérimenter différents scenarios de design et rendre l’expérience plus réaliste.

Technologie Cuisine 3D est un containeur de modèles 3D tels que chaises, armoires, murs, fenêtres, etc. … connecté par une relation hiérarchique de nœuds (info géométrique, orientation, position) que l’on appelle “scene graph”. En termes simples, un ‘scene graph’ est une représentation du monde par un ensemble de nœuds reliés par une relation ‘child’ ou ‘sibling’. Par exemple, un nœud peut représenter une entité dans le monde telle qu’une chaise. Le nœud supérieur de la scène appelé le nœud ‘root’, possède une liste ‘child’ ainsi qu’une transformation dans l’espace 3D. La transformation associée au nœud est composée de trois aspects, à savoir la position, la rotation et l’échelle. Le moteur de rendu doit traverser cet organigramme pour pouvoir afficher.

Tâche principale Reproduire le ‘scene graph’ au format Autodesk FBX, réutiliser et adapter certains algorithmes de leurs bibliothèques pour extraire les informations sur les nœuds du scene graph original afin de reproduire l’environnement 3D dans le nouveau format FBX Autodesk. 

Extraire les données du modèle 3D (représentation 3D de la cuisine) format interne (représentation graphique 3D de la pièce) et de reproduire (re-écriture) l’équivalent avec la technologie FBX.

Ci-dessous le maillage complet de la cuisine

Maillage complet de la cuisine
  • Analyse du code source (existant) de la compagnie, identifier les parties de code afin d’être en mesure de réutiliser/adapter certains algorithmes; 
  • Mise à niveau de certaines librairies de la compagnie pour le support du projet (débogage, mise au point d’un environnement pour tester et valider le rendu des modeles;);  
  • Programmation d’un algorithme de modélisation 3D qui permet de construire le ‘’scene graph’’ complet dans le nouveau format FBX;  
  • Re factoring do code existant (librairie 3D) pour le support du projet
  • Mise au point d’un environnement pour tester et valider le rendu des modèles
  • Prototypage d’algorithmes, optimization

Ci-dessous un exemple de code pour les differentes parties de la cuisine.

FbxNode* RoomExtract2FbxApp::createRoomStuff(FbxManager* g_SdkManager, FbxScene* pScene)
{
#if _DEBUG
	std::cout << "Creating the Items_Floor (whole cabinet)n";
#endif

	// create room scene graph of the room from AxsCompleteRoom model
	using namespace std;
	using json = nlohmann::json;

	// no attribute represent a group node
	FbxNode* w_roomNode = FbxNode::Create(g_SdkManager, "RoomStuff");
	assert(nullptr == w_roomNode->GetNodeAttribute());

	// 0: index (World container) of RoomStuff
	// m_jsonObject["object"]["children"][0]["children"] -> this is the world
	const unsigned int w_worldIdx = 0; // RoomStuff (FVSLoadItem)
	json::string_t w_roomStuffName = m_jsonObject["object"]["children"][0]["children"][0]["name"];
	assert(std::string("RoomStuff") == w_roomStuffName);

	// room object
	json w_roomStuff = m_jsonObject["object"]["children"][0]["children"][0]; // "RoomStuff"
	json::array_t w_roomArray = w_roomStuff["children"]; // array of all groups of the RoomStuff 

	// call create group
	if (w_roomStuff["children"].is_array()) // first children
	{
		// start from top children node and traverse the to leaf
		createGroup(w_roomStuff["children"], w_roomNode); // positionned at no name 
	}
	return w_roomNode;
}

Pour un aperçu de la technologie, voir les vidéos sur ‘YouTube’ 

Projet Simulateur Chirurgie Assistée Par Ordinateur

Titre: Consultant Technologique 

Projet (Chirurgie Assistée Par Ordinateur): Système de Simulation de Formation (réalité virtuelle) 

Programmation C++, algorithme, Objet-Orientée 

But Librairie pour mesurer l’efficacité des étudiants en chirurgie 

Mandat J’ai été embauché en tant que consultant pour développer et mettre en œuvre une bibliothèque d’algorithmes de collecte de données afin de fournir des mesures objectives pour évaluer les compétences techniques des stagiaires. 

Technologie 

La chirurgie assistée par ordinateur consiste à incorporer des logiciels qui aident le chirurgien avant et pendant une opération (formation des stagiaires) l’ordinateur reste un outil pour guider le chirurgien. 

Projet de R&D développement d’un simulateur qui est une application client-serveur en réseau (le client collecte les données et les envoie au serveur pour effectuer une analyse en exécutant un algorithme (métriques). 

J’ai développé le module pour la collection de données afin de fournir des mesures objectives pour évaluer les compétences techniques des stagiaires pour accomplir une tâche durant une simulation enregistrant ainsi les scores globaux et spécifiques à la tâche.  

Parallèlement à ma tâche principale, je supervisais un employé (problèmes techniques) et m’assurer que le projet avance selon les échéanciers. J’ai également participé au développement du module des algorithmes (métriques).

  • Architecture de la librairie (design OO)
  • Présentation du projet (avancement sur une base hebdomadaire) 
  • Guide d’utilisation, documentation, participe aux revues de code 
  • Développé une librairie de ‘parser’ des fichiers xml pour la lecture et l’écriture des données;
  • Support technique (membres de l’équipe)
  • Optimisation de code (performance) 
  • Intégration et test de validation