Texturfilterung mit Mipmaps

Eine mipmap ist eine Sequenz von Texturen, die jeweils eine schrittweise niedrigere Auflösung desselben Bilds darstellen. Die Höhe und Breite jedes Bilds oder jeder Ebene in der mipmap ist kleiner als die vorherige Ebene. Mipmaps müssen nicht quadratisch sein.

Ein hochauflösendes Mipmap-Bild wird für Objekte verwendet, die sich in der Nähe des Benutzers befinden. Bilder mit niedrigerer Auflösung werden verwendet, wenn das Objekt weiter entfernt erscheint. Mipmapping verbessert die Qualität gerenderter 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 weist die nächste Ebene der mipmap als Anlage auf. Diese Ebene verfügt wiederum über eine Anlage, die die nächste Ebene in der mipmap ist, usw. bis zur niedrigsten Auflösungsebene der mipmap.

Die folgenden Abbildungen zeigen ein Beispiel für diese Ebenen. Die Bitmaptexturen stellen ein Zeichen in einem Container in einem 3D-First-Person-Spiel dar. Bei der Erstellung als mipmap befindet sich die Textur mit der höchsten Auflösung zuerst im Satz. Jede folgende Textur im mipmap-Satz ist in Höhe und Breite um eine Leistung von 2 kleiner. In diesem Fall beträgt die mipmap mit der maximalen Auflösung 256 Pixel x 256 Pixel. Die nächste Textur ist 128 x 128. Die letzte Textur in der Kette ist 64x64.

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

Abbildung einer 64x64-Textur eines Gefahrenzeichens

Wenn der Benutzer den Standpunkt näher an das Zeichen verschiebt, werden zunehmend höher aufgelöste Texturen 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 sich der Standpunkt des Benutzers in der minimal zulässigen Entfernung vom Zeichen befindet, wie in der folgenden Abbildung gezeigt.

Abbildung einer 256x256-Textur eines Gefahrenzeichens

Dies ist eine effizientere Möglichkeit, die Perspektive für Texturen zu simulieren. Anstatt eine einzelne Textur mit vielen Auflösungen zu rendern, ist es schneller, mehrere Texturen mit unterschiedlichen Auflösungen zu verwenden.

Direct3D kann beurteilen, welche Textur in einem Mipmap-Satz der gewünschten Ausgabe am nächsten ist, und pixelweise dem Texelraum zuordnen kann. Wenn die Auflösung des endgültigen Bilds zwischen den Auflösungen der Texturen im mipmap-Satz liegt, kann Direct3D Texel in beiden Mipmaps untersuchen und deren Farbwerte miteinander mischen.

Um mipmaps zu verwenden, muss Ihre Anwendung eine Reihe von mipmaps erstellen. Anwendungen wenden Mipmaps an, indem sie die mipmap-Gruppe als erste Textur im Satz der aktuellen Texturen auswählen. Weitere Informationen finden Sie unter Texturmischung.

Als Nächstes muss Ihre Anwendung die Filtermethode festlegen, die Direct3D zum Beispiel für Texels verwendet. Die schnellste Methode der Mipmap-Filterung besteht darin, direct3D den nächstgelegenen Texel auszuwählen. Verwenden Sie den D3DTEXF_POINT aufgezählten Wert, um dies auszuwählen. Direct3D kann bessere Filterergebnisse erzielen, wenn Ihre Anwendung den D3DTEXF_LINEAR aufgezählten Wert verwendet. Dadurch wird die nächstgelegene mipmap ausgewählt und dann ein gewichteter Mittelwert der Texels berechnet, die die Position in der Textur umgeben, der das aktuelle Pixel zugeordnet ist.

Mipmap-Texturen werden in 3D-Szenen verwendet, um die zum Rendern einer Szene erforderliche Zeit zu verkürzen. Sie verbessern auch den Realismus der Szene. Sie benötigen jedoch häufig große Mengen an Arbeitsspeicher.

Hinweis Jede Oberfläche in einer mipmap-Kette weist Dimensionen auf, die halb so hoch sind wie die vorherige Oberfläche in der Kette. Wenn die Mipmap der obersten Ebene die Dimensionen 256x128 aufweist, sind die Dimensionen der Mipmap der zweiten Ebene 128x64, die dritte Ebene 64x32 usw. bis hin zu 1x1. Sie können keine Anzahl von mipmap-Ebenen in Ebenen anfordern, die dazu führen würden, dass entweder die Breite oder Höhe einer mipmap in der Kette kleiner als 1 ist. Im einfachen Fall einer Mipmap-Oberfläche der obersten Ebene mit 4x2 ist der maximal zulässige Wert für Ebenen drei. Die Dimensionen der obersten Ebene sind 4x2, die Dimensionen der zweiten Ebene 2x1 und die Dimensionen für die dritte Ebene sind 1x1. Ein Wert größer als 3 in Ebenen führt zu einem Bruchwert in der Höhe der Mipmap der zweiten Ebene und ist daher nicht zulässig.

 

Direct3D kann automatisch 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 oft der einzige Grund, die Kette zu durchqueren. Das automatische Generieren von Mipmaps während der Texturerstellung nutzt die Hardwarefilterung, da sich die mipmap im Videospeicher befindet.

Texturfilterung