Bilineare Texturfilterung

Die bilineare Filterung berechnet den gewichteten Durchschnitt der vier Texel, die dem Stichprobenpunkt am nächsten sind. Dieser Filteransatz ist genauer und üblicher als die Filterung mit dem nächsten Punkt. Dieser Ansatz ist effizient, da er in moderner Grafikhardware implementiert ist.

Beispiel

Texturen werden immer linear von (0,0, 0,0) oben links bis (1,0, 1,0) in der unteren rechten Ecke adressiert. Die lineare Adressierung einer Textur ist in der folgenden Abbildung dargestellt.

Abbildung der 4x4-Textur mit Volltonfarbenblöcken

Texturen werden in der Regel so dargestellt, als ob sie aus volltonierten Farbblöcken bestehen, aber es ist tatsächlich richtiger, sich Texturen auf die gleiche Weise zu vorstellen, wie Sie sich die Rasteranzeige vorstellen sollten: Jeder Texel wird genau in der Mitte einer Rasterzelle definiert, wie in der folgenden Abbildung gezeigt.

Abbildung der 4x4-Textur mit Texels, die in der Mitte der Rasterzellen definiert sind

Wenn Sie den Textur-Sampler nach der Farbe dieser Textur bei UV-Koordinaten (0,375, 0,375) fragen, erhalten Sie einfarbiges Rot (255, 0, 0). Das ist sinnvoll, da der Mittelpunkt der roten Texelzelle bei UV (0,375, 0,375) liegt. Was geschieht, wenn Sie den Sampler nach der Farbe der Textur bei UV (0,25, 0,25) fragen? Das ist nicht so einfach, denn der Punkt bei UV (0,25, 0,25) liegt genau an der Ecke von 4 Texeln.

Das einfachste Schema besteht darin, dass der Sampler einfach die Farbe des nächstgelegenen Texels zurückgibt. dies wird als Punktfilterung bezeichnet (siehe Nächstes Punkt-Sampling) und ist aufgrund von körnigen oder blockigen Ergebnissen in der Regel unerwünscht. Punkt-Sampling unsere Textur bei UV (0,25, 0,25) zeigt ein weiteres subtiles Problem bei der Nächstpunktfilterung: Es gibt vier Texel, die vom Probenahmepunkt entfernt sind, so dass es kein einziges nächstes Texel gibt. Eines dieser vier Texel wird als zurückgegebene Farbe ausgewählt, aber die Auswahl hängt davon ab, wie die Koordinate gerundet wird, was zu Reißen von Artefakten führen kann (siehe Nearest-Point Sampling-Artikel im SDK).

Ein etwas genaueres und gebräuchlicheres Filterschema ist die Berechnung des gewichteten Durchschnitts der vier Texel, die dem Probenahmepunkt am nächsten sind; dies wird als bilineare Filterung bezeichnet. Die zusätzlichen Berechnungskosten für bilineare Filterung sind in der Regel vernachlässigbar, da diese Routine in moderner Grafikhardware implementiert ist. Hier sind die Farben, die wir mit bilinearer Filterung an einigen verschiedenen Beispielpunkten erhalten:

UV: (0.5, 0.5)

Dieser Punkt befindet sich an der genauen Grenze zwischen roten, grünen, blauen und weißen Texeln. Die Farbe, die der Sampler zurückgibt, ist grau:

  0.25 * (255, 0, 0)
  0.25 * (0, 255, 0) 
  0.25 * (0, 0, 255) 
## + 0.25 * (255, 255, 255) 
------------------------
= (128, 128, 128)
UV: (0.5, 0.375)

Dieser Punkt befindet sich an der Mitte der Grenze zwischen roten und grünen Texeln. Die Farbe, die der Sampler zurückgibt, ist gelb-grau (beachten Sie, dass die Beiträge der blauen und weißen Texel auf 0 skaliert sind):

  0.5 * (255, 0, 0)
  0.5 * (0, 255, 0) 
  0.0 * (0, 0, 255) 
## + 0.0 * (255, 255, 255) 
------------------------
= (128, 128, 0)
UV: (0.375, 0.375)

Dies ist die Adresse des roten Texels, die die zurückgegebene Farbe ist (alle anderen Texel in der Filterberechnung werden zu 0 gewichtet):

  1.0 * (255, 0, 0)
  0.0 * (0, 255, 0) 
  0.0 * (0, 0, 255) 
## + 0.0 * (255, 255, 255) 
------------------------
= (255, 0, 0)

Vergleichen Sie diese Berechnungen mit der folgenden Abbildung, die zeigt, was passiert, wenn die berechnung der bilinearen Filterung an jeder Texturadresse in der 4x4-Textur ausgeführt wird.

Abbildung der 4x4-Textur mit bilinearer Filterung, die an jeder Texturadresse ausgeführt wird

Texturfilterung