@@ -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