Repository navigation
Ankles, test_restitution.c whole, the world state hash, Aether 0.795.0 - #155
Merged
Merged
Conversation
Human.ankles gives each foot a body on a spherical joint below its calf: toes down 50 degrees and up 35 on an elliptical cone, 15 aside, 15 of roll. Without it the figure is the reference's twelve bones (#152). tests/test_restitution.ae ports Box3D's test_restitution.c whole, 162 checks with its gates; its numbers match Box3D's own run (#144). dynamics.hash_world_state is the reference's b3HashWorldState, FNV-1a over each body's pose and velocity bits; worker parity uses it. AE_PIN 0.794.0 -> 0.795.0.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Ankles for the ragdoll (#152), Box3D
e77352c's test_restitution.c ported whole (#144), its world state hash, and Aether 0.795.0.Ankles (#152):
Human.anklesset before the figure is made, each foot becomes a bone of its own (BONE_FOOT_L,BONE_FOOT_R, 14 bones). Each foot is a body carrying the foot's capsule and hangs from its calf on a spherical joint at the far end of the calf's capsule. The calf keeps only its shin.anklesthe figure is the reference's twelve bones, unchanged. Every per-bone loop now runs overHuman.bone_count. A shape whose calf has no foot is refused when ankles are asked for.test_human.ae(115 checks) measures the four ranges through the joint, with the calf held and a steady torque on the foot: toes down 50.02, up 35.02, aside 14.62, roll 15.05. The figure falls and rests whole, with its joints closed. Crouch check, the issue's own measure: the figure is held still and each shin is tipped forward over its free foot. At 25 degrees the soles stay within 2.5 degrees of standing; the reference's foot, fixed to the calf, tilts the whole 25. At 45 degrees the soles lift by about the 10 degrees the 35 degree range cannot take (8.5 measured).test_restitution.c (#144):
tests/test_restitution.ae, 162 checks, all 14 subtests with the reference's own gates:I built Box3D's own test binary (single and double precision, Release) and ran its RestitutionTest beside ours. Every line agrees to the digits the reference prints, except where its own two builds disagree with each other:
Ours matches the double build on the drop's second apex and the single build on the rest. Our worst impulse step error is at or below the reference's in every case.
The world state hash:
dynamics.hash_world_state, the reference'sb3HashWorldState. It folds every live body's pose and, for awake bodies, their velocities, as raw bits, with 64-bit FNV-1a in body order. The pose is in double here, so its bits are the double's, as in the reference's large world build. Aether defines signed overflow as wrapping (-fwrapvon every compile), so the multiply is FNV's own.native.f32_bitsandnative.f64_bitsread the bits through memcpy. The worker parity check uses this hash, as the reference's does; the recording work in #149 will use it too.Aether 0.795.0: AE_PIN bumped from 0.794.0 in CI and in the README's install line. Nothing in it changes this engine's results; the golden trace is unchanged.
Local gate on Aether 0.795.0: all 34 suites pass with no warnings, and the golden trace matches bit for bit (1,256 steps). Pins: Aether 0.795.0 and aeb v0.325, the latest releases.
Closes #152. Closes #144. Refs #149.