En el trazado de rayos / trazado de ruta, una de las formas más sencillas de suavizar la imagen es supermuestrear los valores de píxeles y promediar los resultados. ES DECIR. en lugar de tomar cada muestra a través del centro del píxel, compensa las muestras en cierta cantidad.
Al buscar en Internet, he encontrado dos métodos algo diferentes para hacer esto:
- Genere muestras como desee y pese el resultado con un filtro
- Un ejemplo es PBRT
- Genere las muestras con una distribución igual a la forma de un filtro.
- Dos ejemplos son smallpt y Benedikt Bitterli 's tungsteno Procesador
Generar y pesar
El proceso básico es:
- Cree muestras como desee (secuencias aleatorias, estratificadas, de baja discrepancia, etc.)
- Compense el rayo de la cámara con dos muestras (x e y)
- Renderiza la escena con el rayo
- Calcule un peso utilizando una función de filtro y la distancia de la muestra en referencia al centro de píxeles. Por ejemplo, filtro de caja, filtro de tienda, filtro gaussiano, etc.)
- Aplica el peso al color del render
Generar en forma de filtro
La premisa básica es utilizar el muestreo de transformación inversa para crear muestras que se distribuyen de acuerdo con la forma de un filtro. Por ejemplo, un histograma de muestras distribuidas en forma de gaussiano sería:
Esto puede hacerse exactamente, o agrupando la función en un discreto pdf / cdf. smallpt usa el cdf inverso exacto de un filtro de tienda. Aquí se pueden encontrar ejemplos de métodos de agrupamiento
Preguntas
¿Cuáles son los pros y los contras de cada método? ¿Y por qué usarías uno sobre el otro? Se me ocurren algunas cosas:
Generar y pesar parece ser el más robusto, permitiendo cualquier combinación de cualquier método de muestreo con cualquier filtro. Sin embargo, requiere que rastree los pesos en ImageBuffer y luego haga una resolución final.
Generar en forma de filtro solo puede admitir formas de filtro positivas (es decir, sin Mitchell, Catmull Rom o Lanczos), ya que no puede tener un pdf negativo. Pero, como se mencionó anteriormente, es más fácil de implementar, ya que no necesita rastrear ningún peso.
Aunque, al final, supongo que puede pensar en el método 2 como una simplificación del método 1, ya que esencialmente está usando un peso de filtro de caja implícito.