← CC2018

Ray Tracing

Semestre 02, 2026

Objetivo

  • Comprender qué es un raytracer y en qué se diferencia de las técnicas vistas hasta ahora.
  • Entender el modelo físico de la luz que el raytracer imita y por qué se invierte.
  • Conocer el flujo general: rayo primario, intersección, sombreado, color.
  • Formalizar el rayo en 3D con su origen, su dirección y su ecuación paramétrica.
  • Comparar raycasting y ray tracing, y ubicar sus casos de uso.

Ray Tracing

Definición

Técnica de renderizado que genera una imagen siguiendo el recorrido de rayos de luz a través de una escena tridimensional.

Raytracer

El programa que implementa la técnica: por cada píxel lanza un rayo, busca qué golpea primero y calcula su color.

La escena es geometría tridimensional real, no una cuadrícula de celdas.
Hay un rayo por cada píxel de la imagen, no uno por columna de pantalla.
El color de un punto sale de un modelo de luz, no de un truco de distancia.

Cómo vemos el mundo

Una fuente emite fotones en todas las direcciones.
Los fotones viajan y rebotan en las superficies de la escena.
Algunos terminan entrando al ojo, y eso es lo que vemos.
La luz viaja de la fuente al objeto y del objeto al ojo

El color de una superficie

La luz blanca contiene todas las longitudes de onda; el objeto refleja solo algunas
Idea clave

El color no es una propiedad mágica del objeto: es qué longitudes de onda absorbe y cuáles refleja su superficie.

Una manzana se ve roja porque absorbe casi todo el espectro y refleja el rojo.

Forward ray tracing

La simulación honesta

Emitir fotones desde la luz, seguirlos mientras rebotan y quedarse con los que lleguen a la cámara.

De todos los fotones emitidos, solo una fracción minúscula entra a la cámara.
Casi todo el cómputo se gasta en luz que nunca vamos a ver.
Casi todos los fotones emitidos nunca llegan al ojo

Backward ray tracing

Los rayos salen del ojo hacia la escena
La inversión

En lugar de salir de la luz, los rayos salen de la cámara: uno por píxel, hacia la escena.

Al golpear una superficie, el rayo pregunta cuánta luz llega a ese punto.
Todo rayo trazado contribuye al resultado: ninguno se desperdicia.

El término ray tracing

Convención

Cuando se habla de ray tracing sin más, se está hablando de backward ray tracing.

El nombre describe la dirección en la que se recorren los rayos, no el orden en que la luz ocurre en la realidad.
Es la versión que se implementa en la práctica, y la que usamos en el proyecto del curso.

Funcionamiento general

El raytracer recorre la imagen píxel por píxel y repite el mismo procedimiento.

1Generar el rayo primario
  • Sale de la cámara y atraviesa el píxel que se está calculando.
2Buscar la intersección
  • Se prueba el rayo contra todos los objetos y se guarda el impacto más cercano.
3Manejar el caso sin impacto
  • Si el rayo escapa de la escena, se pinta el color de fondo o del cielo.

Funcionamiento general

4Describir el punto de impacto
  • Se calcula la normal de la superficie y el material en ese punto.
5Sombrear
  • Se evalúa cuánta luz llega a ese punto y con qué intensidad.
6Escribir el color
  • El resultado se guarda en el framebuffer y el loop pasa al siguiente píxel.
La imagen aparece porque cada píxel preguntó, por su cuenta, qué se ve a través de él.

El rayo en 3D

Un rayo es una semirrecta: parte de un punto y se extiende infinitamente hacia un solo lado.

Origen

El punto \(O\) del espacio de donde sale el rayo. En un rayo primario es la posición de la cámara.

Dirección

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 $$

El parámetro t

Es la distancia recorrida a lo largo del rayo, y su signo tiene significado geométrico.

ValorSignificado
\(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.
Si \(D\) no estuviera normalizado, \(t\) quedaría escalado por su magnitud y las comparaciones de distancia dejarían de ser confiables.

Intersecciones con la ecuación paramétrica

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\).

Si no hay solución real, el rayo no toca ese objeto.
Si hay soluciones, la menor \(t\) positiva es el primer punto de impacto.
Entre todos los objetos, la \(t\) más pequeña gana: ese es el objeto visible.
Consecuencia

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\).

Rayos primarios

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.

1Pasar el píxel al espacio normalizado
  • La posición del píxel se lleva a un rango conocido, con el centro de la pantalla en el origen.
2Corregir la relación de aspecto
  • Se compensa que el ancho y el alto de la ventana no sean iguales.
3Aplicar el campo de visión
  • Se escala la apertura de la cámara, que decide cuánto mundo entra en la imagen.
4Formar la dirección y normalizarla
  • Con esas componentes se arma el vector, se lleva a longitud uno y el rayo sale desde la cámara.

El espacio normalizado

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.

Al mapear los píxeles al rango de menos uno a uno en ambos ejes, se obtiene un sistema independiente de la resolución.
Se puede cambiar el tamaño de la ventana sin tocar nada de la lógica del trazado de rayos.
El eje vertical se invierte, porque en el framebuffer la fila cero es la de arriba y en la cámara ese eje crece hacia arriba.

La relación de aspecto

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} $$
Sin esta corrección una esfera se vería como una elipse estirada a lo ancho o a lo alto.
El factor multiplica la coordenada horizontal antes de armar la dirección del rayo.

Longitud unitaria

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} $$
Consecuencia

Con todas las direcciones de longitud uno, el parámetro \(t\) se lee directamente como distancia y las comparaciones entre objetos son confiables.

Objetos 3D

La escena no es una imagen: es una lista de objetos, y cada objeto se describe con dos cosas.

Geometría

