36
Real Time Ray Tracing Computación Gráfica Avanzada Ingeniería en Computación Facultad de Ingeniería – Universidad de la República Julio Morero

Real Time Ray Tracing - fing.edu.uy

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Real Time Ray Tracing

Computación Gráfica AvanzadaIngeniería en Computación

Facultad de Ingeniería – Universidad de la República

Julio Morero

Temas a tratar

• Ray Tracing Fundamentals

• Shaders for Ray Tracing

• Top and Bottom Level Acceleration Structures

• Coherency– Scene coherency

– Ray coherency

– Shading coherency

• Denoising

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 2

Introducción

Rasterización

Trazado de Rayos

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 3

• Revés de la tarjeta de presentación de Paul Heckbert

Introducción

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 4

Figura del video Ray Tracing Essentials, Part 1: Basics of Ray Tracing

• Permite lanzar rayos en cualquier dirección.

• El ruido puede ser evidente en las imágenes.

• Técnicas como denoising seguramente sean necesarias para lograr que sólo se use trazado de rayos en aplicaciones de tiempo real.

• En el corto plazo, mezclas entre rasterización y trazado de rayos son esperables.

• En el largo plazo, el trazado de rayos escala bien a medida que los procesadores son más potentes.

Introducción – Trazado de rayos

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 5

Ray Tracing Fundamentals

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 6

Figuras 26.7 y 26.3 de Real Time Rendering 4th Ed

• ¿Qué es un shader? – Parte programable del ducto gráfico.

• APIs de tiempo real como DirectX o Vulkan brindan funcionalidades para el trazado de rayos.

• Una forma de usar estos nuevos shaders junto con rasterización puede ser primero generar un G-buffer, para luego lanzar rayosdesde los puntos intersecados y así poder generar reflexiones y sombras.

• Esto ultimo se lo conoce como deferred ray tracing.

Shaders for Ray Tracing

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 7

Shaders for Ray Tracing

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 8

Ducto de rasterización

Ducto de trazado de rayos

Figuras obtenidas de Introduction to DirectX Raytracing Shaders

Shaders for Ray Tracing

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 9

Figuras obtenidas de Introduction to DirectX Raytracing Shaders

Top and Bottom Level Acceleration Structures

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 10

• Una de las ideas más importantes en la optimización del rendimiento de software y hardware es aprovechar la coherencia durante la ejecución.

• Es posible ahorrar esfuerzo al reutilizar resultados que ya fueron calculados en otras partes.

• Hoy en día las operaciones más costosas son los accesos a memoria.

– Siendo ordenes de magnitud más lentas que simples operaciones matemáticas

• La mayoría de las veces la optimización del rendimiento se centra en aprovechar la coherencia de la memoria (caches) y programar el cálculo (scheduling computation) teniendo en cuenta la latencia de la memoria.

• La GPU puede verse como un procesador que restringe la forma de ejecución de los programas que corre (SIMT) para explotar mejor la coherencia de la memoria.

Coherency

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 11

• Para determinar que es visible en la pantalla, rasterización y trazado de rayos pueden ser vistos como diferentes formas de recorrer la geometría de la escena.

• El orden de los loops no afecta a la complejidad algorítmica en sí pero si tiene consecuencias prácticas.

• El loop más anidado es entonces el mejor candidato para tratar de mejorar el rendimiento ya que es donde suele darse el mayor computo.

Coherency

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 12

Coherency

Rasterización

• Coherente por defecto.

• Limitado al frustum de la cámara.

• Mayor esfuerzo se concentra en tratar de lograr efectos interesantes atado a lo que se ve desde la cámara.

Trazado de rayos

• Flexible por defecto.

• Mayor esfuerzo se dedica en tratar de ordenar las consultas de visibilidad de una forma coherente.

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 13

• Esta flexibilidad al trazar rayos permite generar efectos que son imposibles para un rasterizador, manteniendo un alto rendimiento si se aprovecha la coherencia.

• Un ejemplo son las sombras.

• En contraste con los rayos de sombreado, lo único que se necesita saber es si hubo una intersección o no entre el punto y la fuente de luz.

• Por tanto se puede evitar el cálculo de normales en las intersecciones, aplicar texturas e incluso se puede parar luego de la primera intersección con un objeto sólido.

Coherency

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 14

• En un espacio 3D, las primitivas están naturalmente relacionadas cuando se considera la distancia entre ellas.

• Sin embargo, que se encuentren cerca no garantiza coherencia en el cómputo ya que pueden tener materiales o texturas diferentes, o incluso utilizar algoritmos distintos de sombreado.

