- Désolé pour le long post, mais je préfère le faire parce que "Le diable est dans les détails. " :)
J'écris un traceur de chemin à partir de zéro et il fonctionne bien pour les surfaces parfaitement diffuses (lambertiennes) ( c'est-à - dire que le test du four indique - au moins visuellement - qu'il est économe en énergie, et les images rendues correspondent à celles générées avec le rendu Mitsuba pour le même paramètres). Maintenant, j'implémente le support du terme spéculaire du modèle microfacet original de Cook-Torrance, afin de rendre certaines surfaces métalliques. Cependant, il semble que cette BRDF reflète plus d'énergie que celle reçue. Voir les exemples d'images ci-dessous:
Image ci-dessus: référence Mitsuba (supposée être correcte) image: traçage de chemin avec échantillonnage direct de la lumière, échantillonnage de l'hémisphère d'importance, longueur maximale du chemin = 5, 32 spp stratifiés, filtre carré, rugosité de surface = 0,2, RVB.
Image ci-dessus: Image réelle rendue: traçage de trajectoire naïve par force brute, échantillonnage uniforme de l'hémisphère, longueur maximale du trajet = 5, 4096 spp stratifiés, filtre carré, rugosité de surface = 0,2, RVB. Malgré quelques différences en ce qui concerne les paramètres de rendu, il est clair que l'image rendue ne convergera pas vers la référence indiquée précédemment.
J'ai tendance à penser que ce n'est pas un problème d'implémentation, mais un problème concernant la bonne utilisation du modèle Cook-Torrance dans le cadre de l'équation de rendu. Ci-dessous, j'explique comment j'évalue le BRDF spéculaire et je voudrais savoir si je le fais correctement et, sinon, pourquoi.
Avant d'entrer dans les détails, notez que le moteur de rendu est assez simple: 1) implémente uniquement l'algorithme de traçage de chemin naïf par force brute - pas d'échantillonnage de lumière directe, pas de traçage de chemin bidirectionnel, pas de MLT; 2) tout l'échantillonnage est uniforme sur l'hémisphère au-dessus du point d'intersection - aucun échantillonnage d'importance, ni pour les surfaces diffuses; 3) le trajet des rayons a une longueur maximale fixe de 5 - pas de roulette russe; 4) la radiance / réflectance est informée par des tuples RVB - aucun rendu spectral.
Modèle de microfacet Cook Torrance
Maintenant, je vais essayer de construire le chemin que j'ai suivi pour implémenter l'expression d'évaluation BRDF spéculaire. Tout commence par l'équation de rendu où p est le point d'intersection à la surface , w o est le vecteur de visualisation, w i
L'intégrale ci-dessus ( c'est-à - dire le terme de réflexion de l'équation de rendu) peut être approximée avec l'estimateur de Monte Carlo suivant oùpest la fonction de densité de probabilité (PDF) qui décrit la distribution des vecteurs d'échantillonnagewk.
Pour le rendu réel, le BRDF et le PDF doivent être spécifiés. Dans le cas du terme spéculaire du modèle Cook-Torrance, j'utilise le BRDF suivant où D=1
C'est donc l'expression que j'évalue lorsqu'un rayon frappe une surface spéculaire dont la réflectance est décrite par le BRDF de Cook-Torrance. C'est l'expression qui semble refléter plus d'énergie que celle reçue. Je suis presque sûr qu'il y a quelque chose qui ne va pas (ou dans le processus de dérivation), mais je ne le vois pas.
Toute aide est la bienvenue! Merci!
MISE À JOUR
MISE À JOUR 2
Comme l'a souligné PeteUK , la paternité de la formulation de Fresnel présentée dans le texte original de ma question a été attribuée à tort à Cook et Torrance. La formulation de Fresnel utilisée ci-dessus est en fait connue comme l' approximation de Schlick et porte le nom de Christophe Schlick. Le texte original de la question a été modifié en conséquence.
la source
Réponses:
la source
Pour une belle explication du terme, vous devriez vérifier [Nayar, 91] , annexe D. Voici une image du même papier:
la source