In cosa differiscono texelFetch e texture di OpenGL?


18

Comprendo le principali differenze tra texelFetche texture, ma ho alcune domande sui dettagli:

  • Non texelFetchcomporta una penalizzazione delle prestazioni? Come non usare una cache o simili?
  • Sono texelFetche textureintercambiabili durante l'utilizzo GL_NEAREST?

1
Potresti scrivere un caso di prova e vedere ...
ThorinII,

1
Hai dimenticato di contrassegnare una risposta come accettata o è ancora un problema aperto?
Anko,

Risposte:


23

texelFetchè abbastanza diverso da texture.

textureè la solita funzione di accesso alla trama che gestisce il filtro e le [0,1]coordinate della trama normalizzate ( ). texelFetchaccede direttamente a un texel nella trama (nessun filtro) utilizzando coordinate non normalizzate (ad es. (64,64)nel texel medio-ish in una trama 128x128 rispetto (.5,.5)a coordinate normalizzate).


4
+1 Vorrei aggiungere che texelFetch è pensato per l'accesso ai dati quando la trama non è particolarmente pensata per essere visualizzata come immagine, ma un altro tipo di dati, a differenza della trama che accede ai texel quando devono essere usati come immagini, ecco perché usa il filtro ecc. -
concept3d

C'è una differenza nelle prestazioni?
Lenar Hoyt,

1
@mcb: forse, ma non mi aspetto che sia molto grande, e probabilmente varierà molto dal fornitore dell'hardware. Le prestazioni sono la metrica assolutamente errata da utilizzare quando si decide quale di queste funzioni richiamare: utilizzare quella corretta per la propria situazione (è necessario il filtro dell'hardware e quindi è necessario utilizzare textureo è necessario l'hardware per non eseguire il filtro e quindi è necessario utilizzare texelFetch).
Sean Middleditch,

3
@SeanMiddleditch In che modo le prestazioni sono la metrica sbagliata in questo caso? Se texelFetchè più veloce e il filtro del vicino più vicino è sufficiente, non è possibile modificare il contesto in filtro NN per qualsiasi motivo, sarebbe ragionevole preferirlo texture.
Lenar Hoyt,

@mcb: texelFetche texturefunziona diversamente in modi fondamentali. Vedi anche gli input: coordinate di trama vs coordinate normalizzate. Servono a scopi diversi. L'uno non è solo un'ottimizzazione dell'altro.
Sean Middleditch,

6

Dato che non c'è una risposta accettata, aggiungo alcune informazioni, volevo solo aggiungere cose non già dette da Sean nella sua risposta.

TexelFetch tratta la trama come un'immagine, in modo da poter accedere esattamente al contenuto dei pixel. Di solito lo fai quando hai bisogno esattamente di quel contenuto, che è in poche ma utili occasioni:

  • Alcuni filtri di post-elaborazione (la sfocatura Guassian sfrutta l'interpolazione del campione di trama e quindi non può usare TexelFetch)
  • Quando i vertici devono leggere i dati dalle trame e questa è un'operazione che dipende da 2 coordinate

Tex2D considera la trama come una trama. Non vuoi il contenuto esatto di un pixel, ma vuoi il risultato più realistico. Una lettura di trama standard è un'operazione molto complessa e comporta la lettura di dati interpolati da uno o più livelli mipmap e quindi si interpola di nuovo. Tutte quelle operazioni costose sono per evitare artefatti visivi.

GL_NEAREST non funzionerà allo stesso modo perché sui poligoni più lontani stai leggendo i dati nel livello mipmap più piccolo, che non sono gli stessi dati esatti che leggeresti da un texel fetch.

C'è un caso in cui Tex2D (quasi) funziona allo stesso modo di TexelFetch:

  1. il filtro è GL_NEAREST
  2. stai usando una piramide mipmap incompleta con 1 livello
  3. i tuoi raggi UV non sono componenti di vertice normalizzati (ma devi normalizzarli nello shader)
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.