La forma que ocupa en el espacio. Es lo que permite responder si un rayo lo toca y a qué distancia.

Material

Cómo responde a la luz al ser golpeado. Es lo que decide el color final del punto de impacto.

El raytracer nunca dibuja un objeto. Lo único que le pregunta es si un rayo lo toca y dónde.

Primitivas geométricas

Se usan formas que tienen una ecuación cerrada, porque contra ellas la intersección se resuelve con álgebra y no por aproximación.

Esfera: definida por un centro y un radio. Es la primitiva más barata de intersectar.
Plano: definido por un punto y una normal. Es infinito, y sirve para pisos, paredes y techos.
Triángulo: definido por tres vértices. Es la pieza con la que se arma cualquier modelo 3D.
Idea clave

Una escena compleja no usa formas complejas: usa muchísimas primitivas simples.

La esfera

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 de la esfera

El discriminante \(\Delta = b^2 - 4ac\) dice, por sí solo, la relación geométrica entre el rayo y la esfera.

DiscriminanteSignificado
\(\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.
De las dos raíces se toma la menor que sea positiva: es la cara de la esfera que mira hacia la cámara.

El plano

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} $$
Si el denominador es cero, el rayo es paralelo al plano y nunca lo corta.
Si la \(t\) resultante no es positiva, el plano queda detrás de la cámara y se descarta.

El triángulo

La prueba del triángulo se hace en dos tiempos, apoyándose en la del plano.

1Cortar el plano que lo contiene
  • Los tres vértices definen un plano, y contra ese plano se calcula la \(t\) del rayo.
2Verificar que el punto caiga dentro
  • El corte con el plano puede quedar fuera del triángulo, así que se comprueba que el punto esté del lado interno de los tres bordes.
Por qué importa

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.

La normal en el punto de impacto

Saber dónde pegó el rayo no alcanza: hace falta saber hacia dónde mira la superficie en ese punto.

Esfera

Cambia en cada punto y apunta hacia afuera desde el centro: \(\vec{n} = \dfrac{P - C}{r}\).

Plano y triángulo

Es constante en toda la superficie: la misma normal sirve para cualquier punto de impacto.

La normal es la que decide cuánta luz recibe el punto y hacia dónde sale un rayo reflejado.

El impacto más cercano

Con varios objetos en la escena, el rayo se prueba contra todos y se conserva únicamente el impacto de menor distancia.

Se recorren todos los objetos, sin ningún orden previo: el rayo no sabe cuál está adelante, así que no puede saltarse ninguno.
Cada primitiva resuelve su propia ecuación, y todas devuelven lo mismo: una distancia sobre el rayo.
El impacto se conserva solo si está frente a la cámara y es más cercano que el mejor encontrado hasta ese momento.
Si el recorrido termina sin tocar nada, el píxel se pinta con el color de fondo.

Rayos secundarios

El rayo primario responde qué se ve. Para saber cómo se ve, desde el impacto se lanzan rayos nuevos.

Rayo de sombra: va del impacto hacia la luz; si encuentra un objeto en el camino, el punto está en sombra.
Rayo de reflexión: rebota sobre la normal y trae lo que se refleja en un material espejeante.
Rayo de refracción: atraviesa la superficie y se dobla al cambiar de medio, como en el vidrio o el agua.
El rayo primario sale de la cámara y atraviesa la retícula de píxeles; desde el impacto en la esfera sale un rayo de sombra hacia la luz

Recursión y profundidad

Recursión

Cada rayo secundario puede golpear otra superficie y generar sus propios rayos. El proceso se repite sobre sí mismo.

Límite

Se detiene con una profundidad máxima. Sin ese límite, dos espejos enfrentados harían la recursión infinita.

Sombras, reflejos y refracciones no son efectos añadidos aparte: son consecuencia directa de seguir trazando rayos.

Construyendo la imagen

La retícula de píxeles frente a la cámara, con la esfera que cada rayo va resolviendo
Idea clave

La combinación de todos los rayos genera la imagen final.

Es una proyección de alta definición, sin transformaciones geométricas de por medio.
Conceptualmente es un ciclo doble que recorre todos los píxeles de la imagen.

Raycasting y Ray Tracing

Comparten la idea de lanzar rayos, pero resuelven problemas distintos.

RaycastingRay Tracing
RayosUno por columna de pantallaUno o más por píxel
EscenaCuadrícula 2D de celdasGeometría 3D arbitraria
Dimensión del rayo2D, con altura simulada3D real
RebotesNinguno, termina al golpearRecursivo: sombras, reflejos, refracciones
IluminaciónTrucos por distancia o por ladoModelo de luz calculado
CostoMuy bajo, tiempo real desde 1992Alto, crece con resolución y escena
EjemploWolfenstein 3DCine, VFX, render de producto

Cambios con el Ray caster

Idea clave

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.

El rayo pasa a ser tridimensional.
La escena deja de ser una cuadrícula.
El rayo aprende a rebotar.

Costo computacional

  • Una imagen de 1920x1080 tiene poco más de dos millones de píxeles.
  • Cada píxel lanza al menos un rayo primario.
  • Cada rayo se prueba contra los objetos de la escena.
  • Cada impacto genera rayos secundarios que repiten todo el proceso.
Consecuencia

Durante décadas el ray tracing vivió solo en el render offline, mientras la rasterización dominaba el tiempo real.

Estrategias para hacerlo manejable

Menos pruebas

Estructuras de aceleración como bounding volumes, BVH o kd-trees descartan de golpe grandes porciones de la escena.

Menos costo por rayo

Limitar la profundidad de recursión, simplificar el modelo de sombreado o bajar la resolución de trabajo.

El costo es el eje de todas las decisiones de diseño de un raytracer.