@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.
Files changed (191) hide show
  1. package/README.md +1 -1
  2. package/dist/aura3d-cli/cli-help.d.ts.map +1 -1
  3. package/dist/aura3d-cli/cli-help.js +4 -2
  4. package/dist/aura3d-cli/cli-help.js.map +1 -1
  5. package/dist/aura3d-cli/cli.js +85 -2
  6. package/dist/aura3d-cli/cli.js.map +1 -1
  7. package/dist/aura3d-cli/commands/assets/index.js +2 -2
  8. package/dist/aura3d-cli/commands/assets/index.js.map +1 -1
  9. package/dist/aura3d-cli/commands/meshyLedger.d.ts +125 -14
  10. package/dist/aura3d-cli/commands/meshyLedger.d.ts.map +1 -1
  11. package/dist/aura3d-cli/commands/meshyLedger.js +262 -35
  12. package/dist/aura3d-cli/commands/meshyLedger.js.map +1 -1
  13. package/dist/aura3d-cli/commands/prd13/run.js +19 -16
  14. package/dist/aura3d-cli/commands/prd13/run.js.map +1 -1
  15. package/dist/aura3d-cli/index.d.ts +10 -0
  16. package/dist/aura3d-cli/index.d.ts.map +1 -1
  17. package/dist/aura3d-cli/index.js +13 -0
  18. package/dist/aura3d-cli/index.js.map +1 -1
  19. package/dist/aura3d-cli/skin/analysis.d.ts +137 -0
  20. package/dist/aura3d-cli/skin/analysis.d.ts.map +1 -0
  21. package/dist/aura3d-cli/skin/analysis.js +382 -0
  22. package/dist/aura3d-cli/skin/analysis.js.map +1 -0
  23. package/dist/aura3d-cli/skin/command.d.ts +75 -0
  24. package/dist/aura3d-cli/skin/command.d.ts.map +1 -0
  25. package/dist/aura3d-cli/skin/command.js +208 -0
  26. package/dist/aura3d-cli/skin/command.js.map +1 -0
  27. package/dist/aura3d-cli/skin/glbEdit.d.ts +14 -0
  28. package/dist/aura3d-cli/skin/glbEdit.d.ts.map +1 -0
  29. package/dist/aura3d-cli/skin/glbEdit.js +152 -0
  30. package/dist/aura3d-cli/skin/glbEdit.js.map +1 -0
  31. package/dist/aura3d-cli/skin/gltf.d.ts +159 -0
  32. package/dist/aura3d-cli/skin/gltf.d.ts.map +1 -0
  33. package/dist/aura3d-cli/skin/gltf.js +379 -0
  34. package/dist/aura3d-cli/skin/gltf.js.map +1 -0
  35. package/dist/aura3d-cli/skin/rebuildLimbs.d.ts +31 -0
  36. package/dist/aura3d-cli/skin/rebuildLimbs.d.ts.map +1 -0
  37. package/dist/aura3d-cli/skin/rebuildLimbs.js +326 -0
  38. package/dist/aura3d-cli/skin/rebuildLimbs.js.map +1 -0
  39. package/dist/aura3d-cli/skin/refitSkeleton.d.ts +23 -0
  40. package/dist/aura3d-cli/skin/refitSkeleton.d.ts.map +1 -0
  41. package/dist/aura3d-cli/skin/refitSkeleton.js +288 -0
  42. package/dist/aura3d-cli/skin/refitSkeleton.js.map +1 -0
  43. package/dist/aura3d-cli/skin/repair.d.ts +45 -0
  44. package/dist/aura3d-cli/skin/repair.d.ts.map +1 -0
  45. package/dist/aura3d-cli/skin/repair.js +192 -0
  46. package/dist/aura3d-cli/skin/repair.js.map +1 -0
  47. package/dist/create-aura3d/index.js +1 -1
  48. package/dist/engine/agent-api/camera/layers.d.ts.map +1 -1
  49. package/dist/engine/agent-api/camera/layers.js +6 -1
  50. package/dist/engine/agent-api/camera/layers.js.map +1 -1
  51. package/dist/engine/agent-api/compiler/customMaterial.d.ts.map +1 -1
  52. package/dist/engine/agent-api/compiler/customMaterial.js +12 -1
  53. package/dist/engine/agent-api/compiler/customMaterial.js.map +1 -1
  54. package/dist/engine/agent-api/compiler/lines.d.ts.map +1 -1
  55. package/dist/engine/agent-api/compiler/lines.js +8 -6
  56. package/dist/engine/agent-api/compiler/lines.js.map +1 -1
  57. package/dist/engine/agent-api/nodes/types.d.ts +6 -0
  58. package/dist/engine/agent-api/nodes/types.d.ts.map +1 -1
  59. package/dist/engine/agent-api/vfx/effects-api.d.ts.map +1 -1
  60. package/dist/engine/agent-api/vfx/effects-api.js +12 -3
  61. package/dist/engine/agent-api/vfx/effects-api.js.map +1 -1
  62. package/dist/engine/agent-api/vfx/gameEffects.d.ts.map +1 -1
  63. package/dist/engine/agent-api/vfx/gameEffects.js +20 -3
  64. package/dist/engine/agent-api/vfx/gameEffects.js.map +1 -1
  65. package/dist/engine/contracts/camera.d.ts +1 -0
  66. package/dist/engine/contracts/camera.d.ts.map +1 -1
  67. package/dist/engine/contracts/effects.d.ts +4 -2
  68. package/dist/engine/contracts/effects.d.ts.map +1 -1
  69. package/dist/engine/contracts/effects.js.map +1 -1
  70. package/dist/game/index.d.ts +2 -2
  71. package/dist/game/index.d.ts.map +1 -1
  72. package/dist/game/index.js +1 -1
  73. package/dist/game/index.js.map +1 -1
  74. package/dist/game/motion/facing.d.ts +30 -0
  75. package/dist/game/motion/facing.d.ts.map +1 -0
  76. package/dist/game/motion/facing.js +50 -0
  77. package/dist/game/motion/facing.js.map +1 -0
  78. package/dist/game/motion/handBounce.d.ts +251 -0
  79. package/dist/game/motion/handBounce.d.ts.map +1 -0
  80. package/dist/game/motion/handBounce.js +315 -0
  81. package/dist/game/motion/handBounce.js.map +1 -0
  82. package/dist/game/motion/index.d.ts +6 -0
  83. package/dist/game/motion/index.d.ts.map +1 -1
  84. package/dist/game/motion/index.js +3 -0
  85. package/dist/game/motion/index.js.map +1 -1
  86. package/dist/game/motion/twoHandGrip.d.ts +229 -0
  87. package/dist/game/motion/twoHandGrip.d.ts.map +1 -0
  88. package/dist/game/motion/twoHandGrip.js +413 -0
  89. package/dist/game/motion/twoHandGrip.js.map +1 -0
  90. package/dist/game/session/warmPrograms.d.ts +17 -0
  91. package/dist/game/session/warmPrograms.d.ts.map +1 -1
  92. package/dist/game/session/warmPrograms.js +18 -1
  93. package/dist/game/session/warmPrograms.js.map +1 -1
  94. package/dist/physics/ensure.d.ts +2 -0
  95. package/dist/physics/ensure.d.ts.map +1 -0
  96. package/dist/physics/ensure.js +4 -0
  97. package/dist/physics/ensure.js.map +1 -0
  98. package/dist/physics/index.d.ts +1 -0
  99. package/dist/physics/index.d.ts.map +1 -1
  100. package/dist/physics/index.js +1 -0
  101. package/dist/physics/index.js.map +1 -1
  102. package/dist/physics/world.d.ts +1 -0
  103. package/dist/physics/world.d.ts.map +1 -1
  104. package/dist/physics/world.js +1 -0
  105. package/dist/physics/world.js.map +1 -1
  106. package/dist/physics-rapier/index.d.ts +2 -0
  107. package/dist/physics-rapier/index.d.ts.map +1 -1
  108. package/dist/physics-rapier/index.js +12 -10
  109. package/dist/physics-rapier/index.js.map +1 -1
  110. package/dist/physics-rapier/rapierInit.d.ts +6 -0
  111. package/dist/physics-rapier/rapierInit.d.ts.map +1 -0
  112. package/dist/physics-rapier/rapierInit.js +12 -0
  113. package/dist/physics-rapier/rapierInit.js.map +1 -0
  114. package/dist/physics-rapier/rapierInit.lazy.d.ts +6 -0
  115. package/dist/physics-rapier/rapierInit.lazy.d.ts.map +1 -0
  116. package/dist/physics-rapier/rapierInit.lazy.js +19 -0
  117. package/dist/physics-rapier/rapierInit.lazy.js.map +1 -0
  118. package/dist/rendering/DepthPass.d.ts.map +1 -1
  119. package/dist/rendering/DepthPass.js +30 -8
  120. package/dist/rendering/DepthPass.js.map +1 -1
  121. package/dist/rendering/ForwardPass.d.ts.map +1 -1
  122. package/dist/rendering/ForwardPass.js +7 -0
  123. package/dist/rendering/ForwardPass.js.map +1 -1
  124. package/dist/rendering/Renderer.d.ts +0 -2
  125. package/dist/rendering/Renderer.d.ts.map +1 -1
  126. package/dist/rendering/Renderer.js +6 -16
  127. package/dist/rendering/Renderer.js.map +1 -1
  128. package/dist/rendering/contracts/output.d.ts +9 -1
  129. package/dist/rendering/contracts/output.d.ts.map +1 -1
  130. package/dist/rendering/contracts/output.js.map +1 -1
  131. package/dist/rendering/output/OutputPass.d.ts +2 -0
  132. package/dist/rendering/output/OutputPass.d.ts.map +1 -1
  133. package/dist/rendering/output/OutputPass.js +26 -3
  134. package/dist/rendering/output/OutputPass.js.map +1 -1
  135. package/dist/rendering/output/ToneMappingOperators.glsl.d.ts +3 -1
  136. package/dist/rendering/output/ToneMappingOperators.glsl.d.ts.map +1 -1
  137. package/dist/rendering/output/ToneMappingOperators.glsl.js +19 -1
  138. package/dist/rendering/output/ToneMappingOperators.glsl.js.map +1 -1
  139. package/dist/rendering/post/v2Stages.d.ts +2 -7
  140. package/dist/rendering/post/v2Stages.d.ts.map +1 -1
  141. package/dist/rendering/post/v2Stages.js +2 -17
  142. package/dist/rendering/post/v2Stages.js.map +1 -1
  143. package/dist/rendering/post/vignetteColor.d.ts +8 -0
  144. package/dist/rendering/post/vignetteColor.d.ts.map +1 -0
  145. package/dist/rendering/post/vignetteColor.js +18 -0
  146. package/dist/rendering/post/vignetteColor.js.map +1 -0
  147. package/dist/rendering/renderer/PostprocessExecution.d.ts +10 -0
  148. package/dist/rendering/renderer/PostprocessExecution.d.ts.map +1 -1
  149. package/dist/rendering/renderer/PostprocessExecution.js +38 -38
  150. package/dist/rendering/renderer/PostprocessExecution.js.map +1 -1
  151. package/dist/rendering/renderer/coreOutputPostRoute.d.ts +25 -17
  152. package/dist/rendering/renderer/coreOutputPostRoute.d.ts.map +1 -1
  153. package/dist/rendering/renderer/coreOutputPostRoute.js +27 -18
  154. package/dist/rendering/renderer/coreOutputPostRoute.js.map +1 -1
  155. package/dist/rendering/renderer/qrSubFlags.d.ts +1 -1
  156. package/dist/rendering/renderer/qrSubFlags.d.ts.map +1 -1
  157. package/dist/rendering/renderer/qrSubFlags.js +2 -8
  158. package/dist/rendering/renderer/qrSubFlags.js.map +1 -1
  159. package/dist/rendering/shaders/chunks/author/index.d.ts.map +1 -1
  160. package/dist/rendering/shaders/chunks/author/index.js +7 -0
  161. package/dist/rendering/shaders/chunks/author/index.js.map +1 -1
  162. package/dist/rendering/shaders/chunks/author/shadow.glsl.d.ts +11 -0
  163. package/dist/rendering/shaders/chunks/author/shadow.glsl.d.ts.map +1 -0
  164. package/dist/rendering/shaders/chunks/author/shadow.glsl.js +57 -0
  165. package/dist/rendering/shaders/chunks/author/shadow.glsl.js.map +1 -0
  166. package/dist/rendering/shadows/DirectionalCascadeFitter.d.ts +20 -0
  167. package/dist/rendering/shadows/DirectionalCascadeFitter.d.ts.map +1 -1
  168. package/dist/rendering/shadows/DirectionalCascadeFitter.js +80 -7
  169. package/dist/rendering/shadows/DirectionalCascadeFitter.js.map +1 -1
  170. package/dist/rendering/shadows/Prd02DepthShaderLibrary.d.ts.map +1 -1
  171. package/dist/rendering/shadows/Prd02DepthShaderLibrary.js +9 -1
  172. package/dist/rendering/shadows/Prd02DepthShaderLibrary.js.map +1 -1
  173. package/dist/rendering/shadows/ShadowSystem.d.ts.map +1 -1
  174. package/dist/rendering/shadows/ShadowSystem.js +7 -2
  175. package/dist/rendering/shadows/ShadowSystem.js.map +1 -1
  176. package/dist/rendering/webgl2/LdrPostprocessShader.d.ts +2 -0
  177. package/dist/rendering/webgl2/LdrPostprocessShader.d.ts.map +1 -1
  178. package/dist/rendering/webgl2/LdrPostprocessShader.js +25 -3
  179. package/dist/rendering/webgl2/LdrPostprocessShader.js.map +1 -1
  180. package/dist/rendering/webgl2/LegacyPost.d.ts +11 -2
  181. package/dist/rendering/webgl2/LegacyPost.d.ts.map +1 -1
  182. package/dist/rendering/webgl2/LegacyPost.js +191 -16
  183. package/dist/rendering/webgl2/LegacyPost.js.map +1 -1
  184. package/package.json +33 -26
  185. package/templates/cinematic-scene/package.json +2 -2
  186. package/templates/mini-game/package.json +2 -2
  187. package/templates/product-viewer/package.json +2 -2
  188. package/templates/production-asset-inspector/package.json +1 -1
  189. package/templates/production-material-studio/package.json +1 -1
  190. package/templates/production-product-configurator/package.json +1 -1
  191. 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;;;;;;;;;;;;;;;;;GAiBG;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;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAAE,QAAQ,CAAC,WAAW,CAAC,EAAE;gBAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,CAAC;CAClI;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;CACxC;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,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAID,wBAAsB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAwDnH"}
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
- return { passes, frames, settleFrames, settled, environmentFrames, environmentReady, durationMs: now() - startedAt };
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":"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"}
1
+ {"version":3,"file":"warmPrograms.js","sourceRoot":"","sources":["../../../../../packages/game/src/session/warmPrograms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { ensurePhysics, physicsInitMode } from "../physics-rapier/index.js";
2
+ //# sourceMappingURL=ensure.d.ts.map
@@ -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"}
@@ -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;AAGH,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"}
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"}
@@ -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"}
@@ -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