- Dans un éclairage ambiant uniforme, un objet 100 % réfléchissant ne devrait pas se distinguer de l’arrière-plan ; cette propriété permet de vérifier rapidement la cohérence physique d’un moteur de rendu
- Qu’il s’agisse d’un matériau mat, miroir ou intermédiaire, s’il est parfaitement réfléchissant et éclairé uniformément, il doit apparaître identique à l’environnement et sembler disparaître
- La neige fraîche peut atteindre un albédo de 90 à 98 % ; associée à un temps couvert ou au brouillard, elle peut provoquer un whiteout où le ciel et la neige deviennent indiscernables
- Ce test vérifie que la BRDF ne perd ni ne crée d’énergie ; dans un environnement gris, un excès d’énergie réfléchie ressort plus clairement, ce qui facilite la détection des erreurs
- Une BRDF lambertienne d’un blanc pur est simple et sa conservation de l’énergie est claire, ce qui en fait un contrôle de base utile pour révéler des bogues d’intégration comme des distributions d’échantillonnage, pondérations, PDF ou facteurs π ou 2 manquants
Pourquoi les objets doivent disparaître sous une lumière uniforme
- Lorsqu’un objet 100 % réfléchissant est éclairé par un environnement uniforme, il ne doit pas se distinguer de l’arrière-plan
- Cette propriété ne dépend pas du fait que l’objet soit mat, réfléchissant comme un miroir ou constitué d’un matériau intermédiaire
- Si l’objet n’apparaît pas dans le rendu, c’est le signe que le résultat correspond à ce que les mathématiques prévoient
Un cas similaire dans le monde réel : le whiteout
- La neige fraîche peut avoir un albédo très élevé, de 90 à 98 %, et donc être presque parfaitement blanche
- Quand un temps couvert ou du brouillard s’y ajoute, un état de whiteout peut apparaître, dans lequel la neige et le ciel deviennent indiscernables
- Toutes les directions semblent alors uniformément blanches, au point qu’il peut devenir difficile de distinguer à l’œil nu une pente juste devant soi
Vérifier la conservation de l’énergie d’une BRDF
- Le test du four blanc est souvent utilisé pour vérifier qu’une BRDF respecte la conservation de l’énergie
- L’essentiel est de vérifier que le processus de réflexion ne fait ni disparaître ni apparaître d’énergie
- Il permet par exemple de repérer un matériau qui paraît plus sombre quand la roughness augmente, ou des situations où les réflexions mutuelles deviennent impossibles à ignorer
- Un environnement gris est aussi utile, pas seulement un environnement blanc
- Si l’énergie réfléchie est excessive, l’objet apparaît plus lumineux que son environnement, ce qui révèle l’erreur
Vérifier l’implémentation de l’intégration dans un moteur de rendu
- Le test du four blanc est efficace non seulement pour la BRDF elle-même, mais aussi pour vérifier la partie intégration du moteur de rendu
- Une BRDF lambertienne à albédo 100 % conserve parfaitement l’énergie et reste simple à implémenter, ce qui la rend bien adaptée pour révéler les bogues d’implémentation d’un moteur de rendu
- Les points susceptibles de poser problème sont nombreux
- Distribution d’échantillonnage
- Pondération des échantillons
- Calcul de la PDF
- Oubli de facteurs comme π ou 2
- Ces erreurs peuvent être difficiles à trouver, car l’image résultante peut encore paraître plausible
Exemples d’échec et utilisation pour le débogage
- Lorsque l’on écrit un path tracer ou l’une de ses variantes, que l’on crée une environment map préconvoluée ou que l’on teste une autre distribution d’échantillonnage, il est utile de faire d’abord passer le test du four blanc avec une BRDF lambertienne d’un blanc pur
- Une fois cette étape réussie, on peut avoir une certaine confiance dans l’implémentation avant de tester la BRDF elle-même
- Après les commentaires sur Hacker News, l’exemple ShaderToy a reçu une macro
SIMULATE_INCORRECT_INTEGRATIONpermettant d’observer un échec du test - Cette macro imite des bogues d’intégration incorrecte, par exemple oublier que l’intégration sur un hémisphère correspond à 2π ou ne pas tenir compte de la distribution d’échantillonnage
- Quand le bogue est activé, la sphère ne réfléchit pas la bonne quantité d’énergie et devient visible à l’écran
1 commentaires
Avis sur Hacker News
J’ai récemment implémenté un moteur de rendu physiquement réaliste (PBR) en suivant le tutoriel PBR de learnopengl, mais il n’a pas réussi le test de la fournaise blanche.
Ça m’a fait comprendre que je ne maîtrisais pas vraiment les maths que j’avais implémentées et, comme le dit l’auteur, multiplier arbitrairement par π ou par 2 ne faisait pas tomber juste.
Il existe aussi des modèles qui prennent en compte les réflexions mutuelles entre les microfacettes théoriques formant la distribution de normales qui donne une BRDF, et ils sont meilleurs, mais même pour eux il est difficile d’être sûr qu’ils réussissent ce test tel quel.
En pratique, la plupart des modèles largement utilisés perdent de l’énergie, et certains ajoutaient une table de correspondance au-dessus de la BRDF pour compenser.
Je trouve étonnant que cet article soit en haut de HN. En réalité, il existe deux tests de fournaise, et l’autre consiste à vérifier qu’avec une émission de 0,5 et un albédo de 0,5, le résultat soit 1,0, à l’erreur des pixels bruités près.
Il y a longtemps, dans https://graphics.stanford.edu/~boulos/papers/brdftog.pdf, nous avons tenté d’échanger la conservation de l’énergie contre la reproductibilité des données, au prix de l’abandon de la réciprocité.
Au final, personne ne s’est vraiment beaucoup soucié de faire correspondre automatiquement des données de matériaux à partir de BRDF, et même ceux que ça intéressait préféraient des BSDF symétriques et suffisamment conservatrices.
Les travaux ultérieurs ont surtout amélioré cette direction, d’autant que casser la symétrie rend des techniques comme le path tracing bidirectionnel assez étranges.
Je me demande pourquoi le nom du test contient furnace. Je comprends le concept général, mais le nom me semble assez arbitraire ; je me demande s’il repose sur quelque chose.
Ici aussi, le concept est similaire : l’objet est enfermé dans une cavité au spectre d’émission uniforme. Sauf que dans ce cas, il n’est pas noir mais blanc.
Justement, il y a quelques jours, YouTube m’a recommandé une vidéo sur ce sujet, à propos de la sortie prévue de Blender 4.0.
Une nouvelle fonction Multiscatter GGX arrive dans la BSDF ; la vidéo va beaucoup plus en profondeur et montre de nombreux exemples.
https://www.youtube.com/watch?v=v6qXbV_Q7z4
Je ne sais pas à quoi le ShaderToy intégré est censé ressembler. J’appuie sur lecture et j’attends, mais rien ne se passe pendant plus d’une minute.
L’article serait bien meilleur avec quelques captures d’écran de tests échoués.
Ensuite, les sphères rouge et bleue réapparaissent et on voit une sorte de reflet sur la sphère centrale, mais celle-ci « se fond » dans l’arrière-plan, au point qu’il devient difficile de reconnaître que c’est une sphère.