Das Interchange-Framework ist das Import- und Export-Framework der Unreal Engine. Es ist dateiformatunabhängig, asynchron, anpassbar und kann zur Laufzeit verwendet werden.
Interchange verwendet eine Codebasis, die erweiterbar ist und einen anpassbaren Pipeline-Stapel bereitstellt. Das gibt Ihnen die Freiheit, die Import-Pipeline mit C++, Blueprint oder Python zu bearbeiten, um sie an die Anforderungen Ihres Projekts anzupassen.
Wichtige Konzepte und Begriffe
Bei der Verwendung von Interchange sind die folgenden Konzepte und Begriffe wichtig:
Pipeline: Eine Sammlung von Operationen, die importierte Daten verarbeiten. Eine Pipeline stellt Optionen zum Personalisieren des Importvorgangs bereit.
Pipeline-Stapel: Eine geordnete Liste von Pipelines, die eine importierte Datei verarbeiten. Pipelines werden im Stapel zusammengefasst und bestimmten Dateiformaten zugewiesen. Die Pipeline-Stapel befinden sich unter Projekt-Einstellungen > Interchange.
Factory: Eine Operation, die das Asset aus den importierten Daten erstellt.
Interchange-Plugins aktivieren
Das Interchange-Framework erfordert die Plugins Interchange Editor und Interchange Framework, die standardmäßig aktiviert sind. Wenn diese Plugins in Ihrem Projekt nicht aktiviert sind, können Sie diese in den Projekt-Einstellungen Ihres Projekts aktivieren.
Mehr Informationen zur Aktivierung von Plugins finden Sie unter Arbeiten mit Plugins.
Asset importieren
Assets können in die Unreal Engine über verschiedene Methoden importiert werden.
Sie können Assets in der Inhalts-Schublade oder im Inhaltsbrowser importieren, oder indem Sie Datei > In Level importieren auswählen.
Weitere Informationen zum Importieren von Dateien finden Sie unter Assets direkt importieren.
In Level importieren funktioniert aktuell nur mit glTF- und MaterialX-Dateiformaten.
Importvorgang
Beginnen Sie den Importvorgang mithilfe einer der oben aufgeführten Methoden. Dadurch wird das Fenster Interchange-Pipeline-Konfiguration geöffnet:
Öffnen Sie das Dropdown-Menü Pipeline-Stapel auswählen und wählen Sie den zu verwendenden Pipeline-Stapel aus der Liste aus.
Konfigurieren Sie Ihre Einstellungen.
Klicken Sie auf Importieren, um den Vorgang abzuschließen.
Bei jedem Import prüft die Engine, ob das Dateiformat vom Interchange-Framework unterstützt wird. Wenn die Datei unterstützt wird, verwendet Interchange den entsprechenden Import-Pipeline-Stapel für Ihr Format.
Interchange durchläuft anschließend den folgenden Prozess:
Interchange konvertiert die importierten Daten in eine Zwischenknotenstruktur in der Unreal Engine.
Interchange-Daten werden durch den Pipeline-Stapel verarbeitet und folgen den Anweisungen für den Import.
Verwendet Factorys, um aus den Ergebnissen das Asset zu generieren.
Wenn das Dateiformat nicht von Interchange unterstützt wird, verwendet die Unreal Engine das alte Framework, um die Datei zu importieren.
Das Fenster „Interchange Pipeline Configuration“ hat folgende Optionen:
| Option | Beschreibung |
|---|---|
Grundlayout | Filtert die Import-Pipeline-Optionen bis auf die grundlegenden Pipeline-Eigenschaften. |
Auf Inhalte filtern | Filtert die Import-Pipeline-Optionen basierend auf den in der Quelldatei gefundenen Daten. |
Pipeline-Stapel auswählen | Wählt den Pipeline-Stapel aus, der für diesen Import verwendet wird. |
Die Unterstützung für das FBX-Dateiformat ist derzeit Experimentell. Um den FBX-Import mit Interchange zu aktivieren, verwenden Sie die folgenden Konsolenbefehle:
| Konsolenbefehl | Beschreibung |
|---|---|
Interchange.FeatureFlags.Import.FBX | Schaltet die experimentelle Unterstützung für den FBX-Import mit Interchange um. |
Interchange.FeatureFlags.Import.FBX.ToLevel | Schaltet die experimentelle Unterstützung für FBX In Level importieren um. |
Interchange-Vorschau
Wenn Sie im Fenster „Interchange-Pipeline-Konfiguration“ auf die Schaltfläche Vorschau klicken, öffnet sich das Fenster „Interchange-Vorschau-Editor“:
In diesem Fenster können Sie Folgendes sehen:
Eine Liste von Assets, die erstellt werden.
Ihre Typen als Symbole oder im Tooltip-Text (Materialien, statisches Mesh, texture2D).
Ihre Eigenschaften werden durch den Vor-Import-Schritt der Pipeline eingerichtet.
Konfliktvorschau
Wenn der Importvorgang Änderungen an der Material- oder Skelett-Struktur eines reimportierten Asset feststellt, wird die betroffene Pipeline hervorgehoben. Wenn Sie auf Konflikt anzeigen klicken, öffnet sich das Konfliktvorschau-Fenster:
Dieses Fenster hebt jeden Konflikt hervor, um Sie darüber zu informieren, was sich beim Reimportieren des Assets ändert.
In früheren Versionen konnten Sie im Konflikt-Fenster wählen, ob Sie die ursprüngliche Materialzuweisung beibehalten oder ersetzen möchten. Das ist mit Interchange nicht mehr möglich. Um das zugewiesene Material eines Assets zu ändern, müssen Sie die Korrektur in der Quelle vornehmen oder den Statisches-Mesh-Editor verwenden. mehr Informationen zum Statisches-Mesh-Editor finden Sie unter Anwendung eines Materials mit dem Statisches-Mesh-Editor.
Reimportieren von Assets mit Interchange
Wenn Sie ein Asset reimportieren, das zuvor mit Interchange importiert wurde, merkt sich die Unreal Engine den Pipeline-Stapel und die verwendeten Optionen und zeigt diese Optionen an.
Ein Asset mit Blueprint importieren
Sie können Blueprint verwenden, um Assets durch das Interchange-Framework in die Unreal Engine zu importieren.
Beispielsweise können Sie Blueprint verwenden, um Dateien mit Interchange zur Laufzeit in einer Unreal-Engine-basierten Anwendung zu importieren. Das obige Beispiel erstellt eine Funktion, die eine Texturdatei an einen bestimmten Pipeline-Stapel importiert. Dafür wird der standardmäßige Textur-Pipeline-Stapel verwendet. Diese Importmethode unterstützt aktuell keine Skelett-Mesh- oder Animationsdaten.
Neue Blueprint-Klasse erstellen
Befolgen Sie diese Schritte, um das Beispiel selbst zu erstellen:
Erstellen Sie in Ihrem Projekt eine neue Actor-Blueprint-Klasse, welche die Funktion enthält. Um den Actor-Blueprint zu erstellen, klicken Sie mit der rechten Maustaste im Inhaltsbrowser, navigieren Sie zum Kontextmenü und wählen Sie Blueprint-Klasse.
Wählen Sie im Fenster Parent-Klasse wählen die Option Actor aus und benennen Sie die neue Blueprint-Klasse InterchangeActor.
Funktion hinzufügen
So fügen Sie eine Funktion hinzu:
Doppelklicken Sie auf den neuen Blueprint, um den Editor zu öffnen.
Gehen Sie im Mein Blueprint-Panel zur Einstellung „Funktionen“, klicken Sie auf die Schaltfläche + und nennen Sie die neue Funktion InterchangeImport.
Knoten hinzufügen und verbinden
So fügen Sie Knoten hinzu und verbinden diese:
Fügen Sie einen Sequenz-Knoten hinzu und verbinden Sie ihn mit dem Output der Funktion.
Verbinden Sie den Then 0-Output und erstellen Sie einen Quelldaten erstellen-Knoten, um auf die bestehende Datei zu verweisen, die importiert wird.
Verbinden Sie den In Dateiname-Input mit Quelldaten erstellen und wählen Sie im Kontextmenü Beförderung zu Variable aus.
Nennen Sie die neue String-Variable FilePath. Enthält den Speicherort der Datei, die importiert wird.
Wählen Sie im Blueprint die neue Variable und klicken Sie auf das Kontrollkästchen für Instanz bearbeitbar.
Befördern Sie den Output des Quelldaten erstellen-Knotens zu einer neuen Variable namens SourceData.
Ziehen Sie eine Verbindung vom Then 1-Output der Sequenz und erstellen Sie einen Interchange-Manager abrufen Geskriptet-Knoten. Dadurch wird ein Zeiger für den Interchange Manager erstellt, der im nächsten Schritt verwendet wird.
Ziehen Sie eine Verbindung vom Interchange-Manager abrufen Geskriptet-Output und erstellen Sie einen Asset importieren-Knoten. Verbinden Sie den Ergebniswert von Interchange-Manager abrufen Geskriptet mit dem Target-Input an Asset importieren.
Ziehen Sie den Input von Inhaltspfad ab und befördern Sie ihn zu einer neuen Variable namens SavePath. Enthält den Speicherort der neu importierten Datei.
Wählen Sie im Blueprint die neue Variable und aktivieren Sie das Kontrollkästchen bei Instanz bearbeitbar.
Holen Sie sich eine Referenz zur Quelldaten-Variable und verbinden Sie diese mit dem Quelldaten-Input an Asset importieren.
Ziehen Sie eine Verbindung vom Asset-Parameter importieren-Input und erstellen Sie einen Input-Asset-Parameter erstellen-Knoten.
Funktion zur Laufzeit verfügbar machen
So machen Sie die Funktion zur Laufzeit verfügbar:
Klicken Sie in Meine Blueprints auf die Funktion InterchangeImport und danach auf das Kontrollkästchen neben In Editor aufrufen im Details-Panel. Diese Option macht die Funktion in den Details des InterchangeActor-Objekts zur Laufzeit verfügbar.
Speichern und kompilieren Sie Ihren Blueprint.
Ihren neuen Blueprint verwenden
Ziehen Sie eine Kopie des InterchangeActor-Blueprints in das Level.
Klicken Sie auf Spielen.
Wählen Sie im Outliner den InterchangeActor aus.
Füllen Sie im Details-Panel den FilePath und den SavePath aus.
Klicken Sie auf die Schaltfläche Interchange Importieren, um Ihre Datei zu importieren.
Wenn Sie einen Szene importieren-Knoten mit dem obigen Blueprint-Beispiel verwenden, spawnt das Asset direkt in der Szene.
Verwenden von Interchange in einer gecookten Anwendung
Wenn Sie das Interchange-Framework zur Laufzeit in einer gecookten Anwendung verwenden möchten, gehen Sie zu Projekt-Einstellungen > Projekt - Paketierung > Zusätzliche Asset-Verzeichnisse zum Cooken und fügen Sie den Ordner Interchange hinzu.
Asset mit Python importieren
Sie können ein Python-Script verwenden, um Assets durch das Interchange-Framework in die Unreal Engine zu importieren.
import unreal
import_path = "C:/Users/foo/Downloads/Fbx/SkeletalMesh/Animations/Equilibre.fbx"
import_extension = unreal.Paths.get_extension(import_path, False)
is_gltf = import_extension == 'glb' or import_extension == 'gltf'
is_fbx = import_extension == 'fbx'
is_usd = import_extension == 'usd'
Im obigen Beispiel wird ein Python-Script verwendet, um die Datei Equilibre.fbx zu importieren. Das Script prüft, ob das Dateiformat .glb ist .gltf .fbx oder .usd und weist dann die richtige Pipeline zu.
Pipeline-Stapel bearbeiten
Einer der Vorteile des Interchange-Frameworks ist die Möglichkeit, den Pipeline-Stapel auszuwählen und zu personalisieren, einen anpassbaren Stapel von Prozessen, mit denen die Asset-Daten verarbeitet werden. Sie können Pipelines zum Standard-Pipeline-Stapel hinzufügen, um während des Importvorgangs Verhaltensweisen hinzuzufügen.
Die Unreal Engine wird mit den folgenden Standard-Pipelines ausgeliefert:
Standard-Asset-Pipeline
Standard-Material-Pipeline
Standard-Textur-Pipeline
Standard-Szenen-Asset-Pipeline
Standard-Szenen-Level-Pipeline
Standard-Diagramm-Inspektor-Pipeline
Jede Standard-Pipeline enthält die am häufigsten verwendeten Optionen für diese Art des Imports. Sie können diese Pipelines personalisieren, um die spezifischen Anforderungen Ihres Projekts zu erfüllen.
Eine bestehende Pipeline bearbeiten
Jede der Standard-Pipelines kann angepasst werden, um die Anforderungen Ihres Projekts und Teams zu erfüllen.
Im Folgenden finden Sie Methoden zum Personalisieren der Import-Optionen für Ihr Projekt:
Bestehenden Pipeline-Stapel in Ihren Projekt-Einstellungen hinzufügen, entfernen oder neu anordnen.
Ändern, welche Pipelines standardmäßig verwendet werden.
Bestehende Standard-Pipelines anpassen.
Eine benutzerdefinierte Pipeline erstellen.
Projekt-Einstellungen bearbeiten
Sie finden den Pipeline-Stapel in den Projekt-Einstellungen unter Engine > Interchange:
Der Pipeline-Stapel enthält die Standardeinstellungen für:
Inhalte importieren
In Level importieren
Editor-Interface
Generisch
Generische Pipeline-Klasse des Editors
Inhalte importieren
Die Unreal Engine verwendet diese Einstellungen, um Inhalte in die Inhalts-Schublade oder den Inhaltsbrowser zu importieren.
Sie können die Einstellungen für jeden aufgeführten Inhaltstyp anpassen. Sie können bei Bedarf auch weitere Überschriften hinzufügen. Beispielsweise enthält die Standardkonfiguration Assets, Materialien und Texturen. Sie können eine zusätzlichen Sektion zum Pipeline-Stapel für Animationen hinzufügen und dieser dann eine oder mehr benutzerdefinierte Pipelines hinzufügen, um eingehende Animationsdateien zu verarbeiten.
In Level importieren
Im Editor-Fenster finden Sie Datei > In Level importieren. Standardmäßig verwendet diese Funktion zwei Pipelines, die zusammenarbeiten. Diese Pipelines importieren die Actor-Daten aus einer Datei und spawnen dann einen Actor im Level. Die Import-Funktion verwendet die folgenden Einstellungen:
DefaultSceneAssetPipeline basiert auf der gleichen Klasse wie DefaultAssetPipeline und ist für den Szenenimport entworfen.
DefaultSceneLevelPipeline erstellt den Actor in der Welt, nachdem die Daten die DefaultSceneAssetPipeline durchlaufen haben.
Bestehende Standard-Pipelines anpassen
Sie können die Eigenschaften der standardmäßigen Interchange-Pipelines anpassen, um Folgendes zu ändern:
Standardwerte
Sichtbarkeit
Schreibgeschützter Status
Befolgen Sie diese Schritte, um die Einstellungen der standardmäßigen Interchange-Pipelines zu ändern:
Suchen Sie die Standard-Pipelines in der Inhalts-Schublade oder im Inhaltsbrowser und Doppelklicken Sie auf eine, um sie zu öffnen. Die Pipelines befinden sich im Ordner Engine > Plugins >Interchange Framework Content > Pipelines. Sollten Sie den Engine-Ordner nicht sehen, klicken in der rechten oberen Ecke der Inhalts-Schublade oder des Inhaltsbrowsers auf Einstellungen und aktivieren Sie dann das Kontrollkästchen für Engine-Inhalt anzeigen.
Bearbeiten Sie Folgendes nach Bedarf:
Sichtbarkeit während des Import- und Reimportvorgangs.
Standardeinstellung.
Ob die Eigenschaft während des Importvorgangs schreibgeschützt sein soll.
Speichern Sie und schließen Sie das Fenster.
Benutzerdefinierte Pipeline erstellen
Sie können neue Interchange-Pipelines erstellen, um den Importvorgang mithilfe von Blueprints, C++ oder Python weiter anzupassen.
Benutzerdefinierte Pipeline mit Blueprints erstellen
Befolgen Sie diese Schritte, um eine neue Interchange-Pipeline mit Blueprints zu erstellen:
Klicken Sie in der Inhalts-Schublade oder im Inhaltsbrowser mit der rechten Maustaste und wählen Sie Blueprint-Klasse erstellen.
Klappen Sie im Fenster Parent-Klasse auswählen die Kategorie Alle Klassen auf und wählen Sie InterchangePipelineBase als seine Parent-Klasse.
Doppelklicken Sie auf den neuen Blueprint, um den Blueprint-Editor zu öffnen.
Eine mit Blueprints erstellte benutzerdefinierte Pipeline besitzt folgende Funktionen, die überschrieben werden können, um benutzerdefiniertes Verhalten hinzuzufügen.
| Funktion überschreiben | Beschreibung |
|---|---|
Geskriptet Kann auf jedem Thread ausgeführt werden | Teilt dem Interchange-Manager mit, dass diese Pipeline im asynchron Modus ausgeführt werden kann. |
Geskriptet Ausführung der Export-Pipeline | Wird während des Exportvorgangs ausgeführt (Funktion ist derzeit nicht funktionsfähig). |
Geskriptet Ausführungspipeline | Wird nach der Dateiverschiebung ausgeführt. Erstellt die zum Generieren von Assets benötigte Factory. |
Geskriptet Ausführungspipeline nach der Factory | Wird ausgeführt, nachdem die Factory ein Asset erstellt hat, aber bevor die PostEditChange-Funktion aufgerufen wird. |
Geskriptet Ausführungspipeline nach Import | Wird ausgeführt, nachdem das Asset vollständig importiert und die PostEditChange-Funktion aufgerufen wurde. |
Geskriptet RQuellindex reimportieren Einstellen | Wird ausgeführt und sagt der Pipeline, welcher Quellindex reimportiert werden soll. Verwenden Sie diese Funktion, wenn Sie ein Asset reimportieren, das mehr als eine Quelle haben kann. Beispielsweise ist ein Skelett-Mesh mit einer Quelldatei für die Geometrie und einer anderen für die Skinning-Informationen möglich. |
Benutzerdefinierte Pipeline mit C++ erstellen
Zum Erstellen einer neuen Interchange-Pipeline mit C++, legen Sie eine Header-Datei an, die Folgendes enthält:
#pragma once
#include "CoreMinimal.h"
#include "InterchangePipelineBase.h"
#include "InterchangeSourceData.h"
#include "Nodes/InterchangeBaseNodeContainer.h"
#include "InterchangeMyPipeline.generated.h"
erstellen als Nächstes eine Quelldatei, die Folgendes enthält:
#include "InterchangeMyPipeline.h"
void UInterchangeMyPipeline::ExecutePipeline(UInterchangeBaseNodeContainer* NodeContainer, const TArray<UInterchangeSourceData*>& InSourceDatas)
{
Super::ExecutePipeline(NodeContainer, InSourceDatas);
// Put the logic you need on either translated nodes or factory nodes
}Mehr Informationen zur Arbeit mit C++ in der Unreal Engine finden Sie unter Programmieren mit C++.
Benutzerdefinierte Pipeline mit Python erstellen
Zum Erstellen einer neuen Interchange-Pipeline mit einem Python-Script, legen Sie ein neues Python-Script an und verwenden Sie die Projekt-Einstellungen, um es den Start-Scripts hinzuzufügen. Mehr Informationen zur Arbeit mit Python-Scripting in der Unreal Engine finden Sie unter Scripting im Unreal Editor mit Python.
Im folgenden Beispiel-Script wird Python-Script verwendet, um eine Basis-Asset-Import-Pipeline zu erstellen.
import unreal
@unreal.uclass()
class PythonPipelineTest(unreal.InterchangePythonPipelineBase):
import_static_meshes = unreal.uproperty(bool,meta=dict(Category="StaticMesh"))
import_skeletal_meshes = unreal.uproperty(bool,meta=dict(Category="SkeletalMesh"))
def cast(self, object_to_cast, object_class):
try: