@@ -144,6 +144,62 @@ Double click on the skeleton to open its editor and you should see the new bone
144144
145145## Step 3: fixing skeletal mesh bone influences
146146
147+ ``` python
148+
149+ class RootMotionFixer :
150+
151+ ...
152+
153+ def fix_bones_influences (self , mesh , old_skeleton ):
154+ # get current soft vertices
155+ vertices = mesh.skeletal_mesh_get_soft_vertices()
156+ new_vertices = []
157+ # get current bone map
158+ old_bone_map = mesh.skeletal_mesh_get_bone_map()
159+ new_bone_map = []
160+
161+ # fix bones influence for each vertex
162+ for vertex in vertices:
163+ bone_ids = list (vertex.influence_bones)
164+ for index, bone_id in enumerate (bone_ids):
165+ # only fix bone with weight > 0
166+ if vertex.influence_weights[index] > 0 :
167+ bone_ids[index] = self .get_updated_bone_index(old_skeleton, mesh.Skeleton, old_bone_map, new_bone_map, bone_id)
168+ vertex.influence_bones = bone_ids
169+ new_vertices.append(vertex)
170+
171+ # assign new vertices
172+ mesh.skeletal_mesh_set_soft_vertices(new_vertices)
173+ # add the new bone mapping
174+ mesh.skeletal_mesh_set_bone_map(new_bone_map)
175+
176+ # specify which bones are active and required (ensure root is added to required bones)
177+ mesh.skeletal_mesh_set_active_bone_indices(new_bone_map)
178+ if 0 not in new_bone_map:
179+ new_bone_map += [0 ]
180+ mesh.skeletal_mesh_set_required_bones(new_bone_map)
181+
182+ def get_updated_bone_index (self , old_skeleton , new_skeleton , old_bone_map , new_bone_map , index ):
183+ """
184+ Convert indices betwen skeletons
185+ """
186+ # get the skeleton bone_id from the map
187+ true_bone_id = old_bone_map[index]
188+
189+ # get the bone name
190+ bone_name = old_skeleton.skeleton_get_bone_name(true_bone_id)
191+
192+ # get the new index
193+ new_bone_id = new_skeleton.skeleton_find_bone_index(bone_name)
194+
195+ # check if a new mapping is available
196+ if new_bone_id in new_bone_map:
197+ return new_bone_map.index(new_bone_id)
198+
199+ new_bone_map.append(new_bone_id)
200+ return len (new_bone_map)- 1
201+ ```
202+
147203## Step 4: splitting 'Hips' track in animation
148204
149205## Adding a context menu
0 commit comments