El marco de Interchange es el marco de importación y exportación de Unreal Engine . Es independiente del formato de archivo, asincrónico, personalizable y se puede usar en tiempo de ejecución.
Interfaz de importación de Interchange
Interchange usa un código base ampliable y proporciona una pila de canalización personalizable. Esto te da la libertad de editar la canalización de importación con C++, Blueprint o Python para adaptarlo a las necesidades de tu proyecto.
Términos y conceptos importantes
Al usar Interchange, los siguientes conceptos y términos son importantes:
- Canalización: conjunto de operaciones que procesan datos importados. Una canalización expone las opciones usadas para personalizar el proceso de importación.
- Pila de canalización: una lista ordenada de procesos que procesan un archivo importado. Las canalizaciones se combinan en la pila y se asignan a formatos de archivo específicos. Las pilas de canalización se encuentran en Configuración del proyecto > Interchange .
- Generador: operación que genera el recurso a partir de los datos importados.
Activar los complementos de Interchange
El marco de Interchange requiere los complementos Interchange Editor e Interchange Framework, que están activados por defecto. Si estos complementos no están activados en tu proyecto, puedes activarlos en la configuración de tu proyecto .
Para obtener más información sobre cómo activar complementos, consulta Cómo trabajar con complementos.
Cómo importar un recurso
Los recursos se importan a Unreal Engine usando distintos métodos.
Puedes importar recursos en el Almacén de contenido, en el Explorador de contenido o seleccionando Archivo > Importar en nivel.
Para obtener más información sobre cómo importar archivos, consulta la sección Cómo importar recursos directamente.
Importar en nivel actualmente solo funciona con los formatos de archivo glTF y MaterialX.
Proceso de importación
Inicia el proceso de importación usando uno de los métodos enumerados anteriormente. Esto abrirá la ventana Configuración de canalización de Interchange:
- Abre el menú desplegable Elige pila de canalización y selecciona el conjunto de canalizaciones de la lista.
- Configura tus ajustes.
- Pulsa Importar para completar el proceso.
Usa la interfaz para seleccionar los ajustes de importación y haz clic en Importar para continuar.
En cada importación, el motor comprueba si el marco de Interchange es compatible el formato de archivo. Si el archivo es compatible, Interchange usa la pila de canalización de importación apropiada para tu formato.
A continuación, Interchange pasa por el siguiente proceso:
- Interchange convierte los datos importados en una estructura de nodos intermediarios en Unreal Engine.
- Interchange procesa los datos a través de la pila de canalización y sigue las instrucciones para la importación.
- Usa generadores para generar el recurso a partir del resultado.
Si el formato de archivo no es compatible con Interchange, Unreal Engine usa el marco heredado para importar el archivo.
La ventana Configuración de canalización de Interchange tiene las siguientes opciones:
| Opción | Descripción |
|---|---|
| Disposición básica | Filtra las opciones de canalización de importación hasta las propiedades canalización básicas. |
| Filtrar según contenido | Filtra las opciones de canalización de importación en función de los datos del archivo de origen. |
| Elige pila de canalización | Selecciona la pila de canalización que se usará para esta importación. |
La compatibilidad con el formato de archivo FBX encuentra actualmente en fase experimental. Para activar la importación de FBX mediante Interchange, usa los siguientes comandos de consola:
| Comando de consola | Descripción |
|---|---|
| Interchange.FeatureFlags.Import.FBX | Activa o desactiva la compatibilidad experimental con la importación de FBX mediante Interchange. |
| Interchange.FeatureFlags.Import.FBX.ToLevel | Activa o desactiva la compatibilidad experimental con la opción Importar en nivel de FBX. |
Previsualización de Interchange
Al hacer clic en el botón Previsualización de la ventana Configuración de canalización de Interchange, se abre la ventana del editor de previsualización de Interchange:
La ventana de previsualización de Interchange muestra una lista de los recursos que se crearán.
En esta ventana podrás ver lo siguiente:
- La lista de recursos que se crearán.
- Sus tipos como iconos o en el texto de la burbuja informativa emergente (materiales, malla estática o textura 2D).
- Sus propiedades se configuran en el paso previo a la importación de la canalización.
Previsualización de conflictos
Si el proceso de importación detecta cambios en el material o en la estructura básica de un recurso reimportado, resalta la canalización afectada. Al hacer clic en Mostrar conflicto, se abrirá la ventana de previsualización de conflictos:
La ventana de previsualización de conflictos de Interchange muestra los cambios en el material o la estructura del esqueleto al reimportar.
Esta ventana resalta cada conflicto para informarte de qué cambia cuando se reimporta el recurso .
En versiones anteriores, podías optar por conservar la asignación de material original o reemplazarla desde la ventana de conflictos. Ya no se puede hacer esto con Interchange. Para cambiar el material asignado de un recurso, debes hacer la corrección en el archivo de origen o usar el editor de mallas estáticas. Para obtener más información sobre cómo usar el editor de mallas estáticas, consulta la sección Aplicación de material a través del editor de mallas estáticas.
Cómo reimportar recursos usando Interchange
Cuando reimportas un recurso que ya se había importado con Interchange, Unreal Engine recuerda la pila de canalización y las opciones que se usaron, y las muestra.
Importación Cómo importar un recurso mediante Blueprint
Puedes usar Blueprint para importar recursos en Unreal Engine a través del marco de Interchange.
El ejemplo de Blueprint crea un objeto que importa archivos en tiempo de ejecución usando Interchange.
Por ejemplo, puedes usar Blueprint para importar archivos usando Interchange en tiempo de ejecución en una aplicaciones basada en Unreal Engine. El ejemplo anterior crea una función que importa un archivo de textura a una posición de archivo específica usando la pila predeterminada de canalización de texturas. Actualmente, este método de importación no es compatible con malla esquelética ni con datos de animación.
Cómo crear una nueva clase de Blueprint
Para recrear el ejemplo, sigue los pasos que se indican a continuación:
- En tu proyecto, crea una nueva clase Actor de Blueprint que contenga la función. Para crear el blueprint de actor, haz clic derecho en el explorador de contenido , dirígete al menú contextual y selecciona Clase de Blueprint.
-
En la ventana Elegir clase padre, selecciona Actor y llama a la nueva clase de Blueprint InterchangeActor.
Elige la clase padre de tu nuevo blueprint.
Cómo añadir una función
Para añadir una función:
- Haz doble clic en el nuevo blueprint para abrir el editor.
-
En el panel Mi blueprint , ve al ajuste Funciones, haz clic en el botón + y llama a la nueva función InterchangeImport.
Cómo crear una nueva función
Cómo añadir y conectar los nodos
Para añadir y conectar los nodos:
- Añade un nodo Sequence y conéctalo a la salida de la función.
- Conecta la salida Then 0 y crea un nodo Create Source Data para que haga referencia al archivo existente que se importará.
- Conecta la entrada In File Name de Create Source Data y, en el menú contextual, selecciona Ascender a variable.
- Llama a la nueva variable de cadena FilePath. Contiene la posición del archivo que se importará.
- En el blueprint, selecciona la nueva variable y haz clic en la casilla de verificación Con instancia editable.
- Asciende la salida del nodo Create Source Data a una nueva variable llamada SourceData.
- Arrastra desde la salida Then 1 de la secuencia y crea un nodoGet Interchange Manager Scripted . Esto crea un puntero al gestor de Interchange que se usa en el siguiente paso.
- Arrastra desde el resultado de Get Interchange Manager Scripted y crea un nodoImport Asset . Conecta el valor de retorno de Get Interchange Manager Scripted a la entrada Target de Import Asset.
- Arrastra desde la entrada Content Path y asciéndela a una nueva variable llamada SavePath. Contiene la posición del archivo recién importado.
- En el blueprint, selecciona la nueva variable y marca la casilla de verificación Con instancia editable.
- Obtén una referencia a la variable Source Data y conéctala a la entrada de Source Data en Import Asset.
-
Arrastra desde la entrada Import Asset Parameters y crea un nodoMake Input Asset Parameters .
Haz clic en la imagen para verla a tamaño completo.
Cómo hacer que la función esté disponible en tiempo de ejecución
Para que la función esté disponible en tiempo de tiempo de ejecución:
- En Mis blueprints, haz clic en la funciónInterchangeImport y marca la casilla de verificación junto a Llamada al editor en el panelDetalles . Esta opción hace que la función esté disponible durante el tiempo de ejecución en los Detalles del objeto InterchangeActor .
- Guarda y compila tu blueprint.
Cómo usar tu nuevo blueprint
- Arrastra una copia del blueprint InterchangeActor al nivel.
- Haz clic en Reproducir.
- En el esquematizador, selecciona el InterchangeActor.
- En el panelDetalles, rellena FilePath y SavePath.
- Haz clic en el botón Importación de Interchange para importar tu archivo.
Si usas un nodo Import Scene con el blueprint de ejemplo anterior, el recurso se genera directamente en la escena.
Cómo usar Interchange en una aplicación cooked
Si tienes pensado usar el marco de Interchange durante el tiempo de ejecución de una aplicación cooked, ve a Configuración del proyecto > Proyecto - Empaquetado > Directorios de recursos adicionales a los que hacer cooking y añade la carpeta Interchange.
Haz clic en la imagen para verla a tamaño completo.
Cómo importar un recurso con Python
Puedes usar secuencias de secuenciar de Python para importar recursos en Unreal Engine a través del marco de Interchange.
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'
#si quieres importar el archivo fbx, asegúrate de que la importación de fbx de Interchange esté activada
if is_fbx:
level_editor_subsystem = unreal.get_editor_subsystem(unreal.LevelEditorSubsystem)
unreal.SystemLibrary.execute_console_command(level_editor_subsystem.get_world(), 'Interchange.FeatureFlags.Import.FBX true')
editor_asset_subsystem = unreal.get_editor_subsystem(unreal.EditorAssetSubsystem)
transient_path = "/Interchange/Pipelines/Transient/"
transient_pipeline_path = transient_path + "MyAutomationPipeline"
editor_asset_subsystem.delete_directory(transient_path)
#Duplica la canalización de contenido de recursos de Interchange predeterminada; gltf tiene recursos especiales
if is_gltf:
pipeline = editor_asset_subsystem.duplicate_asset("/Interchange/Pipelines/DefaultGLTFAssetsPipeline", transient_pipeline_path)
else:
pipeline = editor_asset_subsystem.duplicate_asset("/Interchange/Pipelines/DefaultAssetsPipeline", transient_pipeline_path)
#Establece aquí las propiedades de las canalizaciones que necesites para la importación de tus recursos
#fuerza la importación de malla estática
pipeline.common_meshes_properties.force_all_mesh_as_type = unreal.InterchangeForceMeshType.IFMT_STATIC_MESH
#combina la malla estática
pipeline.mesh_pipeline.combine_static_meshes = True
#Impide la importación de material
pipeline.material_pipeline.import_materials = False
#Impide la importación de texturas
pipeline.material_pipeline.texture_pipeline.import_textures = False
#Crea datos de origen a partir del nombre de archivo
source_data = unreal.InterchangeManager.create_source_data(import_path)
#crea los parámetros para la importación de Interchange
import_asset_parameters = unreal.ImportAssetParameters()
#La secuencia de comandos suele ser una importación automatizada
import_asset_parameters.is_automated = True
#Añade la canalización configurada a los argumentos de importación
import_asset_parameters.override_pipelines.append(unreal.SoftObjectPath(transient_pipeline_path + ".MyAutomationPipeline"))
#el importador de gltf utiliza 2 canalizaciones y añade la segunda
if is_gltf:
import_asset_parameters.override_pipelines.append(unreal.SoftObjectPath("/Interchange/Pipelines/DefaultGLTFPipeline"))
interchange_manager = unreal.InterchangeManager.get_interchange_manager_scripted()
#importa el recurso
interchange_manager.import_asset("/game/AA0A/testpython/",source_data,import_asset_parameters)
editor_asset_subsystem.delete_directory(transient_path)
En el ejemplo anterior, se usa una secuencia de comandos de Python para importar el archivo Equilibre.fbx. La secuencia de comandos comprueba si el formato del archivo es .gltf o .fbx y luego asigna la canalización correcta.
Cómo editar la pila de canalización
Una de las ventajas del marco de Interchange es la capacidad de seleccionar y personalizar la pila de canalización, una pila personalizable de procesos que procesa los datos del recurso . Puedes añadir canalizaciones a la pila de canalización predeterminada para añadir comportamientos durante el proceso de importación.
Unreal Engine incluye los siguientes procesos predeterminados:
- Canalización de recursos por defecto
- Canalización de materiales por defecto
- Canalización de texturas por defecto
- Canalización de recursos de escena por defecto
- Canalización de niveles de escena por defecto
- Canalización de inspectores de grafos por defecto
Cada canalización contiene las opciones más comunes usadas para ese tipo de importación. Puedes personalizar estas canalizaciones para satisfacer las necesidades específicas de tu proyecto.
Cómo editar de una canalización existente
Cada una de las canalizaciones predeterminadas se puede personalizar para adaptarse a las necesidades de tu proyecto y equipo.
A continuación se indican algunos métodos para personalizar las opciones de importación de tu proyecto:
- Añade, elimina o reordena la pila de canalización existente en la configuración del proyecto .
- Cambia qué canalizaciones se usan por defecto.
- Modifica las canalizaciones predeterminadas existentes.
- Crea una canalización personalizada.
Cómo editar la configuración del proyecto
Puedes encontrar la pila de canalización en Configuración del proyecto , en Engine > Interchange:
La pila de canalización en la configuración del proyecto.
La pila de canalización contiene los ajustes predeterminados para:
- Importar contenido
- Importar en nivel
- Interfaz del editor
- Genérico
- Clase genérica de canalización del editor
Importar contenido
Unreal Engine usa estos ajustes para importar contenido al almacén de contenido o al explorador de contenido.
Haz clic en la imagen para verla a tamaño completo.
Puedes modificar los ajustes para cada tipo de contenido de la lista. También puedes añadir títulos adicionales si es necesario. Por ejemplo, la configuración predeterminada contiene recursos, materiales y texturas. Podrías añadir una sección adicional a la pila de canalización para animaciones y luego añadir una o más canalizaciones personalizadas para gestionar los archivos de animación entrantes.
Importar en nivel
En la ventana del editor, ve a Archivo > Importar en nivel. Por defecto, esta función usa dos canalizaciones que funcionan juntas. Estas canalizaciones importan los datos del actor desde un archivo y luego lo hacen aparecer en el nivel. La función de importación utiliza los siguientes ajustes:
Haz clic en la imagen para verla a tamaño completo.
- DefaultSceneAssetPipeline se basa en la misma clase que DefaultAssetPipeline y está diseñado para importar escenas.
- DefaultSceneLevelPipeline genera el actor en el mundo después de que los datos pasen por DefaultSceneAssetPipeline.
Cómo modificar las canalizaciones por defecto existentes
Puedes modificar las propiedades de las canalizaciones de Interchange predeterminadas para cambiar lo siguiente:
- Valores por defecto
- Visibilidad
- Estado de solo lectura
El panel de detalles de canalización de Interchange.
Para cambiar los ajustes de las canalizaciones de Interchange predeterminados, sigue los pasos que se indican a continuación:
- Localiza las canalizaciones predeterminadas en el almacén de contenido o el explorador de contenido y haz doble clic en una para abrirla. Las canalizaciones se encuentran en la carpeta Engine > Plugins > Contenido del marco de Interchange > Canalizaciones . Si no ves la carpeta Engine , haz clic en Configuración en la esquina superior derecha del almacén de contenido o del explorador de contenido y marca la casilla de verificación Mostrar contenido de Engine.
- Edita lo siguiente si es necesario:
- Visibilidad durante el proceso de importación y reimportación.
- Configuración predeterminada.
- Determina si la propiedad es de solo lectura durante el proceso de importación.
- Guarda y cierra la ventana.
Creación de una canalización personalizada
Puedes crear nuevas canalizaciones de Interchange para personalizar aún más el proceso de importación mediante Blueprints, C++ o Python.
Creación de una canalización personalizada con blueprints
Para crear una nueva canalización de Interchange con blueprints, sigue los pasos que se indican a continuación:
- En el almacén de contenido o el explorador de contenido, haz clic con el botón derecho y selecciona Crear clase de Blueprint.
- En la ventana *Elegir clase padre, amplía la categoría Todas las clases y selecciona InterchangePipelineBase como Clase padre.
- Haz doble clic en el nuevo blueprint para abrir el editor de blueprints.
Selecciona InterchangePipelineBase como la clase padre.
Una canalización personalizada creada con blueprints tiene las siguientes funciones que se pueden anular para añadir un comportamiento personalizado .
Funciones de anulación de blueprint de Interchange.
| Función de anulación | Descripción |
|---|---|
| Scripted Can Execute on Any Thread | Informa al gesto de Interchange de que este canalización puede ejecutarse en modo asincrónico. |
| Scripted Execute Export Pipeline | Se ejecuta durante el proceso de exportación (por el momento, la función no está operativa). |
| Scripted Execute Pipeline | Se ejecuta después de trasladar el archivo. Crea el generador necesario para generar recursos. |
| Scripted Execute Post Factory Pipeline | Se ejecuta después de que el generador cree un recurso, pero antes de que se llame a la función PostEditChange. |
| Scripted Execute Post Import Pipeline | Se ejecuta después de que el recurso se haya importado por completo y se llame a la función PostEditChange. |
| Scripted Set Reimport Source Index | Se ejecuta e indica a la canalización qué índice de origen reimportar. Usa esta función al reimportar un recurso que pueda tener más que un origen. Por ejemplo, una malla esquelética que tenga un archivo de origen para la geometría y otro para la información de revestimiento. |
Cómo crear una canalización personalizada con C++
Para crear una nueva canalización de Interchange con C++, crea un archivo de encabezado que contenga lo siguiente:
#pragma once
#include "CoreMinimal.h"
#include "InterchangePipelineBase.h"
#include "InterchangeSourceData.h"
#include "Nodes/InterchangeBaseNodeContainer.h"
#include "InterchangeMyPipeline.generated.h"
UCLASS(BlueprintType)
class INTERCHANGEPIPELINES_API UInterchangeMyPipeline : public UInterchangePipelineBase
{
GENERATED_BODY()
protected:
virtual void ExecutePipeline(UInterchangeBaseNodeContainer* BaseNodeContainer, const TArray<UInterchangeSourceData*>& SourceDatas) override;
virtual bool CanExecuteOnAnyThread(EInterchangePipelineTask PipelineTask) override
{
return true;
}
};
A continuación, crea un archivo de origen que contenga lo siguiente:
#include "InterchangeMyPipeline.h"
void UInterchangeMyPipeline::ExecutePipeline(UInterchangeBaseNodeContainer* NodeContainer, const TArray<UInterchangeSourceData*>& InSourceDatas)
{
Super::ExecutePipeline(NodeContainer, InSourceDatas);
// Añade la lógica que necesites en nodos trasladados o nodos de generación
}
Para obtener más información sobre cómo trabajar con C++ en Unreal Engine, consulta Programación con C++.
Cómo crear una canalización personalizada con Python
Para crear una nueva canalización de Interchange con una secuencia de comandos de Python, crea una nueva secuencia de comandos de Python y usa la configuración del proyecto para añadirla a la carpeta Startup Scripts. Para obtener más información sobre cómo trabajar con las secuencias de comandos de Python en Unreal Engine, consulta Secuencias de comandos de Unreal Editor con Python.
En la siguiente secuencia de comandos de ejemplo, se usa una secuencia de comandos de Python para crear un recurso de canalización de importación.
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:
return object_class.cast(object_to_cast)
except:
return None
def recursive_set_node_properties(self, base_node_container, node_unique_id):
node = base_node_container.get_node(node_unique_id)
# Establece el estado de activación del nodo del generador de mallas estáticas
static_mesh_node = self.cast(node, unreal.InterchangeStaticMeshFactoryNode)
if static_mesh_node:
static_mesh_node.set_enabled(self.import_static_meshes)
# Establece el estado de activación del nodo del generador de mallas esqueléticas
skeletal_mesh_node = self.cast(node, unreal.InterchangeSkeletalMeshFactoryNode)
if skeletal_mesh_node:
skeletal_mesh_node.set_enabled(self.import_static_meshes)
# Itera los elementos hijo
childrens = base_node_container.get_node_children_uids(node.get_unique_id())
for child_uid in childrens:
self.recursive_set_node_properties(base_node_container, child_uid)
@unreal.ufunction(override=True)
def scripted_execute_pipeline(self, base_node_container, SourceDatas):
root_nodes = base_node_container.get_roots()
for node_unique_id in root_nodes:
self.recursive_set_node_properties(base_node_container, node_unique_id)
return True