feat: Add MoGe-2 support and enhance depth plane functionality
- Introduced new MoGe-2 depth plane group with geometry and material displacement options. - Updated existing depth plane group to improve background depth handling and subdivision settings. - Enhanced tests to validate MoGe-2 models and ensure proper integration with existing systems. - Modified installation environment to include new dependencies for MoGe-2 and utils3d. - Updated vendor lock file to include new artifacts for MoGe and utils3d. - Refactored download and model handling to accommodate new MoGe-2 models. - Improved validation scripts for depth plane assets to ensure compliance with new specifications.
This commit is contained in:
@@ -138,6 +138,15 @@ class AddonTest(unittest.TestCase):
|
||||
self.addon.BuildDepthPlane.bl_options,
|
||||
{"INTERNAL"},
|
||||
)
|
||||
self.assertIn(
|
||||
"snapform_color_frames_dir",
|
||||
self.addon.BuildDepthPlane.__annotations__,
|
||||
)
|
||||
self.assertIn(
|
||||
"snapform_depth_frames_dir",
|
||||
self.addon.BuildDepthPlane.__annotations__,
|
||||
)
|
||||
self.assertIn("execute", self.addon.BuildDepthPlane.__dict__)
|
||||
self.assertFalse(hasattr(self.addon, "ImportDepthPlane"))
|
||||
|
||||
def test_registers_perspective_mesh_operators(self):
|
||||
@@ -553,7 +562,7 @@ class AddonTest(unittest.TestCase):
|
||||
|
||||
def test_original_depth_background_starts_independent_job(self):
|
||||
operator = self.addon.ConvertImageToDepthPlane()
|
||||
operator.snapform_depth_source = "ORIGINAL"
|
||||
operator.snapform_model = "ORIGINAL"
|
||||
operator.snapform_unshaded = False
|
||||
operator.snapform_remove_background = True
|
||||
operator.snapform_keep_original = True
|
||||
@@ -586,7 +595,7 @@ class AddonTest(unittest.TestCase):
|
||||
|
||||
def test_original_depth_animation_extracts_frames_and_background(self):
|
||||
operator = self.addon.ConvertImageToDepthPlane()
|
||||
operator.snapform_depth_source = "ORIGINAL"
|
||||
operator.snapform_model = "ORIGINAL"
|
||||
operator.snapform_unshaded = False
|
||||
operator.snapform_remove_background = True
|
||||
operator.snapform_keep_original = True
|
||||
@@ -630,7 +639,7 @@ class AddonTest(unittest.TestCase):
|
||||
|
||||
def test_original_depth_without_background_uses_frame_extraction(self):
|
||||
operator = self.addon.ConvertImageToDepthPlane()
|
||||
operator.snapform_depth_source = "ORIGINAL"
|
||||
operator.snapform_model = "ORIGINAL"
|
||||
operator.snapform_unshaded = False
|
||||
operator.snapform_remove_background = False
|
||||
operator.snapform_keep_original = False
|
||||
@@ -664,10 +673,7 @@ class AddonTest(unittest.TestCase):
|
||||
def test_conversion_dialog_exposes_requested_settings(self):
|
||||
operator = self.addon.ConvertImageToDepthPlane
|
||||
|
||||
self.assertNotIn(
|
||||
"default",
|
||||
operator.__annotations__["snapform_model"],
|
||||
)
|
||||
self.assertEqual(operator.__annotations__["snapform_model"]["default"], 1)
|
||||
self.assertTrue(operator.__annotations__["snapform_use_ray_pose"]["default"])
|
||||
self.assertEqual(
|
||||
operator.__annotations__["snapform_process_res_factor"]["default"],
|
||||
@@ -693,23 +699,16 @@ class AddonTest(unittest.TestCase):
|
||||
self.assertEqual(
|
||||
set(operator.__annotations__),
|
||||
{
|
||||
"snapform_depth_source",
|
||||
"snapform_unshaded",
|
||||
"snapform_model",
|
||||
"snapform_use_ray_pose",
|
||||
"snapform_process_res_factor",
|
||||
"snapform_moge_resolution_level",
|
||||
"snapform_remove_background",
|
||||
"snapform_keep_original",
|
||||
},
|
||||
)
|
||||
depth_sources = operator.__annotations__["snapform_depth_source"]
|
||||
self.assertEqual(depth_sources["default"], "ORIGINAL")
|
||||
self.assertEqual(
|
||||
[item[0] for item in depth_sources["items"]],
|
||||
["ESTIMATE", "ORIGINAL"],
|
||||
)
|
||||
self.assertEqual(depth_sources["items"][0][1], "AI Generated")
|
||||
self.assertEqual(depth_sources["name"], "Depth from")
|
||||
self.assertEqual(operator.__annotations__["snapform_model"]["name"], "Model")
|
||||
self.assertEqual(
|
||||
operator.__annotations__["snapform_unshaded"]["name"],
|
||||
"Unshaded",
|
||||
@@ -724,11 +723,12 @@ class AddonTest(unittest.TestCase):
|
||||
self.assertEqual(
|
||||
[item[0] for item in model_items],
|
||||
[
|
||||
"MOGE2_VITS_NORMAL",
|
||||
"MOGE2_VITB_NORMAL",
|
||||
"MOGE2_VITL_NORMAL",
|
||||
"SMALL",
|
||||
"BASE",
|
||||
"LARGE_1_1",
|
||||
"GIANT_1_1",
|
||||
"NESTED_GIANT_LARGE_1_1",
|
||||
"ORIGINAL",
|
||||
],
|
||||
)
|
||||
|
||||
@@ -758,7 +758,7 @@ class AddonTest(unittest.TestCase):
|
||||
result = operator.invoke(context, None)
|
||||
|
||||
self.assertIs(result, operator)
|
||||
self.assertEqual(operator.snapform_model, "GIANT_1_1")
|
||||
self.assertNotEqual(getattr(operator, "snapform_model", ""), "GIANT_1_1")
|
||||
|
||||
def test_remove_background_defaults_to_empty_image_frames(self):
|
||||
source_object = SimpleNamespace(
|
||||
@@ -808,7 +808,6 @@ class AddonTest(unittest.TestCase):
|
||||
)
|
||||
context = SimpleNamespace(object=source_object, scene=scene)
|
||||
operator = self.addon.ConvertImageToDepthPlane()
|
||||
operator.snapform_depth_source = "ESTIMATE"
|
||||
operator.snapform_model = "BASE"
|
||||
operator.snapform_use_ray_pose = True
|
||||
operator.snapform_process_res_factor = 50.0
|
||||
@@ -839,7 +838,7 @@ class AddonTest(unittest.TestCase):
|
||||
self.assertTrue(calls[0]["snapform_remove_background"])
|
||||
self.assertNotIn("snapform_background_depth_distance", calls[0])
|
||||
|
||||
def test_conversion_dialog_only_lists_installed_models(self):
|
||||
def test_conversion_dialog_marks_missing_models(self):
|
||||
items_callback = self.addon.ConvertImageToDepthPlane.__annotations__[
|
||||
"snapform_model"
|
||||
]["items"]
|
||||
@@ -850,7 +849,20 @@ class AddonTest(unittest.TestCase):
|
||||
):
|
||||
items = items_callback(None, None)
|
||||
|
||||
self.assertEqual([item[0] for item in items], ["SMALL", "BASE"])
|
||||
self.assertEqual(
|
||||
[item[0] for item in items],
|
||||
[
|
||||
"MOGE2_VITS_NORMAL",
|
||||
"MOGE2_VITB_NORMAL",
|
||||
"MOGE2_VITL_NORMAL",
|
||||
"SMALL",
|
||||
"BASE",
|
||||
"ORIGINAL",
|
||||
],
|
||||
)
|
||||
labels = {item[0]: item[1] for item in items}
|
||||
self.assertEqual(labels["BASE"], "DA3 Base")
|
||||
self.assertEqual(labels["MOGE2_VITB_NORMAL"], "MoGe-2 ViT-B Normal (Missing)")
|
||||
|
||||
def test_update_status_formats_stage_progress(self):
|
||||
operator = self.addon.RunJob()
|
||||
@@ -936,7 +948,6 @@ class AddonTest(unittest.TestCase):
|
||||
|
||||
def test_packed_image_is_exported_without_unpacking(self):
|
||||
operator = self.addon.ConvertImageToDepthPlane()
|
||||
operator.snapform_depth_source = "ESTIMATE"
|
||||
operator.snapform_model = "GIANT_1_1"
|
||||
operator.snapform_use_ray_pose = True
|
||||
operator.snapform_process_res_factor = 50.0
|
||||
@@ -1869,7 +1880,7 @@ class AddonTest(unittest.TestCase):
|
||||
|
||||
self.assertEqual(
|
||||
identifiers,
|
||||
["GIANT_1_1", "NESTED_GIANT_LARGE_1_1"],
|
||||
[],
|
||||
)
|
||||
|
||||
def test_device_enums_list_only_supported_devices(self):
|
||||
@@ -1966,7 +1977,7 @@ class AddonTest(unittest.TestCase):
|
||||
"model_ready",
|
||||
return_value=False,
|
||||
):
|
||||
self.assertFalse(
|
||||
self.assertTrue(
|
||||
self.addon.ConvertImageToDepthPlane.poll(context)
|
||||
)
|
||||
|
||||
@@ -1977,6 +1988,7 @@ class AddonTest(unittest.TestCase):
|
||||
)
|
||||
panels = (
|
||||
self.addon.Da3OutputDebugPanel,
|
||||
self.addon.Moge2ApiDebugPanel,
|
||||
self.addon.Ben2RemovalDebugPanel,
|
||||
)
|
||||
for panel in panels:
|
||||
@@ -1984,7 +1996,7 @@ class AddonTest(unittest.TestCase):
|
||||
self.assertIn("DEFAULT_CLOSED", panel.bl_options)
|
||||
self.assertEqual(
|
||||
[panel.bl_label for panel in panels],
|
||||
["DA3 Output Test", "BEN2 Removal Test"],
|
||||
["DA3 Output Test", "MoGe-2 API Test", "BEN2 Removal Test"],
|
||||
)
|
||||
|
||||
def test_service_panel_exposes_shared_service_state_and_controls(self):
|
||||
|
||||
Reference in New Issue
Block a user