Projet
Le ray tracer ... à la rencontre de l'informatique, des mathématiques et de la physique
Auteur : Simon Vézina (svezina@cmaisonneuve.qc.ca)
Département de physique
Collège de Maisonneuve
Description du sujet
Le ray tracer est un programme informatique qui fut initialement développé par Arthur Appel en 1968 et largement amélioré dans les années 80 qui consiste à générer une image 2D à partir d'une description d'un environnement 3D par l'analyse du parcours d'un rayon de lumière initialement lancé depuis la position d'une caméra et voyagement dans la scène à visualiser. En lançant un ou plusieurs rayon dans chacun des pixels d'une grille située devant la caméra, l'intersection de ces rayons avec les géométries de la scène permettre d'évaluer la visibilité de celles-ci par rapport à la caméra et leur position par rapport au différentes sources de lumière permet d'en déterminer leur couleur ce qui déterminer la couleur des pixels de la grille. L'image formée sur la grille devient la visualisation 2D de la scène.
De nos jours, l'algorithme du ray tracer est utilisé dans plusieurs logiciels d'animation 3D afin d'y produire des films d'animations ou des effets spéciaux au cinéma. En raison de l'augmentation de la puissance de calcul des ordinateurs grâce aux systèmes multiprocesseurs, des chercheurs pensent être un jour capable d'intégrer cette technologie aux jeux vidéo en temps réel.
Dans le cadre de ce projet, l'application SIMRenderer a été développée dans le langage JAVA. Elle correspond à une implémentation simplifiée d'un ray tracer. Cette application à caractère pédagogique a été conçue pour supporter les fonctionnalités suivantes d'un ray tracer :
Documentation : • Documentation interne disponible en format javadoc (en français uniquement). • Une javadoc en format HTML est disponible en ligne ici. • Intégration de JUnit Test permettant d'analyser la qualité des algorithmes implémentés.
Chargement de l'application : • Configuration de l'application à l'aide d'un fichier configuration.cfg . • Chargement de scène par lecture de fichier de format txt . • Écriture d'un fichier log.txt après l'exécution du programme pour décrire l'état de l'exécution du programme. • Affichage de message d'erreur lors d'une mauvaise définition d'un fichier de scène avec numéro de ligne et suggestion pour corriger l'erreur.
Géométrie : • Intersection de géométrie de base (plan, triangle, disque, sphère, tube, cylindre, cône). • Intersection de géométrie avancée (coquille sphérique, tore, lentille). • Transformation des géométries dans l'espace (translation, scale, rotation) par calcul matriciel de format 4×4. • Chargement de modèle 3D (obj Wavefront)
Illumination : • Modèle d'illumination direct par réflexion ambiante, diffuse et spéculaire. • Source d'éclairage multiple avec facteur d'atténuation (ambiante, directionnelle, ponctuelle). • Source d'éclairage composée d'oscillateurs pouvant générer des ondes afin de reproduire des patrons d'interférence et de diffraction (ouverture rectangulaire, ouverture circulaire, ouverture obstruée par une texture). • Calcul d'ombrage par rayon d'ombre (shadow ray). • Modèle d'illumination indirecte par réflexion et réfraction avec niveaux de récursivité variables.
Texture : • Chargement de texture de couleur (gif, png, jpg, tga, dds (en développement)) • Application de texture de couleur (texture mapping) sur des géométries (triangle, sphère).
Amélioration/optimisation : • Solution d'anticrénelage par lancé de rayons multiples (supersampling). • Infrastructure supportant le multiprocesseur (multithreading). • Partitionnement de l'espace (linéaire, voxel, multi-voxels).
Pour avoir accès à l'ensemble des fonctionnalités de l'application SIMRenderer, la réalisation de ce projet sera nécessaire. Il est possible d'obtenir l'application dans son intégralité sous certaines conditions (contactez svezina@cmaisonneuve.qc.ca pour plus de détail). |
https://en.wikipedia.org/wiki/Ray_tracing_(graphics) Le ray tracer permet de réaliser la projection d'un univers virtuel à 3D sur un plan à 2D afin de généré une image. http://leaks.wanari.com/2017/05/31/ray-tracing-akka-part-1/ Le ray tracer lance des rayon récursif afin d'évaluer la couleur appropriée à affecter à chacun des pixels d'une image. https://en.wikipedia.org/wiki/Ray_tracing_(graphics) La qualité d'un ray tracer dépend de son aptitude à bien simuler le comportement physique de la lumière. |
La galerie du projet
Vous pouvez visualiser quelques réalisations de l'application SIMRenderer au lien suivant :
http://profs.cmaisonneuve.qc.ca/svezina/projet/ray_tracer/galerie.html
SIMRenderer |
https://giphy.com/gifs/laughing-despicable-me-minions-ZqlvCTNHpqrio |
Description du projet
Le projet consiste à faire des liens entre l'informatique, les mathématiques et de la physique par l'étude de différentes fonctionnalités d'un algorithme de ray tracing. En d'autres mots, un ray tracer est un programme hautement multidisciplinaire où les contributions de plusieurs compétences sont nécessaires au bon fonctionnement du programme. Voici une liste abrégée de quelques contributions disciplinaires :
Informatique | Physique | Mathématique |
•
Le ray tracer
comporte plusieurs éléments (caméra, écran de vue, pyramide de vue,
géométrie, matériel, source de lumière, etc) dont l'intégration doit
être réalisée dans une bonne architecture. • L'étude des structures des données permet de partitionner les géométries d`une scène afin de réduire le nombre de calculs d'intersection entre les rayons lancés et les géométries ce qui permet de générer plus rapidement les images. • Le ray tracer permet de lancer de façon récursive des rayons afin d'y généré des effets visuels plus complexes. • Le ray tracer peut être accélérée à l'aide d'une stratégie de parallélisme (multithreading) ce qui rend la programmation et la gestion de la mémoire plus complexe. |
• En appliquant des lois
de l'optique géométrique, on peut simuler des effets
visuelles comme la réflexion et la réfraction. • En appliquant des lois de l'optique ondulatoire, on peut simuler des effets visuelles comme l'interférence et la diffraction. • En analysant le comportement de la lumière-matière, on peut déterminer la couleur d'un objet par le développement d'un algorithme d'illumination. |
• En appliquant du
calcul vectoriel, on peut réaliser le calcul de
l'intersection entre un rayon et plusieurs formes géométriques (plan,
triangle, sphère, cylindre, cône, etc). • En appliquant du calcul matriciel, on peut déformer et visualiser des modèles 3D complexes de haute qualité. • En appliquant du calcul statistique, on peut réduire le temps de calcul d'une scène en partitionnant judicieusement un ensemble de géométries par une analyse de leur taille et leur forme. |
Ainsi, le projet consistera à
(1) se documenter sur le sujet du ray tracer par des lectures de notes de cours,
(2) cheminer dans un laboratoire informatique où des directives sont disponibles pour être orienter dans l'implémentation des différentes fonctionnalités manquantes d'un programme de ray tracing déjà existant (SIMRenderer) mais partiellement fonctionnel,
(3) visualiser des scènes déjà construites afin de vérifier la qualité des implémentations,
(4) répondre à des questions théoriques afin de réaliser les avantages et les défaillances d'un algorithme de visualisation 3D comme le ray tracing.
Compléter le laboratoire redonnera la grande majorité des fonctionnalités au programme SIMRenderer.
Conférence en lien avec le projet
Voici quelques conférences qui ont été réalisées dans le cadre de la mise en œuvre de ce projet. Les contenus des présentations sont disponibles à l'aide des liens suivants :
• 5 février 2015 : | Appel de projet - Le ray tracer - Simon Vézina 2015-2016 |
• 1ier octobre 2015 : | Conférence - Le ray tracer - Les calculs matriciels dans le ray tracing |
Documentation du projet
Pour réaliser ce projet, il est important de se documenter sur le sujet du ray tracer. À partir des notes de cours disponible ici-bas, une lecture permettra de s'initier à plusieurs caractéristiques du ray tracer ainsi qu'aux différents calculs réalisés lors de l'exécution du programme.
Référence : Note de cours en lien avec la réalisation du projet (Le ray tracer ... à la rencontre de l'informatique, des mathématique et de la physique).
Note de cours rédigée par Simon Vézina, Collège de Maisonneuve
Lien |
Titre (sujet : Ray tracer) |
NYC XXI - Chapitre 6.1 | Le ray tracer en infographie |
NYC XXI - Chapitre 6.2a | L'intersection dans le ray tracer |
NYC XXI - Chapitre 6.2b | L'intersection d'un triangle dans le ray tracer |
NYC XXI - Chapitre 6.2c | L'intersection de géométrie complexe dans le ray tracer |
NYC XXI - Chapitre 6.3 | Les couleurs dans le ray tracer |
NYC XXI - Chapitre 6.4a |
L'illumination direct dans le ray tracer |
NYC XXI - Chapitre 6.4b | L'illumination avancée dans le ray tracer |
NYC XXI - Chapitre 6.5 | Les matrices de transformation dans le ray tracer |
NYC XXI - Chapitre 6.6 | Les transformations dans le ray tracer |
NYC XXI - Chapitre 6.7 | Les textures dans le ray tracer |
NYC XXI - Chapitre 6.X1 | Autres applications des matrices dans le ray tracer |
NYC XXI - Chapitre 6.X2 | Le partitionnement de l'espace des géométries dans le ray tracer |
Référence : Note de cours en lien avec le cours de physique 203 - NYC : Ondes et physique moderne
Note de cours rédigée par Simon Vézina, Collège de Maisonneuve
Lien |
Titre (sujet : Physique, optique géométrique) |
NYC XXI - Chapitre 2.2 | La réflexion et les miroirs plans |
NYC XXI - Chapitre 2.4 | La réfraction |
Articles scientifiques
- A_Fast_Voxel_Traversal_Algorythm_For_Ray_Tracing.pdf
Réalisation du projet : Le ray tracer
version : 2.2.0.1
La réalisation de ce projet se fera lors d'une activité de laboratoire. Pour ce faire, il faudra réaliser l'installation d'une plateforme de développement JAVA, télécharger le code source en lien avec le laboratoire.
Initialement, le programme ne fait que générer des images noire. Tout au long de ce laboratoire séparé en trois parties, le programmeur est invité à suivre des directives proposées dans des protocoles de laboratoire et de remplir des feuilles de données électroniques au fur et à mesure que les étapes sont complétées. Des images illustrant l'évolution et l'amélioration du programme seront générés afin de permettre au développeur de vérifier la qualité de sa programmation.
Installation de la plateforme de développement JAVA
Voici les liens vous permettant de télécharger l'environnement de développement JAVA :
• Installation de la plateforme JDK : | http://docs.oracle.com/javase/7/docs/webnotes/install/windows/jdk-installation-windows.html |
• Installation du logiciel de développement Eclipse : | https://eclipse.org/downloads/ |
Laboratoire : Le ray tracer - Partie 1
La 1re partie du laboratoire consiste à introduire le développeur au programme de ray tracer dont plusieurs fonctionnalités sont manquantes. Le développeur pourra implémenter quelques fonctions de base nécessaire au fonctionnement d'un ray tracer comme l'évaluation des racines réelles d'un polynôme et d'utiliser ce calcul pour évaluer l'intersection entre un rayon et un plan. Des images contenant des plans, des cubes ainsi que des disques pourront être visualisées. Afin de se préparer à cette 1re partie, il sera préférable de compléter le prélaboratoire suggéré.
Activités préparatoires : |
https://tenor.com/view/firststep-chick-snow-gif-4934800 Mes premiers pas dans un programme de ray tracing. |
|
• Pré requis : | Avoir des connaissances de base en programmation JAVA | |
• Lecture préalable : | Chapitre 6.1, 6.2a | |
• Document du prélaboratoire : | Prelaboratoire-Raytracer-Partie_1.pdf | |
Documents lors du laboratoire : | ||
• Protocole de laboratoire : | Laboratoire-Raytracer-Partie_1.pdf | |
• Feuille des données : | Ray_tracer-Feuille_des_donnees-Partie_1.doc | |
• Grille de correction : | Grille_de_correction-Raytracer-Partie_1.pdf | |
Programme : | ||
• Projet Java (code source) : |
SIM.zip (v2.1.13.2) SIM-RayTracer.zip (v2.2.0) (avec amélioration de l'application SIMRenderer) |
|
• Javadoc (en HTML) : | javadoc/index.html |
Laboratoire : Le ray tracer - Partie 2
La 2e partie du laboratoire consiste à introduire le développeur au algorithme d'illumination. En implémentant des modèles d'illumination comme la réflexion ambiante, diffuse et spéculaire, le développeur pourra visualiser des images avec des couleurs influencées par une ou deux sources de lumière. Un modèle simple d'illumination indirecte comme la réflexion et la réfraction sera implémenté pourra ajouter des effets visuels supplémentaires. Avec des calculs d'intersection entre des rayons et des nouvelles géométries comme la sphère et le tube, le développeur pourra visualiser des scènes plus diversifiées. Entre autre, un modèle 3d de type AGP pourra être visualisé. Afin de se préparer à cette 2e partie, il sera préférable de compléter le prélaboratoire suggéré.
Activités préparatoires : |
http://stores.ebay.com/SECOND-STEP-SHOES Je progresse dans mon apprentissage du ray tracing. |
|
• Pré requis : | Avoir complété le laboratoire Le ray tracer - Partie 1. | |
• Lecture préalable : | Chapitre 6.2c, 6.3, 6.4a, 6.4b et Chapitre 2.2, 2.4 | |
• Document du prélaboratoire : | Prelaboratoire-Raytracer-Partie_2.pdf | |
Documents lors du laboratoire : | ||
• Protocole de laboratoire : | Laboratoire-Raytracer-Partie_2.pdf | |
• Feuille des données : | Ray_tracer-Feuille_des_donnees-Partie_2.doc | |
• Grille de correction : | Grille_de_correction-Raytracer-Partie_2.pdf | |
Données supplémentaires : | ||
• Modèles AGP : | modele_agp.zip |
Laboratoire : Le ray tracer - Partie 3
La 3e partie du laboratoire consiste à introduire le développeur aux matrices de transformation. Le développeur devra implémenter des algorithmes d'intersection entre des rayons et des triangles, visualiser ces triangles regroupés dans des modèles 3d et transformer ceux-ci à l'aide de matrice de transformation. Finalement, un algorithme d'intersection d'un rayon avec une géométrie dans son espace objet devra être intégré au programme. Aucun prélaboratoire n'est suggéré pour débuter cette 3e partie de laboratoire.
Activités préparatoires : |
http://knowyourmeme.com/photos/1201477-sun-and-moon-animations Je cours vers la réussite du ray tracing. |
|
• Pré requis : | Avoir complété le laboratoire Le ray tracer - Partie 2. | |
• Lecture préalable : | Chapitre 6.2b, 6.5, 6.6, 6.7, 6.X2. | |
• Document du prélaboratoire : | Aucun | |
Documents lors du laboratoire : | ||
• Protocole de laboratoire : | Laboratoire-Raytracer-Partie_3.pdf | |
• Feuille des données : | Ray_tracer-Feuille_des_donnees-Partie_3.doc | |
• Grille de correction : | Grille_de_correction-Raytracer-Partie_3.pdf | |
Données supplémentaires : | ||
• Scène du chevreuil : | deer.zip | |
• Scène de Star Wars : | star_wars.zip |
Dernière mise à jour : 2024-03-28