• De todas formas, la mayoría de los ray tracers y APIs usan alguna estructura de datos de aceleración espacial, aunque no suelen estar visibles para el usuario.

• Crear dichas estructuras es un desafío para el renderizado en tiempo real ya que la escena suele variar en cada frame cuando hay animaciones.

Scene Coherency

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 15

• Subdivide the entire scene in a regular grid– “teapot in a stadium” problem

• Two-level nested grids

• Infinite virtual grid with hash tables

• Proximity clouds

• Irregular grid

• Octree

• BSP tree

• K-d tree

• Bounded interval hierarchy (BIH) tree– instead of using a single axis-aligned plane we use a pair at each level of the data

structure

• Bounding Volume Hierarchy (BVH) -> most popular acceleration structure– used in Intel’s Embree kernels, AMD’s Radeon-Rays library, and in NVIDIA’s RT Cores

hardware and OptiX system

Scene Coherency - Spatial Data Structures

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 16

Scene Coherency - Spatial Data Structures

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 17

• A pesar de las distintas estructuras de datos posibles, históricamente el estado del arte se ha conseguido mediante alguna variante de un k-d tree o BVH con AABBs.

• La principal diferencia entre las dos es que el k-d tree particiona el espacio en celdas disjuntas mientras que los nodos de un BVH suelen solaparse.

• Esto implica que solo se puede terminar de recorrer un BVH cuando se encontró una intersección y no hay otro volumen acotante sin recorrer que este delante.

• Sin embargo, un k-d tree puede parar ni bien encuentra una intersección ya que es posible hacer cumplir un recorrido de adelante hacia atrás.

• Esta aparente ventaja de los k-d trees no siempre se cumple ya que un BVH puede ser más eficiente en saltearse espacio vacío y ajustarse mejor a las primitivas, compensando el no poder terminar temprano con llegar a una intersección más rápido.

Scene Coherency - Spatial Data Structures

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 18

• En la práctica, luego de estudiar varios renderizadores utilizados para producción de películas y renderizado interactivo, los autores del libro no pudieron encontrar uno que utilizara k-d trees.

• Todos utilizaban alguna variante de BVHs para el trazado de rayos.

• Las otras estructuras son más eficientes para problemas o primitivas específicas.– Point clouds y photon mapping usan k-d trees para almacenar muestras.

– Octrees y las variaciones de grillas son utilizadas para datos voxelizados.

Scene Coherency - Spatial Data Structures

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 19

• En general se puede asumir que existe cierta coherencia en los rayos a trazar y en las intersecciones a sombrear.– Rayos usados para computar sombras de fuentes de luz infinitesimales son

coherentes.

– Rayos generados al muestrear aleatoriamente el hemisferio de posibles direcciones desde un punto son incoherentes.

• Una de las primeras ideas que surgió para aprovechar la coherencia de rayos fue agruparlos de alguna forma.– Ray bundles -> grupo de rayos paralelos

– Conos (cones)

– Haces (beams)

– Lápices (pencil tracing)

Ray Coherency

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 20

• Una forma más flexible es agrupar rayos en arreglos pequeños llamados paquetes (packets).

• Así como los lápices, a veces es necesario separar los paquetes para que puedan seguir distintas ramas de un BVH por ejemplo.

• Sin embargo, la ventaja que poseen los paquetes es que como son una estructura de datos y no una primitiva geométrica, es más fácil separarlos ya que sólo hay que crear más paquetes con un subconjunto de los rayos originales.

Ray Coherency

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 21

Ray Coherency

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 22

• La principal idea de packet tracing es utilizar instrucciones SIMD para intersecar múltiples rayos con una sola primitiva en paralelo.

• Sin embargo, se podría usar las mismas instrucciones para intersecar un rayo con múltiples primitivas, eliminando la necesidad de mantener un paquete de rayos.

• Además, algunas aplicaciones de trazado de rayos como pathtracing trabajan con rayos simples y no pueden generar fácilmente paquetes coherentes.

• En estos casos puede ser posible aplicar memory-coherent raytracing, un sistema que usa los nodos de una estructura espacial para guardar batches de rayos.

Ray Coherency

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 23

• También es posible evitar guardar los rayos en la estructura espacial si se computa un valor de hash a partir del origen y dirección cuantificadas del rayo.

• De esta forma se mantiene una cola de rayos que necesitan ser procesados ordenados por su valor de hash.

• Esta cola es equivalente a crear una grilla virtual en el espacio de 5 dimensiones de posiciones y direcciones, y luego agrupar los rayos en dichas celdas.

• Esta idea de mantener una cola de rayos y ordenarlos dinámicamente se le llama ray stream tracing o ray reordering, y fue adoptada de forma exitosa tanto en CPUs como GPUs.

