Files
Mujoco_WASM/src/xml/generated/mjcf_default_table.inc
T
Yuval Tassa 7fd2061f5c Change default light softness from 0 to 0.2.
PiperOrigin-RevId: 960218397
Change-Id: I58f211f5a275f8f19254424facd02c14eaa8c668
2026-08-06 04:28:17 -07:00

543 lines
34 KiB
SourcePawn

// Copyright 2026 DeepMind Technologies Limited
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// GENERATED FILE, DO NOT EDIT. Generated from src/xml/mjcf.schema by
// doc/generate/generate_default_table.py; test/doc/doc_test.py checks
// freshness.
//
// One row per bound numeric schema attribute -- total coverage, whether or
// not a default is declared. SchemaDefaultsTest compares every row against a
// freshly-constructed spec: declared values must match the C
// default-constructors, values beyond ndecl must be zero, and rows marked
// unset must hold the mjNAN sentinel. A nonzero constructor default with no
// schema declaration is therefore a test failure: the schema cannot silently
// under-declare. Rows are {attr, offset, kind, len, ndecl, unset, values};
// kind: 0=double 1=float 2=int 3=byte 4=mjtNum.
// clang-format off
struct mjXDefaultEntry {
const char* attr;
int offset;
int kind;
int len;
int ndecl;
int unset;
double value[8];
};
struct mjXDefaultTable {
const char* structname;
const mjXDefaultEntry* entries;
int n;
};
static const mjXDefaultEntry kDefaults_mjLROpt[] = {
{"mode", (int)offsetof(mjLROpt, mode), 2, 1, 1, 0, {(double)mjLRMODE_MUSCLE}},
{"useexisting", (int)offsetof(mjLROpt, useexisting), 2, 1, 1, 0, {1}},
{"uselimit", (int)offsetof(mjLROpt, uselimit), 2, 1, 0, 0, {0}},
{"accel", (int)offsetof(mjLROpt, accel), 4, 1, 1, 0, {20.0}},
{"maxforce", (int)offsetof(mjLROpt, maxforce), 4, 1, 0, 0, {0}},
{"timeconst", (int)offsetof(mjLROpt, timeconst), 4, 1, 1, 0, {1.0}},
{"timestep", (int)offsetof(mjLROpt, timestep), 4, 1, 1, 0, {0.01}},
{"inttotal", (int)offsetof(mjLROpt, inttotal), 4, 1, 1, 0, {10.0}},
{"interval", (int)offsetof(mjLROpt, interval), 4, 1, 1, 0, {2.0}},
{"tolrange", (int)offsetof(mjLROpt, tolrange), 4, 1, 1, 0, {0.05}},
};
static const mjXDefaultEntry kDefaults_mjOption[] = {
{"timestep", (int)offsetof(mjOption, timestep), 4, 1, 1, 0, {0.002}},
{"impratio", (int)offsetof(mjOption, impratio), 4, 1, 1, 0, {1.0}},
{"tolerance", (int)offsetof(mjOption, tolerance), 4, 1, 1, 0, {1e-08}},
{"ls_tolerance", (int)offsetof(mjOption, ls_tolerance), 4, 1, 1, 0, {0.01}},
{"noslip_tolerance", (int)offsetof(mjOption, noslip_tolerance), 4, 1, 1, 0, {1e-06}},
{"ccd_tolerance", (int)offsetof(mjOption, ccd_tolerance), 4, 1, 1, 0, {1e-06}},
{"sleep_tolerance", (int)offsetof(mjOption, sleep_tolerance), 4, 1, 1, 0, {0.001}},
{"gravity", (int)offsetof(mjOption, gravity), 4, 3, 3, 0, {0.0, 0.0, -9.81}},
{"wind", (int)offsetof(mjOption, wind), 4, 3, 3, 0, {0.0, 0.0, 0.0}},
{"magnetic", (int)offsetof(mjOption, magnetic), 4, 3, 3, 0, {0.0, -0.5, 0.0}},
{"density", (int)offsetof(mjOption, density), 4, 1, 0, 0, {0}},
{"viscosity", (int)offsetof(mjOption, viscosity), 4, 1, 0, 0, {0}},
{"o_margin", (int)offsetof(mjOption, o_margin), 4, 1, 0, 0, {0}},
{"o_solref", (int)offsetof(mjOption, o_solref), 4, mjNREF, 2, 0, {0.02, 1.0}},
{"o_solimp", (int)offsetof(mjOption, o_solimp), 4, mjNIMP, 5, 0, {0.9, 0.95, 0.001, 0.5, 2.0}},
{"o_friction", (int)offsetof(mjOption, o_friction), 4, 5, 5, 0, {1.0, 1.0, 0.005, 0.0001, 0.0001}},
{"integrator", (int)offsetof(mjOption, integrator), 2, 1, 1, 0, {(double)mjINT_EULER}},
{"cone", (int)offsetof(mjOption, cone), 2, 1, 1, 0, {(double)mjCONE_PYRAMIDAL}},
{"jacobian", (int)offsetof(mjOption, jacobian), 2, 1, 1, 0, {(double)mjJAC_AUTO}},
{"solver", (int)offsetof(mjOption, solver), 2, 1, 1, 0, {(double)mjSOL_NEWTON}},
{"iterations", (int)offsetof(mjOption, iterations), 2, 1, 1, 0, {100.0}},
{"ls_iterations", (int)offsetof(mjOption, ls_iterations), 2, 1, 1, 0, {50.0}},
{"noslip_iterations", (int)offsetof(mjOption, noslip_iterations), 2, 1, 0, 0, {0}},
{"ccd_iterations", (int)offsetof(mjOption, ccd_iterations), 2, 1, 1, 0, {35.0}},
{"sdf_iterations", (int)offsetof(mjOption, sdf_iterations), 2, 1, 1, 0, {10.0}},
{"sdf_initpoints", (int)offsetof(mjOption, sdf_initpoints), 2, 1, 1, 0, {40.0}},
};
static const mjXDefaultEntry kDefaults_mjSpec[] = {
{"njmax", (int)offsetof(mjSpec, njmax), 2, 1, 1, 0, {-1.0}},
{"nconmax", (int)offsetof(mjSpec, nconmax), 2, 1, 1, 0, {-1.0}},
{"nstack", (int)offsetof(mjSpec, nstack), 2, 1, 1, 0, {-1.0}},
{"nuserdata", (int)offsetof(mjSpec, nuserdata), 2, 1, 0, 0, {0}},
{"nkey", (int)offsetof(mjSpec, nkey), 2, 1, 0, 0, {0}},
{"nuser_body", (int)offsetof(mjSpec, nuser_body), 2, 1, 1, 0, {-1.0}},
{"nuser_jnt", (int)offsetof(mjSpec, nuser_jnt), 2, 1, 1, 0, {-1.0}},
{"nuser_geom", (int)offsetof(mjSpec, nuser_geom), 2, 1, 1, 0, {-1.0}},
{"nuser_site", (int)offsetof(mjSpec, nuser_site), 2, 1, 1, 0, {-1.0}},
{"nuser_cam", (int)offsetof(mjSpec, nuser_cam), 2, 1, 1, 0, {-1.0}},
{"nuser_tendon", (int)offsetof(mjSpec, nuser_tendon), 2, 1, 1, 0, {-1.0}},
{"nuser_actuator", (int)offsetof(mjSpec, nuser_actuator), 2, 1, 1, 0, {-1.0}},
{"nuser_sensor", (int)offsetof(mjSpec, nuser_sensor), 2, 1, 1, 0, {-1.0}},
};
static const mjXDefaultEntry kDefaults_mjStatistic[] = {
{"meaninertia", (int)offsetof(mjStatistic, meaninertia), 4, 1, 0, 1, {0}},
{"meanmass", (int)offsetof(mjStatistic, meanmass), 4, 1, 0, 1, {0}},
{"meansize", (int)offsetof(mjStatistic, meansize), 4, 1, 0, 1, {0}},
{"extent", (int)offsetof(mjStatistic, extent), 4, 1, 0, 1, {0}},
{"center", (int)offsetof(mjStatistic, center), 4, 3, 0, 1, {0}},
};
static const mjXDefaultEntry kDefaults_mjVisual_global[] = {
{"cameraid", (int)offsetof(mjVisual, global.cameraid), 2, 1, 1, 0, {-1.0}},
{"orthographic", (int)offsetof(mjVisual, global.orthographic), 2, 1, 1, 0, {0}},
{"fovy", (int)offsetof(mjVisual, global.fovy), 1, 1, 1, 0, {45.0}},
{"ipd", (int)offsetof(mjVisual, global.ipd), 1, 1, 1, 0, {0.068}},
{"azimuth", (int)offsetof(mjVisual, global.azimuth), 1, 1, 1, 0, {90.0}},
{"elevation", (int)offsetof(mjVisual, global.elevation), 1, 1, 1, 0, {-45.0}},
{"linewidth", (int)offsetof(mjVisual, global.linewidth), 1, 1, 1, 0, {1.0}},
{"glow", (int)offsetof(mjVisual, global.glow), 1, 1, 1, 0, {0.3}},
{"offwidth", (int)offsetof(mjVisual, global.offwidth), 2, 1, 1, 0, {640.0}},
{"offheight", (int)offsetof(mjVisual, global.offheight), 2, 1, 1, 0, {480.0}},
{"realtime", (int)offsetof(mjVisual, global.realtime), 1, 1, 1, 0, {1.0}},
{"ellipsoidinertia", (int)offsetof(mjVisual, global.ellipsoidinertia), 2, 1, 1, 0, {0}},
{"bvactive", (int)offsetof(mjVisual, global.bvactive), 2, 1, 1, 0, {0}},
};
static const mjXDefaultEntry kDefaults_mjVisual_headlight[] = {
{"ambient", (int)offsetof(mjVisual, headlight.ambient), 1, 3, 3, 0, {0.1, 0.1, 0.1}},
{"diffuse", (int)offsetof(mjVisual, headlight.diffuse), 1, 3, 3, 0, {0.4, 0.4, 0.4}},
{"specular", (int)offsetof(mjVisual, headlight.specular), 1, 3, 3, 0, {0.5, 0.5, 0.5}},
{"active", (int)offsetof(mjVisual, headlight.active), 2, 1, 1, 0, {1.0}},
};
static const mjXDefaultEntry kDefaults_mjVisual_map[] = {
{"stiffness", (int)offsetof(mjVisual, map.stiffness), 1, 1, 1, 0, {100.0}},
{"stiffnessrot", (int)offsetof(mjVisual, map.stiffnessrot), 1, 1, 1, 0, {500.0}},
{"force", (int)offsetof(mjVisual, map.force), 1, 1, 1, 0, {0.005}},
{"torque", (int)offsetof(mjVisual, map.torque), 1, 1, 1, 0, {0.1}},
{"alpha", (int)offsetof(mjVisual, map.alpha), 1, 1, 1, 0, {0.3}},
{"fogstart", (int)offsetof(mjVisual, map.fogstart), 1, 1, 1, 0, {3.0}},
{"fogend", (int)offsetof(mjVisual, map.fogend), 1, 1, 1, 0, {10.0}},
{"znear", (int)offsetof(mjVisual, map.znear), 1, 1, 1, 0, {0.01}},
{"zfar", (int)offsetof(mjVisual, map.zfar), 1, 1, 1, 0, {50.0}},
{"haze", (int)offsetof(mjVisual, map.haze), 1, 1, 1, 0, {0.3}},
{"shadowclip", (int)offsetof(mjVisual, map.shadowclip), 1, 1, 1, 0, {1.0}},
{"shadowscale", (int)offsetof(mjVisual, map.shadowscale), 1, 1, 1, 0, {0.6}},
{"actuatortendon", (int)offsetof(mjVisual, map.actuatortendon), 1, 1, 1, 0, {2.0}},
};
static const mjXDefaultEntry kDefaults_mjVisual_quality[] = {
{"shadowsize", (int)offsetof(mjVisual, quality.shadowsize), 2, 1, 1, 0, {4096.0}},
{"offsamples", (int)offsetof(mjVisual, quality.offsamples), 2, 1, 1, 0, {4.0}},
{"numslices", (int)offsetof(mjVisual, quality.numslices), 2, 1, 1, 0, {28.0}},
{"numstacks", (int)offsetof(mjVisual, quality.numstacks), 2, 1, 1, 0, {16.0}},
{"numquads", (int)offsetof(mjVisual, quality.numquads), 2, 1, 1, 0, {4.0}},
};
static const mjXDefaultEntry kDefaults_mjVisual_rgba[] = {
{"fog", (int)offsetof(mjVisual, rgba.fog), 1, 4, 4, 0, {0.0, 0.0, 0.0, 1.0}},
{"haze", (int)offsetof(mjVisual, rgba.haze), 1, 4, 4, 0, {1.0, 1.0, 1.0, 1.0}},
{"force", (int)offsetof(mjVisual, rgba.force), 1, 4, 4, 0, {1.0, 0.5, 0.5, 1.0}},
{"inertia", (int)offsetof(mjVisual, rgba.inertia), 1, 4, 4, 0, {0.8, 0.2, 0.2, 0.6}},
{"joint", (int)offsetof(mjVisual, rgba.joint), 1, 4, 4, 0, {0.2, 0.6, 0.8, 1.0}},
{"actuator", (int)offsetof(mjVisual, rgba.actuator), 1, 4, 4, 0, {0.2, 0.25, 0.2, 1.0}},
{"actuatornegative", (int)offsetof(mjVisual, rgba.actuatornegative), 1, 4, 4, 0, {0.2, 0.6, 0.9, 1.0}},
{"actuatorpositive", (int)offsetof(mjVisual, rgba.actuatorpositive), 1, 4, 4, 0, {0.9, 0.4, 0.2, 1.0}},
{"com", (int)offsetof(mjVisual, rgba.com), 1, 4, 4, 0, {0.9, 0.9, 0.9, 1.0}},
{"camera", (int)offsetof(mjVisual, rgba.camera), 1, 4, 4, 0, {0.6, 0.9, 0.6, 1.0}},
{"light", (int)offsetof(mjVisual, rgba.light), 1, 4, 4, 0, {0.6, 0.6, 0.9, 1.0}},
{"selectpoint", (int)offsetof(mjVisual, rgba.selectpoint), 1, 4, 4, 0, {0.9, 0.9, 0.1, 1.0}},
{"connect", (int)offsetof(mjVisual, rgba.connect), 1, 4, 4, 0, {0.2, 0.2, 0.8, 1.0}},
{"contactpoint", (int)offsetof(mjVisual, rgba.contactpoint), 1, 4, 4, 0, {0.9, 0.6, 0.2, 1.0}},
{"contactforce", (int)offsetof(mjVisual, rgba.contactforce), 1, 4, 4, 0, {0.7, 0.9, 0.9, 1.0}},
{"contactfriction", (int)offsetof(mjVisual, rgba.contactfriction), 1, 4, 4, 0, {0.9, 0.8, 0.4, 1.0}},
{"contacttorque", (int)offsetof(mjVisual, rgba.contacttorque), 1, 4, 4, 0, {0.9, 0.7, 0.9, 1.0}},
{"contactgap", (int)offsetof(mjVisual, rgba.contactgap), 1, 4, 4, 0, {0.5, 0.8, 0.9, 1.0}},
{"rangefinder", (int)offsetof(mjVisual, rgba.rangefinder), 1, 4, 4, 0, {1.0, 1.0, 0.1, 1.0}},
{"constraint", (int)offsetof(mjVisual, rgba.constraint), 1, 4, 4, 0, {0.9, 0.0, 0.0, 1.0}},
{"slidercrank", (int)offsetof(mjVisual, rgba.slidercrank), 1, 4, 4, 0, {0.5, 0.3, 0.8, 1.0}},
{"crankbroken", (int)offsetof(mjVisual, rgba.crankbroken), 1, 4, 4, 0, {0.9, 0.0, 0.0, 1.0}},
{"frustum", (int)offsetof(mjVisual, rgba.frustum), 1, 4, 4, 0, {1.0, 1.0, 0.0, 0.2}},
{"bv", (int)offsetof(mjVisual, rgba.bv), 1, 4, 4, 0, {0.0, 1.0, 0.0, 0.5}},
{"bvactive", (int)offsetof(mjVisual, rgba.bvactive), 1, 4, 4, 0, {1.0, 0.0, 0.0, 0.5}},
};
static const mjXDefaultEntry kDefaults_mjVisual_scale[] = {
{"forcewidth", (int)offsetof(mjVisual, scale.forcewidth), 1, 1, 1, 0, {0.1}},
{"contactwidth", (int)offsetof(mjVisual, scale.contactwidth), 1, 1, 1, 0, {0.3}},
{"contactheight", (int)offsetof(mjVisual, scale.contactheight), 1, 1, 1, 0, {0.1}},
{"connect", (int)offsetof(mjVisual, scale.connect), 1, 1, 1, 0, {0.2}},
{"com", (int)offsetof(mjVisual, scale.com), 1, 1, 1, 0, {0.4}},
{"camera", (int)offsetof(mjVisual, scale.camera), 1, 1, 1, 0, {0.3}},
{"light", (int)offsetof(mjVisual, scale.light), 1, 1, 1, 0, {0.3}},
{"selectpoint", (int)offsetof(mjVisual, scale.selectpoint), 1, 1, 1, 0, {0.2}},
{"jointlength", (int)offsetof(mjVisual, scale.jointlength), 1, 1, 1, 0, {1.0}},
{"jointwidth", (int)offsetof(mjVisual, scale.jointwidth), 1, 1, 1, 0, {0.1}},
{"actuatorlength", (int)offsetof(mjVisual, scale.actuatorlength), 1, 1, 1, 0, {0.7}},
{"actuatorwidth", (int)offsetof(mjVisual, scale.actuatorwidth), 1, 1, 1, 0, {0.2}},
{"framelength", (int)offsetof(mjVisual, scale.framelength), 1, 1, 1, 0, {1.0}},
{"framewidth", (int)offsetof(mjVisual, scale.framewidth), 1, 1, 1, 0, {0.1}},
{"constraint", (int)offsetof(mjVisual, scale.constraint), 1, 1, 1, 0, {0.1}},
{"slidercrank", (int)offsetof(mjVisual, scale.slidercrank), 1, 1, 1, 0, {0.2}},
{"frustum", (int)offsetof(mjVisual, scale.frustum), 1, 1, 1, 0, {10.0}},
};
static const mjXDefaultEntry kDefaults_mjsActuator[] = {
{"group", (int)offsetof(mjsActuator, group), 2, 1, 0, 0, {0}},
{"nsample", (int)offsetof(mjsActuator, nsample), 2, 1, 0, 0, {0}},
{"interp", (int)offsetof(mjsActuator, interp), 2, 1, 0, 0, {0}},
{"delay", (int)offsetof(mjsActuator, delay), 0, 1, 0, 0, {0}},
{"ctrlrange", (int)offsetof(mjsActuator, ctrlrange), 0, 2, 0, 0, {0}},
{"ctrllimited", (int)offsetof(mjsActuator, ctrllimited), 2, 1, 1, 0, {(double)2}},
{"forcelimited", (int)offsetof(mjsActuator, forcelimited), 2, 1, 1, 0, {(double)2}},
{"actlimited", (int)offsetof(mjsActuator, actlimited), 2, 1, 1, 0, {(double)2}},
{"forcerange", (int)offsetof(mjsActuator, forcerange), 0, 2, 0, 0, {0}},
{"actrange", (int)offsetof(mjsActuator, actrange), 0, 2, 0, 0, {0}},
{"lengthrange", (int)offsetof(mjsActuator, lengthrange), 0, 2, 0, 0, {0}},
{"gear", (int)offsetof(mjsActuator, gear), 0, 6, 6, 0, {1.0, 0.0, 0.0, 0.0, 0.0, 0.0}},
{"damping", (int)offsetof(mjsActuator, damping), 0, mjNPOLY+1, 0, 0, {0}},
{"armature", (int)offsetof(mjsActuator, armature), 0, 1, 0, 0, {0}},
{"cranklength", (int)offsetof(mjsActuator, cranklength), 0, 1, 0, 0, {0}},
{"actdim", (int)offsetof(mjsActuator, actdim), 2, 1, 1, 0, {-1.0}},
{"velrange", (int)offsetof(mjsActuator, velrange), 0, 2, 0, 0, {0}},
{"ffrange", (int)offsetof(mjsActuator, ffrange), 0, 2, 0, 0, {0}},
{"dyntype", (int)offsetof(mjsActuator, dyntype), 2, 1, 1, 0, {(double)mjDYN_NONE}},
{"gaintype", (int)offsetof(mjsActuator, gaintype), 2, 1, 1, 0, {(double)mjGAIN_FIXED}},
{"biastype", (int)offsetof(mjsActuator, biastype), 2, 1, 1, 0, {(double)mjBIAS_NONE}},
{"dynprm", (int)offsetof(mjsActuator, dynprm), 0, mjNDYN, 1, 0, {1.0}},
{"gainprm", (int)offsetof(mjsActuator, gainprm), 0, mjNGAIN, 1, 0, {1.0}},
{"biasprm", (int)offsetof(mjsActuator, biasprm), 0, mjNBIAS, 0, 0, {0}},
{"actearly", (int)offsetof(mjsActuator, actearly), 3, 1, 0, 0, {0}},
{"inheritrange", (int)offsetof(mjsActuator, inheritrange), 0, 1, 0, 0, {0}},
};
static const mjXDefaultEntry kDefaults_mjsBody[] = {
{"pos", (int)offsetof(mjsBody, pos), 0, 3, 3, 0, {0.0, 0.0, 0.0}},
{"quat", (int)offsetof(mjsBody, quat), 0, 4, 4, 0, {1.0, 0.0, 0.0, 0.0}},
{"mocap", (int)offsetof(mjsBody, mocap), 3, 1, 0, 0, {0}},
{"gravcomp", (int)offsetof(mjsBody, gravcomp), 0, 1, 0, 0, {0}},
{"sleep", (int)offsetof(mjsBody, sleep), 2, 1, 0, 0, {0}},
{"simple", (int)offsetof(mjsBody, simple), 3, 1, 1, 0, {(double)1}},
{"pos", (int)offsetof(mjsBody, ipos), 0, 3, 0, 1, {0}},
{"quat", (int)offsetof(mjsBody, iquat), 0, 4, 4, 0, {1.0, 0.0, 0.0, 0.0}},
{"mass", (int)offsetof(mjsBody, mass), 0, 1, 0, 0, {0}},
{"diaginertia", (int)offsetof(mjsBody, inertia), 0, 3, 0, 0, {0}},
{"fullinertia", (int)offsetof(mjsBody, fullinertia), 0, 6, 0, 1, {0}},
};
static const mjXDefaultEntry kDefaults_mjsCamera[] = {
{"projection", (int)offsetof(mjsCamera, proj), 2, 1, 0, 0, {0}},
{"fovy", (int)offsetof(mjsCamera, fovy), 0, 1, 1, 0, {45.0}},
{"ipd", (int)offsetof(mjsCamera, ipd), 0, 1, 1, 0, {0.068}},
{"resolution", (int)offsetof(mjsCamera, resolution), 2, 2, 2, 0, {1.0, 1.0}},
{"pos", (int)offsetof(mjsCamera, pos), 0, 3, 3, 0, {0.0, 0.0, 0.0}},
{"quat", (int)offsetof(mjsCamera, quat), 0, 4, 4, 0, {1.0, 0.0, 0.0, 0.0}},
{"mode", (int)offsetof(mjsCamera, mode), 2, 1, 1, 0, {(double)mjCAMLIGHT_FIXED}},
{"focal", (int)offsetof(mjsCamera, focal_length), 1, 2, 0, 0, {0}},
{"focalpixel", (int)offsetof(mjsCamera, focal_pixel), 1, 2, 0, 0, {0}},
{"principal", (int)offsetof(mjsCamera, principal_length), 1, 2, 0, 0, {0}},
{"principalpixel", (int)offsetof(mjsCamera, principal_pixel), 1, 2, 0, 0, {0}},
{"sensorsize", (int)offsetof(mjsCamera, sensor_size), 1, 2, 0, 0, {0}},
};
static const mjXDefaultEntry kDefaults_mjsCompiler[] = {
{"autolimits", (int)offsetof(mjsCompiler, autolimits), 3, 1, 1, 0, {1}},
{"boundmass", (int)offsetof(mjsCompiler, boundmass), 0, 1, 0, 0, {0}},
{"boundinertia", (int)offsetof(mjsCompiler, boundinertia), 0, 1, 0, 0, {0}},
{"settotalmass", (int)offsetof(mjsCompiler, settotalmass), 0, 1, 1, 0, {-1.0}},
{"balanceinertia", (int)offsetof(mjsCompiler, balanceinertia), 3, 1, 0, 0, {0}},
{"angle", (int)offsetof(mjsCompiler, degree), 3, 1, 1, 0, {(double)1}},
{"fitaabb", (int)offsetof(mjsCompiler, fitaabb), 3, 1, 0, 0, {0}},
{"discardvisual", (int)offsetof(mjsCompiler, discardvisual), 3, 1, 0, 0, {0}},
{"usethread", (int)offsetof(mjsCompiler, usethread), 3, 1, 1, 0, {1}},
{"fusestatic", (int)offsetof(mjsCompiler, fusestatic), 3, 1, 0, 0, {0}},
{"inertiafromgeom", (int)offsetof(mjsCompiler, inertiafromgeom), 2, 1, 1, 0, {(double)2}},
{"inertiagrouprange", (int)offsetof(mjsCompiler, inertiagrouprange), 2, 2, 2, 0, {0.0, 5.0}},
{"saveinertial", (int)offsetof(mjsCompiler, saveinertial), 3, 1, 0, 0, {0}},
{"alignfree", (int)offsetof(mjsCompiler, alignfree), 3, 1, 0, 0, {0}},
{"conflict", (int)offsetof(mjsCompiler, conflict), 2, 1, 0, 0, {0}},
};
static const mjXDefaultEntry kDefaults_mjsEquality[] = {
{"active", (int)offsetof(mjsEquality, active), 3, 1, 1, 0, {1}},
{"solref", (int)offsetof(mjsEquality, solref), 4, mjNREF, 2, 0, {0.02, 1.0}},
{"solimp", (int)offsetof(mjsEquality, solimp), 4, mjNIMP, 5, 0, {0.9, 0.95, 0.001, 0.5, 2.0}},
};
static const mjXDefaultEntry kDefaults_mjsFlex[] = {
{"young", (int)offsetof(mjsFlex, young), 0, 1, 0, 0, {0}},
{"poisson", (int)offsetof(mjsFlex, poisson), 0, 1, 0, 0, {0}},
{"damping", (int)offsetof(mjsFlex, damping), 0, 1, 0, 0, {0}},
{"thickness", (int)offsetof(mjsFlex, thickness), 0, 1, 1, 0, {-1.0}},
{"elastic2d", (int)offsetof(mjsFlex, elastic2d), 2, 1, 0, 0, {0}},
{"contype", (int)offsetof(mjsFlex, contype), 2, 1, 1, 0, {1.0}},
{"conaffinity", (int)offsetof(mjsFlex, conaffinity), 2, 1, 1, 0, {1.0}},
{"condim", (int)offsetof(mjsFlex, condim), 2, 1, 1, 0, {3.0}},
{"priority", (int)offsetof(mjsFlex, priority), 2, 1, 0, 0, {0}},
{"friction", (int)offsetof(mjsFlex, friction), 0, 3, 3, 0, {1.0, 0.005, 0.0001}},
{"solmix", (int)offsetof(mjsFlex, solmix), 0, 1, 1, 0, {1.0}},
{"solref", (int)offsetof(mjsFlex, solref), 4, mjNREF, 2, 0, {0.02, 1.0}},
{"solimp", (int)offsetof(mjsFlex, solimp), 4, mjNIMP, 5, 0, {0.9, 0.95, 0.001, 0.5, 2.0}},
{"margin", (int)offsetof(mjsFlex, margin), 0, 1, 0, 0, {0}},
{"gap", (int)offsetof(mjsFlex, gap), 0, 1, 0, 0, {0}},
{"internal", (int)offsetof(mjsFlex, internal), 3, 1, 0, 0, {0}},
{"selfcollide", (int)offsetof(mjsFlex, selfcollide), 2, 1, 1, 0, {(double)mjFLEXSELF_AUTO}},
{"activelayers", (int)offsetof(mjsFlex, activelayers), 2, 1, 1, 0, {1.0}},
{"passive", (int)offsetof(mjsFlex, passive), 2, 1, 0, 0, {0}},
{"group", (int)offsetof(mjsFlex, group), 2, 1, 0, 0, {0}},
{"dim", (int)offsetof(mjsFlex, dim), 2, 1, 1, 0, {2.0}},
{"radius", (int)offsetof(mjsFlex, radius), 0, 1, 1, 0, {0.005}},
{"rgba", (int)offsetof(mjsFlex, rgba), 1, 4, 4, 0, {0.5, 0.5, 0.5, 1.0}},
{"flatskin", (int)offsetof(mjsFlex, flatskin), 3, 1, 0, 0, {0}},
{"cellcount", (int)offsetof(mjsFlex, cellcount), 2, 3, 3, 0, {1.0, 1.0, 1.0}},
{"stiffness", (int)offsetof(mjsFlex, edgestiffness), 0, 1, 0, 0, {0}},
{"damping", (int)offsetof(mjsFlex, edgedamping), 0, 1, 0, 0, {0}},
};
static const mjXDefaultEntry kDefaults_mjsFrame[] = {
{"pos", (int)offsetof(mjsFrame, pos), 0, 3, 0, 0, {0}},
{"quat", (int)offsetof(mjsFrame, quat), 0, 4, 4, 0, {1.0, 0.0, 0.0, 0.0}},
};
static const mjXDefaultEntry kDefaults_mjsGeom[] = {
{"type", (int)offsetof(mjsGeom, type), 2, 1, 1, 0, {(double)mjGEOM_SPHERE}},
{"contype", (int)offsetof(mjsGeom, contype), 2, 1, 1, 0, {1.0}},
{"conaffinity", (int)offsetof(mjsGeom, conaffinity), 2, 1, 1, 0, {1.0}},
{"condim", (int)offsetof(mjsGeom, condim), 2, 1, 1, 0, {3.0}},
{"group", (int)offsetof(mjsGeom, group), 2, 1, 0, 0, {0}},
{"priority", (int)offsetof(mjsGeom, priority), 2, 1, 0, 0, {0}},
{"size", (int)offsetof(mjsGeom, size), 0, 3, 0, 0, {0}},
{"friction", (int)offsetof(mjsGeom, friction), 0, 3, 3, 0, {1.0, 0.005, 0.0001}},
{"mass", (int)offsetof(mjsGeom, mass), 0, 1, 0, 1, {0}},
{"density", (int)offsetof(mjsGeom, density), 0, 1, 1, 0, {1000.0}},
{"shellinertia", (int)offsetof(mjsGeom, typeinertia), 2, 1, 0, 0, {0}},
{"solmix", (int)offsetof(mjsGeom, solmix), 0, 1, 1, 0, {1.0}},
{"solref", (int)offsetof(mjsGeom, solref), 4, mjNREF, 2, 0, {0.02, 1.0}},
{"solimp", (int)offsetof(mjsGeom, solimp), 4, mjNIMP, 5, 0, {0.9, 0.95, 0.001, 0.5, 2.0}},
{"margin", (int)offsetof(mjsGeom, margin), 0, 1, 0, 0, {0}},
{"gap", (int)offsetof(mjsGeom, gap), 0, 1, 0, 0, {0}},
{"surfacevel", (int)offsetof(mjsGeom, surfacevel), 0, 6, 0, 0, {0}},
{"adhesion", (int)offsetof(mjsGeom, adhesion), 0, 1, 0, 0, {0}},
{"fromto", (int)offsetof(mjsGeom, fromto), 0, 6, 0, 1, {0}},
{"pos", (int)offsetof(mjsGeom, pos), 0, 3, 3, 0, {0.0, 0.0, 0.0}},
{"quat", (int)offsetof(mjsGeom, quat), 0, 4, 4, 0, {1.0, 0.0, 0.0, 0.0}},
{"fitscale", (int)offsetof(mjsGeom, fitscale), 0, 1, 1, 0, {1.0}},
{"rgba", (int)offsetof(mjsGeom, rgba), 1, 4, 4, 0, {0.5, 0.5, 0.5, 1.0}},
{"fluidshape", (int)offsetof(mjsGeom, fluid_ellipsoid), 4, 1, 0, 0, {0}},
{"fluidcoef", (int)offsetof(mjsGeom, fluid_coefs), 4, 5, 5, 0, {0.5, 0.25, 1.5, 1.0, 1.0}},
};
static const mjXDefaultEntry kDefaults_mjsHField[] = {
{"nrow", (int)offsetof(mjsHField, nrow), 2, 1, 0, 0, {0}},
{"ncol", (int)offsetof(mjsHField, ncol), 2, 1, 0, 0, {0}},
{"size", (int)offsetof(mjsHField, size), 0, 4, 0, 0, {0}},
};
static const mjXDefaultEntry kDefaults_mjsJoint[] = {
{"type", (int)offsetof(mjsJoint, type), 2, 1, 1, 0, {(double)mjJNT_HINGE}},
{"group", (int)offsetof(mjsJoint, group), 2, 1, 0, 0, {0}},
{"pos", (int)offsetof(mjsJoint, pos), 0, 3, 0, 0, {0}},
{"axis", (int)offsetof(mjsJoint, axis), 0, 3, 3, 0, {0.0, 0.0, 1.0}},
{"springdamper", (int)offsetof(mjsJoint, springdamper), 0, 2, 0, 0, {0}},
{"limited", (int)offsetof(mjsJoint, limited), 2, 1, 1, 0, {(double)2}},
{"actuatorfrclimited", (int)offsetof(mjsJoint, actfrclimited), 2, 1, 1, 0, {(double)2}},
{"solreflimit", (int)offsetof(mjsJoint, solref_limit), 4, mjNREF, 2, 0, {0.02, 1.0}},
{"solimplimit", (int)offsetof(mjsJoint, solimp_limit), 4, mjNIMP, 5, 0, {0.9, 0.95, 0.001, 0.5, 2.0}},
{"solreffriction", (int)offsetof(mjsJoint, solref_friction), 4, mjNREF, 2, 0, {0.02, 1.0}},
{"solimpfriction", (int)offsetof(mjsJoint, solimp_friction), 4, mjNIMP, 5, 0, {0.9, 0.95, 0.001, 0.5, 2.0}},
{"stiffness", (int)offsetof(mjsJoint, stiffness), 0, mjNPOLY+1, 0, 0, {0}},
{"range", (int)offsetof(mjsJoint, range), 0, 2, 0, 0, {0}},
{"actuatorfrcrange", (int)offsetof(mjsJoint, actfrcrange), 0, 2, 0, 0, {0}},
{"actuatorgravcomp", (int)offsetof(mjsJoint, actgravcomp), 3, 1, 0, 0, {0}},
{"margin", (int)offsetof(mjsJoint, margin), 0, 1, 0, 0, {0}},
{"ref", (int)offsetof(mjsJoint, ref), 0, 1, 0, 0, {0}},
{"springref", (int)offsetof(mjsJoint, springref), 0, 1, 0, 0, {0}},
{"armature", (int)offsetof(mjsJoint, armature), 0, 1, 0, 0, {0}},
{"damping", (int)offsetof(mjsJoint, damping), 0, mjNPOLY+1, 0, 0, {0}},
{"frictionloss", (int)offsetof(mjsJoint, frictionloss), 0, 1, 0, 0, {0}},
};
static const mjXDefaultEntry kDefaults_mjsKey[] = {
{"time", (int)offsetof(mjsKey, time), 0, 1, 0, 0, {0}},
};
static const mjXDefaultEntry kDefaults_mjsLight[] = {
{"type", (int)offsetof(mjsLight, type), 2, 1, 0, 0, {0}},
{"castshadow", (int)offsetof(mjsLight, castshadow), 3, 1, 1, 0, {1}},
{"active", (int)offsetof(mjsLight, active), 3, 1, 1, 0, {1}},
{"pos", (int)offsetof(mjsLight, pos), 0, 3, 3, 0, {0.0, 0.0, 0.0}},
{"dir", (int)offsetof(mjsLight, dir), 0, 3, 3, 0, {0.0, 0.0, -1.0}},
{"bulbradius", (int)offsetof(mjsLight, bulbradius), 1, 1, 1, 0, {0.02}},
{"intensity", (int)offsetof(mjsLight, intensity), 1, 1, 0, 0, {0}},
{"range", (int)offsetof(mjsLight, range), 1, 1, 1, 0, {10.0}},
{"attenuation", (int)offsetof(mjsLight, attenuation), 1, 3, 3, 0, {1.0, 0.0, 0.0}},
{"cutoff", (int)offsetof(mjsLight, cutoff), 1, 1, 1, 0, {45.0}},
{"softness", (int)offsetof(mjsLight, softness), 1, 1, 1, 0, {0.2}},
{"exponent", (int)offsetof(mjsLight, exponent), 1, 1, 1, 0, {10.0}},
{"ambient", (int)offsetof(mjsLight, ambient), 1, 3, 0, 0, {0}},
{"diffuse", (int)offsetof(mjsLight, diffuse), 1, 3, 3, 0, {0.7, 0.7, 0.7}},
{"specular", (int)offsetof(mjsLight, specular), 1, 3, 3, 0, {0.3, 0.3, 0.3}},
{"mode", (int)offsetof(mjsLight, mode), 2, 1, 1, 0, {(double)mjCAMLIGHT_FIXED}},
};
static const mjXDefaultEntry kDefaults_mjsMaterial[] = {
{"texrepeat", (int)offsetof(mjsMaterial, texrepeat), 1, 2, 2, 0, {1.0, 1.0}},
{"texuniform", (int)offsetof(mjsMaterial, texuniform), 3, 1, 0, 0, {0}},
{"emission", (int)offsetof(mjsMaterial, emission), 1, 1, 0, 0, {0}},
{"specular", (int)offsetof(mjsMaterial, specular), 1, 1, 1, 0, {0.5}},
{"shininess", (int)offsetof(mjsMaterial, shininess), 1, 1, 1, 0, {0.5}},
{"reflectance", (int)offsetof(mjsMaterial, reflectance), 1, 1, 0, 0, {0}},
{"metallic", (int)offsetof(mjsMaterial, metallic), 1, 1, 1, 0, {-1.0}},
{"roughness", (int)offsetof(mjsMaterial, roughness), 1, 1, 1, 0, {-1.0}},
{"rgba", (int)offsetof(mjsMaterial, rgba), 1, 4, 4, 0, {1.0, 1.0, 1.0, 1.0}},
};
static const mjXDefaultEntry kDefaults_mjsMesh[] = {
{"refpos", (int)offsetof(mjsMesh, refpos), 0, 3, 0, 0, {0}},
{"refquat", (int)offsetof(mjsMesh, refquat), 0, 4, 4, 0, {1.0, 0.0, 0.0, 0.0}},
{"scale", (int)offsetof(mjsMesh, scale), 0, 3, 3, 0, {1.0, 1.0, 1.0}},
{"smoothnormal", (int)offsetof(mjsMesh, smoothnormal), 3, 1, 0, 0, {0}},
{"maxhullvert", (int)offsetof(mjsMesh, maxhullvert), 2, 1, 1, 0, {-1.0}},
{"inertia", (int)offsetof(mjsMesh, inertia), 2, 1, 1, 0, {(double)mjMESH_INERTIA_LEGACY}},
};
static const mjXDefaultEntry kDefaults_mjsNumeric[] = {
{"size", (int)offsetof(mjsNumeric, size), 2, 1, 0, 0, {0}},
};
static const mjXDefaultEntry kDefaults_mjsPair[] = {
{"condim", (int)offsetof(mjsPair, condim), 2, 1, 1, 0, {3.0}},
{"friction", (int)offsetof(mjsPair, friction), 0, 5, 5, 0, {1.0, 1.0, 0.005, 0.0001, 0.0001}},
{"solref", (int)offsetof(mjsPair, solref), 4, mjNREF, 2, 0, {0.02, 1.0}},
{"solreffriction", (int)offsetof(mjsPair, solreffriction), 4, mjNREF, 0, 0, {0}},
{"solimp", (int)offsetof(mjsPair, solimp), 4, mjNIMP, 5, 0, {0.9, 0.95, 0.001, 0.5, 2.0}},
{"gap", (int)offsetof(mjsPair, gap), 0, 1, 0, 0, {0}},
{"margin", (int)offsetof(mjsPair, margin), 0, 1, 0, 0, {0}},
{"adhesion", (int)offsetof(mjsPair, adhesion), 0, 1, 0, 0, {0}},
};
static const mjXDefaultEntry kDefaults_mjsSensor[] = {
{"nsample", (int)offsetof(mjsSensor, nsample), 2, 1, 0, 0, {0}},
{"interp", (int)offsetof(mjsSensor, interp), 2, 1, 0, 0, {0}},
{"delay", (int)offsetof(mjsSensor, delay), 0, 1, 0, 0, {0}},
{"interval", (int)offsetof(mjsSensor, interval), 0, 2, 0, 0, {0}},
{"cutoff", (int)offsetof(mjsSensor, cutoff), 0, 1, 0, 0, {0}},
{"noise", (int)offsetof(mjsSensor, noise), 0, 1, 0, 0, {0}},
{"objtype", (int)offsetof(mjsSensor, objtype), 2, 1, 0, 0, {0}},
{"reftype", (int)offsetof(mjsSensor, reftype), 2, 1, 0, 0, {0}},
{"datatype", (int)offsetof(mjsSensor, datatype), 2, 1, 1, 0, {(double)mjDATATYPE_REAL}},
{"needstage", (int)offsetof(mjsSensor, needstage), 2, 1, 1, 0, {(double)mjSTAGE_ACC}},
{"dim", (int)offsetof(mjsSensor, dim), 2, 1, 0, 0, {0}},
};
static const mjXDefaultEntry kDefaults_mjsSite[] = {
{"type", (int)offsetof(mjsSite, type), 2, 1, 1, 0, {(double)mjGEOM_SPHERE}},
{"group", (int)offsetof(mjsSite, group), 2, 1, 0, 0, {0}},
{"pos", (int)offsetof(mjsSite, pos), 0, 3, 3, 0, {0.0, 0.0, 0.0}},
{"quat", (int)offsetof(mjsSite, quat), 0, 4, 4, 0, {1.0, 0.0, 0.0, 0.0}},
{"size", (int)offsetof(mjsSite, size), 0, 3, 3, 0, {0.005, 0.005, 0.005}},
{"fromto", (int)offsetof(mjsSite, fromto), 0, 6, 0, 1, {0}},
{"rgba", (int)offsetof(mjsSite, rgba), 1, 4, 4, 0, {0.5, 0.5, 0.5, 1.0}},
};
static const mjXDefaultEntry kDefaults_mjsSkin[] = {
{"rgba", (int)offsetof(mjsSkin, rgba), 1, 4, 4, 0, {0.5, 0.5, 0.5, 1.0}},
{"inflate", (int)offsetof(mjsSkin, inflate), 1, 1, 0, 0, {0}},
{"group", (int)offsetof(mjsSkin, group), 2, 1, 0, 0, {0}},
};
static const mjXDefaultEntry kDefaults_mjsTendon[] = {
{"group", (int)offsetof(mjsTendon, group), 2, 1, 0, 0, {0}},
{"limited", (int)offsetof(mjsTendon, limited), 2, 1, 1, 0, {(double)2}},
{"actuatorfrclimited", (int)offsetof(mjsTendon, actfrclimited), 2, 1, 0, 0, {0}},
{"range", (int)offsetof(mjsTendon, range), 0, 2, 0, 0, {0}},
{"actuatorfrcrange", (int)offsetof(mjsTendon, actfrcrange), 0, 2, 0, 0, {0}},
{"solreflimit", (int)offsetof(mjsTendon, solref_limit), 4, mjNREF, 2, 0, {0.02, 1.0}},
{"solimplimit", (int)offsetof(mjsTendon, solimp_limit), 4, mjNIMP, 5, 0, {0.9, 0.95, 0.001, 0.5, 2.0}},
{"solreffriction", (int)offsetof(mjsTendon, solref_friction), 4, mjNREF, 2, 0, {0.02, 1.0}},
{"solimpfriction", (int)offsetof(mjsTendon, solimp_friction), 4, mjNIMP, 5, 0, {0.9, 0.95, 0.001, 0.5, 2.0}},
{"frictionloss", (int)offsetof(mjsTendon, frictionloss), 0, 1, 0, 0, {0}},
{"springlength", (int)offsetof(mjsTendon, springlength), 0, 2, 2, 0, {-1.0, -1.0}},
{"width", (int)offsetof(mjsTendon, width), 0, 1, 1, 0, {0.003}},
{"margin", (int)offsetof(mjsTendon, margin), 0, 1, 0, 0, {0}},
{"stiffness", (int)offsetof(mjsTendon, stiffness), 0, mjNPOLY+1, 0, 0, {0}},
{"damping", (int)offsetof(mjsTendon, damping), 0, mjNPOLY+1, 0, 0, {0}},
{"armature", (int)offsetof(mjsTendon, armature), 0, 1, 0, 0, {0}},
{"rgba", (int)offsetof(mjsTendon, rgba), 1, 4, 4, 0, {0.5, 0.5, 0.5, 1.0}},
};
static const mjXDefaultEntry kDefaults_mjsTexture[] = {
{"type", (int)offsetof(mjsTexture, type), 2, 1, 1, 0, {(double)mjTEXTURE_CUBE}},
{"colorspace", (int)offsetof(mjsTexture, colorspace), 2, 1, 1, 0, {(double)mjCOLORSPACE_AUTO}},
{"gridsize", (int)offsetof(mjsTexture, gridsize), 2, 2, 2, 0, {1.0, 1.0}},
{"builtin", (int)offsetof(mjsTexture, builtin), 2, 1, 0, 0, {0}},
{"rgb1", (int)offsetof(mjsTexture, rgb1), 0, 3, 3, 0, {0.8, 0.8, 0.8}},
{"rgb2", (int)offsetof(mjsTexture, rgb2), 0, 3, 3, 0, {0.5, 0.5, 0.5}},
{"mark", (int)offsetof(mjsTexture, mark), 2, 1, 0, 0, {0}},
{"markrgb", (int)offsetof(mjsTexture, markrgb), 0, 3, 0, 0, {0}},
{"random", (int)offsetof(mjsTexture, random), 0, 1, 1, 0, {0.01}},
{"width", (int)offsetof(mjsTexture, width), 2, 1, 0, 0, {0}},
{"height", (int)offsetof(mjsTexture, height), 2, 1, 0, 0, {0}},
{"hflip", (int)offsetof(mjsTexture, hflip), 3, 1, 0, 0, {0}},
{"vflip", (int)offsetof(mjsTexture, vflip), 3, 1, 0, 0, {0}},
{"nchannel", (int)offsetof(mjsTexture, nchannel), 2, 1, 1, 0, {3.0}},
};
static const mjXDefaultTable kDefaultTables[] = {
{"mjLROpt", kDefaults_mjLROpt, (int)(sizeof(kDefaults_mjLROpt) / sizeof(kDefaults_mjLROpt[0]))},
{"mjOption", kDefaults_mjOption, (int)(sizeof(kDefaults_mjOption) / sizeof(kDefaults_mjOption[0]))},
{"mjSpec", kDefaults_mjSpec, (int)(sizeof(kDefaults_mjSpec) / sizeof(kDefaults_mjSpec[0]))},
{"mjStatistic", kDefaults_mjStatistic, (int)(sizeof(kDefaults_mjStatistic) / sizeof(kDefaults_mjStatistic[0]))},
{"mjVisual", kDefaults_mjVisual_global, (int)(sizeof(kDefaults_mjVisual_global) / sizeof(kDefaults_mjVisual_global[0]))},
{"mjVisual", kDefaults_mjVisual_headlight, (int)(sizeof(kDefaults_mjVisual_headlight) / sizeof(kDefaults_mjVisual_headlight[0]))},
{"mjVisual", kDefaults_mjVisual_map, (int)(sizeof(kDefaults_mjVisual_map) / sizeof(kDefaults_mjVisual_map[0]))},
{"mjVisual", kDefaults_mjVisual_quality, (int)(sizeof(kDefaults_mjVisual_quality) / sizeof(kDefaults_mjVisual_quality[0]))},
{"mjVisual", kDefaults_mjVisual_rgba, (int)(sizeof(kDefaults_mjVisual_rgba) / sizeof(kDefaults_mjVisual_rgba[0]))},
{"mjVisual", kDefaults_mjVisual_scale, (int)(sizeof(kDefaults_mjVisual_scale) / sizeof(kDefaults_mjVisual_scale[0]))},
{"mjsActuator", kDefaults_mjsActuator, (int)(sizeof(kDefaults_mjsActuator) / sizeof(kDefaults_mjsActuator[0]))},
{"mjsBody", kDefaults_mjsBody, (int)(sizeof(kDefaults_mjsBody) / sizeof(kDefaults_mjsBody[0]))},
{"mjsCamera", kDefaults_mjsCamera, (int)(sizeof(kDefaults_mjsCamera) / sizeof(kDefaults_mjsCamera[0]))},
{"mjsCompiler", kDefaults_mjsCompiler, (int)(sizeof(kDefaults_mjsCompiler) / sizeof(kDefaults_mjsCompiler[0]))},
{"mjsEquality", kDefaults_mjsEquality, (int)(sizeof(kDefaults_mjsEquality) / sizeof(kDefaults_mjsEquality[0]))},
{"mjsFlex", kDefaults_mjsFlex, (int)(sizeof(kDefaults_mjsFlex) / sizeof(kDefaults_mjsFlex[0]))},
{"mjsFrame", kDefaults_mjsFrame, (int)(sizeof(kDefaults_mjsFrame) / sizeof(kDefaults_mjsFrame[0]))},
{"mjsGeom", kDefaults_mjsGeom, (int)(sizeof(kDefaults_mjsGeom) / sizeof(kDefaults_mjsGeom[0]))},
{"mjsHField", kDefaults_mjsHField, (int)(sizeof(kDefaults_mjsHField) / sizeof(kDefaults_mjsHField[0]))},
{"mjsJoint", kDefaults_mjsJoint, (int)(sizeof(kDefaults_mjsJoint) / sizeof(kDefaults_mjsJoint[0]))},
{"mjsKey", kDefaults_mjsKey, (int)(sizeof(kDefaults_mjsKey) / sizeof(kDefaults_mjsKey[0]))},
{"mjsLight", kDefaults_mjsLight, (int)(sizeof(kDefaults_mjsLight) / sizeof(kDefaults_mjsLight[0]))},
{"mjsMaterial", kDefaults_mjsMaterial, (int)(sizeof(kDefaults_mjsMaterial) / sizeof(kDefaults_mjsMaterial[0]))},
{"mjsMesh", kDefaults_mjsMesh, (int)(sizeof(kDefaults_mjsMesh) / sizeof(kDefaults_mjsMesh[0]))},
{"mjsNumeric", kDefaults_mjsNumeric, (int)(sizeof(kDefaults_mjsNumeric) / sizeof(kDefaults_mjsNumeric[0]))},
{"mjsPair", kDefaults_mjsPair, (int)(sizeof(kDefaults_mjsPair) / sizeof(kDefaults_mjsPair[0]))},
{"mjsSensor", kDefaults_mjsSensor, (int)(sizeof(kDefaults_mjsSensor) / sizeof(kDefaults_mjsSensor[0]))},
{"mjsSite", kDefaults_mjsSite, (int)(sizeof(kDefaults_mjsSite) / sizeof(kDefaults_mjsSite[0]))},
{"mjsSkin", kDefaults_mjsSkin, (int)(sizeof(kDefaults_mjsSkin) / sizeof(kDefaults_mjsSkin[0]))},
{"mjsTendon", kDefaults_mjsTendon, (int)(sizeof(kDefaults_mjsTendon) / sizeof(kDefaults_mjsTendon[0]))},
{"mjsTexture", kDefaults_mjsTexture, (int)(sizeof(kDefaults_mjsTexture) / sizeof(kDefaults_mjsTexture[0]))},
};
static const int kDefaultTablesN = (int)(sizeof(kDefaultTables) / sizeof(kDefaultTables[0]));
// clang-format on