@absolutejs/rapier3d 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # AbsoluteJS Rapier 3D
2
2
 
3
3
  A focused distribution of Rapier 0.21.0 / engine 0.36.0 with solver-contact
4
- diagnostics, current-body geometry queries, and accurate prescribed kinematics. The engine's original geometric manifolds and its
4
+ diagnostics, current-body geometry queries, accurate prescribed kinematics, and
5
+ corrected contact-witness and force-free rotation calculations. The engine's original geometric manifolds and its
5
6
  clustered solver manifolds are distinct. The upstream JavaScript contact query
6
7
  only exposes the former, which can have no solver-contact entries even when the
7
8
  solver is resolving contact. This package exposes the latter separately.
@@ -29,10 +30,11 @@ Nested read-only solver queries are supported; callback exceptions release query
29
30
  wrappers before propagating. Solver distances are the engine's cached contact
30
31
  update distances, not a continuous or post-step exact penetration guarantee.
31
32
 
32
- `contactPair` retains its existing geometric behavior. Version 0.6 improves
33
- velocity-driven kinematic integration as described below. Contact and CCD policy
34
- defaults are unchanged; this is not a general fix for physical overlap. Runtime
35
- motion still needs independent geometric and energy checks.
33
+ `contactPair` exposes geometric manifolds; `solverContactPair` exposes solver
34
+ manifolds. Version 0.6 improves velocity-driven kinematics. Version 0.8
35
+ corrects previous-simplex witness preservation and reduces force-free rotation
36
+ roundoff, as described below. Contact and CCD policy defaults remain unchanged.
37
+ Runtime motion still needs independent geometric and energy checks.
36
38
 
37
39
  The ESM package includes WASM initialization and requires no separate asset URL.
38
40
  Concurrent `init()` calls share initialization. The package targets 3D f32
@@ -44,8 +46,9 @@ Source base: dimforge/rapier commit
44
46
  `b716d375efc0201003f0cd9ef7168eee0b62c177`. Upstream Apache-2.0 licensing is retained.
45
47
  The distribution adds binding queries, package build/test tooling, and CCD profiler
46
48
  timer wiring. Version 0.6 also evaluates velocity-driven kinematic poses directly
47
- from each solver-pass origin; contact equations and dynamic-body integration retain
48
- the pinned source implementation.
49
+ from each solver-pass origin. Version 0.8 additionally pins the corrected
50
+ Parry collision source and applies the gyroscopic momentum increment without
51
+ reconstructing the entire angular velocity through the inertia frame.
49
52
 
50
53
  Use Bun 1.4.4+absolute.1, Rust 1.94.0 with `wasm32-unknown-unknown`, and Python 3.12.
51
54
  Run `bun install --frozen-lockfile`, then `bash absolutejs/scripts/build-native.sh`.
@@ -65,9 +68,11 @@ See `absolutejs/research/native-build-guard/` for positive and negative controls
65
68
  The build copies this canonical documentation to the root README used by npm,
66
69
  so published package documentation stays synchronized.
67
70
 
68
- Run `bun test absolutejs/tests` after building. Tests compare the official pinned
69
- release's motion against this build, exercise actual clustered contacts, nested
70
- queries and exception cleanup. Browser-worker validation is separate from native
71
+ Run `bun test absolutejs/tests` after building. Tests compare queried and unqueried
72
+ worlds under the same kernel, exercise actual clustered contacts, nested queries,
73
+ exception cleanup, captured contact regressions and analytic rotation controls.
74
+ The independent upstream-motion probe records intentional trajectory differences;
75
+ exact old floating-point rounding is not a physical acceptance criterion. Browser-worker validation is separate from native
71
76
  GPU performance testing; no GPU is required by the engine.
72
77
 
73
78
  This is a maintained AbsoluteJS distribution, not an official Dimforge release.
@@ -199,3 +204,52 @@ paths to stable virtual prefixes before checking the qualified WASM checksum.
199
204
  Custom compiler flags are preserved, but their output must still match the
200
205
  qualified kernel. A checksum mismatch stops API packaging; it does not silently
201
206
  adopt a different native solver.
