Updated creators to be compatible with new publisher

This commit is contained in:
Simone Barbieri 2023-01-26 17:35:42 +00:00 committed by Ondřej Samohel
parent f0db455a09
commit 7284601d62
5 changed files with 65 additions and 160 deletions

View file

@ -1,41 +1,13 @@
import unreal
from unreal import EditorAssetLibrary as eal
from unreal import EditorLevelLibrary as ell
from openpype.hosts.unreal.api.pipeline import instantiate
from openpype.pipeline import LegacyCreator
# -*- coding: utf-8 -*-
from openpype.hosts.unreal.api.plugin import (
UnrealActorCreator,
)
class CreateCamera(LegacyCreator):
"""Layout output for character rigs"""
class CreateCamera(UnrealActorCreator):
"""Create Camera."""
name = "layoutMain"
identifier = "io.openpype.creators.unreal.camera"
label = "Camera"
family = "camera"
icon = "cubes"
root = "/Game/OpenPype/Instances"
suffix = "_INS"
def __init__(self, *args, **kwargs):
super(CreateCamera, self).__init__(*args, **kwargs)
def process(self):
data = self.data
name = data["subset"]
data["level"] = ell.get_editor_world().get_path_name()
if not eal.does_directory_exist(self.root):
eal.make_directory(self.root)
factory = unreal.LevelSequenceFactoryNew()
tools = unreal.AssetToolsHelpers().get_asset_tools()
tools.create_asset(name, f"{self.root}/{name}", None, factory)
asset_name = f"{self.root}/{name}/{name}.{name}"
data["members"] = [asset_name]
instantiate(f"{self.root}", name, data, None, self.suffix)
icon = "camera"

View file

@ -1,42 +1,13 @@
# -*- coding: utf-8 -*-
from unreal import EditorLevelLibrary
from openpype.pipeline import LegacyCreator
from openpype.hosts.unreal.api.pipeline import instantiate
from openpype.hosts.unreal.api.plugin import (
UnrealActorCreator,
)
class CreateLayout(LegacyCreator):
class CreateLayout(UnrealActorCreator):
"""Layout output for character rigs."""
name = "layoutMain"
identifier = "io.openpype.creators.unreal.layout"
label = "Layout"
family = "layout"
icon = "cubes"
root = "/Game"
suffix = "_INS"
def __init__(self, *args, **kwargs):
super(CreateLayout, self).__init__(*args, **kwargs)
def process(self):
data = self.data
name = data["subset"]
selection = []
# if (self.options or {}).get("useSelection"):
# sel_objects = unreal.EditorUtilityLibrary.get_selected_assets()
# selection = [a.get_path_name() for a in sel_objects]
data["level"] = EditorLevelLibrary.get_editor_world().get_path_name()
data["members"] = []
if (self.options or {}).get("useSelection"):
# Set as members the selected actors
for actor in EditorLevelLibrary.get_selected_level_actors():
data["members"].append("{}.{}".format(
actor.get_outer().get_name(), actor.get_name()))
instantiate(self.root, name, data, selection, self.suffix)

View file

@ -1,56 +1,53 @@
# -*- coding: utf-8 -*-
"""Create look in Unreal."""
import unreal # noqa
from openpype.hosts.unreal.api import pipeline, plugin
from openpype.pipeline import LegacyCreator
import unreal
from openpype.hosts.unreal.api.pipeline import (
create_folder
)
from openpype.hosts.unreal.api.plugin import (
UnrealAssetCreator
)
class CreateLook(LegacyCreator):
class CreateLook(UnrealAssetCreator):
"""Shader connections defining shape look."""
name = "unrealLook"
label = "Unreal - Look"
identifier = "io.openpype.creators.unreal.look"
label = "Look"
family = "look"
icon = "paint-brush"
root = "/Game/Avalon/Assets"
suffix = "_INS"
def __init__(self, *args, **kwargs):
super(CreateLook, self).__init__(*args, **kwargs)
def process(self):
name = self.data["subset"]
def create(self, subset_name, instance_data, pre_create_data):
selection = []
if (self.options or {}).get("useSelection"):
if pre_create_data.get("use_selection"):
sel_objects = unreal.EditorUtilityLibrary.get_selected_assets()
selection = [a.get_path_name() for a in sel_objects]
if len(selection) != 1:
raise RuntimeError("Please select only one asset.")
selected_asset = selection[0]
look_directory = "/Game/OpenPype/Looks"
# Create the folder
path = f"{self.root}/{self.data['asset']}"
new_name = pipeline.create_folder(path, name)
full_path = f"{path}/{new_name}"
folder_name = create_folder(look_directory, subset_name)
path = f"{look_directory}/{folder_name}"
# Create a new cube static mesh
ar = unreal.AssetRegistryHelpers.get_asset_registry()
cube = ar.get_asset_by_object_path("/Engine/BasicShapes/Cube.Cube")
# Create the avalon publish instance object
container_name = f"{name}{self.suffix}"
pipeline.create_publish_instance(
instance=container_name, path=full_path)
# Get the mesh of the selected object
original_mesh = ar.get_asset_by_object_path(selection[0]).get_asset()
materials = original_mesh.get_editor_property('materials')
original_mesh = ar.get_asset_by_object_path(selected_asset).get_asset()
materials = original_mesh.get_editor_property('static_materials')
self.data["members"] = []
instance_data["members"] = []
# Add the materials to the cube
for material in materials:
name = material.get_editor_property('material_slot_name')
object_path = f"{full_path}/{name}.{name}"
mat_name = material.get_editor_property('material_slot_name')
object_path = f"{path}/{mat_name}.{mat_name}"
unreal_object = unreal.EditorAssetLibrary.duplicate_loaded_asset(
cube.get_asset(), object_path
)
@ -61,8 +58,11 @@ class CreateLook(LegacyCreator):
unreal_object.add_material(
material.get_editor_property('material_interface'))
self.data["members"].append(object_path)
instance_data["members"].append(object_path)
unreal.EditorAssetLibrary.save_asset(object_path)
pipeline.imprint(f"{full_path}/{container_name}", self.data)
super(CreateLook, self).create(
subset_name,
instance_data,
pre_create_data)

