¿Lanzar una sombra sobre una escena completa con GLSL en 2D?

Estoy haciendo un juego 2D de desplazamiento lateral (no isométrico) y quiero que cada fragment que dibujo dibuje una pequeña sombra cuando esté cerca de otro object. ¿Qué tipo de algorithms se usan en sombreadores de fragments para proyectar sombras en juegos 2D?

necesita proporcionar información mucho mejor para get una respuesta muy útil, es vago. (¿Qué significa near in 2d? eso no encaja con la forma en que funcionan las sombras …)

la solución fácil y sencilla es no utilizar sombreadores en absoluto: dibuje todo dos veces, un primer pase con desplazamiento de color plano hacia abajo y hacia la izquierda / derecha; esta es la sombra paralela, luego renderice todo normalmente sobre la parte superior. puedes combinar esto con un desenfoque (usando un sombreador si es necesario) entre las dos pasadas para get un poco de brillo, y a less que estés en una plataforma mobile o empujando muchos triangularjs, el gasto debería estar bien.

si tienes profundidad en tu escena (realmente necesitas aclarar esto, es fácilmente el punto más importante) entonces quizás quieras usar la testing de profundidad para no proyectar sombras en "nada". Si eso no es suficiente, tal vez varíe el brillo y el desenfoque dependiendo de la profundidad de los fragments de escena existentes frente a los fragments de object actuales que se dibujan. Variar las sombras basadas en la profundidad es bastante complicado, y normalmente necesita resolver y muestrear un objective de renderizado para hacer esto, así como también escribir algún progtwig de fragment + vértice, en cuyo caso también podría usar el mapeo de sombras (que está bien investigado y documentado: debes searchlo en Google si decides que es apropiado)

Realmente depende de cómo se configuran los charts de tu juego y cómo quieres que este efecto funcione. En 2d, las "sombras" no están definidas de forma exclusiva, por lo que debe decidir qué tipo de comportamiento desea de ellas.

Si está buscando algo como sombras paralelas en Photoshop, primero necesita las profundidades relativas de los objects que se van a definir de alguna manera, ya sea individualmente o en contenedores (es decir, primer plano, centro, background).

Para proyectar una sombra paralela, un método simple sería convertir todos los objects de sombreado en pantalla en una textura con un sombreador simple que arroje opaco negro (para píxeles sólidos) o transparente / 0-alfa (para píxeles vacíos); luego use este "shadow buffer" w / multiply blending en los objects receptores de sombras: puede compensar el shadow buffer para hacer que la sombra caiga, por ejemplo, hacia la izquierda y hacia abajo.

Si desea que los objects emitan y reciban sombras (es decir, sombras de object por object en lugar de capa por capa), podría intentar un enfoque similar donde itere sobre todos los objects de adelante hacia atrás, representando el object w / the current shadow-buffer aplicado y luego agregar el object al shadow buffer. Sin embargo, esto implicaría una gran cantidad de enlaces de textura / desvinculación (suponiendo que tenga cientos de objects), por lo que no estoy seguro de si es una buena solución.