207
+
208
+ ## Lightweight build identity (0.7)
209
+
210
+ Version 0.7 adds package metadata without changing the qualified 0.6 native kernel. Package version and kernel release are deliberately separate fields. This release does not include the experimental gyroscopic increment correction; game contact regressions keep that native change under investigation.
211
+
212
+ ```ts
213
+ import {buildInfo} from '@absolutejs/rapier3d/build-info';
214
+ report.physicsBuild = buildInfo;
215
+ ```
216
+
217
+ The frozen metadata includes package version, qualified kernel release, native
218
+ WASM SHA-256/byte count, upstream/binding versions and whether the kernel changes the pinned upstream solver. The
219
+ same values are available as `RAPIER.buildInfo` and the root named `buildInfo`
220
+ export. Package and kernel releases can differ when an API-only upgrade reuses
221
+ a qualified kernel. The lightweight subpath contains metadata only and works
222
+ before `init()`. It reports the packaged kernel; supplying custom bytes to
223
+ `init(input)` does not change that identity and must be recorded separately.
224
+
225
+
226
+ ## Contact witnesses and force-free rotation (0.8)
227
+
228
+ The collision dependency is pinned to `absolutejs/parry` revision
229
+ `dbd99a8dfce020da3698056471262435d56d3f69`, based on upstream 0.31.1.
230
+ Tetrahedron-to-face reduction now preserves support points needed by GJK's
231
+ previous-simplex calculation. Previously, an overwritten point could be combined
232
+ with its old barycentric weight, inventing a deep contact. A captured floor/hull
233
+ case reported -14.719921 cm despite separation; the corrected native replay
234
+ reports a small positive separation. Snapshot decoding and query read-only
235
+ behavior remain byte-exact. No contact tolerance, CCD default or game rejection
236
+ threshold is changed by this correction.
237
+
238
+ The rotation correction applies only the computed gyroscopic momentum increment.
239
+ Principal-axis and isotropic force-free bodies therefore avoid artificial spin-up
240
+ from repeatedly reconstructing the entire velocity through inertia and its inverse.
241
+ Genuine asymmetric precession remains active and is checked against a converged
242
+ double-precision Euler/RK4 reference.
243
+
244
+ In the recorded 336-case, 0.1-second free-spin matrix, worst relative energy error
245
+ falls from about 0.004033 to 0.000562. One tilted long-box control has about
246
+ 1.305 ppm more energy error. These measurements cover specific shapes, rates and
247
+ iteration budgets; they are not a universal energy-error bound, a performance
248
+ claim, or a substitute for coupled-contact acceptance. f32 conditioning and time
249
+ integration errors remain.
250
+
251
+ `buildInfo.collisionLibraryVersion` and `buildInfo.collisionSource` identify the
252
+ exact locked collision library alongside the native WASM hash. They are lightweight
253
+ serialized strings and require no WASM initialization. Packaging rejects ambiguous
254
+ multiple Parry source entries. Release qualification evidence and retained experiment
255
+ results are recorded in `absolutejs/research/simplex-gyro/`.
@@ -1,7 +1,8 @@
1
1
  # AbsoluteJS Rapier 3D
2
2
 
3
3
  A focused distribution of Rapier 0.21.0 / engine 0.36.0 with solver-contact
4
- diagnostics, current-body geometry queries, and accurate prescribed kinematics. The engine's original geometric manifolds and its
4
+ diagnostics, current-body geometry queries, accurate prescribed kinematics, and
5
+ corrected contact-witness and force-free rotation calculations. The engine's original geometric manifolds and its
5
6
  clustered solver manifolds are distinct. The upstream JavaScript contact query
6
7
  only exposes the former, which can have no solver-contact entries even when the
7
8
  solver is resolving contact. This package exposes the latter separately.
@@ -29,10 +30,11 @@ Nested read-only solver queries are supported; callback exceptions release query
29
30
  wrappers before propagating. Solver distances are the engine's cached contact
30
31
  update distances, not a continuous or post-step exact penetration guarantee.
31
32
 