View file

@ -1,35 +1,13 @@
# -*- coding: utf-8 -*-
"""Create Static Meshes as FBX geometry."""
import unreal # noqa
from openpype.hosts.unreal.api.pipeline import (
instantiate,
from openpype.hosts.unreal.api.plugin import (
UnrealAssetCreator,
)
from openpype.pipeline import LegacyCreator
class CreateStaticMeshFBX(LegacyCreator):
"""Static FBX geometry."""
class CreateStaticMeshFBX(UnrealAssetCreator):
"""Create Static Meshes as FBX geometry."""
name = "unrealStaticMeshMain"
label = "Unreal - Static Mesh"
identifier = "io.openpype.creators.unreal.staticmeshfbx"
label = "Static Mesh (FBX)"
family = "unrealStaticMesh"
icon = "cube"
asset_types = ["StaticMesh"]
root = "/Game"
suffix = "_INS"
def __init__(self, *args, **kwargs):
super(CreateStaticMeshFBX, self).__init__(*args, **kwargs)
def process(self):
name = self.data["subset"]
selection = []
if (self.options or {}).get("useSelection"):
sel_objects = unreal.EditorUtilityLibrary.get_selected_assets()
selection = [a.get_path_name() for a in sel_objects]
unreal.log("selection: {}".format(selection))
instantiate(self.root, name, self.data, selection, self.suffix)

View file

@ -1,36 +1,25 @@
"""Create UAsset."""
# -*- coding: utf-8 -*-
from pathlib import Path
import unreal
from openpype.hosts.unreal.api import pipeline
from openpype.pipeline import LegacyCreator
from openpype.hosts.unreal.api.plugin import (
UnrealAssetCreator,
)
class CreateUAsset(LegacyCreator):
"""UAsset."""
class CreateUAsset(UnrealAssetCreator):
"""Create UAsset."""
name = "UAsset"
identifier = "io.openpype.creators.unreal.uasset"
label = "UAsset"
family = "uasset"
icon = "cube"
root = "/Game/OpenPype"
suffix = "_INS"
def create(self, subset_name, instance_data, pre_create_data):
if pre_create_data.get("use_selection"):
ar = unreal.AssetRegistryHelpers.get_asset_registry()
def __init__(self, *args, **kwargs):
super(CreateUAsset, self).__init__(*args, **kwargs)
def process(self):
ar = unreal.AssetRegistryHelpers.get_asset_registry()
subset = self.data["subset"]
path = f"{self.root}/PublishInstances/"
unreal.EditorAssetLibrary.make_directory(path)
selection = []
if (self.options or {}).get("useSelection"):
sel_objects = unreal.EditorUtilityLibrary.get_selected_assets()
selection = [a.get_path_name() for a in sel_objects]
@ -50,12 +39,7 @@ class CreateUAsset(LegacyCreator):
if Path(sys_path).suffix != ".uasset":
raise RuntimeError(f"{Path(sys_path).name} is not a UAsset.")
unreal.log("selection: {}".format(selection))
container_name = f"{subset}{self.suffix}"
pipeline.create_publish_instance(
instance=container_name, path=path)
data = self.data.copy()
data["members"] = selection
pipeline.imprint(f"{path}/{container_name}", data)
super(CreateUAsset, self).create(
subset_name,
instance_data,
pre_create_data)