From 985f6974ec426268d56797c286a22a8d02a66766 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Tue, 9 Jul 2024 17:55:54 +0800 Subject: [PATCH 1/4] maya preset for alembic importer --- .../plugins/load/load_skeletalmesh_abc.py | 49 +++++++++++----- .../plugins/load/load_staticmesh_abc.py | 57 ++++++++++++------- 2 files changed, 73 insertions(+), 33 deletions(-) diff --git a/client/ayon_unreal/plugins/load/load_skeletalmesh_abc.py b/client/ayon_unreal/plugins/load/load_skeletalmesh_abc.py index 5db3e364..0928df2d 100644 --- a/client/ayon_unreal/plugins/load/load_skeletalmesh_abc.py +++ b/client/ayon_unreal/plugins/load/load_skeletalmesh_abc.py @@ -6,6 +6,7 @@ get_representation_path, AYON_CONTAINER_ID ) +from ayon_core.lib import EnumDef from ayon_unreal.api import plugin from ayon_unreal.api.pipeline import ( AYON_ASSET_DIR, @@ -26,8 +27,23 @@ class SkeletalMeshAlembicLoader(plugin.Loader): root = AYON_ASSET_DIR + @classmethod + def get_options(cls, contexts): + return [ + EnumDef( + "abc_conversion_preset", + label="Alembic Conversion Preset", + items={ + "custom": "custom", + "maya": "maya" + }, + default="maya" + ) + ] + + @staticmethod - def get_task(filename, asset_dir, asset_name, replace, default_conversion): + def get_task(filename, asset_dir, asset_name, replace, loaded_options): task = unreal.AssetImportTask() options = unreal.AbcImportSettings() conversion_settings = unreal.AbcConversionSettings( @@ -46,12 +62,18 @@ def get_task(filename, asset_dir, asset_name, replace, default_conversion): options.set_editor_property( 'import_type', unreal.AlembicImportType.SKELETAL) - if not default_conversion: - conversion_settings = unreal.AbcConversionSettings( - preset=unreal.AbcConversionPreset.CUSTOM, - flip_u=False, flip_v=False, - rotation=[0.0, 0.0, 0.0], - scale=[1.0, 1.0, 1.0]) + if not loaded_options.get("default_conversion"): + conversion_settings = None + abc_conversion_preset = loaded_options.get("abc_conversion_preset") + if abc_conversion_preset == "maya": + conversion_settings = unreal.AbcConversionSettings( + preset= unreal.AbcConversionPreset.MAYA) + else: + conversion_settings = unreal.AbcConversionSettings( + preset=unreal.AbcConversionPreset.CUSTOM, + flip_u=False, flip_v=True, + rotation=[0.0, 0.0, 0.0], + scale=[1.0, 1.0, 1.0]) options.conversion_settings = conversion_settings task.options = options @@ -60,12 +82,12 @@ def get_task(filename, asset_dir, asset_name, replace, default_conversion): def import_and_containerize( self, filepath, asset_dir, asset_name, container_name, - default_conversion=False + loaded_options ): unreal.EditorAssetLibrary.make_directory(asset_dir) task = self.get_task( - filepath, asset_dir, asset_name, False, default_conversion) + filepath, asset_dir, asset_name, False, loaded_options) unreal.AssetToolsHelpers.get_asset_tools().import_asset_tasks([task]) @@ -125,9 +147,10 @@ def load(self, context, name, namespace, options): else: name_version = f"{name}_v{version:03d}" - default_conversion = False - if options.get("default_conversion"): - default_conversion = options.get("default_conversion") + loaded_options = { + "default_conversion": options.get("default_conversion", False), + "abc_conversion_preset": options.get("abc_conversion_preset", "maya") + } tools = unreal.AssetToolsHelpers().get_asset_tools() asset_dir, container_name = tools.create_unique_asset_name( @@ -139,7 +162,7 @@ def load(self, context, name, namespace, options): path = self.filepath_from_context(context) self.import_and_containerize(path, asset_dir, asset_name, - container_name, default_conversion) + container_name, loaded_options) product_type = context["product"]["productType"] self.imprint( diff --git a/client/ayon_unreal/plugins/load/load_staticmesh_abc.py b/client/ayon_unreal/plugins/load/load_staticmesh_abc.py index f60a173c..1a1d6658 100644 --- a/client/ayon_unreal/plugins/load/load_staticmesh_abc.py +++ b/client/ayon_unreal/plugins/load/load_staticmesh_abc.py @@ -12,6 +12,7 @@ create_container, imprint, ) +from ayon_core.lib import EnumDef import unreal # noqa @@ -26,8 +27,22 @@ class StaticMeshAlembicLoader(plugin.Loader): root = AYON_ASSET_DIR + @classmethod + def get_options(cls, contexts): + return [ + EnumDef( + "abc_conversion_preset", + label="Alembic Conversion Preset", + items={ + "custom": "custom", + "maya": "maya" + }, + default="maya" + ) + ] + @staticmethod - def get_task(filename, asset_dir, asset_name, replace, default_conversion): + def get_task(filename, asset_dir, asset_name, replace, loaded_options): task = unreal.AssetImportTask() options = unreal.AbcImportSettings() sm_settings = unreal.AbcStaticMeshSettings() @@ -46,12 +61,18 @@ def get_task(filename, asset_dir, asset_name, replace, default_conversion): sm_settings.set_editor_property('merge_meshes', True) - if not default_conversion: - conversion_settings = unreal.AbcConversionSettings( - preset=unreal.AbcConversionPreset.CUSTOM, - flip_u=False, flip_v=False, - rotation=[0.0, 0.0, 0.0], - scale=[1.0, 1.0, 1.0]) + if not loaded_options.get("default_conversion"): + conversion_settings = None + abc_conversion_preset = loaded_options.get("abc_conversion_preset") + if abc_conversion_preset == "maya": + conversion_settings = unreal.AbcConversionSettings( + preset= unreal.AbcConversionPreset.MAYA) + else: + conversion_settings = unreal.AbcConversionSettings( + preset=unreal.AbcConversionPreset.CUSTOM, + flip_u=False, flip_v=True, + rotation=[0.0, 0.0, 0.0], + scale=[1.0, 1.0, 1.0]) options.conversion_settings = conversion_settings options.static_mesh_settings = sm_settings @@ -61,12 +82,12 @@ def get_task(filename, asset_dir, asset_name, replace, default_conversion): def import_and_containerize( self, filepath, asset_dir, asset_name, container_name, - default_conversion=False + loaded_options ): unreal.EditorAssetLibrary.make_directory(asset_dir) task = self.get_task( - filepath, asset_dir, asset_name, False, default_conversion) + filepath, asset_dir, asset_name, False, loaded_options) unreal.AssetToolsHelpers.get_asset_tools().import_asset_tasks([task]) @@ -116,7 +137,7 @@ def load(self, context, name, namespace, options): """ # Create directory for asset and Ayon container folder_path = context["folder"]["path"] - folder_name = context["folder"]["path"] + folder_name = context["folder"]["name"] suffix = "_CON" asset_name = f"{folder_name}_{name}" if folder_name else f"{name}" @@ -126,22 +147,18 @@ def load(self, context, name, namespace, options): name_version = f"{name}_hero" else: name_version = f"{name}_v{version:03d}" - - default_conversion = False - if options.get("default_conversion"): - default_conversion = options.get("default_conversion") + loaded_options = { + "default_conversion": options.get("default_conversion", False), + "abc_conversion_preset": options.get("abc_conversion_preset", "maya") + } tools = unreal.AssetToolsHelpers().get_asset_tools() asset_dir, container_name = tools.create_unique_asset_name( f"{self.root}/{folder_name}/{name_version}", suffix="") - - container_name += suffix - if not unreal.EditorAssetLibrary.does_directory_exist(asset_dir): path = self.filepath_from_context(context) - self.import_and_containerize(path, asset_dir, asset_name, - container_name, default_conversion) + container_name, loaded_options) product_type = context["product"]["productType"] self.imprint( @@ -156,7 +173,7 @@ def load(self, context, name, namespace, options): asset_content = unreal.EditorAssetLibrary.list_assets( asset_dir, recursive=True, include_folder=False ) - + unreal.log(asset_content) for a in asset_content: unreal.EditorAssetLibrary.save_asset(a) From dbaaa99970077f3e230f4155f33dfc8b47f269e8 Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Tue, 9 Jul 2024 18:15:02 +0800 Subject: [PATCH 2/4] ruff cosmetic fix --- client/ayon_unreal/plugins/load/load_staticmesh_abc.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/ayon_unreal/plugins/load/load_staticmesh_abc.py b/client/ayon_unreal/plugins/load/load_staticmesh_abc.py index 1a1d6658..43f457ed 100644 --- a/client/ayon_unreal/plugins/load/load_staticmesh_abc.py +++ b/client/ayon_unreal/plugins/load/load_staticmesh_abc.py @@ -155,8 +155,12 @@ def load(self, context, name, namespace, options): tools = unreal.AssetToolsHelpers().get_asset_tools() asset_dir, container_name = tools.create_unique_asset_name( f"{self.root}/{folder_name}/{name_version}", suffix="") + + container_name += suffix + if not unreal.EditorAssetLibrary.does_directory_exist(asset_dir): path = self.filepath_from_context(context) + self.import_and_containerize(path, asset_dir, asset_name, container_name, loaded_options) From 2411189415f933968fd7df1b4e6f726575c2277a Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Tue, 9 Jul 2024 18:15:37 +0800 Subject: [PATCH 3/4] ruff cosmetic fix --- client/ayon_unreal/plugins/load/load_staticmesh_abc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/ayon_unreal/plugins/load/load_staticmesh_abc.py b/client/ayon_unreal/plugins/load/load_staticmesh_abc.py index 43f457ed..77411c3d 100644 --- a/client/ayon_unreal/plugins/load/load_staticmesh_abc.py +++ b/client/ayon_unreal/plugins/load/load_staticmesh_abc.py @@ -162,7 +162,7 @@ def load(self, context, name, namespace, options): path = self.filepath_from_context(context) self.import_and_containerize(path, asset_dir, asset_name, - container_name, loaded_options) + container_name, loaded_options) product_type = context["product"]["productType"] self.imprint( From 47056ed4f3178be8bb2584b14761f89407de9bba Mon Sep 17 00:00:00 2001 From: Kayla Man Date: Tue, 9 Jul 2024 18:16:38 +0800 Subject: [PATCH 4/4] ruff cosmetic fix --- client/ayon_unreal/plugins/load/load_skeletalmesh_abc.py | 2 +- client/ayon_unreal/plugins/load/load_staticmesh_abc.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/ayon_unreal/plugins/load/load_skeletalmesh_abc.py b/client/ayon_unreal/plugins/load/load_skeletalmesh_abc.py index 0928df2d..8d4faeb4 100644 --- a/client/ayon_unreal/plugins/load/load_skeletalmesh_abc.py +++ b/client/ayon_unreal/plugins/load/load_skeletalmesh_abc.py @@ -71,7 +71,7 @@ def get_task(filename, asset_dir, asset_name, replace, loaded_options): else: conversion_settings = unreal.AbcConversionSettings( preset=unreal.AbcConversionPreset.CUSTOM, - flip_u=False, flip_v=True, + flip_u=False, flip_v=False, rotation=[0.0, 0.0, 0.0], scale=[1.0, 1.0, 1.0]) options.conversion_settings = conversion_settings diff --git a/client/ayon_unreal/plugins/load/load_staticmesh_abc.py b/client/ayon_unreal/plugins/load/load_staticmesh_abc.py index 77411c3d..1797d38b 100644 --- a/client/ayon_unreal/plugins/load/load_staticmesh_abc.py +++ b/client/ayon_unreal/plugins/load/load_staticmesh_abc.py @@ -70,7 +70,7 @@ def get_task(filename, asset_dir, asset_name, replace, loaded_options): else: conversion_settings = unreal.AbcConversionSettings( preset=unreal.AbcConversionPreset.CUSTOM, - flip_u=False, flip_v=True, + flip_u=False, flip_v=False, rotation=[0.0, 0.0, 0.0], scale=[1.0, 1.0, 1.0]) options.conversion_settings = conversion_settings