Die neue Asset Import Pipeline: Solide Grundlage für die Beschleunigung von Anlagenimporten

Ab 2019.3 ist die neue Asset-Import-Pipeline der Standard für neue Projekte. Sie soll Ihnen durch schnellere Plattformwechsel Zeit sparen und die Grundlage für schnellere Importe schaffen. Wir verbessern auch die Skalierbarkeit der Asset-Pipeline für sehr große Projekte. Lesen Sie weiter, um mehr über die neuen Verbesserungen und unsere Beweggründe und Überlegungen zu erfahren. Wenn Sie ein neues Asset in Ihr Projekt einfügen, wird es erst dann Teil des Projekts, wenn die Asset-Import-Pipeline es entdeckt und importiert. Für die korrekte Erkennung des Projektstatus ist die Asset Import Pipeline zuständig, während Sie diesen Status über verschiedene APIs abfragen können. 2017 wurde die Asset-Import-Pipeline neu geschrieben, um den Weg für einen robusteren und skalierbaren Ansatz zu ebnen und gleichzeitig eine Reihe von Problemen zu beheben, die Sie in Ihren täglichen Arbeitsabläufen gemeldet haben. Mit Unity 2019.3 (jetzt in der Beta-Version verfügbar) wird die neue Asset Import Pipeline (auch bekannt als Asset Import Pipeline V2) die Standardimplementierung für neue Projekte sein. Ältere Projekte können ein Upgrade auf die neue Asset Import Pipeline vornehmen, um die Vorteile dieses neuen Systems zu nutzen. Jetzt ist ein guter Zeitpunkt, um einige der Überlegungen, die hinter der neuen Pipeline stehen, zu erläutern. Insbesondere möchten wir die Überlegungen mitteilen, die angestellt wurden, um sicherzustellen, dass das neue System mit den bestehenden APIs kompatibel ist, so dass Skripte nicht neu geschrieben werden müssen, wenn ein Upgrade auf die neue Asset Import Pipeline erfolgt.
Es gibt zahlreiche Arbeitsabläufe, die Teil eines täglichen Entwicklungszyklus sind. Wir haben die zeitaufwändigsten Probleme identifiziert und Lösungen für sie entwickelt. Der Import von Vermögenswerten kann viel Zeit in Anspruch nehmen. Die Konvertierung der Quelldaten in ein Format, das vom Unity-Editor oder einer Plattform verwendet werden kann, ist kein trivialer Prozess. Das Importieren eines komplexen 3D-Modells erfordert beispielsweise eine große Anzahl von Berechnungen, und in Verbindung mit einer Animation kann diese Zeit schnell ansteigen. Um dieses Problem anzugehen, müssen 3 Schlüsselkonzepte als Teil der Lösung in Angriff genommen werden:
Bei den meisten Arten von Assets muss Unity die Daten aus der Quelldatei konvertieren, abhängig von der Zielplattform für Ihre Projekte. Das Ergebnis ist je nach kompatiblen GPU-Formaten wie PVRTC, ASTC oder ETC unterschiedlich. Der Grund dafür ist, dass die meisten Dateiformate optimiert sind, um Speicherplatz zu sparen, während in einem Spiel oder einer anderen Echtzeitanwendung die Asset-Daten in einem Format vorliegen müssen, das von der Hardware, z. B. der CPU, Grafik- oder Audio-Hardware, sofort verwendet werden kann. Wenn Unity zum Beispiel eine PNG-Bilddatei als Textur importiert, werden zur Laufzeit nicht die ursprünglichen PNG-formatierten Daten verwendet. Wenn die Textur importiert wird, erstellt Unity stattdessen eine neue Darstellung des Bildes in einem anderen Format, das im Bibliotheksordner des Projekts gespeichert wird. Diese importierte Version wird von der Texturklasse in der Engine verwendet und für die Echtzeitdarstellung auf die GPU hochgeladen. Dies wird als Importergebnis bezeichnet.
Wir müssen wissen, dass Sie und ich beim Importieren die gleichen Importergebnisse im exakt gleichen Format erhalten, auch wenn wir unterschiedliche Hardware verwenden. Das Prinzip, dass für eine gegebene Eingabe die gleiche Ausgabe erfolgt, nennen wir Determinismus.
Die Asset-Import-Pipeline verfolgt alle Abhängigkeiten für jedes Asset und führt einen Cache mit den importierten Versionen aller Assets. Die Importabhängigkeiten eines Assets sind alle Daten, die das Importergebnis beeinflussen können. Das bedeutet, dass die zwischengespeicherte Version des importierten Assets veraltet ist, wenn eine der Importabhängigkeiten Ihres Assets geändert wird, und das Asset neu importiert werden muss, um diese Änderungen zu berücksichtigen.
Es gibt verschiedene Situationen, in denen die Einfuhr viel Zeit in Anspruch nehmen kann. Wir haben die folgenden zwei Arbeitsabläufe identifiziert und zwei Lösungen für die oben genannten Probleme implementiert: Frischer Projektimport und schnelle Plattformumschaltung.
Wenn Sie ein Projekt zum ersten Mal einrichten, ist es im Wesentlichen dasselbe, als wenn der Bibliotheksordner gelöscht wird. Das bedeutet, dass jedes Asset im Asset-Ordner von der Asset-Import-Pipeline aufgezählt und importiert werden muss. Das ist natürlich eine teure Angelegenheit. Indem wir jedoch sicherstellen, dass unser Importprozess deterministisch und rechnerübergreifend stabil ist, kann die Zeit, die für den Abruf von Importergebnissen benötigt wird, je nach Größe des Quell-Assets und der Größe des Importergebnisses um viele Größenordnungen reduziert werden. Wir erreichen dies, indem wir den neuen Unity Accelerator verwenden, der Importergebnisse von jedem, der mit ihm verbunden ist, in der Cloud zwischenspeichert. So können Sie die Importergebnisse direkt von einem Server herunterladen und müssen nicht die aufwändige Verarbeitung durchlaufen, die das Importieren eines Assets mit sich bringen würde.
Bis Unity 2019.2 (mit der ursprünglichen Asset-Import-Pipeline) bestand der Bibliotheksordner aus den GUIDs der Assets, die deren Dateinamen waren. Wenn Sie also von einer Plattform zu einer anderen wechseln, wird das Importergebnis im Bibliotheksordner ungültig, so dass es bei jedem Plattformwechsel neu importiert werden muss.

