Verwenden eines Texturatlas zur Optimierung Ihres Spiels

Zeit. Monate Vielleicht Jahre. Sie haben (viel Zeit) Ihre Zeit verbracht, um Ihr Spiel zu erstellen. Klein oder groß, egal. Es ist dein Spiel und jetzt möchtest du es mit der ganzen Welt teilen - und vielleicht berühmt und reich werden *. Es ist perfekt: Die Kunst ist gut und Sie sind sehr stolz auf Ihre Idee im Spiel. Dein Spiel.

Aber es gibt noch eine letzte Frage, die Sie betreffen Muss Auflösung vor der Veröffentlichung. Nein, kein einfaches Problem. Die Angelegenheit: Die Framerate Ihres Spiels ist niedrig. Sehr niedrig. Und das bedeutet nur eines: Sie müssen einen Weg finden, um das Problem zu beheben. Du musst Und du hast keine Ahnung wie.

Keine Panik: Es gibt einen einfachen Trick, der Ihnen helfen kann. Es heißt "Texture Atlas".

* Wenn Sie dank dieses Artikels reich werden, erinnern Sie sich bitte an mich. Ich danke dir sehr!

Was ist ein Textur-Atlas??

Wenn Sie sich zum ersten Mal der Entwicklung eines 3D-Videospiels nähern, werden Sie feststellen, dass 3D-Grafiken aus mehreren Teilen bestehen: 3D-Netze, Texturen, Partikelsysteme und viele andere Elemente, die normalerweise auf dem Bildschirm gezeichnet werden 30 Mal pro Sekunde (im Slang: 30 Bilder pro Sekunde) während des Rendervorgangs, wodurch die Welt des Spiels abwechslungsreich und lebendig wird.

Ob Sie es glauben oder nicht, die ersten 3D-Videospiele, die ich in meinem Leben gesehen habe, hatten keines dieser Elemente. Sie bestanden nur aus Linien, die Objekte oder Elemente im 3D-Drahtgitter bildeten.

Wenn ich das schreibe, fühle ich mich auf jeden Fall alt.

Zurück zu uns (in der Tat zu Ihnen) und zu den wichtigen Dingen, sprechen wir heute über die Texturen der Benutzeroberfläche (nachstehend "Benutzeroberfläche") und im weiteren Verlauf über alle Texturen im Spiel.

In einem 3D-Spiel besteht die Benutzeroberfläche normalerweise aus 3D-Elementen (z. B. Ebenen oder Boxen) mit Texturen.

Wir haben vor dem Rendering erwähnt: Es ist die Operation, mit der die Elemente im Speicher physisch auf dem Bildschirm gezeichnet werden. Dies ist einer der komplexesten und teuersten Prozesse, die in einem Echtzeit-3D-Spiel auftreten. Dann ist jedes Mittel zur Verringerung der Zeit, die dieser Prozess benötigt, willkommen. Weniger Zeit in der Renderphase bedeutet eine höhere Framerate (dh wenn Sie die 60 Bilder pro Sekunde erreicht haben, können Sie das Bild zweimal rendern und dann daran denken, Ihr Spiel auch für VR zu entwickeln) oder mehr Bildschirmelemente (und ein reichhaltigeres Spiel, mehr) animiert, schöner).

Eine Möglichkeit, die Dauer des Rendervorgangs zu verkürzen, ist ein Texturatlas: Er ist nichts weiter als ein Bild, das viele Texturen enthält.

Wie funktioniert ein Textur-Atlas?

Hinweis: Wie im vorherigen Absatz erwähnt, wird in diesem Artikel der auf die Benutzeroberfläche angewendete Texture Atlas erläutert. Viele der hier erläuterten Konzepte lassen sich jedoch auch auf 3D-Modelle und deren Texturen anwenden.

Ein Textur-Atlas ist eine Sammlung von Texturen in einem einzigen Bild.

Ein Atlas ist normalerweise mit einem Dateideskriptor verknüpft, der dem Spiel anzeigt, wo sich eine Textur befindet (in bestimmten X- und Y-Koordinaten), um diese abzurufen.

Abhängig von dem System, das Sie zum Erstellen und Verwalten des Atlas verwenden, stehen Ihnen mehr oder weniger Optionen zur Verfügung, z. B. der Abstand zwischen den Bildern, aus denen sich der Atlas zusammensetzt. Dadurch wird das Risiko von Artefakten an den Kanten der Textur verringert, die durch eine Überlappung entstehen von zwei Elementen) oder die Möglichkeit, die Elemente zu drehen, um den Raum im Atlas zu optimieren (mehr Platz bedeutet mehr Bilder im selben Atlas).

Verschiedene Möglichkeiten zum Erstellen eines Texturatlas

Es gibt verschiedene Möglichkeiten, einen Atlas zu erstellen. Eine vollständige Entwicklungsumgebung ermöglicht normalerweise die interne Verwaltung des Atlas. Es gibt auch viele externe Tools, die viele zusätzliche Optionen bieten.

