@aura3d/engine 4.1.3 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/README.md +3 -3
  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.d.ts.map +1 -1
  6. package/dist/aura3d-cli/cli.js +129 -19
  7. package/dist/aura3d-cli/cli.js.map +1 -1
  8. package/dist/aura3d-cli/commands/assets/index.js +2 -2
  9. package/dist/aura3d-cli/commands/assets/index.js.map +1 -1
  10. package/dist/aura3d-cli/commands/meshyLedger.d.ts +125 -14
  11. package/dist/aura3d-cli/commands/meshyLedger.d.ts.map +1 -1
  12. package/dist/aura3d-cli/commands/meshyLedger.js +262 -35
  13. package/dist/aura3d-cli/commands/meshyLedger.js.map +1 -1
  14. package/dist/aura3d-cli/commands/prd13/run.js +19 -16
  15. package/dist/aura3d-cli/commands/prd13/run.js.map +1 -1
  16. package/dist/aura3d-cli/index.d.ts +8 -0
  17. package/dist/aura3d-cli/index.d.ts.map +1 -1
  18. package/dist/aura3d-cli/index.js +12 -0
  19. package/dist/aura3d-cli/index.js.map +1 -1
  20. package/dist/aura3d-cli/pull-bridge/adapters.d.ts +9 -1
  21. package/dist/aura3d-cli/pull-bridge/adapters.d.ts.map +1 -1
  22. package/dist/aura3d-cli/pull-bridge/adapters.js +30 -7
  23. package/dist/aura3d-cli/pull-bridge/adapters.js.map +1 -1
  24. package/dist/aura3d-cli/pull-bridge/search.d.ts +5 -0
  25. package/dist/aura3d-cli/pull-bridge/search.d.ts.map +1 -1
  26. package/dist/aura3d-cli/pull-bridge/search.js +7 -1
  27. package/dist/aura3d-cli/pull-bridge/search.js.map +1 -1
  28. package/dist/aura3d-cli/pull-bridge.js +1 -1
  29. package/dist/aura3d-cli/pull-bridge.js.map +1 -1
  30. package/dist/aura3d-cli/resolve-ladder.d.ts +123 -0
  31. package/dist/aura3d-cli/resolve-ladder.d.ts.map +1 -0
  32. package/dist/aura3d-cli/resolve-ladder.js +410 -0
  33. package/dist/aura3d-cli/resolve-ladder.js.map +1 -0
  34. package/dist/aura3d-cli/skin/analysis.d.ts +137 -0
  35. package/dist/aura3d-cli/skin/analysis.d.ts.map +1 -0
  36. package/dist/aura3d-cli/skin/analysis.js +382 -0
  37. package/dist/aura3d-cli/skin/analysis.js.map +1 -0
  38. package/dist/aura3d-cli/skin/command.d.ts +71 -0
  39. package/dist/aura3d-cli/skin/command.d.ts.map +1 -0
  40. package/dist/aura3d-cli/skin/command.js +186 -0
  41. package/dist/aura3d-cli/skin/command.js.map +1 -0
  42. package/dist/aura3d-cli/skin/glbEdit.d.ts +14 -0
  43. package/dist/aura3d-cli/skin/glbEdit.d.ts.map +1 -0
  44. package/dist/aura3d-cli/skin/glbEdit.js +152 -0
  45. package/dist/aura3d-cli/skin/glbEdit.js.map +1 -0
  46. package/dist/aura3d-cli/skin/gltf.d.ts +159 -0
  47. package/dist/aura3d-cli/skin/gltf.d.ts.map +1 -0
  48. package/dist/aura3d-cli/skin/gltf.js +379 -0
  49. package/dist/aura3d-cli/skin/gltf.js.map +1 -0
  50. package/dist/aura3d-cli/skin/rebuildLimbs.d.ts +31 -0
  51. package/dist/aura3d-cli/skin/rebuildLimbs.d.ts.map +1 -0
  52. package/dist/aura3d-cli/skin/rebuildLimbs.js +326 -0
  53. package/dist/aura3d-cli/skin/rebuildLimbs.js.map +1 -0
  54. package/dist/aura3d-cli/skin/repair.d.ts +41 -0
  55. package/dist/aura3d-cli/skin/repair.d.ts.map +1 -0
  56. package/dist/aura3d-cli/skin/repair.js +180 -0
  57. package/dist/aura3d-cli/skin/repair.js.map +1 -0
  58. package/dist/create-aura3d/index.js +1 -1
  59. package/dist/debug/index.d.ts +2 -2
  60. package/dist/debug/index.d.ts.map +1 -1
  61. package/dist/debug/index.js +1 -1
  62. package/dist/debug/index.js.map +1 -1
  63. package/dist/debug/safety/frameBoundary.d.ts +33 -0
  64. package/dist/debug/safety/frameBoundary.d.ts.map +1 -0
  65. package/dist/debug/safety/frameBoundary.js +40 -0
  66. package/dist/debug/safety/frameBoundary.js.map +1 -0
  67. package/dist/debug/safety/index.d.ts +1 -0
  68. package/dist/debug/safety/index.d.ts.map +1 -1
  69. package/dist/debug/safety/index.js +1 -0
  70. package/dist/debug/safety/index.js.map +1 -1
  71. package/dist/engine/agent-api/app/actorBoneMatrixLookup.d.ts +22 -0
  72. package/dist/engine/agent-api/app/actorBoneMatrixLookup.d.ts.map +1 -0
  73. package/dist/engine/agent-api/app/actorBoneMatrixLookup.js +24 -0
  74. package/dist/engine/agent-api/app/actorBoneMatrixLookup.js.map +1 -0
  75. package/dist/engine/agent-api/app/canvas.d.ts +16 -0
  76. package/dist/engine/agent-api/app/canvas.d.ts.map +1 -1
  77. package/dist/engine/agent-api/app/canvas.js +15 -0
  78. package/dist/engine/agent-api/app/canvas.js.map +1 -1
  79. package/dist/engine/agent-api/app/createAuraApp.d.ts.map +1 -1
  80. package/dist/engine/agent-api/app/createAuraApp.js +21 -3
  81. package/dist/engine/agent-api/app/createAuraApp.js.map +1 -1
  82. package/dist/engine/agent-api/app/frameLoop.d.ts.map +1 -1
  83. package/dist/engine/agent-api/app/frameLoop.js +21 -3
  84. package/dist/engine/agent-api/app/frameLoop.js.map +1 -1
  85. package/dist/engine/agent-api/app/mountFailure.d.ts +6 -0
  86. package/dist/engine/agent-api/app/mountFailure.d.ts.map +1 -0
  87. package/dist/engine/agent-api/app/mountFailure.js +9 -0
  88. package/dist/engine/agent-api/app/mountFailure.js.map +1 -0
  89. package/dist/engine/agent-api/app/parentFit.d.ts +35 -0
  90. package/dist/engine/agent-api/app/parentFit.d.ts.map +1 -0
  91. package/dist/engine/agent-api/app/parentFit.js +36 -0
  92. package/dist/engine/agent-api/app/parentFit.js.map +1 -0
  93. package/dist/engine/agent-api/compiler/customMaterial.d.ts.map +1 -1
  94. package/dist/engine/agent-api/compiler/customMaterial.js +15 -3
  95. package/dist/engine/agent-api/compiler/customMaterial.js.map +1 -1
  96. package/dist/engine/agent-api/nodes/batched.d.ts +10 -0
  97. package/dist/engine/agent-api/nodes/batched.d.ts.map +1 -1
  98. package/dist/engine/agent-api/nodes/batched.js +7 -5
  99. package/dist/engine/agent-api/nodes/batched.js.map +1 -1
  100. package/dist/engine/agent-api/nodes/builder.d.ts +13 -0
  101. package/dist/engine/agent-api/nodes/builder.d.ts.map +1 -1
  102. package/dist/engine/agent-api/nodes/builder.js +7 -3
  103. package/dist/engine/agent-api/nodes/builder.js.map +1 -1
  104. package/dist/engine/agent-api/nodes/instancedMesh.d.ts +10 -0
  105. package/dist/engine/agent-api/nodes/instancedMesh.d.ts.map +1 -1
  106. package/dist/engine/agent-api/nodes/instancedMesh.js +7 -5
  107. package/dist/engine/agent-api/nodes/instancedMesh.js.map +1 -1
  108. package/dist/engine/agent-api/nodes/types.d.ts +6 -0
  109. package/dist/engine/agent-api/nodes/types.d.ts.map +1 -1
  110. package/dist/engine/lanes/prd06.d.ts.map +1 -1
  111. package/dist/engine/lanes/prd06.js +1 -16
  112. package/dist/engine/lanes/prd06.js.map +1 -1
  113. package/dist/engine/qa/fixedStepLoop.d.ts +2 -0
  114. package/dist/engine/qa/fixedStepLoop.d.ts.map +1 -1
  115. package/dist/engine/qa/fixedStepLoop.js +3 -0
  116. package/dist/engine/qa/fixedStepLoop.js.map +1 -1
  117. package/dist/game/evidence/textureStatus.d.ts +24 -0
  118. package/dist/game/evidence/textureStatus.d.ts.map +1 -0
  119. package/dist/game/evidence/textureStatus.js +27 -0
  120. package/dist/game/evidence/textureStatus.js.map +1 -0
  121. package/dist/game/index.d.ts +5 -0
  122. package/dist/game/index.d.ts.map +1 -1
  123. package/dist/game/index.js +3 -0
  124. package/dist/game/index.js.map +1 -1
  125. package/dist/game/motion/boneAttach.d.ts +42 -0
  126. package/dist/game/motion/boneAttach.d.ts.map +1 -0
  127. package/dist/game/motion/boneAttach.js +166 -0
  128. package/dist/game/motion/boneAttach.js.map +1 -0
  129. package/dist/game/motion/cameraClear.d.ts +35 -0
  130. package/dist/game/motion/cameraClear.d.ts.map +1 -0
  131. package/dist/game/motion/cameraClear.js +64 -0
  132. package/dist/game/motion/cameraClear.js.map +1 -0
  133. package/dist/game/motion/doubleFrame.d.ts +37 -0
  134. package/dist/game/motion/doubleFrame.d.ts.map +1 -0
  135. package/dist/game/motion/doubleFrame.js +59 -0
  136. package/dist/game/motion/doubleFrame.js.map +1 -0
  137. package/dist/game/motion/footSlide.d.ts +32 -0
  138. package/dist/game/motion/footSlide.d.ts.map +1 -0
  139. package/dist/game/motion/footSlide.js +59 -0
  140. package/dist/game/motion/footSlide.js.map +1 -0
  141. package/dist/game/motion/handBounce.d.ts +206 -0
  142. package/dist/game/motion/handBounce.d.ts.map +1 -0
  143. package/dist/game/motion/handBounce.js +267 -0
  144. package/dist/game/motion/handBounce.js.map +1 -0
  145. package/dist/game/motion/impact.d.ts +113 -0
  146. package/dist/game/motion/impact.d.ts.map +1 -0
  147. package/dist/game/motion/impact.js +233 -0
  148. package/dist/game/motion/impact.js.map +1 -0
  149. package/dist/game/motion/index.d.ts +21 -0
  150. package/dist/game/motion/index.d.ts.map +1 -0
  151. package/dist/game/motion/index.js +11 -0
  152. package/dist/game/motion/index.js.map +1 -0
  153. package/dist/game/motion/locomotion.d.ts +55 -0
  154. package/dist/game/motion/locomotion.d.ts.map +1 -0
  155. package/dist/game/motion/locomotion.js +107 -0
  156. package/dist/game/motion/locomotion.js.map +1 -0
  157. package/dist/game/motion/motionGate.d.ts +41 -0
  158. package/dist/game/motion/motionGate.d.ts.map +1 -0
  159. package/dist/game/motion/motionGate.js +71 -0
  160. package/dist/game/motion/motionGate.js.map +1 -0
  161. package/dist/game/motion/presenter.d.ts +37 -0
  162. package/dist/game/motion/presenter.d.ts.map +1 -0
  163. package/dist/game/motion/presenter.js +72 -0
  164. package/dist/game/motion/presenter.js.map +1 -0
  165. package/dist/game/motion/smoothing.d.ts +34 -0
  166. package/dist/game/motion/smoothing.d.ts.map +1 -0
  167. package/dist/game/motion/smoothing.js +92 -0
  168. package/dist/game/motion/smoothing.js.map +1 -0
  169. package/dist/game/session/warmPrograms.d.ts +75 -0
  170. package/dist/game/session/warmPrograms.d.ts.map +1 -0
  171. package/dist/game/session/warmPrograms.js +80 -0
  172. package/dist/game/session/warmPrograms.js.map +1 -0
  173. package/dist/physics/ensure.d.ts +2 -0
  174. package/dist/physics/ensure.d.ts.map +1 -0
  175. package/dist/physics/ensure.js +4 -0
  176. package/dist/physics/ensure.js.map +1 -0
  177. package/dist/physics/index.d.ts +1 -0
  178. package/dist/physics/index.d.ts.map +1 -1
  179. package/dist/physics/index.js +1 -0
  180. package/dist/physics/index.js.map +1 -1
  181. package/dist/physics/world.d.ts +1 -0
  182. package/dist/physics/world.d.ts.map +1 -1
  183. package/dist/physics/world.js +1 -0
  184. package/dist/physics/world.js.map +1 -1
  185. package/dist/physics-rapier/index.d.ts +2 -0
  186. package/dist/physics-rapier/index.d.ts.map +1 -1
  187. package/dist/physics-rapier/index.js +12 -10
  188. package/dist/physics-rapier/index.js.map +1 -1
  189. package/dist/physics-rapier/rapierInit.d.ts +6 -0
  190. package/dist/physics-rapier/rapierInit.d.ts.map +1 -0
  191. package/dist/physics-rapier/rapierInit.js +12 -0
  192. package/dist/physics-rapier/rapierInit.js.map +1 -0
  193. package/dist/physics-rapier/rapierInit.lazy.d.ts +6 -0
  194. package/dist/physics-rapier/rapierInit.lazy.d.ts.map +1 -0
  195. package/dist/physics-rapier/rapierInit.lazy.js +19 -0
  196. package/dist/physics-rapier/rapierInit.lazy.js.map +1 -0
  197. package/dist/rendering/DepthPass.d.ts.map +1 -1
  198. package/dist/rendering/DepthPass.js +30 -8
  199. package/dist/rendering/DepthPass.js.map +1 -1
  200. package/dist/rendering/ForwardPass.d.ts.map +1 -1
  201. package/dist/rendering/ForwardPass.js +7 -0
  202. package/dist/rendering/ForwardPass.js.map +1 -1
  203. package/dist/rendering/Renderer.d.ts +0 -2
  204. package/dist/rendering/Renderer.d.ts.map +1 -1
  205. package/dist/rendering/Renderer.js +6 -16
  206. package/dist/rendering/Renderer.js.map +1 -1
  207. package/dist/rendering/contracts/output.d.ts +9 -1
  208. package/dist/rendering/contracts/output.d.ts.map +1 -1
  209. package/dist/rendering/contracts/output.js.map +1 -1
  210. package/dist/rendering/environment/EnvironmentCache.d.ts.map +1 -1
  211. package/dist/rendering/environment/EnvironmentCache.js +6 -1
  212. package/dist/rendering/environment/EnvironmentCache.js.map +1 -1
  213. package/dist/rendering/environment/neutralEmbedded.d.ts +5 -0
  214. package/dist/rendering/environment/neutralEmbedded.d.ts.map +1 -0
  215. package/dist/rendering/environment/neutralEmbedded.js +1118 -0
  216. package/dist/rendering/environment/neutralEmbedded.js.map +1 -0
  217. package/dist/rendering/environment/neutralEmbeddedLoader.d.ts +5 -0
  218. package/dist/rendering/environment/neutralEmbeddedLoader.d.ts.map +1 -0
  219. package/dist/rendering/environment/neutralEmbeddedLoader.js +32 -0
  220. package/dist/rendering/environment/neutralEmbeddedLoader.js.map +1 -0
  221. package/dist/rendering/output/OutputPass.d.ts +2 -0
  222. package/dist/rendering/output/OutputPass.d.ts.map +1 -1
  223. package/dist/rendering/output/OutputPass.js +26 -3
  224. package/dist/rendering/output/OutputPass.js.map +1 -1
  225. package/dist/rendering/output/ToneMappingOperators.glsl.d.ts +3 -1
  226. package/dist/rendering/output/ToneMappingOperators.glsl.d.ts.map +1 -1
  227. package/dist/rendering/output/ToneMappingOperators.glsl.js +19 -1
  228. package/dist/rendering/output/ToneMappingOperators.glsl.js.map +1 -1
  229. package/dist/rendering/post/v2Stages.d.ts +2 -7
  230. package/dist/rendering/post/v2Stages.d.ts.map +1 -1
  231. package/dist/rendering/post/v2Stages.js +2 -17
  232. package/dist/rendering/post/v2Stages.js.map +1 -1
  233. package/dist/rendering/post/vignetteColor.d.ts +8 -0
  234. package/dist/rendering/post/vignetteColor.d.ts.map +1 -0
  235. package/dist/rendering/post/vignetteColor.js +18 -0
  236. package/dist/rendering/post/vignetteColor.js.map +1 -0
  237. package/dist/rendering/renderer/PostprocessExecution.d.ts +10 -0
  238. package/dist/rendering/renderer/PostprocessExecution.d.ts.map +1 -1
  239. package/dist/rendering/renderer/PostprocessExecution.js +38 -38
  240. package/dist/rendering/renderer/PostprocessExecution.js.map +1 -1
  241. package/dist/rendering/renderer/coreOutputPostRoute.d.ts +25 -17
  242. package/dist/rendering/renderer/coreOutputPostRoute.d.ts.map +1 -1
  243. package/dist/rendering/renderer/coreOutputPostRoute.js +27 -18
  244. package/dist/rendering/renderer/coreOutputPostRoute.js.map +1 -1
  245. package/dist/rendering/renderer/qrSubFlags.d.ts +1 -1
  246. package/dist/rendering/renderer/qrSubFlags.d.ts.map +1 -1
  247. package/dist/rendering/renderer/qrSubFlags.js +2 -8
  248. package/dist/rendering/renderer/qrSubFlags.js.map +1 -1
  249. package/dist/rendering/shaders/chunks/author/index.d.ts.map +1 -1
  250. package/dist/rendering/shaders/chunks/author/index.js +7 -0
  251. package/dist/rendering/shaders/chunks/author/index.js.map +1 -1
  252. package/dist/rendering/shaders/chunks/author/shadow.glsl.d.ts +11 -0
  253. package/dist/rendering/shaders/chunks/author/shadow.glsl.d.ts.map +1 -0
  254. package/dist/rendering/shaders/chunks/author/shadow.glsl.js +57 -0
  255. package/dist/rendering/shaders/chunks/author/shadow.glsl.js.map +1 -0
  256. package/dist/rendering/shadows/DirectionalCascadeFitter.d.ts +20 -0
  257. package/dist/rendering/shadows/DirectionalCascadeFitter.d.ts.map +1 -1
  258. package/dist/rendering/shadows/DirectionalCascadeFitter.js +80 -7
  259. package/dist/rendering/shadows/DirectionalCascadeFitter.js.map +1 -1
  260. package/dist/rendering/shadows/Prd02DepthShaderLibrary.d.ts.map +1 -1
  261. package/dist/rendering/shadows/Prd02DepthShaderLibrary.js +9 -1
  262. package/dist/rendering/shadows/Prd02DepthShaderLibrary.js.map +1 -1
  263. package/dist/rendering/shadows/ShadowSystem.d.ts.map +1 -1
  264. package/dist/rendering/shadows/ShadowSystem.js +7 -2
  265. package/dist/rendering/shadows/ShadowSystem.js.map +1 -1
  266. package/dist/rendering/webgl2/LdrPostprocessShader.d.ts +2 -0
  267. package/dist/rendering/webgl2/LdrPostprocessShader.d.ts.map +1 -1
  268. package/dist/rendering/webgl2/LdrPostprocessShader.js +25 -3
  269. package/dist/rendering/webgl2/LdrPostprocessShader.js.map +1 -1
  270. package/dist/rendering/webgl2/LegacyPost.d.ts +11 -2
  271. package/dist/rendering/webgl2/LegacyPost.d.ts.map +1 -1
  272. package/dist/rendering/webgl2/LegacyPost.js +191 -16
  273. package/dist/rendering/webgl2/LegacyPost.js.map +1 -1
  274. package/package.json +33 -26
  275. package/templates/cinematic-scene/package.json +2 -2
  276. package/templates/mini-game/package.json +2 -2
  277. package/templates/product-viewer/package.json +2 -2
  278. package/templates/production-asset-inspector/package.json +1 -1
  279. package/templates/production-material-studio/package.json +1 -1
  280. package/templates/production-product-configurator/package.json +1 -1
  281. package/templates/production-product-viewer/package.json +1 -1
