The name of a bone-default or generic-constraint-default is optional. If it isn't set, "" is the name. As the xml is interpreted line by line, you can redefine the default so that it impacts the following bones or generic-constraints. Optional. If undefined, it's set to (0.0, 0.0, 0.0). Sets the bounce on the rotational limit motor on a generic 6 degrees of freedom constraint (Generic6DofSpring2Constraint). Is used to calculate the bounce error, which is used to limit the constraint error. It's the only use I saw in the code. Optional. Between 0 and 1, will be clamped. If undefined, it's set to 0. Sets the angularDamping on the btRigidBody of a bone. Each physics step, the damping is applied on the btRigidBody angular velocity with this formula: angularVelocity *= pow(1 - angularDamping, timeStep) Timestep is in seconds. Optional. If undefined, it's set to (0.0, 0.0, 0.0). FSMP 1.x: sets the orientation of the equilibrium point of a generic 6 degrees of freedom constraint (Generic6DofSpring2Constraint). The code existing in Bullet to calculate it automatically isn't used. FSMP 2.x: maximum force to be applied to enabled angular motors. Optional. If undefined, it's set to (1,1,1) (sic!). Each axis is in radians, and will be translated towards [-Pi, Pi]. The Generic 6 Degrees of Freedom Spring 2 constraint contains a 3D vector of angular limits (Rotational Limit Motor 2), and this sets the minimum radian value of the angular constraint. Beware: lower limit being greater than upper limit is interpreted as no constraint. FSMP 2.x: Optional. Vector3. Maximum force to be applied to enabled angular motors. FSMP 2.x: Optional. Enables motors for all three angular axes. Motors add force at a constant rate (can stabilise springs). FSMP 2.x: Optional. Default: 0. Applies a reduction or increase in spring damping, starting at 0 at equilibrium, and ending at factor * damping when at the limit. At equilibrium, damping is unchanged. A value of 0.5 means that by the time a spring is halfway from its resting point to the LowerLimit, it will have lost 0.25 * damping. Positive values reduce damping, negative values increase it. The useful range of this is typically -0.75 to 0.9, however values outside this are fine. Pairs extremely well with angularNonHookeanStiffness. damping * (1 - distanceFactor * angularNonHookeanDamping) FSMP 2.x: Optional. Default: 0. Applies a reduction or increase in spring stiffness, starting at 0 at equilibrium, and ending at factor * stiffness when at the limit. At equilibrium, stiffness is unchanged. A value of 0.5 means that by the time a spring is halfway from its resting point to the LowerLimit, it will have lost 0.25 * stiffness. Positive values reduce stiffness, negative values increase it. The useful range of this is typically -0.75 to 0.9, however values outside this are fine. Pairs extremely well with angularNonHookeanDamping. stiffness * (1 - distanceFactor * angularNonHookeanStiffness) FSMP 2.x: Optional. If undefined, it's set to false. FSMP 2.x: Optional. Boolean. Default: false. If true, any enabled angular motors will function as servo motors, allowing a specific target coordinate to be set per axis. Current impl. simply changes this to the equilibrium point. Motors must be enabled (angularMotors). FSMP 2.x: Optional. Float (0.0 - 1.0). Default 0.25. This is a flood control for angular calculation. Lower values place a cap on the stiffness of springs, but may increase FPS. Use angularStiffnessLimited to remove the cap (do not set this to 1.0). Optional. If undefined, it's set to (0,0,0). The Generic 6 Degrees of Freedom Spring 2 constraint contains a 3D vector of angular limits (Rotational Limit Motor 2), and this sets the spring stiffness of the angular constraint. This stiffness will be dynamically limited: "the spring should not be sampled faster that the quarter of its angular frequency" max stiffness = mass / (16 * dt * dt) (dt being the timestep) What sets the direction of the new velocity is the sign of: stiffness * distance from the equilibrium point - damping * velocity. NB: damping is dynamically limited too: max damping = m / dt Quick way to define it: mass * 40 * (turns per second) * (turns per second) Here is the explanation: angular stiffness = mass * (angular frequency)^2 = mass * 4 * Pi^2 * (turns per second)^2 For example, if you have a mass of 1 kg, and you want it to oscillate around the x axis 2 times per second, you'll have:: (1 * 4 * Pi^2 * 2^2, , ) = (157.91, , ) FSMP 2.x: Optional. If undefined, it's set to true. Limits the spring frequency to max 0.25 turns per timestep. Honestly, you should set it to false and set your stiffness at the right level, because this limit is way too high: when you attain it, the spring will oscillate around once every 4 frames, you will perceive incredible jittering! FSMP 2.x: Optional. If undefined, it's set to true. Limits the spring damping to mass x fps. This doesn't work for elements which could be scaled (like a body) because changing the scale changes the mass. You should set it to false. FSMP 2.x: Optional. Vector3. Target velocity of angular motors. Optional. If undefined, it's set to (-1,-1,-1) (sic!). Each axis is in radians, and will be translated towards [-Pi, Pi]. The Generic 6 Degrees of Freedom Spring 2 constraint contains a 3D vector of angular limits (Rotational Limit Motor 2), and this sets the maximum radian value of the angular constraint. Beware: lower limit being greater than upper limit is interpreted as no constraint. Optional. Between 0 and 1. If undefined, it's set to 0.3. Bullet recommendation: between 0 and 0.6. This is the strength with which a constraint resists zeroth order (angular, not angular velocity) limit violation. Optional. Bone name. IMPORTANT: the setting can-collide-with-bone will override any configuration of can/no-collide-with-tag. When you set this value, you are saying "collide with the bones I list, and literally nothing else". It is useless to use no-collide-with-bone and can-collide-with-bone in the same shape. If both are used, only can-collide-with-bone will be used. If none are used, collisions work. Mnemotechnic tip: can > no. It is useless to use no-collide-with-tag and can-collide-with-tag in the same shape. If both are used, only can-collide-with-tag will be used. If none are used, collisions work. Mnemotechnic tip: can > no. Optional. Default: Basis: 0,0,0,1, Origin: 0,0,0. This will offset the rotation (basis, angular) or translation (origin, linear) centre of mass for this bone. The impact of this is most evident on inertia (so, you definitely should go run around in circles and test your changes look okay. Seriously.). Optional. Default 0. Currently unused in FSMP and Bullet. Optional. Positive. If undefined, it's set to 0. Strictly equivalent to the limitZ and swingSpan1 parameters. Optional. Positive. If undefined, it's set to 0. Used to calculate damping in springstiff scale constraints, spring force in springstiff constraints, and the velocity error in constraints groups. FSMP 2.x: Optional. Boolean. Default: true. Set to false to disable the spring entirely (also improves performance). FSMP 2.x: Optional. Boolean. Default: true. Set to false to disable the spring entirely (also improves performance). Optional. Between 0 and 1. If undefined, it's set to 0.5. Allows to calculate, linearly between the minDistance and the maxDistance, the equilibrium point between 2 bodies in a StiffSpring constraint. Optional. If undefined, it's set to Identity (no rotation, no translation): basis x="0" y="0" z="0" w="1" origin x="0" y="0" z="0" Optional. If undefined, it's set to 0.5. Allows to calculate rolling friction, spinning friction and combined friction between 2 bodies. Recommended: best simulation results happen when friction is non-zero (from the authors of the physics library). Optional. Between 0 and 1. If undefined, it's set to 1. Will be applied to the gravity of the bone. Has no effect on a static or kinematic object (so no effect if the bone mass is zero). Recommended: 1 Generally, doubling the gravity or doubling the mass gives exactly the same result, so you should configure mass rather than on gravity. However, some functions (for example limitation of stiffness) use the mass without taking into account the gravity. Optional. Positive. If undefined, it's set to 1. Will be applied to the wind effect on the bone. Has no effect on a static or kinematic object (so no effect if the bone mass is zero). Recommended: 1 Optional. Inverse factor. If undefined it's set to 0 (and no inertia is calculated). Local inertia is divided by this number, resulting in rather peculiar, extremely unphysicsy behaviour. Below one to increase, above one to decrease. When set to zero, the local insertia isn't considered infinite, but zero. Recommended (strongly!): 1 Optional. Between 0 and 1. If undefined, it's set to 1. Bullet recommendations: between 0.8 and 1. This describes the % of limits where the movement is free. Beyond this softness %, the limit is gradually enforced until the "hard" (1.0) limit is reached. Optional. Positive. If undefined, it's set to 0. Strictly equivalent to the twistLimit and twistSpan parameters. Optional. Positive. If undefined, it's set to 0. Strictly equivalent to the planeLimit and swingSpan2 parameters. Optional. Positive. If undefined, it's set to 0. Strictly equivalent to the coneLimit and swingSpan1 parameters. Nope. Just don't. Optional. If undefined, it's set to (0.0, 0.0, 0.0). Optional. Between 0 and 1. If undefined, it's set to 0. On generic and stiffspring constraints, this is Hookean spring damping (good). On bones, this is a correction/adjustment (bad). Recommended (bones): 0 Recommended (constraints): whatever damps your springs at the right rate. On bones: bone_linearVelocity *= (1 - bone_linearDamping)^timeStep Optional. If undefined, it's set to (1, 1, 1). Isn't applied if linearLowerLimit > linearUpperLimit. The displacement is limited to this value. FSMP 2.x: Optional. Default: 0. Applies a reduction or increase in spring damping, starting at 0 at equilibrium, and ending at factor * damping when at the limit. At equilibrium, damping is unchanged. A value of 0.5 means that by the time a spring is halfway from its resting point to the LowerLimit, it will have lost 0.25 * damping. Positive values reduce damping, negative values increase it. The useful range of this is typically -0.75 to 0.9, however values outside this are fine. Pairs extremely well with linearNonHookeanStiffness. damping * (1 - distanceFactor * linearNonHookeanDamping) FSMP 2.x: Optional. Default: 0. Applies a reduction or increase in spring stiffness, starting at 0 at equilibrium, and ending at factor * stiffness when at the limit. At equilibrium, stiffness is unchanged. A value of 0.5 means that by the time a spring is halfway from its resting point to the LowerLimit, it will have lost 0.25 * stiffness. Positive values reduce stiffness, negative values increase it. The useful range of this is typically -0.75 to 0.9, however values outside this are fine. Pairs extremely well with angularNonHookeanDamping. stiffness * (1 - distanceFactor * angularNonHookeanStiffness) FSMP 2.x: Optional. Vector3. Maximum force to be applied to enabled linear motors. FSMP 2.x: Optional. Enables motors for all three linear axes. Motors add force at a constant rate (can stabilise springs). FSMP 2.x: Optional. Boolean. Default: false. If true, any enabled linear motors will function as servo motors, allowing a specific target coordinate to be set per axis. The current implementation simply changes this to the equilibrium point. Motors must be enabled (linearMotors). FSMP 2.x: Optional. Float (0.0 - 1.0). Default 0.25. This is a flood control for angular calculation. Lower values place a cap on the stiffness of springs, but may increase FPS. Use linearStiffnessLimited to remove the cap (do not set this to 1.0). Optional. Default (0, 0, 0). Here is a simple way to define it: linear stiffness = mass * (angular frequency)^2 = mass * 4 * Pi^2 * (turns per second)^2 For example, if you have a mass of 1 kg, and you want it to oscillate along the x axis 2 times per second, you'll have: (1 * 4 * Pi^2 * 2^2, , ) = (157.91, , ) FSMP 2.x: Optional. If undefined, it's set to true. Limits the spring frequency to max 0.25 turns per timestep. Honestly, you should set it to false and set your stiffness at the right level, because this limit is way too high: when you attain it, the spring will oscillate around once every 4 frames, you will perceive incredible jittering! FSMP 2.x: Optional. Vector3. Target velocity of linear motors. Optional. If undefined, it's set to (-1, -1, -1). Isn't applied if linearLowerLimit > linearUpperLimit. The displacement is limited to this value. Optional. Positive. If undefined, it's set to 1. Optional. Positive. If undefined, it's set to 1. Optional. Positive. Setting mass to zero or unset creates a fixed (non-dynamic) rigid body. Optional. Positive. If undefined, it's set to 1. Optional. Positive. If undefined, it's set to 1. FSMP 2.x: Optional. Default 0. Soft constraints are made with this. See ODE documentation for ERP/CFM. FSMP 2.x: Optional. Default 0.9. See ODE documentation for ERP/CFM. It is useless to use no-collide-with-bone and can-collide-with-bone in the same shape. If both are used, only can-collide-with-bone will be used. If none are used, collisions work. Mnemotechnic tip: can > no. It is useless to use no-collide-with-tag and can-collide-with-tag in the same shape. If both are used, only can-collide-with-tag will be used. If none are used, collisions work. Mnemotechnic tip: can > no. Optional. If undefined, it's set to 1. Can be positive or negative. Day's comment: I'm not sure a negative penetration works exactly as the inverse of a positive in the CUDA code... Optional. Positive. If undefined, it's set to 0. Strictly equivalent to the limitY and swingSpan2 parameters. Strictly equivalent to penetration. Use penetration. Optional. Between 0 and 1. If undefined, it's set to 1. Optional. If undefined, it's set to 0. Optional. If undefined, it's set to 0. Optional. Case-sensitive. If undefined or mistyped, it's set to "public". Valid options: "public": the shape can collide with a body B if the shape's body can collide with that body B. Webspam phrasing: "Shape can match collisions anywhere, including other XML files on other skeletons." "internal": the shape can't collide with a shape from another skeleton; if it's the same skeleton, then see "public". Webspam phrasing: "Shape can be referenced by any XML file, but only on this skeleton." "external": the shape can't collide with a shape from the same skeleton; if it's another skeleton, then see "public". Webspam phrasing: "Shape can be referenced by any XML file, but only on other skeletons." "private": the shape can't collide with another mesh; if it's the same mesh, then see "public". Webspam phrasing: "Shape can only be referenced within this file." Optional. Positive. If undefined, it's set to 0. FSMP 2.x: Optional. Default 0. Soft constraints are made with this. See ODE documentation for ERP/CFM. FSMP 2.x: Optional. Default 0.2. See ODE documentation for ERP/CFM. http://ode.org/wiki/index.php/Manual#Joint_error_and_the_Error_Reduction_Parameter_.28ERP.29 Optional. Positive. If undefined, it's set to 0. Strictly equivalent to the coneLimit and limitZ parameters. Optional. Positive. If undefined, it's set to 0. Strictly equivalent to the limitY and planeLimit parameters. Optional. String. Once configured, a tag string can be used by other shapes to reference the shape, e.g. inside `can-collide-with-tag`, or `no-collide-with-tag` references. Optional. Positive. If undefined, it's set to 0. Strictly equivalent to the limitX and twistSpan parameters. Optional. Positive. If undefined, it's set to 0. Strictly equivalent to the twistLimit and limitX parameters. Optional. If undefined, it's set to false. If false, the constraint will be set between BodyA, BodyB, FrameA, FrameB. If true, the constraint will be set between BodyB, BodyA, FrameB, FrameA. A "weight-threshold" in a "per-vertex-shape" or "per-triangle-shape" contains a float value and a "bone" attribute. Each skinned bone with that name in the "per-XXX-shape" has its weight-threshold set to the float value. This weight-threshold is used 3 ways: - When preparing collisions, no collision effect (displacement) is considered if the weight of the bone is zero or lower than the weight-threshold. - When processing collisions, when a collision happen between 2 shapes, if the weight of the shape at the vertex or triangle collision point is lower than the weight-threshold defined for the vertex or triangle collision point bone, then the collision effects aren't applied. - In the CUDA version, the bone weight provided to the CUDA processor is the bone weight-threshold. When mass is set to 0, inertia, linearDamping and angularDamping are forbidden: they have no effect on a static (non-dynamic) rigid body. Bones can be used in constraints tags, can-collide-with-bone tags and no-collide-with-bone tags without being declared in a bone tag. If a node with that name exists, a bone will be created on the fly with the current bone-default values. Beware: bones can be created only once; the second declaration won't be taken into account, and will issue a warning in hdtSMP64.log saying that the bone is skipped. Don't use conetwist constraints. Anything you can do with a conetwist, you can do better with a GenericConstraint. swingSpan1, coneLimit, limitX are strictly equivalent. You should declare only one of them. swingSpan2, planeLimit, limitY are strictly equivalent. You should declare only one of them. twistSpan, twistLimit, limitZ are strictly equivalent. You should declare only one of them. bodyA is required and must contain a bone name. Bone declaration is optional, see the bone documentation. bodyB is required and must contain a bone name. Bone declaration is optional, see the bone documentation. Don't use conetwist constraints. Anything you can do with a conetwist, you can do better with a GenericConstraint. The name of a conetwist-constraint-default is optional. If it isn't set, "" is the name. As the xml is interpreted line by line, you can redefine the default so that it impacts the following conetwist-constraints. bodyA is required and must contain a bone name. Bone declaration is optional, see the bone documentation. bodyB is required and must contain a bone name. Bone declaration is optional, see the bone documentation. per-vertex-shape: there is no penetration tag inside per-vertex-shape. For type box For types box, hull and cylinder. Optional. Positive. If undefined, it's set to 0. For types sphere, capsule and cylinder Optional. Positive. If undefined, it's set to 0. For types capsule and cylinder Optional. Positive. If undefined, it's set to 0. For type hull For type compound If type = "ref", then name is required and must be the name of a shape of another type. In other cases, name is not required, except if you want to be able to reference it from a shape of type "ref". bodyA is required and must contain a bone name. Bone declaration is optional, see the bone documentation. bodyB is required and must contain a bone name. Bone declaration is optional, see the bone documentation. The name of a stiffspring-constraint-default is optional. If it isn't set, "" is the name. As the xml is interpreted line by line, you can redefine the default so that it impacts the following stiffspring-constraints. This is a quaternion. If it's set with a length of zero, it will be set as Identity (0, 0, 0, 1). Rotational COM. This is a transformation rotation with an angle around an axis defined by a vector. If the vector (x, y, z) is (0, 0, 0), it will be set as (1,0,0), and the angle will be set at 0 whatever its value. The length of the vector isn't important as it will be normalized. The angle is in radians.