Ray casting hace referencia al uso de la intersección rayo-superficie para solucionar una variedad de problemas en gráficos por ordenador y geometría computacional. El término fue introducido en gráficos por computadora en un artículo publicado por Scott Roth en 1982 para describir un método de renderización de modelos de geometría constructiva de sólidos.
Ray casting puede referirse a una variedad de problemas y técnicas:
El problema general de determinar el primer objeto interceptado por un rayo,
Una técnica para determinación de las caras ocultas (HSR por sus siglas en inglés), también conocida como determinación de las superficies visibles (VSD), basada en buscar la primera intersección de un rayo lanzado desde el observador a través de cada pixel de una imagen,
Un algoritmo no recursivo de renderización ray-tracing que sólo lanza rayos primarios, o
Un método directo de renderización de volúmenes llamado también volume ray casting, en que el rayo es "empujado a través" del objeto y el campo escalar en 3D de interés es muestreado a lo largo del rayo dentro del objeto. En este método no son expandidos rayos secundarios.
A pesar de que "ray tracing" y "ray casting" fueron a menudo utilizados indistintamente en literatura temprana de gráficos por computadora, el empleo más reciente de dichos términos intenta diferenciarlos. La distinción radica en que ray casting es un algoritmo de renderizado que nunca traza recursivamente rayos secundarios, mientras que otros métodos de renderizado basados en ray tracing tienden a hacerlo.
El Ray casting es el más básico de muchos algoritmos de renderización de gráficos por computadora que usan el algoritmo geométrico de ray tracing. Los algoritmos basados en ray tracing operan en orden de imagen para renderizar escenas tridimensionales a imágenes bidimensionales. Los rayos geométricos son trazados desde el ojo del observador (trazado hacia atrás) para calcular la radiancia que viaja hacia el observador en la dirección del rayo. La rapidez y simplicidad del trazado de los rayos provienen de computar el color de la luz sin trazar recursivamente rayos adicionales para obtener la radiancia incidente en el punto donde el rayo intercepta. Esto elimina la posibilidad de renderizar con exactitud las reflexiones, refracciones, y las sombras. Aun así todos estos elementos pueden ser simulados en un cierto grado, con el uso ingenioso de mapas de textura u otros métodos. La velocidad de cómputo del ray casting lo convirtió en un método práctico de renderizado para los primeros videojuegos de 3D con renderización de escenas en tiempo real.
En la naturaleza, una fuente de luz emite un rayo de luz que viaja eventualmente hacia una superficie que interrumpe su trayectoria. Uno puede figurarse dicho "rayo" como un flujo de fotones que viajan a lo largo del mismo camino. Al llegar a este punto, cualquier combinación de tres cosas podría pasar con la luz del rayo: absorción, reflexión, y refracción. La superficie puede reflejar toda o parte del rayo de luz, en una o varias direcciones; pudiendo incluso absorber parte del mismo, resultando esto en una pérdida de intensidad de la luz reflejada y/o refractada. Si la superficie posee propiedades de transparencia o es traslúcida, ella refracta una porción de la luz que viaja dentro de la misma en una dirección, absorbiendo a su vez parte del espectro (y posiblemente alterando el color). Para el cómputo de la luz absorbida, reflejada y refractada no debe considerarse más de la propia luz que llega a la superfiacie. Una superficie no puede, por ejemplo, reflejar el 66% de un rayo de luz y refractar el 50% del mismo, ya que entre los dos sumarían 116%. En este punto los rayos reflejados y/o refractados pueden golpear otras superficies, momento en donde sus propiedades de absorción, refracción, y reflectantes son recalculadas basándose en los rayos incidentes. Algunos de estos rayos viajan de tal manera que interceptan nuestros ojos, haciendo posible que veamos la escena, así que contribuyen con la renderización final de la imagen. Entonces para aminorar el cómputo, tan sólo una fracción de los rayos son considerados, en este caso, los que llegan al observador.
El primer algoritmo ray casting usado para renderizar fue presentado por Arthur Appel en 1968.4 La idea detrás de ray casting es trazar rayos desde el observador, uno por pixel, y encontrar el objeto más cercano que interrumpe la trayectoria del mismo. Usando las propiedades de los materiales y el efecto de las luces en la escena, este algoritmo puede determinar el sombreado de este objeto. Por la hipótesis de simplificación podemos decir que si una superficie está orientada hacia una fuente de luz y no hay ningún objeto en su trayectoria, la luz alcanzará esa superficie y no será bloqueada o sombreada. El sombreado de la superficie es calculado usando los modelos tradicionales de sombreado de gráficos por computadora en 3D. Una importante ventaja del ray casting que resalta por encima de los scanline-rendering fue su habilidad de lidiar fácilmente con superficies no planas y sólidos, como conos y esferas. Si una superficie matemática puede ser interceptada por un rayo, esta puede ser renderizada por ray casting. Modelos más complejos pueden ser creados usando técnicas de modelización de sólidos y ser fácilmente renderizados.
WOLFENSTEIN 3D
El mundo en Wolfenstein 3-D está construido de una cuadrícula de paredes con altura uniforme encontradas en pisos unicolor y techos. Para dibujar el mundo, un solo rayo es trazado por cada columna de píxeles de pantalla y un trozo vertical de textura de pared es seleccionado y escalado según donde en el mundo el rayo intercepta una pared y qué tan lejos viaja antes de hacerlo