es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo lidiar con la explosión del término de distribución GGX en PBR?

Estoy trabajando en aprender PBR y Unity standard shader. El resultado realmente grande del término de distribución GGX me confundió.

El shader estándar de Unity utiliza el término de distribución GGX:

c#
// Lo reescribo en C#
private float GGXTerm(float NdotH, float roughness)
{
float a2 = roughness * roughness;
float d = (NdotH * a2 - NdotH) * NdotH + 1.0f;
return a2 / (Mathf.PI * (d * d + 1e-7f));
}

Aquí está el problema que me confundió:

  1. Establezca NdotH en 1 (la dirección de la vista está exactamente en la dirección de la reflexión especular).
  2. Establezca la rugosidad en un valor bajo, como 0.015.

El resultado del término GGX es 868.58123. Es un número realmente grande que hace que el color final sea mucho más grande que 1. Todos los demás términos en BRDF son más pequeños que 1. Si la luz incidente es solamente 1, esta gran energía reflejada parece no cumplir con la ley de conservación de energía. Pensé que la energía reflejada definitivamente era más pequeña que la incidente.

Sé que debe haber algo mal en mi comprensión. Gracias por su guía.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en renderización y PBR, puedo ayudarte a entender la confusión que experimentaste con el sombreador estándar de Unity y el término de distribución GGX.

    En primer lugar, es importante entender que la renderización basada en física (PBR, por sus siglas en inglés) tiene como objetivo simular de manera precisa la forma en que la luz interactúa con las superficies en el mundo real. Esto incluye simular la reflexión de la luz en una superficie, que es lo que el término de distribución GGX en el sombreador estándar de Unity calcula.

    Cuando estableces el valor de NdotH (el producto escalar entre la dirección de la vista y el semivector) en 1 y la rugosidad en 0.015, el valor resultante del término GGX es de hecho un número grande (868.58123). Sin embargo, este valor no representa la cantidad de energía reflejada, sino más bien la probabilidad de reflexión en ese punto particular de la superficie.

    La cantidad total de energía reflejada está determinada por el término de Fresnel (que determina la cantidad de luz reflejada vs refractada en la superficie) y el color especular (que determina el color de la luz reflejada). Estos términos se multiplican por el término GGX para calcular el color final reflejado.

    Es importante destacar que la cantidad total de energía reflejada nunca debe exceder la cantidad de energía incidente (es decir, la cantidad de luz que incide en la superficie). Esto se conoce como la ley de conservación de la energía y es un principio fundamental de la física. Si la energía reflejada supera la energía incidente, debe haber un error en la simulación.

    En conclusión, aunque el término GGX puede parecer grande, representa la probabilidad de reflexión en lugar de la cantidad de energía reflejada. El color final reflejado está determinado por una combinación del término de Fresnel, el color especular y el término GGX, y siempre debe cumplir con la ley de conservación de la energía.

Comments are closed.