Chemin traçant le BRDF de Cook-Torrance


27

- 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 de référence Mitsuba.

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 rendue

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 p est le point d'intersection à la surface , w o est le vecteur de visualisation, w i

Lo(p,wo)=Le+ΩLi(p,wi)fr(wo,wi)cosθdω
pwowiest le vecteur lumineux, est le rayonnement sortant le long de w o , L i est le rayonnement incident sur p le long de w i et cos θ = nw i .LowoLipwicosθ=nwi

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 pest la fonction de densité de probabilité (PDF) qui décrit la distribution des vecteurs d'échantillonnagewk.

1Nk=1NLi(p,wk)fr(wk,wo)cosθp(wk)
pwk

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 D=1

fr(wi,wo)=DFGπ(nwi)(nwo)
F=cspec+(1-cspec)(1-wih)5G=min(1,2(nh)(nwo)
D=1m2(nh)4exp((nh)21m2(nh)2)
F=cspec+(1cspec)(1wih)5
Dans les équations ci-dessus,h=wo+wi
G=min(1,2(nh)(nwo)woh,2(nh)(nwi)woh)
etcspecest la couleur spéculaire. Toutes les équations, à l'exception deF, ont été extraites de l'article original. F, également connu sous le nomd'approximation de Schlick, est uneapproximationefficace et moins précise du terme de Fresnel réel.h=wo+wi|wo+wi|cspecFF

m0.2

p(wk)=12π
wiwk
1Nk=1NLi(p,wk)(DFGπ(nwk)(nwo))cosθ(12π)
π
2Li(p,wk)(DFG(nwk)(nwo))cosθ
cosθ=nwk
2Li(p,wk)(DFGnwo)

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.

1π

Toute aide est la bienvenue! Merci!

MISE À JOUR

D1πfr14

Dnew=1πm2(nh)4exp((nh)21m2(nh)2)
frnew(wi,wo)=DFG4(nwi)(nwo)
π2Li(p,wk)(DnewFGnwo)
Dfr

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.


Je ne sais pas si vous visitez toujours ce site, mais j'ai une question concernant votre équation de Fresnel et je l'ai postée ici
PeteUK

Réponses:


12

1πfr14

fr=DFG4(nwi)(nwo),
π2Li(p,wk)(DFGnwo).

141π=π2

1/π

1πD14fr1πD

π

1πD14fr

13

1π14

1π

14(nωi)

14

Pour une belle explication du terme, vous devriez vérifier [Nayar, 91] , annexe D. Voici une image du même papier:

dω=dωr4cosθi

14

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.