@absolutejs/rapier3d 0.14.1 → 0.16.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
@@ -421,3 +421,61 @@ zero-offset roots retain their existing arithmetic. This correction does not
421
421
  replace the articulation's angular integrator or eliminate remaining aggregate
422
422
  momentum/energy drift. Coordinate-covariance, movable-joint and snapshot replay
423
423
  regressions are recorded in `absolutejs/research/rigid-assembly`.
424
+
425
+ ## Isolated fixed-assembly integration and observations (0.15)
426
+
427
+ The solver additionally admits isolated floating assemblies made only
428
+ of fixed links, with gyroscopic forces enabled, no damping/armature/friction,
429
+ no locks or fast rotation, and no external loads except uniform gravity shared
430
+ by every link. Contacts, external joints, movable links, differing gravity
431
+ scales and unsupported states retain their existing path. Aggregate inertia is
432
+ assembled in authored local frames, then a matched angular update advances the
433
+ assembly about its total center of mass. Linear gravity uses the existing
434
+ semi-implicit kick-then-drift convention. This is not a contact or fracture model.
435
+
436
+ `world.freeAssemblyStats()` reports owned attempt counts after a completed
437
+ profiled step, with the same freshness rules as `freeRotationStats()`. The bounded
438
+ profiler records a deep-owned `native.freeAssembly` object. Counters distinguish
439
+ accepted steps, nonphysical-inertia rejections, rotation-limit rejections, and
440
+ invalid/failed solves. Unsupported assemblies and invalid aggregate construction
441
+ are excluded before an attempt; these exclusions do not increment rejection
442
+ counts. Zero counts do not prove conservation. Counts include solver substeps
443
+ and CCD passes. Qualification includes 198 package tests, 843 game tests, GPU-disabled browser
444
+ checks, 80 byte-exact snapshot replays and matching independent distribution
445
+ builds. The synthetic 16-assembly falling benchmark measured about 0.95 additional
446
+ microseconds per assembly/substep (median paired batch ratio 1.12); this is not
447
+ a hardware FPS result. Contact coupling, partial-subtree fracture and extreme
448
+ thin-moment storage remain separate work. See
449
+ `absolutejs/research/aggregate-free-transport/README.md` for evidence and limits.
450
+
451
+ ## Partial assembly splits and pending snapshots (0.16)
452
+
453
+ Removing a link from a moving fixed assembly can leave multiple assemblies.
454
+ Newly released roots inherit their body's world COM and angular velocity;
455
+ the surviving original root retains its coordinates, damping, armature,
456
+ friction and surviving couplings. Newly free root coordinates use their normal
457
+ defaults. Explicit fixed-to-dynamic activation also preserves prescribed body
458
+ velocity. Initial articulation construction semantics are unchanged.
459
+
460
+ An ordinary free fragment now retains the matched free-rotation path when an
461
+ unrelated articulation shares its solver batch. Multibody links are excluded
462
+ from ordinary-body initialization, and existing external-constraint, damping,
463
+ torque, lock and speed exclusions still apply. This corrects a batch-dependent
464
+ motion error without applying free-body integration to constrained bodies.
465
+
466
+ `takeSnapshot()` now writes the `ABSJS3DS` envelope, version 1, including ordered
467
+ pending connectivity edits and dirty impulse-joint state. Saving immediately
468
+ after a cut therefore retains changes not yet consumed by a simulation step.
469
+ Native Rust callers can capture/restore the opaque `PendingIslandEvents`
470
+ companion with the corresponding serialized world sets. Capture neither flushes
471
+ edits nor reconstructs the world's connectivity. Snapshot payloads still depend
472
+ on the native engine layout: retain `buildInfo` with diagnostic captures; the
473
+ envelope is not a promise of cross-engine save compatibility. Prior compatible
474
+ raw captures remain readable for investigation, but edits omitted by their
475
+ original writer cannot be recovered. All new saves use the versioned format.
476
+
477
+ Qualification and retained failed assumptions are in
478
+ `absolutejs/research/assembly-split/`. Tests measure the remaining material after
479
+ body removal; they do not invent a fracture-energy budget or model cutting
480
+ forces, plastic deformation or coupled-contact accuracy. Those remain separate
481
+ physical models and qualification work.
@@ -421,3 +421,61 @@ zero-offset roots retain their existing arithmetic. This correction does not
421
421
  replace the articulation's angular integrator or eliminate remaining aggregate
422
422
  momentum/energy drift. Coordinate-covariance, movable-joint and snapshot replay
423
423
  regressions are recorded in `absolutejs/research/rigid-assembly`.
