2012-03-26 11 views
2

Angenommen, ich habe eine Textur, die natürlich nicht quadratisch ist (z. B. eine fotografische Textur von etwas mit einem Seitenverhältnis von 4: 1). Angenommen, ich möchte die PVRTC-Komprimierung verwenden, um diese Textur auf einem iOS-Gerät anzuzeigen, wofür die Textur quadratisch sein muss. Wenn ich die Textur so skaliere, dass sie während der Komprimierung quadratisch ist, entsteht ein sehr verschwommenes Bild, wenn die Textur aus der Entfernung betrachtet wird.Wie geht man mit Texturverzerrungen um, die durch "Quadrierung" von Texturen und den Interaktionen mit dem Mipmapping verursacht werden?

Ich glaube, dass dies durch Mipmapping verursacht. Da der Mipmap-Filter die neue größere gestreckte Dimension sieht, wählt er einen niedrigen Mip-Level, der eigentlich nicht korrekt ist, da diese Pixel gerade auf diese Größe gestreckt wurden. Wenn es die andere Dimension betrachtet, würde es eine höhere Auflösung Mip-Ebene wählen.

Diese Theorie wird (etwas) durch die Beobachtung bestätigt, dass, wenn ich die Textur in einem Format belasse, das nicht quadratisch sein muss, die Mipmap-Versionen gerade dandy aussehen.

Es gibt einen LOD-Bias-Parameter, aber die Dokumente sagen, dass er auf beide Dimensionen angewendet wird. Es scheint so zu sein, dass es eine Möglichkeit gibt, die LOD zu beeinflussen, aber nur in einer Dimension (das heißt, sie wird auf eine höhere Auflösung in der Dimension der Textur, die skaliert wurde, angewandt).

Anders als die Geometrie zu zerschneiden, um die Verwendung von quadratischen Untergruppen der ursprünglichen Textur zu ermöglichen (was unmöglich ist, geben Sie unsere Produktionspipeline), hat jemand clevere Hacks, die sie verwendet haben, um mit diesem Problem umzugehen?

Antwort

0

Es scheint mir, dass Sie ein paar Optionen haben, je nachdem, was Sie tun können, sagen wir, die Vertex-UVs.

[Hmm gerade realisiert, dass in der folgenden Ich gehe davon aus, dass die V von oben nach unten laufen Koordinaten ... Sie werden für mich :-) ist alte Schule zu ermöglichen, müssen]

Die Das erste, was Ihnen in den Sinn kommt, ist, Ihre 4N * N (X * Y) Quelltextur zu nehmen und sie 4x vertikal zu wiederholen, um eine 4N * 4N Textur zu erhalten, und dann die V Koordinaten am Modell auf 1/4 ihres aktuellen Wertes einzustellen Werte. Dies spart nicht viel in Bezug auf Speicher (da es effektiv bedeutet eine 4bpp PVRTC wird 4x größer), aber es immer noch sparen Bandbreite und Cache-Speicherplatz, da die anderen Teile der Textur nicht zugegriffen werden. MIP-Mapping funktioniert auch bis zu 1x1-Texturen.

Wenn Sie ein bisschen Platz sparen möchten und ein Paar 4N * N-Texturen haben, können Sie sie auch zusammen in einen "4N * 4N Atlas" verpacken. Setzen Sie die erste Textur in die oberen N Zeilen, und folgen Sie ihr dann dem N/2 der obersten Zeilen. Packen Sie die unteren N/2 Reihen der zweiten Textur, gefolgt von der zweiten Textur und dann die oberen N/2 Reihen. Zuletzt, mach die unteren N/2 Zeilen der ersten Textur. Für die UVs, die auf die erste Textur zugreifen, machen Sie die gleiche Division durch 4 für den V-Parameter. Für die zweite Textur müssen Sie durch 4 dividieren und 0,5 hinzufügen. Das sollte gut funktionieren, bis die MIP-Map-Ebene so klein ist, dass die beiden Texturen zusammengemischt werden ... aber ich bezweifle, dass das wirklich ein Problem sein wird.

+0

Wir kombinieren Texturen zusammen, wo immer wir können, so dass dies nur auftritt, wenn wir eine sich wiederholende Textur haben. Der erste Trick, den Sie erwähnen, würde tatsächlich für diesen Fall funktionieren, aber der zweite Trick kommt hier nicht in Frage. Das Hineingehen und das Ändern der Geometrie ist nicht etwas, das ich gerne machen würde (was wäre, wenn es beispielsweise eine UV-Animation gibt). Aber ich stimme zu, dass dies die Unschärfe beheben würde. Irgendwelche anderen schlauen Ideen? –

+0

Keine zur Zeit. Es ist alles eine Schande, dass die Schnittstelle nur quadratische Texturen freilegt, wenn die Hardware glücklicherweise rechteckige PVRTC-Texturen mit zwei Stärken unterstützt. –

+0

Haben Sie eine Referenz dazu? Ich nahm an, dass die quadratische Anforderung von der Hardware kam.Ich würde gerne einen Fehlerbericht mit Apple einreichen, wenn dieser nicht benötigt wird! –