Estoy buscando crear un efecto de "foco" 2D que permita un foco en múltiples entidades. Es decir, como si varios sprites estuvieran sosteniendo antorchas. Para una sola entidad (un foco), uso una técnica en la que superpongo un sprite degradado y hago que el punto central persiga a esa entidad. Esta técnica funciona bien para un solo foco de atención. Aquí hay una captura de pantalla para ilustrar de lo que estoy hablando:
Foco único: funciona
El problema con el que me encuentro es que esta técnica no se extiende a múltiples entidades. Si superpongo otra imagen destacada, me encuentro con varios problemas. Aquí hay una captura de pantalla simulada:
Múltiples focos = problemas
El problema más obvio son las esquinas visibles. Esto podría resolverse haciendo que la imagen destacada sea gigantesca para cubrir todo el nivel, pero eso no se siente bien. El segundo problema más difícil de resolver es que estoy multiplicando efectivamente la oscuridad con esta técnica. Entonces cada sprite agregado tiene el efecto de oscurecer a todos los demás. Claramente estoy abordando este problema incorrectamente.
¿Algunas ideas?
Esfuerzos continuos
Ha habido una discusión sobre las opciones de mezcla en los comentarios. Aquí está mi pensamiento actual. En mi ejemplo de foco único anterior, uso un archivo de imagen que se parece a esto: (he reemplazado la transparencia con el color verde para que sea más fácil de ilustrar)
Como se discutió anteriormente, el problema es que la combinación alfa de esta imagen con otra imagen no va a producir el efecto deseado. En cambio, producirá esto:
Eso no me parece un problema de opciones de mezcla. Me parece que el problema es que ese tipo de imagen tiene incorporada la máscara de transparencia y la imagen (un cuadrado negro), cuando deberían separarse.
Entonces, en lugar de una imagen en negro con una transparencia recortada incorporada, debería usar máscaras de transparencia que se utilizan en tiempo de ejecución contra el cuadrado negro. Al hacerlo, todavía no puedo usar una máscara de transparencia blanca y negra tradicional o se encontrará con el mismo problema. Aquí hay un ejemplo, esta vez el blanco y el negro representan el blanco y el negro:
Parece que la solución sería aplicar una máscara de transparencia que en sí misma utilice la transparencia. Algo como esto: (verde = transparente)
De esa manera, se podrían mezclar varias máscaras de transparencia alfa y ENTONCES usarlas como una máscara de transparencia contra el cuadrado negro. Aquí hay un ejemplo de dos de las máscaras de transparencia alfa combinadas:
De todos modos, ese es el enfoque en el que estoy trabajando para implementar. Publicaré resultados si esto funciona. Lo que no sé (en este momento) es si puedo usar una máscara de transparencia que tenga transparencia.
Respuestas:
Conceptualmente, la solución a múltiples focos consiste en:
El truco es comprender que la combinación alfa puede hacer uno o más de estos pasos. La combinación alfa se refiere al uso de un mapa / imagen alfa para modificar los píxeles de una imagen o textura de una manera simple. Por lo general, también significa que será un conjunto rápido de funciones, o implementado con comandos especiales de hardware, para hacerlo más rápido. Puede hacerlo con matrices regulares y comandos de lenguaje normal, pero usar las funciones especiales de biblioteca alfa / blending es probablemente mejor. ... Y no tendrá errores. A veces esto significa hacer que los píxeles sean parcialmente transparentes, pero para su caso, esto significará:
Comenzaría a buscar la documentación de sus funciones de mezcla alfa para ver qué funcionalidad proporcionan para combinar píxeles de varios tipos. Sospecho que tendrán funciones para cada uno de los pasos que deberá realizar, pero pueden estar bajo nombres que no son obvios.
fuente