
Estimados Khabrovchans, les presento a ustedes la continuación de la investigación sobre el tema de encontrar sombras adecuadas para un bagel 2D.
Esta publicación es una secuela de la
publicación , un tipo de trabajo sobre errores y el desarrollo posterior de la idea.
En sus comentarios, los críticos respetados señalaron acertadamente que en espacios cerrados las sombras resultaron ser angulosas y poco naturales. Se propusieron varias soluciones, me gustó la propuesta de utilizar
la proyección de rayos para calcular la sombra.

Aclaro, no trabajo con la tarjeta de video (todavía no trabajo), todos los resultados están modelados en la CPU.
En este trabajo sobre reykasting, entendemos el método de construir una imagen lanzando rayos de un observador al espacio hasta que se cruza con un obstáculo (límites de la pantalla) y resalta el lugar de su colisión.
Aquí usaremos una versión simplificada de rakecasting basada en la intersección de un mosaico con un rayo. Este método ha sido ampliamente utilizado en juegos pseudo-tridimensionales del pasado (por ejemplo,
Wolfenstein_3D , con respecto a los que están en el tema), lo adaptamos para el espacio bidimensional.

El algoritmo es lo suficientemente simple para la comprensión y la realización. Traeré mi propia implementación:
Como el rayo cruza las celdas en cada eje a la misma distancia, puede ahorrar en los cálculos y solo verificar si hay paredes dentro del mosaico. Necesitamos una intersección con un obstáculo y recordar sus coordenadas.
En mi implementación, puse todas las trigonometrías y divisiones en una tabla separada para cada ángulo, lo que aceleró enormemente el algoritmo.
Después de lanzar los rayos en todas las direcciones con el paso deseado, obtenemos aproximadamente la siguiente imagen:

Aumentar el número de rayos a varios miles y obtener el poliedro deseado del alcance. Es posible, por supuesto, emitir rayos para cada píxel de la imagen, como en los aceleradores 3D, pero no puede prescindir de una tarjeta de video aquí.

Comienza el trabajo adicional con capas.
Alcance De aquí en adelante, los rayos pasan un poco hacia las profundidades de los objetos. Tal convención de juegos crea un entorno único característico de los juegos 2D.

Generación de mapas de iluminación. Generamos fuentes de luz estáticas por adelantado y caché para mejorar el rendimiento, aplicamos fuentes dinámicas en el proceso de visualización en la pantalla.

Uniendo todo. Todo lo que falta son terribles monstruos y tesoros ... muchos tesoros.

Las paredes con una curvatura variable de la penetración de la luz no me llegaron, pero tal vez sea un aficionado.

En el proceso de creación del prototipo, probé muchas variaciones del modelo, algunas de ellas son más adecuadas para el
horror :

Me gustó especialmente el efecto de múltiples reflejos de rayos desde las paredes, pero incluso su ingenua implementación fue tan lenta que lo dejé para el futuro cuando me hice amigo de la tarjeta de video.
Gracias por su atencion
Enlace para jugar (exe para windows)
Parte 1 ,
Parte 3