Lanzamiento de rayos

Ray casting , raycasting , el método de "proyección de rayos" ( eng.  ray casting  - casting de rayos) es uno de los métodos de representación en gráficos por computadora , en el que la escena se construye en función de las medidas de la intersección de los rayos con la superficie representada. El término se usó por primera vez en gráficos por computadora en una publicación de 1982 de Scott Roth ,  quien lo usó para describir un método de renderizado para modelos CSG [1] .

Aunque los términos "emisión de rayos" y "trazado de rayos" a menudo se usaban indistintamente en la literatura temprana de gráficos por computadora [2] , estos términos son distintos en los gráficos por computadora modernos y describen diferentes técnicas que, sin embargo, tienen mucho en común [3] .

Uso

Raycasting puede referirse a:

Concepto

Raycasting no es sinónimo de trazado de rayos (ray tracing), pero se puede considerar como una versión abreviada y significativamente más rápida del algoritmo de trazado de rayos. Ambos algoritmos son de "orden de imagen" y se usan en gráficos por computadora para representar escenas 3D en una pantalla 2D usando rayos de proyección que se proyectan desde el ojo del espectador a una fuente de luz . El método de proyección de rayos no calcula las nuevas tangentes de los rayos de luz que se producirán después de que el rayo que se proyecta desde el ojo hacia la fuente de luz se cruce con la superficie. Esta característica hace que sea imposible renderizar con precisión los reflejos, las refracciones y la proyección natural de las sombras mediante la proyección de rayos. Sin embargo, todas estas funciones se pueden agregar utilizando técnicas "falsas" (engañosas, de aproximación), por ejemplo, mediante el uso de mapas de textura u otros métodos. La alta velocidad de cálculo hizo que el raycasting fuera un método de renderizado conveniente en los primeros juegos de computadora en 3D en tiempo real.

En la naturaleza real, una fuente de luz emite un haz de luz que, "viajando" por el espacio, finalmente "tropieza" con algún tipo de barrera que interrumpe la propagación de este haz de luz. Un haz de luz se puede representar como una corriente de fotones que se mueve a lo largo del vector del haz. En cualquier punto a lo largo del camino, cualquier combinación de tres cosas puede ocurrirle a un haz de luz: absorción , reflexión y refracción . Una superficie puede reflejar todo el haz de luz o solo una parte de él en una o más direcciones. La superficie también puede absorber parte del haz de luz, dando como resultado una pérdida de intensidad del haz reflejado y/o refractado. Si una superficie tiene las propiedades de transparencia , refracta parte del haz de luz dentro de sí misma y cambia su dirección de propagación, absorbiendo parte (o todo) del espectro del haz (y posiblemente cambiando de color). La intensidad total del haz de luz, que se "perdió" debido a la absorción, la refracción y la reflexión, debe ser exactamente igual a la intensidad saliente (inicial) de este haz. La superficie no puede, por ejemplo, reflejar el 66 % del haz de luz entrante y refractar el 50 %, ya que la suma de estas porciones será igual al 116 %, que es más del 100 %. De ello se deduce que los rayos reflejados y/o refractados deben "unirse" con otras superficies, donde sus poderes de absorción, reflexión y refracción se calculan nuevamente en base a los resultados de los cálculos de los rayos entrantes. Algunos de los rayos generados por la fuente de luz se propagan por el espacio y finalmente caen en el área de visualización (el ojo humano, la lente de una cámara de fotos o video, etc.). Tratar de simular el proceso físico de propagación de la luz rastreando los rayos de luz usando una computadora es un desperdicio excesivo, ya que solo una pequeña fracción de los rayos generados por la fuente de luz golpean la ventana de visualización.

Arthur  Appel introdujo el primer algoritmo de emisión de rayos (no trazado de rayos) utilizado para renderizar en 1968 [5] . Raycasting se basa en la idea de emitir rayos desde los "ojos" del observador, un rayo por píxel , y encontrar el objeto más cercano que bloquea el camino de este rayo. Usando las propiedades del material y el efecto de la luz en la escena, el algoritmo de emisión de rayos puede determinar el sombreado de un objeto dado. La suposición en la simplificación es que si la superficie se coloca frente a la luz, entonces la luz alcanzará la superficie y no será bloqueada ni sombreada. El sombreado de la superficie se calcula utilizando algoritmos tradicionales de sombreado de gráficos por computadora en 3D. Una de las ventajas del raycasting es la capacidad de manejar fácilmente superficies no planas y cuerpos sólidos como una esfera o un cono. Si una superficie matemática puede ser atravesada por un rayo, entonces puede renderizarse usando raycasting. Los objetos complejos se pueden crear utilizando técnicas de modelado de cuerpos sólidos y se pueden renderizar fácilmente.

