english français NOUVEAU ! Path tracer en WEBGL disponible ici

Ray Tracing et Path Tracing

Durant la seconde année à l'ESIR, j'ai développé avec un binôme, un moteur de lancer de rayon. Il fut amélioré de façon incrémentale, commençant comme un simple moteur de lancer de rayon avec couleur diffuse et spéculaire selon le modèle de Phong pour finalement devenir un moteur de Path Tracing utilisant des BRDF et une interface temps réel. Nous l'avons développé en C++.
Pendant la troisième et dernière année à l'ESIR, j'ai participé à un projet industriel sur de la synthèse d'image lui aussi. Ci-dessous, trois images d'une même scène 3D. La première uniquement composée des couleurs, la seconde utilisant le shader de Phong et la dernière simulant des ombres douces à l'aide d'une lumière ambiante.
Ray Tracing Cornel Box
Ray Tracing Cornel Box Phong Shader
Ray Tracing Cornel Box Phong Shader Soft Shadow
Les images qui suivent sont maintenant composées de lumières émissives, de surface spéculaire ainsi que de textures. Naturellement, nous avons ajouté des structures accélératrices pour accélérer le rendu, un BVH Bounding Volume Hierarchy couplé d'un SAH Surface-Area Heuristic comme nous pouvons le voir ci-dessous, la première sans SAH, la dernière avec. Notez comme les boîtes de collision collent mieux à la géométrie de la scène.
Ray Tracing Tibet House
Ray Tracing Tibet House BVH
Ray Tracing Tibet House BVH SAH
Nous avons ensuite ajouté la lumière indirecte, les lumières surfaciques, la stratification des pixels (pour réduire la variance) ainsi que la réfraction. Nous avons ensuite ajouté quelques nouvelles primitives telles que les sphères, anneaux ou cylindres permet de baisser le nombres de primitives et d'améliorer la précision des scènes. Ce moteur est doté d'un rendu temps réel grâce à de l'upscaling, permettant une gestion plus fluide de la caméra. La plupart des fonctions sont donc ainsi gérées depuis le clavier.
Path Tracing Cornel Box Primitives
Path Tracing Corridor
Path Tracing Crocodile Transparent
Path Tracing Bathroom
Path Tracing Gif Video Render Bubble Transparent Refraction
Path Tracing Gif Video Render Annulus Transparent Refraction
Le temps réel fut une grande aide pour le débuggage de l'application. Cela a notamment permis de choisir précisément les options de rendus pour nos scènes. Cette option maintiens tout de même de bonnes performances (10-100FPS en fonctions des options sélectionnées) grâce à un upscale et downscale automatique. A l'arrêt, l'image devient de plus en plus nette, permettant de l'antialiasing et du débruitage sur un nombre de passes infini. Pour une scène en lancer de rayon (donc sans rayons indirects) le taux de rafraîchissement reste à 60FPS sans problème (sur CPU). La dernière année à l'ESIR comprend la réalisation d'un projet industriel proposé par une entreprise. Le projet industriel auquel j'ai participé a été proposé par Chaos Czech l'entreprise développant le Corona Renderer. Ce projet regroupe quatre personnes et consiste en l'implémentation d'un Échantillonnage à Multiple Importances Optimal dans un path tracer bidirectionnel. Il est notamment essentiel que ce dernier soit non biaisé. Nous allons voir ici étapes de ce projet, à commencer par la mise à niveau comprenant du Multiple Importance Sampling, du Light Tracing et du Bidirectional Path Tracing. Le MIS implémenté comporte deux méthodes d'échantillonnage, celle des BSDFs et celle des lumières que nous pouvons voir avec 64 passes ci dessous, respectivement. La scène utilisée reprend celle proposée par Veach et Guibas, quatre sphères de couleurs, quatre surfaces aux BSDFs de plus en plus diffuses. La dernière des images correspond aux poids de chaque échantillonnages sélectionnés par la balance heuristic.
Path Tracing Veach BSDF Sampling
Path Tracing Veach Light Sampling
Path Tracing Veach Balance Heuristic Weight Multiple Importance Sampling MIS
Ci dessous se trouve les rendus de la même scène avec un path tracer classique et le MIS. La troisième image est la soustraction des deux précédentes afin de vérifier qu'il n'y ai pas de biais.
Path Tracing Veach
Path Tracing Veach Multiple Importance Sampling MIS
Path Tracing Veach Multiple Importance Sampling MIS Unbiased
Nous pouvons maintenant voir l'effet des poids sur chaque méthode d'échantillonnage ainsi que le résultat final en 2048 passes (500s).
Path Tracing Multiple Importance Sampling MIS BSDF
Path Tracing Multiple Importance Sampling MIS Light
Path Tracing Multiple Importance Sampling MIS Balance Heuristic High Quality
Le BDPT est implémenté avec la balance heuristic. Cela permet de tracer certains chemins complexes tels que les caustiques ce qui est nécessaire dans certaines scènes. Ci-dessous successivement un Path tracing Naïf, un Light Tracing puis un Bidirectional Path Tracing rendu avec un nombre élevé de passes : 1024. Le BDPT est en un sens la fusion du PT et du LT car il calcule toutes les possibilité d'échantillonnage d'un même chemin via ces deux techniques. Un chemin de 7 vertex peu être échantillonné selon 7 combinaisons, commençant à [s=0;t=7] jusque [s=6;t=1] où s est le nombre de vertex partant de la lumière et t est le nombre de vertex partant de la caméra (radiance and importance). La pdf du chemin courant avec l'échantillonnage courant se calcule en utilisant les pdf forward et reverse.
Naive Path Tracing Caustic
Light Tracing Caustic
Bidirectional Path Tracing Multiple Importance Sampling
La minimisation complète de la variance de l'estimateur de Monte Carlo ainsi que la libération de la contrainte sur les poids proposées par Kondapaneni et. al. a permis une fois de plus de minimiser grandement la variance des images rendues. Cette méthode se base sur l'estimation d'un système linéaire au fur et à mesure des passes permettant de calculer les poids optimaux à appliquer.
Deux méthodes d'échantillonnage différentes Path Tracing Technique Sampling Path Tracing Technique Sampling
Balance heuristic Balance Heuristic Multiple Importance Sampling MIS
Poids optimaux Balance Heuristic Optimal Multiple Importance Sampling OptiMIS MIS
Notre tâche fut d'implémenter cette méthode dans un BDPT.
Pour ce faire, les principales contributions furent : Cette totale intégration a donné des résultats très satisfaisants pour les chemins simples (éclairage direct i.e. avec une technique d'échantillonnage optimale) mais pas pour les chemins plus complexes tels que les caustiques.
Glass Caustic Rendered Bidirectional Path Tracer