Skip to content

Commit c603afd

Browse files
author
Roberto De Ioris
committed
fixed multiple sections skeletal meshes, 20tab#228
1 parent 7e679db commit c603afd

File tree

1 file changed

+26
-21
lines changed
  • tutorials/FixingMixamoRootMotionWithPython_Assets

1 file changed

+26
-21
lines changed

tutorials/FixingMixamoRootMotionWithPython_Assets/mixamo.py

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -68,29 +68,34 @@ def get_updated_bone_index(self, old_skeleton, new_skeleton, old_bone_map, new_b
6868
return len(new_bone_map)-1
6969

7070
def fix_bones_influences(self, mesh, old_skeleton):
71-
vertices = mesh.skeletal_mesh_get_soft_vertices()
72-
new_vertices = []
73-
old_bone_map = mesh.skeletal_mesh_get_bone_map()
74-
new_bone_map = []
75-
76-
for vertex in vertices:
77-
bone_ids = list(vertex.influence_bones)
78-
for index, bone_id in enumerate(bone_ids):
79-
if vertex.influence_weights[index] > 0:
80-
bone_ids[index] = self.get_updated_bone_index(old_skeleton, mesh.Skeleton, old_bone_map, new_bone_map, bone_id)
81-
vertex.influence_bones = bone_ids
82-
new_vertices.append(vertex)
83-
84-
# assign new vertices
85-
mesh.skeletal_mesh_set_soft_vertices(new_vertices)
86-
# add the new bone mapping
87-
mesh.skeletal_mesh_set_bone_map(new_bone_map)
71+
required_bones = []
72+
for section in range(0, mesh.skeletal_mesh_sections_num()):
73+
vertices = mesh.skeletal_mesh_get_soft_vertices(0, section)
74+
ue.log_warning(len(vertices))
75+
new_vertices = []
76+
old_bone_map = mesh.skeletal_mesh_get_bone_map(0, section)
77+
new_bone_map = []
78+
79+
for vertex in vertices:
80+
bone_ids = list(vertex.influence_bones)
81+
for index, bone_id in enumerate(bone_ids):
82+
if vertex.influence_weights[index] > 0:
83+
bone_ids[index] = self.get_updated_bone_index(old_skeleton, mesh.Skeleton, old_bone_map, new_bone_map, bone_id)
84+
if new_bone_map[bone_ids[index]] not in required_bones:
85+
required_bones.append(new_bone_map[bone_ids[index]])
86+
vertex.influence_bones = bone_ids
87+
new_vertices.append(vertex)
88+
89+
# assign new vertices
90+
mesh.skeletal_mesh_set_soft_vertices(new_vertices, 0, section)
91+
# add the new bone mapping
92+
mesh.skeletal_mesh_set_bone_map(new_bone_map, 0, section)
8893

8994
# specify which bones are active and required (ensure root is added to required bones)
90-
mesh.skeletal_mesh_set_active_bone_indices(new_bone_map)
91-
if 0 not in new_bone_map:
92-
new_bone_map += [0]
93-
mesh.skeletal_mesh_set_required_bones(new_bone_map)
95+
mesh.skeletal_mesh_set_active_bone_indices(required_bones)
96+
if 0 not in required_bones:
97+
required_bones += [0]
98+
mesh.skeletal_mesh_set_required_bones(required_bones)
9499

95100
def set_skeleton(self, asset_data):
96101
self.choosen_skeleton = asset_data.get_asset()

0 commit comments

Comments
 (0)