@woosh/meep-engine 3.14.4 → 3.14.5
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/package.json +1 -1
- package/src/core/geom/3d/mat4/m4_rigidity_defect.d.ts +30 -0
- package/src/core/geom/3d/mat4/m4_rigidity_defect.d.ts.map +1 -0
- package/src/core/geom/3d/mat4/m4_rigidity_defect.js +71 -0
- package/src/engine/network/orchestrator/NetworkPeer.d.ts +56 -8
- package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -1
- package/src/engine/network/orchestrator/NetworkPeer.js +263 -67
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts +6 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts.map +1 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeClient.js +6 -0
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts +13 -7
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts.map +1 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.js +103 -138
- package/src/engine/network/replication/Replicator.d.ts +29 -6
- package/src/engine/network/replication/Replicator.d.ts.map +1 -1
- package/src/engine/network/replication/Replicator.js +265 -108
- package/src/engine/network/sim/ActionLog.d.ts +2 -0
- package/src/engine/network/sim/ActionLog.d.ts.map +1 -1
- package/src/engine/network/sim/ActionLog.js +2 -0
- package/src/engine/network/sim/ActionRecordCursor.d.ts +82 -0
- package/src/engine/network/sim/ActionRecordCursor.d.ts.map +1 -0
- package/src/engine/network/sim/ActionRecordCursor.js +120 -0
- package/src/engine/network/sim/RewindEngine.d.ts.map +1 -1
- package/src/engine/network/sim/RewindEngine.js +13 -29
- package/src/engine/network/sim/SimActionExecutor.d.ts +2 -3
- package/src/engine/network/sim/SimActionExecutor.d.ts.map +1 -1
- package/src/engine/network/sim/SimActionExecutor.js +10 -11
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_scene.js +38 -37
- package/src/shade/playground/skinned_mesh_soup/README.md +39 -18
- package/src/shade/playground/skinned_mesh_soup/index.html +9 -6
- package/src/shade/playground/skinned_mesh_soup/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_mesh_soup/main.js +16 -13
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts +8 -2
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts.map +1 -1
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js +23 -4
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +1958 -1796
- package/src/shade/renderer/animation/SKINNING_FRAME_PLAN.md +357 -0
- package/src/shade/renderer/animation/skin_bind_transform.d.ts +25 -0
- package/src/shade/renderer/animation/skin_bind_transform.d.ts.map +1 -0
- package/src/shade/renderer/animation/skin_bind_transform.js +33 -0
- package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts +67 -0
- package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts.map +1 -0
- package/src/shade/renderer/animation/skin_clip_scale_conflicts.js +199 -0
- package/src/shade/renderer/animation/skin_frame_defect.d.ts +34 -0
- package/src/shade/renderer/animation/skin_frame_defect.d.ts.map +1 -0
- package/src/shade/renderer/animation/skin_frame_defect.js +132 -0
- package/src/shade/renderer/animation/skin_joint_matrix.d.ts +24 -0
- package/src/shade/renderer/animation/skin_joint_matrix.d.ts.map +1 -0
- package/src/shade/renderer/animation/skin_joint_matrix.js +46 -0
- package/src/shade/renderer/animation/skin_normalize_mesh_frame.d.ts +70 -0
- package/src/shade/renderer/animation/skin_normalize_mesh_frame.d.ts.map +1 -0
- package/src/shade/renderer/animation/skin_normalize_mesh_frame.js +216 -0
- package/src/shade/renderer/animation/skin_test_fixtures.d.ts +86 -0
- package/src/shade/renderer/animation/skin_test_fixtures.d.ts.map +1 -0
- package/src/shade/renderer/animation/skin_test_fixtures.js +250 -0
- package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.d.ts +18 -4
- package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.js +18 -4
- package/src/shade/renderer/particles/DESIGN.md +5 -5
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +43 -0
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +44 -0
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +33 -59
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +185 -118
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts +15 -10
- package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/compile_particle_graph.js +205 -170
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts +44 -0
- package/src/shade/renderer/particles/graph/particle_graph_authoring.d.ts.map +1 -0
- package/src/shade/renderer/particles/graph/particle_graph_authoring.js +108 -0
- package/src/shade/renderer/particles/particle_prototype.d.ts.map +1 -1
- package/src/shade/renderer/particles/particle_prototype.js +181 -180
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +4 -4
- package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/create_particle_effect.js +19 -19
- package/src/shade/renderer/particles/vm/chunk_particle_vm.js +1 -1
- package/src/shade/renderer/scene/SkinnedMesh.d.ts +11 -0
- package/src/shade/renderer/scene/SkinnedMesh.d.ts.map +1 -1
- package/src/shade/renderer/scene/SkinnedMesh.js +11 -0
- package/src/shade/renderer/shader/chunk/geometry/quaternion/dual/chunk_dual_quat_from_m4.d.ts +33 -3
- package/src/shade/renderer/shader/chunk/geometry/quaternion/dual/chunk_dual_quat_from_m4.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/quaternion/dual/chunk_dual_quat_from_m4.js +58 -37
- package/src/shade/renderer/particles/graph/ParticleGraph.d.ts +0 -54
- package/src/shade/renderer/particles/graph/ParticleGraph.d.ts.map +0 -1
- package/src/shade/renderer/particles/graph/ParticleGraph.js +0 -99
package/package.json
CHANGED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How far a matrix's linear part is from a rotation — zero for a rigid motion, and growing with
|
|
3
|
+
* whatever else is in there.
|
|
4
|
+
*
|
|
5
|
+
* A rigid motion's upper 3×3 is orthonormal: three unit columns, mutually perpendicular. The defect
|
|
6
|
+
* is the largest violation of that, over the six facts it comes down to — three lengths against 1,
|
|
7
|
+
* three pairwise dot products against 0 — so it is scale-free in the sense that matters: a matrix
|
|
8
|
+
* scaled by `s` reports `|s − 1|`, and a shear reports the cosine of how far the columns have fallen
|
|
9
|
+
* out of square, whatever the scale.
|
|
10
|
+
*
|
|
11
|
+
* Not a norm and not a distance to the nearest rotation. It is a **test statistic**: one number that
|
|
12
|
+
* is zero exactly when the matrix is rigid, that grows monotonically with the thing you would want
|
|
13
|
+
* to see, and that can be compared against a tolerance without knowing what shape the matrix is. The
|
|
14
|
+
* translation is not read — a translation is rigid.
|
|
15
|
+
*
|
|
16
|
+
* ## Why this exists
|
|
17
|
+
*
|
|
18
|
+
* `dual_quat_from_m4` reads a matrix's upper 3×3 as if it were a rotation. Handed anything else it
|
|
19
|
+
* answers a rotation anyway — a wrong one, from `sqrt(max(0, 1 ± m00 ± m11 ± m22))` over terms the
|
|
20
|
+
* scale has swamped — with no signal that it did. This is how a caller finds out first. See
|
|
21
|
+
* `renderer/animation/SKINNING_FRAME_PLAN.md`.
|
|
22
|
+
*
|
|
23
|
+
* A **reflection** reports zero: it is orthonormal, and this measures orthonormality. Callers who
|
|
24
|
+
* care about handedness want the determinant's sign, which is a different question.
|
|
25
|
+
*
|
|
26
|
+
* @param {ArrayLike<number>} mat4 column-major, 16 elements
|
|
27
|
+
* @returns {number} 0 for a rigid motion; larger the further from one
|
|
28
|
+
*/
|
|
29
|
+
export function m4_rigidity_defect(mat4: ArrayLike<number>): number;
|
|
30
|
+
//# sourceMappingURL=m4_rigidity_defect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"m4_rigidity_defect.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/mat4/m4_rigidity_defect.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,yCAHW,UAAU,MAAM,CAAC,GACf,MAAM,CA0ClB"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { assert } from "../../../assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* How far a matrix's linear part is from a rotation — zero for a rigid motion, and growing with
|
|
5
|
+
* whatever else is in there.
|
|
6
|
+
*
|
|
7
|
+
* A rigid motion's upper 3×3 is orthonormal: three unit columns, mutually perpendicular. The defect
|
|
8
|
+
* is the largest violation of that, over the six facts it comes down to — three lengths against 1,
|
|
9
|
+
* three pairwise dot products against 0 — so it is scale-free in the sense that matters: a matrix
|
|
10
|
+
* scaled by `s` reports `|s − 1|`, and a shear reports the cosine of how far the columns have fallen
|
|
11
|
+
* out of square, whatever the scale.
|
|
12
|
+
*
|
|
13
|
+
* Not a norm and not a distance to the nearest rotation. It is a **test statistic**: one number that
|
|
14
|
+
* is zero exactly when the matrix is rigid, that grows monotonically with the thing you would want
|
|
15
|
+
* to see, and that can be compared against a tolerance without knowing what shape the matrix is. The
|
|
16
|
+
* translation is not read — a translation is rigid.
|
|
17
|
+
*
|
|
18
|
+
* ## Why this exists
|
|
19
|
+
*
|
|
20
|
+
* `dual_quat_from_m4` reads a matrix's upper 3×3 as if it were a rotation. Handed anything else it
|
|
21
|
+
* answers a rotation anyway — a wrong one, from `sqrt(max(0, 1 ± m00 ± m11 ± m22))` over terms the
|
|
22
|
+
* scale has swamped — with no signal that it did. This is how a caller finds out first. See
|
|
23
|
+
* `renderer/animation/SKINNING_FRAME_PLAN.md`.
|
|
24
|
+
*
|
|
25
|
+
* A **reflection** reports zero: it is orthonormal, and this measures orthonormality. Callers who
|
|
26
|
+
* care about handedness want the determinant's sign, which is a different question.
|
|
27
|
+
*
|
|
28
|
+
* @param {ArrayLike<number>} mat4 column-major, 16 elements
|
|
29
|
+
* @returns {number} 0 for a rigid motion; larger the further from one
|
|
30
|
+
*/
|
|
31
|
+
export function m4_rigidity_defect(mat4) {
|
|
32
|
+
assert.isArrayLike(mat4, 'mat4');
|
|
33
|
+
|
|
34
|
+
const x0 = mat4[0], x1 = mat4[1], x2 = mat4[2];
|
|
35
|
+
const y0 = mat4[4], y1 = mat4[5], y2 = mat4[6];
|
|
36
|
+
const z0 = mat4[8], z1 = mat4[9], z2 = mat4[10];
|
|
37
|
+
|
|
38
|
+
const length_x = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);
|
|
39
|
+
const length_y = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);
|
|
40
|
+
const length_z = Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);
|
|
41
|
+
|
|
42
|
+
let defect = Math.abs(length_x - 1);
|
|
43
|
+
|
|
44
|
+
defect = Math.max(defect, Math.abs(length_y - 1));
|
|
45
|
+
defect = Math.max(defect, Math.abs(length_z - 1));
|
|
46
|
+
|
|
47
|
+
/*
|
|
48
|
+
The dot products are normalized by the column lengths so that the two halves of the answer are
|
|
49
|
+
in the same units — a cosine rather than a product of magnitudes. Without it a matrix at a large
|
|
50
|
+
scale would report its shear multiplied by that scale squared, and a tolerance chosen for one
|
|
51
|
+
model would mean something else on the next. A degenerate column has no direction to be square
|
|
52
|
+
to; its zero length has already been counted.
|
|
53
|
+
*/
|
|
54
|
+
const scale_xy = length_x * length_y;
|
|
55
|
+
const scale_yz = length_y * length_z;
|
|
56
|
+
const scale_zx = length_z * length_x;
|
|
57
|
+
|
|
58
|
+
if (scale_xy > 0) {
|
|
59
|
+
defect = Math.max(defect, Math.abs(x0 * y0 + x1 * y1 + x2 * y2) / scale_xy);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (scale_yz > 0) {
|
|
63
|
+
defect = Math.max(defect, Math.abs(y0 * z0 + y1 * z1 + y2 * z2) / scale_yz);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (scale_zx > 0) {
|
|
67
|
+
defect = Math.max(defect, Math.abs(z0 * x0 + z1 * x1 + z2 * x2) / scale_zx);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return defect;
|
|
71
|
+
}
|
|
@@ -59,10 +59,20 @@ export const ResumeRejectReason: Readonly<{
|
|
|
59
59
|
* range is confirmed only when `unacked` reaches zero without `abandoned`
|
|
60
60
|
* having been set by a loss along the way.
|
|
61
61
|
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
62
|
+
* A tick may make several sends to one peer, each carrying the next slice of
|
|
63
|
+
* the owed range (see {@link NetworkPeer#flush_outbound}). They confirm
|
|
64
|
+
* independently, and the baseline advances only through slices confirmed in
|
|
65
|
+
* order — a later slice landing says nothing about an earlier one still in
|
|
66
|
+
* flight. `head` marks the first slice of a tick, whose start is the pack
|
|
67
|
+
* start itself; see {@link NetworkPeer#__credit_confirmed}.
|
|
68
|
+
*
|
|
69
|
+
* @typedef {{frame_start: number, frame_end: number, head: boolean, unacked: number, abandoned: boolean}} PendingAck
|
|
70
|
+
* @property {number} frame_start first frame in the packed range
|
|
71
|
+
* @property {number} frame_end last frame in the packed range
|
|
72
|
+
* @property {boolean} head this send began at the pack start, so nothing
|
|
73
|
+
* sendable lies before it and its confirmation credits outright
|
|
74
|
+
* @property {number} unacked seqs of this send not yet acked or declared lost
|
|
75
|
+
* @property {boolean} abandoned at least one seq was declared lost, so the
|
|
66
76
|
* message is forfeit and must never advance the baseline
|
|
67
77
|
*/
|
|
68
78
|
/**
|
|
@@ -102,9 +112,10 @@ export class NetworkPeer {
|
|
|
102
112
|
* initial_buffer_size?: number,
|
|
103
113
|
* mutation_ledger?: MutationLedger|null,
|
|
104
114
|
* changed_set_capacity?: number,
|
|
115
|
+
* max_packets_per_tick?: number,
|
|
105
116
|
* }} options
|
|
106
117
|
*/
|
|
107
|
-
constructor({ world, binary_registry, replicated_components, action_classes, scope_filter, frame_capacity, initial_buffer_size, mutation_ledger, changed_set_capacity, }: {
|
|
118
|
+
constructor({ world, binary_registry, replicated_components, action_classes, scope_filter, frame_capacity, initial_buffer_size, mutation_ledger, changed_set_capacity, max_packets_per_tick, }: {
|
|
108
119
|
world: EntityComponentDataset;
|
|
109
120
|
binary_registry: BinarySerializationRegistry;
|
|
110
121
|
replicated_components: Function[];
|
|
@@ -116,6 +127,7 @@ export class NetworkPeer {
|
|
|
116
127
|
initial_buffer_size?: number;
|
|
117
128
|
mutation_ledger?: MutationLedger | null;
|
|
118
129
|
changed_set_capacity?: number;
|
|
130
|
+
max_packets_per_tick?: number;
|
|
119
131
|
});
|
|
120
132
|
/** @type {EntityComponentDataset} */
|
|
121
133
|
world: EntityComponentDataset;
|
|
@@ -127,6 +139,32 @@ export class NetworkPeer {
|
|
|
127
139
|
slot_table: ReplicationSlotTable;
|
|
128
140
|
/** @type {ActionLog} */
|
|
129
141
|
action_log: ActionLog;
|
|
142
|
+
/**
|
|
143
|
+
* Most action-stream packets {@link flush_outbound} may send one peer
|
|
144
|
+
* in a tick. Each carries the next slice of what the peer is owed and
|
|
145
|
+
* is confirmed on its own, so this caps how fast a peer that has
|
|
146
|
+
* fallen behind catches up: a slice is re-sent every tick until its ack
|
|
147
|
+
* returns, so a peer is confirmed at most this many packets of frames
|
|
148
|
+
* per round trip, against the one frame per tick the simulation
|
|
149
|
+
* produces. One packet a tick keeps up only while a round trip's frames
|
|
150
|
+
* fit one packet; past that the owed range grows until it meets the
|
|
151
|
+
* ring floor and frames are lost.
|
|
152
|
+
*
|
|
153
|
+
* It is also the bandwidth ceiling under catch-up — this many MTUs per
|
|
154
|
+
* tick per peer — and it has to stay inside the channel's ack window.
|
|
155
|
+
* A peer's ack header covers its latest 33 seqs, so with a peer that
|
|
156
|
+
* replies once a tick, `33 / max_packets_per_tick` consecutive lost
|
|
157
|
+
* replies leave a delivered packet outside the window and it is
|
|
158
|
+
* declared lost: a wasted re-send rather than a defect, since the
|
|
159
|
+
* receiver skips frames it has already applied. Eight tolerates three
|
|
160
|
+
* such losses in a row (one tick in sixteen at 50% loss, one in ten
|
|
161
|
+
* thousand at 10%), and lets a 60 Hz stream at 100 ms RTT carry a full
|
|
162
|
+
* packet of actions per frame. Lower it for peers that reply less often
|
|
163
|
+
* than every tick.
|
|
164
|
+
*
|
|
165
|
+
* @type {number}
|
|
166
|
+
*/
|
|
167
|
+
max_packets_per_tick: number;
|
|
130
168
|
/**
|
|
131
169
|
* Optional per-tick mutation tracker. When a `MutationLedger` is supplied,
|
|
132
170
|
* this peer records each tick's affected network IDs into a fresh
|
|
@@ -325,9 +363,10 @@ export class NetworkPeer {
|
|
|
325
363
|
* by the caller. Records the tick's accumulated mutations into the
|
|
326
364
|
* MutationLedger (if configured), then packs frames
|
|
327
365
|
* `[last_acked+1, current_frame]` for each peer via
|
|
328
|
-
* `Replicator.pack_for_peer
|
|
329
|
-
*
|
|
330
|
-
*
|
|
366
|
+
* `Replicator.pack_for_peer` into up to {@link max_packets_per_tick}
|
|
367
|
+
* channel packets, each the next slice of that range. Empty packs (no
|
|
368
|
+
* in-scope actions) are not sent. Clears the per-tick changed-entity set
|
|
369
|
+
* after recording.
|
|
331
370
|
*
|
|
332
371
|
* @param {number} current_frame
|
|
333
372
|
*/
|
|
@@ -456,9 +495,18 @@ export class NetworkPeer {
|
|
|
456
495
|
* the receiver reassembles a fragmented message all-or-nothing, so the frame
|
|
457
496
|
* range is confirmed only when `unacked` reaches zero without `abandoned`
|
|
458
497
|
* having been set by a loss along the way.
|
|
498
|
+
*
|
|
499
|
+
* A tick may make several sends to one peer, each carrying the next slice of
|
|
500
|
+
* the owed range (see {@link NetworkPeerflush_outbound }). They confirm
|
|
501
|
+
* independently, and the baseline advances only through slices confirmed in
|
|
502
|
+
* order — a later slice landing says nothing about an earlier one still in
|
|
503
|
+
* flight. `head` marks the first slice of a tick, whose start is the pack
|
|
504
|
+
* start itself; see {@link NetworkPeer__credit_confirmed }.
|
|
459
505
|
*/
|
|
460
506
|
export type PendingAck = {
|
|
507
|
+
frame_start: number;
|
|
461
508
|
frame_end: number;
|
|
509
|
+
head: boolean;
|
|
462
510
|
unacked: number;
|
|
463
511
|
abandoned: boolean;
|
|
464
512
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkPeer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/network/orchestrator/NetworkPeer.js"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"NetworkPeer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/network/orchestrator/NetworkPeer.js"],"names":[],"mappings":"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"}
|