Wenn Sie mehrmals am Tag zwischen den Plattformen hin- und herwechseln müssten, könnte dies je nach Größe Ihres Projekts leicht Stunden in Anspruch nehmen.
Einige von Ihnen haben dafür eine Lösung gefunden, z. B. eine Kopie Ihres Projekts pro Plattform auf Ihrem Rechner, aber das lässt sich nicht sehr gut skalieren.
Mit der neuen Asset-Import-Pipeline haben wir die Zuordnung von GUID zu Dateinamen entfernt. Da die Abhängigkeiten für ein bestimmtes Asset nachverfolgt werden, können wir alle Abhängigkeiten zusammenführen, um eine Revision für das Importergebnis eines Assets zu erstellen. Dadurch können wir mehrere Revisionen pro Asset haben, was bedeutet, dass wir nicht mehr an eine Zuordnung von GUID zu Dateinamen gebunden sind. Ohne diese Anforderung können wir Importergebnisse haben, die mit verschiedenen Konfigurationen funktionieren. Für einen schnellen Plattformwechsel könnten wir ein Importergebnis pro Plattform bereitstellen, so dass das Importergebnis beim Hin- und Herwechseln zwischen den Plattformen bereits vorhanden ist, was den Plattformwechsel um Größenordnungen schneller macht als mit der Asset Import Pipeline V1.

Wenn Sie Änderungen an Assets vornehmen, erzeugt Unity eine Reihe neuer Dateien, die generiert werden. Dadurch wird mehr Speicherplatz auf Ihrer Festplatte benötigt. Wir haben uns jedoch entschlossen, dieses Problem zu lösen, indem wir unbenutzte Importergebnisse beim Neustart von Unity entfernen. Wir behalten das letzte Importergebnis pro Plattform im Auge, so dass ein schneller Plattformwechsel stattfinden kann, während ältere Importergebnisse entfernt werden, was Ihnen hilft, Speicherplatz freizugeben.
Die neue Asset Import Pipeline ist mit Unity 2019.3 beta verfügbar. Wenn Sie ein bestehendes Projekt haben, können Sie über das Projekteinstellungsfenster im Editor ein Upgrade auf die neue Asset-Import-Pipeline durchführen:


Wenn Sie Version 2 auswählen, teilen Sie dem Editor mit, dass Sie die neue Asset-Import-Pipeline zusammen mit diesem Projekt verwenden möchten, und wenn Sie Ihr Projekt neu starten, wird es mit dem neuen Code der Asset-Import-Pipeline erneut importiert. Dies hat im Wesentlichen die gleiche Wirkung wie das Löschen Ihres Bibliotheksordners, ohne ihn jedoch zu löschen. Bei der Umstellung auf Asset Import Pipeline V2 werden die Importergebnisse aus der ursprünglichen Asset Import Pipeline nicht gelöscht, da V2 eine eigene Ordnerstruktur zum Speichern der Importergebnisse erstellt.
Projekte, die Sie in Unity 2019.2 oder älter erstellt haben, verwenden weiterhin standardmäßig die ursprüngliche Asset-Import-Pipeline. Wenn Sie ein solches Projekt in Unity 2019.3 zum ersten Mal öffnen, erhalten Sie eine Option zum Upgrade auf die neue Asset-Import-Pipeline. Wenn Sie dies ablehnen, wird Ihr Projekt mit der ursprünglichen Asset-Import-Pipeline fortgesetzt. Außerdem wird die gewählte Version in der Datei EditorSettings.asset Ihres Projekts gespeichert, so dass eine Versionskontrolle möglich ist.

Bei der Erstellung eines neuen Projekts mit Unity 2019.3 oder einer neueren Version ist die neue Asset-Import-Pipeline die neue Standard-Arbeitsweise geworden. Alle neuen Projekte, die Sie erstellen, werden es verwenden.
Auf der Unite Copenhagen 2019 hat unser Team zwei Vorträge gehalten. Mein Vortrag ist eine allgemeine Einführung in die in diesem Blogbeitrag behandelten Themen und kann Ihnen als Entscheidungshilfe für Ihre eigenen Vermögensverwaltungsstrategien dienen. Mein Kollege Jonas Drewsen sprach über die kommenden Funktionen, die darauf abzielen, die Asset-Pipeline besser erweiterbar zu machen und die Projektstabilität zu gewährleisten:
Holen Sie sich die Unity 2019.3 Beta und testen Sie die neue Asset Import Pipeline. Wir freuen uns darauf, Ihre Meinung im Forum zu erfahren! Sie können mich auch über Twitter erreichen, wenn Sie weitere Fragen haben.
