- 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.
38 lines
1.4 KiB
Python
38 lines
1.4 KiB
Python
"""Check temporary attribute lifetimes across depth modifier branches."""
|
|
|
|
import bpy
|
|
import pytest
|
|
|
|
from tests.support.depth_surface import surface
|
|
from tests.support.planes import create_surface
|
|
from tests.tools.nodes.test_image_depth_panorama import panorama
|
|
|
|
|
|
@pytest.mark.parametrize("kind", ["cutout", "plane", "panorama"])
|
|
def test_depth_attribute_cleanup_has_no_warnings(kind):
|
|
if kind == "cutout":
|
|
obj, set_value = surface()
|
|
elif kind == "plane":
|
|
obj, set_value, *_ = create_surface("DEPTH")
|
|
else:
|
|
obj, set_value = panorama(subdivide=2)
|
|
modifier = obj.modifiers[0]
|
|
for split in (0.0, 0.5, 0.0):
|
|
set_value("Depth Split", split)
|
|
for smooth in (0, 5):
|
|
set_value("Boundary Smooth", smooth)
|
|
evaluated = obj.evaluated_get(bpy.context.evaluated_depsgraph_get())
|
|
mesh = evaluated.to_mesh()
|
|
try:
|
|
assert mesh.vertices
|
|
assert not {a.name for a in mesh.attributes} & {
|
|
".o_anyimage_depth_cut", ".o_anyimage_original_boundary",
|
|
"_o_anyimage_depth_cut",
|
|
}
|
|
assert not any(a.name.startswith("_o_") for a in mesh.attributes)
|
|
assert not list(modifier.node_warnings), [
|
|
warning.message for warning in modifier.node_warnings
|
|
]
|
|
finally:
|
|
evaluated.to_mesh_clear()
|