Come posso replicare l'effetto ordito da Geometry Wars?


12

Sto cercando di ottenere l'effetto di curvatura che vedi in giochi come Geometry Wars .

Schermata di Geometry Wars incluso l'effetto di curvatura

Qualcuno può aiutare a spiegare cosa sta succedendo qui? Sento che l'asse z della griglia è manipolato in qualche modo, in qualche modo, dal programmatore, ma c'è forse qualche equazione matematica nota per ottenere davvero l'effetto di deformazione corretto?

Modifica: per essere più specifico, intendo la deformazione della griglia. Come tutto sembra tirato verso l'asse z negativo e poi rimbalza.


1
Ti riferisci allo sfondo che si piega? Essendo Geometry Wars , c'è molto caos nello screenshot, che mi ha fatto grattare la testa per un po 'per provare a dire a cosa ti riferivi.
Grace Note

Sì, lo sfondo si piega.
Joey Green,

Risposte:


12

Un'implementazione di 10 minuti di un semplice sistema a molla (o almeno così dice sul suo blog ;)). Il sistema può gestire più orditi e altre cose che distorcono la griglia.

Aggiornato per aggiungere alcuni dettagli di aggiunta minori:

Alcuni altri dettagli. Da un'intervista che un tempo era ospitata sul sito Web di Bizarre Creations (quel sito è ora scomparso a causa della chiusura della società) c'è stata una domanda:

D: Una delle nuove caratteristiche grafiche più sorprendenti del gioco è l'area di gioco "griglia a gravità". Come hai fatto a renderlo così bello; ogni oggetto nel gioco ha davvero la sua gravità? La griglia stessa è composta da 60.000 punti, ognuno dei quali esercita una piccola quantità di forza sul suo vicino. La simulazione stessa si trova al limite della stabilità, che è ciò che la fa oscillare così tanto quando uno degli oggetti di gioco gli dà una piccola spinta! Solo alcuni tipi di oggetti influiscono sulla griglia. Poiché il sistema a griglia è piuttosto costoso da calcolare, in realtà funziona sul secondo core insieme al sistema audio (il primo core è dedicato al gameplay e alle particelle, il terzo viene utilizzato per il rendering dell'audio).


1

Non so se esiste un modo "corretto" per farlo, ma è probabilmente solo una trasformazione lineare esteticamente piacevole applicata con una riduzione calcolata dalla distanza a un punto.

Quindi per qualsiasi elemento con cui stai lavorando, dovresti:

  • trova la distanza dal centro dell'ordito (d)
  • calcola 1 - d / la distanza massima dell'effetto desiderato (i per intensità)
  • bloccalo su [0-1]
  • trasforma l'elemento con lerp (identità, trasforma, i)

Iirc, le guerre di Geometria hanno applicato questo come un ordito distorto ad alcuni elementi, mentre altri elementi come le particelle sono stati semplicemente influenzati dalla "forza", senza essere distorti. È possibile applicare la distorsione in uno shader di vertice, supponendo di avere abbastanza vertici per campionare uniformemente l'effetto. In alternativa, è possibile eseguire prima il rendering di tutto ciò che deve influire su un buffer fuori schermo, quindi eseguire il rendering dei risultati su un quad a mosaico a cui applicare la distorsione, prima di aggiungere tutti gli elementi non distorti nella parte superiore.

Per quanto riguarda la trasformazione, il ridimensionamento ti darà l'aspetto di succhiare. Se ricordo bene, c'erano anche delle torsioni in corso, che sarebbero state solo una piccola rotazione.

Puoi ottenere più elaborato e più elaborato con i tuoi calcoli del fattore di intensità per ottenere effetti dall'aspetto più strano. Ad esempio, potresti calcolare l'angolo (a) in cui un elemento è relativo al centro e il fattore in esso. Prendi cos (a) e puoi creare onde radiali nell'effetto. Quello che vuoi fare è impostare te stesso con il codice di impalcatura necessario e poi andare in città sperimentando diverse combinazioni di fattori.


Fantastico grazie lo proverò. L'algoritmo che descrivi è fondamentalmente un effetto a molla?
Joey Green,

No, non ho descritto come sarebbe variata nel tempo, quindi non una primavera. Ho appena descritto come ottenere la forma di distorsione che stai cercando. Animarlo in stile GW richiederebbe di aggiungere un altro fattore lassù, modulando i nel tempo. Prova ad implementare il tutto e ti dovrebbe essere chiaro che puoi ridimensionare per rilassare o intensificare il tuo effetto. Passa un'onda sinusoidale attraverso quel valore modulante o rimbalza come una molla 1D e rimbalzerai efficacemente tutto. Ancora una volta, una volta che hai un cablaggio con un mucchio di variabili che fluttuano intorno, la sperimentazione sarà tua amica.
Chris Subagio,
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.