How to rig any Unreal Engine Character in Blender

How to rig any Unreal Engine Character in Blender

Creating a Custom Area Engine Rig in Blender

Introduction to Rigging Challenges

  • The default rig in Blender has bone orientation issues that affect animation compatibility with real-time engines.
  • To address these issues, two rigs are typically created: one unmodified and another with the correct bone orientation for proper animation.

Importing and Setting Up Rigs

  • Start by importing the default rig and then import a second rig with the correct bone orientation without the mesh.
  • A script is provided to combine both armatures into one, ensuring they follow each other's position and rotation correctly.

Adjustments for IK Functionality

  • Adjustments are necessary for arm lengths; use Shift + S to set cursor positions accurately for upper and lower arm bones.
  • Ensure that all bones are connected properly; if any snap or disappear, check their connection settings.

Finalizing Bone Orientation

  • Recalculate global Z-axis orientations using Shift + N to ensure all bones align correctly with world axes.
  • Temporary rigs facilitate animation but do not export directly; focus on creating functional IK setups for hands and feet.

Adding Inverse Kinematics (IK)

  • Duplicate hand bones, rename them appropriately, and add inverse kinematics constraints to enable movement tracking.
  • Repeat similar steps for foot bones to create a fully functional armature compatible with both Blender and real-time engines.

Exporting Animation

  • When exporting animations, ensure leaf bones are unchecked, select appropriate sample rates (30 FPS), and confirm everything functions as expected.
Video description

In this video I'm going to show how to set up a double armature rig in order to be able to correctly rig the unreal armature in blender, this works for any unreal engine character as the process is exactly the same. No addon is required just vanilla blender. SCRIPT USED IN THE VIDEO: ------------------------------------------------------------------------------------------------------------------------- import bpy if bpy.context.object.mode != 'POSE': bpy.ops.object.posemode_toggle() active_object = bpy.context.active_object if active_object is None or active_object.type != 'ARMATURE': raise Exception("Please select an armature object.") selected_bones = active_object.pose.bones other_armature = next(obj for obj in bpy.context.selected_objects if obj != active_object and obj.type == 'ARMATURE') if other_armature is None: raise Exception("Please select another armature object.") other_bones = other_armature.pose.bones constraints_settings = [ { 'type': 'LIMIT_LOCATION', 'settings': { 'use_min_x': True, 'min_x': 0, 'use_max_x': True, 'max_x': 0, 'use_min_y': True, 'min_y': 0, 'use_max_y': True, 'max_y': 0, 'use_min_z': True, 'min_z': 0, 'use_max_z': True, 'max_z': 0, 'owner_space': 'LOCAL_WITH_PARENT' } }, { 'type': 'LIMIT_ROTATION', 'settings': { 'use_limit_x': True, 'min_x': 0, 'max_x': 0, 'use_limit_y': True, 'min_y': 0, 'max_y': 0, 'use_limit_z': True, 'min_z': 0, 'max_z': 0, 'owner_space': 'LOCAL_WITH_PARENT' } }, { 'type': 'LIMIT_SCALE', 'settings': { 'use_min_x': True, 'min_x': 0, 'use_max_x': True, 'max_x': 1, 'use_min_y': True, 'min_y': 0, 'use_max_y': True, 'max_y': 1, 'use_min_z': True, 'min_z': 0, 'use_max_z': True, 'max_z': 1, 'owner_space': 'LOCAL_WITH_PARENT' } } ] for bone in selected_bones: for constraint_setting in constraints_settings: constraint = bone.constraints.new(type=constraint_setting['type']) for key, value in constraint_setting['settings'].items(): setattr(constraint, key, value) child_of_constraint = bone.constraints.new(type='CHILD_OF') child_of_constraint.target = other_armature child_of_constraint.subtarget = bone.name print("Constraints applied to all bones of the active armature in Pose Mode and 'Child Of' constraints added.") ------------------------------------------------------------------------------------------------------------------------- That's it thanks for watching Chapters: 0:00 Intro 1:00 Initial Setup 2:24 Armature fixing 5:36 Simple Ik 7:57 Testing the rig 8:55 Ending