@@ -0,0 +1,382 @@
1
+ /**
2
+ * `assets validate --skin`: poses a rigged GLB through the clips it ships and reports the defects that tore the Aura FC athletes:
3
+ * stretched triangles (the "sails" at the hips), thin long flaps, bad or distant skin weights, limb meshes that are not in the
4
+ * pose the skeleton assumes (modelled mid-stride and bound to a straight skeleton) and joint ranges no limb can reach.
5
+ */
6
+ import { buildHierarchy, clipDuration, forward, jointBindPositions, localPose, loadSkins, qconj, qmul, skinnedPositions, vdist, vdot, vlen, vsub } from "./gltf.js";
7
+ export const SKIN_STRETCH = "SKIN_STRETCH";
8
+ export const SKIN_FLAP = "SKIN_FLAP";
9
+ export const SKIN_WEIGHT_SUM = "SKIN_WEIGHT_SUM";
10
+ export const SKIN_WEIGHT_DISTANT = "SKIN_WEIGHT_DISTANT";
11
+ export const SKIN_BIND_MISMATCH = "SKIN_BIND_MISMATCH";
12
+ export const SKIN_JOINT_RANGE = "SKIN_JOINT_RANGE";
13
+ export const SKIN_NO_SKIN = "SKIN_NO_SKIN";
14
+ export const DEFAULT_SKIN_THRESHOLDS = {
15
+ stretchLimit: 1.6,
16
+ stretchHardLimit: 2.5,
17
+ stretchAllowTriangles: 2,
18
+ flapEdgeFraction: 0.14,
19
+ flapThin: 0.08,
20
+ bindOffsetRatio: 0.34,
21
+ weightSumTolerance: 0.02,
22
+ distantFraction: 0.5,
23
+ distantMinWeight: 0.15,
24
+ hipFlexMin: -70,
25
+ hipFlexMax: 120,
26
+ hipAbductionMax: 75,
27
+ kneeMax: 155,
28
+ thighTwistMax: 60
29
+ };
30
+ const DEG = 180 / Math.PI;
31
+ /** Trunk and root bones: their vertex cloud is wide and not a limb, so the axis-offset test does not apply. */
32
+ const TRUNK_BONE = /spine|chest|hips|pelvis|neck|head|shoulder|clavicle|root|armature|jaw|eye|tongue|hair|breast|skirt|cape|tail/i;
33
+ const round = (n, d = 3) => Math.round(n * 10 ** d) / 10 ** d;
34
+ function triArea(a, b, c) {
35
+ const u = vsub(b, a), v = vsub(c, a);
36
+ return 0.5 * Math.hypot(u[1] * v[2] - u[2] * v[1], u[2] * v[0] - u[0] * v[2], u[0] * v[1] - u[1] * v[0]);
37
+ }
38
+ /** Worst posed/rest edge stretch of every triangle over the sampled poses, per primitive, plus thin-flap data. */
39
+ export function samplePoses(glb, hierarchy, clips, samples) {
40
+ const poses = [];
41
+ const clipOfPose = [];
42
+ for (const anim of clips) {
43
+ const dur = clipDuration(glb, anim);
44
+ for (let s = 0; s < samples; s += 1) {
45
+ poses.push(forward(localPose(glb, anim, (dur * s) / samples, hierarchy), hierarchy));
46
+ clipOfPose.push(anim.name ?? "clip");
47
+ }
48
+ }
49
+ return { poses, clipOfPose };
50
+ }
51
+ export function triangleStretch(skin, prim, poses, flapEdge, flapThin, flapOutlier = 2.5) {
52
+ const nTri = Math.floor(prim.indices.length / 3);
53
+ const worst = new Float32Array(nTri);
54
+ const flap = new Uint8Array(nTri);
55
+ let flapEdgeMax = 0;
56
+ const rest = prim.pos;
57
+ const restLen = (a, b) => Math.max(vdist(rest[a], rest[b]), 0.004);
58
+ const restEdges = [];
59
+ for (let t = 0; t < nTri; t += 1) {
60
+ const a = prim.indices[t * 3] ?? 0, b = prim.indices[t * 3 + 1] ?? 0, c = prim.indices[t * 3 + 2] ?? 0;
61
+ restEdges.push([restLen(a, b), restLen(b, c), restLen(c, a)]);
62
+ }
63
+ // A flap is a thin triangle much longer than the mesh's normal triangles (long thin strips that tile a sleeve or trouser leg are not).
64
+ const sortedEdges = restEdges.map((e) => Math.max(...e)).sort((a, b) => a - b);
65
+ const p95 = sortedEdges[Math.floor(sortedEdges.length * 0.95)] ?? 0;
66
+ const flapFloor = Math.max(flapEdge, flapOutlier * p95);
67
+ for (const pose of poses) {
68
+ const out = skinnedPositions(skin, prim, pose);
69
+ for (let t = 0; t < nTri; t += 1) {
70
+ const a = prim.indices[t * 3] ?? 0, b = prim.indices[t * 3 + 1] ?? 0, c = prim.indices[t * 3 + 2] ?? 0;
71
+ const pa = out[a], pb = out[b], pc = out[c];
72
+ const e0 = vdist(pa, pb), e1 = vdist(pb, pc), e2 = vdist(pc, pa);
73
+ const re = restEdges[t];
74
+ const r = Math.max(e0 / re[0], e1 / re[1], e2 / re[2]);
75
+ if (r > worst[t])
76
+ worst[t] = r;
77
+ const longest = Math.max(e0, e1, e2);
78
+ if (longest > flapFloor && triArea(pa, pb, pc) / (longest * longest) < flapThin) {
79
+ flap[t] = 1;
80
+ if (longest > flapEdgeMax)
81
+ flapEdgeMax = longest;
82
+ }
83
+ }
84
+ }
85
+ return { worst, flap, flapEdgeMax };
86
+ }
87
+ function modelHeight(skins) {
88
+ let lo = Infinity, hi = -Infinity;
89
+ for (const skin of skins)
90
+ for (const prim of skin.primitives)
91
+ for (const p of prim.pos) {
92
+ lo = Math.min(lo, p[1]);
93
+ hi = Math.max(hi, p[1]);
94
+ }
95
+ return Number.isFinite(lo) && hi > lo ? hi - lo : 1;
96
+ }
97
+ function dominantJoint(prim, v) {
98
+ let best = 0, joint = 0;
99
+ const w = prim.weights[v] ?? [], j = prim.joints[v] ?? [];
100
+ for (let k = 0; k < 4; k += 1)
101
+ if ((w[k] ?? 0) > best) {
102
+ best = w[k] ?? 0;
103
+ joint = j[k] ?? 0;
104
+ }
105
+ return { joint, weight: best };
106
+ }
107
+ /** Distance from a point to a segment. */
108
+ function segmentDistance(p, a, b) {
109
+ const ab = vsub(b, a);
110
+ const l2 = vdot(ab, ab);
111
+ if (l2 < 1e-12)
112
+ return vdist(p, a);
113
+ const t = Math.max(0, Math.min(1, vdot(vsub(p, a), ab) / l2));
114
+ return vdist(p, [a[0] + ab[0] * t, a[1] + ab[1] * t, a[2] + ab[2] * t]);
115
+ }
116
+ const LEG_NAMES = [
117
+ { up: /^(mixamorig:?)?left(upper)?(up)?(leg|thigh)$/i, low: /^(mixamorig:?)?left(lower)?(leg|shin|calf)$/i, foot: /^(mixamorig:?)?left(foot|ankle)$/i },
118
+ { up: /^(mixamorig:?)?right(upper)?(up)?(leg|thigh)$/i, low: /^(mixamorig:?)?right(lower)?(leg|shin|calf)$/i, foot: /^(mixamorig:?)?right(foot|ankle)$/i }
119
+ ];
120
+ /** Recognises Meshy/Mixamo/VRM-style leg bone names; returns null when the rig is not a recognised humanoid. */
121
+ export function findHumanoidLegs(hierarchy) {
122
+ const legs = [];
123
+ for (const spec of LEG_NAMES) {
124
+ const names = hierarchy.names;
125
+ const up = names.findIndex((n) => spec.up.test(n) && /up|thigh/i.test(n));
126
+ const foot = names.findIndex((n) => spec.foot.test(n));
127
+ if (up < 0 || foot < 0)
128
+ return null;
129
+ let knee = -1;
130
+ for (let i = 0; i < names.length; i += 1) {
131
+ if (!spec.low.test(names[i]) || i === up)
132
+ continue;
133
+ if (hierarchy.parent[i] === up) {
134
+ knee = i;
135
+ break;
136
+ }
137
+ }
138
+ if (knee < 0)
139
+ return null;
140
+ legs.push({ up, knee, foot });
141
+ }
142
+ return legs;
143
+ }
144
+ function legAngles(pose, rest, leg) {
145
+ const unit = (a) => { const l = vlen(a) || 1; return [a[0] / l, a[1] / l, a[2] / l]; };
146
+ const thigh = unit(vsub(pose.pos[leg.knee], pose.pos[leg.up]));
147
+ const shin = unit(vsub(pose.pos[leg.foot], pose.pos[leg.knee]));
148
+ const rThigh = unit(vsub(rest.pos[leg.knee], rest.pos[leg.up]));
149
+ const flex = (Math.atan2(thigh[2], -thigh[1]) - Math.atan2(rThigh[2], -rThigh[1])) * DEG;
150
+ const abd = (Math.atan2(thigh[0], -thigh[1]) - Math.atan2(rThigh[0], -rThigh[1])) * DEG;
151
+ const knee = Math.acos(Math.max(-1, Math.min(1, vdot(thigh, shin)))) * DEG;
152
+ const shinBack = Math.atan2(shin[2], -shin[1]) - Math.atan2(thigh[2], -thigh[1]);
153
+ const quat = (m) => {
154
+ const sx = Math.hypot(m[0] ?? 0, m[1] ?? 0, m[2] ?? 0) || 1, sy = Math.hypot(m[4] ?? 0, m[5] ?? 0, m[6] ?? 0) || 1, sz = Math.hypot(m[8] ?? 0, m[9] ?? 0, m[10] ?? 0) || 1;
155
+ const r00 = (m[0] ?? 0) / sx, r10 = (m[1] ?? 0) / sx, r20 = (m[2] ?? 0) / sx, r01 = (m[4] ?? 0) / sy, r11 = (m[5] ?? 0) / sy, r21 = (m[6] ?? 0) / sy, r02 = (m[8] ?? 0) / sz, r12 = (m[9] ?? 0) / sz, r22 = (m[10] ?? 0) / sz;
156
+ const tr = r00 + r11 + r22;
157
+ if (tr > 0) {
158
+ const s = Math.sqrt(tr + 1) * 2;
159
+ return [(r21 - r12) / s, (r02 - r20) / s, (r10 - r01) / s, 0.25 * s];
160
+ }
161
+ if (r00 > r11 && r00 > r22) {
162
+ const s = Math.sqrt(1 + r00 - r11 - r22) * 2;
163
+ return [0.25 * s, (r01 + r10) / s, (r02 + r20) / s, (r21 - r12) / s];
164
+ }
165
+ if (r11 > r22) {
166
+ const s = Math.sqrt(1 + r11 - r00 - r22) * 2;
167
+ return [(r01 + r10) / s, 0.25 * s, (r12 + r21) / s, (r02 - r20) / s];
168
+ }
169
+ const s = Math.sqrt(1 + r22 - r00 - r11) * 2;
170
+ return [(r02 + r20) / s, (r12 + r21) / s, 0.25 * s, (r10 - r01) / s];
171
+ };
172
+ const delta = qmul(quat(pose.world[leg.up]), qconj(quat(rest.world[leg.up])));
173
+ const s = vdot([delta[0], delta[1], delta[2]], rThigh);
174
+ let twist = 2 * Math.atan2(s, delta[3]) * DEG;
175
+ if (twist > 180)
176
+ twist -= 360;
177
+ if (twist < -180)
178
+ twist += 360;
179
+ return { flex, abd, knee, kneeForward: shinBack > 1e-3 && knee > 3, twist };
180
+ }
181
+ /** Hip/knee/twist ranges of the humanoid legs per clip (degrees); null when the rig is not a recognised humanoid. */
182
+ export function jointRanges(glb, hierarchy, clips, samples = 24) {
183
+ const legs = findHumanoidLegs(hierarchy);
184
+ if (!legs)
185
+ return null;
186
+ const rest = forward(localPose(glb, null, 0, hierarchy), hierarchy);
187
+ const out = {};
188
+ for (const anim of clips) {
189
+ const dur = clipDuration(glb, anim);
190
+ const acc = { hipFlexMin: Infinity, hipFlexMax: -Infinity, hipAbductionMax: 0, kneeMax: 0, kneeForwardFrames: 0, thighTwistMax: 0 };
191
+ for (let s = 0; s < samples; s += 1) {
192
+ const pose = forward(localPose(glb, anim, (dur * s) / samples, hierarchy), hierarchy);
193
+ for (const leg of legs) {
194
+ const a = legAngles(pose, rest, leg);
195
+ acc.hipFlexMin = Math.min(acc.hipFlexMin, a.flex);
196
+ acc.hipFlexMax = Math.max(acc.hipFlexMax, a.flex);
197
+ acc.hipAbductionMax = Math.max(acc.hipAbductionMax, Math.abs(a.abd));
198
+ acc.kneeMax = Math.max(acc.kneeMax, a.knee);
199
+ if (a.kneeForward)
200
+ acc.kneeForwardFrames += 1;
201
+ acc.thighTwistMax = Math.max(acc.thighTwistMax, Math.abs(a.twist));
202
+ }
203
+ }
204
+ out[anim.name ?? "clip"] = {
205
+ hipFlexMin: round(Number.isFinite(acc.hipFlexMin) ? acc.hipFlexMin : 0, 1), hipFlexMax: round(Number.isFinite(acc.hipFlexMax) ? acc.hipFlexMax : 0, 1),
206
+ hipAbductionMax: round(acc.hipAbductionMax, 1), kneeMax: round(acc.kneeMax, 1), kneeForwardFrames: acc.kneeForwardFrames, thighTwistMax: round(acc.thighTwistMax, 1)
207
+ };
208
+ }
209
+ return out;
210
+ }
211
+ /** Per bone: how far the centroid of the vertices it dominates sits from the bone's axis, relative to the bone length (bind pose). */
212
+ export function bindMismatch(skins, hierarchy, height, ratioLimit) {
213
+ const flagged = [];
214
+ for (const skin of skins) {
215
+ const bindPos = jointBindPositions(skin);
216
+ const sums = new Map();
217
+ for (const prim of skin.primitives) {
218
+ for (let v = 0; v < prim.pos.length; v += 1) {
219
+ const d = dominantJoint(prim, v);
220
+ if (d.weight < 0.6)
221
+ continue;
222
+ const p = prim.pos[v];
223
+ const entry = sums.get(d.joint) ?? { sum: [0, 0, 0], n: 0 };
224
+ entry.sum[0] += p[0];
225
+ entry.sum[1] += p[1];
226
+ entry.sum[2] += p[2];
227
+ entry.n += 1;
228
+ sums.set(d.joint, entry);
229
+ }
230
+ }
231
+ for (const [jointIndex, { sum, n }] of sums) {
232
+ if (n < 25)
233
+ continue;
234
+ const node = skin.joints[jointIndex];
235
+ if (node === undefined)
236
+ continue;
237
+ const childIndex = skin.joints.findIndex((c) => hierarchy.parent[c] === node);
238
+ if (childIndex < 0)
239
+ continue;
240
+ const a = bindPos[jointIndex], b = bindPos[childIndex];
241
+ const length = vdist(a, b);
242
+ if (length < 0.06 * height)
243
+ continue;
244
+ if (TRUNK_BONE.test(hierarchy.names[node] ?? ""))
245
+ continue;
246
+ const centroid = [sum[0] / n, sum[1] / n, sum[2] / n];
247
+ const offset = segmentDistance(centroid, a, b);
248
+ const ratio = offset / length;
249
+ if (ratio > ratioLimit)
250
+ flagged.push({ bone: hierarchy.names[node] ?? `joint${node}`, vertices: n, offset: round(offset), boneLength: round(length), ratio: round(ratio, 2) });
251
+ }
252
+ }
253
+ return flagged;
254
+ }
255
+ export function analyzeSkin(glb, options = {}) {
256
+ const thresholds = { ...DEFAULT_SKIN_THRESHOLDS, ...options.thresholds };
257
+ const hierarchy = buildHierarchy(glb);
258
+ const allSkins = loadSkins(glb, hierarchy);
259
+ const warnOnly = new Set(options.strict ? [] : options.warnOnly ?? [SKIN_BIND_MISMATCH, SKIN_WEIGHT_DISTANT]);
260
+ const findings = [];
261
+ const push = (code, message, primitive, detail) => {
262
+ findings.push({ code, severity: warnOnly.has(code) ? "warning" : "error", message, ...(primitive ? { primitive } : {}), ...(detail ? { detail } : {}) });
263
+ };
264
+ const skins = allSkins.map((s) => ({ ...s, primitives: s.primitives.filter((p) => !(options.ignoreMaterials?.test(p.materialName))) }));
265
+ const animations = glb.json.animations ?? [];
266
+ const clips = options.clips ? animations.filter((a) => options.clips?.includes(a.name ?? "")) : animations;
267
+ const samples = Math.max(2, options.samples ?? 10);
268
+ const base = { thresholds, samplesPerClip: samples };
269
+ if (skins.length === 0 || skins.every((s) => s.primitives.length === 0)) {
270
+ return {
271
+ ok: true, skinned: false, modelHeight: 0, clips: [], ...base, skins: [], materials: {}, bindMismatch: [], jointRanges: null, findings: [], failures: [], warnings: [],
272
+ reasonCodes: [], messages: ["No skinned mesh: skin check not applicable."]
273
+ };
274
+ }
275
+ const height = modelHeight(skins);
276
+ const flapEdge = thresholds.flapEdgeFraction * height;
277
+ const restPose = forward(localPose(glb, null, 0, hierarchy), hierarchy);
278
+ const bindPositions = new Map(skins.map((s) => [s.index, jointBindPositions(s)]));
279
+ const { poses } = samplePoses(glb, hierarchy, clips, samples);
280
+ const evalPoses = poses.length > 0 ? poses : [restPose];
281
+ const skinReports = [];
282
+ const materials = {};
283
+ for (const skin of skins) {
284
+ const primReports = [];
285
+ for (const prim of skin.primitives) {
286
+ const label = `${prim.materialName} (mesh ${prim.meshIndex} prim ${prim.primitiveIndex})`;
287
+ const { worst, flap, flapEdgeMax } = triangleStretch(skin, prim, evalPoses, flapEdge, thresholds.flapThin);
288
+ let maxStretch = 0, over = 0, flaps = 0;
289
+ for (let t = 0; t < worst.length; t += 1) {
290
+ const w = worst[t];
291
+ if (w > maxStretch)
292
+ maxStretch = w;
293
+ if (w > thresholds.stretchLimit)
294
+ over += 1;
295
+ if (flap[t])
296
+ flaps += 1;
297
+ }
298
+ // weights
299
+ let weightSumBad = 0, weightDistant = 0;
300
+ const distantLimit = thresholds.distantFraction * height;
301
+ const jointCount = skin.joints.length;
302
+ for (let v = 0; v < prim.pos.length; v += 1) {
303
+ const w = prim.weights[v] ?? [], j = prim.joints[v] ?? [];
304
+ const sum = w.reduce((a, b) => a + b, 0);
305
+ let badIndex = false;
306
+ for (let k = 0; k < 4; k += 1)
307
+ if ((w[k] ?? 0) > 0 && (j[k] ?? 0) >= jointCount)
308
+ badIndex = true;
309
+ if (!Number.isFinite(sum) || Math.abs(sum - 1) > thresholds.weightSumTolerance || badIndex)
310
+ weightSumBad += 1;
311
+ for (let k = 0; k < 4; k += 1) {
312
+ if ((w[k] ?? 0) < thresholds.distantMinWeight)
313
+ continue;
314
+ const at = (bindPositions.get(skin.index) ?? [])[j[k] ?? 0];
315
+ if (!at)
316
+ continue;
317
+ if (vdist(prim.pos[v], at) > distantLimit) {
318
+ weightDistant += 1;
319
+ break;
320
+ }
321
+ }
322
+ }
323
+ primReports.push({
324
+ mesh: prim.meshIndex, primitive: prim.primitiveIndex, material: prim.materialName, vertices: prim.pos.length, triangles: worst.length,
325
+ maxStretch: round(maxStretch, 2), trianglesOverLimit: over, flaps, maxFlapEdge: round(flapEdgeMax), weightSumBad, weightDistant
326
+ });
327
+ const m = materials[prim.materialName] ?? { triangles: 0, maxStretch: 0, trianglesOverLimit: 0, flaps: 0 };
328
+ m.triangles += worst.length;
329
+ m.maxStretch = Math.max(m.maxStretch, round(maxStretch, 2));
330
+ m.trianglesOverLimit += over;
331
+ m.flaps += flaps;
332
+ materials[prim.materialName] = m;
333
+ const allowed = Math.max(thresholds.stretchAllowTriangles, Math.floor(worst.length * 0.001));
334
+ if (over > 0 && (maxStretch > thresholds.stretchHardLimit || over > allowed))
335
+ push(SKIN_STRETCH, `${label}: ${over} of ${worst.length} triangles stretch past ${thresholds.stretchLimit}x their rest edges (worst ${round(maxStretch, 2)}x) in the played clips (${SKIN_STRETCH}). Bridging triangles between parts that move independently, or a mesh bound in a different pose than its skeleton. Run assets repair-skin.`, label, { triangles: over, worst: round(maxStretch, 2) });
336
+ if (over > 0 && !(maxStretch > thresholds.stretchHardLimit || over > allowed))
337
+ findings.push({ code: SKIN_STRETCH, severity: "warning", message: `${label}: ${over} triangle(s) stretch past ${thresholds.stretchLimit}x (worst ${round(maxStretch, 2)}x), within the allowance of ${allowed} (${SKIN_STRETCH}).`, primitive: label });
338
+ if (flaps > 0)
339
+ push(SKIN_FLAP, `${label}: ${flaps} thin triangle(s) with a posed edge up to ${round(flapEdgeMax)} m (> ${round(flapEdge)} m): they draw as shards or sails once a limb swings (${SKIN_FLAP}).`, label, { flaps, longestEdge: round(flapEdgeMax) });
340
+ if (weightSumBad > 0)
341
+ push(SKIN_WEIGHT_SUM, `${label}: ${weightSumBad} vertices have skin weights that do not sum to 1 (+-${thresholds.weightSumTolerance}) or point past the joint list (${SKIN_WEIGHT_SUM}). assets repair-skin --normalize fixes it.`, label, { vertices: weightSumBad });
342
+ if (weightDistant > 0)
343
+ push(SKIN_WEIGHT_DISTANT, `${label}: ${weightDistant} vertices are influenced (>= ${thresholds.distantMinWeight}) by a bone farther than ${round(distantLimit)} m (${SKIN_WEIGHT_DISTANT}). assets repair-skin --prune-distant removes those influences.`, label, { vertices: weightDistant });
344
+ }
345
+ skinReports.push({ index: skin.index, jointCount: skin.joints.length, primitives: primReports });
346
+ }
347
+ const mismatch = bindMismatch(skins, hierarchy, height, thresholds.bindOffsetRatio);
348
+ if (mismatch.length > 0) {
349
+ push(SKIN_BIND_MISMATCH, `${mismatch.length} bone(s) are not inside the mesh they move: ${mismatch.slice(0, 4).map((b) => `${b.bone} (vertices ${b.offset} m off a ${b.boneLength} m bone)`).join(", ")} (${SKIN_BIND_MISMATCH}). The mesh was modelled in a different pose than the skeleton assumes (typically mid-stride), so every clip rotates the limbs about joints off the limb. Rebuild the limbs in the skeleton's pose (assets repair-skin --rebuild-limbs) or re-rig.`, undefined, { bones: mismatch });
350
+ }
351
+ const ranges = jointRanges(glb, hierarchy, clips);
352
+ if (ranges) {
353
+ for (const [clip, r] of Object.entries(ranges)) {
354
+ const bad = [];
355
+ if (r.hipFlexMin < thresholds.hipFlexMin || r.hipFlexMax > thresholds.hipFlexMax)
356
+ bad.push(`hip flexion ${r.hipFlexMin}..${r.hipFlexMax} deg`);
357
+ if (r.hipAbductionMax > thresholds.hipAbductionMax)
358
+ bad.push(`hip abduction ${r.hipAbductionMax} deg`);
359
+ if (r.kneeMax > thresholds.kneeMax)
360
+ bad.push(`knee flexion ${r.kneeMax} deg`);
361
+ if (r.kneeForwardFrames > 0)
362
+ bad.push(`knee bends forward in ${r.kneeForwardFrames} sampled frames`);
363
+ if (r.thighTwistMax > thresholds.thighTwistMax)
364
+ bad.push(`thigh twist ${r.thighTwistMax} deg`);
365
+ if (bad.length > 0)
366
+ push(SKIN_JOINT_RANGE, `clip "${clip}": ${bad.join("; ")} (${SKIN_JOINT_RANGE}).`, undefined, { clip, ...r });
367
+ }
368
+ }
369
+ const failures = findings.filter((f) => f.severity === "error").map((f) => f.message);
370
+ const warnings = findings.filter((f) => f.severity === "warning").map((f) => f.message);
371
+ const ok = failures.length === 0;
372
+ const worstMaterial = Object.entries(materials).sort((a, b) => b[1].maxStretch - a[1].maxStretch)[0];
373
+ return {
374
+ ok, skinned: true, modelHeight: round(height), clips: clips.map((c) => c.name ?? "clip"), ...base,
375
+ skins: skinReports, materials, bindMismatch: mismatch, jointRanges: ranges, findings, failures, warnings,
376
+ reasonCodes: [...new Set(findings.map((f) => f.code))],
377
+ messages: ok
378
+ ? [`Skin check passed: ${skinReports.reduce((n, s) => n + s.primitives.reduce((m, p) => m + p.triangles, 0), 0)} triangles over ${clips.length} clip(s); worst stretch ${worstMaterial ? `${worstMaterial[1].maxStretch}x (${worstMaterial[0]})` : "n/a"}.`]
379
+ : failures
380
+ };
381
+ }
382
+ //# sourceMappingURL=analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/skin/analysis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { DEFAULT_SKIN_THRESHOLDS, type SkinCode, type SkinReport } from "./analysis.js";
2
+ import { type RepairSkinOptions } from "./repair.js";
3
+ import { type RebuildLimbsOptions } from "./rebuildLimbs.js";
4
+ export declare const SKIN_ALLOW_FILE = "aura.skin-allow.json";
5
+ export declare const ALL_SKIN_CODES: readonly SkinCode[];
6
+ export interface SkinAllowEntry {
7
+ readonly allow: readonly SkinCode[];
8
+ readonly reason: string;
9
+ }
10
+ /** `aura.skin-allow.json`: `{ "<assetId>": { "allow": ["SKIN_STRETCH"], "reason": "why this known defect ships" } }`. A reason is required. */
11
+ export declare function readSkinAllowlist(projectDir: string): Record<string, SkinAllowEntry>;
12
+ export declare function isRiggedGlb(path: string): boolean;
13
+ export interface SkinCliOptions {
14
+ readonly file?: string;
15
+ readonly assetIds?: readonly string[];
16
+ readonly clips?: readonly string[];
17
+ readonly samples?: number;
18
+ readonly stretchLimit?: number;
19
+ readonly strict?: boolean;
20
+ readonly warnOnly?: readonly SkinCode[];
21
+ readonly ignoreMaterials?: RegExp;
22
+ readonly json?: boolean;
23
+ }
24
+ export interface SkinAssetResult {
25
+ readonly id: string;
26
+ readonly file: string;
27
+ readonly report: SkinReport;
28
+ readonly allowed: readonly SkinCode[];
29
+ readonly allowReason?: string;
30
+ readonly ok: boolean;
31
+ }
32
+ export interface SkinProjectReport {
33
+ readonly ok: boolean;
34
+ readonly messages: readonly string[];
35
+ readonly failures: readonly string[];
36
+ readonly warnings: readonly string[];
37
+ readonly assets: readonly SkinAssetResult[];
38
+ }
39
+ /** Skin check of one asset, with its allow-list entry applied (allowed codes become warnings that carry the reason). */
40
+ export declare function checkAssetSkin(id: string, file: string, options: SkinCliOptions, allow: Record<string, SkinAllowEntry>): SkinAssetResult;
41
+ export declare function checkProjectSkins(projectDir: string, options?: SkinCliOptions): SkinProjectReport;
42
+ /** Release gate for `validateAssets` / `check-deploy --release`: failures only, with the allow-list applied. */
43
+ export declare function skinReleaseFailures(projectDir: string, asset: {
44
+ readonly id: string;
45
+ readonly format?: string;
46
+ readonly outputPath: string;
47
+ readonly derived?: {
48
+ readonly outputPath?: string;
49
+ };
50
+ }, allow: Record<string, SkinAllowEntry>): {
51
+ failures: string[];
52
+ warnings: string[];
53
+ };
54
+ export declare function formatSkinReport(report: SkinReport, label: string): string;
55
+ export declare function formatProjectSkinReport(report: SkinProjectReport): string;
56
+ export interface RepairSkinCliOptions extends RepairSkinOptions {
57
+ readonly rebuildLimbs?: boolean;
58
+ readonly materialMap?: RebuildLimbsOptions["materials"];
59
+ readonly out?: string;
60
+ }
61
+ export declare function resolveAssetFile(projectDir: string, target: string): string;
62
+ export declare function parseMaterialMap(raw: string | undefined): RebuildLimbsOptions["materials"] | undefined;
63
+ export declare function runRepairSkin(projectDir: string, target: string, options: RepairSkinCliOptions): {
64
+ readonly ok: boolean;
65
+ readonly out: string;
66
+ readonly messages: readonly string[];
67
+ readonly report: unknown;
68
+ };
69
+ export declare const SKIN_HELP = "aura3d assets validate --skin [file.glb] [--asset id[,id]] [--clips Walk,Run] [--samples 10] [--stretch-limit 1.6] [--strict] [--warn-only CODE,CODE] [--json]\n Poses every rigged GLB through the clips it ships and fails on stretched triangles (SKIN_STRETCH), thin long flaps (SKIN_FLAP), bad weights (SKIN_WEIGHT_SUM), distant influences (SKIN_WEIGHT_DISTANT), a mesh not in its skeleton's pose (SKIN_BIND_MISMATCH, warning unless --strict) and impossible joint ranges (SKIN_JOINT_RANGE).\n Known defects that ship are listed with a reason in aura.skin-allow.json.\naura3d assets repair-skin <file.glb|assetId> [--out file.glb] [--normalize] [--max-influences 4] [--prune-distant] [--smooth-bridges] [--cut-stretch 2] [--rebuild-limbs [--material-map skin=skin,shorts=short,socks=sock,boots=dark]] [--json]\n Every step is opt-in. --rebuild-limbs rebuilds the legs of a recognised humanoid in the pose its skeleton assumes (generalised from the Aura FC fix).";
70
+ export { DEFAULT_SKIN_THRESHOLDS };
71
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../../packages/aura3d-cli/src/skin/command.ts"],"names":[],"mappings":"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"}