Cevabım özellikle Metal ile ilgili, çünkü cevabın başka bir API için değişip değişmeyeceğini bilmiyorum.
Şimdiye kadar anladığımı düşündüğüm şey şudur:
Bir mipmaplı doku, orijinal dokuyu anlamlı bir şekilde altörnekleyerek daha düşük ayrıntı düzeylerinin oluşturulduğu "ayrıntı düzeylerini" önceden hesaplamıştır.
Mipmap seviyelerine, seviyenin
0
orijinal doku olduğu ve daha yüksek seviyeler, iki azalmanın gücü olduğu azalan ayrıntı düzeyinde ifade edilir .Çoğu GPU, her örnek için iki komşu mipmap düzeyini, her düzeydeki numuneleri bilinear filtreleme kullanarak seçen ve daha sonra bu örnekleri doğrusal olarak karıştıran üç boyutlu filtreleme uygular.
Tam olarak anlamadığım şey, bu mipmap seviyelerinin nasıl seçildiğidir. Gelen belgeleri metal standart kütüphanenin, I örnekleri ile ya da bir örneğini belirtmeksizin alınabilir bkz lod_options
türü. Bu argümanın mipmap seviyelerinin seçilme şeklini değiştirdiğini ve lod_options
2D dokular için görünüşte üç çeşit olduğunu varsayıyorum :
bias(float value)
level(float lod)
gradient2d(float2 dPdx, float2 dPdy)
Ne yazık ki, belgeler bu seçeneklerden herhangi birinin ne yaptığını açıklama zahmetine girmiyor. bias()
Önyargının otomatik olarak seçilen bir ayrıntı düzeyini saptadığını tahmin edebilirim , ama sonra önyargı ne anlama value
geliyor? Hangi ölçekte çalışıyor? Benzer şekilde, nasıl olduğu lod
hakkındaki level()
ayrık mipmap seviyelerine çevrildi? Ve gradient2d()
doku koordinatının gradyanını kullanan varsayım altında çalışarak, mipmap seviyesini seçmek için bu gradyanı nasıl kullanır?
Daha da önemlisi, lod_options
atlarsam, mipmap seviyeleri nasıl seçilir? Bu, yürütülmekte olan işlevin türüne göre değişir mi?
Ve sample()
işlevin varsayılan no-lod-options-belirtilmiş işlemi, gradient2D()
(en azından bir parça gölgelendiricide) gibi bir şey yapmaksa, basit ekran alanı türevlerini kullanıyor mu veya doğrudan rasterleştirici ve enterpolasyonlu doku koordinatları ile çalışıyor mu? kesin bir gradyan hesaplamak için?
Ve son olarak, bu davranışın herhangi biri cihazdan cihaza ne kadar tutarlıdır? Eski bir makale (DirectX 9'daki gibi) Okudum karmaşık cihaza özgü mipmap seçimine atıfta bulunmuştum, ancak mipmap seçiminin daha yeni mimarilerde daha iyi tanımlanıp tanımlanmadığını bilmiyorum.