32
- `contactPair` retains its existing geometric behavior. Version 0.6 improves
33
- velocity-driven kinematic integration as described below. Contact and CCD policy
34
- defaults are unchanged; this is not a general fix for physical overlap. Runtime
35
- motion still needs independent geometric and energy checks.
33
+ `contactPair` exposes geometric manifolds; `solverContactPair` exposes solver
34
+ manifolds. Version 0.6 improves velocity-driven kinematics. Version 0.8
35
+ corrects previous-simplex witness preservation and reduces force-free rotation
36
+ roundoff, as described below. Contact and CCD policy defaults remain unchanged.
37
+ Runtime motion still needs independent geometric and energy checks.
36
38
 
37
39
  The ESM package includes WASM initialization and requires no separate asset URL.
38
40
  Concurrent `init()` calls share initialization. The package targets 3D f32
@@ -44,8 +46,9 @@ Source base: dimforge/rapier commit
44
46
  `b716d375efc0201003f0cd9ef7168eee0b62c177`. Upstream Apache-2.0 licensing is retained.
45
47
  The distribution adds binding queries, package build/test tooling, and CCD profiler
46
48
  timer wiring. Version 0.6 also evaluates velocity-driven kinematic poses directly
47
- from each solver-pass origin; contact equations and dynamic-body integration retain
48
- the pinned source implementation.
49
+ from each solver-pass origin. Version 0.8 additionally pins the corrected
50
+ Parry collision source and applies the gyroscopic momentum increment without
51
+ reconstructing the entire angular velocity through the inertia frame.
49
52
 
50
53
  Use Bun 1.4.4+absolute.1, Rust 1.94.0 with `wasm32-unknown-unknown`, and Python 3.12.
51
54
  Run `bun install --frozen-lockfile`, then `bash absolutejs/scripts/build-native.sh`.
@@ -65,9 +68,11 @@ See `absolutejs/research/native-build-guard/` for positive and negative controls
65
68
  The build copies this canonical documentation to the root README used by npm,
66
69
  so published package documentation stays synchronized.
67
70
 
68
- Run `bun test absolutejs/tests` after building. Tests compare the official pinned
69
- release's motion against this build, exercise actual clustered contacts, nested
70
- queries and exception cleanup. Browser-worker validation is separate from native
71
+ Run `bun test absolutejs/tests` after building. Tests compare queried and unqueried
72
+ worlds under the same kernel, exercise actual clustered contacts, nested queries,
73
+ exception cleanup, captured contact regressions and analytic rotation controls.
74
+ The independent upstream-motion probe records intentional trajectory differences;
75
+ exact old floating-point rounding is not a physical acceptance criterion. Browser-worker validation is separate from native
71
76
  GPU performance testing; no GPU is required by the engine.
72
77
 
73
78
  This is a maintained AbsoluteJS distribution, not an official Dimforge release.
@@ -199,3 +204,52 @@ paths to stable virtual prefixes before checking the qualified WASM checksum.
199
204
  Custom compiler flags are preserved, but their output must still match the
200
205
  qualified kernel. A checksum mismatch stops API packaging; it does not silently
201
206
  adopt a different native solver.