Raycasting para gráficos por computadora fue utilizado por primera vez por científicos de Mathematical Applications Group, Inc. (MAGI) de Elmsford, Nueva York ( inglés  Elmsford, Nueva York ). Esta empresa se formó en 1966 para realizar cálculos de ecología radiológica para el Departamento de Defensa de los Estados Unidos . El software de desarrollo de MAGI no solo calculó cómo los rayos gamma rebotan en las superficies (la emisión de rayos para la radiación se realizó en la década de 1940), sino también cómo penetran y se refractan dentro de los materiales. Bajo la dirección del Dr.  Philip Mittelman , los científicos desarrollaron un método para generar imágenes basado en el mismo software. En 1972, MAGI se convirtió en un estudio de animación comercial. Ha utilizado raycasting para generar animación por computadora en 3D para comerciales de televisión, películas educativas y, finalmente, largometrajes. MAGI es responsable de la mayor parte de la animación en la película de ciencia ficción Tron . Para crear la animación, solo se utilizó el método de raycasting. En 1985, MAGI quebró.

Ray casting en juegos de computadora

Wolfenstein 3D

El mundo de Wolfenstein 3D está construido sobre una cuadrícula de paredes de altura uniforme y suelos y techos lisos y sólidos. Para dibujar el nivel del juego, se "dispara" un rayo desde el campo de visión, que pasa a través de cada columna de píxeles en la pantalla. A continuación, el algoritmo comprueba si el rayo ha cruzado la pared y, de ser así, selecciona y escala la textura de la pared en consecuencia, según el lugar del nivel en el que el rayo "colisionó" con la pared y la distancia que había recorrido antes. A continuación, se crea un búfer unidimensional, en el que se ubican sprites escalados que representan enemigos, bonificaciones y elementos [6] .

La creación de niveles basados ​​en una cuadrícula tenía dos objetivos: las colisiones de vigas y paredes se podían encontrar más rápidamente, ya que las posibles colisiones se vuelven más predecibles y se reduce el consumo de memoria. Sin embargo, el manejo de espacios abiertos se vuelve difícil.

Serie Comanche

Para los juegos de la serie Comanche , NovaLogic ha desarrollado  un motor separado llamado Voxel   Space . Este motor rastrea un rayo a través de cada columna de píxeles de la pantalla y prueba cada rayo contra puntos en el mapa de altura. A continuación, el motor transforma cada elemento del mapa de altura en una columna de píxeles, determina cuáles de ellos son visibles y los renderiza con el color apropiado, que se toma del mapa de textura [7] .

Notas

  1. Roth, Scott D. (febrero de 1982), Ray Casting for Modeling Solids , Computer Graphics and Image Processing Vol. 18: 109–144 , DOI 10.1016/0146-664X(82)90169-1  
  2. Foley, James D .; Van Dam, Andries ; Feiner, Steven K. y Hughes, John F. (1995), Computer Graphis: Principios y práctica , Addison-Wesley, pág. 701, ISBN 0-201-84840-6  
  3. Por ejemplo, Boulos, Solomon (2005), Notas sobre el trazado de rayos eficiente , SIGGRAPH 2005 Cursos : 10 , DOI 10.1145/1198555.1198749 
  4. Woop, Sven; Schmittler, Jörg & Slusallek, Philipp (2005), RPU: una unidad de procesamiento de rayos programable para trazado de rayos en tiempo real , Siggraph 2005 Vol . 24:434 , DOI 10.1145/1073204.1073211  
  5. «Ray-tracing and other Rendering Approaches» Publicado el 17 de noviembre de 2018 en Wayback Machine (PDF), notas de clase, Maestría en Animación por computadora y efectos visuales, Jon Macey, Universidad de Bournemouth
  6. Tutorial de emisión de rayos al estilo Wolfenstein. Archivado el 19 de mayo de 2015 en Wayback Machine por F. Permadi .
  7. André LaMothe. Arte negro de la programación de juegos en 3D. Se requiere ISBN y número de página.

Enlaces