¿Qué es el Ray Tracing y por qué lo quieres en tu GPU?

En pocas palabras, el trazado de rayos es una técnica de renderizado que produce gráficos fotorrealistas con una iluminación real y formaciones de sombras. Se toman en cuenta las propiedades físicas de los objetos renderizados y su composición material para simular con precisión cómo la luz interactúa con ellos, incluido el nivel de reflexión, refracción o absorción de la luz.

Cómo funciona

El algoritmo de raytracing se aplica a una imagen hecha de píxeles. Para cada píxel, dispara un rayo, la dirección de ese rayo primario se obtiene trazando una línea desde el ojo hasta el centro del píxel. Una vez que tenemos establecida la dirección del rayo primario, verificamos cada objeto de la escena para ver si se cruza con alguno de ellos. En algunos casos, el rayo primario intersectará más de un objeto. Cuando eso sucede, seleccionamos el objeto cuyo punto de intersección es el más cercano al ojo. Luego, se dispara un rayo de sombra desde el punto de intersección hacia la fuente de luz. Si este rayo en particular no intersecta un objeto en su camino hacia la luz, el punto de impacto se ilumina. Si se interseca con otro objeto, ese objeto proyecta una sombra sobre él.

Si repetimos esta operación para cada píxel, obtenemos una representación bidimensional de nuestra escena tridimensional

Además las propiedades de la superficie del objeto, como el color, la reflectividad y la opacidad, informan el color del objeto y cómo interactúa con los rayos de luz.

El trazado de rayos calcula en qué forma los rayos de luz rebotarían en las superficies. También determina dónde se formarían las sombras, y si la luz se reflejaría desde otra dirección para iluminar ese espacio. Como resultado, los gráficos con trazado de rayos pueden producir sombras con bordes suaves, especialmente cuando hay más de una fuente de luz en la escena.

El trazado de rayos también tiene la clara ventaja de poder simular materiales transparentes como el vidrio o el agua, y cómo la luz se refracta cuando pasa a través de dichos objetos.

Sin rasterización, Sin shaders

Los gráficos de computadora tradicionales se basan en una técnica llamada rasterización, para representar una imagen renderizada 3D en una imagen 2D para poder ser mostrada en un monitor. Los gráficos rasterizados dependen de shaders complejos (algoritmos para simular sombras) para dar a la escena una sensación de profundidad.

Con el raytracing, la profundidad es una parte integral de la escena y no necesita shaders para darle vida.

Computacionalmente intensivo

La tecnología de trazado de rayos no es nueva, y te podemos garantizar que ya te la has topado antes. Hollywood utiliza el trazado de rayos en películas para combinar efectos especiales con secuencias de acción en vivo. Sin embargo, el trazado de rayos es extremadamente intensivo en poder de cómputo, y puede llevar días o incluso semanas procesar cada escenas, por lo que los gráficos con trazado de rayos para juegos solo existían en forma de cinemáticas pre-renderizadas.

Demostración de AXE 2.0 de Nvidia en 2010

Nvidia ha estado impulsando la tecnología de trazado de rayos durante al menos una década. En 2008, adquirió una compañía de trazado de rayos llamada RayScale, y dos años más tarde, en Siggraph 2010, mostró la primera demostración interactiva de trazado de rayos en tiempo real, con sustarjetas Quadro basadas en Fermi.

Después de presenciar la demostración, supusimos que veríamos el raytracing en tiempo real "en algunas generaciones más de GPUs".

"Algunas generaciones" se convirtió en seis generaciones de GPUs! Pero Nvidia finalmente logró el trazado de rayos en tiempo real con la nueva línea RTX. El raytracing en tiempo real es un paso fundamental hacia gráficos que no se puedan distinguir del mundo real.




Más información:

https://www.tomshardware.com/news/ray-tracing-definition,37600.html

https://www.digitaltrends.com/computing/what-is-ray-tracing/

https://www.techradar.com/news/ray-tracing

https://www.scratchapixel.com/lessons/3d-basic-rendering/introduction-to-ray-tracing/implementing-the-raytracing-algorithm