¿Qué es el muestreo de importancia? Cada artículo que leí al respecto menciona 'PDF', ¿qué es eso también?
Por lo que deduzco, el muestreo de importancia es una técnica para muestrear solo áreas en un hemisferio que importan más que otras. Entonces, idealmente, debería tomar muestras de rayos hacia fuentes de luz para reducir el ruido y aumentar la velocidad. Además, algunos BRDF en ángulos de pastoreo tienen poca diferencia en el cálculo, por lo que usar el muestreo de importancia para evitar eso es bueno.
Si tuviera que implementar un muestreo de importancia para un BRDF Cook-Torrance, ¿cómo podría hacer esto?
brdf
importance-sampling
Arjan Singh
fuente
fuente
Respuestas:
Respuesta corta:
El muestreo de importancia es un método para reducir la varianza en la integración de Monte Carlo al elegir un estimador cercano a la forma de la función real.
PDF es una abreviatura de la función de densidad de probabilidad . Apdf(x) da la probabilidad de que una muestra aleatoria generada sea x .
Respuesta larga:
Para comenzar, repasemos qué es la integración de Monte Carlo y cómo se ve matemáticamente.
La integración de Monte Carlo es una técnica para estimar el valor de una integral. Por lo general, se usa cuando no hay una solución de forma cerrada para la integral. Se parece a esto:
En inglés, esto dice que puede aproximar una integral promediando muestras aleatorias sucesivas de la función. A medida quenorte crece, la aproximación se acerca más y más a la solución. p dF( xyo) representa la función de densidad de probabilidad de cada muestra aleatoria.
Hagamos un ejemplo: Calcular el valor de la integralyo .
Usemos la integración de Monte Carlo:
Un programa simple de Python para calcular esto es:
Si ejecutamos el programa obtenemosyo= 0.4986941
Usando la separación por partes, podemos obtener la solución exacta:
Notarás que la solución Monte Carlo no es del todo correcta. Esto se debe a que es una estimación. Dicho esto, a medida quenorte llega al infinito, la estimación debería acercarse cada vez más a la respuesta correcta. Ya en norte= 2000 algunas corridas son casi idénticas a la respuesta correcta.
Una nota sobre el PDF: en este sencillo ejemplo, siempre tomamos una muestra aleatoria uniforme. Una muestra aleatoria uniforme significa que cada muestra tiene exactamente la misma probabilidad de ser elegida. Tomamos muestras en el rango[ 0 , 2 π] , entonces, p dF( x ) = 1 / ( 2 π- 0 )
El muestreo de importancia funciona mediante un muestreo no uniforme. En cambio, tratamos de elegir más muestras que contribuyan mucho al resultado (importante) y menos muestras que solo contribuyan un poco al resultado (menos importante). De ahí el nombre, muestreo de importancia.
Un ejemplo de muestreo importante en Path Tracing es cómo elegir la dirección de un rayo después de que golpea una superficie. Si la superficie no es perfectamente especular (es decir, un espejo o vidrio), el rayo saliente puede estar en cualquier parte del hemisferio.
Nos podíamos probar de manera uniforme el hemisferio para generar el nuevo rayo. Sin embargo, podemos explotar el hecho de que la ecuación de representación tiene un factor coseno:
Para combatir esto, utilizamos muestras de importancia. Si generamos rayos de acuerdo con un hemisferio ponderado de coseno, nos aseguramos de que se generen más rayos muy por encima del horizonte y menos cerca del horizonte. Esto reducirá la varianza y reducirá el ruido.
En su caso, especificó que utilizará un BRDF Cook-Torrance, basado en microfacet. La forma común es:
dónde
El blog "A Graphic's Guy's Note" tiene una excelente redacción sobre cómo probar los BRDF de Cook-Torrance. Te referiré a su blog . Dicho esto, intentaré crear una breve descripción general a continuación:
El NDF es generalmente la porción dominante del Cook-Torrance BRDF, por lo que si vamos a una muestra importante, deberíamos tomar una muestra basada en el NDF.
Cook-Torrance no especifica un NDF específico para usar; somos libres de elegir el que más le convenga. Dicho esto, hay algunos NDF populares:
Cada NDF tiene su propia fórmula, por lo tanto, cada uno debe muestrearse de manera diferente. Solo voy a mostrar la función de muestreo final para cada uno. Si desea ver cómo se deriva la fórmula, consulte la publicación del blog.
GGX se define como:
Para muestrear el ángulo de coordenadas esféricasθ , podemos usar la fórmula:
dóndeξ es una variable aleatoria uniforme
Suponemos que el FDN es isotrópico, por lo que podemos tomar muestrasϕ uniformemente
Beckmann se define como:
Que se puede muestrear con:
Por último, Blinn se define como:
Que se puede muestrear con:
Poniéndolo en práctica
Echemos un vistazo a un trazador de ruta básico hacia atrás:
ES DECIR. saltamos alrededor de la escena, acumulando color y atenuación de luz a medida que avanzamos. En cada rebote, tenemos que elegir una nueva dirección para el rayo. Como se mencionó anteriormente, podríamos muestrear uniformemente el hemisferio para generar el nuevo rayo. Sin embargo, el código es más inteligente; Su importancia muestra la nueva dirección basada en el BRDF. (Nota: esta es la dirección de entrada, porque somos un trazador de ruta hacia atrás)
Que podría implementarse como:
Después de muestrear inputDirection ('wi' en el código), lo usamos para calcular el valor de BRDF. Y luego dividimos por el pdf según la fórmula de Monte Carlo:
Donde Eval () es solo la función BRDF en sí misma (Lambert, Blinn-Phong, Cook-Torrance, etc.):
fuente
wi
? Entiendo cómo muestrear el ángulo de coordenadas esféricas θ pero para el vector de dirección real, ¿cómo se hace?Si tienes una función 1DF( x ) y desea integrar esta función de digamos 0 a 1, una forma de realizar esta integración es tomar N muestras aleatorias en el rango [0, 1], evaluar F( x ) para cada muestra y calcule el promedio de las muestras. Sin embargo, se dice que esta integración "ingenua" de Monte Carlo "converge lentamente", es decir, que necesita una gran cantidad de muestras para acercarse a la verdad básica, particularmente si la función tiene frecuencias altas.
Con el muestreo de importancia, en lugar de tomar N muestras aleatorias en el rango [0, 1], se toman más muestras en las regiones "importantes" deF( x ) que más contribuyen al resultado final. Sin embargo, debido a que sesga el muestreo hacia las regiones importantes de la función, estas muestras deben ponderarse menos para contrarrestar el sesgo, que es donde aparece el PDF (función de densidad de probabilidad). PDF indica la probabilidad de una muestra en una posición determinada y se utiliza para calcular el promedio ponderado de las muestras dividiendo cada muestra con el valor de PDF en cada posición de muestra.
Con el muestreo de importancia Cook-Torrance, la práctica común es distribuir muestras basadas en la función de distribución normal NDF. Si el NDF ya está normalizado, puede servir directamente como PDF, lo cual es conveniente ya que cancela el término de la evaluación BRDF. Lo único que debe hacer es distribuir posiciones de muestra basadas en PDF y evaluar BRDF sin el término NDF, es decir
Para NDF, debe calcular la función de distribución acumulativa del PDF para convertir la posición de muestra distribuida uniformemente en la posición de muestra ponderada de PDF. Para NDF isotrópico, esto se simplifica a la función 1D debido a la simetría de la función. Para obtener más detalles sobre la derivación de CDF, puede consultar este antiguo artículo de GPU Gems .
fuente