Saltar al contenido
[ Suscribirse ]
[ Glosario ]

Raycasting no es lo contrario del ray tracing: es el rayo que se detiene antes

Wolfenstein 3D lanza una línea por cada columna de pantalla y para en la primera pared. Eso es el primer tramo del árbol de rayos que definió el ray tracing, y ni la técnica ni el nombre los inventó el juego.

Redacción ItzLambo

Publicado 20/08/2026, 10:15 · 3 min de lectura

Compartir en WhatsApp Compartir en Facebook Compartir en Bluesky Compartir en X
Cartel tipográfico con el término «Raycasting» y tres fichas: un rayo por columna, para en la primera pared, rejilla de 64×64.
Imagen: ItzLambo

Raycasting es dibujar una escena lanzando un rayo desde el ojo y quedándose con la primera superficie que corta, sin seguirlo más allá. No hay rebotes ni recursión. En Wolfenstein 3D ese rayo no sale uno por píxel, sino uno por cada columna de la pantalla, y lo que se pinta es una tira vertical de textura escalada según la distancia a la que quedó la pared.

No es lo contrario del ray tracing: es su primer tramo

El error más repetido es tratarlos como técnicas ajenas, y la definición del ray tracing lo desmiente sola. El resumen del artículo fundacional de Turner Whitted describe «un árbol de rayos que se extiende desde el observador hasta la primera superficie que encuentra, y de ahí a otras superficies y a las fuentes de luz». Ese primer tramo —del ojo a la primera superficie— es exactamente el raycasting. Whitted añadió el resto del árbol.

La cronología dice lo mismo. La idea básica es de Arthur Appel, que en 1968 la usó para resolver superficies ocultas y calcular sombras; el algoritmo recursivo general, con reflejos y refracciones, es el que Whitted presentó en el SIGGRAPH de 1979 y publicó en Communications of the ACM en 1980. Y el término ya estaba impreso en 1982, cuando Scott D. Roth firmó «Ray casting for modeling solids». Diez años antes del juego.

Wolfenstein 3D no lo inventó, y sus antecesores no lo usaban así

Se repite que el motor de Hovertank 3D y Catacomb 3-D, los dos anteriores de Carmack para Softdisk, ya era este. El código liberado dice otra cosa: el ThreeDRefresh() de Catacomb 3-D —cuyo ejecutable se presenta como «Copyright 1991-93 Softdisk Publishing»— no lanza un rayo por columna, sino que llama a FollowWalls(), que recorre los bordes de las paredes y arma una lista para DrawWallList(). Hay rayos, pero sirven para comprobar si una esquina queda tapada.

Wolfenstein conserva el fósil: el comentario de su propio ThreeDRefresh() todavía dice «follow the walls from there to the right», aunque debajo AsmRefresh ya repite un bucle por columna sobre un tablero de 64×64, con sólo dos desenlaces posibles, HitVertWall y HitHorizWall.

De ahí salen las limitaciones que se citan de memoria, y ninguna es misteriosa. CalcHeight divide una constante, heightnumerator, entre la distancia: por eso todas las paredes miden lo mismo. El escalador dibuja cada tira «centered vertically on the screen», así que el horizonte queda clavado a media pantalla. Y el suelo y el techo no se dibujan: VGAClearScreen los rellena con dos colores planos antes de que salga el primer rayo.

Y DOOM ya no lo usa

Meterlo en el mismo saco es el error más frecuente de esta historia. El renderizador de DOOM no lanza un rayo por columna: recorre un árbol BSP. R_RenderPlayerView llama a R_RenderBSPNode y ahí se acaba la discusión. Un motor que calculara de verdad un mundo tridimensional llegó todavía más tarde, con Quake, en 1996.

[ Fuentes ]

  1. WL_DR_A.ASM — PROC AsmRefresh y el bucle pixxloop: «Setup to trace a ray through pixx view pixel»; vertcheck/horizcheck avanzan xtilestep/ytilestep casilla a casilla hasta hitvert o hithoriz · id Software (código fuente liberado de Wolfenstein 3D) / GitHub
  2. WL_DRAW.C — CalcHeight() («calculate perspective ratio (heightnumerator/(nx>>8))»), HitVertWall()/HitHorizWall(), VGAClearScreen() rellenando techo y suelo con dos colores planos, y en ThreeDRefresh() el comentario heredado «follow the walls from there to the right» · id Software (código fuente liberado de Wolfenstein 3D) / GitHub
  3. WL_SCALE.C — BuildCompScale(): «the given height (centered vertically on the screen)», toppix = (viewheight-height)/2 · id Software (código fuente liberado de Wolfenstein 3D) / GitHub
  4. C3_DRAW.C — ThreeDRefresh() llama a FollowWalls() y luego a DrawWallList(): Catacomb 3-D sigue bordes de pared, no lanza un rayo por columna; los trazados de C3_TRACE.C (FollowTrace/BackTrace/ForwardTrace) comprueban si una esquina está tapada. C3_MAIN.C imprime «Copyright 1991-93 Softdisk Publishing» · id Software / Flat Rock Software (código fuente liberado de Catacomb 3-D) / GitHub
  5. r_main.c — R_RenderPlayerView() llama a R_RenderBSPNode(numnodes-1): el renderizador de DOOM recorre el árbol BSP, no lanza un rayo por columna · id Software (código fuente liberado de DOOM) / GitHub
  6. An improved illumination model for shaded display — resumen: «this information is stored in a tree of "rays" extending from the viewer to the first surface encountered and from there to other surfaces and to the light sources». Presentado en el SIGGRAPH de 1979; publicado en Communications of the ACM vol. 23 n.º 6, pp. 343-349 (junio de 1980), doi 10.1145/358876.358882 · Turner Whitted / ACM SIGGRAPH History · 1979-08-01
  7. Physically Based Rendering, 4.ª ed., «Further Reading» — «Arthur Appel (1968) first described the basic idea of ray tracing to solve the hidden surface problem and to compute shadows in polygonal scenes» y «Whitted's seminal CACM article described a general recursive ray-tracing algorithm that accurately simulates reflection and refraction from specular surfaces and shadows from point light sources» · Matt Pharr, Wenzel Jakob y Greg Humphreys
  8. Ray casting for modeling solids — Scott D. Roth, Computer Graphics and Image Processing vol. 18 n.º 2, pp. 109-144 (registro Crossref del artículo donde se publica el término) · Scott D. Roth / Elsevier · 1982-02-01
El semanal

Lo que importó de verdad

Un correo por semana con las 5 noticias que mueven la industria y el mejor video vertical. Nada de refritos de notas de prensa.

Doble opt-in · Sin spam · Sin pop-ups en todo el sitio

[ Síguenos donde leas ]

Sin algoritmo que decida por ti: el correo y el RSS llegan enteros. En las redes publicamos los cortes.

En redes