Optimize Cutout Geometry Nodes
- Refactor Depth Cutout to reuse the projected outline field, reducing redundant boundary calculations and improving performance. - Derive the center field from shared low-frequency fields, eliminating an unnecessary blur operation. - Implement triangle-only strip cleanup for Depth Cutout, as the input is confirmed to be triangulated. - Short-circuit zero-thickness branches in both Cutout and Depth Cutout to avoid unnecessary geometry generation. - Standardize internal attribute naming with a new `_o_` prefix and implement wildcard cleanup for temporary attributes. - Update relevant tests to ensure functionality remains consistent and validate changes against existing behavior.
This commit is contained in:
@@ -134,15 +134,19 @@ def test_coincident_independent_sheets_do_not_weld_together():
|
||||
@pytest.mark.parametrize("resolution", [1, 4])
|
||||
def test_planar_depth_preserves_blocks_and_cleans_single_face_width(resolution):
|
||||
obj, set_value = surface(step=0.0, resolution=resolution)
|
||||
bm = bmesh.new()
|
||||
bm.from_mesh(obj.data)
|
||||
bmesh.ops.triangulate(bm, faces=list(bm.faces))
|
||||
bm.to_mesh(obj.data)
|
||||
bm.free()
|
||||
original, original_faces = evaluated(obj)
|
||||
set_value("Depth Split", 1.0)
|
||||
coords, faces = evaluated(obj)
|
||||
if resolution == 1:
|
||||
assert len(coords) == 0 and not faces
|
||||
return
|
||||
assert len(coords) == len(obj.data.vertices)
|
||||
assert len(faces) == len(obj.data.polygons)
|
||||
np.testing.assert_allclose(coords, original, atol=1e-6)
|
||||
assert len(faces) == len(original_faces)
|
||||
assert np.isfinite(coords).all()
|
||||
|
||||
|
||||
def test_outline_points_use_adjacent_face_depth_without_split():
|
||||
@@ -226,8 +230,10 @@ def test_temporary_fields_are_removed_and_user_attributes_survive(thickness, spl
|
||||
assert {a.name for a in mesh.attributes if a.name.startswith(("o_depth_", "o_balloon_surface_"))} == {"o_depth_probe"}
|
||||
assert "UVMap" in mesh.attributes
|
||||
assert ".o_anyimage_user_weight" in mesh.attributes
|
||||
assert "_o_anyimage_depth_cut" not in mesh.attributes
|
||||
assert ".o_anyimage_original_boundary" not in mesh.attributes
|
||||
assert ".o_anyimage_depth_cut" not in mesh.attributes
|
||||
assert not any(a.name.startswith("_o_") for a in mesh.attributes)
|
||||
assert all(
|
||||
v.value == pytest.approx(0.75)
|
||||
for v in mesh.attributes["o_user_weight"].data
|
||||
|
||||
Reference in New Issue
Block a user