Lecteur de modèles Filmbox (.fbx)

Description

Etant passionné par la création de jeux vidéos, je cherche depuis quelques temps la meilleure manière d'importer des modèles animés dans mes projets c++. Dans ce contexte, j'ai écrit un petit lecteur de modèles Filmbox (fichiers .fbx).

En tant que hobbyiste, je crée parfois de petits jeux, mais je travaille seul. N'étant moi-même pas graphiste, et n'ayant aucun talent de modeleur, j'ai dû trouver une solution simple et gratuite pour créer des modèles humains animés, étant donné que je souhaitais aller un peu plus loin que des jeux de puzzle avec des cubes. Avec le temps, j'ai trouvé une solution intéressante et gratuite, qui consiste à créer des modèles avec une application spécialisée, puis à les animer à partir d'une librairie de Motion Capture. Et il existe des solution gratuites et libre de droits pour accomplir cela.

Le but de ce projet est donc de pouvoir importer dans du code c++ et dessiner avec OpenGL des modèles Filmbox (.fbx), crées avec le générateur de modèles MakeHuman (http://www.makehumancommunity.org/), puis animés à partir de la bibliothèque de Motion Capture Mixamo (https://www.mixamo.com/). Vous pouvez obtenir ces outils gratuitement, sur leurs sites respectifs, si vous êtes intéressés.

J'ai essayé de créer plusieurs modèles avec cette méthode, puis de les ouvrir avec ce lecteur, et cela semble plutôt bien fonctionner. Voici comment créer votre propre modèle:
1. Créer un modèle avec MakeHuman, s'assurer de lui attribuer un squelette (celui nommé "Game Engine" dans l'onglet "Pose/Animate"), puis exporter le modèle dans un fichier Filmbox (.fbx)
2. Ouvrir Mixamo, importer le modèle (bouton "Upload Character" à droite), puis choisir une animation dans la bibliothèque
3. Dans Mixamo toujours, cliquer sur le bouton "Download" à droite, puis sous "Format", choisir "FBX ASCII (.fbx)", et cliquer à nouveau sur "Download"
4. Utiliser le reader c++ pour ouvrir le fichier généré par Mixamo

NOTE Concernant ce dernier point, le nom du modèle est codé en dur dans le code source, il faudra donc le modifier puis recompiler la démo si vous voulez ouvrir un autre fichier. Vous devrez le faire à 2 endroits dans le fichier FBX.cpp: dans la fonction wWinMain() pour le nom du fichier du modèle, et dans la fonction OnLoadTexture() pour pointer vers le dir des textures. Les chemins des fichiers peuvent être relatifs.

Ce lecteur a certaines limitations et améliorations possibles, entre autres:
- Les fichiers binaires ne sont pas compatibles, seuls les fichiers au format ASCII sont supportés
- Pas testé avec d'autres fichiers que ceux générés par Mixamo
- Les fichiers contenant plusieurs animations ne sont pas supportés
- Le rendu OpenGL est très limité, entre autres la prise en charge des matériaux, lumières, ... est très rudimentaire
- La création des vertex buffers est faite du côté CPU au lieu du GPU, ce qui implique beaucoup de copies et des pertes de performances

Le lecteur a quelques options, les voici:
- Touche [1] -> Montrer/Cacher le squelette
- Touche [2] -> Activer/Stopper la rotation
- Touche [Espace] -> Mettre en pause/Redémarrer l'animation

NOTE sous Visual Studio, j'ai remarqué de le lecteur était très lent en Debug. Cela m'a déjà fait le coup avec d'autres projets et il semble que OpenGL en soit la cause. Si vous remarquez une lenteur excessive, vérifiez d'abord si vous êtes bien en Release.

Vous pourrez également trouver ce projet sur mon Git, ainsi que mes autres projets:
https://github.com/Jeanmilost/Demos/tree/master/Visual%20Studio/OpenGL/FBX

NOTE J'ai dû réduire un peu la qualité du modèle afin que mon package soit accepté lors de l'update. Si vous voulez le modèle en meilleure qualité, vous pouvez le télécharger depuis mon Git, ou vous pouvez générer le vôtre directement en utilisant MakeHuman.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.