Was ist Mutable?
Mutable ist ein Werkzeugsatz für die Unreal Engine, der dynamische Skelett-Meshs, Materialien und Texturen im Editor oder zur Laufzeit generiert. Es wurde entwickelt, um Künstlern und Designern bei der Erstellung von Charakter-Anpassungssystemen zu helfen, kann aber auch verschiedene dynamische Inhalte wie Tiere, Requisiten und andere Skelett-Mesh-Assets generieren.
Mutable wurde für einen effizienten In-game-Einsatz entwickelt; es eignet sich jedoch auch als Inhaltspipeline-Werkzeug für Projekte, die die Flexibilität benötigen, viele Skelett-Mesh-Varianten im Unreal Editor zu erstellen.
Mutable wurde mit folgenden Zielen entwickelt:
Unterstützung für umfassende Anpassungen mit vielen Parametern und Texturebenen.
Unterstützung für komplexe Mesh-Interaktionen.
Unterstützung für Textureffekte, die nicht GPU-performant sind, wie Wrapping-Projektionen und viele Planarprojektionen.
Speichernutzung optimieren
Shader-Kosten verringern.
Draw-Aufruf-Anzahl reduzieren.
Die Verwendung von Mutable verschiebt einen Teil der CPU- und Speicherkosten auf den Zeitpunkt der Charaktergenerierung. Charaktere werden im Hintergrund unter Verwendung von CPU-Ressourcen und Speicher erstellt und verbrauchen nach der Erstellung nur die Ressourcen eines vorgenerierten Skelett-Mesh.
Mutable-Funktionen
Mutable bietet folgende Funktionen:
Allgemein
Flexible Parametersysteme verbinden anpassbare Objekte mit unterschiedlichen Effekten.
Teilt anpassbare Charaktere in mehrere Assets auf, um die gleichzeitige Arbeit von Künstlern zu ermöglichen.
Mesh
Entfernt versteckte Teile, um die Performance zu maximieren und Z-Fighting zu vermeiden.
Bakt Morphs bei der Charaktergenerierung.
Führen Sie Meshs zusammen, um die Anzahl der Draw-Aufrufe zu verringern.
Verformt Meshs basierend auf Interaktionen zwischen Charakterteilen.
Texturen
Bakt Texturbilder zur Laufzeit und kombiniert mehrere Effekte.
Unterstützt mehrere Arten von Projektoren: planare, zylindrische und Wrapping.
Unterstützt mehrere Texturüberblendmodi: Multiplizieren, Weiches leicht, Hartes Licht, Nachbelichten, Abwedeln usw.
Verwaltet UV-Layouts, um unnötige Texturteile dynamisch zu entfernen.
Animation und Physik
Kombiniert Animationsdiagramme von mehreren Teilen.
Führt und Kollisions-Physik-Assets und Meshs zusammen und verformt sie.
Verwaltet Stoffsimulationsdaten bei der Charaktergenerierung.
Performance
Flexible Instanzierung angepasster Charaktere.
Unterstützt LOD-Verwaltung zur Laufzeit.
Unterstützt mehrere Zustände zur Anpassung der Charaktergenerierung an verschiedene Anwendungsfälle.
Unterstützt Textur-Streaming mit On-Demand-Generierung.
Anpassbare Objekte und Actor
Das folgende Diagramm zeigt, wie Meshs, Texturen und Materialien für die Charakteranpassung verwendet werden. Die Hauptkonzepte des Systems sind CustomizableObject-Assets, CustomizableObjectInstance-Assets sowie Actor mit speziellen Komponenten, die diese Assets verwenden.
Mutable verwendet CustomizableObject-Assets, CustomizableObjectInstance-Assets und Actor mit speziellen Komponenten, um die finalen Assets zu erstellen.
Anpassbare Objekte
Anpassbare Objekte sind ein neuer Asset-Typ, der zur Unreal Engine hinzugefügt wurde. Sie repräsentieren Objekte, die mit Mutable angepasst werden können. Er umfasst alle möglichen Varianten, die darauf angewendet werden können. Er definiert die Parameter, die in der Laufzeit vom Spieler oder Spielcode gesteuert werden und wie sie die finalen Objekte beeinflussen.
Sie können anpassbare Objekte über die Inhalts-Schublade oder den Inhaltsbrowser erstellen, indem Sie auf das Menü Neu hinzufügen klicken:
Erstellen eines anpassbaren Objekts.
Parameter
Ein anpassbares Objekt enthält mehrere Parameter, die während der Laufzeit geändert werden können. Es gibt verschiedene Arten von Parametern:
Schiebereglerparameter: Numerische Parameter mit Dezimalstellen im Bereich von 0,0 bis 1,0. Diese werden in der Regel explizit durch einen Knoten-Float-Parameter erstellt und für kontinuierliche Effekte wie Textureffekte oder Mesh-Morphs verwendet.
Enumerationsparameter: Repräsentiert eine Option aus einer vordefinierten Optionsgruppe. Diese können von einer Knoten-Objekt-Gruppe erstellt werden, um ein Child-Objekt auszuwählen, oder vom Knoten-Enum-Parameter, um eine Option oder mehrere Knoten-Schalter auszuwählen.
Kontrollkästchen Parameter: stellt zwei Möglichkeiten dar, die entweder aktiviert oder deaktiviert sind. Diese werden von einer Knoten-Objekt-Gruppe erstellt, wenn der Gruppentyp „Jeden umschalten“ ist.
Farbparameter: Repräsentiert eine Farbe mit Alpha-Kanal unter Verwendung eines Vektors aus vier numerischen Float-Werten im Bereich zwischen 0,0 und 1,0. Diese werden vom Knoten-Farbe-Parameter erstellt.
Projektor-Parameter: Repräsentiert einen Projektor, dessen Position zur Laufzeit geändert werden kann. Diese werden mit dem Knoten-Projektor-Parameter erstellt.
Anpassbare Objektinstanz
Die Anpassbare Objektinstanz ist ein neuer Asset-Typ, der mit Mutable verwendet wird. Sie stellt die Instanz eines CustomizableObjects dar, einer Gruppe von Parametern, die auf das CustomizableObject angewendet werden, um ein angepasstes Asset zu erstellen. Wenn Sie zum Beispiel ein CustomizableObject für Banditen haben, ist jeder einzigartige Bandit, den Sie daraus erstellen, eine CustomizableObjectInstance.
Um ein Instanz-Asset aus einem anpassbaren Objekt zu erstellen, klicken Sie mit der rechten Maustaste auf Ihr anpassbares Objekt und wählen Sie Neue Instanz erstellen:
Erstellen einer neuen anpassbaren Objektinstanz.
Mutable-Editoren
Editor für anpassbare Objekte
Mit einem Doppelklick auf ein anpassbares Objekt öffnen Sie den Editor für anpassbare Objekte:
Der Editor für anpassbare Objekte.
Das Interface enthält die folgenden Panels:
Quelldiagramm: Enthält die Blueprint-Knoten, welche die Struktur des CustomizableObject definieren, einschließlich seiner LOD-Einstellungen, Mesh-Sektionen, Meshs, Texturen, Parameter und der Effekte, die diese verbinden.
Objekteigenschaften: Enthält die allgemeinen Eigenschaften des Objekts.
Knoteneigenschaften: Enthält die Eigenschaften des ausgewählten Knotens.
Vorschau-Instanz-Viewport: Zeigt die 3D-Vorschau, wenn ein Objekt geöffnet und kompiliert ist.
Vorschau-Instanz-Parameter: Zeigt die aktuellen Parameter des Vorschauobjekts an. Sie können hier direkt angepasst werden. Sie kann auch die aktuelle Instanz in einen Satz von Standard-Assets der Unreal Engine „baken“. Siehe Baken von Instanzen für weitere Details.
Die Editor-Werkzeugleiste enthält die folgenden Elemente:
Speichern: Speichert das aktuelle Objekt.
Kompilieren: Kompiliere das aktuelle Objekt mit allen seinen Children und aktualisiere die Vorschau. Dies ist erforderlich, um Änderungen im Diagramm widerzuspiegeln. Weitere Informationen zum Kompilieren und seinen Optionen finden Sie unter Performance-Optimierung.
Nur ausgewählte kompilieren: Kompiliert nur das aktuelle Objekt und die in der Vorschau gezeigten Children. Dies ist nützlich für eine schnellere Iteration, wenn das anpassbare Objekt sehr groß ist.
Texturspeicher-Analysierer: Öffnet ein Werkzeug-Panel, das die resultierenden Texturen des Vorschau-Objekts und seine Details (z. B. endgültige Größe, Format und Speicherverwendung) anzeigt.
Performance-Analysierer: Öffnet ein Werkzeug-Panel, das das aktuelle Objekt bewertet, indem es viele zufällige Instanzen generiert und relevante Messwerte wie die Dreieckszahl oder die Generierungszeit anzeigt.
Editor für anpassbare Objektinstanzen
Der Editor für anpassbare Objektinstanzen wird verwendet, um CustomizableObjectInstances anzuzeigen und zu modifizieren. Er hat nur zwei Panels und ähnelt den Panels Vorschau und Knoten-Eigenschaften im Editor für anpassbare Objekte.
Objekthierarchie
Objekte
Mutable organisiert jedes anpassbare Objekt in einer Hierarchie. Jedes Objekt hat einen Stammknoten, der mit allen anderen Knoten verbunden ist. Diese Knoten stehen für Komponenten, Meshs, Materialien, Texturen und Parameter. Jedes Objekt kann eine beliebige Anzahl an Child-Objekten haben. Ein Child kann:
Dem finalen Objekt neue Meshs und Mesh-Sektionen hinzufügen
Ein Mesh erweitern, das bereits in einem anderen Objekt vorhanden ist
Einen Teil des Meshs in einem anderen Objekt entfernen
Die Texturen eines Materials in ein anderes Objekt einfügen
Benutzerdefinierte Tags aktivieren, die in gleichrangigen Objekten verwendet werden können, um verschiedene Effekte anzuwenden.
Child-Objekte können zugleich ihre eigenen Child-Objekte in einer unbegrenzten Hierarchie haben.
Gruppen
Child-Objekte können in Gruppen organisiert werden. Gruppen definieren die Logik zwischen dem Objekt und seinem Parent in Bezug darauf, wie die Child-Objekte aktiviert werden. Zum Beispiel können alle T-Shirt-Children mit einem Objektparameter gruppiert werden, der es den Benutzern nur erlaubt, jeweils eines davon oder gar keines auszuwählen.
Hier sind zwei Child-Objekte, die durch eine Gruppe verbunden sind:
Jede Gruppe hat einen Typ, der einer der folgenden sein kann:
Umschalten: Die Child-Objekte werden als umschaltbare Optionen angezeigt.
Mindestens eine Option: Ein einzelnes Child-Objekt muss ausgewählt werden.
Keins oder eins: Ein einzelnes Child-Objekt kann ausgewählt werden.
Alle Optionen: Alle Children des Objekts sind immer aktiv. Verhält sich so, als ob sich die Children direkt mit dem Parent verbinden.
Actor-Komponenten
Ein einziges CustomizableObject kann mehrere Actor-Komponenten erzeugen. Parameter können sich auf mehrere Komponenten gleichzeitig auswirken, aber können diese auch bedingt umschalten. Informationen zur Erstellung mehrerer Komponenten finden Sie in der Komponenten-Knoten-Referenz.
Referenz-Skelett-Mesh
Mesh-Komponenten-Knoten haben eine Eigenschaft namens Referenz-Skelett-Mesh. Das ist ein Standard-Skelett-Mesh der Unreal Engine und wird aus folgenden Gründen genutzt:
Alle Skelett-Meshs, die für diese Komponente in CustomizableObject-Instanzen generiert werden, verwenden die Eigenschaften des Referenz-Skelett-Meshs für alles, was nicht von Mutable erstellt oder modifiziert wird. Dies umfasst Daten wie LOD-Abstände, Physik-Eigenschaften, Begrenzungsvolumen, Skelett usw. Wenn eine CustomizableObject-Instanz zum ersten Mal erstellt wird, wird das Referenz-Skelett-Mesh für jede Actor-Komponente verwendet. Dies kann mit der Funktion „SetReplaceDiscardedWithReferenceMeshEnabled“ aus der Klasse CustomizableObjectSystem deaktiviert werden. Weitere Informationen finden Sie hier: Verwendung von Mutable aus C++ und Verwendung von Mutable aus Blueprints.
Aus diesem Grund verwenden Projekte üblicherweise ein einfaches oder generisches Skelett-Mesh als Referenz-Skelett-Mesh. Eine Option ist es, das Referenz-Skelett-Mesh durch ein gebaktes Skelett-Mesh zu ersetzen, das im Editor erstellt wurde, und das gewünschte //generische// Erscheinungsbild besitzt. Weitere Informationen finden Sie unter Baken von Instanzen.
Mehrere Assets
Ein großes CustomizableObject kann in mehrere Assets aufgeteilt werden. Dies ist wichtig, wenn mehrere Nutzer an denselben Daten arbeiten sowie für die Versionskontrolle. Zwei Funktionen unterstützen das:
Child-Objekte können als Parent einer Objektgruppe in einem anderen Asset ausgewählt werden, anstatt diese direkt in einem Diagramm zu verbinden. Weitere Informationen dazu finden Sie in der Objekt-Gruppe- und Child-Objekt-Knotenreferenz.
Es gibt spezielle Diagrammknoten, über die Verbindungen aus dem Diagramm in anderen Assets exportiert oder importiert werden können.
Dies ist nützlich für Editor-Daten, hat aber nichts mit dem Daten-Streaming in verpackten Spielen zu tun. Daten-Streaming für verpackte Spiele findet unabhängig davon statt, ob das CustomizableObject in mehrere Assets aufgeteilt wird oder nicht.
Objektinteraktionen
Mutable hat mehrere Funktionen für die Handhabung von Objektinteraktionen. Eine davon sind Objektgruppen, die Instanzparameter erstellen, die nur ein Child-Objekt aus einem Set auswählen, weshalb es nicht möglich ist, mehr als eins hinzuzufügen. Ein Beispiel dafür ist eine Gruppe für Charakter-Hüte, die es dir erlaubt, einen Hut oder keinen Hut auszuwählen, aber niemals zwei Hüte.
Zusätzlich hat Mutable ein System zur Erstellung verschiedener Varianten eines Objekts, basierend darauf, welche anderen Objekte zu einer Instanz hinzugefügt wurden. Beispielsweise hast du einen Charakter mit verschiedenen Frisuren und Hüten. Du möchtest vielleicht Variationen für einige der Frisuren erstellen, die verwendet werden sollen, wenn ein Huttyp ebenfalls im Charakter vorhanden ist. Sie können dafür Mesh-Sektionsvarianten und andere Variantenknoten verwenden.
Ein weiteres Beispiel für Objektinteraktionen ist die selektive Entfernung von Mesh-Fragmenten von einem Objekt mithilfe von Modifikatoren, die in einem anderen Objekt existieren.
Diese beiden Typen von Objektinteraktionen verwenden das Tag-System. Sie können Ihre eigenen Tags definieren und diese aktivieren, wenn ein Objekt in einer Instanz aktiv ist. Im Mesh-Sektionsknoten können Sie Tags hinzufügen. Dann gibt es mehrere Knoten, die sich basierend auf Tags in einer bestimmten Instanz unterschiedlich verhalten, zum Beispiel die Mesh-Sektionsvariante oder der Knoten Mesh mit Mesh-Modifikatoren schneiden.
Textur-Layouts
Mutable kann Meshs und Mesh-Sektionen von mehreren Objekten in einem einzigen Mesh zusammenführen. Es kann auch Mesh-Fragmente aus bestehenden Meshs entfernen. Dabei modifiziert Mutable die Textur-UV-Layouts, um den Speicher zu optimieren und die Rendering-Befehle zu minimieren. Mutable führt das standardmäßig automatisch aus, aber ist über verschiedene Eigenschaften im Skelett-Mesh-Knoten und im Tabelle-Knoten verfügbar.
Weitere Informationen finden Sie hier: Textur-Layouts.
Zustände
Ein Zustand repräsentiert einen bestimmten Anwendungsfall im Spiel (z. B. in-game, Stoffanpassung, Gesichtsanpassung usw.) und kann mit einer Reihe von Parametern konfiguriert werden, die Mutable dann für die Modifikation bereithält. Zustände werden verwendet, um die Instanzaktualisierungen zu optimieren. Zum Beispiel kann ein Zustand für Gesichtsänderungen optimiert werden, ein anderer Zustand für Körperänderungen, ein weiterer Zustand für Tätowierungen und ein anderer nur für Dinge, die sich während des Gameplays ändern können. Die Verwendung von Zuständen bedeutet, dass die Aktualisierungszeit des Charakters viel schneller sein kann, wenn nur die Parameter geändert werden, die in dem für den Charakter ausgewählten Zustand optimiert sind.
Schauen Sie sich die Seite Zustände an, um mehr zu erfahren.
Streaming
Das Streaming von veränderlichen Daten ist wichtig, um den Speicherverbrauch zu reduzieren. Ein anpassbarer Charakter kann Hunderte von Optionen und Anpassungsteilen haben. Ohne Daten-Streaming müssten sie alle gleichzeitig von der Festplatte in den Speicher geladen werden, was viele GB RAM verbrauchen und lange dauern würde. Mit Mutable werden nur die Teile gestreamt, die verwendet werden, was den Speicherverbrauch und die Ladezeiten erheblich reduziert. Außerdem wird ein Teil entladen, wenn es nicht mehr verwendet wird.