Domanda

Sto pensando di serraggio motion blur nel mio programma 2D, ma dubito che i risultati del mio algoritmo corrente.

Il mio approccio si presenta così in questo momento:

  • Draw a backbuffer.
  • Quando il momento di aggiornare front buffer, fondere il backbuffer sul front buffer.
  • Ripeti

Che cosa potrebbe causare l'effetto "motion blur" è ovviamente la fusione, come oggetti in movimento lasceranno una traccia dissolvenza.

Questo è chiaramente non molto esigente sull'hardware, il doppio buffering sarà fatto comunque e l'unico passaggio aggiuntivo è l'alpha blending, che è un semplice calcolo. Tuttavia, i sentieri saranno molto forte, e non sfocate a tutti che possono sguardi un po 'strano. Ho potuto fare una casella di sfocatura sul back buffer prima della fase di miscelazione, ma ci si sente come potrebbe essere molto tassazione sui sistemi di fascia bassa come il Nintendo DS.

Ci sono soluzioni che lascia fare a me in modo più efficiente o dare un risultato più bello?

È stato utile?

Soluzione

In realtà si dovrebbe rendere molti fotogrammi intermedi e si fondono in un unico risultato. Dire, per esempio, che il frame rate di uscita è 50 fps. Probabilmente si otterrebbe un risultato ragionevole, se hai reso internamente a 500 fps e gruppi misti di dieci fotogrammi insieme prima di mostrare che per l'utente.

L'approccio che si sta utilizzando in questo momento simula la persistenza, come se si stesse eseguendo il rendering su un vecchio CRT con lenta fosforo. Questo non è proprio la stessa cosa di motion blur. Se la durata della trama è 20 ms (1000-1050), allora un telaio moto offuscata consiste di rendering che misurano la durata 20ms telaio, tutti con lo stesso coefficiente alfa. La soluzione persistenza consiste di rendering da 20, 40, 60, 80, 100 ms fa, gradualmente dissolvenza.

Altri suggerimenti

Non c'è nessun vero modo per farlo in modo più efficiente a mia conoscenza. Questo è quanto di più efficiente, come si arriva. Sembra piuttosto bene se il frame rate è buono e il movimento non è troppo forte pure.

Il piano più bello sarebbe quello di, per ogni pixel, tracciare una linea semi-trasparente dalla nuova posizione alla vecchia posizione. Questo non è un calcolo banale, però.

Potrebbe non essere molto forte a tutti. Tutto dipende dalla funzione di fusione usato. Per esempio 0.1 / 0.9 per un'immagine precedente / corrente rispettivamente fornirà qualche debole traccia.

aggiungere che questo è essenzialmente come si fa movimento sfocatura OpenGL (attraverso buffer di accumulo)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top