In der Spieleentwicklung gängige Texturkomprimierungsmethoden

Zweck der Texturkomprimierung

Der Zweck besteht darin, zu ermöglichen, dass die Textur in einem komprimierten Zustand von der CPU zur GPU übertragen wird und in einem komprimierten Zustand im Videospeicher vorhanden ist, was die Bandbreite reduzieren und den Videospeicher reduzieren kann; zu viel Bandbreite erhöht den Stromverbrauch und Leistung beeinträchtigen; für ein gutes Handyspiel müssen die beiden Grundanforderungen keine Wärmeentwicklung und flüssige Bilder erfüllen.

Warum ist die Texturkomprimierung für Algorithmen wie PNG und JPG nicht geeignet?

  • Einfach ausgedrückt : Die GPU benötigt manchmal nur einen kleinen Teil des gesamten Bildes, an diesem Punkt ist das Dekomprimieren des gesamten Bildes rechenintensiv, sodass der Textur-Sampler den wahlfreien Zugriff in Echtzeit unterstützen muss.
  • Um genau zu sein : Herkömmliche Komprimierungsschemata wie JPEG oder PNG sind darauf ausgelegt, ganze Bilder zu komprimieren oder zu dekomprimieren. Sie können sehr gute Komprimierungsverhältnisse und Bildqualität erreichen, aber sie sind nicht gut, ohne das gesamte Bild zu dekomprimieren. Unterstützt Echtzeit-Zufallsdaten Zugang. Beim Abbilden einer 2D-Textur auf ein Modell können einzelne Texel aus dem vollständigen Texturbild in einer unvorhersehbaren Reihenfolge abgerufen werden, nicht alle Texel sind erforderlich. Zum Beispiel abhängig von der Ausrichtung des Modells und anderen Objekten, die Teile davon verdecken könnten. Texturen, die im endgültigen Bild nebeneinander gerendert werden, können aus verschiedenen Teilen der Textur stammen. Das Dekomprimieren des gesamten Bildes ist rechenintensiv, wenn die GPU nur einen kleinen Teil des gesamten Bildes benötigt. In dem üblichen Spieltexturkomprimierungsalgorithmus ist das Echtzeitkomprimierungsschema entworfen, um eine effiziente Decodierung für eine zufällige Abtastung von Elementen in einem größeren Bild bereitzustellen, das heißt, um einen Echtzeit-Zufallszugriff auf komprimierte Texturen zu unterstützen.

Häufig verwendete Komprimierungsmethoden

Es gibt DXTC (Windows), BC1-BC7, ETC (1 und 2), PVRTC (IOS), ASTC usw.

DXTC (DirectX-Texturkomprimierung)

Dieses Komprimierungsverfahren wird hauptsächlich auf der PC-Seite verwendet

BC1-BC7, hauptsächlich in Direct3D verwendet

  1. BC1 (DXGI_FORMAT_BC1_UNORM): Dieses Format unterstützt 3 Farbkanäle und verwendet nur 1 Bit (ein/aus) zur Darstellung der Alpha-Komponente.
  2. BC2 (DXGI_FORMAT_BC2_UNORM): Dieses Format unterstützt 3 Farbkanäle und verwendet nur 4 Bits zur Darstellung der Alpha-Komponente.
  3. BC3 (DXGI_FORMAT_BC3_UNORM): Dieses Format unterstützt 3 Farbkanäle und stellt die Alpha-Komponente in 8 Bit dar.
  4. BC4 (DXGI_FORMAT_BC4_UNORM): Dieses Format unterstützt 1 Farbkanal (z. B. Graustufenbilder).
  5. BC5 (DXGI_FORMAT_BC5_UNORM): Dieses Format unterstützt zwei Farbkanäle.
  6. BC6 (DXGI_FORMAT_BC6_UF16): Dieses Format wird für komprimierte HDR-Bilddaten (High Dynamic Range, High Dynamic Range) verwendet.
  7. BC7 (DXGI_FORMAT_BC7_UNORM): Dieses Format wird für hochwertige RGBA-Komprimierung verwendet. Insbesondere kann dieses Format Fehler durch komprimierte Normalmaps deutlich reduzieren.

USW

Unterteilt in ETC1 und ETC2

  • ETC1: Unterstützt OpenGL ES2.0 und höher, aber ETC1 hat einen schwerwiegenden Nachteil – es unterstützt keinen Alphakanal , daher werden RGB und Alpha im Allgemeinen separat komprimiert und schließlich während des Renderns kombiniert und berechnet ; alle iPhones werden unterstützt.
  • ETC2: Lösen Sie das Problem, dass ETC1 den Alphakanal nicht unterstützt, OpenGL ES3.0-Versionsmaschinen und höher unterstützen, iPhone 5S und höher unterstützen.
    Der Grund, warum IOS kein ETC verwendet, ist, dass PVRTC unter der Prämisse einer ähnlichen Komprimierungsgröße besser abschneidet.

PVRTC

Aus Patentgründen wird es im Allgemeinen auf iOS-Geräten und einigen Android-Geräten verwendet, die PVRTC unterstützen. Die Größenanforderung ist die N-te Potenz von 2 und muss quadratisch sein. Warum es eine Größenanforderung gibt, wird durch die bestimmt spezifischer Komprimierungsalgorithmus.

ASTC

Im Android-System wird OpenGL ES 3.0-Level-Hardware weitgehend unterstützt; im ios-System werden iPhone6 ​​​​und höhere Modelle unterstützt; die meisten Mobilgeräte können jetzt ASTC unterstützen.

Branchenübliches Komprimierungsschema 1:

  • Android : Die Industrie entscheidet sich im Allgemeinen für ETC1, da es Teil des Grafikstandards OpenGL ES ist und von allen Android-Geräten unterstützt wird, die opengl2.0 verwenden. Da ETC1 jedoch keinen Alphakanal hat, muss die Karte mit Alphakanal die ursprüngliche Karte in zwei Kanäle aufteilen, in zwei komprimieren und schließlich beim Rendern zusammenführen und berechnen.
  • IOS : Die Industrie verwendet im Allgemeinen das Format pvrtc RGBA 4bits.

Häufig verwendetes Komprimierungsschema 2 in der Industrie:

  • Android : ETC2, die Größenanforderung (teilbar durch 4) gibt einen Teil des Low-End-Gerätemarktes auf.
  • IOS : PVRTC, ASTC (verwerfen Sie einige alte iOS-Geräte).
  • Es gibt drei Komprimierungsformate von ASTC4\5\6 . Derzeit ist der mit bloßem Auge sichtbare Unterschied nicht offensichtlich. Sie können mit ASCT5 beginnen. Für die häufigere Benutzeroberfläche wird das Komprimierungsformat von ASTC5 verwendet, und das weniger wichtig Benutzeroberfläche ist ASTC6.

Supongo que te gusta

Origin blog.csdn.net/qq_41841073/article/details/127692650
Recomendado
Clasificación