El importador de Datasmith puede incorporar automáticamente metadatos sobre los objetos que gestiona: información que hayas configurado para esos objetos en tu aplicación de diseño 3D o CAD. Los metadatos suelen utilizarse para almacenar información real sobre la pieza mecánica o el elemento arquitectónico que representa el recurso, como el coste de la pieza, el material del que está hecha, propiedades físicas como el peso o la eficiencia de aislamiento, o información de uso como el par de torsión máximo que se puede aplicar a una pieza. También puedes usar metadatos para almacenar cualquier otro tipo de información sobre un recurso que puedas necesitar para tu proyecto.
Tener estos metadatos disponibles en Unreal Editor y Unreal Engine puede ayudarte de dos maneras:
- En tu proceso de recursos: puedes usar metadatos al importar recursos y configurar los niveles para distinguir los diferentes tipos de recursos y actores que necesitan un procesamiento diferente. Por ejemplo:
- Podrías usar metadatos durante el proceso de importación de Datasmith para identificar ciertos tipos de recursos que no necesitarás en tu escena final, para que puedas omitir su importación.
- Después de la importación, podrías usarlos para identificar actores en tu nivel que quieras fusionar, unir o reemplazar, o cuyos materiales quieras reemplazar.
- En tiempo de ejecución en tu juego: puedes usar metadatos en tiempo de ejecución para mostrar a los usuarios información seleccionada sobre tus actores que provenga de tu herramienta de diseño de origen. Por ejemplo:
- Si los objetos de tu nivel tienen datos BIM que contienen información sobre sus propiedades estructurales, te sugerimos visualizar esa información en tu experiencia interactiva cuando el jugador seleccione esos objetos en la escena.
- Si tu proyecto es un configurador de productos que permite al jugador elegir entre distintas opciones de diseño, tal vez te interese que tu lógica de juego calcule y muestre un total actualizado del coste de las elecciones actuales del jugador en función de los metadatos de coste asignados a recursos visibles.
Esta página describe cómo introducir metadatos en Unreal Engine a través del proceso de importación de Datasmith y cómo acceder a ellos en tus secuencias de comandos, tanto en el editor como en tiempo de ejecución.
Fuentes de metadatos
Actualmente, Datasmith importa metadatos de las siguientes herramientas de diseño:
- Autodesk 3ds Max
- Autodesk Revit
- Dassault Systèmes SolidWorks
- Trimble de SketchUp Pro
- Maxon Cinema 4D
- Archivos IFC 2x3
- Graphisoft de ARCHICAD
- Navisworks de Autodesk
- Rhinoceros (Rhino) de McNeel
Actualmente, Datasmith solo gestiona metadatos sobre geometría, no sobre otros tipos de objetos de la escena, como luces o cámaras.
Visualización de metadatos en Unreal Editor
Una vez finalizado el proceso de importación de Datasmith, podrás ver los metadatos de cualquier actor de malla estática de tu nivel en el panel Detalles, en la sección Datos de usuario del recurso:
Actualmente, los metadatos de Datasmith son de solo lectura en el editor.
Acceso a metadatos en Blueprint y Python
Existen varias formas de acceder a los metadatos asociados a los objetos de la escena. El método que utilices dependerá de si necesitas acceder a los metadatos durante el proceso de importación de Datasmith o una vez finalizada la importación.
Todas las claves y valores de los metadatos se almacenan como cadenas en Unreal Engine, independientemente de su tipo original en tu aplicación de diseño o CAD. Por ejemplo, si estableces un valor de metadatos en 3ds Max como un valor booleano como true o como un número como 312, serán cadenas cuando las leas en una secuencia de comandos en Unreal Engine. Si necesitas que los valores sean booleanos o números, usa un nodo de conversión de Blueprint como Utilities > String > String to Int o String to Float, o funciones integradas de análisis de cadena de Python como int() o float().
Acceso a los metadatos durante la importación
Si necesitas acceder a tus metadatos durante el proceso de importación de Datasmith (por ejemplo, para identificar ciertas mallas que quieres filtrar antes de generar recursos de Unreal Engine para tu escena), puedes leer los metadatos de la escena de Datasmith. Para obtener más información sobre cómo ejecutar una secuencia de comandos durante el proceso de importación, consulta Personalización del proceso de importación de Datasmith.
Encontrarás los metadatos adjuntos a los elementos de actor de malla en la escena de Datasmith.
Los nodos que necesitas están en Datasmith > Escena y Datasmith > Elemento.
Para llegar a estos nodos, tienes que desactivar la casilla de verificación Según el contexto del menú contextual o buscar los nodos que necesitas en la paleta.
| Nodo | Descripción |
|---|---|
| Get All Metadata | Recupera una matriz de todos los objetos de metadatos registrados para todos los objetos de la escena de Datasmith. |
| Get All Objects and Values for Key | Recupera una lista de todos los objetos de la escena de Datasmith que tienen una clave especificada. También obtendrás una lista de todos los valores registrados para esa clave en todos esos objetos. |
| Get Metadata for Object | Recupera todos los metadatos asignados a un objeto específico. |
| Get Metadata Value for Key | Recupera el valor de una clave especificada asignada a un objeto determinado. |
| Get Metadata Keys and Values for Value | Recupera todas las claves de un objeto específico cuyo valor coincida con la entrada String to Match. |
Para los nodos anteriores que devuelven un objeto de elemento de metadatos de Datasmith, puedes obtener las claves y los valores del objeto de metadatos mediante Datasmith > Elemento > Get Properties, Get Property y Get Property Count:
Ejemplo de uso
Este ejemplo muestra cómo puedes usar los valores asignados a una clave de metadatos para identificar la geometría que sabes que no vas a necesitar en tu proyecto y eliminarla de tu escena de Datasmith antes de crear recursos de malla estática:
Durante el proceso de importación de Datasmith, puedes acceder a los metadatos de los objetos de tu escena a través del objeto unreal.DatasmithSceneElement. Para obtener más información sobre las siguientes funciones, consulta la referencia de la API de Python.
|
|
|
|
|
Ejemplo de uso
Este ejemplo muestra cómo puedes usar los valores asignados a una clave de metadatos para identificar la geometría que sabes que no vas a necesitar en tu proyecto y eliminarla de tu escena de Datasmith antes de crear recursos de malla estática:
key_name = "name"
remove_keyword = "Embrague"
meshes_to_skip = set([])
# Obtén todos los elementos de la escena que tengan la clave "name".
objects_and_values = ds_scene_in_memory.get_all_objects_and_values_for_key(key_name, unreal.DatasmithMeshActorElement)
objects = objects_and_values[0]
values = objects_and_values[1]
# Itera buscando aquellos cuyo valor coincida con una palabra clave.
for index, value in enumerate(values):
if remove_keyword in value:
print("Eliminando el actor denominado: " + actor_label)
# Elimina el elemento del actor de malla de la escena y añade el elemento de malla a una lista para eliminarlo más tarde.
mesh_actor = objects[index]
mesh = mesh_actor.get_mesh_element()
meshes_to_skip.add(mesh)
ds_scene_in_memory.remove_mesh_actor(mesh_actor)
# Elimina todas las mallas que no necesitemos importar.
for mesh in meshes_to_skip:
mesh_name = mesh.get_element_name()
print("Eliminando la malla denominada " + mesh_name)
ds_scene_in_memory.remove_mesh(mesh)
Acceso a los metadatos tras la importación
Cuando el proceso de importación convierte tu escena de Datasmith en recursos y actores de Unreal Engine, también aplica los metadatos de cada elemento de malla de la escena de Datasmith a todos los actores del nivel que representan instancias de ese recurso de malla estática. Después, puedes usar Blueprint o Python para recuperar los metadatos de uno o todos los actores de malla estática de tu nivel.
Los siguientes nodos acceden a los metadatos de un actor específico. Tienen muy poco impacto en el rendimiento, por lo que puedes utilizarlos en cualquier momento, incluso en tiempo de ejecución en tu proyecto. Si quieres visualizar los metadatos importados de uno o varios objetos seleccionados en la escena (por ejemplo, en un aviso o en un menú de la IU en tiempo de ejecución de tu proyecto), estos son los nodos que deberás usar en tus grafos de Blueprint en tiempo de ejecución.
Los encontrarás en la categoría Datos de usuario de Datasmith.
| Nodo | Descripción |
|---|---|
| Get Datasmith User Data Value for Key | Recupera el valor de los metadatos con la clave especificada asignada al objeto indicado. |
| Get Datasmith User Data Keys and Values for Value | Recupera todas las claves del objeto indicado que tengan el valor que hayas indicado en la entrada String to Match. Usa este nodo si conoces el valor que buscas, pero no el nombre de la clave. |
| Get Datasmith User Data | Recupera un objeto de metadatos que contiene todos los pares clave-valor registrados para el actor, para que puedas iterarlos. |
Los siguientes nodos, por el contrario, acceden a los metadatos de todos los actores de malla estática del nivel actual (o de todos los que compartan una clase determinada). Dado que tu nivel puede contener un gran número de actores, cada uno con muchas propiedades, estas funciones pueden consumir muchos recursos de la CPU y provocar un bajo rendimiento cuando se usan en tiempo de ejecución del juego. Por lo tanto, solo puedes utilizarlas en grafos que crees en clases de Blueprint exclusivas del editor.
Encontrarás estos nodos en la categoría Secuenciación de comandos del editor > Datos de usuario de Datasmith.
| Nodo | Descripción |
|---|---|
| Get All Objects and Values for Key | Recupera una lista de todos los actores del nivel actual que tienen una clave especificada en sus metadatos de Datasmith. También obtendrás una lista de todos los valores registrados para esa clave en todos esos objetos. |
| Get All Datasmith User Data | Recupera la lista completa de todos los objetos de metadatos de todos los actores del nivel actual. |
Los nodos Get Datasmith User Data y Get All Datasmith User Data anteriores devuelven referencias de a objetos de datos de usuario de Datasmith. Este objeto tiene una variable a la que se puede acceder, denominada Metadata, que es un mapa de todos los pares clave-valor que componen los metadatos de Datasmith del objeto. Para trabajar con este tipo de objeto, arrastra el pin de salida y selecciona Variables > Get Metadata:
Esto te dará las claves y los valores en forma de mapa. A continuación, puedes usar los nodos de utilidad de la categoría Utilities > Map para trabajar con los datos. Por ejemplo, este grafo itera todas las claves una a una y recupera el valor asociado a cada una de ellas:
Para obtener más información sobre los nodos del mapa de Blueprint, consulta la [referencia de la API de Blueprint] (https://docs.unrealengine.com/BlueprintAPI/Utilities/Map/).
Ejemplo de uso
Esta sección muestra un ejemplo simplificado de cómo podrías visualizar los metadatos de recursos en tiempo de ejecución para un objeto seleccionado por el jugador en el nivel.
El texto lo escribe un widget de UMG que contiene dos campos de texto, cada uno de ellos vinculado a una variable de cadena. En el grafo de Blueprint del widget, una acción personalizada extrae dos elementos de los metadatos de Datasmith de un actor que se pasa en un evento personalizado y guarda esos elementos en las variables vinculadas.
El siguiente blueprint de nivel muestra un ejemplo de cómo añadir un widget como este al empezar la reproducción y cómo alimentarlo con el actor que hay debajo del cursor cada vez que el usuario pulsa un botón del ratón.
Para obtener más información sobre la creación de interfaces de usuario en UMG, consulta la guía de inicio rápido del diseñador de IU de UMG y las secciones correspondientes.
Una vez finalizado el proceso de importación de Datasmith, podrás acceder a los metadatos de todos los actores o de los actores seleccionados mediante la clase unreal.DatasmithContentLibrary. Para obtener más información sobre las siguientes funciones, consulta la referencia de la API de Python.
|
|
|
|
|
Ejemplo de uso
En las secuencias de Python que se ejecutan en Unreal Editor, puedes usar metadatos de Datasmith después de la importación para identificar actores de malla estática en tu nivel a los que quieras aplicar un procesamiento especial.
import unreal
new_actor_name = "Muros exteriores"
metadata_key = "Tipo"
metadata_value = "Muro: exterior"
meshes_to_join = set([])
# Itera los actores en el nivel actual.
all_actors = unreal.EditorLevelLibrary.get_all_level_actors()
for actor in all_actors:
# Recupera el valor de los metadatos de Datasmith de este actor para la clave establecida anteriormente, si existe.
actor_value = unreal.DatasmithContentLibrary.get_datasmith_user_data_value_for_key(actor, metadata_key)
# Si la clave existe y su valor contiene una palabra clave definida anteriormente, añade el actor a una lista.
if actor_value and metadata_value in actor_value:
print("Se ha encontrado un actor coincidente: " + actor_value)
meshes_to_join.add(actor)
# Une todos los actores encontrados anteriormente en un solo actor con muchos componentes.
options = unreal.EditorScriptingJoinStaticMeshActorsOptions(destroy_source_actors=True, new_actor_label=new_actor_name, rename_components_from_source=True)
unreal.EditorLevelLibrary.join_static_mesh_actors(meshes_to_join, options)
print "¡Se han fusionado todos los actores!"