Built for game developers

Every feature in EasyRig exists to solve a real problem web game developers face when working with animated characters.

Auto skeleton generation

The most tedious part of rigging is creating and positioning bones. EasyRig analyzes your mesh geometry and generates an appropriate skeleton automatically.

Detects humanoids, quadrupeds, creatures, and custom shapes. Positions bones based on mesh volume distribution and creates a hierarchy that makes sense for animation.

  • Works with any mesh topology
  • Automatic bone hierarchy creation
  • Adaptive bone count based on model type
  • Proper bone orientation for rotations

Smart weight painting

Vertex weights determine how much each bone affects each vertex. Painting these by hand is slow and error-prone. EasyRig calculates optimal weights using heat diffusion algorithms.

Each vertex gets weighted to up to 4 bones based on distance, bone direction, and influence falloff. Results in smooth deformations without manual tweaking.

  • Heat diffusion algorithm for natural falloff
  • Automatic weight normalization
  • Configurable bone influence per vertex
  • No artifacts or clipping
// weight calculation happens automatically
const player = await EasyRig.load('player', '/model.glb')

// configure weighting if needed
EasyRig.init({
  config: {
    weightingAlgorithm: 'heatmap',
    maxBonesPerVertex: 4,
    autoNormalize: true
  }
})

Animation retargeting

Different models use different bone names. Mixamo uses "mixamorigHips", your model might use "Pelvis" or "hip_jnt". Manually mapping these is tedious.

EasyRig uses pattern matching and fuzzy search to automatically map bones from animation files to your character's skeleton. Works with Mixamo, Blender, Maya, and custom rigs.

  • Automatic bone name mapping
  • Works with any animation source
  • Preserves animation timing and curves
  • Handles missing or extra bones gracefully
mixamorigHips
Hips
mixamorigSpine
Spine
mixamorigLeftArm
LeftArm
mixamorigRightLeg
RightUpLeg

Ragdoll physics

Implementing ragdoll physics from scratch means creating collision shapes for each bone, connecting them with constraints, and syncing with the visual model. Lots of code for a common feature.

EasyRig generates physics bodies and constraints automatically. Just pass your physics world and call activateRagdoll() when needed. Joint limits are preconfigured for realistic motion.

  • One function call to enable
  • Works with Cannon, Ammo, Rapier
  • Realistic joint constraints
  • Apply forces to individual bones
import * as CANNON from 'cannon-es'

const world = new CANNON.World()
world.gravity.set(0, -9.82, 0)

// setup once
player.enableRagdoll(world)

// activate on death/impact
player.activateRagdoll(impactVelocity)

// back to animation
player.deactivateRagdoll()

Inverse kinematics

IK is essential for foot placement on terrain, hand positions for grabbing objects, and look-at targets. Usually requires complex math and iteration.

Built-in FABRIK solver handles IK chains automatically. Set a target position and the algorithm figures out the bone rotations. Configurable iterations and constraints.

  • FABRIK solver for smooth results
  • Pre-configured chains for limbs
  • Custom chain support
  • Works alongside animations
// enable IK
player.enableIK()

// foot placement on terrain
const leftFoot = terrain.getHeight(
  player.position.x - 0.1, 
  player.position.z
)

player.setIKTarget('leftLeg', [
  player.position.x - 0.1,
  leftFoot,
  player.position.z
])

Runtime processing

Traditional workflow means exporting from Blender, testing in game, finding issues, going back to Blender, repeat. EasyRig processes everything at runtime.

Change a model, refresh the page. Try a different animation, swap the URL. Iterate instantly without leaving your code editor or rebuilding anything.

  • No export pipeline needed
  • Instant iteration and testing
  • Works with any GLB/GLTF file
  • User-generated content ready
0
export steps
0
build time
100%
in browser

Ready to start building?

Check out the docs and see how easy character rigging can be.

Read Documentation