Merge branch 'blender-v4.5-release'

This commit is contained in:
Jesse Yurkovich
2025-07-08 19:45:03 -07:00
3 changed files with 181 additions and 1 deletions

View File

@@ -288,6 +288,54 @@ class USDImportTest(AbstractUSDTest):
check_mod("mesh6", 1, 2, 'SMOOTH_ALL', 'ALL')
check_mod("mesh7", 1, 2, 'PRESERVE_BOUNDARIES', 'PRESERVE_CORNERS')
def test_import_mesh_subd_varying(self):
"""Test importing meshes with subdivision crease values varying over time."""
testfile = str(self.testdir / "usd_mesh_subd_varying_test.usda")
res = bpy.ops.wm.usd_import(filepath=testfile)
self.assertEqual({'FINISHED'}, res, f"Unable to import USD file {testfile}")
stage = Usd.Stage.Open(testfile)
#
# Validate Mesh data
#
blender_mesh1 = bpy.data.objects["mesh_edge_crease"]
blender_mesh2 = bpy.data.objects["mesh_vert_crease"]
usd_mesh1 = UsdGeom.Mesh(stage.GetPrimAtPath("/root/mesh_edge_crease/mesh_edge_crease"))
usd_mesh2 = UsdGeom.Mesh(stage.GetPrimAtPath("/root/mesh_vert_crease/mesh_vert_crease"))
# A MeshSequenceCache modifier should be present on every imported object
for blender_mesh in [blender_mesh1, blender_mesh2]:
self.assertTrue(len(blender_mesh.modifiers) == 1 and blender_mesh.modifiers[0].type ==
'MESH_SEQUENCE_CACHE', f"{blender_mesh.name} has incorrect modifiers")
# Conversion from USD to Blender convention
def sharpness_to_crease(sharpness):
return math.sqrt(sharpness * 0.1)
# Compare Blender and USD data against each other for every frame
for frame in range(1, 25):
bpy.context.scene.frame_set(frame)
depsgraph = bpy.context.evaluated_depsgraph_get()
blender_mesh1_eval = bpy.data.objects["mesh_edge_crease"].evaluated_get(depsgraph)
blender_mesh2_eval = bpy.data.objects["mesh_vert_crease"].evaluated_get(depsgraph)
# Check crease values
blender_crease_data = [round(d.value) for d in blender_mesh1_eval.data.attributes["crease_edge"].data]
usd_crease_data = [round(sharpness_to_crease(d)) for d in usd_mesh1.GetCreaseSharpnessesAttr().Get(frame)]
self.assertEqual(
blender_crease_data,
usd_crease_data,
f"Frame {frame}: {blender_mesh1_eval.name} crease values do not match")
blender_crease_data = [round(d.value) for d in blender_mesh2_eval.data.attributes["crease_vert"].data]
usd_crease_data = [round(sharpness_to_crease(d)) for d in usd_mesh2.GetCornerSharpnessesAttr().Get(frame)]
self.assertEqual(
blender_crease_data,
usd_crease_data,
f"Frame {frame}: {blender_mesh2_eval.name} crease values do not match")
def test_import_camera_properties(self):
"""Test importing camera to ensure properties set correctly."""