Come creare una scia di plasma per l'astronave


13

Ho visto molti fantastici giochi spaziali che usano tutti effetti simili. Sono davvero interessato a scoprire come vengono generalmente fatti alcuni di questi effetti.

In particolare, voglio sapere come vengono realizzati alcuni dei sentieri dietro astronavi o missili senza utilizzare tutte le risorse disponibili.

Per esempi dell'effetto intendo vedere gli screenshot di Gimbal e persino il video sullo stesso link. Anche i percorsi missilistici in Ether Vapor .

Sono entrambe le stesse tecniche? Sono principalmente interessato al 2D, ma non riesco a immaginare che sarebbe troppo diverso.

Quindi, come potrei fare per creare questo tipo di effetto? Stiamo parlando di pixel-shader, metodi / filtri di fusione, effetti bitmap, sistemi di particelle o cosa? Non proprio specifico per la piattaforma. Sto solo cercando la teoria, ma esempi specifici o collegamenti sarebbero fantastici. E più dettagli meglio è.

Risposte:


7

Quindi, come potrei fare per creare questo tipo di effetto? Stiamo parlando di pixel-shader, metodi / filtri di fusione, effetti bitmap, sistemi di particelle o cosa? Non proprio specifico per la piattaforma. Sto solo cercando la teoria, ma esempi specifici o collegamenti sarebbero fantastici. E più dettagli meglio è.

Tutti i precedenti.

A meno che non ti sfili nel loro codice sorgente, potresti non sapere esattamente come lo hanno fatto.

Tuttavia, dall'aspetto dei due giochi, entrambi hanno quella che sembra essere la geometria che è connessa e segue la nave. Potrebbe non essere necessariamente un sistema di particelle di base sprite, ma non è neanche così difficile.

Alcuni giochi useranno un algoritmo a linea curva e genereranno un elenco di vertici da quello e faranno un po 'di texturing con diverse trame applicate ai due punti finali del percorso, in modo che ad un certo punto lo scarico appaia caldo e dall'altro sia più fresco e si allontana nello spazio.

La nave di un giocatore è un caso interessante perché i movimenti sono imprevedibili e potrebbe essere necessario aggiornare i punti di controllo dell'algoritmo della curva o finire per campionare l'ultima posizione della nave e generare posizioni di vertice basate su quella.

Dai un'occhiata a questa risposta da una domanda precedente se vuoi avere qualcosa che funzioni fuori dai punti di controllo. Tuttavia, per le tue esigenze, campionare la posizione dei giocatori funzionerebbe molto meglio e sarebbe più facile da capire.

Ecco qualcosa per farti pensare:

Inizia a campionare la posizione del giocatore. Questi punti formeranno i segmenti del corpo della tua traccia, da cui è possibile costruire la geometria. È una buona idea mantenere un segmento di coda separato che ha una trama separata. Potresti voler rilevare quando un giocatore sta girando e aumentare la frequenza di questi segmenti, altrimenti finirai con curve a blocchi. A meno che non sia l'effetto che stai cercando :)

In alcuni eventi, i segmenti devono smettere di generarsi e quelli esistenti dovrebbero iniziare lentamente a ridimensionarsi, a partire dal segmento del corpo più vicino alla coda (ma non alla coda stessa). Questo è nel caso in cui il giocatore rallenti. Ma se la velocità alla quale i segmenti vengono ridimensionati corrisponde alla velocità della nave del giocatore, allora un nuovo segmento verrà formato appena in tempo quando ne verrà eliminato uno. Quindi funziona anche bene per una nave in movimento. La lunghezza del percorso sarà sempre la stessa, il che fornisce un flusso fluido e coerente.

Il segmento di testa dovrebbe essere sempre nella posizione corrente del giocatore. Se vengono rilevate svolte, il segmento di testa esistente viene aggiunto a un segmento di corpo e viene avviato un nuovo segmento di testa. Ripetere. A seconda delle trame, anche ogni segmento può avere una lunghezza massima.

Questo ci dà un modo semplice per modellare questo effetto: lavorare sull'idea che l'effetto sarà sempre decrescente / restringente da solo a meno che non vengano forniti più segmenti, e giocare con velocità per evitare che si riduca.


4

Ci sono molte diverse possibilità per creare tali percorsi. Puoi usare linee semplici, poligoni, nuvole di punti, ecc.

Di solito sono tutti basati su uno di due concetti:

  • Traccia le posizioni precedenti e usale per disegnare la coda.
  • Traccia la velocità / direzione e regola la coda in base a quello.

Il primo è più adatto per cose come i missili, mentre il secondo approccio è migliore per qualche tipo di cose attaccate che seguono qualcosa (come la coda di un drago).

Una semplice implementazione per la coda del motore non è poi così complicata. Avrai solo bisogno di un buffer per memorizzare le posizioni precedenti. Non so quale lingua stai usando, ma per questo utilizzerei un buffer ad anello o un qualche tipo di buffer simile (eliminazioni rapide e inserimenti alle estremità).

Ad ogni X-esimo tick di frame / aggiornamento (non è necessario farlo cento volte al secondo), in pratica si elimina l'elemento più vecchio / ultimo nel buffer e si aggiunge la posizione corrente in primo piano (solo se il buffer è pieno; assicurati che contenga sempre n elementi, dove n determina la lunghezza della tua coda).

Quindi, durante il disegno, inizi dalla posizione corrente e traccia un insieme di linee attraverso tutti i punti del buffer, riducendo la tua opacità con ogni ulteriore vertice.

In questo modo dovresti finire con una coda bella e pulita. Sulla base della tua piattaforma, potresti estenderlo, ad esempio usando shader o avvolgendo una bella grafica della coda lungo quel percorso.

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.