THREE-MOTIONBRICKS

A robot built
out of motion
bricks.

NVIDIA MotionBricks in three.js. Give it four recent poses and a target; a 195M-parameter model fills in the steps between them, right in your browser.

enter a world
The G1 robot running down a red lane through a white block city
Recorded in the White city world. No animation clips: every frame is the model's.

Worlds

Pick a block. Each one is a page you can open full screen and share.

Seven robots and characters running with the same motion

same model, seven bodies: G1 · H1 · T1 · OP3 · RobotExpressive · Astronaut · Polybot

How it moves

No clips, no state machine of animations. Three bricks, over and over.

1

Context

The last four poses the robot played: root, rotation and 29 joint angles each.

2

Target

Where it should end up, and how: a standing, walking or running pose placed on the way to your click.

3

Motion

0.6–1.9 s of 30 Hz motion between them, asked for while the last one plays, so the stride never waits.

A stride, one frame per column, with joint angles plotted below
One stride, frame by frame. The model runs in a Web Worker with ONNX Runtime Web; your frames never wait for it.

Build

Only needs three. Bring the G1, a Unitree H1, a Booster T1, or any Mixamo character.

read the docs

import {MotionBricksCharacter, MOTIONBRICKS_DEFAULTS} from 'three-motionbricks'

const g1 = new MotionBricksCharacter()
g1.setRobot((await new GLTFLoader().loadAsync(MOTIONBRICKS_DEFAULTS.robot)).scene)
scene.add(g1.object)
await g1.load()

g1.moveTo(new THREE.Vector3(3, 0, -2), 'run')
// every frame
g1.update(clock.getDelta())