Moteur de ray tracing en C++ générant des images 3D par lancer de rayons, avec primitives, matériaux et export/affichage SFML.
Telecharger & tester
make && ./raytracer scene.cfg (moteur de lancer de rayons configurable, exporte une image PPM/PNG)
Raytracer est un projet Epitech (Tek2, B-OOP-400, groupe) qui consiste a ecrire en C++ un moteur de lancer de rayons capable de generer une image realiste a partir d'un fichier de configuration decrivant une scene 3D. Le programme prend en argument unique le chemin de ce fichier de scene et produit une image, sans interface graphique obligatoire dans la version de base (sortie au format PPM).
Les fonctionnalites sont hierarchisees en trois paliers de complexite croissante. Le socle obligatoire (Must) couvre les primitives sphere et plan, la translation, un eclairage directionnel et ambiant, une couleur plate comme materiau, et la configuration de scene et de camera. Le palier intermediaire (Should) ajoute cylindre, cone, rotation et ombres portees. Le palier libre (Could) ouvre sur un tres large eventail de bonus notes chacun d'un bareme de points : primitives avancees (tore, triangles, import .obj, fractales, ruban de Mobius), transformations (echelle, cisaillement, matrice de transformation, graphe de scene), eclairages multiples et modele de Phong, materiaux avances (transparence, refraction, reflexion, texturing procedural, normal mapping), anti-aliasing par supersampling, et optimisations comme le multithreading ou le space partitioning.
La scene est decrite dans un fichier externe, dont le format suggere s'appuie sur la bibliotheque libconfig++ (sections camera, primitives, lights), mais le projet autorise l'ecriture d'un parseur maison si prefere. Les seules bibliotheques autorisees pour les fonctionnalites obligatoires sont la bibliotheque standard C++, libconfig++ pour parser la scene et SFML pour l'affichage optionnel.
L'architecture impose l'usage d'interfaces au moins pour les primitives et les lumieres afin de garantir l'extensibilite, et l'utilisation d'au moins deux design patterns parmi Factory, Builder, Composite, Decorator, Observer, State et Mediator, dont le choix est justifie et discute lors de la soutenance. Un systeme de plugins bases sur des bibliotheques dynamiques (.so) est propose en option pour charger a chaud primitives, lumieres, chargeurs de scene ou moteurs de rendu, sans que l'executable ne soit lie a ces plugins.
Le projet peut se batir soit avec un Makefile classique (regles all, re, clean, fclean), soit avec CMake, les deux devant produire le binaire raytracer a la racine et les eventuels plugins dans ./plugins/. La soutenance exige la preparation de scenes de demonstration et de captures d'ecran illustrant chaque fonctionnalite implementee, le projet pouvant aller jusqu'a l'illumination globale pour atteindre le photorealisme d'un veritable raytracer.
Projet suivant
