Ich habe meinem Projekt kürzlich einen Textur-Packager hinzugefügt, der eine bestimmte Anzahl von Texturen in eine einzige packt, wie folgt:
So ist diese beispielsweise 582 x 1023 Pixel groß. Das Ziel des Hinzufügens dieser gepackten Texturen bestand offensichtlich darin, die Leistung zu verbessern. Daher wollte ich die optimale Texturgröße für OpenGL-Texturen (unter Verwendung von LWJGL) ermitteln. Die Dinge , die ich gefunden waren , dass eine breite Unterstützung maximale Texturgröße scheint 1024x1024 zu sein, nach dieser zum Beispiel. Das kommt mir merkwürdig vor, weil natürlich viele Texturen größer wären, was passiert also mit denen? Ich bin mir ziemlich sicher, dass die meisten Grafikkarten größere Texturen unterstützen. Kann ich davon ausgehen, dass die meisten Grafikkarten z. B. Texturen im Format 4096 x 4096 (oder sogar größer) verarbeiten?
Um zu meinem zweiten Punkt zu kommen (ich hoffe, dies zählt immer noch als eine Frage, aber es läuft im Wesentlichen auf dasselbe Problem hinaus): Sollten Texturen mit einer Potenz von 2 (256x256, 512x512, 1024x1024, 2048x2048, ..) dimensioniert sein und sollten Ich fülle gepackte Texturen auf, die kleiner sind als die nächste Potenz von 2? Gemäß dieser Frage aus dem Jahr 2011 ist es nicht erforderlich, kann aber Fehler Leistung und vermeiden kleineren verbessern und diese von 2012 sagt , dass Sie sollten auf jeden Fall Pad Texturen. Mir ist also klar, dass diese Fragen schon einmal gestellt wurden, aber sie sind relativ alt, damit sich die Antworten geändert haben, und außerdem beantworten sie jeweils nur teilweise meine Frage. Wie gehen andere Projekte damit um?
TL; DR: Mit welchen Texturgrößen kann ich bei den meisten Grafikkarten rechnen? Was sind die optimalen Texturgrößen (oder gibt es)? Soll ich Texturen mit der nächsten Potenz von 2 auffüllen?
quelle
Antworten:
Ich werde versuchen, darauf zu antworten, obwohl YMMV. Ich verwende die Steam-Hardware-Umfrage ( http://store.steampowered.com/hwsurvey?platform=pc ), um festzustellen, welcher Video-RAM (VRAM) auf den meisten Computern verfügbar ist. Betrachtet man die Ergebnisse vom 13.10.2015 (heute), so haben fast 85% der Menschen 1024 MB VRAM.
Ihre Frage ist sehr weit gefasst, da sie nicht die Zielhardware (Konsole, PC, Handheld, mobile Geräte?) Angibt. Ich werde über PCs sprechen und Sie können auf der Grundlage der Hardwarespezifikationen für andere Plattformen extrapolieren.
Unter der Annahme von 32 Bit Farbe + Alpha pro Pixel, dh 4 Bypes pro Pixel, kann 1 GB VRAM maximal ~ 256 Millionen Pixel enthalten. Dies entspricht 256 1K mal 1K-Texturen. Dies setzt (fälschlicherweise) voraus, dass Sie nur Texturen in Ihrem VRAM speichern möchten, während es eine ganze Reihe anderer Dinge gibt (z. B. Mesh-Daten, wenn Sie in 3D arbeiten), für die Sie Platz lassen müssen. Sie möchten wahrscheinlich auch mehr Platz für Mip-Mapping von Texturen einräumen, was normalerweise am besten funktioniert, wenn Ihre Texturen Potenzen von zwei haben.
Moderne Konsolen (XBOX One und PS4) verfügen über 4 bis 8 GB einheitlichen Arbeitsspeicher, die meisten Handhelds und Mobilgeräte verfügen über 1 bis 2 GB einheitlichen Arbeitsspeicher, mit Einschränkungen, wie viel Sie als VRAM zuweisen können.
Normalerweise erstelle ich 2K-Texturen, so dass sie auf den meisten PCs funktionieren und die Option zum Verkleinern für Geräte mit niedrigerer Auflösung ermöglichen. Wenn Sie ein 2D-Spiel schreiben und auf Displays mit höherer Auflösung (4K, Retina-iPad usw.) abzielen möchten, können Sie 4K-Texturen für den Hintergrund verwenden, aber für die meisten anderen Teile ist dies möglicherweise zu viel.
Ich hoffe, das hat geholfen und das Wasser nicht getrübt.
quelle