424
+
425
+ ## Isolated fixed-assembly integration and observations (0.15)
426
+
427
+ The solver additionally admits isolated floating assemblies made only
428
+ of fixed links, with gyroscopic forces enabled, no damping/armature/friction,
429
+ no locks or fast rotation, and no external loads except uniform gravity shared
430
+ by every link. Contacts, external joints, movable links, differing gravity
431
+ scales and unsupported states retain their existing path. Aggregate inertia is
432
+ assembled in authored local frames, then a matched angular update advances the
433
+ assembly about its total center of mass. Linear gravity uses the existing
434
+ semi-implicit kick-then-drift convention. This is not a contact or fracture model.
435
+
436
+ `world.freeAssemblyStats()` reports owned attempt counts after a completed
437
+ profiled step, with the same freshness rules as `freeRotationStats()`. The bounded
438
+ profiler records a deep-owned `native.freeAssembly` object. Counters distinguish
439
+ accepted steps, nonphysical-inertia rejections, rotation-limit rejections, and
440
+ invalid/failed solves. Unsupported assemblies and invalid aggregate construction
441
+ are excluded before an attempt; these exclusions do not increment rejection
442
+ counts. Zero counts do not prove conservation. Counts include solver substeps
443
+ and CCD passes. Qualification includes 198 package tests, 843 game tests, GPU-disabled browser
444
+ checks, 80 byte-exact snapshot replays and matching independent distribution
445
+ builds. The synthetic 16-assembly falling benchmark measured about 0.95 additional
446
+ microseconds per assembly/substep (median paired batch ratio 1.12); this is not
447
+ a hardware FPS result. Contact coupling, partial-subtree fracture and extreme
448
+ thin-moment storage remain separate work. See
449
+ `absolutejs/research/aggregate-free-transport/README.md` for evidence and limits.
450
+
451
+ ## Partial assembly splits and pending snapshots (0.16)
452
+
453
+ Removing a link from a moving fixed assembly can leave multiple assemblies.
454
+ Newly released roots inherit their body's world COM and angular velocity;
455
+ the surviving original root retains its coordinates, damping, armature,
456
+ friction and surviving couplings. Newly free root coordinates use their normal
457
+ defaults. Explicit fixed-to-dynamic activation also preserves prescribed body
458
+ velocity. Initial articulation construction semantics are unchanged.
459
+
460
+ An ordinary free fragment now retains the matched free-rotation path when an
461
+ unrelated articulation shares its solver batch. Multibody links are excluded
462
+ from ordinary-body initialization, and existing external-constraint, damping,
463
+ torque, lock and speed exclusions still apply. This corrects a batch-dependent
464
+ motion error without applying free-body integration to constrained bodies.
465
+
466
+ `takeSnapshot()` now writes the `ABSJS3DS` envelope, version 1, including ordered
467
+ pending connectivity edits and dirty impulse-joint state. Saving immediately
468
+ after a cut therefore retains changes not yet consumed by a simulation step.
469
+ Native Rust callers can capture/restore the opaque `PendingIslandEvents`
470
+ companion with the corresponding serialized world sets. Capture neither flushes
471
+ edits nor reconstructs the world's connectivity. Snapshot payloads still depend
472
+ on the native engine layout: retain `buildInfo` with diagnostic captures; the
473
+ envelope is not a promise of cross-engine save compatibility. Prior compatible
474
+ raw captures remain readable for investigation, but edits omitted by their
475
+ original writer cannot be recovered. All new saves use the versioned format.
476
+
477
+ Qualification and retained failed assumptions are in
478
+ `absolutejs/research/assembly-split/`. Tests measure the remaining material after
479
+ body removal; they do not invent a fracture-energy budget or model cutting
480
+ forces, plastic deformation or coupled-contact accuracy. Those remain separate
481
+ physical models and qualification work.
@@ -1 +1 @@
1
- var e=Object.freeze({schemaVersion:1,scope:"package",packageName:"@absolutejs/rapier3d",packageVersion:"0.14.1",qualifiedKernelRelease:"0.14.1",upstream:"b716d375efc0201003f0cd9ef7168eee0b62c177",engine:"0.36.0",collisionLibraryVersion:"0.31.1",collisionSource:"git+https://github.com/absolutejs/parry?rev=c566aabd77be8ac7a427c2b704860c47e34657b9#c566aabd77be8ac7a427c2b704860c47e34657b9",bindings:"0.21.0",bindgen:"0.2.129",wasmSha256:"4686ddcbc3804f6692e67a93a0a99eb54ea92babc4ad293a54010ef54b7c9ec5",wasmBytes:3307856,solverChanges:!0});export{e as buildInfo};
1
+ var e=Object.freeze({schemaVersion:1,scope:"package",packageName:"@absolutejs/rapier3d",packageVersion:"0.16.0",qualifiedKernelRelease:"0.16.0",upstream:"b716d375efc0201003f0cd9ef7168eee0b62c177",engine:"0.36.0",collisionLibraryVersion:"0.31.1",collisionSource:"git+https://github.com/absolutejs/parry?rev=c566aabd77be8ac7a427c2b704860c47e34657b9#c566aabd77be8ac7a427c2b704860c47e34657b9",bindings:"0.21.0",bindgen:"0.2.129",wasmSha256:"fb44e31fd971a0577889408a95266ab1e61d9293a1f6657647ca51417b93c83d",wasmBytes:3324606,solverChanges:!0});export{e as buildInfo};
@@ -2,15 +2,15 @@
2
2
  "schemaVersion": 1,
3
3
  "scope": "package",
4
4
  "packageName": "@absolutejs/rapier3d",
5
- "packageVersion": "0.14.1",
6
- "qualifiedKernelRelease": "0.14.1",
5
+ "packageVersion": "0.16.0",
6
+ "qualifiedKernelRelease": "0.16.0",
7
7
  "upstream": "b716d375efc0201003f0cd9ef7168eee0b62c177",
8
8
  "engine": "0.36.0",
9
9
  "collisionLibraryVersion": "0.31.1",
10
10
  "collisionSource": "git+https://github.com/absolutejs/parry?rev=c566aabd77be8ac7a427c2b704860c47e34657b9#c566aabd77be8ac7a427c2b704860c47e34657b9",
11
11
  "bindings": "0.21.0",
12
12
  "bindgen": "0.2.129",
13
- "wasmSha256": "4686ddcbc3804f6692e67a93a0a99eb54ea92babc4ad293a54010ef54b7c9ec5",
14
- "wasmBytes": 3307856,
13
+ "wasmSha256": "fb44e31fd971a0577889408a95266ab1e61d9293a1f6657647ca51417b93c83d",
14
+ "wasmBytes": 3324606,
15
15
  "solverChanges": true
16
16
  }