Ich verstehe das Mipmapping ziemlich gut. Was ich nicht verstehe (auf einer Hardware / Treiber-Ebene) ist, wie Mipmapping die Leistung einer Anwendung verbessert (zumindest wird dies oft behauptet). Der Treiber weiß nicht, bis der Fragment-Shader ausgeführt wird, auf welche Mipmap-Ebene zugegriffen wird, also müssen sowieso alle Mipmap-Ebenen im VRAM vorhanden sein, oder liege ich falsch?
Was genau verursacht die Leistungsverbesserung?
Sie sind sich sicher bewusst, dass jedes Texel in den unteren LODs der Mip-Kette einen höheren Prozentsatz des gesamten Texturbildbereichs abdeckt, richtig?
Wenn Sie eine Textur an einem entfernten Ort abtasten, verwendet die Hardware eine niedrigere LOD. Wenn dies geschieht, wird die Probenumgebung, die zum Auflösen der Verkleinerung erforderlich ist, kleiner, so dass weniger (nicht zwischengespeicherte) Abrufvorgänge erforderlich sind. Es geht um die Menge an Speicher, die tatsächlich während der Texturabtastung abgerufen werden muss, und nicht um die Menge an belegtem Speicher (vorausgesetzt, Sie laufen nicht in Textur-Thrashing).
Ich denke, dass dies wahrscheinlich eine visuelle Darstellung verdient, daher werde ich mir das folgende Diagramm aus der ausgezeichneten Reihe von Tutorials bei arcsynthesis.org .
Auf der linken Seite sehen Sie, was passiert, wenn Sie die ganze Zeit naiv eine einzelne LOD abtasten (dieses Diagramm zeigt übrigens eine lineare Minifikationsfilterung) und auf der rechten Seite sehen Sie, was mit dem Mipmapping passiert. Es verbessert nicht nur die Bildqualität, indem es der effektiven Größe des Fragments besser entspricht, sondern weil die Anzahl der Texel in den unteren Mipmap-LODs geringer ist, kann es viel effizienter zwischengespeichert werden.
Mipmaps sind mindestens aus zwei Gründen nützlich:
Siehe Info hier: Ссылка
Tags und Links opengl performance directx mipmaps