Résumé du sujet

Le sujet de ce projet a été proposé et encadré par Paulin Mathias de l'équipe AGGA/VORTEX à l'IRIT.

L’éclairage indirect est un des problèmes à résoudre lors du rendu physiquement réaliste d’une scène en temps réel. Un effet d’éclairage global détaillé s’obtient grâce à de nombreux rebonds effectués par la lumière, ceci engendrant un temps de calcul coûteux. Pour contourner ce problème, nous utiliserons la « Fonction de Régression de la Radiance » (RRF : Radiance Regression Function) nous permettant ainsi de calculer l’éclairage indirect pour chaque point des surfaces en connaissant la direction de la caméra et les conditions lumineuses.

Le projet a pour objectif de pouvoir effectuer le rendu physiquement réaliste d’une scène en temps réel avec calcul de l’éclairage global par une fonction de régression de radiance. Cette fonction sera modélisée par un réseau de neurones qui permettra donc un calcul de l’éclairage indirect en temps réel lors du rendu.

Nous avons 3 modules indépendants qui sont connectés de par leurs entrées/sorties. Il s’agit de fichiers de différents formats (XML, ASCII,...). Les modules sont un module d’extraction des données, un module d’apprentissage et un module de rendu.

Lien vers l'article de référence : Global Illumination with Radiance Regression Functions

Production

Module d'extraction

  • Génération de positions de caméras et de lumières d'une scène au format .pbrt avec la méthode d'échantillonnage : Latin Hypercube.
  • Modification du moteur de rendu PBRT v3 :
    • Utilisation d'une caméra sphérique utilisant l'échantillonnage de Fibonnaci
    • Création d'un intégrateur calculant seulement l'éclairage indirect d'une scène
    • Ecriture d'un fichier .data des données d'apprentissage extraites au format binaire

Module d'apprentissage

  • Utilisation de la bibliothèque OpenNN pour le réseau de neurones
  • Possibilité de configurer le réseau de neurones avec un fichier config.xml
  • Sauvegardes en cas d'interruptions de l'apprentissage

Module de rendu

  • Utilisation du moteur de rendu temps-réel AtlasEngine. Créé par Romain Moutrille.
  • Chargement des scènes au format .pbrt
  • Calcul de l'éclairage direct avec Cook-Torrance
  • Chargement du réseau de neurones venant du module d'apprentissage
  • Calcul de l'éclairage indirect à l'aide d'un compute shader pour l'évaluation du réseau de neurones

Résultats

Eclairage direct

L'éclairage direct est calculé avec la méthode de Cook-Torrance (sur GPU)

Eclairage direct

Eclairage global (direct + indirect)

Ce résultat de l'éclairage global est le meilleur que nous ayons obtenu. Il est bien entendu faux comme vous pouvez le voir sur les images ci-dessous.

Nous pensons que cela viens de quelques soucis de l'extraction que nous n'avons pas identifiés à ce jour. Nous pensons aussi qu'il n y a pas assez d'échantillons extraits de la scène (c'est-à-dire qu'il faudrait plus de scènes extraites de PBRT v3 et de fichiers .data générés).

Paramètres pour ce résultat:

  • Extractions de 100*100 scènes de PBRT v3
  • Création de 10 000 fichiers .data
  • Apprentissage:
    • QuasiNewton au lieu de Levenberg-Marquard
    • 8h d'apprentissage (10 000 fichiers .data traités)

Eclairage global Eclairage global contre plongée