MJCF Schema Coverage
Checked against: MuJoCo 3.4 (C API / mjSpec)
Plugin version: UnrealRoboticsLab main branch, 2026-03-28
Summary
| Category |
Supported |
Import-Only |
Missing |
Total |
| body |
7 |
0 |
3 |
10 |
| joint |
18 |
0 |
2 |
20 |
| geom |
22 |
0 |
5 |
27 |
| site |
10 |
0 |
2 |
12 |
| actuator (common) |
14 |
0 |
2 |
16 |
| actuator types |
9 |
0 |
0 |
9 |
| sensor types |
41 |
0 |
0 |
41 |
| tendon |
16 |
0 |
1 |
17 |
| equality |
7 |
0 |
0 |
7 |
| default |
6 |
0 |
5 |
11 |
| compiler |
5 |
0 |
2 |
7 |
| option |
17 |
0 |
3 |
20 |
| keyframe |
6 |
0 |
0 |
6 |
| contact |
2 |
0 |
0 |
2 |
| asset |
3 |
0 |
1 |
4 |
body
| Attribute |
Status |
Notes |
| name |
SUPPORTED |
Import: ReadAttrString("name"). Export: mjs_setName via Setup() |
| childclass |
SUPPORTED |
Import: ReadAttrString("childclass"). Export: mjs_setString(BodyToAttachTo->childclass) |
| pos |
SUPPORTED |
Import: ParseVector(pos) + coord convert. Export: UEToMjPosition in Setup() |
| quat |
SUPPORTED |
Import: via OrientationToMjQuat. Export: via Setup() transform |
| axisangle |
SUPPORTED |
Import: via OrientationToMjQuat (priority 2) |
| xyaxes |
SUPPORTED |
Import: via OrientationToMjQuat (priority 3) |
| zaxis |
SUPPORTED |
Import: via OrientationToMjQuat (priority 4) |
| euler |
SUPPORTED |
Import: via OrientationToMjQuat (priority 5, respects eulerseq) |
| mocap |
SUPPORTED |
Import: ReadAttrBool("mocap") -> bDrivenByUnreal. Export: BodyToAttachTo->mocap = 1 |
| gravcomp |
SUPPORTED |
Import: ReadAttrFloat("gravcomp"). Export: BodyToAttachTo->gravcomp = Gravcomp |
| sleep |
SUPPORTED |
Import: ReadAttrString("sleep") -> enum. Export: BodyToAttachTo->sleep |
| user |
MISSING |
Not parsed or exported |
joint
| Attribute |
Status |
Notes |
| name |
SUPPORTED |
Import: via MjComponent base. Export: mjs_setName in RegisterToSpec |
| class |
SUPPORTED |
Import: ReadAttrString("class"). Export: ResolveDefault |
| type |
SUPPORTED |
Import: parsed string -> enum. Export: Joint->type |
| group |
SUPPORTED |
Import: ReadAttrInt("group"). Export: Joint->group |
| pos |
SUPPORTED |
Import: ReadAttrString("pos") + coord convert. Export: UEToMjPosition |
| axis |
SUPPORTED |
Import: ReadAttrString("axis") + Y negate. Export: writes Joint->axis |
| springdamper |
SUPPORTED |
Import: ReadAttrFloatArray("springdamper") -> Stiffness + Damping |
| limited |
SUPPORTED |
Import: ReadAttrBool("limited"). Export: Joint->limited |
| solreflimit |
SUPPORTED |
Import + Export via Joint->solref_limit |
| solimplimit |
SUPPORTED |
Import + Export via Joint->solimp_limit |
| solreffriction |
SUPPORTED |
Import + Export via Joint->solref_friction |
| solimpfriction |
SUPPORTED |
Import + Export via Joint->solimp_friction |
| stiffness |
SUPPORTED |
Import: ReadAttrFloatArray (up to 3 polynomial coefficients). Export: Joint->stiffness[0..2] |
| range |
SUPPORTED |
Import + Export. Slide joints auto-convert m<->cm |
| actuatorfrcrange |
SUPPORTED |
Import: ReadAttrFloatArray. Export: Joint->actfrcrange |
| margin |
SUPPORTED |
Import: ReadAttrFloat. Export: Joint->margin |
| ref |
SUPPORTED |
Import: ReadAttrFloat. Export: Joint->ref. Slide: m<->cm |
| springref |
SUPPORTED |
Import: ReadAttrFloat. Export: Joint->springref |
| armature |
SUPPORTED |
Import: ReadAttrFloat. Export: Joint->armature |
| damping |
SUPPORTED |
Import: ReadAttrFloatArray (up to 3 polynomial coefficients). Export: Joint->damping[0..2] |
| frictionloss |
SUPPORTED |
Import: ReadAttrFloat. Export: Joint->frictionloss |
| actuatorgravcomp |
MISSING |
Not parsed |
| user |
MISSING |
Not parsed or exported |
geom
| Attribute |
Status |
Notes |
| name |
SUPPORTED |
Import: GetAttribute("name"). Export: SetSpecElementName |
| class |
SUPPORTED |
Import: ReadAttrString("class"). Export: ResolveDefault |
| type |
SUPPORTED |
Import: string -> enum (plane/hfield/sphere/capsule/ellipsoid/cylinder/box/mesh/sdf). Export: writes Geom->type |
| contype |
SUPPORTED |
Import: ReadAttrInt. Export: Geom->contype |
| conaffinity |
SUPPORTED |
Import: ReadAttrInt. Export: Geom->conaffinity |
| condim |
SUPPORTED |
Import: ReadAttrInt. Export: Geom->condim |
| group |
SUPPORTED |
Import: ReadAttrInt. Export: Geom->group |
| priority |
SUPPORTED |
Import: ReadAttrInt. Export: Geom->priority |
| size |
SUPPORTED |
Import: ReadAttrFloatArray (handles 1/2/3 params). Export: writes per SizeParamsCount |
| material |
SUPPORTED |
Import: ReadAttrString("material"). Export: material instance created at import |
| friction |
SUPPORTED |
Import: ReadAttrFloatArray. Export: Geom->friction |
| mass |
SUPPORTED |
Import: ReadAttrFloat. Export: Geom->mass |
| density |
SUPPORTED |
Import: ReadAttrFloat. Export: Geom->density |
| solref |
SUPPORTED |
Import: ReadAttrFloatArray. Export: Geom->solref |
| solimp |
SUPPORTED |
Import: ReadAttrFloatArray. Export: Geom->solimp |
| margin |
SUPPORTED |
Import: ReadAttrFloat. Export: Geom->margin |
| gap |
SUPPORTED |
Import: ReadAttrFloat. Export: Geom->gap |
| fromto |
SUPPORTED |
Import: resolves to pos/quat/size. Export: raw fromto or decomposed |
| pos |
SUPPORTED |
Import: ParseVector + coord convert. Export: UEToMjPosition |
| quat |
SUPPORTED |
Import: via OrientationToMjQuat. Export: UEToMjRotation |
| axisangle |
SUPPORTED |
Import: via OrientationToMjQuat |
| xyaxes |
SUPPORTED |
Import: via OrientationToMjQuat |
| zaxis |
SUPPORTED |
Import: via OrientationToMjQuat |
| euler |
SUPPORTED |
Import: via OrientationToMjQuat |
| mesh |
SUPPORTED |
Import: ReadAttrString("mesh"). Export: mjs_setString(Geom->meshname) |
| rgba |
SUPPORTED |
Import: ReadAttrFloatArray. Export: Geom->rgba |
| hfield |
MISSING |
Geom type recognized; hfield asset not imported from XML <asset> |
| fitscale |
MISSING |
Not parsed |
| shellinertia |
MISSING |
Not parsed |
| solmix |
MISSING |
Bound in runtime view (geom_solmix) but not imported/exported via XML |
| fluidshape |
MISSING |
Not parsed |
| fluidcoef |
MISSING |
Not parsed |
| user |
MISSING |
Not parsed |
site
| Attribute |
Status |
Notes |
| name |
SUPPORTED |
Import: via MjComponent base. Export: SetSpecElementName |
| class |
SUPPORTED |
Import: via MjComponent base. Export: ResolveDefault |
| type |
SUPPORTED |
Import: string -> enum (sphere/capsule/ellipsoid/cylinder/box). Export: site->type |
| group |
SUPPORTED |
Import: ReadAttrInt. Export: site->group |
| pos |
SUPPORTED |
Import: parsed + coord convert. Export: UEToMjPosition |
| quat |
SUPPORTED |
Import: via OrientationToMjQuat. Export: UEToMjRotation |
| axisangle |
SUPPORTED |
Import: via OrientationToMjQuat |
| xyaxes |
SUPPORTED |
Import: via OrientationToMjQuat |
| zaxis |
SUPPORTED |
Import: via OrientationToMjQuat |
| euler |
SUPPORTED |
Import: via OrientationToMjQuat |
| size |
SUPPORTED |
Import: ReadAttrFloatArray. Export: site->size |
| fromto |
SUPPORTED |
Import: resolves to pos/quat/size. Export: raw fromto |
| rgba |
SUPPORTED |
Import: ReadAttrFloatArray. Export: site->rgba |
| material |
MISSING |
Not parsed |
| user |
MISSING |
Not parsed |
actuator (common attributes)
| Attribute |
Status |
Notes |
| name |
SUPPORTED |
Export: SetSpecElementName in RegisterToSpec |
| class |
SUPPORTED |
Import: ReadAttrString("class"). Export: ResolveDefault |
| group |
SUPPORTED |
Import: ReadAttrInt. Export: Actuator->group |
| ctrllimited |
SUPPORTED |
Import: ReadAttrBool. Export: Actuator->ctrllimited |
| forcelimited |
SUPPORTED |
Import: ReadAttrBool. Export: Actuator->forcelimited |
| ctrlrange |
SUPPORTED |
Import: ReadAttrFloatArray. Export: Actuator->ctrlrange |
| forcerange |
SUPPORTED |
Import: ReadAttrFloatArray. Export: Actuator->forcerange |
| lengthrange |
SUPPORTED |
Import: ReadAttrFloatArray. Export: Actuator->lengthrange |
| gear |
SUPPORTED |
Import: ReadAttrFloatArray. Export: Actuator->gear |
| cranklength |
SUPPORTED |
Import: ReadAttrFloat. Export: Actuator->cranklength |
| joint |
SUPPORTED |
Import: sets TransmissionType::Joint. Export: via trntype + target |
| tendon |
SUPPORTED |
Import: sets TransmissionType::Tendon. Export: via trntype + target |
| site |
SUPPORTED |
Import: sets TransmissionType::Site. Export: via trntype + target |
| body |
SUPPORTED |
Import: sets TransmissionType::Body. Export: via trntype + target |
| actearly |
SUPPORTED |
Import: ReadAttrBool. Export: Actuator->actearly |
| actlimited |
SUPPORTED |
Import: ReadAttrBool. Export: Actuator->actlimited |
| actrange |
SUPPORTED |
Import: ReadAttrFloatArray. Export: Actuator->actrange |
| damping |
MISSING |
Not parsed in base actuator (but subtype kv covers damper case) |
| armature |
MISSING |
Not parsed in base actuator |
| user |
MISSING |
Not parsed |
actuator types
| Type |
Status |
Notes |
| general |
SUPPORTED |
MjGeneralActuator. Exports raw gainprm/biasprm/dynprm directly |
| motor |
SUPPORTED |
MjMotorActuator. Uses mjs_setToMotor |
| position |
SUPPORTED |
MjPositionActuator. Parses kp. Uses mjs_setToPosition |
| velocity |
SUPPORTED |
MjVelocityActuator. Parses kv. Uses mjs_setToVelocity |
| intvelocity |
SUPPORTED |
MjIntVelocityActuator. Parses kp. Uses mjs_setToIntvelocity |
| damper |
SUPPORTED |
MjDamperActuator. Parses kv. Uses mjs_setToDamper |
| cylinder |
SUPPORTED |
MjCylinderActuator. Parses timeconst/bias/area/diameter. Uses mjs_setToCylinder |
| muscle |
SUPPORTED |
MjMuscleActuator. Uses mjs_setToMuscle |
| adhesion |
SUPPORTED |
MjAdhesionActuator. Parses gain. Uses mjs_setToAdhesion |
sensor types
All 41 sensor types are SUPPORTED (import via tag-name map, export via mjsSensor->type):
| Type |
Status |
| touch |
SUPPORTED |
| accelerometer |
SUPPORTED |
| velocimeter |
SUPPORTED |
| gyro |
SUPPORTED |
| force |
SUPPORTED |
| torque |
SUPPORTED |
| magnetometer |
SUPPORTED |
| camprojection |
SUPPORTED |
| rangefinder |
SUPPORTED |
| jointpos |
SUPPORTED |
| jointvel |
SUPPORTED |
| jointactfrc |
SUPPORTED |
| tendonpos |
SUPPORTED |
| tendonvel |
SUPPORTED |
| tendonactfrc |
SUPPORTED |
| actuatorpos |
SUPPORTED |
| actuatorvel |
SUPPORTED |
| actuatorfrc |
SUPPORTED |
| ballquat |
SUPPORTED |
| ballangvel |
SUPPORTED |
| jointlimitpos |
SUPPORTED |
| jointlimitvel |
SUPPORTED |
| jointlimitfrc |
SUPPORTED |
| tendonlimitpos |
SUPPORTED |
| tendonlimitvel |
SUPPORTED |
| tendonlimitfrc |
SUPPORTED |
| framepos |
SUPPORTED |
| framequat |
SUPPORTED |
| framexaxis |
SUPPORTED |
| frameyaxis |
SUPPORTED |
| framezaxis |
SUPPORTED |
| framelinvel |
SUPPORTED |
| frameangvel |
SUPPORTED |
| framelinacc |
SUPPORTED |
| frameangacc |
SUPPORTED |
| subtreecom |
SUPPORTED |
| subtreelinvel |
SUPPORTED |
| subtreeangmom |
SUPPORTED |
| insidesite |
SUPPORTED |
| geomdist |
SUPPORTED |
| geomnormal |
SUPPORTED |
| geomfromto |
SUPPORTED |
| contact |
SUPPORTED |
| e_potential |
SUPPORTED |
| e_kinetic |
SUPPORTED |
| clock |
SUPPORTED |
| tactile |
SUPPORTED |
| plugin |
SUPPORTED |
| user |
SUPPORTED |
Sensor common attributes:
| Attribute |
Status |
Notes |
| name |
SUPPORTED |
Via SetSpecElementName |
| noise |
SUPPORTED |
Import: ReadAttrFloat. Export: Sensor->noise |
| cutoff |
SUPPORTED |
Import: ReadAttrFloat. Export: Sensor->cutoff |
| objname/site/joint/etc |
SUPPORTED |
Import: tries each target attr. Export: Sensor->objname |
| refname |
SUPPORTED |
Import: GetAttribute("refname"). Export: Sensor->refname |
| objtype |
SUPPORTED |
Import: string -> enum. Export: Sensor->objtype |
| reftype |
SUPPORTED |
Import: string -> enum. Export: Sensor->reftype |
| dim |
SUPPORTED |
Import: parsed from attr. Export: Sensor->dim |
| class |
SUPPORTED |
Import: ReadAttrString("class") |
| user |
MISSING |
Not parsed |
tendon
| Attribute |
Status |
Notes |
| name |
SUPPORTED |
Import: via MjComponent. Export: mjs_setName |
| class |
SUPPORTED |
Import: ReadAttrString("class"). Export: ResolveDefault |
| stiffness |
SUPPORTED |
Import: ReadAttrFloatArray (up to 3 polynomial coefficients). Export: Tendon->stiffness[0..2] |
| springlength |
SUPPORTED |
Import + Export |
| damping |
SUPPORTED |
Import: ReadAttrFloatArray (up to 3 polynomial coefficients). Export: Tendon->damping[0..2] |
| frictionloss |
SUPPORTED |
Import + Export |
| armature |
SUPPORTED |
Import + Export |
| limited |
SUPPORTED |
Import + Export |
| range |
SUPPORTED |
Import + Export |
| margin |
SUPPORTED |
Import + Export |
| actfrclimited |
SUPPORTED |
Import + Export |
| actfrcrange |
SUPPORTED |
Import + Export |
| solreflimit |
SUPPORTED |
Import + Export |
| solimplimit |
SUPPORTED |
Import + Export |
| solreffriction |
SUPPORTED |
Import + Export |
| solimpfriction |
SUPPORTED |
Import + Export |
| width |
SUPPORTED |
Import + Export |
| rgba |
SUPPORTED |
Import + Export |
| group |
SUPPORTED |
Import + Export |
| user |
MISSING |
Not parsed |
Tendon wrap types:
| Wrap Type |
Status |
Notes |
| joint |
SUPPORTED |
mjs_wrapJoint with coef |
| site |
SUPPORTED |
mjs_wrapSite |
| geom |
SUPPORTED |
mjs_wrapGeom with sidesite |
| pulley |
SUPPORTED |
mjs_wrapPulley with divisor |
equality
| Type |
Status |
Notes |
| connect |
SUPPORTED |
Parses body1/body2, anchor. Exports via Eq->data[0..2] |
| weld |
SUPPORTED |
Parses body1/body2, relpos, relquat, torquescale. Exports via Eq->data[0..7] |
| joint |
SUPPORTED |
Parses joint1/joint2, polycoef. Exports via Eq->data |
| tendon |
SUPPORTED |
Parses tendon1/tendon2, polycoef. Exports via Eq->data |
Equality common attributes:
| Attribute |
Status |
Notes |
| active |
SUPPORTED |
Import: ReadAttrBool. Export: Eq->active |
| solref |
SUPPORTED |
Import + Export |
| solimp |
SUPPORTED |
Import + Export |
default
| Child Element |
Status |
Notes |
| class (attr) |
SUPPORTED |
Import: GetAttribute("class"). Nested defaults supported |
| geom |
SUPPORTED |
GeomComp->ExportTo(def->geom) |
| joint |
SUPPORTED |
JointComp->ExportTo(def->joint) |
| site |
SUPPORTED |
SiteComp->ExportTo(def->site) |
| camera |
SUPPORTED |
CameraComp->ExportTo(def->camera) |
| tendon |
SUPPORTED |
TendonComp->ExportTo(def->tendon) |
| general/motor/position/velocity/etc |
SUPPORTED |
ActuatorComp->ExportTo(def->actuator) (polymorphic) |
| mesh |
MISSING |
Not handled in default export |
| material |
MISSING |
Not handled in default export |
| pair |
MISSING |
Not handled in default export |
| equality |
MISSING |
Not handled in default export |
| light |
MISSING |
Not handled in default export |
compiler
| Attribute |
Status |
Notes |
| angle |
SUPPORTED |
ParseCompilerSettings -> bAngleInDegrees. Used by OrientationToMjQuat |
| eulerseq |
SUPPORTED |
ParseCompilerSettings -> EulerSeq. Used for euler decomposition |
| meshdir |
SUPPORTED |
Parsed from <compiler>, used for mesh path resolution |
| texturedir |
SUPPORTED |
Parsed from <compiler>, used for texture path resolution |
| assetdir |
SUPPORTED |
Parsed, overrides meshdir for asset lookups |
| autolimits |
SUPPORTED |
Parsed into bAutoLimits (deferred to MuJoCo spec compiler) |
| coordinate |
MISSING |
Always assumes "local" (MuJoCo 3.x default) |
| settotalmass |
MISSING |
Not parsed |
option
| Attribute |
Status |
Notes |
| timestep |
SUPPORTED |
Import from XML + ApplyToSpec. Runtime override supported |
| gravity |
SUPPORTED |
Import + coord convert (cm/s2, Y negate) |
| wind |
SUPPORTED |
Import + coord convert |
| magnetic |
SUPPORTED |
Import + coord convert |
| density |
SUPPORTED |
Import + export |
| viscosity |
SUPPORTED |
Import + export |
| impratio |
SUPPORTED |
Import + export |
| tolerance |
SUPPORTED |
Import + export |
| iterations |
SUPPORTED |
Import + export |
| ls_iterations |
SUPPORTED |
Import + export |
| integrator |
SUPPORTED |
Import: string -> enum (Euler/RK4/implicit/implicitfast) |
| cone |
SUPPORTED |
Import: string -> enum (pyramidal/elliptic) |
| solver |
SUPPORTED |
Import: string -> enum (PGS/CG/Newton) |
| noslip_iterations |
SUPPORTED |
Import + export (with override) |
| noslip_tolerance |
SUPPORTED |
Import + export (with override) |
| ccd_iterations |
SUPPORTED |
Import + export (with override) |
| ccd_tolerance |
SUPPORTED |
Import + export (with override) |
| flag (enableflags) |
SUPPORTED |
MultiCCD and Sleep flags handled |
| o_margin |
MISSING |
Not parsed |
| o_solref |
MISSING |
Not parsed |
| o_solimp |
MISSING |
Not parsed |
| mpr_iterations |
MISSING |
Not parsed |
| mpr_tolerance |
MISSING |
Not parsed |
| sdf_iterations |
MISSING |
Not parsed |
| sdf_initpoints |
MISSING |
Not parsed |
keyframe/key
| Attribute |
Status |
Notes |
| name |
SUPPORTED |
Import: via MjComponent. Export: mjs_setName |
| time |
SUPPORTED |
Import: ReadAttrFloat. Export: Key->time |
| qpos |
SUPPORTED |
Import + Export. Auto-pads for free joints |
| qvel |
SUPPORTED |
Import + Export |
| act |
SUPPORTED |
Import + Export |
| ctrl |
SUPPORTED |
Import + Export |
| mpos |
SUPPORTED |
Import + Export |
| mquat |
SUPPORTED |
Import + Export |
| Element |
Status |
Notes |
| pair |
SUPPORTED |
Parses geom1/geom2/condim/friction/solref/solimp/gap/margin. Full import+export |
| exclude |
SUPPORTED |
Parses body1/body2/name. Full import+export |
asset
| Element |
Status |
Notes |
| mesh |
SUPPORTED |
Parsed recursively via ParseAssetsRecursive. GLB/STL/OBJ imported as UE StaticMesh |
| material |
SUPPORTED |
Parsed into FMuJoCoMaterialData. Creates UE MaterialInstance with texture params |
| texture |
SUPPORTED |
Imported from disk (PNG/JPG/BMP/TGA). Applied to material instances |
| hfield |
MISSING |
Not parsed from <asset>. Geom type=hfield recognized but asset data not imported |