Freigeben über


Texturfilterung mit Mipmaps

Eine Mipmap ist eine Sequenz von Texturen, von denen jede eine schrittweise niedrigere Auflösungsdarstellung desselben Bilds ist. Die Höhe und Breite der einzelnen Bilder oder Ebenen in der Mipmap ist eine Potenz von zwei kleiner als die vorherige Ebene. Mipmaps müssen nicht quadratisch sein.

Ein hochauflösendes Mipmap-Bild wird für Objekte verwendet, die dem Benutzer nahe sind. Bilder mit niedrigerer Auflösung werden verwendet, wenn das Objekt weiter entfernt erscheint. Mipmapping verbessert die Qualität der gerenderten Texturen auf Kosten der Verwendung von mehr Arbeitsspeicher.

Direct3D stellt Mipmaps als Kette von angefügten Oberflächen dar. Die textur mit der höchsten Auflösung befindet sich am Kopf der Kette und hat die nächste Ebene der Mipmap als Anlage. Diese Ebene verfügt wiederum über eine Anlage, die die nächste Ebene in der Mipmap und so weiter bis zur niedrigsten Auflösungsebene der Mipmap ist.

Die folgenden Abbildungen zeigen ein Beispiel für diese Ebenen. Die Bitmaptexturen stellen ein Zeichen für einen Container in einem 3D-Spiel dar. Wenn sie als Mipmap erstellt wird, befindet sich die textur mit der höchsten Auflösung zuerst im Satz. Jede erfolgreiche Textur im Mipmap-Satz ist um eine Leistung von 2 kleiner in Höhe und Breite. In diesem Fall beträgt die mipmap mit maximaler Auflösung 256 Pixel mal 256 Pixel. Die nächste Textur ist 128 x 128. Die letzte Textur in der Kette ist 64 x 64.

Dieses Zeichen hat einen maximalen Abstand, von dem es sichtbar ist. Wenn der Benutzer weit vom Zeichen entfernt beginnt, zeigt das Spiel die kleinste Textur in der Mipmap-Kette an, in diesem Fall die 64x64-Textur.

Abbildung einer 64x64-Textur eines Gefahrenzeichens

Wenn der Benutzer den Blickpunkt näher an das Zeichen verschiebt, werden progressive Texturen mit höherer Auflösung in der Mipmap-Kette verwendet. Die Auflösung in der folgenden Abbildung ist 128 x 128.

Abbildung einer 128x128 Textur eines Gefahrenzeichens

Die Textur mit der höchsten Auflösung wird verwendet, wenn der Ansichtspunkt des Benutzers mindestens zulässig ist, wie in der folgenden Abbildung dargestellt.

Abbildung einer 256 x 256 Textur eines Gefahrenzeichens

Dies ist eine effizientere Methode zum Simulieren der Perspektive für Texturen. Anstatt eine einzelne Textur mit vielen Auflösungen zu rendern, ist es schneller, mehrere Texturen mit unterschiedlichen Auflösungen zu verwenden.

Direct3D kann bewerten, welche Textur in einem Mipmap-Satz die nächstgelegene Auflösung der gewünschten Ausgabe ist, und sie kann Pixel in den Texelbereich zuordnen. Wenn die Auflösung des endgültigen Bilds zwischen den Auflösungen der Texturen im Mipmap-Satz liegt, kann Direct3D Texel in Mipmaps untersuchen und ihre Farbwerte miteinander mischen.

Um Mipmaps zu verwenden, muss Ihre Anwendung einen Satz von Mipmaps erstellen. Anwendungen wenden Mipmaps an, indem sie den Mipmap-Satz als erste Textur in der Gruppe der aktuellen Texturen auswählen. Siehe Texturmischung.

Als Nächstes muss Ihre Anwendung die Filtermethode festlegen, die Direct3D zum Beispiel von Texeln verwendet. Die schnellste Methode der Mipmap-Filterung besteht darin, dass Direct3D das nächste Texel auswählt. Verwenden Sie zum Auswählen dieses Werts den D3DTEXF_POINT aufgezählten Wert. Direct3D kann bessere Filterergebnisse erzielen, wenn Ihre Anwendung den D3DTEXF_LINEAR Aufzählungswert verwendet. Dadurch wird die nächste Mipmap ausgewählt und dann ein gewichtetes Mittelwert der Texel berechnet, die die Position in der Textur umgeben, der die aktuelle Pixelzuordnung zugeordnet ist.

Mipmap-Texturen werden in 3D-Szenen verwendet, um die zum Rendern einer Szene erforderliche Zeit zu verringern. Sie verbessern auch den Realismus der Szene. Sie erfordern jedoch häufig große Speichermengen.

Beachten Sie , dass jede Oberfläche in einer Mipmap-Kette Dimensionen aufweist, die eine Hälfte der vorherigen Oberfläche in der Kette sind. Wenn die mipmap der obersten Ebene Abmessungen von 256x128 hat, sind die Dimensionen der mipmap der zweiten Ebene 128x64, die dritte Ebene 64 x 32 usw. bis zu 1x1. Sie können keine Anzahl von Mipmap-Ebenen in Ebenen anfordern, die dazu führen würden, dass die Breite oder Höhe einer Mipmap in der Kette kleiner als 1 ist. Im einfachen Fall einer Mipmap-Oberfläche auf oberster Ebene beträgt der maximal zulässige Wert für Ebenen drei. Die Abmessungen der obersten Ebene sind 4x2, die Abmessungen der zweiten Ebene sind 2x1, und die Abmessungen für die dritte Ebene sind 1x1. Ein Wert, der größer als 3 in Ebenen ist, führt zu einem Bruchwert in der Höhe der mipmap der zweiten Ebene und ist daher unzulässig.

 

Direct3D kann automatisch die Mipmap-Texturfilterung durchführen. Anwendungen können eine Mipmap-Kette manuell durchlaufen, um Bitmapdaten in jede Oberfläche in der Kette zu laden. Dies ist häufig der einzige Grund, die Kette zu durchlaufen. Das automatische Generieren von Mipmaps zur Texturerstellungszeit nutzt die Hardwarefilterung, da sich die Mipmap im Videospeicher befindet.

Texturfilterung