Multi Layer BRDF Verständnisproblem

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
MadMax
Beiträge: 59
Registriert: 24.01.2003, 13:31
Kontaktdaten:

Multi Layer BRDF Verständnisproblem

Beitrag von MadMax »

Hallo zusammen,

ich versuche mich gerade an einer Echtzeitimplementierung des folgenden Papers:
http://publik.tuwien.ac.at/files/PubDat_182027.pdf

Ziemlich weit unten im Paper exsitiert noch eine Präsentation, welche folgende Rendermanimplementierung beinhaltet:

Code: Alles auswählen

IF(H.V>0.0)
{
	specColor += CI*torranceSparrowReflector(Nf,V,Ln,H,eta,kappa,beta);
	
  [b]1[/b]	vector refractLn = refract(Ln,-H, eta_avg);
  [b]1[/b]	vector refractV  = refract(-V,-H,1.0/eta_avg);
  
    color a = absorption(Nf,refractV,refractLn,alpha,d);
    float t = tir(Nf,refractV,refractLn,H,eta_avg);
  [b]2[/b] fresnel(V,H,1/eta_avg,fr,ft);
    envColor = envColor + (env*fr);
	
  [b]3[/b]	diff += ft*a*t*CI*torranceSparrowReflector(Nf,V,Ln,H,eta_base,kappa_base,beta_base);
}

Ich habe zu den drei makierten Punkten einige Fragen:

1.) Die Berechnung der Refractionsvektoren
1.1) Warum wird H verwendet und nicht N
1.2) Warum wird -H verwendet und nicht H
1.3) Ich würde mir die Berechnung im shader in HLSL so vorstellen:

Code: Alles auswählen

refractLn = refract(-Ln,N,eta_avg); //Ln zeigt von der Fläche weg
2.) Ich kenne die Implementierung von fresnel nicht aber ft = 1-ft oder?
3.) Das ist der wichtigste Punkt: Ich verstehe nicht warum hier die BRDF mit Ln und V gesampelt wird. Dem ganzen Paper zufolge würde ich vermuten, dass man hier refractLn bzw. refractV verwenden sollte (bzw. die mit -1 multiplizierten Richtungen.

Ich habe schon alle möglichen Kombinationen ausprobiert aber leider sieht das Ergebnis nie wirklich realistisch aus. Vielleicht hat ja jemand eine Idee was ich falsch gemacht habe.

Danke,
Manuel
Antworten