@absolutejs/rapier3d 0.18.0 → 0.21.1
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 +116 -0
- package/absolutejs/README.md +116 -0
- package/dist/build-info.mjs +1 -1
- package/dist/provenance.json +7 -6
- package/dist/rapier.mjs +1 -1
- package/dist/types/build-info.d.ts +2 -0
- package/dist/types/dynamics/index.d.ts +2 -0
- package/dist/types/dynamics/quadratic_drag.d.ts +26 -0
- package/dist/types/dynamics/quadratic_drag_patches.d.ts +38 -0
- package/dist/types/geometry/collider.d.ts +10 -0
- package/dist/types/pipeline/index.d.ts +2 -0
- package/dist/types/pipeline/solver_schedule.d.ts +5 -0
- package/dist/types/pipeline/step_profile.d.ts +6 -1
- package/dist/types/pipeline/step_profile_packet.d.ts +18 -0
- package/dist/types/pipeline/world.d.ts +17 -0
- package/dist/types/rapier_wasm3d.d.ts +8 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -637,3 +637,119 @@ checks, no-std, and independent builds matching all shipped files. Three
|
|
|
637
637
|
ordinary CPU controls are within roughly 1% of 0.17.0 in this run. See
|
|
638
638
|
`absolutejs/research/contact-softness-controls/` for measured fixture costs,
|
|
639
639
|
source hashes, intermediate failures and scope limitations.
|
|
640
|
+
|
|
641
|
+
### Queued 0.19.0: explicit quadratic resistance
|
|
642
|
+
|
|
643
|
+
`solveQuadraticDragImpulse` analytically integrates one quadratic relative-flow
|
|
644
|
+
resistance channel with positive supplied effective inverse mass. It returns the
|
|
645
|
+
signed impulse, implicit relative speed, dissipated energy and separate body /
|
|
646
|
+
reservoir work. It is pure and does not infer shape, exposure or coefficients.
|
|
647
|
+
Use consistent units and the complete effective mass response; verify native
|
|
648
|
+
application precision. See `absolutejs/research/quadratic-drag-2026-10-31/README.md`
|
|
649
|
+
for the derivation, scope and evidence. Native engine qualification stays 0.18.0.
|
|
650
|
+
|
|
651
|
+
Default inertia-matrix getter results now own their six coefficients. Later
|
|
652
|
+
native getters cannot overwrite a matrix already returned to the caller. Passing
|
|
653
|
+
an explicit matrix target still reuses that target as documented.
|
|
654
|
+
|
|
655
|
+
`solveQuadraticDragPatches` evaluates up to 4,096 explicit resistance patches in
|
|
656
|
+
double precision at a fixed pose and returns combined linear/angular impulses.
|
|
657
|
+
It reports body/reservoir work and dissipation, owns its outputs and preserves
|
|
658
|
+
inputs. Free-body inverse mass/inertia and patch exposure are caller supplied;
|
|
659
|
+
this is not an articulated-fluid or full CFD model. Patch order and timestep
|
|
660
|
+
convergence remain measurable approximation limits.
|
|
661
|
+
|
|
662
|
+
## Prepared solver schedules (0.20.0)
|
|
663
|
+
|
|
664
|
+
The opt-in `world.solverSchedule()` query returns owned observations from the last
|
|
665
|
+
completed profiled step. Like `ccdSubsteps()`, it returns `null` before such a
|
|
666
|
+
step, when profiling is disabled or toggled, and after snapshot restoration.
|
|
667
|
+
`createPhysicsStepProfiler` retains distinct owned records in `solverSchedules`, referenced by each
|
|
668
|
+
sample's `native.solverScheduleIndex` (omitted means entry 0). The table is always
|
|
669
|
+
present and cannot exceed the retained sample
|
|
670
|
+
count; repeated observations do not repeat the full record.
|
|
671
|
+
|
|
672
|
+
`groupVisits` counts prepared nonempty rigid-body solve groups across CCD passes.
|
|
673
|
+
`rigidBodyVisits` sums their rigid-body slots, while `rigidBodySubsteps` weights
|
|
674
|
+
those slots by each group's prepared substep count. These are visits, not unique
|
|
675
|
+
body identities. `minSubsteps`/`maxSubsteps` report the group range;
|
|
676
|
+
`minSubstepDt`/`maxSubstepDt` are durations in seconds. All four range fields are
|
|
677
|
+
`null` when no nonempty rigid group was prepared. Soft-particle-only work and
|
|
678
|
+
internal PGS sweeps are outside these counts.
|
|
679
|
+
|
|
680
|
+
This reads the actual group layout, including additional iterations propagated
|
|
681
|
+
through constraint-connected bodies. It does not change that layout, force
|
|
682
|
+
sampling, native timestep or contact policy. It is not a per-body mapping, elapsed
|
|
683
|
+
CPU timing, proof of force/energy accuracy, or forecast of the next step. In
|
|
684
|
+
particular, a previous group's substep count must not silently select gameplay
|
|
685
|
+
fluid-force timing when contact connectivity or CCD can change.
|
|
686
|
+
|
|
687
|
+
The native observer is qualified by independent native builds and exact full-state
|
|
688
|
+
comparisons across 18 fixtures / 9,240 steps against 0.19.0. Sampled local CPU
|
|
689
|
+
costs and limits are recorded in `absolutejs/research/solver-schedule/`.
|
|
690
|
+
The previous private artifacts remain archived; release availability is separate
|
|
691
|
+
from source qualification.
|
|
692
|
+
|
|
693
|
+
### Bounded diagnostic profile transport
|
|
694
|
+
|
|
695
|
+
`encodePhysicsStepProfile(profile)` converts a readable report into an owned,
|
|
696
|
+
versioned numeric packet. `decodePhysicsStepProfile(value)` validates an unknown
|
|
697
|
+
packet and reconstructs owned readable observations. For example:
|
|
698
|
+
|
|
699
|
+
```ts
|
|
700
|
+
const packet = encodePhysicsStepProfile(profiler.snapshot());
|
|
701
|
+
const restored = decodePhysicsStepProfile(JSON.parse(JSON.stringify(packet)));
|
|
702
|
+
```
|
|
703
|
+
|
|
704
|
+
The codec preserves every defined observation without rounding, including null
|
|
705
|
+
measurements, failed samples, signed zero and explicit versus omitted default
|
|
706
|
+
schedule references. It excludes arbitrary application metadata and user strings.
|
|
707
|
+
The format tag is `absolutejs-physics-step-profile/1`; one fixed `'-0'` cell tag
|
|
708
|
+
preserves signed zero through JSON. Arrays are bounded to 256 entries, tuple
|
|
709
|
+
lengths and enums are fixed, and indices/scalars are validated. Malformed packets
|
|
710
|
+
throw `TypeError`. This is transport validation, not a claim of native provenance
|
|
711
|
+
or physical correctness. Apply normal metadata redaction outside the codec.
|
|
712
|
+
|
|
713
|
+
Readable `PhysicsStepProfile` remains the simulation-facing API. In 0.20 its
|
|
714
|
+
always-present `solverSchedules` table and optional sample index are part of that
|
|
715
|
+
schema; older readable profiles without this table are not silently upgraded.
|
|
716
|
+
Keep the format tag with stored packets and decode before displaying their fields.
|
|
717
|
+
|
|
718
|
+
## Convex boundary export (0.21)
|
|
719
|
+
|
|
720
|
+
`collider.convexMeshData()` returns an owned `{vertices: Float32Array,
|
|
721
|
+
indices: Uint32Array}` pair from one native hull reconstruction. Use it when both
|
|
722
|
+
buffers are needed; separate `vertices()` and `indices()` calls each reconstruct
|
|
723
|
+
the hull. The query observes the current shape, so replacing a collider's shape
|
|
724
|
+
requires no cache invalidation. Mutating returned arrays does not change the
|
|
725
|
+
collider.
|
|
726
|
+
|
|
727
|
+
```ts
|
|
728
|
+
const mesh = collider.convexMeshData();
|
|
729
|
+
if (mesh) {
|
|
730
|
+
// Positions are in collider-local coordinates; indices describe triangles.
|
|
731
|
+
uploadBoundary(mesh.vertices, mesh.indices);
|
|
732
|
+
}
|
|
733
|
+
```
|
|
734
|
+
|
|
735
|
+
Nonconvex shapes return `undefined`. Rounded convex shapes return the inner
|
|
736
|
+
polyhedron, excluding the round radius. The mesh is a reconstructed boundary of
|
|
737
|
+
the stored Float32 points, not a copy of internal contact faces. Reconstruction
|
|
738
|
+
uses double precision and exact-sign dimension checks for thin point clouds;
|
|
739
|
+
returned positions remain original Float32 coordinates. It does not upgrade the
|
|
740
|
+
physics engine's storage or solver to double precision. Boundary measurements
|
|
741
|
+
and native mass measurements remain distinct; applications must continue to
|
|
742
|
+
validate both.
|
|
743
|
+
|
|
744
|
+
`buildInfo.convexExportPrecision` identifies this reconstruction as `float64`.
|
|
745
|
+
The f32 and f64 collision-library dependencies use the same recorded source pin.
|
|
746
|
+
Captured export, browser-worker, simulation-parity and CPU timing evidence lives
|
|
747
|
+
in `absolutejs/research/convex-export/`. Release availability is separate from source qualification; publication may be
|
|
748
|
+
deferred. The unchanged physical engine retains its existing settling limits.
|
|
749
|
+
|
|
750
|
+
Version 0.21.1 reduces continuous-collision preparation work. Convex sweeps defer
|
|
751
|
+
preparation until a candidate passes the existing filters and compute the same
|
|
752
|
+
geometric centroid without an unused inertia calculation. CCD settings, shape
|
|
753
|
+
geometry, collision filtering and solver arithmetic are unchanged. Qualification
|
|
754
|
+
records include exact recorded-motion comparisons; this is not a frame-rate or
|
|
755
|
+
universal latency guarantee.
|
package/absolutejs/README.md
CHANGED
|
@@ -637,3 +637,119 @@ checks, no-std, and independent builds matching all shipped files. Three
|
|
|
637
637
|
ordinary CPU controls are within roughly 1% of 0.17.0 in this run. See
|
|
638
638
|
`absolutejs/research/contact-softness-controls/` for measured fixture costs,
|
|
639
639
|
source hashes, intermediate failures and scope limitations.
|
|
640
|
+
|
|
641
|
+
### Queued 0.19.0: explicit quadratic resistance
|
|
642
|
+
|
|
643
|
+
`solveQuadraticDragImpulse` analytically integrates one quadratic relative-flow
|
|
644
|
+
resistance channel with positive supplied effective inverse mass. It returns the
|
|
645
|
+
signed impulse, implicit relative speed, dissipated energy and separate body /
|
|
646
|
+
reservoir work. It is pure and does not infer shape, exposure or coefficients.
|
|
647
|
+
Use consistent units and the complete effective mass response; verify native
|
|
648
|
+
application precision. See `absolutejs/research/quadratic-drag-2026-10-31/README.md`
|
|
649
|
+
for the derivation, scope and evidence. Native engine qualification stays 0.18.0.
|
|
650
|
+
|
|
651
|
+
Default inertia-matrix getter results now own their six coefficients. Later
|
|
652
|
+
native getters cannot overwrite a matrix already returned to the caller. Passing
|
|
653
|
+
an explicit matrix target still reuses that target as documented.
|
|
654
|
+
|
|
655
|
+
`solveQuadraticDragPatches` evaluates up to 4,096 explicit resistance patches in
|
|
656
|
+
double precision at a fixed pose and returns combined linear/angular impulses.
|
|
657
|
+
It reports body/reservoir work and dissipation, owns its outputs and preserves
|
|
658
|
+
inputs. Free-body inverse mass/inertia and patch exposure are caller supplied;
|
|
659
|
+
this is not an articulated-fluid or full CFD model. Patch order and timestep
|
|
660
|
+
convergence remain measurable approximation limits.
|
|
661
|
+
|
|
662
|
+
## Prepared solver schedules (0.20.0)
|
|
663
|
+
|
|
664
|
+
The opt-in `world.solverSchedule()` query returns owned observations from the last
|
|
665
|
+
completed profiled step. Like `ccdSubsteps()`, it returns `null` before such a
|
|
666
|
+
step, when profiling is disabled or toggled, and after snapshot restoration.
|
|
667
|
+
`createPhysicsStepProfiler` retains distinct owned records in `solverSchedules`, referenced by each
|
|
668
|
+
sample's `native.solverScheduleIndex` (omitted means entry 0). The table is always
|
|
669
|
+
present and cannot exceed the retained sample
|
|
670
|
+
count; repeated observations do not repeat the full record.
|
|
671
|
+
|
|
672
|
+
`groupVisits` counts prepared nonempty rigid-body solve groups across CCD passes.
|
|
673
|
+
`rigidBodyVisits` sums their rigid-body slots, while `rigidBodySubsteps` weights
|
|
674
|
+
those slots by each group's prepared substep count. These are visits, not unique
|
|
675
|
+
body identities. `minSubsteps`/`maxSubsteps` report the group range;
|
|
676
|
+
`minSubstepDt`/`maxSubstepDt` are durations in seconds. All four range fields are
|
|
677
|
+
`null` when no nonempty rigid group was prepared. Soft-particle-only work and
|
|
678
|
+
internal PGS sweeps are outside these counts.
|
|
679
|
+
|
|
680
|
+
This reads the actual group layout, including additional iterations propagated
|
|
681
|
+
through constraint-connected bodies. It does not change that layout, force
|
|
682
|
+
sampling, native timestep or contact policy. It is not a per-body mapping, elapsed
|
|
683
|
+
CPU timing, proof of force/energy accuracy, or forecast of the next step. In
|
|
684
|
+
particular, a previous group's substep count must not silently select gameplay
|
|
685
|
+
fluid-force timing when contact connectivity or CCD can change.
|
|
686
|
+
|
|
687
|
+
The native observer is qualified by independent native builds and exact full-state
|
|
688
|
+
comparisons across 18 fixtures / 9,240 steps against 0.19.0. Sampled local CPU
|
|
689
|
+
costs and limits are recorded in `absolutejs/research/solver-schedule/`.
|
|
690
|
+
The previous private artifacts remain archived; release availability is separate
|
|
691
|
+
from source qualification.
|
|
692
|
+
|
|
693
|
+
### Bounded diagnostic profile transport
|
|
694
|
+
|
|
695
|
+
`encodePhysicsStepProfile(profile)` converts a readable report into an owned,
|
|
696
|
+
versioned numeric packet. `decodePhysicsStepProfile(value)` validates an unknown
|
|
697
|
+
packet and reconstructs owned readable observations. For example:
|
|
698
|
+
|
|
699
|
+
```ts
|
|
700
|
+
const packet = encodePhysicsStepProfile(profiler.snapshot());
|
|
701
|
+
const restored = decodePhysicsStepProfile(JSON.parse(JSON.stringify(packet)));
|
|
702
|
+
```
|
|
703
|
+
|
|
704
|
+
The codec preserves every defined observation without rounding, including null
|
|
705
|
+
measurements, failed samples, signed zero and explicit versus omitted default
|
|
706
|
+
schedule references. It excludes arbitrary application metadata and user strings.
|
|
707
|
+
The format tag is `absolutejs-physics-step-profile/1`; one fixed `'-0'` cell tag
|
|
708
|
+
preserves signed zero through JSON. Arrays are bounded to 256 entries, tuple
|
|
709
|
+
lengths and enums are fixed, and indices/scalars are validated. Malformed packets
|
|
710
|
+
throw `TypeError`. This is transport validation, not a claim of native provenance
|
|
711
|
+
or physical correctness. Apply normal metadata redaction outside the codec.
|
|
712
|
+
|
|
713
|
+
Readable `PhysicsStepProfile` remains the simulation-facing API. In 0.20 its
|
|
714
|
+
always-present `solverSchedules` table and optional sample index are part of that
|
|
715
|
+
schema; older readable profiles without this table are not silently upgraded.
|
|
716
|
+
Keep the format tag with stored packets and decode before displaying their fields.
|
|
717
|
+
|
|
718
|
+
## Convex boundary export (0.21)
|
|
719
|
+
|
|
720
|
+
`collider.convexMeshData()` returns an owned `{vertices: Float32Array,
|
|
721
|
+
indices: Uint32Array}` pair from one native hull reconstruction. Use it when both
|
|
722
|
+
buffers are needed; separate `vertices()` and `indices()` calls each reconstruct
|
|
723
|
+
the hull. The query observes the current shape, so replacing a collider's shape
|
|
724
|
+
requires no cache invalidation. Mutating returned arrays does not change the
|
|
725
|
+
collider.
|
|
726
|
+
|
|
727
|
+
```ts
|
|
728
|
+
const mesh = collider.convexMeshData();
|
|
729
|
+
if (mesh) {
|
|
730
|
+
// Positions are in collider-local coordinates; indices describe triangles.
|
|
731
|
+
uploadBoundary(mesh.vertices, mesh.indices);
|
|
732
|
+
}
|
|
733
|
+
```
|
|
734
|
+
|
|
735
|
+
Nonconvex shapes return `undefined`. Rounded convex shapes return the inner
|
|
736
|
+
polyhedron, excluding the round radius. The mesh is a reconstructed boundary of
|
|
737
|
+
the stored Float32 points, not a copy of internal contact faces. Reconstruction
|
|
738
|
+
uses double precision and exact-sign dimension checks for thin point clouds;
|
|
739
|
+
returned positions remain original Float32 coordinates. It does not upgrade the
|
|
740
|
+
physics engine's storage or solver to double precision. Boundary measurements
|
|
741
|
+
and native mass measurements remain distinct; applications must continue to
|
|
742
|
+
validate both.
|
|
743
|
+
|
|
744
|
+
`buildInfo.convexExportPrecision` identifies this reconstruction as `float64`.
|
|
745
|
+
The f32 and f64 collision-library dependencies use the same recorded source pin.
|
|
746
|
+
Captured export, browser-worker, simulation-parity and CPU timing evidence lives
|
|
747
|
+
in `absolutejs/research/convex-export/`. Release availability is separate from source qualification; publication may be
|
|
748
|
+
deferred. The unchanged physical engine retains its existing settling limits.
|
|
749
|
+
|
|
750
|
+
Version 0.21.1 reduces continuous-collision preparation work. Convex sweeps defer
|
|
751
|
+
preparation until a candidate passes the existing filters and compute the same
|
|
752
|
+
geometric centroid without an unused inertia calculation. CCD settings, shape
|
|
753
|
+
geometry, collision filtering and solver arithmetic are unchanged. Qualification
|
|
754
|
+
records include exact recorded-motion comparisons; this is not a frame-rate or
|
|
755
|
+
universal latency guarantee.
|
package/dist/build-info.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=Object.freeze({schemaVersion:1,scope:"package",packageName:"@absolutejs/rapier3d",packageVersion:"0.
|
|
1
|
+
var e=Object.freeze({schemaVersion:1,scope:"package",packageName:"@absolutejs/rapier3d",packageVersion:"0.21.1",qualifiedKernelRelease:"0.21.1",upstream:"b716d375efc0201003f0cd9ef7168eee0b62c177",engine:"0.36.0",collisionLibraryVersion:"0.31.1",collisionSource:"git+https://github.com/absolutejs/parry?rev=6afbe26a23a4d89903c6a33d0a0c0d98d9af7b72#6afbe26a23a4d89903c6a33d0a0c0d98d9af7b72",convexExportPrecision:"float64",bindings:"0.21.0",bindgen:"0.2.129",wasmSha256:"1d35b69d746eee6383401a68ec37d051391e0fa321096675b46c86072616e9d5",wasmBytes:3411729,solverChanges:!1});export{e as buildInfo};
|
package/dist/provenance.json
CHANGED
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"scope": "package",
|
|
4
4
|
"packageName": "@absolutejs/rapier3d",
|
|
5
|
-
"packageVersion": "0.
|
|
6
|
-
"qualifiedKernelRelease": "0.
|
|
5
|
+
"packageVersion": "0.21.1",
|
|
6
|
+
"qualifiedKernelRelease": "0.21.1",
|
|
7
7
|
"upstream": "b716d375efc0201003f0cd9ef7168eee0b62c177",
|
|
8
8
|
"engine": "0.36.0",
|
|
9
9
|
"collisionLibraryVersion": "0.31.1",
|
|
10
|
-
"collisionSource": "git+https://github.com/absolutejs/parry?rev=
|
|
10
|
+
"collisionSource": "git+https://github.com/absolutejs/parry?rev=6afbe26a23a4d89903c6a33d0a0c0d98d9af7b72#6afbe26a23a4d89903c6a33d0a0c0d98d9af7b72",
|
|
11
|
+
"convexExportPrecision": "float64",
|
|
11
12
|
"bindings": "0.21.0",
|
|
12
13
|
"bindgen": "0.2.129",
|
|
13
|
-
"wasmSha256": "
|
|
14
|
-
"wasmBytes":
|
|
15
|
-
"solverChanges":
|
|
14
|
+
"wasmSha256": "1d35b69d746eee6383401a68ec37d051391e0fa321096675b46c86072616e9d5",
|
|
15
|
+
"wasmBytes": 3411729,
|
|
16
|
+
"solverChanges": false
|
|
16
17
|
}
|