École Polytechnique -- CSE 306 Computer Graphics (3rd year Bachelor)

Short presentation
Lecture Notes



École Nationale Supérieure (ENS) Lyon -- Mathematical methods for image synthesis (final year)

Syllabus and slides



École Centrale Lyon -- Cours de Rendu Réaliste [FR] (dernière année)

Notes de cours.
Template de code. (2 fichiers stb_image en dépendance)
Ci-après une version accélérée du cours de raytracing, implémentation comprise. Les séances durent normalement 4h et laissent du temps pour implémenter. Ces vidéos ne se substituent pas aux cours ; elles ne font que le survoler. L'implémentation complète du pathtracer (jusqu'au cours 7 inclus) requiert environ 5h 15min -- au delà, il s'agit de temps passé à corriger vos bugs. Faites les choses bien du premier coup, cela vous fera gagner du temps! :)
L'implémentation que je donne dans ces vidéos est à titre indicative, n'est pas codée proprement, et je ne veux pas voir mon code dans vos rendus de projet.

Cours 1 : introduction, calculs d'intersection rayon-sphère(s), modèle d'éclairage Lambertien.

Durée implementation : 45 min.
Cours 2 : Ombres portées, correction gamma, surfaces spéculaires et transparentes.

Durée implémentation : 25 min
Cours 3 : Équation du rendu, intégration de Monte-Carlo, éclairage indirect.

Durée implémentation : 15 min
Cours 4 : Anti-Aliasing, ombres douces, modèles de camera, depth-of-field.

Durée implémentation : 25 min
Voir errata plus bas.
Cours 5 (deux séances) : Intersection rayon-plan, rayon-triangle, rayon-boite englobante, gestion des maillages, bounding volume hierarchies, lissage de Phong.

Durée implémentation : 1 h 15 min
Cours 6 (additionnel) : Textures, roulette Russe, réflexion de Fresnel, modèles de BRDFs, motion blur.

Durée implémentation : 1 h 10 min
Errata du Cours 4 : Relation intensité lumière ponctuelle vs. sphérique, proba d'échantillonnage lumière sphérique, reflets lumière manquants sur surfaces spéculaires et transparentes. Petite optimisation intersection rayon-triangles.

Durée implémentation < 5 min
Cours 7 (additionnel) : Milieux participants + Errata Cours 5 (off-by-one dans construction BVH, et positivité du test rayon-boite).

Durée implémentation : 1 h
Errata Cours 4: l'implémentation proposée entre les cours 4 à 6 n'affiche pas la sphère lumineuse dans les reflets spéculaires purs ni derrière les objets transparents. J'avais séparé l'éclairage en une somme éclairage direct + indirect pour le cas des matériaux diffus, et n'avais donc pas inclu de contribution émissive dans l'éclairage indirect pour ne pas compter les sources de lumière 2 fois. Hors, un reflet spéculaire ou transparent peut être vu comme une contribution indirecte. Il manque donc les chemins qui relient les matériaux spéculaires à la source lumineuse (e.g., les caustiques). Deux autre bugs plus mineurs sur l'impact visuel sont aussi corrigés dans la vidéo Errata du Cours 4 (intensité de la lumière sphérique pour qu'elle matche la lumière ponctuelle, et erreurs dans la probabilité d'échantillonner la sphère lumineuse).

Errata Cours 5: Le test d'intersection rayon-boite englobante oublie de tester si l'intersection est "positive". On peut facilement vérifier si std::min(std::min(t_max_x, t_max_y), t_max_z) > 0 -- dans le cas contraire, la boite est derrière le rayon.
Deuxième erratum plus conséquent: un "off-by-one" dans la construction du BVH. L'arbre construit correctement est beaucoup plus rapide (environ 4x dans le cas du dragon - voire vidéo du Cours 7, partie Errata!). La condition d'arrêt peut s'écrire :
if (pivot < i0 || pivot >= i1-1 || i1==i0+1) return;
(ou tout autre critère sur le nombre maximal de triangles dans les feuilles de l'arbre) et la récursion s'applique avec
build_bvh(node->fg, i0, pivot+1);
et
build_bvh(node->fd, pivot+1, i1);




Université Lyon 1, département math -- Transport optimal (UE Transport Optimal pour l'Apprentissage)

Slides (pdf)


Université Lyon 1, département info -- Transport optimal (UE Recherche en Informatique Graphique et Image 2)

Slides (pdf)