Every feature in EasyRig exists to solve a real problem web game developers face when working with animated characters.
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.
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.
// 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
}
})
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.
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.
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()
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.
// 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
])
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.
Check out the docs and see how easy character rigging can be.
Read Documentation