Semestre 02, 2026
Técnica de renderizado que genera una imagen siguiendo el recorrido de rayos de luz a través de una escena tridimensional.
El programa que implementa la técnica: por cada píxel lanza un rayo, busca qué golpea primero y calcula su color.
El color no es una propiedad mágica del objeto: es qué longitudes de onda absorbe y cuáles refleja su superficie.
Emitir fotones desde la luz, seguirlos mientras rebotan y quedarse con los que lleguen a la cámara.
En lugar de salir de la luz, los rayos salen de la cámara: uno por píxel, hacia la escena.
Cuando se habla de ray tracing sin más, se está hablando de backward ray tracing.
El raytracer recorre la imagen píxel por píxel y repite el mismo procedimiento.
Un rayo es una semirrecta: parte de un punto y se extiende infinitamente hacia un solo lado.
El punto \(O\) del espacio de donde sale el rayo. En un rayo primario es la posición de la cámara.
El vector \(D\) que indica hacia dónde apunta. Se guarda normalizado, con \(\lVert D \rVert = 1\).
Cualquier punto sobre el rayo se obtiene avanzando una cantidad \(t\) desde el origen:
$$ P(t) = O + t\,D $$Es la distancia recorrida a lo largo del rayo, y su signo tiene significado geométrico.
| Valor | Significado |
|---|---|
| \(t = 0\) | Exactamente el origen del rayo. |
| \(t > 0\) | Puntos frente al rayo: los únicos que nos interesan. |
| \(t < 0\) | Puntos detrás del origen: están sobre la recta, pero no sobre el rayo. |
Para intersectar un rayo con una esfera, un plano o un triángulo, se sustituye \(P(t)\) en la ecuación de la superficie y se despeja \(t\).
La oclusión sale gratis. No hace falta un z-buffer ni ordenar la escena: el objeto más cercano es simplemente el de menor \(t\).
Son los rayos que salen de la cámara, uno por cada píxel. Generarlos consiste en convertir la posición de un píxel en una dirección dentro del espacio de la escena.
Las pantallas usan coordenadas de píxel, con el origen en una esquina y la fila cero arriba. Trabajar directamente ahí ataría toda la matemática al tamaño exacto de la ventana.
La mayoría de las pantallas no son cuadradas, así que el eje horizontal debe escalarse para que la escena se proyecte con la geometría correcta.
$$ ratio = \frac{ancho}{alto} $$Una dirección se representa con un vector. Si ese vector tuviera una longitud arbitraria, su magnitud distorsionaría el resultado, así que se normaliza dividiéndolo entre su propia longitud.
$$ \vec{d}_{norm} = \frac{\vec{d}}{\lVert \vec{d} \rVert} $$Con todas las direcciones de longitud uno, el parámetro \(t\) se lee directamente como distancia y las comparaciones entre objetos son confiables.
La escena no es una imagen: es una lista de objetos, y cada objeto se describe con dos cosas.
La forma que ocupa en el espacio. Es lo que permite responder si un rayo lo toca y a qué distancia.
Cómo responde a la luz al ser golpeado. Es lo que decide el color final del punto de impacto.
Se usan formas que tienen una ecuación cerrada, porque contra ellas la intersección se resuelve con álgebra y no por aproximación.
Una escena compleja no usa formas complejas: usa muchísimas primitivas simples.
Una esfera de centro \(C\) y radio \(r\) es el conjunto de puntos que están exactamente a distancia \(r\) del centro:
$$ \lVert P - C \rVert^2 = r^2 $$Se sustituye el punto por la ecuación del rayo, \(P(t) = O + tD\), y queda todo en función de \(t\):
$$ \lVert O + tD - C \rVert^2 = r^2 $$Al desarrollar el producto punto, la expresión se reordena como una ecuación cuadrática en \(t\):
$$ at^2 + bt + c = 0 \quad\text{con}\quad a = D\cdot D,\; b = 2D\cdot(O - C),\; c = \lVert O - C \rVert^2 - r^2 $$El discriminante \(\Delta = b^2 - 4ac\) dice, por sí solo, la relación geométrica entre el rayo y la esfera.
| Discriminante | Significado |
|---|---|
| \(\Delta < 0\) | No hay solución real: el rayo pasa de largo sin tocar la esfera. |
| \(\Delta = 0\) | Una sola solución: el rayo roza la esfera de forma tangente. |
| \(\Delta > 0\) | Dos soluciones: el punto por donde el rayo entra y el punto por donde sale. |
Un plano se define con un punto \(P_0\) que le pertenece y una normal \(\vec{n}\) perpendicular a él. Todo punto del plano cumple:
$$ \vec{n}\cdot(P - P_0) = 0 $$Sustituyendo el rayo y despejando, \(t\) sale directo, sin cuadrática:
$$ t = \frac{\vec{n}\cdot(P_0 - O)}{\vec{n}\cdot D} $$La prueba del triángulo se hace en dos tiempos, apoyándose en la del plano.
Los modelos 3D no se guardan como fórmulas sino como mallas de triángulos, así que esta es la intersección que más veces se ejecuta en un render real.
Saber dónde pegó el rayo no alcanza: hace falta saber hacia dónde mira la superficie en ese punto.
Cambia en cada punto y apunta hacia afuera desde el centro: \(\vec{n} = \dfrac{P - C}{r}\).
Es constante en toda la superficie: la misma normal sirve para cualquier punto de impacto.
Con varios objetos en la escena, el rayo se prueba contra todos y se conserva únicamente el impacto de menor distancia.
El rayo primario responde qué se ve. Para saber cómo se ve, desde el impacto se lanzan rayos nuevos.
Cada rayo secundario puede golpear otra superficie y generar sus propios rayos. El proceso se repite sobre sí mismo.
Se detiene con una profundidad máxima. Sin ese límite, dos espejos enfrentados harían la recursión infinita.
La combinación de todos los rayos genera la imagen final.
Comparten la idea de lanzar rayos, pero resuelven problemas distintos.
| Raycasting | Ray Tracing | |
|---|---|---|
| Rayos | Uno por columna de pantalla | Uno o más por píxel |
| Escena | Cuadrícula 2D de celdas | Geometría 3D arbitraria |
| Dimensión del rayo | 2D, con altura simulada | 3D real |
| Rebotes | Ninguno, termina al golpear | Recursivo: sombras, reflejos, refracciones |
| Iluminación | Trucos por distancia o por lado | Modelo de luz calculado |
| Costo | Muy bajo, tiempo real desde 1992 | Alto, crece con resolución y escena |
| Ejemplo | Wolfenstein 3D | Cine, VFX, render de producto |
El raycasting es el caso más restringido posible del ray tracing: rayos que viven en un plano, contra una escena que es una cuadrícula, sin rebotes. Esa restricción es lo que lo hacía viable en el hardware de los noventa.
Durante décadas el ray tracing vivió solo en el render offline, mientras la rasterización dominaba el tiempo real.
Estructuras de aceleración como bounding volumes, BVH o kd-trees descartan de golpe grandes porciones de la escena.
Limitar la profundidad de recursión, simplificar el modelo de sombreado o bajar la resolución de trabajo.