Confundido con implementaciones de PBR

13

Estoy descubriendo el maravilloso mundo de las matemáticas y estoy golpeando una pared enorme con PBR y nombres, así que tengo algunas preguntas: hasta donde entiendo, BRDF describe cómo reacciona un material a la luz (luz directa entrante y reflejos). Pero en "Cook-Torrance" no veo nada acerca de los reflejos, no entiendo cómo lo integro, así que solo obtengo luz difusa y reflejos.

He leído mucho sobre diferentes "términos difusos" como "Oren-Nayar", ¿es parte de Cook-Torrance como una "D" diferente en el nominador de la DFG? ¿Lo reemplaza sin cálculos especulares?

He leído mucho sobre "GGX" de mi fondo de artista de la licuadora. Pensé que era algo que hacía un reflejo borroso, pero parece que estaba equivocado y ahora encuentro este término de GGX en muchas situaciones diferentes, como en las micro facetas normales. distribución en este tutorial

En resumen, la pregunta es: ¿cómo se relacionan "Oren-Nayar" y "GGX" y "Cook-Torrance" entre sí (si es que lo están) y cómo integro la "reflexión vec3" en esos algoritmos?

Como dije antes, soy un novato en matemáticas, así que si su respuesta es "matemática", escriba una versión glsl / hlsl de sus ecuaciones, es mucho más fácil de entender para mí, por lo que una equivalencia me ayudará mucho

PD: Entiendo que mi pregunta es borrosa, pero también es tan borrosa como mi comprensión del tema.

nuevo en
fuente
1
Algo que podría ayudarlo es que "especular" significa "como espejo". Entonces, cuando se habla de reflexiones especulares y difusas, especular significa reflejos especulares, lo que la gente normalmente llama reflexión. Difuso es solo "cosas que se iluminan". También están reflejando la luz, pero están reflejando desde muchas direcciones diferentes, por lo que el resultado no es algo en lo que puedas reconocer una imagen. Hay una escala entre la reflexión especular y difusa en objetos reales, y esto es parte de lo que parámetro de "rugosidad" de los controles PBR.
Alan Wolfe
Puede intentar leer el documento original de Cook-Torrance: inst.cs.berkeley.edu/~cs294-13/fa09/lectures/cookpaper.pdf ; asegúrese de verificar las referencias enumeradas al final también, cuando sea posible (la mayoría son disponible en linea). Tomará algún tiempo, pero es una forma segura de entender "en profundidad" lo que está sucediendo.
wip

Respuestas:

12

DFG aparece en la familia de BRDF basados ​​en microfacet. Es simplemente el producto de tres términos:

  • D: La distribución de microfacetas.
  • F: El coeficiente de Fresnel.
  • G: La atenuación geométrica entre microfacetas.

Cuando alguien dice Cook-Torrance, generalmente se refiere a un BRDF de microfaceta donde la distribución (D) es Beckmann, que creo que es de lo que se trataba el documento original de Cook-Torrance.

GGX es realmente solo una distribución diferente (término D). GTR es otro. Los nombres se usan a menudo como un atajo para referirse a un BRDF que usa esa distribución.

Ahora, todo esto supone una reflexión especular (o refracción) en las microfacetas, de ahí el término fresnel. Si toma una idea similar pero usa microfacetas difusas (lambertianas), obtiene el BRDF Oren-Nayar. Creo que uno se basa en una distribución gaussiana de las microfacetas, pero no estoy familiarizado con los detalles.

Olivier
fuente
bueno, eso es un poco más claro, pero aún no explica qué hago con mi "vec3 reflectionColour" que obtengo al relanzar un rayo en trazado de rayos / marcha o usar SSR / cubemap. Es como las ecuaciones que solo tienen en cuenta un foco / foco, pero no tienen idea de las luces o reflejos del área. También parece que el "especular" solo está relacionado con el "punto blanco" en lugar de la reflexión por lo que no tiene sentido = /
newin
@newin En un modelo PBR, especular y reflexión son nombres diferentes para la misma cosa. Es un resaltado especular cuando el rayo golpea una luz, un reflejo cuando golpea otro objeto (o un entorno). En cuanto a su color de reflexión, depende de cómo se genere el rayo. ¿Estás probando iluminación directa? Luces del área? ¿Integrando un BRDF contra un mapa de entorno? Intente leer el trazado de ruta progresivo con muestreo de luz explícito , hay una respuesta larga que podría aclarar algunas cosas sobre el proceso.
Olivier
Entonces, si entiendo correctamente que "vec3 reflectionColour" debe tratarse como una luz y si quiero hacer una luz que emita malla, debería poner un valor> 1 en el albedo y eso es todo. (Estoy tratando de integrar PBR en diferentes escenarios, el primero es un raymarcher donde quiero mallas que emiten luz, el otro es un motor de juego que usa SSR y probablemente usará cubemaps)
novedad en
La luz emitida de @newin se agrega además de todo lo demás. No está relacionado con los BRDF. Si su malla no hace más que emitir luz, ni siquiera necesita rastrear más rayos. Un albedo grande amplificará la luz (físicamente incorrecta), no la creará.
Olivier