Die Wahl des zu verwendenden Systems hängt natürlich von Ihren persönlichen Vorlieben ab. Hier erklären wir zwei von ihnen: Sprite Packer (intern zu Unity) und TexturePacker (ein eigenständiges Tool gegen Gebühr)..

Sprite Packer

Um Sprite Packer zu öffnen, wählen Sie aus dem Menü Fenster> Sprite Packer.

Die Verwaltung ist sehr einfach: Mit der Schaltfläche Pack können Sie eine oder mehrere Atlanten erstellen (abhängig von der Anzahl Ihrer Bilder und der gewünschten Atlas-Dimension)..

Jetzt können Sie ein Bild auswählen, um zu sehen, wo es sich im Atlas befindet. Wenn Sie Bilder zu Ihrem Projekt hinzufügen oder daraus entfernen, müssen Sie die Schaltfläche Repack verwenden, um den Atlas zu aktualisieren.

Um den Sprite Packer zu konfigurieren, können Sie aus dem Menü auswählen Bearbeiten> Projekteinstellungen> Editor; Hier können Sie den Atlas deaktivieren, nur für das erstellte Spiel aktivieren oder immer aktivieren.

Weitere Informationen zu Sprite Packer finden Sie im offiziellen Leitfaden.

Textur-Packer

Texture Packer ist ein Standalone-Tool zum Verwalten von Atlas.

Sie können einen oder mehrere Ordner aus Ihrem Projekt hinzufügen, und Texture Packer erstellt den Atlas.

Danach können Sie das Datenformat für den Export auswählen. Wie Sie sehen, gibt es auch die Option "JSON für Unity". Das bedeutet, dass Sie Ihren Atlas für Ihr Unity-Projekt exportieren können. Um sie jedoch zusammen verwenden zu können, müssen Sie eine kostenlose Editorerweiterung aus dem Asset Store installieren.

Weitere Informationen zu Texture Packer finden Sie im offiziellen Leitfaden.

Warum ist die Verwendung eines Texturatlas wichtig??

Warum ist es jedoch so wichtig, mehrere Bilder in einem einzigen größeren Bild zusammenzufassen??

Lassen Sie uns noch einen Moment zum Rendering-Vorgang zurückkehren: Wenn jedes Element der Benutzeroberfläche eine eigene Textur hat, wird es mit einem separaten "draw-Aufruf" gezeichnet. Das bedeutet, wenn wir in unserer Benutzeroberfläche das Symbol der Herzen (die die Energie des Spielers darstellen) und das Symbol der gesammelten Münzen haben, werden wir zwei Draw-Aufrufe haben.

Jeder Zeichnungsaufruf dauert einige Zeit, um den Rendervorgang zu verlängern. Wenn fünf Elemente der Benutzeroberfläche vorhanden sind (anstelle von zwei Elementen wie im obigen Beispiel), gibt es fünf Draw-Aufrufe.

Beginnen Sie, den Punkt zu sehen?

Mehr Draw Calls -> mehr Zeit während der Renderphase -> weniger Fps -> Spiel mit niedriger Framerate (mit einigen Frames) oder weniger Elementen auf dem Bildschirm (dann optisch schlecht).

Das Verschwenden von Draws auf diese Weise ist, wenn keine besonderen Gründe vorliegen, insbesondere für die Benutzeroberfläche nicht sinnvoll.

Tatsächlich werden alle Texturen in einem Atlas in einem einzigen Durchgang zusammen gerendert.

Fazit

Zusammenfassend, insbesondere wenn Sie ein Spiel auf einer Plattform entwickeln, auf der Leistung wirklich wichtig ist (z. B. einer mobilen Plattform):

  • Sie müssen auf die Anzahl der Draw-Aufrufe achten: Mehr Draw-Aufrufe bedeuten eine höhere Renderzeit (und eine höhere Renderzeit bedeutet das Risiko einer niedrigen Bildrate)..
  • Im Allgemeinen kann jedes Objekt mit einer anderen Textur einen einzelnen Zeichnungsaufruf generieren (es ist eine generische Anweisung: Es gibt einige Ausnahmen, insbesondere bei 3D-Objekten)..
  • Eine Möglichkeit, die Anzahl der Draw-Aufrufe zu verringern, ist die Verwendung eines Texturatlas.
  • Ein Textur-Atlas ist im Grunde eine große Textur mit einer Gruppe unterschiedlicher Texturen.
  • Alle Objekte, die denselben Texturatlas verwenden, generieren einen einzelnen Zeichnungsaufruf.
  • Die Verwendung eines Texturatlas ist insbesondere für UI-Texturen ein Muss, um die Leistung Ihres Projekts zu verbessern.

Und… möge die Macht mit dir sein. Und dein Code. Immer.