Comment obtenir un bon effet de feu avec le mélange alpha et les particules?

41

Utilisation du paramètre suivant pour l'effet de particule OpenGL:

SRC: GL_SRC_ALPHA
DST: GL_ONE

Crée un mélange additif, qui a un aspect spectaculaire sur un fond noir mais qui est terrible pour des couleurs plus vives, car il commence à passer au blanc.

J'ai ensuite utilisé le mélange alpha:

SRC: GL_SRC_ALPHA
DST: GL_ONE_MINUS_SRC_ALPHA

Cela permet d'utiliser d'autres fonds sans affecter la couleur des particules, mais les particules elles-mêmes ont un aspect terne par rapport au mélange additif. Comment obtenir un bon effet de feu avec le mélange alpha et les particules?

Additif:

Additif sur le noir Additif sur bleu

Alpha:

Alpha sur noir Alpha sur bleu

MISE À JOUR:

Suivant les conseils de David ci-dessous, j'ai créé une texture séparée, puis utilisé un mélange additif sur l'effet de particules avant de dessiner sur la texture. Le problème avec cela est que le fait de dessiner sur une texture alpha = 0 a pour résultat que seules les parties colorées de la particule apparaissent devant ma carte du monde, car normalement, vous avez plutôt un fond noir. L'astuce consistait à utiliser deux textures. J'ai créé une texture noire et puis j'ai attiré les particules. Ensuite, j'ai retiré la couche alpha des particules de cette texture, en éliminant efficacement tout le noir environnant et en atténuant les particules partiellement visibles, tout en laissant le noir sous-jacent comme vous le souhaiteriez lorsque vous créez des particules de mélange additives sur un fond noir. En bref, un processus exténuant, mais j'y suis finalement arrivé:

Additif régulier et ma version

Voici le fil où j'ai posté mon processus: http://www.cocos2d-iphone.org/forum/topic/28707?replies=8#post-141528

Vidéo: http://www.youtube.com/watch?v=JptGbEO3b5E

Aram Kocharyan
la source

Réponses:

17

J'admets que je ne connais aucune solution idéale à ce problème, je vais donc décrire une solution de contournement avec laquelle vous pouvez être mal à l'aise:

  1. Effectuez le rendu de toutes les particules en utilisant un mélange additif en une texture distincte (ou une cible de rendu) avec un arrière-plan effacé en transparent .
  2. Effectuez le rendu de cette texture (ou cible de rendu) au- dessus de votre scène à l'aide de la fusion alpha .

Je l'ai essayé dans Photoshop et voici ce que j'ai obtenu - Ce n'est pas parfait, mais au moins, cela préserve mieux les couleurs d'origine:

entrez la description de l'image ici

Voici la texture originale sans mélange additif sur les particules:

entrez la description de l'image ici

David Gouveia
la source
Cela les séparerait-il en deux textures et serait-il comme si une texture du mélange additif était dessinée sur un arrière-plan?
Aram Kocharyan
@AramKocharyan En fait, je n'ai jamais essayé personnellement, à part Photoshop où les résultats semblaient raisonnables. Mais je pense que cela devrait ressembler à votre première image mais avec tous les noirs remplacés par votre couleur de fond. En d’autres termes, les particules s’additionnent, ce qui crée une forte surbrillance au milieu de l’explosion, mais pas avec l’arrière-plan. Ensuite, l’explosion qui en résulte est collée sur le fond sans ajouter d’affichage, ce qui préserve l’aspect original.
David Gouveia
Merci, cela a du sens, cela ressemble à un mélange normal dans Photoshop vs une superposition, mais cela ressemble à l'image d'une superposition reposant sur un calque d'arrière-plan. Je vais l'essayer et vous laisser savoir.
Aram Kocharyan
@AramKocharyan Je posterai les résultats obtenus dans photoshop dans quelques minutes afin que vous puissiez comparer.
David Gouveia
5
Il suffit de jeter ceci là-bas - cette technique pourrait soulever des problèmes de performances ...
mardi
9

Jetez un coup d'œil à l'alpha prémultiplié.

http://blogs.msdn.com/b/shawnhar/archive/2009/11/07/premultiplied-alpha-and-image-composition.aspx

Tili
la source
2
C'est la seule réponse correcte dans ce fil. Il est regrettable que cela soit si laconique, mais tout le monde devrait vraiment lire ceci. L'alpha prémultiplié est le moyen de combiner l'addition additive et l'alpha, mais il comporte également de nombreux autres avantages.
Jake McArthur
4

Comme l'a souligné David Gouveia, il n'y a pas de solution de remplacement satisfaisante aux mélanges d'additifs sur des arrière-plans clairs. Le meilleur effet que j'ai trouvé (qui n'exige pas de rendu similaire à celui d'un backbuffer) est d'utiliser le mode de fusion GL suivant:

SRC: GL_ONE
DST: GL_ONE_MINUS_SRC_ALPHA

Ce n'est pas aussi beau qu'un mélange additif, mais bien meilleur que GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA. Si vous ajustez un peu les valeurs de début et de fin de l'alpha et de la couleur, vous obtiendrez peut-être des résultats très proches du mélange additif.

modes de mélange de particules

Dans l'image ci-dessus, il y a GL_SRC_ALPHA, GL_ONEà gauche, au centre GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHAet à droite, vous pouvez voir le mode de fusion que je proposerais pour cette configuration.

bummzack
la source
Je conviens que pour un contrôle total sur la couleur, cette méthode fonctionne très bien.
Aram Kocharyan
Je dois juste noter que, avec cette méthode, le meilleur moyen d’atténuer l’incendie était de le réduire à une taille nulle, car la diminution de l’alpha le faisait passer au blanc.
Aram Kocharyan
3

Avez-vous essayé d'utiliser les deux? Couchez certaines particules avec le mélange alpha, qui devrait obtenir vos couleurs comme vous le souhaitez, puis revenez avec un mélange additif pour obtenir la mise en valeur que vous recherchez.

notlesh
la source
Cela pourrait être ma prochaine option, je veux garder les particules au minimum. J'espère que je peux la moitié des deux.
Aram Kocharyan le
3

Tout d’abord, les images de particules que vous utilisez semblent avoir un fond noir, ce qui donne des franges sombres à la seconde image. Ne fais pas ça c'est-à-dire, ne dessinez pas la forme de la particule sur les canaux de couleur. Au lieu de cela, l'image doit être solidement colorée et définir uniquement la forme dans le canal alpha.

Cela améliorera considérablement l’aspect de la transparence alpha. Vous pouvez ensuite améliorer l'aspect général de l'effet en faisant en sorte que les particules changent de couleur au cours de leur durée de vie. Comme, l'image de base est très lumineuse, vous donnant cette zone jaune vif centrale. Puis colorez les particules orange rougeâtre et augmentez la teinte avec le temps. De cette façon, les particules s’obscurciront à mesure qu’elles s’éloignent du centre.

jhocking
la source
Oui, la texture est seulement un pinceau de couleur blanche avec alpha variant du centre.
Aram Kocharyan le
hein, si c'est vrai, je trouve ça bizarre que votre capture d'écran en transparence alpha ait ces halos sombres autour des particules.
route le
Oui, je ne sais pas pourquoi ils se sont formés autour du mélange alpha. Mais pour ce que j'ai maintenant, ça semble aller.
Aram Kocharyan
Voir youtube.com/watch?v=JptGbEO3b5E
Aram Kocharyan le
Cela a l'air bien, vous devriez le mettre dans la mise à jour de votre question.
route le