Come posso ottenere un buon effetto fuoco con miscelazione alfa e particelle?


41

Usando la seguente impostazione per l'effetto particella OpenGL:

SRC: GL_SRC_ALPHA
DST: GL_ONE

Crea una miscela additiva, che appare spettacolare su uno sfondo nero ma terribile sui colori più luminosi, poiché inizia a sbiadire al bianco.

Ho quindi usato la fusione alfa:

SRC: GL_SRC_ALPHA
DST: GL_ONE_MINUS_SRC_ALPHA

Ciò consente di utilizzare altri sfondi senza influire sul colore delle particelle, ma le particelle stesse appaiono opache rispetto alla miscela di additivi. Come posso ottenere un buon effetto fuoco con miscelazione alfa e particelle?

Additivo:

Additivo sul nero Additivo sull'azzurro

Alfa:

Alpha su nero Alpha su blu

AGGIORNARE:

Seguendo i consigli di David di seguito, ho creato una trama separata e poi ho usato la fusione additiva sull'effetto particella prima di disegnare sulla trama. Il problema è che disegnare su una trama alfa = 0 ha provocato l'apparizione delle sole parti colorate della particella di fronte alla mia mappa del mondo, dato che normalmente hai uno sfondo nero. Il trucco era usare due trame. Ho creato una trama nera e quindi ho disegnato le particelle su di essa. Quindi ho rimosso lo strato alfa delle particelle da questa trama, rimuovendo efficacemente tutto il nero solido circostante e sfumando le particelle parzialmente visibili, lasciando il nero sottostante come ci si aspetterebbe quando si creano particelle di fusione additiva su uno sfondo nero. In breve, un processo estenuante, ma alla fine ci sono arrivato:

Additivo regolare e la mia versione

Ecco il thread in cui ho pubblicato il mio processo: http://www.cocos2d-iphone.org/forum/topic/28707?replies=8#post-141528

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

Risposte:


17

Ammetto di non essere a conoscenza di alcuna soluzione ideale a questo problema, quindi descriverò una soluzione alternativa che potresti avere o meno a tuo agio con:

  1. Rendi tutte le particelle usando la fusione additiva su una trama separata (o renderizza il bersaglio) con lo sfondo cancellato in trasparente .
  2. Rendi quella trama (o renderizza il bersaglio) sopra la scena usando la fusione alfa .

L'ho provato in Photoshop ed ecco cosa ho ottenuto: non è perfetto, ma almeno conserva meglio i colori originali:

inserisci qui la descrizione dell'immagine

Ecco la trama originale senza eseguire la miscelazione additiva sulle particelle:

inserisci qui la descrizione dell'immagine


Questo li separerebbe in due trame e sarebbe come se avessi una trama della miscela additiva disegnata su uno sfondo?
Aram Kocharyan il

@AramKocharyan In realtà non l'ho provato personalmente se non in Photoshop dove i risultati sembravano ragionevoli. Ma penso che dovrebbe apparire come la tua prima immagine ma con tutti i neri sostituiti dal colore di sfondo. In altre parole, le particelle vengono sommate insieme dando luogo al grande punto culminante nel mezzo dell'esplosione, ma non con lo sfondo. Quindi l'esplosione risultante viene incollata sopra lo sfondo senza aggiungere che preserva l'aspetto originale.
David Gouveia,

Grazie ha senso, è proprio come una normale fusione in Photoshop vs una sovrapposizione, ma appare come l'immagine di una sovrapposizione che si trova su un livello di sfondo. Ci proverò e ti farò sapere.
Aram Kocharyan il

@AramKocharyan Pubblicherò i risultati che ho ottenuto in Photoshop tra pochi minuti in modo da poterlo confrontare.
David Gouveia,

5
Basta lanciarlo là fuori - questa tecnica potrebbe sollevare problemi di prestazioni ...
notlesh


4

Come ha sottolineato David Gouveia, non esiste un sostituto soddisfacente per la miscelazione additiva su sfondi luminosi. L'effetto migliore che ho trovato (che non richiede qualcosa di simile al rendering su un backbuffer) è utilizzare la seguente modalità di fusione GL:

SRC: GL_ONE
DST: GL_ONE_MINUS_SRC_ALPHA

Non è bello come la miscelazione additiva, ma molto meglio di GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA. Se modifichi un po 'i valori di inizio e fine dell'alfa e del colore, potresti ottenere risultati molto simili alla miscelazione additiva.

modalità di fusione delle particelle

Nell'immagine sopra c'è GL_SRC_ALPHA, GL_ONEa sinistra, al centro c'è GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHAea destra puoi vedere la modalità di fusione che proporrei per questa configurazione.


Concordo sul fatto che per un controllo totale sul colore, questo metodo funziona alla grande.
Aram Kocharyan,

Solo per notare, ho notato che con questo metodo il modo migliore per spegnere il fuoco era di ridurlo a zero, poiché la riduzione dell'alfa fa sbiadire il bianco.
Aram Kocharyan il

3

Hai provato a usare entrambi? Metti a strati alcune particelle con la fusione alfa, che dovrebbe portare i tuoi colori nel modo che preferisci, quindi ritorna con un po 'di miscela additiva per ottenere il bel punto luce che stai cercando.


Questa potrebbe essere la mia prossima opzione, voglio comunque ridurre al minimo le particelle. Spero di riuscire a metà di entrambi.
Aram Kocharyan,

3

Prima di tutto, le immagini di particelle che stai usando sembrano avere uno sfondo nero, con conseguente frange scure in quella seconda immagine. Non farlo; cioè, non disegnare la forma della particella sui canali di colore. Invece, l'immagine dovrebbe essere colorata in modo solido e definire solo la forma nel canale alfa.

Ciò migliorerà notevolmente l'aspetto della trasparenza alfa. Quindi puoi migliorare ulteriormente l'aspetto dell'effetto complessivo facendo cambiare colore alle particelle nel corso della loro vita. Ad esempio, l'immagine di base è molto luminosa, dandoti quella zona giallo brillante centrale. Quindi tingi le particelle di colore rosso-arancio e aumenta la tinta nel tempo. In questo modo le particelle si scuriranno man mano che si allontanano dal centro.


Sì, la trama è solo un pennello di colore bianco con alfa che varia dal centro.
Aram Kocharyan,

eh, se questo è vero, è strano per me che il tuo screenshot di trasparenza alfa abbia quegli aloni scuri attorno alle particelle.
scherzando il

Sì, non sono sicuro del motivo per cui si sono formati attorno alla fusione alfa. Ma per quello che ho ora, sembra che vada bene.
Aram Kocharyan,


Sembra piuttosto buono, dovresti inserirlo nell'aggiornamento della domanda.
jhocking
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.