Así se acelera tu GPU en escenas 3D gracias a Ray Tracing

Así se acelera tu GPU en escenas 3D gracias a Ray Tracing

Josep Roca

El método de renderizado utilizado en general en los videojuegos es la llamada rasterización o algoritmo del pintor. Pero con la llegada del Trazado de Rayos en tiempo real nos acercamos a una era en la que antiguas limitaciones se ven por completo superadas. Con la llegada de las RDNA 2 de AMD y las consolas de nueva generación está claro que no estamos ante una moda pasajera y por eso os explicamos qué ventajas del Ray Tracing.

El trazado de rayos que estamos empezando a ver en los juegos no es de una implementación completa del trazado de rayos usado a día de hoy en las películas, ya que sería demasiado lenta. En cambio, es una combinación de las técnicas de rasterización de las que se han hecho uso hasta ahora sumado al Ray Tracing para solventar ciertos problemas que no se pueden solucionar con la rasterización.

La idea es ir progresivamente reemplazando las técnicas de rasterización convencionales por el Ray Tracing de manera progresiva y paulatina, pero incluso NVIDIA que es la empresa que más ha estado promocionando esta tecnología en los últimos años en cuanto a marketing ha llegado a poner como fecha para el inicio del final de la transición de la rasterización al Ray Tracing un por todavía lejano 2023.

Ray Tracing 2023

Es por ello que durante estos años los juegos van a hacer uso de lo que llamamos Ray Tracing Híbrido o Ray Tracing en tiempo real consistente en combinar la rasterización utilizada hasta ahora en los juegos para renderizar la escena junto al Ray Tracing para solventar ciertos problemas visuales que no pueden ser solventados a través de la rasterización.

Esto se traduce en que poco a poco los juegos irán dejando de lado la rasterización y las GPU dentro de nuestras tarjetas gráficas irán variando poco a poco a ese ideal.

Rasterizado vs Ray Tracing

Ray Tracing Recorrido Luz

En el rasterizado hacemos una actualización en un valor de color de un píxel en pantalla para luego actualizar ese píxel de nuevo; esto se traduce en que un solo píxel se ha de actualizar varias veces en una sola escena.

En cambio, con el trazado de rayos el valor del color de un píxel no se da hasta que el rayo no ha terminado toda su trayectoria por lo que la información en el búfer de imagen se actualizará una sola vez.

Esta diferencia que puede resultar menor es importante, ya que la rasterización al estar continuamente actualizando el valor de los píxeles en el búfer de imagen, el cual se almacena en la memoria de la gráfica, requiere anchos de banda realmente muy grandes para renderizar escenas cada vez más complejas.

El pipeline del Ray Tracing hibrido

Ray Tracing Pipeline Vulkan DX12U

En la actualidad se utiliza Ray Tracing Híbrido que consiste en renderizar la escena con las fuentes de luz directas a través de la rasterización, ya que el trazado de rayos no tiene ventaja en rendimiento, sino más bien al contrario. Todas las etapas adicionales se añaden como shaders de computación y, por tanto, asíncronos e independientes a la generación del fotograma principal. Dicho de otra manera, el trazado de rayos en la actualidad se aplica cómo efecto de postprocesado, pero con un

Hay que destacad que independientemente de si estamos usando Vulkan, DirectX 12 Ultimate o cualquier otro tipo de API las etapas y el orden de estas son siempre las mismas. Esto se hace para facilitar la compatibilidad del software y el hardware de la manera más estrecha posible.

  • Ray Generation Shader: este shader tiene que ser invocado cada vez que queremos que un objeto de la escena emita un tipo de rayo.
  • Intersection Shader: es el shader que calcula la intersección entre los rayos y el objeto, en desuso por el hecho que las unidades de intersección como el RT Core de NVIDIA hacen este trabajo en paralelo y de manera más eficiente.
  • Shaders de resolución: son el tipo de programa shader que se aplica sobre el objeto según cuál haya sido el resultado de la intersección, son los llamados miss shader, closest hit shader, hit shader, etc. No se ejecutan todos al mismo tiempo porque la intersección solo da un resultado.

Estas son las ventajas gráficas del Ray Tracing

Raster vs Ray Tracing

Pese a las mejoras continuas en potencia y programabilidad de las GPU durante las últimas dos décadas, todas ellas emplean el mismo algoritmo para renderizar las escenas escena, el llamado algoritmo de rasterización o también conocido como algoritmo del pintor. Dicho algoritmo es lo suficientemente bueno si queremos renderizar escenas solo con iluminación directa, es decir, con fuentes de luz incidiendo sobre los objetos, pero sin que estos objetos generen ningún tipo de fuente de luz por sí mismos de manera indirecta como resultado de la incidencia sobre ellos.

