È possibile mescolare alfa più target di rendering usando un alfa specificato?


9

Supponiamo che io abbia i target di rendering da 0 a N e RT 0 sembra avere nel suo quarto componente un canale alfa specificato da un materiale o una maschera o qualcosa del genere.

È possibile avere i target di rendering della fusione del compositore hardware da 1 a N utilizzando l'alfa del primo target di rendering?

Risposte:


5

Per quanto ne so, in DX o GL non c'è modo di riutilizzare l'alfa di RT 0 per tutte le operazioni di fusione. Sfortunatamente, non sembra essere qualcosa che è supportato dall'hardware.

È possibile configurare diverse modalità di fusione per ciascun obiettivo di rendering o abilitare la fusione per alcuni e disabilitare per altri; tuttavia, se la fusione è abilitata per una destinazione di rendering, utilizza sempre la propria alfa.

Esiste anche una modalità chiamata "fusione a doppia sorgente" (consultare il documento DX11 e il documento OGL ), che consente di specificare l'alfa per la fusione con un output completamente separato dal pixel shader, non dal canale alfa del target di rendering. Tuttavia, questa modalità funziona solo con una destinazione di rendering sull'hardware corrente.

Per quanto ne so, le uniche opzioni per fondere più target di rendering con la stessa alfa sono:

  • Stampa la stessa alfa su tutti i target di rendering (sacrificando la possibilità di memorizzare altri valori nel canale alfa come faresti con l'ombreggiatura differita, ad esempio).
  • Ripeti il ​​rendering in un passaggio separato per ogni destinazione di rendering, utilizzando la fusione a doppia origine.
  • Usa UAV / load-store di immagini per eseguire la fusione nel pixel shader (funziona solo se la geometria non si sovrappone nello spazio dello schermo, perché non c'è protezione contro le condizioni di gara; probabilmente anche un po 'lenta).
  • Sull'hardware che lo supporta, DX11.3 / DX12 Rasterizer-Order Views , NV_fragment_shader_interlock o INTEL_fragment_shader_ordering (quest'ultimo esposto anche dalle GPU AMD). Questi sono tre nomi per la stessa cosa: sostanzialmente una "sezione critica" nel pixel shader che ti permette di leggere-modificare-scrivere una trama atomicamente rispetto ad altre invocazioni di pixel shader. Sostanzialmente abilita la fusione arbitraria programmabile, ma è probabilmente abbastanza lenta e disponibile solo su hardware recente.

Sì, penso che anche questa sia stata la mia conclusione. Sai con disinvoltura se questo è il caso di DX12 o (il non rilasciato) Vulkan? Ha applicazioni piuttosto grandi per il rendering differito, come hai già detto e nessuna delle alternative esistenti sembra soddisfacente al momento.
Jeremyong,

@jeremyong Siamo spiacenti, non credo ci siano cambiamenti nelle operazioni di fusione in DX12. Non sono sicuro di Vulkan, ma sarei sorpreso; l'hardware di fusione non è cambiato. FWIW, nei giochi a cui ho lavorato abbiamo fatto una variante del proiettile n. 3 per le decalcomanie differite e abbiamo preelaborato la geometria per separarla in gruppi non sovrapposti.
Nathan Reed,

Grazie per la raccomandazione. Le decalcomanie differite sono esattamente ciò che sto implementando
jeremyong il
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.