Add cutout shell and volume node assets for depth volume processing

- Implemented `cutout_shell.py` to build front normals and shell positions for balloon geometry.
- Created `cutout_volume.py` to establish smooth center fields and manage balloon surface attributes.
- Introduced `pisa_sr_export.py` for exporting PiSA-SR components with dependencies and asset finalization.
This commit is contained in:
2026-09-08 17:18:03 +08:00
parent 7dec3b7ca4
commit 196b964efc
71 changed files with 3440 additions and 1988 deletions

View File

@@ -86,12 +86,12 @@ def test_cutout_pie_uses_two_local_shapes_without_ai(monkeypatch):
)
assert [call[2].shape for call in window_manager.pie.calls] == [
"SURFACE",
"BALLOON",
"FLAT",
"SOLID",
]
assert [call[1]["text"] for call in window_manager.pie.calls] == [
"Surface",
"Balloon",
"Flat",
"Solid",
]
assert all(
call[0] == "anyimage.cutout_selection_to_shape"
@@ -134,10 +134,10 @@ def test_cutout_pie_passes_image_lasso_options_to_all_ai_shapes(monkeypatch):
)
assert [call[2].shape for call in window_manager.pie.calls] == [
"SURFACE",
"BALLOON",
"FLAT",
"SOLID",
"DEPTH_BALLOON",
"DEPTH_SURFACE",
"DEPTH_SOLID",
]
assert all(call[2].generate_normal for call in window_manager.pie.calls)
assert all(call[2].alpha_threshold == 0.1 for call in window_manager.pie.calls)
@@ -158,11 +158,12 @@ def test_cutout_pie_passes_image_lasso_options_to_all_ai_shapes(monkeypatch):
def test_cutout_normal_space_is_derived_from_shape():
assert cutout_main.normal_mode_for_shape("DEPTH_SURFACE", False) == "NONE"
assert cutout_main.normal_mode_for_shape("SURFACE", True) == "TANGENT"
assert cutout_main.normal_mode_for_shape("BALLOON", True) == "TANGENT"
assert cutout_main.normal_mode_for_shape("DEPTH_SOLID", False) == "OBJECT"
assert cutout_main.normal_mode_for_shape("DEPTH_BALLOON", False) == "TANGENT"
assert cutout_main.normal_mode_for_shape("FLAT", True) == "TANGENT"
assert cutout_main.normal_mode_for_shape("SOLID", True) == "TANGENT"
assert cutout_main.normal_mode_for_shape("DEPTH_BALLOON", True) == "TANGENT"
assert cutout_main.normal_mode_for_shape("DEPTH_SURFACE", True) == "OBJECT"
assert cutout_main.normal_mode_for_shape("DEPTH_SOLID", True) == "OBJECT"
def test_cutout_mesh_detail_maps_to_denser_sampling():