O Datasmith Importer pode levar de forma automática metadados sobre os objetos que ele gerencia: informações que você configura para esses objetos no seu design 3D ou aplicativo CAD. Os metadados são usados com mais frequência para armazenar informações do mundo real sobre a peça mecânica ou elemento arquitetônico que o ativo representa, como o custo da peça; o material de que é feita; suas propriedades físicas, como peso ou eficiência de isolamento ou; informações de uso, como o torque máximo a ser aplicado a uma peça. Você também pode usar os metadados para armazenar qualquer outro tipo de informação sobre um ativo que possa ser necessário para o seu projeto.
Ter esses metadados disponíveis no Unreal Editor e na Unreal Engine pode ajudar você de duas maneiras:
- No pipeline de ativos: Você pode usar metadados ao importar ativos e configurar níveis para ajudar a distinguir diferentes tipos de ativos e atores que precisam de processamentos diferentes. Por exemplo:
- Você pode usar os metadados durante o processo de importação do Datasmith para identificar certos tipos de ativos que não serão necessários na cena final e pular sua importação.
- Após a importação, você pode usá-lo para identificar atores no nível que deseja mesclar, unir ou substituir, ou cujos materiais deseja substituir.
- No tempo de execução no jogo: Você pode usar os metadados no tempo de execução para mostrar aos usuários informações selecionadas sobre os atores que vêm da ferramenta de design de origem. Por exemplo:
- Se os objetos em seu nível tiverem dados BIM que contêm informações sobre suas propriedades estruturais, você pode querer visualizar essas informações em sua experiência interativa quando o jogador selecionar esses objetos na cena.
- Ou, se o projeto for um configurador de produto que permite ao jogador escolher entre diferentes opções de design, você pode querer que a lógica de jogabilidade calcule e mostre um total acumulado do custo das escolhas atuais do jogador com base nos metadados de custo atribuídos ao ativos visíveis.
Esta página descreve como obter metadados na Unreal Engine por meio do processo de importação do Datasmith e a acessá-los em seus scripts no Editor e no tempo de execução.
As origens dos metadados
No momento, o Datasmith importa metadados das seguintes ferramentas de design:
- Autodesk 3ds Max
- Autodesk Revit
- Dassault Systèmes Solidworks
- Trimble SketchUp Pro
- Maxon Cinema 4D
- IFC 2x3 files
- Graphisoft Archicad
- Autodesk Navisworks
- McNeel Rhinoceros (Rhino)
Atualmente, o Datasmith gerencia apenas com metadados de geometria e não com outros tipos de objetos de cena, como luzes ou câmeras.
Como visualizar metadados no Unreal Editor
Após a conclusão do processo de importação do Datasmith, você poderá visualizar os metadados de qualquer ator de malha estática no nível no painel Detalhes correspondente, na seção Asset User Data:
No momento, os metadados do Datasmith são somente leitura no editor.
Como acessar metadados em Blueprint e Python
Existem várias maneiras diferentes de acessar os metadados associados aos objetos de cena. A opção que você deve usar depende da sua necessidade de acessar os metadados durante o processo de importação do Datasmith ou após a conclusão da importação.
Todas as chaves e valores de metadados são armazenados como strings na Unreal Engine, independentemente do tipo original no design ou aplicativo CAD. Por exemplo, se você definir um valor de metadados no 3ds Max como um valor booleano como true ou como um número como 312, eles serão strings quando você os ler de volta em um código na Unreal Engine. Se precisar que os valores sejam booleanos ou números usem um nó de conversão de Blueprint como Utilities, String, String to Int ou String to Float, ou funções integradas de Python, como int() ou float().
Como acessar metadados durante a importação
Se precisar acessar seus metadados durante o processo de importação do Datasmith, por exemplo, para identificar certas malhas que deseja filtrar antes de gerar ativos Unreal para sua cena, você poderá ler os metadados da cena do Datasmith. Consulte informações básicas sobre como executar um script durante o processo de entrada em Como personalizar o processo de importação do Datasmith.
Você encontrará os metadados anexados aos elementos do ator de malha na cena do Datasmith.
Os nós necessários ficam em Datasmith > Scene e Datasmith > Element.
Para acessar esses nós, desabilite a caixa de seleção Context Sensitive no menu de contexto ou encontre os nós necessários na paleta.
| Nó | Descrição |
|---|---|
| Get All Metadata | Recupera uma matriz de todos os objetos de metadados registrados para todos os objetos na cena do Datasmith. |
| Get All Objects and Values for Key | Recupera uma lista de todos os objetos na cena do Datasmith que têm uma chave especificada. Você também verá uma lista de valores registrados para essa chave em todos esses objetos. |
| Get Metadata for Object | Recupera todos os metadados atribuídos a um objeto especificado. |
| Get Metadata Value for Key | Recupera o valor de uma chave especificada atribuída a um objeto especificado. |
| Get Metadata Keys and Values for Value | Recupera todas as chaves em um objeto especificado cujo valor corresponde à entrada String to Match. |
Para os nós acima que retornam um objeto Datasmith Metadata Element, você pode obter as chaves e os valores do objeto de metadados usando Datasmith > Element > Get Properties, Get Property e Get Property Count:
Exemplo de uso
Este exemplo mostra como você pode usar os valores atribuídos a uma chave de metadados para identificar geometrias desnecessárias no projeto e removê-las da cena do Datasmith antes de criar ativos de malha estática:
Durante o processo de importação do Datasmith, você pode acessar os metadados sobre os objetos de cena por meio do objeto unreal.DatasmithSceneElement. Consulte detalhes sobre as funções a seguir em Referência da API em Python.
|
|
|
|
|
Exemplo de uso
Este exemplo mostra como você pode usar os valores atribuídos a uma chave de metadados para identificar geometrias desnecessárias no projeto e removê-las da cena do Datasmith antes de criar ativos de malha estática:
key_name = "name"
remove_keyword = "Clutch"
meshes_to_skip = set([])
# Obtenha todos os elementos de cena que têm a chave "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]
# Itere por elas procurando aquelas cujos valor correspondam a uma palavra-chave.
for index, value in enumerate(values):
if remove_keyword in value:
print("removendo ator chamado: " + value)
# Remova o elemento de ator da malha da cena e coloque o elemento da malha em uma lista para remover mais 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)
# Remova todas as malhas que não precisamos importar.
for mesh in meshes_to_skip:
mesh_name = mesh.get_element_name()
print("removendo a malha chamada:" + mesh_name)
ds_scene_in_memory.remove_mesh(mesh)
Como acessar metadados após a importação
Quando o processo de importação da cena do Datasmith em ativos e atores da Unreal Engine é concluído, ele também aplica os metadados de cada elemento de malha na cena do Datasmith a todos os atores no nível que representam instâncias desse ativo de malha estática. Em seguida, você pode usar Blueprint ou Python para recuperar os metadados de um ou de todos os atores de malha estática no nível.
Os nós a seguir acessam metadados de um ator específico. Como eles têm pouco impacto no desempenho, você pode usá-los a qualquer momento, até mesmo no tempo de execução do projeto. Se quiser visualizar os metadados importados de um ou mais objetos selecionados na cena, como uma chamada ou menu na interface de usuário do tempo de execução do projeto, use esses nós nos gráficos de Blueprint no tempo de execução.
Você os encontrará na categoria Datasmith User Data.
| Nó | Descrição |
|---|---|
| Get Datasmith User Data Value for Key | Recupera o valor dos metadados com a chave especificada atribuída ao objeto especificado. |
| Get Datasmith User Data Keys and Values for Value | Recupera todas as chaves no objeto especificado que têm o valor especificado na entrada String to Match. Use esse nó se souber o valor que está procurando, mas não o nome da chave. |
| Get Datasmith User Data | Recupera um objeto de metadados que contém todos os pares chave-valor registrados para o ator, para que você possa iterar por meio deles. |
Os nós seguintes, diferentemente, acessam os metadados de todos os atores de malha estática no nível atual (ou todos que compartilham uma determinada classe). Como seu nível pode conter um grande número de atores, com muitas propriedades, essas funções podem consumir muitos recursos da CPU e prejudicar o desempenho quando usadas na jogabilidade no tempo de execução. Portanto, você só pode usá-los em gráficos criados em classes de Blueprint exclusivas do editor.
Você encontrará esses nós na categoria Editor Scripting, Datasmith User Data.
| Nó | Descrição |
|---|---|
| Get All Objects and Values for Key | Recupera uma lista de todos os atores no nível atual que têm uma chave especificada nos metadados do Datasmith. Você também verá uma lista de valores registrados para essa chave em todos esses objetos. |
| Get All Datasmith User Data | Recupera a lista completa de objetos de metadados para todos os atores no nível atual. |
Os nós Get Datasmith User Data e Get All Datasmith User Data acima retornam referências de objeto de dados de usuário do Datasmith. Esse objeto tem uma variável que você pode acessar, chamada "Metadata", que é um mapa de todos os pares chave-valor que formam os metadados do Datasmith do objeto. Para trabalhar com esse tipo de objeto, arraste do pin de saída e selecione Variables, Get Metadata:
Assim, você receberá as chaves e os valores como um mapa. Você pode usar os nós utilitários na categoria Utilities, Map para trabalhar com os dados. Por exemplo, este gráfico itera por todas as chaves individualmente e recupera o valor associado a cada chave:
Consulte mais informações sobre os nós Blueprint Map em Referência da API de Blueprint.
Exemplo de uso
Esta seção mostra um exemplo simplificado de como visualizar os metadados do ativo no tempo de execução para um objeto que o jogador seleciona no nível.
O texto é escrito por um widget UMG que contém dois campos de texto, cada um vinculado a uma variável de string. No gráfico de Blueprint do widget, uma ação personalizada extrai dois itens de metadados do Datasmith de um ator que você passa em um evento personalizado e salva esses itens nas variáveis vinculadas.
O Blueprint de nível a seguir mostra um exemplo de como adicionar um widget como este quando o jogo começa e como alimentá-lo com o ator sob o cursor sempre que o usuário pressionar um botão do mouse.
Consulte mais informações sobre como criar interfaces do usuário no UMG no UMG UI Designer Quick Start Guide e nas seções relacionadas.
Após o processo de importação do Datasmith, você pode acessar os metadados de todos os atores ou de atores selecionados usando a classe unreal.DatasmithContentLibrary. Consulte detalhes sobre as funções a seguir na Referência à API Python.
|
|
|
|
|
Exemplo de uso
Nos scripts Python executados no Unreal Editor, você pode usar metadados do Datasmith após a importação para identificar atores de malha estática no nível aos quais deseja aplicar um processamento especial específico.
import unreal
new_actor_name = "Exterior Walls"
metadata_key = "Type"
metadata_value = "Wall: Exterior"
meshes_to_join = set([])
# Itere pelos atores no nível atual.
all_actors = unreal.EditorLevelLibrary.get_all_level_actors()
for actor in all_actors:
# Recupere o valor dos metadados do Datasmith deste ator para a chave definida acima, se houver.
actor_value = unreal.DatasmithContentLibrary.get_datasmith_user_data_value_for_key(actor, metadata_key)
# Se a chave existir e seu valor contiver uma palavra-chave definida acima, adicione o ator a uma lista.
if actor_value and metadata_value in actor_value:
print("ator correspondente encontrado: " + actor_value)
meshes_to_join.add(actor)
# Une todos os atores encontrados acima em um único ator com muitos 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 "Todos os atores mesclados!"