Rendu par lancer de rayons des maillages du fil rouge, en C++ compilé en WebAssembly, utilisable en ligne.
TerminéSprint S33-S34 · 8 points
En bref, sans jargonpour les non-informaticiensLire le résuméRefermer
Ce que c'est
Un programme qui fabrique des images réalistes d'objets 3D en simulant le trajet de la lumière (reflets, transparence, ombres douces), directement dans la page.
À quoi ça sert
C'est la technique des films d'animation et des images d'architecture.
Ce que ça montre
La maîtrise du rendu d'images, au cœur de l'informatique graphique, avec un calcul réparti sur tous les cœurs du processeur.
lib-c (lecture des maillages) → Moteur (C++, BVH, tracé de chemins) : OBJ, PLY, STL
Moteur (C++, BVH, tracé de chemins) → Ligne de commande (images de référence, PSNR) : rendu natif
Moteur (C++, BVH, tracé de chemins) → WebAssembly (interface C)
WebAssembly (interface C) → Web workers (une bande chacun)
Web workers (une bande chacun) → Fiche du site (rendu progressif) : passe après passe
Lancer de rayons dans le navigateur
Le moteur C++ de ce projet, compilé en WebAssembly, calcule l'image dans des web workers, un par cœur de calcul : chaque passe ajoute un rayon par pixel, l'image se précise sous vos yeux (ombres douces, reflets, réfraction du verre). Choisissez une scène ou votre propre maillage, une matière, puis tournez autour en faisant glisser l'image ou avec les curseurs.
ou le déposer sur l'image : il reste dans votre navigateur.
Lumière et matières
Une seule lumière sphérique, pas de caustiques ; 256 passes au plus. Les maillages sont ceux du projet Topologie 3D, lus par lib-c.
Gain mesuré avec plusieurs workers
Image de 480 x 270 pixels, scène des trois sphères, moyenne de 8 passes (meilleur de trois essais), même module WebAssembly et mêmes bandes que la page, dans des threads Node ; processeur Intel(R) Core(TM) i5-10400F CPU @ 2.90GHz, 12 threads.
Workers
Temps par passe (ms)
Accélération
1
46,8
× 1,00
2
25,1
× 1,86
4
14,5
× 3,23
8
11,6
× 4,03
Au-delà de 4 workers, le gain ralentit : ce processeur n'a que 6 cœurs physiques, les autres threads partagent leurs unités de calcul. Dans votre navigateur, le temps par passe s'affiche sous l'image ; changez le nombre de workers pour comparer.
Captures haute définition
Rendues par le moteur natif (le même code C++, compilé pour le processeur) en 640 × 360, 256 passes, par scripts/captures.mjs.
Les trois sphères en verre, mate et en métal, avec deux petites, sur le damier crème et chocolat.Le tore en verre : le damier se voit à travers, déformé par la réfraction.Le ruban de Möbius en métal presque poli, qui reflète le damier.La selle, mate, sous une lumière basse et chaude (2600 K), comme un soleil couchant.
Technologies
C++
WebAssembly
Emscripten
CMake
GoogleTest
Qui fait quoi
C++
Le moteur : intersections, BVH découpée selon la surface (SAH), tracé de chemins, matériaux, réglages de la lumière.
WebAssembly
Le moteur tourne dans le navigateur, réparti sur plusieurs web workers, sur la fiche.
Emscripten
Compile le C++ et le lecteur de lib-c en WebAssembly, version épinglée ; la CI vérifie le build octet pour octet.
CMake
La compilation native et les tests sur Linux, Windows et macOS, avec ASan et UBSan.
GoogleTest
Les tests de physique (fournaise blanche, irradiance analytique), la BVH contre la force brute, les images de référence.