Ein einziger Texturatlas?

8

Wenn ich Texturatlas verwenden möchte, sollte ich versuchen, alle meine Sprites in einem einzigen Texturatlas zu platzieren? Oder gibt es Zeiten, in denen ich mehrere kleinere Texturatlanten haben sollte?

Aaron
quelle

Antworten:

7

Wie viele Dinge in der Software ist es ein Balanceakt. Weniger Texturwechsel sind gut, aber zu große Texturen können auch die Leistung beeinträchtigen. Darüber hinaus kann es schwierig sein, Sprite-Blätter mit einer großen Anzahl von Sprites logistisch zu verwalten.

Um größere Sprite-Blätter verwalten zu können, wird empfohlen, die Sprites getrennt zu halten und sie dann zu einem Sprite-Blatt zusammenzufügen, um sie in Ihrem Spiel zu verwenden. Sie können Tools verwenden (beide haben sehr clevere Namen) wie:

Mit diesen Tools können Sie sicherstellen, dass Animationen, die zusammengehören, auf demselben Sprite-Blatt landen. Auf diese Weise wechseln Sie nicht zwischen Texturen während der Animation.

Leider gibt es keinen universellen Standard für maximale Texturgröße. Darüber hinaus variiert es von Hardware zu Hardware, nicht nur zwischen Grafikplattformen. Es gibt Höchstwerte, die die Grafikplattformen unterstützen können, aber das bedeutet nicht, dass die Hardware dies unterstützt. Stellen Sie sicher, dass Sie mit Ihrem Spiel einen Check erstellen, um sicherzustellen, dass Sie keine zu große Textur laden.

MichaelHouse
quelle
Ich beabsichtige, ein plattformübergreifendes Spiel zu entwickeln (hauptsächlich Desktops, möglicherweise jedoch iOS). Wie viel sollte ich erwarten, dass die maximale Texturgröße variiert?
Aaron
1
Ich weiß nicht viel über die Einschränkungen für Mobilgeräte. Bei Desktops hängt es wirklich davon ab, welchen Hardwarebereich Sie unterstützen möchten. Ich denke, 2048x2048 ist eine gute mittlere bis hohe Zahl, die die meisten Desktops unterstützen würden. Für iOS sieht dieser Thread vielversprechend aus.
MichaelHouse
Warum sollten Sie der Inhaltspipeline ein unnötiges Tool hinzufügen, wenn Sie die Texturatlanten zur Laufzeit über glTexSubImage genauso gut erstellen können?
API-Beast
Ganz zu schweigen davon, dass Sie auf diese Weise viel flexibler sein können, da Sie die maximale Texturgröße abfragen können und nicht raten müssen.
API-Beast
4
(1) TexSubImage ist zur Laufzeit oft sehr langsam - Sie benötigen eine sehr sorgfältige Parameterauswahl. (2) Sie benötigen noch eine Methode zur Auswahl, wohin Bilder im Atlas verschoben werden, die TexSubImage Ihnen nicht zur Verfügung stellt . (3) TexSubImage löst nicht das Problem, auf welchem ​​Sprite-Blatt welche Bilder platziert werden sollen. (3) TexSubImage ist nicht gibt Ihnen die Möglichkeit , die maximale Größe abzufragen - glGet tut und auch dann noch mit einem externen Tool verwendet werden.
Maximus Minimus
5

Je weniger Texturen desto besser. Ein großer wäre also am besten. Abhängig von Ihrer Plattform und Sprache gibt es jedoch eine Größenbeschränkung für ein Bild. Wenn also 2048 x 2048 px das größte ist, das Ihr Bild sein kann, und Ihr Texturatlas größer ist, ist es am besten, zwei kleinere Atlanten zu haben.

eazimmerman
quelle
3
+1 und - wenn Sie mehr als einen Atlas benötigen - stellen Sie sicher, dass Sie Bilder, die zusammen verwendet werden sollen, zu demselben Atlas zusammenfassen. Andernfalls muss möglicherweise jeder Ziehungsaufruf von einem Atlas zum anderen wechseln, und die gesamte Übung wird ausgeführt gewinne dir nichts.
Maximus Minimus