¿Cómo combinar adecuadamente los términos difusos y especulares?

18

Hasta donde entiendo, en un BRDF el término Fresnel nos dice la probabilidad de que un fotón se refleje o refracte cuando golpea una superficie.

Los fotones reflejados contribuirán al término especular, mientras que los refractados contribuirán al término difuso. Por lo tanto, al determinar, de manera física, la contribución de una luz al color del material, me siento tentado a escribir:

// Assuming for example:
//   diffuse = dot(L, N);
//   specular = pow(dot(H, N), alpha) * (alpha + 2.0) / 8.0;
//   fresnel = f0 + (1.0 - f0) * pow(1.0 - dot(E, H), 5.0);
color = lightIntensity * Lerp(diffuse * albedo, specular, fresnel);

Sin embargo, creo que nunca lo he visto escrito de esta manera. He visto que el término especular se pondera según el término de Fresnel, pero no el difuso. En su artículo ampliamente referido sobre PBR , Sébastien Lagarde incluso afirma que usar para ponderar el término difuso es incorrecto.(1F)

¿Qué me estoy perdiendo?
Me gustaría recibir una explicación que resalte de manera obvia por qué esto sería incorrecto.

Julien Guertault
fuente

Respuestas:

14

Usar dos términos de Fresnel es correcto en el sentido de que cualquier ruta difusa pasará por la superficie dos veces. Si está resolviendo la difusión trazando un camino a través del medio hasta que rebote nuevamente, obtendrá dos (o más) términos de Fresnel para ese camino a medida que interactúa con la superficie.

1-Fotut

1-glossy_bsdf(en,fuera)refuera

1-lustrosorefuera=1-Fyonorte

π

Entonces, más o menos:

// Assuming for example:
//   diffuse = albedo / PI;
//   specular = my_favorite_glossy_brdf(in_dir, out_dir, roughness);
//   fresnel = f0 + (1.0 - f0) * pow(1.0 - dot(E, H), 5.0);
//   total_surface_reflection = fresnel
color = lightIntensity * dot(L, N) * Lerp(diffuse, specular, total_surface_reflection);

F

Karl Schmidt
fuente
8

Mientras navegaba para escribir correctamente mi pregunta, en realidad encontré la respuesta , que resulta ser muy simple.

Otro término de Fresnel también va a influir a medida que los fotones salen del material (por lo que se refractan en el aire) y se convierten en el término difuso. Por lo tanto, el factor correcto para el término difuso sería:

(1-Fyonorte)(1-Fotut)
Julien Guertault
fuente
1
La sección 5.3 del documento BRDF de Disney se refiere a la ecuación en su respuesta y luego especifica un modelo diferente. ¡No pretendo entender nada de eso ya que acabo de comenzar mi implementación brillante de BRDF!
PeteUK
Creo que esto continuaría desde aquí, donde la luz que se refleja internamente golpearía nuevamente la superficie desde el interior, en el lado opuesto, y luego, una y otra vez, cada vez disminuyendo, hacia el infinito: P (o en sub dispersión de la superficie jeje)
Alan Wolfe
¿Cómo se calcula el otro término de Fresnel?
plasmacel