¿Cómo puedo lograr un buen efecto de fuego con la mezcla alfa y las partículas?

41

Usando la siguiente configuración para el efecto de partículas OpenGL:

SRC: GL_SRC_ALPHA
DST: GL_ONE

Crea una mezcla aditiva, que se ve espectacular en un fondo negro pero terrible en colores más brillantes, ya que comienza a desvanecerse en blanco.

Luego usé la mezcla alfa:

SRC: GL_SRC_ALPHA
DST: GL_ONE_MINUS_SRC_ALPHA

Esto permite que se utilicen otros fondos sin afectar el color de las partículas, pero las partículas en sí mismas se ven opacas en comparación con la mezcla de aditivos. ¿Cómo puedo lograr un buen efecto de fuego con la mezcla alfa y las partículas?

Aditivo:

Aditivo en negro Aditivo en azul

Alfa:

Alfa en negro Alfa en azul

ACTUALIZAR:

Siguiendo los consejos de David a continuación, creé una textura separada y luego usé una mezcla aditiva en el efecto de partículas antes de dibujar sobre la textura. El problema con eso es que dibujar en una textura alfa = 0 resultó en que solo las partes coloreadas de la partícula aparecieran frente a mi mapa mundial, ya que normalmente tienes un fondo negro. El truco consistía en usar dos texturas. Creé una textura negra y luego dibujé las partículas sobre ella. Luego eliminé la capa alfa de las partículas de esta textura, eliminando efectivamente todo el negro sólido circundante y desvaneciendo las partículas parcialmente visibles, mientras dejaba el negro subyacente como era de esperar al hacer partículas de mezcla aditiva sobre un fondo negro. En resumen, un proceso agotador, pero finalmente llegué allí:

Aditivo regular y mi versión

Aquí está el hilo donde publiqué mi proceso: http://www.cocos2d-iphone.org/forum/topic/28707?replies=8#post-141528

Video: http://www.youtube.com/watch?v=JptGbEO3b5E

Aram Kocharyan
fuente

Respuestas:

17

Admito que no conozco ninguna solución ideal para este problema, por lo que describiré una solución alternativa con la que puede sentirse cómodo o no:

  1. Renderice todas las partículas mediante la combinación de aditivos para obtener una textura separada (u objetivo de renderizado) con su fondo despejado a transparente .
  2. Renderiza esa textura (u objetivo de renderizado) en la parte superior de tu escena usando la mezcla alfa .

Lo probé en Photoshop y esto es lo que obtuve: no es perfecto, pero al menos conserva mejor los colores originales:

ingrese la descripción de la imagen aquí

Aquí está la textura original sin hacer una mezcla aditiva en las partículas:

ingrese la descripción de la imagen aquí

David Gouveia
fuente
¿Los separaría en dos texturas y sería como si tuviera una textura de la mezcla de aditivos dibujada sobre un fondo?
Aram Kocharyan
@AramKocharyan En realidad, no lo he probado personalmente más que en Photoshop, donde los resultados parecían razonables. Pero creo que debería verse como su primera imagen, pero con todos los negros reemplazados por su color de fondo. En otras palabras, las partículas se agregan juntas dando como resultado un gran resaltado en el medio de la explosión, pero no con el fondo. Luego, la explosión resultante se pega sobre el fondo sin agregar, lo que conserva el aspecto original.
David Gouveia
Gracias, eso tiene sentido, es como una mezcla normal en Photoshop frente a una superposición, pero parece una imagen de una superposición sobre una capa de fondo. Lo intentaré y te lo haré saber.
Aram Kocharyan
@AramKocharyan Publicaré los resultados que obtuve en Photoshop en unos minutos para que pueda comparar.
David Gouveia
55
Simplemente tirar esto hacia fuera allí - esta técnica podría plantear problemas de rendimiento ...
notlesh
4

Como señaló David Gouveia, no hay un reemplazo satisfactorio para la mezcla de aditivos en fondos brillantes. El mejor efecto que encontré (que no requiere algo como renderizar en un backbuffer) es usar el siguiente modo de mezcla GL:

SRC: GL_ONE
DST: GL_ONE_MINUS_SRC_ALPHA

No es tan bueno como la mezcla de aditivos, pero mucho mejor que GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA. Si modifica un poco los valores iniciales y finales de alfa y color, puede obtener resultados muy cercanos a la combinación de aditivos.

modos de mezcla de partículas

En la imagen de arriba hay GL_SRC_ALPHA, GL_ONEa la izquierda, en el medio hay GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHAy a la derecha puedes ver el modo de fusión que propondría para esta configuración.

bummzack
fuente
Estoy de acuerdo en que para un control total sobre el color, este método funciona muy bien.
Aram Kocharyan
Solo para tener en cuenta, noté que con este método, la mejor manera de desvanecer el fuego era reducirlo a cero, ya que la disminución de alfa hace que se desvanezca en blanco.
Aram Kocharyan
3

¿Has intentado usar ambos? Capa en algunas partículas con mezcla alfa, que debería obtener sus colores de la manera que desee, luego regrese con una mezcla aditiva para obtener el bonito resaltado que está buscando.

notlesh
fuente
Esa podría ser mi próxima opción, aunque quiero mantener las partículas al mínimo. Espero poder la mitad de ambos.
Aram Kocharyan
3

En primer lugar, las imágenes de partículas que está utilizando parecen tener un fondo negro, lo que da como resultado franjas oscuras en esa segunda imagen. No hagas eso; es decir, no dibuje la forma de la partícula en los canales de color. En cambio, la imagen debe tener un color sólido y solo definir la forma en el canal alfa.

Hacer eso mejorará considerablemente el aspecto de la transparencia alfa. Luego, puede mejorar aún más el aspecto del efecto general haciendo que las partículas cambien de color a lo largo de su vida útil. Al igual, la imagen base es muy brillante, dándote esa área central de color amarillo brillante. Luego tiñe las partículas de naranja rojizo y aumenta el tono con el tiempo. De esa manera, las partículas se oscurecerán a medida que se muevan desde el centro.

jhocking
fuente
Sí, la textura es solo un pincel de color blanco con alfa que varía desde el centro.
Aram Kocharyan
eh, si eso es cierto, entonces es extraño para mí que tu captura de pantalla de transparencia alfa tenga esos halos oscuros alrededor de las partículas.
jhocking
Sí, no estoy seguro de por qué se formaron alrededor de la mezcla alfa. Pero por lo que tengo ahora, parece estar bien.
Aram Kocharyan
Ver youtube.com/watch?v=JptGbEO3b5E
Aram Kocharyan
Eso se ve bastante bien, deberías poner eso en la actualización de tu pregunta.
jhocking