Perché alcuni giochi utilizzano un modello di dithering anziché l'alfa tradizionale per la trasparenza?


24

Di recente, ho visto alcuni giochi 3D (ad esempio :)GTA IV utilizzare un tipo di dithering ordinato per simulare trasparenza / alfa.

I poligoni non sono trasparenti come al solito, ma rendono invece una trama dithering che passa gradualmente da sinistra a destra per simulare la trasparenza:

inserisci qui la descrizione dell'immagine

L'effetto non è spiacevole ma piuttosto sorprendente da vedere all'inizio (rispetto alla tradizionale fusione alfa)

A parte l'effetto estetico visivo che produce, c'è qualche motivo per cui alcuni giochi lo fanno (prestazioni migliori, risparmio di larghezza di banda o qualsiasi altra cosa a cui non penso)?

Ho cercato sul web ma non riesco a trovare nulla su questa tecnica.


Probabilmente è appena arrivato con lo stile pixel art.
MichaelHouse

@ Byte56 Pixel art style? GTA IV? Eh?
Nathan Reed,

@NathanReed Heh, non in GTA IV. OP menziona vederlo di recente nei giochi.
MichaelHouse

1
Trovo la tecnica più piacevole della fusione alfa quando si sbiadiscono oggetti 3D che si avvicinano troppo al piano vicino.
Andreas,

Risposte:


27

Questo è un approccio abbastanza comune alla trasparenza nei giochi che usano l'ombreggiatura differita. La trasparenza adeguata non funziona affatto con l'ombreggiatura differita, poiché solo i dati di una superficie (profondità, vettore normale, colore, ecc.) Possono essere archiviati in ciascun pixel e la trasparenza corretta comporta la sovrapposizione di più superfici in un pixel, ognuna delle quali richiede un'indipendenza illuminazione.

Ci sono alcuni modi in cui i motori di gioco possono gestire questo:

  • Utilizzare l'ombreggiatura in avanti (possibilmente con un modello di illuminazione ridotta) per le superfici trasparenti e l'ombra differita per le superfici opache. Le superfici trasparenti devono essere disegnate in un passaggio separato con ordinamento fronte-retro.
  • Usa il dithering, più comunemente noto come trasparenza punteggiata o sullo schermo, che funziona con l'ombreggiatura differita poiché fornisce solo una superficie per pixel. Questo funziona particolarmente bene per le transizioni LOD, poiché di solito finiscono in un periodo di tempo fisso, limitando il tempo in cui è visibile la punteggiatura. Non funziona molto bene per, diciamo, finestre di vetro su un edificio.
  • È anche possibile utilizzare la punteggiatura ma quindi applicare una sfocatura post-processo che ricombina i pixel punteggiati, fornendo un'approssimazione della trasparenza adeguata. Volition fa questo in Saints Row the Third (e forse anche alcuni dei loro altri giochi), sotto il nome di " illuminazione inferita ". Può sembrare abbastanza bello, ma la sfocatura post-process è costosa.
  • E, naturalmente, ci sono tutti i metodi di trasparenza indipendenti dall'ordine , anche se non conosco nessun gioco che li usi. Finora sono solo per dimostrazioni tecnologiche.

Si può anche usare una combinazione di questi approcci, ad esempio ombreggiatura in avanti per finestre di vetro e punteggiatura per le transizioni LOD.

Vale anche la pena notare che alcuni giochi usano la punteggiatura per le ombre morbide. Questo è un compromesso prestazionale; le ombre più belle richiedono più campioni di trama nel pixel shader, che richiede più tempo, ma è possibile ottenere risultati soddisfacenti utilizzando meno campioni e spostando le loro posizioni in modo casuale. L'offset casuale produce l'effetto di punteggiatura.


non sapevo della tecnica di ombreggiatura differita (spiegata qui: en.wikipedia.org/wiki/Deferred_shading ). Parlano anche di possibili problemi alfa. Ha senso adesso. Grazie per la risposta
tigrou,

0

È un semplice compromesso prestazionale. La miscelazione alfa richiede la lettura dall'attuale buffer di colore, mentre questo tipo di dithering è di sola scrittura (o solo di scarto, ovviamente).

È possibile mescolare questa tecnica con il multicampionamento, che viene quindi chiamato alfa per copertura .


Di che tipo di "compromesso delle prestazioni" stai parlando? Early-Z viene disattivato se si utilizza uno scarto nello shader. La fusione avviene sull'hardware ed è veloce.
Tara,

In realtà l'ho appena testato nel mio motore su una scena adeguata ad alta risoluzione: abilitando vs disabilitando la miscelazione per TUTTA la geometria non ha prodotto alcuna differenza di prestazioni. La risposta di Nathan Reed è corretta, poiché il dithering viene solitamente utilizzato nel rendering differito.
Tara,
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.