Die kürzlich veröffentliche Version 5.1 von Unreal Engine führte eine neue Funktion für schnellere, kleinere Datensynchronisation ein: Virtuelle Assets.
„Virtuelle Assets“ befinden sich aktuell in der Beta-Phase und bieten eine Möglichkeit, Metadaten von den Objektdaten zu entkoppeln, sodass Entwickler jetzt nur das synchronisieren müssen, was Sie aus Source-Control-Systemen wie Perforce benötigen. Das führt bei Entwicklern, die keinen Zugriff auf die kompletten Objektdaten benötigen, zu kleineren Arbeitsbereichen und einer schnelleren Synchronisation.
In diesem Tech-Blog geben Ihnen Grace Yen, Senior Product Manager, und Paul Chipchase, Lead Developer für „Virtuelle Assets“, aus dem Unreal-Engine-Team einen detaillierten Überblick über die Funktion, damit Sie ein genaues Bild davon bekommen, ob sie etwas für Ihr Projekt ist.
Welche Probleme soll „Virtuelle Assets“ lösen?
Im Laufe der letzten Generationen der Spieleentwicklung haben wir einen interessanten Datentrend bei der Projektgröße bemerkt. Die Projekte werden nicht nur immer größer (wir haben einige unserer Lizenznehmer informell dazu befragt), sondern viele Entwickler gehen auch dazu über, Games as a Service (GaaS) anzubieten, wofür kontinuierliche Updates über Jahre hinweg nötig werden.
Wir haben auch festgestellt, dass Teams ihre Verbreitungsmethoden von Aktualisierungen ständig weiterentwickeln. Einige Teams nutzen „Feature-Streams“, um zu verhindern, dass brandneue Funktionen den Rest des Entwicklerteams beeinträchtigen, bis sich die Qualität auf akzeptablem Niveau stabilisiert hat und bereit für die Veröffentlichung ist.
Wir haben Teammitglieder dabei beobachtet, wie sie zwischen Veröffentlichungszyklen ihrer Produkte an Projekten gearbeitet haben (um etwa Live-Services zu unterstützen), und haben Modelle mit Haupt- und erweiterten Entwickler-Arbeitsstreamtypen gesehen.
Das stellt eine weitere Herausforderung dar, weil Teammitglieder den Speicherplatz ihrer SSDs rasch ausschöpfen und teilweise verschwenderische Entscheidungen treffen müssen, um etwa Workstreams aus der Synchronisation zu nehmen, obwohl die schon bald wieder gebraucht werden, um Platz für ihre aktuelle Arbeit zu schaffen.
Vor der Pandemie sahen sich einige Studios (unseres eingeschlossen) mit immer größeren Problemen bei Synchronisationsumfang und Synchronisationszeiten konfrontiert. Wir haben Lösungen dafür entwickelt, darunter Performance-Edge-Server, die Nutzern schnellere Zugriffspunkte bieten. Als wir aber im Laufe der Pandemie zur Arbeit von zu Hause gezwungen waren, mussten wir schmerzhaft erkennen, dass viele Mitarbeiter keine stabile Internetverbindung hatten oder die Geschwindigkeiten ihrer Verbindungen extrem unterschiedlich waren.
Die Zusammenstellung der besten Teams bedeutet heute, dass sich die einzelnen Mitglieder öfters an verschiedenen Orten befinden. Wir gehen davon aus, dass diese Dynamik weiterhin bestehen bleibt. Selbst im hybriden Szenario, bei dem Teammitglieder an zwei Orten arbeiten, kann es passieren, dass die Synchronisation mehrfach auf die jeweiligen Geräte vor Ort stattfinden muss.
Mit leistungsfähiger Technologie wie Nanite, dem virtualisierten Geometriesystem von UE5, mit dem pixelgenaue Details in großen Objektzahlen erreicht werden sollen, wird die Größe der Projekte in Zukunft noch weiter zunehmen.
Zusammenfassend lässt sich sagen, dass die Leute immer mehr Zeit und Speicherplatz für die Synchronisation aufwenden müssen, weil:
Projekte größer werden
Spiele längere Lebenszyklen haben und daher immer mehr Inhalte hinzugefügt werden
Das Problem verschärft sich noch durch:
Teams, die mehrere Workstreams synchronisieren müssen, zum Beispiel Funktionsveröffentlichungen oder die Verwaltung von Live-Services
Physische Hardware (z. B. SSDs) teurer werden und schwieriger und zeitaufwendiger in der Beschaffung sind
Größere Teams die effiziente Zusammenarbeit erschweren
Hybride Arbeitsmodelle und Fernarbeit die Synchronisation erschweren
Teams vermehrt auf Nanite setzen, um die visuelle Qualität zu steigern, was aber zu größeren Datensets führt
Welchen Ansatz verfolgt Epic mit „Virtuelle Assets“?
Unser Ansatz für „Virtuelle Assets“ basiert auf der Idee, dass Sie nur das synchronisieren sollten, was Sie wirklich brauchen, und das Daten, die Sie vielleicht später benötigen, schnell zugriffsbereit sein sollten.
Das könnte eine Abkehr von dem System darstellen, mit dem Teams das Problem bisher umgangen haben. Teams (einschließlich unseres) sind mittlerweile sehr gut darin, Entwicklern beizubringen, Synchronisationen über Nacht laufen zu lassen, um Arbeitsausfallzeiten zu minimieren. „Virtuelle Assets“ wird daran nichts ändern. Die Funktion bietet allen einen schnelleren, effizienteren Weg, Daten zu synchronisieren, wenn man den Prozess nicht im Voraus planen kann, beispielsweise beim Auftreten dringlicher Probleme in einem Workstream, der nicht schon auf dem neuesten Stand ist.
Wir haben unsere Paketdateien (.umap, .uasset) genauer betrachtet und enorme Einsparmöglichkeiten bei den Datenmengen entdeckt, die Benutzer synchronisieren müssen. Oftmals brauchen Benutzer nur gerade so viele Daten, um ein Asset auf erkennbare Weise im Editor anzuzeigen. Im Falle von Texturen wären das beispielsweise ein Vorschaubild und Editor-Eigenschaften wie Koordinaten und Skalierung. Aber die meisten Daten eines UTexture-Objekts gehen für die originalen Pixelrohdaten drauf, die man gar nicht im Voraus benötigt. Basierend auf dieser Erkenntnis haben wir die Assets im Hintergrund in zwei Teile aufgespalten:
Die Strukturdaten bleiben wie gehabt im Asset in der Source Control erhalten. Darin sind alle Informationen enthalten, die der Editor zum Laden und Darstellen des Assets benötigt.
Die Bulk-Daten sind Informationen, die Sie wahrscheinlich nicht benötigen – deshalb wurden sie in einen separaten Bereich in Source Control abgespalten.
Ein grundlegender Anspruch bei der Entwicklung von „Virtuelle Assets“ war es, dass Benutzer ihre bestehenden Arbeitsabläufe beibehalten können. Teams sollten wie bisher synchronisieren und arbeiten können, aber das noch schneller. Durch das Abtrennen der Kern-Metadaten der Assets und der Beibehaltung des originalen Quellspeicherorts ist es Benutzern möglich, Daten wie bisher zu synchronisieren. Das Programm übernimmt im Hintergrund die Arbeit, die Bulk-Daten vom neuen Quellspeicherort abzurufen, wenn sie benötigt werden. Für die Umsetzung müssen Sie mit Ihrem Source-Control-Admin zusammen einen separaten Speicherort einrichten, der dieselben Zugriffsberechtigungen wie der originale Source-Control-Speicherort hat.
Zusammenfassung:
Wir teilen Assets auf, sodass Bulk-Daten an einem anderen Source-Control-Speicherort gespeichert werden.
Benutzer arbeiten wie gewohnt, aber synchronisieren häufig nur kleinere Kern-Metadaten von Assets.
In den seltenen Fällen, in denen sie die Bulk-Daten des ganzen Assets benötigen, werden diese nach Bedarf abgerufen.
Wie kann ich „Virtuelle Assets“ nutzen?
Momentan befindet sich „Virtuelle Assets“ in der Beta-Phase. Sie können die Funktion also wunderbar ausprobieren, aber da wir immer wieder Veränderungen vornehmen können, sollten Sie die Funktion in Produktionsprojekten mit Vorsicht einsetzen. Hier möchten wir allerdings anmerken, dass die Funktionsentwicklung bereits so weit fortgeschritten ist, dass sie für die Produktion von Fortnite seit der Saison 22 eingesetzt wird.
Wir bieten mehrere Modi an, um Teams bei der Einführung von „Virtuelle Assets“ zu unterstützen.
Abhängig von der Projektgröße und Ihrem Produktionsplan können Sie unterschiedliche Ansätze ausprobieren. Zum Beispiel:
Für den Start eines neuen Projekts empfehlen wir, „Virtuelle Assets“ direkt zu aktivieren.
Für ein bereits in der Produktion befindliches Projekt sollten Sie die Funktion nicht für Spielbereiche oder Assets nutzen, an denen Sie sehr oft arbeiten. Probieren Sie die Funktion lieber an großen Assets aus, die Sie schon länger nicht mehr bearbeitet haben.
Oder nutzen Sie die Funktion für wichtige Assets, die Sie nach ihrer Größe sortiert haben, und virtualisieren Sie diese als sinnvolle Testobjekte.
Folgendes sollten Sie dabei beachten:
Wir haben zwar noch keinen Offline-Modus implementiert, aber uns ist bewusst, dass dies eine nützliche Funktion ist. Daran werden wir als Nächstes arbeiten und er wird wohl mit der Version 5.2 erscheinen. Das heißt aber, wenn Sie Benutzer haben, die ohne eine Internetverbindung arbeiten (z. B. im Flugzeug), dann wird „Virtuelle Assets“ für sie nicht richtig funktionieren. Sie können an Orte kommen, wo sie Bulk-Daten für etwas, das sie bearbeiten wollen, nicht abrufen können. Der Editor sollte nicht abstürzen, aber sie müssen erst eine Internetverbindung herstellen, um die benötigten Bulk-Daten abzurufen.
Die Primärdaten werden aufgespalten. Für die Produktion sollte das kein Problem sein, aber Sie müssen dies bedenken, wenn Sie Inhaltsdaten Ihres Spiels außerhalb Ihrer bestehenden Infrastruktur veröffentlichen möchten. In dem Fall können Sie „UnrealVirtualizationTool“ nutzen, um Ihre virtualisierten Assets wieder in ihre originale Form zu vereinen. Dazu werden die Bulk-Daten wieder in der Paketdatei gespeichert.
Dieser Ansatz funktioniert aber nur gut, wenn die Benutzer über eine ausreichend leistungsfähige Internetverbindung auf den geteilten Datenspeicher zugreifen können. Ist das nicht der Fall, könnten spürbare Ruckler auftreten und es wäre besser für Ihre Benutzer, die Synchronisation vorher durchzuführen. Mehr dazu erfahren Sie im nächsten Abschnitt.
Aktuell unterstützen wir nur Source Control mit Perforce.
Die Technologie befindet sich noch in der Beta-Phase. Obwohl wir die Funktion intern bereits stark nutzen und aktuell an ihr arbeiten, können wir keine Garantien darüber geben, wann „Virtuelle Assets“ in einer produktionsreifen Version erscheint und wie die Funktion in Zukunft unterstützt werden wird.
Eignet sich „Virtuelle Assets“ für mein Projekt?
Auf die Frage, ob „Virtuelle Assets“ für Ihr Projekt nützlich sein kann, gibt es keine allgemeingültige Antwort, da viele verschiedene Faktoren eine Rolle spielen. Folgende Fragen sollten Ihnen aber bei der Entscheidung helfen, ob die Funktion eine sinnvolle Lösung für Sie sein kann. Hier sei noch gesagt, dass Virtualisierung keine Einbahnstraße ist. Sie können Ihre virtualisierten Daten jederzeit wieder vereinen.
Beeinträchtigt Speicherplatzknappheit aktuell die Arbeit Ihres Teams oder sehen Sie durch stetigen Datenzuwachs in absehbarer Zukunft das Auftreten solcher Probleme?
Müssen Ihre Teammitglieder häufig mehr als eine Version Ihres Projekts synchronisieren und allgemein große Datenmengen für verschiedene Versionen teilen?
Haben Ihre Teammitglieder Zugang zu einem guten, gemeinsam genutzten abgeleiteten Daten-Cache (ADC)?
Das ist eine schwierige Frage. Falls die meisten Teammitglieder Zugang zu einem gemeinsam genutzten ADC haben und nur einige wenige Mitglieder nicht, dann können Sie „Virtuelle Assets“ für das ganze Projekt aktivieren und bestimmten Teammitgliedern erlauben, die Funktion zu deaktivieren. Sie werden dann beim Einchecken Assets „entvirtualisieren“. Sie können das mit Skripten erkennen und automatisch beheben lassen, allerdings kann das die Source Control beeinträchtigen.
Tipps zur maximalen Ausnutzung aller Vorteile von „Virtuelle Assets“
Wir empfehlen Ihnen, die Arbeitsabläufe zum Einchecken im Unreal Editor zu verwenden. Bei diesen Arbeitsabläufen sind Prüfungen integriert, die sicherstellen, dass Ihre Assets beim Einchecken virtualisiert sind. Wir haben natürlich auch Funktionen in Perforce, mit denen die Virtualisierung von Assets überprüft werden kann, aber da besteht die Chance, dass Benutzer diese umgehen und überspringen.
„Virtuelle Assets“ in Aktion
Wie so oft wollen wir bei der Einführung neuer Funktionen gerne selbst unsere ersten Nutzer sein, die sozusagen „den verzapften Mist ausprobieren“. Neben der Aktivierung von „Virtuelle Assets“ für interne und Beispielprojekte verwenden wir die Funktion auch für Fortnite. Die gezeigten Zahlen haben nur illustrativen Charakter, um Ihnen eine Vorstellung davon zu geben, wie viel Speicherplatz und Zeit wir bei Fortnite einsparen konnten. Die Werte werden bei Ihren Projekten anders aussehen, da sie von den verwendeten Assets in Ihrem Projekt abhängen. Wir haben die Funktion zum Beispiel für Valley of the Ancient eingesetzt (was keinesfalls ein echtes Spiel darstellt). Aufgrund des massiven Einsatzes von Nanite-Meshes konnten wir gewaltige Datenmengen (etwa um den Faktor 50) einsparen.
Für Fortnite haben wir Folgendes gemessen:
Ausblick auf die Zukunft
„Virtuelle Assets“ in Unreal Engine 5.1:
Funktioniert mit Perforce
Unterstützt Textur- und Ton-Assets
Bietet verschiedene Aktivierungsmodi (nach Asset-Typ, Paketpfad oder für alles)
Referenziert Bulk-Daten für Asset-Inhalte mit Hash-Werten
Wir haben noch viel vor mit „Virtuelle Assets“, darunter:
Offline-Modus (zur Synchronisation aller Daten im Voraus)
Unterstützung für weitere Asset-Typen (z. B. statische Meshes, einschließlich Nanite)
Unterstützung anderer Source-Control-Lösungen
Und das ist schon alles. Wir hoffen, der Tech-Blog war nützlich für Sie. Wenn Sie noch mehr über „Virtuelle Assets“ herausfinden möchten, sehen Sie sich gerne unsere Dokumentation an.
Sichern Sie sich die Unreal Engine noch heute!
Sichern Sie sich das offenste und fortschrittlichste Werkzeug der Welt.
Die Unreal Engine wird mit allen Funktionen und vollem Zugriff auf den Quellcode geliefert und ist sofort einsatzbereit.