Warum ist die Auflösung von Texturen in Spielen immer eine Zweierpotenz (128x128, 256x256, 512x512, 1024x1024 usw.)?
Wie in Byte56 impliziert, bestehen die Größenbeschränkungen für "Zweierpotenzen" darin, dass jede Dimension unabhängig eine Zweierpotenz sein muss und nicht, dass Texturen quadratisch sein müssen und Dimensionen haben müssen, die Zweierpotenzen sind.
Bei modernen Karten und welchen modernen Grafik-APIs wurde diese "Einschränkung" jedoch erheblich gelockert, sodass die Texturdimensionen innerhalb eines vernünftigen Rahmens so gut wie alles sein können, was Sie möchten. Jedoch:
Wäre es nicht klug, die Dateigröße des Spiels zu speichern und die Textur genau auf das UV-Modell abzustimmen? Was würde passieren, wenn es eine Textur gäbe, die keine Zweierpotenz wäre?
Indem sichergestellt wird, dass die Texturdimensionen eine Zweierpotenz haben, kann die Grafikpipeline Optimierungen in Bezug auf die Effizienz beim Arbeiten mit Zweierpotenzen nutzen. Zum Beispiel kann es schneller sein (und war vor einigen Jahren, bevor wir dedizierte GPUs und äußerst clevere Optimierungscompiler hatten), zu dividieren und mit Zweierpotenzen zu multiplizieren. Das Arbeiten mit Zweierpotenzen vereinfacht auch Vorgänge innerhalb der Pipeline, z. B. das Berechnen und Verwenden von Mipmaps (eine Zahl mit Zweierpotenzen wird immer gleichmäßig in zwei Hälften geteilt, sodass Sie sich nicht mit Szenarien befassen müssen, in denen Sie runden müssen Ihre Mipmap-Dimensionen nach oben oder unten).
Es ist wahr, dass Sie auf diese Weise Speicherplatz "verschwenden", aber der zusätzliche Speicherplatz lohnt sich normalerweise für den Kompromiss bei der Renderleistung. Darüber hinaus gibt es Techniken wie das Komprimieren oder Packen mehrerer Bilder in einen einzelnen Texturraum, mit denen ein Teil des Speichermülls eingespart werden kann.