Decalcomanie differite problema normale


11

Ho lavorato su un sistema di decalcomanie differito. Finora ho finito la parte di proiezione, il che significa che posso fare clic su qualcosa nella scena e proietterà correttamente una decalcomania sulla superficie dell'oggetto.

Ci sono un paio di altre cose che vorrei aggiungere a questo sistema: ritaglio normale e decalcomanie mappate normali. Il ritaglio normale avviene quando scarto frammenti che vengono allungati con un angolo acuto. Visto qui . Un modo per risolverlo è scartare frammenti che hanno una grande differenza tra il normale nel G-Buffer e il normale della decalcomania. Ciò richiederebbe la lettura della trama normale del G-buffer.

Per eseguire la mappatura normale della decalcomania, devo fondere la normale della decalcomania (da una mappa normale) con la normale del buffer G. È necessario scrivere sulla trama normale del buffer G.

Spero sia chiaro che per supportare queste due funzionalità, ho bisogno di leggere e scrivere sulla trama normale nello stesso passaggio shader. Purtroppo, si tratta di un comportamento indefinito, quindi mi chiedo se ci sia un altro modo per implementare queste funzionalità.

Risposte:


1

Quale sistema di rendering usi? Le seguenti informazioni dovrebbero essere valide per tutti i sistemi di rendering, ma nelle versioni OpenGL DX11 o successive potrebbe esserci una soluzione migliore utilizzando gli UAV.

-

Dovrai copiare il buffer normale prima di ogni passaggio. Finché sai che le decalcomanie non modificano gli stessi frammenti dello spazio dello schermo, non è necessario aggiornare la copia.

È inoltre possibile eseguire il rendering di tutte le decalcomanie in buffer separati e eseguire solo un passaggio di fusione nel buffer normale utilizzando una singola copia del buffer normale. Questo ridimensionerebbe molto meglio con la quantità di decalcomanie che hai.

Finché non si scrive il buffer normale, ad es. Si esegue solo il clipping normale, come lo si chiama, è possibile semplicemente campionare il buffer normale originale ma non è possibile associarlo come destinazione di rendering.

In DX9 ho scoperto che la lettura e la scrittura sulla stessa trama generano l'output atteso purché utilizzi solo il filtro punto più vicino e non leggi mai un pixel diverso da quello su cui stai attualmente scrivendo, MA! poiché si tratta di un comportamento indefinito, potrebbero esserci driver e schede grafiche che non si comportano in questo modo. DX10 ti impedirà di farlo separando le trame attualmente associate come target di rendering.

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.