207
+
208
+ ## Lightweight build identity (0.7)
209
+
210
+ Version 0.7 adds package metadata without changing the qualified 0.6 native kernel. Package version and kernel release are deliberately separate fields. This release does not include the experimental gyroscopic increment correction; game contact regressions keep that native change under investigation.
211
+
212
+ ```ts
213
+ import {buildInfo} from '@absolutejs/rapier3d/build-info';
214
+ report.physicsBuild = buildInfo;
215
+ ```
216
+
217
+ The frozen metadata includes package version, qualified kernel release, native
218
+ WASM SHA-256/byte count, upstream/binding versions and whether the kernel changes the pinned upstream solver. The
219
+ same values are available as `RAPIER.buildInfo` and the root named `buildInfo`
220
+ export. Package and kernel releases can differ when an API-only upgrade reuses
221
+ a qualified kernel. The lightweight subpath contains metadata only and works
222
+ before `init()`. It reports the packaged kernel; supplying custom bytes to
223
+ `init(input)` does not change that identity and must be recorded separately.
224
+
225
+
226
+ ## Contact witnesses and force-free rotation (0.8)
227
+
228
+ The collision dependency is pinned to `absolutejs/parry` revision
229
+ `dbd99a8dfce020da3698056471262435d56d3f69`, based on upstream 0.31.1.
230
+ Tetrahedron-to-face reduction now preserves support points needed by GJK's
231
+ previous-simplex calculation. Previously, an overwritten point could be combined
232
+ with its old barycentric weight, inventing a deep contact. A captured floor/hull
233
+ case reported -14.719921 cm despite separation; the corrected native replay
234
+ reports a small positive separation. Snapshot decoding and query read-only
235
+ behavior remain byte-exact. No contact tolerance, CCD default or game rejection
236
+ threshold is changed by this correction.
237
+
238
+ The rotation correction applies only the computed gyroscopic momentum increment.
239
+ Principal-axis and isotropic force-free bodies therefore avoid artificial spin-up
240
+ from repeatedly reconstructing the entire velocity through inertia and its inverse.
241
+ Genuine asymmetric precession remains active and is checked against a converged
242
+ double-precision Euler/RK4 reference.
243
+
244
+ In the recorded 336-case, 0.1-second free-spin matrix, worst relative energy error
245
+ falls from about 0.004033 to 0.000562. One tilted long-box control has about
246
+ 1.305 ppm more energy error. These measurements cover specific shapes, rates and
247
+ iteration budgets; they are not a universal energy-error bound, a performance
248
+ claim, or a substitute for coupled-contact acceptance. f32 conditioning and time
249
+ integration errors remain.
250
+
251
+ `buildInfo.collisionLibraryVersion` and `buildInfo.collisionSource` identify the
252
+ exact locked collision library alongside the native WASM hash. They are lightweight
253
+ serialized strings and require no WASM initialization. Packaging rejects ambiguous
254
+ multiple Parry source entries. Release qualification evidence and retained experiment
255
+ results are recorded in `absolutejs/research/simplex-gyro/`.
@@ -0,0 +1 @@
1
+ var e=Object.freeze({schemaVersion:1,scope:"package",packageName:"@absolutejs/rapier3d",packageVersion:"0.8.0",qualifiedKernelRelease:"0.8.0",upstream:"b716d375efc0201003f0cd9ef7168eee0b62c177",engine:"0.36.0",collisionLibraryVersion:"0.31.1",collisionSource:"git+https://github.com/absolutejs/parry?rev=dbd99a8dfce020da3698056471262435d56d3f69#dbd99a8dfce020da3698056471262435d56d3f69",bindings:"0.21.0",bindgen:"0.2.129",wasmSha256:"2ce107fb8534f00010b0238448eff1a4512e19b6312ef8b9359ac455c85511ab",wasmBytes:3292641,solverChanges:!0});export{e as buildInfo};
@@ -1,10 +1,16 @@
1
1
  {
2
+ "schemaVersion": 1,
3
+ "scope": "package",
4
+ "packageName": "@absolutejs/rapier3d",
5
+ "packageVersion": "0.8.0",
6
+ "qualifiedKernelRelease": "0.8.0",
2
7
  "upstream": "b716d375efc0201003f0cd9ef7168eee0b62c177",
3
8
  "engine": "0.36.0",
9
+ "collisionLibraryVersion": "0.31.1",
10
+ "collisionSource": "git+https://github.com/absolutejs/parry?rev=dbd99a8dfce020da3698056471262435d56d3f69#dbd99a8dfce020da3698056471262435d56d3f69",
4
11
  "bindings": "0.21.0",
5
12
  "bindgen": "0.2.129",
6
- "wasmSha256": "17f66b696ecebb8180f8ab01fe1a4773c3565e4e56b3e7db74e51183590b06f4",
7
- "wasmBytes": 3291678,
8
- "solverChanges": true,
9
- "addition": "Direct velocity-driven kinematic pose evaluation; current-body shape and solver-contact diagnostics"
13
+ "wasmSha256": "2ce107fb8534f00010b0238448eff1a4512e19b6312ef8b9359ac455c85511ab",
14
+ "wasmBytes": 3292641,
15
+ "solverChanges": true
10
16
  }