İlk olarak, GPU'ların her zaman bir kerede 2x2 piksel bloğundaki parça / piksel gölgelendiricileri değerlendirdiğini bilmeye yardımcı olur. (Bu piksellerin yalnızca bir kısmının sonuçta çizilmesi gerekse bile, diğerleri çokgenin dışında veya tıkalı olsa da - gereksiz parçalar sonunda yazılmak yerine maskelenir).
v
Gölgelendiricinizdeki bir değişkenin (veya ifadenin) ekran alanı türevi, v
bu 2x2 piksel dörtlünün bir tarafından diğerine (koddaki o noktada) değerindeki farktır . yani. ddx
değeridir v
sağ piksel eksi değeri v
sol ve benzer için ddy
dikey üzerinde.
Bu, " v
ekran boyunca yatay (ddx) veya dikey (ddy) hareket ettikçe ne kadar hızlı artar veya azalır?" - yani. matematik terimleriyle, değişkeninizin kısmi türevlerine yaklaşır (yaklaşık çünkü fonksiyonun sonsuz davranışını matematiksel olarak değerlendirmek yerine her bir parçada ayrık örnekler kullanır)
Skaler miktarlar için, bunu , ekran alanı yönünü en hızlı şekilde artıran bir gradyan vektörü olarak da görebiliriz .∇v = float2(ddx(v), ddy(v))
v
Bu tür bilgiler genellikle dahili olarak , doku aramaları için uygun bir mipmap veya anizotropik filtreleme çekirdeği seçmek için kullanılır . Örneğin, kameram uv
dokulu bir zemin düzleminin dikey yönüne neredeyse paralel görünüyorsa , ddy(uv.y)
karşılaştırıldığında çok büyük olacaktır ddx(uv.x)
(dikey eksen ekranda kısaltılmış olduğundan - bir piksel adım dikey olarak daha uzun bir doku alanını kaplar) Doku örnekleme donanımına, yapay doku oluşumlarını önlemek için dikey doku yönünü yataydan daha fazla bulanıklaştırmak için anizotropik filtrelemeye ihtiyacım olduğunu söyler.
En basit efektler için bu türevleri kullanmanıza gerek yoktur, çünkü temel 2D doku örnekleme yöntemleri bunu sizin için halleder. Ancak Le Comte du Merde-fou, yukarıdaki yorumda belirtildiği gibi, doku aramalarınızı bozduğunuzda, donanımın uygun filtrelemeyi seçmesine yardımcı olmak için kullanmak için ekran alanı türevlerini manuel olarak almanız ve / veya masaj yapmanız gerekebilir (örn. tex2Dlod
HLSL'de)
Ekran alanı etiketleri, tek bir 2x2 bloğun hesaplanan doku koordinatında büyük bir atlama süreksizliğini kapsayabileceği ve sistemin filtreleme seviyesini saf olarak hesaplamasına izin verirseniz lekelenmiş veya kenarları yumuşatılmış bir kenara yol açabilir. Bu makale, bu eserle ilgili ayrıntılara ve onu hafifletmeye yönelik yaklaşımlara girmektedir .
Bu türevler, prosedürel doku üretiminde gürültü işlevlerini kullanırken de kullanışlı olabilir. Örneğin, yordamsal gürültüyü normal bir haritaya dönüştürmek istediyseniz, ddx & ddy, gürültü değerinin geçerli parçanın yakınında nasıl değiştiğini ve hangi yönde eğimli olduğunu hesaplamak için basit, yaklaşık bir yol verir, böylece uygun bir normal oluşturabilir.
Kenar yumuşatma çizgileri veya kesişim vurguları oluşturma teknikleri , kalınlık / serpintiğin tutarlı olmasını ve geometriye veya görüş açısına bağlı olmamasını sağlamak için ekran alanı türevlerini de kullanabilir.
Journey'deki kum renderleme hakkındaki bu konuşmada konuşmacı, kumun bakış kenarları boyunca ne kadar parlak olduğunu kontrol etmek için bu türev fonksiyonlarını kullanabildiklerinden bahsediyorlardı ... eğer o zaman onlar hakkında biliniyorlarsa (bunun yerine bir mipmap hile kullandılar, Kaputun altında zaten bu tür türevler tarafından desteklenmektedir)
Dikkat edilmesi gereken son bir not: ekran alanı türevleri "kaba" / düşük hassasiyette (yani bir çift türev tüm dörtlü tarafından paylaşılır) veya "ince" / yüksek hassasiyette (yani her piksel sadece hemen dörtlü komşular, dörtlü üzerinde dört ayrı türev çifti verebilir). Kaba genellikle bol miktardadır, ancak etkinizde görünür 2x2 bloklar olduğunu fark ederseniz, ince / yüksek hassasiyete geçmek istediğiniz iyi bir ipucudur. ;)
(Üstteki şemada ince türevler için hesaplamalar kullandım, ancak sadece kendi başına ddx / ddy'nin kaba türevleri varsayılan olarak kullanabileceğine dikkat edin)