@aura3d/engine 4.2.0 → 4.3.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 +1 -1
- package/dist/aura3d-cli/cli-help.d.ts.map +1 -1
- package/dist/aura3d-cli/cli-help.js +4 -2
- package/dist/aura3d-cli/cli-help.js.map +1 -1
- package/dist/aura3d-cli/cli.js +85 -2
- package/dist/aura3d-cli/cli.js.map +1 -1
- package/dist/aura3d-cli/commands/assets/index.js +2 -2
- package/dist/aura3d-cli/commands/assets/index.js.map +1 -1
- package/dist/aura3d-cli/commands/meshyLedger.d.ts +125 -14
- package/dist/aura3d-cli/commands/meshyLedger.d.ts.map +1 -1
- package/dist/aura3d-cli/commands/meshyLedger.js +262 -35
- package/dist/aura3d-cli/commands/meshyLedger.js.map +1 -1
- package/dist/aura3d-cli/commands/prd13/run.js +19 -16
- package/dist/aura3d-cli/commands/prd13/run.js.map +1 -1
- package/dist/aura3d-cli/index.d.ts +10 -0
- package/dist/aura3d-cli/index.d.ts.map +1 -1
- package/dist/aura3d-cli/index.js +13 -0
- package/dist/aura3d-cli/index.js.map +1 -1
- package/dist/aura3d-cli/skin/analysis.d.ts +137 -0
- package/dist/aura3d-cli/skin/analysis.d.ts.map +1 -0
- package/dist/aura3d-cli/skin/analysis.js +382 -0
- package/dist/aura3d-cli/skin/analysis.js.map +1 -0
- package/dist/aura3d-cli/skin/command.d.ts +75 -0
- package/dist/aura3d-cli/skin/command.d.ts.map +1 -0
- package/dist/aura3d-cli/skin/command.js +208 -0
- package/dist/aura3d-cli/skin/command.js.map +1 -0
- package/dist/aura3d-cli/skin/glbEdit.d.ts +14 -0
- package/dist/aura3d-cli/skin/glbEdit.d.ts.map +1 -0
- package/dist/aura3d-cli/skin/glbEdit.js +152 -0
- package/dist/aura3d-cli/skin/glbEdit.js.map +1 -0
- package/dist/aura3d-cli/skin/gltf.d.ts +159 -0
- package/dist/aura3d-cli/skin/gltf.d.ts.map +1 -0
- package/dist/aura3d-cli/skin/gltf.js +379 -0
- package/dist/aura3d-cli/skin/gltf.js.map +1 -0
- package/dist/aura3d-cli/skin/rebuildLimbs.d.ts +31 -0
- package/dist/aura3d-cli/skin/rebuildLimbs.d.ts.map +1 -0
- package/dist/aura3d-cli/skin/rebuildLimbs.js +326 -0
- package/dist/aura3d-cli/skin/rebuildLimbs.js.map +1 -0
- package/dist/aura3d-cli/skin/refitSkeleton.d.ts +23 -0
- package/dist/aura3d-cli/skin/refitSkeleton.d.ts.map +1 -0
- package/dist/aura3d-cli/skin/refitSkeleton.js +288 -0
- package/dist/aura3d-cli/skin/refitSkeleton.js.map +1 -0
- package/dist/aura3d-cli/skin/repair.d.ts +45 -0
- package/dist/aura3d-cli/skin/repair.d.ts.map +1 -0
- package/dist/aura3d-cli/skin/repair.js +192 -0
- package/dist/aura3d-cli/skin/repair.js.map +1 -0
- package/dist/create-aura3d/index.js +1 -1
- package/dist/engine/agent-api/camera/layers.d.ts.map +1 -1
- package/dist/engine/agent-api/camera/layers.js +6 -1
- package/dist/engine/agent-api/camera/layers.js.map +1 -1
- package/dist/engine/agent-api/compiler/customMaterial.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/customMaterial.js +12 -1
- package/dist/engine/agent-api/compiler/customMaterial.js.map +1 -1
- package/dist/engine/agent-api/compiler/lines.d.ts.map +1 -1
- package/dist/engine/agent-api/compiler/lines.js +8 -6
- package/dist/engine/agent-api/compiler/lines.js.map +1 -1
- package/dist/engine/agent-api/nodes/types.d.ts +6 -0
- package/dist/engine/agent-api/nodes/types.d.ts.map +1 -1
- package/dist/engine/agent-api/vfx/effects-api.d.ts.map +1 -1
- package/dist/engine/agent-api/vfx/effects-api.js +12 -3
- package/dist/engine/agent-api/vfx/effects-api.js.map +1 -1
- package/dist/engine/agent-api/vfx/gameEffects.d.ts.map +1 -1
- package/dist/engine/agent-api/vfx/gameEffects.js +20 -3
- package/dist/engine/agent-api/vfx/gameEffects.js.map +1 -1
- package/dist/engine/contracts/camera.d.ts +1 -0
- package/dist/engine/contracts/camera.d.ts.map +1 -1
- package/dist/engine/contracts/effects.d.ts +4 -2
- package/dist/engine/contracts/effects.d.ts.map +1 -1
- package/dist/engine/contracts/effects.js.map +1 -1
- package/dist/game/index.d.ts +2 -2
- package/dist/game/index.d.ts.map +1 -1
- package/dist/game/index.js +1 -1
- package/dist/game/index.js.map +1 -1
- package/dist/game/motion/facing.d.ts +30 -0
- package/dist/game/motion/facing.d.ts.map +1 -0
- package/dist/game/motion/facing.js +50 -0
- package/dist/game/motion/facing.js.map +1 -0
- package/dist/game/motion/handBounce.d.ts +251 -0
- package/dist/game/motion/handBounce.d.ts.map +1 -0
- package/dist/game/motion/handBounce.js +315 -0
- package/dist/game/motion/handBounce.js.map +1 -0
- package/dist/game/motion/index.d.ts +6 -0
- package/dist/game/motion/index.d.ts.map +1 -1
- package/dist/game/motion/index.js +3 -0
- package/dist/game/motion/index.js.map +1 -1
- package/dist/game/motion/twoHandGrip.d.ts +229 -0
- package/dist/game/motion/twoHandGrip.d.ts.map +1 -0
- package/dist/game/motion/twoHandGrip.js +413 -0
- package/dist/game/motion/twoHandGrip.js.map +1 -0
- package/dist/game/session/warmPrograms.d.ts +17 -0
- package/dist/game/session/warmPrograms.d.ts.map +1 -1
- package/dist/game/session/warmPrograms.js +18 -1
- package/dist/game/session/warmPrograms.js.map +1 -1
- package/dist/physics/ensure.d.ts +2 -0
- package/dist/physics/ensure.d.ts.map +1 -0
- package/dist/physics/ensure.js +4 -0
- package/dist/physics/ensure.js.map +1 -0
- package/dist/physics/index.d.ts +1 -0
- package/dist/physics/index.d.ts.map +1 -1
- package/dist/physics/index.js +1 -0
- package/dist/physics/index.js.map +1 -1
- package/dist/physics/world.d.ts +1 -0
- package/dist/physics/world.d.ts.map +1 -1
- package/dist/physics/world.js +1 -0
- package/dist/physics/world.js.map +1 -1
- package/dist/physics-rapier/index.d.ts +2 -0
- package/dist/physics-rapier/index.d.ts.map +1 -1
- package/dist/physics-rapier/index.js +12 -10
- package/dist/physics-rapier/index.js.map +1 -1
- package/dist/physics-rapier/rapierInit.d.ts +6 -0
- package/dist/physics-rapier/rapierInit.d.ts.map +1 -0
- package/dist/physics-rapier/rapierInit.js +12 -0
- package/dist/physics-rapier/rapierInit.js.map +1 -0
- package/dist/physics-rapier/rapierInit.lazy.d.ts +6 -0
- package/dist/physics-rapier/rapierInit.lazy.d.ts.map +1 -0
- package/dist/physics-rapier/rapierInit.lazy.js +19 -0
- package/dist/physics-rapier/rapierInit.lazy.js.map +1 -0
- package/dist/rendering/DepthPass.d.ts.map +1 -1
- package/dist/rendering/DepthPass.js +30 -8
- package/dist/rendering/DepthPass.js.map +1 -1
- package/dist/rendering/ForwardPass.d.ts.map +1 -1
- package/dist/rendering/ForwardPass.js +7 -0
- package/dist/rendering/ForwardPass.js.map +1 -1
- package/dist/rendering/Renderer.d.ts +0 -2
- package/dist/rendering/Renderer.d.ts.map +1 -1
- package/dist/rendering/Renderer.js +6 -16
- package/dist/rendering/Renderer.js.map +1 -1
- package/dist/rendering/contracts/output.d.ts +9 -1
- package/dist/rendering/contracts/output.d.ts.map +1 -1
- package/dist/rendering/contracts/output.js.map +1 -1
- package/dist/rendering/output/OutputPass.d.ts +2 -0
- package/dist/rendering/output/OutputPass.d.ts.map +1 -1
- package/dist/rendering/output/OutputPass.js +26 -3
- package/dist/rendering/output/OutputPass.js.map +1 -1
- package/dist/rendering/output/ToneMappingOperators.glsl.d.ts +3 -1
- package/dist/rendering/output/ToneMappingOperators.glsl.d.ts.map +1 -1
- package/dist/rendering/output/ToneMappingOperators.glsl.js +19 -1
- package/dist/rendering/output/ToneMappingOperators.glsl.js.map +1 -1
- package/dist/rendering/post/v2Stages.d.ts +2 -7
- package/dist/rendering/post/v2Stages.d.ts.map +1 -1
- package/dist/rendering/post/v2Stages.js +2 -17
- package/dist/rendering/post/v2Stages.js.map +1 -1
- package/dist/rendering/post/vignetteColor.d.ts +8 -0
- package/dist/rendering/post/vignetteColor.d.ts.map +1 -0
- package/dist/rendering/post/vignetteColor.js +18 -0
- package/dist/rendering/post/vignetteColor.js.map +1 -0
- package/dist/rendering/renderer/PostprocessExecution.d.ts +10 -0
- package/dist/rendering/renderer/PostprocessExecution.d.ts.map +1 -1
- package/dist/rendering/renderer/PostprocessExecution.js +38 -38
- package/dist/rendering/renderer/PostprocessExecution.js.map +1 -1
- package/dist/rendering/renderer/coreOutputPostRoute.d.ts +25 -17
- package/dist/rendering/renderer/coreOutputPostRoute.d.ts.map +1 -1
- package/dist/rendering/renderer/coreOutputPostRoute.js +27 -18
- package/dist/rendering/renderer/coreOutputPostRoute.js.map +1 -1
- package/dist/rendering/renderer/qrSubFlags.d.ts +1 -1
- package/dist/rendering/renderer/qrSubFlags.d.ts.map +1 -1
- package/dist/rendering/renderer/qrSubFlags.js +2 -8
- package/dist/rendering/renderer/qrSubFlags.js.map +1 -1
- package/dist/rendering/shaders/chunks/author/index.d.ts.map +1 -1
- package/dist/rendering/shaders/chunks/author/index.js +7 -0
- package/dist/rendering/shaders/chunks/author/index.js.map +1 -1
- package/dist/rendering/shaders/chunks/author/shadow.glsl.d.ts +11 -0
- package/dist/rendering/shaders/chunks/author/shadow.glsl.d.ts.map +1 -0
- package/dist/rendering/shaders/chunks/author/shadow.glsl.js +57 -0
- package/dist/rendering/shaders/chunks/author/shadow.glsl.js.map +1 -0
- package/dist/rendering/shadows/DirectionalCascadeFitter.d.ts +20 -0
- package/dist/rendering/shadows/DirectionalCascadeFitter.d.ts.map +1 -1
- package/dist/rendering/shadows/DirectionalCascadeFitter.js +80 -7
- package/dist/rendering/shadows/DirectionalCascadeFitter.js.map +1 -1
- package/dist/rendering/shadows/Prd02DepthShaderLibrary.d.ts.map +1 -1
- package/dist/rendering/shadows/Prd02DepthShaderLibrary.js +9 -1
- package/dist/rendering/shadows/Prd02DepthShaderLibrary.js.map +1 -1
- package/dist/rendering/shadows/ShadowSystem.d.ts.map +1 -1
- package/dist/rendering/shadows/ShadowSystem.js +7 -2
- package/dist/rendering/shadows/ShadowSystem.js.map +1 -1
- package/dist/rendering/webgl2/LdrPostprocessShader.d.ts +2 -0
- package/dist/rendering/webgl2/LdrPostprocessShader.d.ts.map +1 -1
- package/dist/rendering/webgl2/LdrPostprocessShader.js +25 -3
- package/dist/rendering/webgl2/LdrPostprocessShader.js.map +1 -1
- package/dist/rendering/webgl2/LegacyPost.d.ts +11 -2
- package/dist/rendering/webgl2/LegacyPost.d.ts.map +1 -1
- package/dist/rendering/webgl2/LegacyPost.js +191 -16
- package/dist/rendering/webgl2/LegacyPost.js.map +1 -1
- package/package.json +33 -26
- package/templates/cinematic-scene/package.json +2 -2
- package/templates/mini-game/package.json +2 -2
- package/templates/product-viewer/package.json +2 -2
- package/templates/production-asset-inspector/package.json +1 -1
- package/templates/production-material-studio/package.json +1 -1
- package/templates/production-product-configurator/package.json +1 -1
- package/templates/production-product-viewer/package.json +1 -1
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Two-handed grip: a held object (bat, club, racket, staff, sword, tool) with a bottom hand at its grip point and a top hand a fixed
|
|
3
|
+
* spread up its axis. Two-bone IK puts both drawn palms on the handle, a forearm twist rolls the object onto the wanted direction,
|
|
4
|
+
* and the elbow swings around its circle of solutions until the forearm sits at the grip's own angle to that direction.
|
|
5
|
+
*
|
|
6
|
+
* Pure maths, no engine calls and no wall clock: the game feeds a pose target per fixed step and applies the returned bone
|
|
7
|
+
* rotations (`poseBonesForEngine`) and object transform itself. All vectors are in the actor's local frame (+Y up). The "R" hand
|
|
8
|
+
* is the bottom hand (at the grip point), "L" the top hand; a left-handed stance uses `mirrorTwoHandGripRig`.
|
|
9
|
+
*/
|
|
10
|
+
const clamp = (v, lo, hi) => Math.max(lo, Math.min(hi, v));
|
|
11
|
+
const lerp = (a, b, t) => a + (b - a) * t;
|
|
12
|
+
const smoothstep = (t) => (t <= 0 ? 0 : t >= 1 ? 1 : t * t * (3 - 2 * t));
|
|
13
|
+
export const GRIP_Q_ID = [0, 0, 0, 1];
|
|
14
|
+
export const gripQNorm = (q) => {
|
|
15
|
+
const l = Math.hypot(q[0], q[1], q[2], q[3]) || 1;
|
|
16
|
+
return [q[0] / l, q[1] / l, q[2] / l, q[3] / l];
|
|
17
|
+
};
|
|
18
|
+
export const gripQMul = (a, b) => {
|
|
19
|
+
const [ax, ay, az, aw] = a;
|
|
20
|
+
const [bx, by, bz, bw] = b;
|
|
21
|
+
return [aw * bx + ax * bw + ay * bz - az * by, aw * by - ax * bz + ay * bw + az * bx, aw * bz + ax * by - ay * bx + az * bw, aw * bw - ax * bx - ay * by - az * bz];
|
|
22
|
+
};
|
|
23
|
+
export const gripQConj = (q) => [-q[0], -q[1], -q[2], q[3]];
|
|
24
|
+
export const gripQAxis = (axis, angle) => {
|
|
25
|
+
const l = Math.hypot(axis[0], axis[1], axis[2]) || 1;
|
|
26
|
+
const h = angle / 2;
|
|
27
|
+
const s = Math.sin(h);
|
|
28
|
+
return gripQNorm([(axis[0] / l) * s, (axis[1] / l) * s, (axis[2] / l) * s, Math.cos(h)]);
|
|
29
|
+
};
|
|
30
|
+
export const gripQRot = (q, v) => {
|
|
31
|
+
const t = [2 * (q[1] * v[2] - q[2] * v[1]), 2 * (q[2] * v[0] - q[0] * v[2]), 2 * (q[0] * v[1] - q[1] * v[0])];
|
|
32
|
+
const c = [q[1] * t[2] - q[2] * t[1], q[2] * t[0] - q[0] * t[2], q[0] * t[1] - q[1] * t[0]];
|
|
33
|
+
return [v[0] + t[0] * q[3] + c[0], v[1] + t[1] * q[3] + c[1], v[2] + t[2] * q[3] + c[2]];
|
|
34
|
+
};
|
|
35
|
+
/** Robust rotation taking normalized vector a to normalized vector b. */
|
|
36
|
+
export const gripQFromTo = (a, b) => {
|
|
37
|
+
const d = a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
38
|
+
if (d > 0.99999)
|
|
39
|
+
return GRIP_Q_ID;
|
|
40
|
+
if (d < -0.99999) {
|
|
41
|
+
const axis = [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
|
|
42
|
+
const alt = Math.hypot(axis[0], axis[2]) < 1e-6 ? [0, 0, 1] : [1, 0, 0];
|
|
43
|
+
const c = [a[1] * alt[2] - a[2] * alt[1], a[2] * alt[0] - a[0] * alt[2], a[0] * alt[1] - a[1] * alt[0]];
|
|
44
|
+
return gripQAxis(c, Math.PI);
|
|
45
|
+
}
|
|
46
|
+
return gripQNorm([a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0], 1 + d]);
|
|
47
|
+
};
|
|
48
|
+
/** Quaternion to XYZ-intrinsic Euler radians (the engine's `eulerXYZFromQuat` convention). */
|
|
49
|
+
export const gripQToEulerXYZ = (q) => {
|
|
50
|
+
const [x, y, z, w] = gripQNorm(q);
|
|
51
|
+
const m13 = 2 * (x * z + y * w);
|
|
52
|
+
const pitch = Math.asin(clamp(m13, -1, 1));
|
|
53
|
+
if (Math.abs(m13) >= 0.9999999) {
|
|
54
|
+
const m32 = 2 * (y * z + x * w);
|
|
55
|
+
const m22 = 2 * (x * x + w * w);
|
|
56
|
+
return [Math.atan2(m32, m22), pitch, 0];
|
|
57
|
+
}
|
|
58
|
+
const m11 = 1 - 2 * (y * y + z * z);
|
|
59
|
+
const m12 = 2 * (x * y - z * w);
|
|
60
|
+
const m23 = 2 * (y * z - x * w);
|
|
61
|
+
const m33 = 1 - 2 * (x * x + y * y);
|
|
62
|
+
return [Math.atan2(-m23, m33), pitch, Math.atan2(-m12, m11)];
|
|
63
|
+
};
|
|
64
|
+
/** Quaternion to Euler radians for the engine's default node rotation order "ZYX" (matrix Rz*Ry*Rx), which `setRotation(x, y, z)` on a route node uses. Applying XYZ angles to a ZYX node tilts the object the wrong way. */
|
|
65
|
+
export const gripQToEulerZYX = (q) => {
|
|
66
|
+
const [x, y, z, w] = gripQNorm(q);
|
|
67
|
+
const m11 = 1 - 2 * (y * y + z * z);
|
|
68
|
+
const m21 = 2 * (x * y + z * w);
|
|
69
|
+
const m31 = 2 * (x * z - y * w);
|
|
70
|
+
const m32 = 2 * (y * z + x * w);
|
|
71
|
+
const m33 = 1 - 2 * (x * x + y * y);
|
|
72
|
+
const m12 = 2 * (x * y - z * w);
|
|
73
|
+
const m22 = 1 - 2 * (x * x + z * z);
|
|
74
|
+
const ry = Math.asin(clamp(-m31, -1, 1));
|
|
75
|
+
if (Math.abs(m31) < 0.9999999)
|
|
76
|
+
return [Math.atan2(m32, m33), ry, Math.atan2(m21, m11)];
|
|
77
|
+
return [0, ry, Math.atan2(-m12, m22)];
|
|
78
|
+
};
|
|
79
|
+
export const gripUnit = (v) => {
|
|
80
|
+
const l = Math.hypot(v[0], v[1], v[2]) || 1;
|
|
81
|
+
return [v[0] / l, v[1] / l, v[2] / l];
|
|
82
|
+
};
|
|
83
|
+
/** Rotate about +Y (positive angle turns +X toward -Z, the chest-yaw convention of the solver). */
|
|
84
|
+
export const gripRotY = (angle, v) => {
|
|
85
|
+
const c = Math.cos(angle);
|
|
86
|
+
const s = Math.sin(angle);
|
|
87
|
+
return [v[0] * c + v[2] * s, v[1], -v[0] * s + v[2] * c];
|
|
88
|
+
};
|
|
89
|
+
/** Two-bone IK: elbow position for shoulder to target with an elbow-hint pole direction; targets past the arm's reach are clamped to it. */
|
|
90
|
+
export function solveGripTwoBone(shoulder, target, pole, l1, l2) {
|
|
91
|
+
const to = [target[0] - shoulder[0], target[1] - shoulder[1], target[2] - shoulder[2]];
|
|
92
|
+
const dRaw = Math.hypot(to[0], to[1], to[2]);
|
|
93
|
+
const d = clamp(dRaw, Math.abs(l1 - l2) + 1e-4, l1 + l2 - 1e-4);
|
|
94
|
+
const n = dRaw < 1e-6 ? [0, 0, 1] : [to[0] / dRaw, to[1] / dRaw, to[2] / dRaw];
|
|
95
|
+
const a = (l1 * l1 - l2 * l2 + d * d) / (2 * d);
|
|
96
|
+
const h = Math.sqrt(Math.max(0, l1 * l1 - a * a));
|
|
97
|
+
const pd = pole[0] * n[0] + pole[1] * n[1] + pole[2] * n[2];
|
|
98
|
+
let b = [pole[0] - n[0] * pd, pole[1] - n[1] * pd, pole[2] - n[2] * pd];
|
|
99
|
+
const bl = Math.hypot(b[0], b[1], b[2]);
|
|
100
|
+
b = bl < 1e-5 ? gripUnit([n[1], n[2], n[0]]) : [b[0] / bl, b[1] / bl, b[2] / bl];
|
|
101
|
+
return [shoulder[0] + n[0] * a + b[0] * h, shoulder[1] + n[1] * a + b[1] * h, shoulder[2] + n[2] * a + b[2] * h];
|
|
102
|
+
}
|
|
103
|
+
/** Elbow for shoulder to target with the hint pole rotated by `gamma` about the shoulder-to-target axis (the elbow's circle of solutions). */
|
|
104
|
+
export function orbitGripElbow(shoulder, target, pole, l1, l2, gamma) {
|
|
105
|
+
const e0 = solveGripTwoBone(shoulder, target, pole, l1, l2);
|
|
106
|
+
if (gamma === 0)
|
|
107
|
+
return e0;
|
|
108
|
+
const to = [target[0] - shoulder[0], target[1] - shoulder[1], target[2] - shoulder[2]];
|
|
109
|
+
const n = gripUnit(to);
|
|
110
|
+
const r = [e0[0] - shoulder[0], e0[1] - shoulder[1], e0[2] - shoulder[2]];
|
|
111
|
+
const rn = r[0] * n[0] + r[1] * n[1] + r[2] * n[2];
|
|
112
|
+
const along = [n[0] * rn, n[1] * rn, n[2] * rn];
|
|
113
|
+
const perp = [r[0] - along[0], r[1] - along[1], r[2] - along[2]];
|
|
114
|
+
const cr = [n[1] * perp[2] - n[2] * perp[1], n[2] * perp[0] - n[0] * perp[2], n[0] * perp[1] - n[1] * perp[0]];
|
|
115
|
+
const c = Math.cos(gamma);
|
|
116
|
+
const sn = Math.sin(gamma);
|
|
117
|
+
return [
|
|
118
|
+
shoulder[0] + along[0] + perp[0] * c + cr[0] * sn,
|
|
119
|
+
shoulder[1] + along[1] + perp[1] * c + cr[1] * sn,
|
|
120
|
+
shoulder[2] + along[2] + perp[2] * c + cr[2] * sn
|
|
121
|
+
];
|
|
122
|
+
}
|
|
123
|
+
/** Twist (radians) about `axis` that rolls the rotated grip axis `a` onto `d`, compared as azimuths about `axis` and unwrapped against `prev`. */
|
|
124
|
+
export function gripAzimuthTwist(a, axis, d, prev) {
|
|
125
|
+
const aDot = a[0] * axis[0] + a[1] * axis[1] + a[2] * axis[2];
|
|
126
|
+
const dDot = d[0] * axis[0] + d[1] * axis[1] + d[2] * axis[2];
|
|
127
|
+
const aPerp = [a[0] - axis[0] * aDot, a[1] - axis[1] * aDot, a[2] - axis[2] * aDot];
|
|
128
|
+
const dPerp = [d[0] - axis[0] * dDot, d[1] - axis[1] * dDot, d[2] - axis[2] * dDot];
|
|
129
|
+
const cr = [aPerp[1] * dPerp[2] - aPerp[2] * dPerp[1], aPerp[2] * dPerp[0] - aPerp[0] * dPerp[2], aPerp[0] * dPerp[1] - aPerp[1] * dPerp[0]];
|
|
130
|
+
let tau = Math.atan2(cr[0] * axis[0] + cr[1] * axis[1] + cr[2] * axis[2], aPerp[0] * dPerp[0] + aPerp[1] * dPerp[1] + aPerp[2] * dPerp[2]);
|
|
131
|
+
while (tau - prev > Math.PI)
|
|
132
|
+
tau -= 2 * Math.PI;
|
|
133
|
+
while (tau - prev < -Math.PI)
|
|
134
|
+
tau += 2 * Math.PI;
|
|
135
|
+
return tau;
|
|
136
|
+
}
|
|
137
|
+
export const DEFAULT_GRIP_BONE_NAMES = {
|
|
138
|
+
hips: "Hips",
|
|
139
|
+
spine: "Spine",
|
|
140
|
+
chest: "Chest",
|
|
141
|
+
rightUpperArm: "RightUpperArm",
|
|
142
|
+
rightForearm: "RightForearm",
|
|
143
|
+
leftUpperArm: "LeftUpperArm",
|
|
144
|
+
leftForearm: "LeftForearm"
|
|
145
|
+
};
|
|
146
|
+
const flexOf = (sh, el, hand) => {
|
|
147
|
+
const ua = gripUnit([el[0] - sh[0], el[1] - sh[1], el[2] - sh[2]]);
|
|
148
|
+
const fa = gripUnit([hand[0] - el[0], hand[1] - el[1], hand[2] - el[2]]);
|
|
149
|
+
return Math.acos(clamp(ua[0] * fa[0] + ua[1] * fa[1] + ua[2] * fa[2], -1, 1));
|
|
150
|
+
};
|
|
151
|
+
/** Where the relaxed top hand hangs (actor frame), relative to its shoulder: down the arm, slightly forward. */
|
|
152
|
+
export function relaxedTopHand(rig, shoulderL) {
|
|
153
|
+
const reach = (rig.upperArm + rig.foreHand) * 0.85;
|
|
154
|
+
return [shoulderL[0] + 0.04, shoulderL[1] - reach, shoulderL[2] + 0.1];
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Calibrate the object socket from a stance: the rotation that puts the object's axis along `stanceDir` while the bottom hand holds `stanceK`
|
|
158
|
+
* with the given elbow hint, and the forearm-to-axis cosine the elbow orbit then holds for every other pose.
|
|
159
|
+
*/
|
|
160
|
+
export function calibrateGripSocket(body, stance) {
|
|
161
|
+
const sr = gripRotY(stance.phi, body.shoulderR);
|
|
162
|
+
const shoulder = [body.chestBind[0] + sr[0], body.chestBind[1] + sr[1], body.chestBind[2] + sr[2]];
|
|
163
|
+
const elbow = solveGripTwoBone(shoulder, stance.K, stance.pole, body.upperArm, body.foreHand);
|
|
164
|
+
const faDir = gripUnit([stance.K[0] - elbow[0], stance.K[1] - elbow[1], stance.K[2] - elbow[2]]);
|
|
165
|
+
const qFa = gripQFromTo(body.bindDirFA, faDir);
|
|
166
|
+
const socketRot = gripQMul(gripQConj(qFa), gripQFromTo([1, 0, 0], stance.D));
|
|
167
|
+
const coneCos = faDir[0] * stance.D[0] + faDir[1] * stance.D[1] + faDir[2] * stance.D[2];
|
|
168
|
+
return { socketRot, coneCos };
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Solve one pose. The bottom hand IKs onto `K`; the elbow is swung round its circle of solutions until the forearm sits at the grip's
|
|
172
|
+
* fixed angle to the wanted object direction `D` (preferring the elbow nearest the previous frame's, `prev.gamma`); a forearm twist rolls
|
|
173
|
+
* the socketed object onto `D`; the top hand then IKs onto the point `gripSpread` up the object's real axis and rolls onto it the same way.
|
|
174
|
+
*/
|
|
175
|
+
export function solveTwoHandGrip(rig, target, prev = {}, options = {}) {
|
|
176
|
+
const { K, D, phi, hip, pole: poleR } = target;
|
|
177
|
+
const prevTau = prev.tau ?? 0;
|
|
178
|
+
const prevTauL = prev.tauL ?? 0;
|
|
179
|
+
const prevGamma = prev.gamma ?? 0;
|
|
180
|
+
const names = rig.boneNames ?? DEFAULT_GRIP_BONE_NAMES;
|
|
181
|
+
const chest = [rig.chestBind[0] + hip[0], rig.chestBind[1] + hip[1], rig.chestBind[2] + hip[2]];
|
|
182
|
+
const sr = gripRotY(phi, rig.shoulderR);
|
|
183
|
+
const sl = gripRotY(phi, rig.shoulderL);
|
|
184
|
+
const shRt = [chest[0] + sr[0], chest[1] + sr[1], chest[2] + sr[2]];
|
|
185
|
+
const shLt = [chest[0] + sl[0], chest[1] + sl[1], chest[2] + sl[2]];
|
|
186
|
+
let gamma = prevGamma;
|
|
187
|
+
let bestCost = Infinity;
|
|
188
|
+
for (let i = 0; i < 96; i++) {
|
|
189
|
+
const g = -Math.PI + (2 * Math.PI * i) / 96;
|
|
190
|
+
const e = orbitGripElbow(shRt, K, poleR, rig.upperArm, rig.foreHand, g);
|
|
191
|
+
const f = gripUnit([K[0] - e[0], K[1] - e[1], K[2] - e[2]]);
|
|
192
|
+
const cosA = f[0] * D[0] + f[1] * D[1] + f[2] * D[2];
|
|
193
|
+
let dg = g - prevGamma;
|
|
194
|
+
while (dg > Math.PI)
|
|
195
|
+
dg -= 2 * Math.PI;
|
|
196
|
+
while (dg < -Math.PI)
|
|
197
|
+
dg += 2 * Math.PI;
|
|
198
|
+
const cost = (cosA - rig.coneCos) * (cosA - rig.coneCos) + 0.004 * dg * dg;
|
|
199
|
+
if (cost < bestCost) {
|
|
200
|
+
bestCost = cost;
|
|
201
|
+
gamma = g;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
const eR = orbitGripElbow(shRt, K, poleR, rig.upperArm, rig.foreHand, gamma);
|
|
205
|
+
const faDir = gripUnit([K[0] - eR[0], K[1] - eR[1], K[2] - eR[2]]);
|
|
206
|
+
const qUaR = gripQFromTo(rig.bindDirUA, gripUnit([eR[0] - shRt[0], eR[1] - shRt[1], eR[2] - shRt[2]]));
|
|
207
|
+
const qFaZt = gripQFromTo(rig.bindDirFA, faDir);
|
|
208
|
+
const tau = gripAzimuthTwist(gripQRot(gripQMul(qFaZt, rig.socketRot), [1, 0, 0]), faDir, D, prevTau);
|
|
209
|
+
const qFa = gripQMul(gripQAxis(faDir, tau), qFaZt);
|
|
210
|
+
const objectRot = gripQMul(qFa, rig.socketRot);
|
|
211
|
+
const objectDir = gripQRot(objectRot, [1, 0, 0]);
|
|
212
|
+
const palmOff = gripQRot(qFa, rig.palmR);
|
|
213
|
+
const palm = [eR[0] + palmOff[0], eR[1] + palmOff[1], eR[2] + palmOff[2]];
|
|
214
|
+
// The top hand grips the object where it really is (palm plus the socketed object's own direction), not where D asked for it.
|
|
215
|
+
const gripped = [palm[0] + objectDir[0] * rig.gripSpread, palm[1] + objectDir[1] * rig.gripSpread, palm[2] + objectDir[2] * rig.gripSpread];
|
|
216
|
+
const release = clamp(options.release ?? 0, 0, 1);
|
|
217
|
+
let targetL = gripped;
|
|
218
|
+
if (release > 0) {
|
|
219
|
+
const rest = relaxedTopHand(rig, shLt);
|
|
220
|
+
const u = smoothstep(release);
|
|
221
|
+
targetL = [lerp(gripped[0], rest[0], u), lerp(gripped[1], rest[1], u), lerp(gripped[2], rest[2], u)];
|
|
222
|
+
}
|
|
223
|
+
const eL = solveGripTwoBone(shLt, targetL, rig.poleL, rig.upperArm, rig.foreHand);
|
|
224
|
+
const faDirL = gripUnit([targetL[0] - eL[0], targetL[1] - eL[1], targetL[2] - eL[2]]);
|
|
225
|
+
const qFaLZt = gripQFromTo(rig.bindDirFAL, faDirL);
|
|
226
|
+
// Top hand: the mirror of the bottom hand's grip axis, rolled onto the object the same way (free-hanging when released).
|
|
227
|
+
const gripR = gripQRot(rig.socketRot, [1, 0, 0]);
|
|
228
|
+
const gripL = [-gripR[0], gripR[1], gripR[2]];
|
|
229
|
+
const tauL = release >= 1 ? prevTauL : gripAzimuthTwist(gripQRot(qFaLZt, gripL), faDirL, objectDir, prevTauL);
|
|
230
|
+
const qFaL = gripQMul(gripQAxis(faDirL, tauL), qFaLZt);
|
|
231
|
+
const qChest = gripQAxis([0, 1, 0], phi);
|
|
232
|
+
const qUaL = gripQFromTo(rig.bindDirUAL, gripUnit([eL[0] - shLt[0], eL[1] - shLt[1], eL[2] - shLt[2]]));
|
|
233
|
+
const palmLOff = gripQRot(qFaL, rig.palmL);
|
|
234
|
+
const palmL = [eL[0] + palmLOff[0], eL[1] + palmLOff[1], eL[2] + palmLOff[2]];
|
|
235
|
+
const bones = {
|
|
236
|
+
[names.hips]: { position: [rig.hipsBind[0] + hip[0], rig.hipsBind[1] + hip[1], rig.hipsBind[2] + hip[2]] },
|
|
237
|
+
// Pin the spine so the chest forward kinematics the socket was calibrated against is exact.
|
|
238
|
+
[names.spine]: { rotation: GRIP_Q_ID },
|
|
239
|
+
[names.chest]: { rotation: qChest },
|
|
240
|
+
[names.rightUpperArm]: { rotation: gripQMul(gripQConj(qChest), qUaR) },
|
|
241
|
+
[names.rightForearm]: { rotation: gripQMul(gripQConj(qUaR), qFa) },
|
|
242
|
+
[names.leftUpperArm]: { rotation: gripQMul(gripQConj(qChest), qUaL) },
|
|
243
|
+
[names.leftForearm]: { rotation: gripQMul(gripQConj(qUaL), qFaL) }
|
|
244
|
+
};
|
|
245
|
+
return {
|
|
246
|
+
bones,
|
|
247
|
+
tau,
|
|
248
|
+
tauL,
|
|
249
|
+
gamma,
|
|
250
|
+
qFa,
|
|
251
|
+
objectRot,
|
|
252
|
+
objectDir,
|
|
253
|
+
palm,
|
|
254
|
+
palmL,
|
|
255
|
+
targetL,
|
|
256
|
+
elbow: eR,
|
|
257
|
+
elbowL: eL,
|
|
258
|
+
chest,
|
|
259
|
+
shoulder: shRt,
|
|
260
|
+
shoulderL: shLt,
|
|
261
|
+
sweetPoint: [palm[0] + objectDir[0] * rig.sweetSpot, palm[1] + objectDir[1] * rig.sweetSpot, palm[2] + objectDir[2] * rig.sweetSpot],
|
|
262
|
+
tipPoint: [palm[0] + objectDir[0] * rig.objectLength, palm[1] + objectDir[1] * rig.objectLength, palm[2] + objectDir[2] * rig.objectLength],
|
|
263
|
+
flexR: flexOf(shRt, eR, palm),
|
|
264
|
+
flexL: flexOf(shLt, eL, palmL)
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
/** The same grip for the mirror-image stance (left-handed batter, golfer, hitter): x is flipped and the two arms swap roles. */
|
|
268
|
+
export function mirrorTwoHandGripBodyRig(rig) {
|
|
269
|
+
const m = (v) => [-v[0], v[1], v[2]];
|
|
270
|
+
const n = rig.boneNames ?? DEFAULT_GRIP_BONE_NAMES;
|
|
271
|
+
return {
|
|
272
|
+
...rig,
|
|
273
|
+
chestBind: m(rig.chestBind),
|
|
274
|
+
shoulderR: m(rig.shoulderL),
|
|
275
|
+
shoulderL: m(rig.shoulderR),
|
|
276
|
+
palmR: m(rig.palmL),
|
|
277
|
+
palmL: m(rig.palmR),
|
|
278
|
+
bindDirUA: m(rig.bindDirUAL),
|
|
279
|
+
bindDirFA: m(rig.bindDirFAL),
|
|
280
|
+
bindDirUAL: m(rig.bindDirUA),
|
|
281
|
+
bindDirFAL: m(rig.bindDirFA),
|
|
282
|
+
poleL: m(rig.poleL),
|
|
283
|
+
boneNames: {
|
|
284
|
+
...n,
|
|
285
|
+
rightUpperArm: n.leftUpperArm,
|
|
286
|
+
rightForearm: n.leftForearm,
|
|
287
|
+
leftUpperArm: n.rightUpperArm,
|
|
288
|
+
leftForearm: n.rightForearm
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
/** The engine's animation pose reads `{x,y,z}` and `{x,y,z,w}` objects: tuple arrays would leave every bone untouched. */
|
|
293
|
+
export function twoHandGripBonesForEngine(bones) {
|
|
294
|
+
const out = {};
|
|
295
|
+
for (const [name, b] of Object.entries(bones)) {
|
|
296
|
+
out[name] = {
|
|
297
|
+
...(b.position ? { position: { x: b.position[0], y: b.position[1], z: b.position[2] } } : {}),
|
|
298
|
+
...(b.rotation ? { rotation: { x: b.rotation[0], y: b.rotation[1], z: b.rotation[2], w: b.rotation[3] } } : {})
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
return out;
|
|
302
|
+
}
|
|
303
|
+
export function createTwoHandGrip(rig) {
|
|
304
|
+
let tau = 0;
|
|
305
|
+
let tauL = 0;
|
|
306
|
+
let gamma = 0;
|
|
307
|
+
let release = 0;
|
|
308
|
+
let steps = 0;
|
|
309
|
+
let pose = null;
|
|
310
|
+
return {
|
|
311
|
+
rig,
|
|
312
|
+
step(target, rel = 0) {
|
|
313
|
+
release = clamp(rel, 0, 1);
|
|
314
|
+
pose = solveTwoHandGrip(rig, target, { tau, tauL, gamma }, { release });
|
|
315
|
+
tau = pose.tau;
|
|
316
|
+
tauL = pose.tauL;
|
|
317
|
+
gamma = pose.gamma;
|
|
318
|
+
steps += 1;
|
|
319
|
+
return pose;
|
|
320
|
+
},
|
|
321
|
+
state: () => ({ tau, tauL, gamma, release, steps, pose }),
|
|
322
|
+
reset() {
|
|
323
|
+
tau = 0;
|
|
324
|
+
tauL = 0;
|
|
325
|
+
gamma = 0;
|
|
326
|
+
release = 0;
|
|
327
|
+
steps = 0;
|
|
328
|
+
pose = null;
|
|
329
|
+
}
|
|
330
|
+
};
|
|
331
|
+
}
|
|
332
|
+
/** Where the drawn palm centres: the mean of the hand's skinned vertices (a flat xyz array or a list of points). Use it so grip is measured against what the screen shows. */
|
|
333
|
+
export function handCentroid(vertices) {
|
|
334
|
+
const flat = vertices.length > 0 && typeof vertices[0] === "number";
|
|
335
|
+
let x = 0;
|
|
336
|
+
let y = 0;
|
|
337
|
+
let z = 0;
|
|
338
|
+
let n = 0;
|
|
339
|
+
if (flat) {
|
|
340
|
+
const f = vertices;
|
|
341
|
+
for (let i = 0; i + 2 < f.length; i += 3) {
|
|
342
|
+
x += f[i];
|
|
343
|
+
y += f[i + 1];
|
|
344
|
+
z += f[i + 2];
|
|
345
|
+
n += 1;
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
for (const p of vertices) {
|
|
350
|
+
x += p[0];
|
|
351
|
+
y += p[1];
|
|
352
|
+
z += p[2];
|
|
353
|
+
n += 1;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
return n === 0 ? [0, 0, 0] : [x / n, y / n, z / n];
|
|
357
|
+
}
|
|
358
|
+
export const DEFAULT_GRIP_LIMITS = { knobToBottomPalm: 0.06, topPalmToAxis: 0.06, tailPhases: ["follow-through"], tail: 0.08 };
|
|
359
|
+
const p95 = (xs) => (xs.length === 0 ? Number.NaN : [...xs].sort((a, b) => a - b)[Math.min(xs.length - 1, Math.floor(xs.length * 0.95))]);
|
|
360
|
+
/** Per-phase grip numbers for a recorded plate appearance, round of golf, tennis point or sword exchange: palms against the object's axis. */
|
|
361
|
+
export function measureGrip(samples, limits = {}) {
|
|
362
|
+
const lim = { ...DEFAULT_GRIP_LIMITS, ...limits };
|
|
363
|
+
const groups = new Map();
|
|
364
|
+
for (const s of samples) {
|
|
365
|
+
const phase = s.phase ?? "all";
|
|
366
|
+
const g = groups.get(phase) ?? { k: [], a: [], along: [] };
|
|
367
|
+
groups.set(phase, g);
|
|
368
|
+
const ax = gripUnit([s.axis[0], s.axis[1], s.axis[2]]);
|
|
369
|
+
g.k.push(Math.hypot(s.bottomPalm[0] - s.knob[0], s.bottomPalm[1] - s.knob[1], s.bottomPalm[2] - s.knob[2]));
|
|
370
|
+
const rel = [s.topPalm[0] - s.knob[0], s.topPalm[1] - s.knob[1], s.topPalm[2] - s.knob[2]];
|
|
371
|
+
const along = rel[0] * ax[0] + rel[1] * ax[1] + rel[2] * ax[2];
|
|
372
|
+
const perp = [rel[0] - ax[0] * along, rel[1] - ax[1] * along, rel[2] - ax[2] * along];
|
|
373
|
+
g.a.push(Math.hypot(perp[0], perp[1], perp[2]));
|
|
374
|
+
g.along.push(along);
|
|
375
|
+
}
|
|
376
|
+
const phases = [];
|
|
377
|
+
const failures = [];
|
|
378
|
+
for (const [phase, g] of groups) {
|
|
379
|
+
const limit = lim.tailPhases.includes(phase) ? lim.tail : Math.max(lim.knobToBottomPalm, lim.topPalmToAxis);
|
|
380
|
+
const kLimit = lim.tailPhases.includes(phase) ? lim.tail : lim.knobToBottomPalm;
|
|
381
|
+
const aLimit = lim.tailPhases.includes(phase) ? lim.tail : lim.topPalmToAxis;
|
|
382
|
+
const kMax = Math.max(...g.k);
|
|
383
|
+
const aMax = Math.max(...g.a);
|
|
384
|
+
const ok = kMax <= kLimit && aMax <= aLimit;
|
|
385
|
+
if (kMax > kLimit)
|
|
386
|
+
failures.push(`${phase}: bottom palm ${kMax.toFixed(3)} m from the grip point > ${kLimit} m`);
|
|
387
|
+
if (aMax > aLimit)
|
|
388
|
+
failures.push(`${phase}: top palm ${aMax.toFixed(3)} m from the object axis > ${aLimit} m`);
|
|
389
|
+
phases.push({
|
|
390
|
+
phase,
|
|
391
|
+
samples: g.k.length,
|
|
392
|
+
knobToBottomPalmMax: kMax,
|
|
393
|
+
knobToBottomPalmP95: p95(g.k),
|
|
394
|
+
topPalmToAxisMax: aMax,
|
|
395
|
+
topPalmToAxisP95: p95(g.a),
|
|
396
|
+
topAlongMin: Math.min(...g.along),
|
|
397
|
+
topAlongMax: Math.max(...g.along),
|
|
398
|
+
limit,
|
|
399
|
+
ok
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
if (samples.length === 0)
|
|
403
|
+
failures.push("no grip samples");
|
|
404
|
+
return {
|
|
405
|
+
samples: samples.length,
|
|
406
|
+
phases,
|
|
407
|
+
knobToBottomPalmMax: phases.length === 0 ? Number.NaN : Math.max(...phases.map((p) => p.knobToBottomPalmMax)),
|
|
408
|
+
topPalmToAxisMax: phases.length === 0 ? Number.NaN : Math.max(...phases.map((p) => p.topPalmToAxisMax)),
|
|
409
|
+
ok: failures.length === 0,
|
|
410
|
+
failures
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
//# sourceMappingURL=twoHandGrip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"twoHandGrip.js","sourceRoot":"","sources":["../../../../../packages/game/src/motion/twoHandGrip.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,10 @@
|
|
|
13
13
|
* 5. A requested environment HDRI that is still loading is waited for (bounded), and steps 3 and 4 run again:
|
|
14
14
|
* when the HDRI lands, every material switches to its image-based-lighting program variant at once, which
|
|
15
15
|
* recompiles the whole scene and drops frames after the game believed it was settled.
|
|
16
|
+
* 6. Textures upgrade one material at a time after mount (`renderer.runtime.texturedMaterials`, status `pending` until the
|
|
17
|
+
* upload lands). A material that gains its texture switches to a textured program variant, which compiles
|
|
18
|
+
* asynchronously too, so the ground, the road or a facade can drop out for frames after the game believed it was
|
|
19
|
+
* settled. Pending upgrades are waited for (bounded) and steps 3 and 4 run again.
|
|
16
20
|
*
|
|
17
21
|
* Call it again after a large jump (a teleport) before capturing a frame.
|
|
18
22
|
*/
|
|
@@ -25,6 +29,11 @@ export interface WarmableApp {
|
|
|
25
29
|
readonly environment?: {
|
|
26
30
|
readonly hdriStatus?: string;
|
|
27
31
|
};
|
|
32
|
+
readonly runtime?: {
|
|
33
|
+
readonly texturedMaterials?: readonly {
|
|
34
|
+
readonly status?: string;
|
|
35
|
+
}[];
|
|
36
|
+
};
|
|
28
37
|
};
|
|
29
38
|
};
|
|
30
39
|
}
|
|
@@ -39,6 +48,10 @@ export interface WarmProgramsOptions {
|
|
|
39
48
|
readonly waitForEnvironment?: boolean;
|
|
40
49
|
/** Upper bound on that wait, in milliseconds. Default 20000. */
|
|
41
50
|
readonly environmentTimeoutMs?: number;
|
|
51
|
+
/** Wait for materials whose texture upgrade is still `pending` (`renderer.runtime.texturedMaterials`) before settling. Default true. Needs `app.diagnostics`. */
|
|
52
|
+
readonly waitForTextures?: boolean;
|
|
53
|
+
/** Upper bound on that wait, in milliseconds. Default 20000. */
|
|
54
|
+
readonly textureTimeoutMs?: number;
|
|
42
55
|
}
|
|
43
56
|
export interface WarmProgramsResult {
|
|
44
57
|
/** Precompile passes that ran (0 when the app has no `precompile`). */
|
|
@@ -52,6 +65,10 @@ export interface WarmProgramsResult {
|
|
|
52
65
|
readonly environmentFrames: number;
|
|
53
66
|
/** False only when an HDRI was still pending when the wait timed out. */
|
|
54
67
|
readonly environmentReady: boolean;
|
|
68
|
+
/** Frames stepped while waiting for pending texture upgrades (0 when none was pending). */
|
|
69
|
+
readonly textureFrames: number;
|
|
70
|
+
/** False only when an upgrade was still pending when the wait timed out. */
|
|
71
|
+
readonly texturesReady: boolean;
|
|
55
72
|
readonly durationMs: number;
|
|
56
73
|
}
|
|
57
74
|
export declare function warmPrograms(app: WarmableApp, options?: WarmProgramsOptions): Promise<WarmProgramsResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warmPrograms.d.ts","sourceRoot":"","sources":["../../../../../packages/game/src/session/warmPrograms.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"warmPrograms.d.ts","sourceRoot":"","sources":["../../../../../packages/game/src/session/warmPrograms.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,WAAW,CAAC,IAAI;QACd,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAClB,QAAQ,CAAC,WAAW,CAAC,EAAE;gBAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;YACxD,QAAQ,CAAC,OAAO,CAAC,EAAE;gBAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS;oBAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;iBAAE,EAAE,CAAA;aAAE,CAAC;SAC7F,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,wEAAwE;IACxE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,kHAAkH;IAClH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,2GAA2G;IAC3G,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,sJAAsJ;IACtJ,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IACtC,gEAAgE;IAChE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,iKAAiK;IACjK,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,gEAAgE;IAChE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,oHAAoH;IACpH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,uFAAuF;IACvF,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,yEAAyE;IACzE,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,2FAA2F;IAC3F,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,4EAA4E;IAC5E,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAID,wBAAsB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAyEnH"}
|
|
@@ -58,6 +58,23 @@ export async function warmPrograms(app, options = {}) {
|
|
|
58
58
|
}
|
|
59
59
|
await settleCounts();
|
|
60
60
|
}
|
|
61
|
-
|
|
61
|
+
let textureFrames = 0;
|
|
62
|
+
const texturesPending = () => (app.diagnostics?.().renderer?.runtime?.texturedMaterials ?? []).some((row) => row.status === "pending");
|
|
63
|
+
let texturesReady = true;
|
|
64
|
+
if (options.waitForTextures !== false && typeof app.diagnostics === "function" && texturesPending()) {
|
|
65
|
+
const deadline = now() + Math.max(0, options.textureTimeoutMs ?? 20_000);
|
|
66
|
+
while (texturesPending() && now() < deadline) {
|
|
67
|
+
await new Promise((resolve) => setTimeout(resolve, 40));
|
|
68
|
+
app.step(0);
|
|
69
|
+
textureFrames += 1;
|
|
70
|
+
}
|
|
71
|
+
texturesReady = !texturesPending();
|
|
72
|
+
if (typeof app.precompile === "function") {
|
|
73
|
+
await app.precompile();
|
|
74
|
+
passes += 1;
|
|
75
|
+
}
|
|
76
|
+
await settleCounts();
|
|
77
|
+
}
|
|
78
|
+
return { passes, frames, settleFrames, settled, environmentFrames, environmentReady, textureFrames, texturesReady, durationMs: now() - startedAt };
|
|
62
79
|
}
|
|
63
80
|
//# sourceMappingURL=warmPrograms.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"warmPrograms.js","sourceRoot":"","sources":["../../../../../packages/game/src/session/warmPrograms.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"warmPrograms.js","sourceRoot":"","sources":["../../../../../packages/game/src/session/warmPrograms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensure.d.ts","sourceRoot":"","sources":["../../../../packages/physics/src/ensure.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// Initialises the Rapier solver. A no-op in the default build (initialised at module load); required before the first world in the
|
|
2
|
+
// `aura3d-no-tla` build, which has no top-level await.
|
|
3
|
+
export { ensurePhysics, physicsInitMode } from "../physics-rapier/index.js";
|
|
4
|
+
//# sourceMappingURL=ensure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ensure.js","sourceRoot":"","sources":["../../../../packages/physics/src/ensure.ts"],"names":[],"mappings":"AAAA,mIAAmI;AACnI,uDAAuD;AACvD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/physics/index.d.ts
CHANGED
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
* and the ECS/scene bridges. Navigation and crowd ownership moved to the optional
|
|
52
52
|
* Recast/Detour adapter at the major-version boundary.
|
|
53
53
|
*/
|
|
54
|
+
export { ensurePhysics, physicsInitMode } from "./ensure.js";
|
|
54
55
|
export * from "./Shape.js";
|
|
55
56
|
export * from "./RigidBody.js";
|
|
56
57
|
export * from "./Collider.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/physics/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/physics/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG7D,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AAGtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAGlC,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAG5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
|
package/dist/physics/index.js
CHANGED
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
* and the ECS/scene bridges. Navigation and crowd ownership moved to the optional
|
|
52
52
|
* Recast/Detour adapter at the major-version boundary.
|
|
53
53
|
*/
|
|
54
|
+
export { ensurePhysics, physicsInitMode } from "./ensure.js";
|
|
54
55
|
// --- 1. Bodies, and the shared math/shape vocabulary the whole contract speaks in ---
|
|
55
56
|
export * from "./Shape.js";
|
|
56
57
|
export * from "./RigidBody.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/physics/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,uFAAuF;AACvF,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAE/B,iFAAiF;AACjF,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AAEtC,oBAAoB;AACpB,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AAEjC,4DAA4D;AAC5D,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAElC,mCAAmC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AAEjC,4DAA4D;AAC5D,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAE5C,oCAAoC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AAEpC,oDAAoD;AACpD,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/physics/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAEH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE7D,uFAAuF;AACvF,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAE/B,iFAAiF;AACjF,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AAEtC,oBAAoB;AACpB,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AAEjC,4DAA4D;AAC5D,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAElC,mCAAmC;AACnC,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AAEjC,4DAA4D;AAC5D,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAE5C,oCAAoC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AAEpC,oDAAoD;AACpD,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
|
package/dist/physics/world.d.ts
CHANGED
|
@@ -14,5 +14,6 @@
|
|
|
14
14
|
* adapter module's one-time WASM initialization without pulling unrelated arcade or query APIs.
|
|
15
15
|
*/
|
|
16
16
|
export { PhysicsWorld } from "./PhysicsWorld.js";
|
|
17
|
+
export { ensurePhysics, physicsInitMode } from "./ensure.js";
|
|
17
18
|
export type { PhysicsBackend, PhysicsBackendPreference, PhysicsBackendSelection, PhysicsContinuousCollisionDescriptor, PhysicsContinuousCollisionSelection, PhysicsSnapshot, PhysicsStepStats, PhysicsWorldDescriptor } from "./PhysicsWorld.js";
|
|
18
19
|
//# sourceMappingURL=world.d.ts.map
|