Simulate every scenario
before your robot meets it
Rigyd generates SimReady objects and worlds each scenario requires, varied in shape, material, and physics, for your training and evaluation pipeline.
Simulation is only as good as its data
The physics is solved. The bottleneck is the data going in.
3D assets aren't simulation-ready
Most 3D assets lack the physical properties simulators need: mass, friction, collision geometry. Pretty geometry with no physics breaks grasping, stacking, and manipulation.
Environments don't exist at scale
Training robot policies takes thousands of diverse, physically accurate worlds. Building them by hand takes months and never covers the edge cases.
Variety doesn't scale by hand
Domain randomization demands endless variations of objects and scenes. Without scalable 3D data generation, the sim-to-real gap stays wide open.
Rigyd generates SimReady objects and physically accurate worlds on demand
We generate the 3D data your simulations need, objects with real physical properties, environments with collidable geometry, and endless variations for domain randomization and better sim-to-real transfer.
Upload
Drop images / 3D models or describe what you need. We render each model from multiple camera views, and a vision model identifies surface materials and dimensions.
AI estimates physics
Density, friction, and restitution come from engineering handbooks. Mass uses true mesh volume times material density; center of mass and inertia derive from geometry. Convex decomposition computes collision hulls from the mesh.
Download SimReady USD and MJCF
Z-up, metric, single rigid bodies. USD Physics and MuJoCo MJCF exports, URDF coming soon. A 106-check validator confirms simulation-ready structure.
# SimReady Output (OpenUSD)
def "CeramicMug" (
prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsMassAPI"]
)
{
float physics:mass = 0.34
point3f physics:centerOfMass = (0, 0.052, 0)
rel physics:simulationOwner = </World/PhysicsScene>
def "CollisionMesh" (
prepend apiSchemas = ["PhysicsCollisionAPI"]
)
{
uniform token physics:approximation = "convexDecomposition"
float physics:friction = 0.42
float physics:restitution = 0.15
}
} <!-- SimReady Output (MJCF) -->
<mujoco model="ceramic_mug">
<option gravity="0 0 -9.81" />
<worldbody>
<body name="CeramicMug" pos="0 0 0">
<freejoint />
<inertial pos="0 0.052 0" mass="0.34"
diaginertia="0.0009 0.0009 0.0006" />
<!-- convex-decomposition collider -->
<geom name="collision" type="mesh" mesh="mug_hull"
friction="0.42 0.005 0.0001" solref="0.02 0.15" />
</body>
</worldbody>
<asset>
<mesh name="mug_hull" file="mug_hull.obj" />
</asset>
</mujoco> Call it from anywhere you simulate
Terminal, REST, right inside Isaac Sim or MuJoCo. One API for all.
CLI & Python SDK
Convert from your terminal or Python. The result path goes to stdout — pipe it anywhere.
- convert · generate · simulate · download
- MuJoCo loader built in
# install + authenticate once
$ pip install rigyd
$ rigyd login
✓ key saved → ~/.config/rigyd/config.json
# 3D file → SimReady, optionally retopologized
$ rigyd convert chair.glb --tris 50000 --export isaac
preprocessing → queued → running ▰▰▰▰▰▰ done
./assets/chair.usdz
# stdout is just the path — pipe it anywhere
$ blender $(rigyd convert scan.obj --export usd) REST API
Submit, poll, and download over plain HTTP. 202 with a job id, poll to completed.
- 3D file, image, or text in
- Signed USD / MJCF out, 0-credit re-pulls
$ curl -X POST https://api.rigyd.com/api/conversions \
-H "Authorization: Bearer rgyd_live_…" \
-F [email protected] \
-F target_triangle_count=50000
202 Accepted
{ "id": "cnv_8fa2c1", "status": "queued" }
$ curl …/conversions/cnv_8fa2c1 # poll
{ "status": "completed" }
$ curl …/conversions/cnv_8fa2c1/result # signed USD Isaac Sim extension
Generate an object and drop it onto your stage — no download, no drag. Press Play.
- Text, image, or 3D file → USD
- Lands under /World, physics intact
MuJoCo
Export MJCF from the CLI, or load a result straight into MuJoCo from Python.
- --export mujoco → MJCF
- rigyd.load_model() → MjModel
# MJCF export — the `mujoco` alias maps to MJCF
$ rigyd convert chair.glb --export mujoco
./assets/chair.xml
# or load a result straight into MuJoCo
$ pip install "rigyd[mujoco]"
>>> import rigyd, mujoco
>>> model = rigyd.load_model(prompt="a wooden chair")
>>> data = mujoco.MjData(model)
>>> mujoco.mj_step(model, data) # ready to simulate Compatible with
Built by a team that's already scaled 3D data.
We've built an end-to-end 3D platform trusted by Fortune 500 companies. In the last 12 months alone, we delivered 10 million immersive experiences. We know how to build the data infrastructure enterprises demand.
SOC 2 Type II
Enterprise-grade security with full audit trails and data protection from day one.
SSO & RBAC
Single sign-on, role-based permissions, and team management for any organization size.
Built to Scale
Generate millions of SimReady assets. From proof-of-concept to production data pipeline.
Our mission
Every machine will need to understand
the physical world.
We're building the simulation data layer to make that future arrive faster.
Frequently asked questions
Everything you need to know about Rigyd and SimReady assets.