«Entendemos como iluminación indirecta la que es producida por un objeto cuando una fuente de luz directa incide sobre el mismo

En cambio, el trazado de rayos o Ray Tracing tiene en cuenta el comportamiento de la misma y su trayectoria. Por lo que puede representar dicha iluminación indirecta de manera más fidedigna. ¿El resultado? La capacidad de mostrar sombras de manera más precisa, reflejos de la luz sobre los objetos e incluso una iluminación mucho más realista con la forma de comportarse de los diferentes tipos de materiales con la luz.

Por lo que la limitación de la rasterización respecto viene por no tener en cuenta el recorrido de la luz. Por lo que a la hora de representar cuál es el comportamiento de esta al incidir en los objetos se han de buscar métodos sustitutivos por la falta de información en la escena que no son los suficientemente buenos.

Mapas de sombras

Raster Horrible Shadow Maps

Más de una vez, jugando a algún videojuego os habrán dado ganas de sacaros los ojos por culpa de las sombras en el juego; el motivo de ello es que la GPU tiene que hacer trabajo extra para poder hacerse una idea de cómo serán las sombras por la falta de información. En la rasterización para generar los mapas de sombras, lo que se hace es renderizar la escena, pero tomando cómo si fuese la cámara el objeto qué genera la sombra y almacenando solamente el búfer de profundidad como mapa de sombras.

¿Os podéis imaginar la potencia que sería necesaria para calcular las sombras de todos los objetos en una escena? Tened en cuenta que con la rasterización el valor de los píxeles se actualiza continuamente mientras que con el trazado de rayos no ocurre ese problema, ya que solo se actualiza una vez el rayo ha realizado todo el recorrido por la escena. No olvidemos que una de las ventajas del Ray Tracing es la generación de sombras suaves y de diferentes niveles de intensidad. Algo que aumenta enormemente el realismo en los juegos.

Mapas de luces

Otra de las formas con las que los desarrolladores solventan las limitaciones de la rasterización es utilizando mapas de luces, sombras y/o reflejos estáticos. Por ejemplo lo que hacen es colocar sombras fijas en el escenario que han sido pre-calculadas de antemano, y dichas sombras no son dinámicas y no cambian con el cambio continuo de la iluminación.

Reflejos

Battlefield V Ray Tracing

Los reflejos son otro de los casos clásicos de las limitaciones de la rasterización y otra de las ventajas del Ray Tracing. Cómo se puede ver en la imagen que acompaña a estas líneas correspondiente a Battlefield V donde se puede ver el reflejo de las ventanas en el suelo generado a tiempo real. Esto es algo que antes no era posible hacerlo, pero a medida que se vaya usando menos la rasterización los iremos viendo paulatinamente. Tanto los reflejos como los mapas de sombras y de luces son efectos que se están trasladando ya al Ray Tracing por el hecho que la rasterización no puede solventar esos problemas visuales con la misma definición.

Otra ventaja del Ray Tracing: La representación de los materiales

Luz en materiales

Otro de los elementos importantes a la hora de representar una escena 3D realista es la representación de los materiales en los que el comportamiento de la luz también incide, y dado que la rasterización tiene un modelo de la luz muy limitado esto hace que los objetos en una escena 3D no se muestren como deben mostrarse.

Hay que tener en cuenta que cada tipo de material se representa con un cociente de refracción que es la cantidad de luz que emiten y que va del 0 al 1; el cociente de refracción más alto es el de una superficie de estilo espejo que va a rebotar los rayos que le llegan al completo y el más bajo es un objeto que simplemente absorbe toda la luz y no la refracta. Cuando los rayos de luz rebotan en los objetos llevan consigo un nivel de energía, y cuando esta llega a cero el rayo deja de recorrer la escena.

Cada vez que un rayo impacta sobre un objeto, en el caso de que hagamos que el objeto emita un rayo indirecto producto de la intersección a través de un shader de generación de rayos este sale con un nivel de energía equivalente al del rayo que ha incidido previamente en el objeto por el cociente de refracción del objeto.

Pues bien, una de las ventajas del Ray Tracing es precisamente esa, la forma en la que puede representar diversos materiales aumentando la calidad visual de los mismos y sin necesidad de tener que tirar de complejos programas shader que requieren una gran cantidad de cálculos por parte de la GPU y combinaciones de mapas de texturas que además no consiguen el mismo resultado.

¡Sé el primero en comentar!