OpenGL'nin texelFetch ve dokusu nasıl farklıdır?


18

Ben arasındaki temel farklılıkları anlamak texelFetchve texturedetayları hakkında bazı sorular ama vardır:

  • texelFetchBir performans cezası içeriyor mu ? Önbellek kullanmamak gibi mi?
  • Are texelFetchve texturekullanırken değiştirilebilir GL_NEAREST?

1
Bir test
senaryosu

1
Bir cevabı kabul edilmiş olarak işaretlemeyi unuttunuz mu yoksa bu hala açık bir sorun mu?
Anko

Yanıtlar:


23

texelFetcholdukça farklı texture.

texturefiltreleme ve normalleştirilmiş ( [0,1]) doku koordinatlarını işleyen normal doku erişim işlevinizdir . texelFetchnormalleştirilmemiş koordinatlar (örn (64,64). 128x128 dokusundaki orta-ish texelinde normalize edilmiş koordinatlarda) kullanarak dokudaki bir texele (filtreleme yok) doğrudan erişir (.5,.5).


4
+1 Doku özellikle bir görüntü olarak görüntülenmesi amaçlanmadığında, ancak görüntü olarak kullanılması amaçlanan metinlere erişen dokunun aksine, diğer veri türlerinden farklı olarak veri erişimi için tasarlandığını eklemek isterim, bu yüzden filtreleme vb. kullanır -
concept3d

Performansta bir fark var mı?
Lenar Hoyt

1
@mcb: belki, ama çok büyük olmasını beklemezdim ve muhtemelen donanım satıcısı tarafından çok değişecektir. Performans, bu işlevlerden hangisini çağıracağınıza karar verirken kullanmak için kesinlikle yanlış bir metriktir: durumunuz için doğru olanı kullanın (donanımın filtrelemesine ihtiyacınız vardır ve bu yüzden kullanmanız gerekir textureveya filtrelemeyi yapmamak için donanım gerekir ve texelFetch).
Sean Middleditch

3
@SeanMiddleditch Bu durumda performans nasıl yanlış metriktir? Daha texelFetchhızlı ve en yakın komşu filtreleme yeterliyse, bağlamı herhangi bir nedenle NN filtrelemeye değiştiremezseniz, tercih etmeniz mantıklı olacaktır texture.
Lenar Hoyt

@mcb: texelFetchve texturetemel şekillerde farklı çalışır. Ayrıca girişlere bakın: doku koordinatları ve normalleştirilmiş koordinatlar. Farklı amaçlara hizmet ederler. Biri sadece diğerinin optimizasyonu değil.
Sean Middleditch

6

Kabul edilmiş bir cevap olmadığından bazı bilgiler ekliyorum, sadece cevabında Sean'ın söylemediği şeyleri eklemek istedim.

TexelFetch , dokuyu bir Görüntü olarak değerlendirir, böylece tam olarak piksellerin içeriğine erişebilirsiniz. Bunu genellikle tam olarak bu içeriğe ihtiyaç duyduğunuzda yaparsınız. Bu, birkaç ancak yararlı durumda:

  • Belirli işlem sonrası filtreler (Guassian blur doku örneği enterpolasyonunu kullanır ve bu nedenle TexelFetch kullanamaz)
  • Köşelerin dokulardan veri okuması gerektiğinde ve bu 2 koordinatlara bağlı bir işlemdir

Tex2D , dokuyu bir doku olarak ele alır. Bir pikselin tam içeriğini istemezsiniz, ancak en gerçekçi sonucu istersiniz. Standart bir doku okuması çok karmaşık bir işlemdir ve bir veya daha fazla mipmap seviyesinden enterpolasyonlu verilerin okunmasını içerir ve daha sonra tekrar enterpolasyon yapar. Tüm bu pahalı işlemler görsel yapaylıklardan kaçınmak içindir.

GL_NEAREST aynı işe yaramayacaktır çünkü en çok çokgenlerde, verileri bir metin getirmesinden okuduğunuz verilerle aynı olmayan daha küçük mipmap düzeyinde okuyorsunuz.

Tex2D'nin (neredeyse) TexelFetch ile aynı şekilde çalıştığı bir durum vardır:

  1. filtre GL_NEAREST
  2. 1 seviye ile eksik bir mipmap piramidi kullanıyorsunuz
  3. UV'leriniz normalleştirilmiş köşe bileşenleri değildir (ancak bunları gölgelendiricide normalleştirmeniz gerekir)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.