18 May 2009

Rendu 3D en temps réel d'objets multi-texturés

Après avoir terminé la modélisation de mon premier projet 3D "de bout en bout" avec Blender (à savoir un vaisseau spatial), la prochaine étape consistait à charger mon modèle en temps réel à l'aide de l'API 3D C++/OpenGL sur laquelle je travaille avec beaucoup d'ardeur. Un écueil se présentait cependant: la gestion de plusieurs textures. Un objet 3D recouvert d'une unique texture est simple à gérer; un modèle multitexturé est cependant plus complexe à afficher. Il y a lieu de décider quelle méthode sera utilisée pour afficher les différentes textures à l'écran. Sur le vaisseau, on peut distinguer une texture pour la carcasse, une pour le cockpit, une pour le réacteur arrière et une dernière pour les tuyaux. L'utilisation de plusieurs textures sur un même objet 3D requérait quelques profondes modifications au sein du code de l'API 3D, celles-ci ont dès lors occupé mon temps libre ces derniers jours.

D'une part, l'ensemble des textures d'un objet 3D peuvent être fusionnées en une seule et unique texture UV créée à partir de Blender. Cependant, ce procédé s'avère difficile lorsque la géométrie du modèle 3D se complexifie, ce qui fut le cas avec le vaisseau. D'autre part, le standard Wavefront que j'utilise gère plusieurs textures de façon indépendante dans une seule librairie (fichier .mtl); mais mon implémentation actuelle ne supportait que les librairies composées d'un seul matériau. Après quelques recherches et réflexions, je décidai de modifier mon API afin de gérer les librairies composées de plusieurs matériaux, et donc de plusieurs textures. Suite à une bonne paire d'heures passées à développer, il m'était enfin possible de charger dynamiquement et d'effectuer le rendu temps réel d'objets multitexturés conçus via Blender.

Cette étape est un important palier dans la réalisation de mes projets personnels. En effet, je maîtrise désormais la reconstitution d'objets 3D ombrés et multitexturés en temps réel. Je peux donc me créer de petits programmes avec autant de modèles 3D que je le souhaite, construire un décor, des éléments, des personnages, etc. Les prochaines étapes seront donc logiquement les suivantes (je ne suis pas encore sûr de l'ordre):
  • Gestion des sources de lumière
  • Gestion des collisions
  • Gestion de l'évolution des objets dans le monde virtuel
  • Moteur physique (pesanteur, etc.)
  • Animation des objets
La suite au prochain numéro. En parallèle, je vais vous confier que je travaille actuellement sur un plus beau vaisseau... affaire à suivre!