Ray Coherency

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 24

• Si bien trazar rayos coherentes puede ayudar a tener coherencia en el sombreado, no lo garantiza.– Dos rayos pueden generar intersecciones cercanas pero que correspondan

a objetos distintos con materiales diferentes.

– Desafío para las GPUs al depender de unidades SIMD que ejecutan las mismas instrucciones en sincronía sobre vectores llamados wavefronts.

• La idea de guardar rayos en colas se puede extender al sombreado si se guardan luego de intersecar objetos.

• Estas colas son ordenadas por los materiales asociados a las intersecciones de forma tal que los shaders puedan ser evaluados en batches coherentes.

• La idea de separar la evaluación de materiales de la visibilidad se llama deferred shading.

Shading Coherency

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 25

• Para el renderizado en tiempo real hay que tener en cuenta que, incluso en sistemas que puedan reordenar el trabajo para aprovechar la coherencia, este reordenamiento puede ser un esfuerzo no menor.

• Además, si no hay muchos rayos activos a la vez, puede que no haya coherencia útil entre ellos.

• Por último, recordemos que el trazado de rayos es un algoritmo recursivo, es decir, cuando un rayo interseca un objeto, los shaders de dicho objeto pueden lanzar más rayos desde este punto, los que a su vez pueden invocar nuevos shaders.

• Esto implica que hasta que no se sepa el resultado de los nuevos rayos no se puede seguir con el sombreado, restringiendo el orden de ejecución de los shaders y por ende reduciendo las oportunidades de obtener coherencia.

Shading Coherency

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 26

• Por lo tanto, el sombreado puede causar más divergencia que el propio trazado de rayos ya que potencialmente podemos necesitar shaders completamente distintos en base a que objetos intersecamos.

• Para evitar intercalar el trazado de rayos y sombreado complejo, una estrategia posible es precomputar los valores de sombreado y agarrar dichos resultados cuando se dan intersecciones.

Shading Coherency

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 27

• Renderizar utilizando Monte Carlo path tracing produce imágenes con ruido.

• Por tanto, el objetivo de un algoritmo de denoising es a partir de una imagen con ruido y posibles datos auxiliares producir una imagen lo más cercana a la real posible.

• Denoising es clave para el trazado de rayos en tiempo real ya que normalmente solo podemos lanzar pocos rayos por pixel, lo que produce imágenes ruidosas.

Denoising

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 28

Denoising

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 29

Denoising

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 30

• La mayoría de los algoritmos de denoising pueden ser vistos como un promedio ponderado del color de los pixeles alrededor del pixel actual.

𝑑𝑝 =1

𝑛

𝑞∈𝑁

𝑐𝑞𝑤(𝑝, 𝑞)

Donde

• 𝑑𝑝 color sin ruido del pixel p

• 𝑐𝑞 color con ruido de los pixeles alrededor del pixel p (incluido p)

• 𝑤(𝑝, 𝑞) función de ponderación

• 𝑁 vecinos alrededor del pixel p (usualmente cuadrados)

Denoising

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 31

Denoising

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 32

Figura del video Ray Tracing Essentials, Part 7: Denoising for Ray Tracing

Denoising

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 33

Noise2Noise: Learning Image Restoration without Clean Data

Figura obtenida del paper Noise2Noise: Learning Image Restoration without Clean Data

Star Wars demo: From 4x V100 to 1x 2080TI

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 34

Muchas gracias

Julio Morero

[email protected]

• Ch.26 Real-Time Ray Tracing - Real-Time Rendering 4th Edition– http://www.realtimerendering.com/raytracing.html

• Introduction to DirectX Raytracing Shaders– http://intro-to-dxr.cwyman.org/presentations/IntroDXR_RaytracingShaders.pdf

– https://www.youtube.com/watch?v=Q1cuuepVNoY

• Ray Tracing Essentials, Part 1: Basics of Ray Tracing– https://www.youtube.com/watch?v=gBPNO6ruevk&list=PL5B692fm6--

sgm8Uiava0IIvUojjFOCSR&index=1

• Ray Tracing Essentials, Part 7: Denoising for Ray Tracing– https://www.youtube.com/watch?v=6O2B9BZiZjQ&list=PL5B692fm6--

sgm8Uiava0IIvUojjFOCSR&index=7

• Noise2Noise: Learning Image Restoration without Clean Data– https://arxiv.org/pdf/1803.04189v3.pdf

• Star Wars demo– https://www.youtube.com/watch?v=lMSuGoYcT3s

Referencias

5/10/2020 Computación Gráfica Avanzada: Real Time Ray Tracing 36