@vincentt-xr/sdk 2.0.0-alpha.7 → 2.0.0-alpha.9

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 (639) hide show
  1. package/GROUNDING.md +5651 -82
  2. package/README.md +1 -0
  3. package/dist/CanonicalHeadFrame-BHcWyaiK.js +1506 -0
  4. package/dist/CanonicalHeadFrame-D-_T1OMU.cjs +1 -0
  5. package/dist/DebuggerUI-7ngnJsBe.js +275 -0
  6. package/dist/DebuggerUI-CoglgKdO.cjs +1 -0
  7. package/dist/FaceRetouch-CLoTfrcs.js +1071 -0
  8. package/dist/FaceRetouch-J1lC1WbS.cjs +134 -0
  9. package/dist/FaceSurface-CHAMEeG1.cjs +1 -0
  10. package/dist/FaceSurface-DmP9AEeC.js +27 -0
  11. package/dist/SegmentationOverlay-D_FWkcyP.cjs +35 -0
  12. package/dist/SegmentationOverlay-vn5x_knv.js +6237 -0
  13. package/dist/SkeletonUtils-C2r90MtN.js +21 -0
  14. package/dist/SkeletonUtils-CddIup1F.cjs +1 -0
  15. package/dist/TextLabel-XE0rQSDn.cjs +2 -0
  16. package/dist/TextLabel-c9BCucOI.js +961 -0
  17. package/dist/assets/cache.d.ts +99 -0
  18. package/dist/assets/estimate.d.ts +11 -0
  19. package/dist/assets/gltfLoader.d.ts +16 -0
  20. package/dist/assets/index.d.ts +7 -0
  21. package/dist/assets/loaders.d.ts +43 -0
  22. package/dist/assets/react.d.ts +33 -0
  23. package/dist/body-pose/index.d.ts +521 -0
  24. package/dist/body-trigger/__fixtures__/syntheticBody.d.ts +83 -0
  25. package/dist/body-trigger/frame.d.ts +88 -0
  26. package/dist/body-trigger/index.d.ts +6 -0
  27. package/dist/body-trigger/moves.d.ts +235 -0
  28. package/dist/body-trigger/trigger.d.ts +75 -0
  29. package/dist/calibration/calibration.d.ts +75 -0
  30. package/dist/calibration/index.d.ts +6 -0
  31. package/dist/calibration/storage.d.ts +13 -0
  32. package/dist/calibration/types.d.ts +53 -0
  33. package/dist/calibration/useXRCalibration.d.ts +46 -0
  34. package/dist/camera/CameraPermissionGate.d.ts +26 -0
  35. package/dist/camera/devices.d.ts +26 -0
  36. package/dist/camera/index.d.ts +8 -0
  37. package/dist/camera/permission.d.ts +86 -0
  38. package/dist/camera/useCameraPermission.d.ts +35 -0
  39. package/dist/canonicalFace-BHwyCx1c.js +9 -0
  40. package/dist/canonicalFace-C83I225R.cjs +1 -0
  41. package/dist/capabilities/detect.d.ts +45 -0
  42. package/dist/capabilities/index.d.ts +5 -0
  43. package/dist/capabilities/types.d.ts +120 -0
  44. package/dist/capabilities/useXRCapabilities.d.ts +18 -0
  45. package/dist/compat/environment.d.ts +5 -0
  46. package/dist/compat/index.d.ts +4 -0
  47. package/dist/compat/run.d.ts +18 -0
  48. package/dist/compat/scenarios.d.ts +10 -0
  49. package/dist/compat/types.d.ts +101 -0
  50. package/dist/components/BodyInstruction/BodyPoseHint.d.ts +63 -0
  51. package/dist/components/BodyInstruction/index.d.ts +69 -0
  52. package/dist/components/BodyInstruction/useBodyPose.d.ts +23 -0
  53. package/dist/components/BodyTracker/index.d.ts +17 -0
  54. package/dist/components/BodyTrigger/index.d.ts +49 -0
  55. package/dist/components/Debugger/DebuggerProvider.d.ts +14 -1
  56. package/dist/components/Debugger/DebuggerUI.d.ts +3 -1
  57. package/dist/components/FaceAtlas/FaceAtlasLayer.d.ts +114 -0
  58. package/dist/components/FaceAtlas/MadeUpCamera.d.ts +80 -0
  59. package/dist/components/FaceAtlas/constants.d.ts +8 -0
  60. package/dist/components/FaceAtlas/index.d.ts +7 -0
  61. package/dist/components/FaceAtlas/useFaceAtlasSurface.d.ts +84 -0
  62. package/dist/components/FaceAtlas/useFaceSkin.d.ts +84 -0
  63. package/dist/components/FaceCharacter/ExternalFaceMesh.d.ts +109 -0
  64. package/dist/components/FaceCharacter/FaceExpressionController.d.ts +53 -0
  65. package/dist/components/FaceCharacter/FaceMorph.d.ts +71 -0
  66. package/dist/components/FaceCharacter/FacePiercing.d.ts +65 -0
  67. package/dist/components/FaceCharacter/FaceReprojection.d.ts +85 -0
  68. package/dist/components/FaceCharacter/FaceRig.d.ts +38 -0
  69. package/dist/components/FaceCharacter/FaceSurface.d.ts +49 -0
  70. package/dist/components/FaceCharacter/FaceSurfaceOccluder.d.ts +39 -0
  71. package/dist/components/FaceCharacter/PinToFaceMesh.d.ts +68 -0
  72. package/dist/components/FaceCharacter/index.d.ts +18 -0
  73. package/dist/components/FaceCharacter/useFaceReprojector.d.ts +10 -0
  74. package/dist/components/FaceInset/FaceInset.d.ts +68 -0
  75. package/dist/components/FaceInset/frame.d.ts +94 -0
  76. package/dist/components/FaceInset/index.d.ts +6 -0
  77. package/dist/components/FaceInset/material.d.ts +40 -0
  78. package/dist/components/FaceInset/useFaceInsetTexture.d.ts +37 -0
  79. package/dist/components/FaceInstruction/FaceExpressionHint.d.ts +43 -0
  80. package/dist/components/FaceInstruction/index.d.ts +56 -0
  81. package/dist/components/FaceInstruction/useFaceExpression.d.ts +20 -0
  82. package/dist/components/FaceLiquify/FaceLiquify.d.ts +49 -0
  83. package/dist/components/FaceLiquify/debug.d.ts +37 -0
  84. package/dist/components/FaceLiquify/frame.d.ts +55 -0
  85. package/dist/components/FaceLiquify/index.d.ts +10 -0
  86. package/dist/components/FaceLiquify/material.d.ts +39 -0
  87. package/dist/components/FaceLiquify/pass.d.ts +49 -0
  88. package/dist/components/FaceLiquify/presence.d.ts +25 -0
  89. package/dist/components/FaceLiquify/presets.d.ts +82 -0
  90. package/dist/components/FaceLiquify/selfTest.d.ts +66 -0
  91. package/dist/components/FaceLiquify/target.d.ts +85 -0
  92. package/dist/components/FaceLiquify/warp.d.ts +72 -0
  93. package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +37 -5
  94. package/dist/components/FaceMesh/canonical/geometryGroups.d.ts +21 -0
  95. package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +21 -0
  96. package/dist/components/FaceMesh/canonical/shaders.d.ts +1 -1
  97. package/dist/components/FaceMesh/index.d.ts +2 -2
  98. package/dist/components/FaceRetouch/Background.d.ts +3 -1
  99. package/dist/components/FaceRetouch/FaceRetouch.d.ts +5 -0
  100. package/dist/components/FaceRetouch/renderState.d.ts +19 -0
  101. package/dist/components/FaceSwap/FaceMirror.d.ts +46 -0
  102. package/dist/components/FaceSwap/FaceSwap.d.ts +58 -0
  103. package/dist/components/FaceSwap/FaceTextureLayer.d.ts +72 -0
  104. package/dist/components/FaceSwap/faceSwapPlan.d.ts +91 -0
  105. package/dist/components/FaceSwap/index.d.ts +13 -0
  106. package/dist/components/FaceSwap/settings.d.ts +300 -0
  107. package/dist/components/FaceSwap/useFaceTexture.d.ts +35 -0
  108. package/dist/components/FaceSwap/useLiveFace.d.ts +38 -0
  109. package/dist/components/FaceSwap/useLiveFaceTexture.d.ts +31 -0
  110. package/dist/components/FaceWarp3D/FaceWarp3D.d.ts +50 -0
  111. package/dist/components/FaceWarp3D/index.d.ts +2 -3
  112. package/dist/components/Faceless/Faceless.d.ts +51 -0
  113. package/dist/components/Faceless/index.d.ts +2 -0
  114. package/dist/components/GestureListener/index.d.ts +11 -0
  115. package/dist/components/HairLock/HairLock.d.ts +39 -0
  116. package/dist/components/HairLock/index.d.ts +2 -0
  117. package/dist/components/HairLock/lockGeometry.d.ts +15 -0
  118. package/dist/components/HandCutout/index.d.ts +35 -0
  119. package/dist/components/HandInstruction/HandGestureHint.d.ts +70 -0
  120. package/dist/components/HandInstruction/index.d.ts +74 -0
  121. package/dist/components/HandInstruction/useHandGesture.d.ts +22 -0
  122. package/dist/components/HandRig/ForearmOccluder.d.ts +29 -0
  123. package/dist/components/HandRig/HandAttachment.d.ts +34 -0
  124. package/dist/components/HandRig/HandOccluder.d.ts +55 -0
  125. package/dist/components/HandRig/HandTattoo.d.ts +61 -0
  126. package/dist/components/HandRig/WristAttachment.d.ts +34 -0
  127. package/dist/components/HandRig/index.d.ts +101 -0
  128. package/dist/components/HandRig/useArmMask.d.ts +29 -0
  129. package/dist/components/HandRig/wristSolve.d.ts +69 -0
  130. package/dist/components/HandTouch/HandTouch.d.ts +62 -0
  131. package/dist/components/HandTouch/Touchable.d.ts +36 -0
  132. package/dist/components/HandTouch/index.d.ts +2 -0
  133. package/dist/components/HandTracker/index.d.ts +10 -0
  134. package/dist/components/HeadBinding/index.d.ts +14 -0
  135. package/dist/components/HeadOccluder/CanonicalHeadFrame.d.ts +22 -0
  136. package/dist/components/HeadOccluder/Earrings.d.ts +55 -0
  137. package/dist/components/HeadOccluder/HeadAttachment.d.ts +38 -0
  138. package/dist/components/HeadOccluder/NeckOccluder.d.ts +64 -0
  139. package/dist/components/HeadOccluder/earringPlacement.d.ts +31 -0
  140. package/dist/components/HeadOccluder/headAttachmentPoints.d.ts +69 -0
  141. package/dist/components/HeadOccluder/index.d.ts +57 -3
  142. package/dist/components/HeadOccluder/useCanonicalHeadFit.d.ts +36 -0
  143. package/dist/components/HeadOccluder/useLandmarkPoseFit.d.ts +80 -0
  144. package/dist/components/HolisticTracker/index.d.ts +69 -0
  145. package/dist/components/HolisticTracker/settings.d.ts +58 -0
  146. package/dist/components/HolisticTracker/signals.d.ts +49 -0
  147. package/dist/components/Instruction/HintStage.d.ts +29 -0
  148. package/dist/components/Instruction/InstructionCue.d.ts +126 -0
  149. package/dist/components/Instruction/gestureHold.d.ts +20 -0
  150. package/dist/components/Instruction/ghost.d.ts +129 -0
  151. package/dist/components/Instruction/hintBlend.d.ts +19 -0
  152. package/dist/components/Instruction/hintLook.d.ts +81 -0
  153. package/dist/components/Instruction/hintLoop.d.ts +36 -0
  154. package/dist/components/Instruction/index.d.ts +41 -0
  155. package/dist/components/Instruction/useGhostModel.d.ts +33 -0
  156. package/dist/components/Instruction/useInstructionHold.d.ts +72 -0
  157. package/dist/components/IrisEffect/IrisMaterial.d.ts +73 -0
  158. package/dist/components/IrisEffect/index.d.ts +51 -0
  159. package/dist/components/IrisEffect/settings.d.ts +117 -0
  160. package/dist/components/LipEffect/LipEffect.d.ts +27 -1
  161. package/dist/components/LipEffect/LipEffectMaterial.d.ts +95 -7
  162. package/dist/components/LipEffect/LipEffects.d.ts +12 -0
  163. package/dist/components/LipEffect/defaults.d.ts +46 -4
  164. package/dist/components/LipEffect/index.d.ts +11 -3
  165. package/dist/components/LipEffect/lipShading.d.ts +73 -0
  166. package/dist/components/LipEffect/settings.d.ts +375 -0
  167. package/dist/components/LipEffect/shader.d.ts +39 -0
  168. package/dist/components/LipEffect/types.d.ts +128 -9
  169. package/dist/components/LipEffect/useLipDesignTextures.d.ts +17 -0
  170. package/dist/components/LipEffect/uvGuide.d.ts +74 -0
  171. package/dist/components/Makeup/Blush.d.ts +18 -0
  172. package/dist/components/Makeup/Brows.d.ts +20 -0
  173. package/dist/components/Makeup/Contour.d.ts +17 -0
  174. package/dist/components/Makeup/Eyeliner.d.ts +20 -0
  175. package/dist/components/Makeup/Eyeshadow.d.ts +20 -0
  176. package/dist/components/Makeup/Highlighter.d.ts +18 -0
  177. package/dist/components/Makeup/MakeupDesign.d.ts +37 -0
  178. package/dist/components/Makeup/MakeupRegion.d.ts +132 -0
  179. package/dist/components/Makeup/constants.d.ts +44 -0
  180. package/dist/components/Makeup/design.d.ts +106 -0
  181. package/dist/components/Makeup/designSamples.d.ts +42 -0
  182. package/dist/components/Makeup/eyes.d.ts +114 -0
  183. package/dist/components/Makeup/fields.d.ts +10 -0
  184. package/dist/components/Makeup/geometry.d.ts +106 -0
  185. package/dist/components/Makeup/index.d.ts +26 -0
  186. package/dist/components/Makeup/looks.d.ts +28 -0
  187. package/dist/components/Makeup/material.d.ts +239 -0
  188. package/dist/components/Makeup/settings.d.ts +54 -0
  189. package/dist/components/Makeup/shades.d.ts +143 -0
  190. package/dist/components/Makeup/shapes.d.ts +27 -0
  191. package/dist/components/Makeup/skinTone.d.ts +135 -0
  192. package/dist/components/Makeup/types.d.ts +110 -0
  193. package/dist/components/Makeup/useMakeupSkinTone.d.ts +40 -0
  194. package/dist/components/Necklace/Necklace.d.ts +44 -0
  195. package/dist/components/Necklace/index.d.ts +1 -0
  196. package/dist/components/ParticleEmitter/ParticleEmitter.d.ts +69 -0
  197. package/dist/components/ParticleEmitter/index.d.ts +1 -0
  198. package/dist/components/PersonCutout/index.d.ts +50 -0
  199. package/dist/components/PersonCutout/personCutout.d.ts +16 -0
  200. package/dist/components/ScreenImage/components/ScreenImageBody.d.ts +1 -1
  201. package/dist/components/ScreenImage/index.d.ts +3 -1
  202. package/dist/components/ScreenImage/materials/ScreenImageBlendMaterial.d.ts +1 -1
  203. package/dist/components/ScreenImage/materials/ScreenImageMaskMaterial.d.ts +11 -0
  204. package/dist/components/ScreenImage/source.d.ts +6 -0
  205. package/dist/components/ScreenImage/types.d.ts +18 -0
  206. package/dist/components/SegmentationOverlay/SegmentationOverlay.d.ts +37 -0
  207. package/dist/components/SegmentationOverlay/SegmentationOverlayMaterial.d.ts +31 -0
  208. package/dist/components/SegmentationOverlay/index.d.ts +9 -0
  209. package/dist/components/SegmentationOverlay/maskTexture.d.ts +23 -0
  210. package/dist/components/SegmentationOverlay/providers.d.ts +72 -0
  211. package/dist/components/SegmentationOverlay/settings.d.ts +65 -0
  212. package/dist/components/ShoulderOccluder/index.d.ts +43 -0
  213. package/dist/components/ShoulderOccluder/useCanonicalTorsoFit.d.ts +24 -0
  214. package/dist/components/SpringSwing/SpringSwing.d.ts +22 -0
  215. package/dist/components/SpringSwing/index.d.ts +1 -0
  216. package/dist/components/XRProvider/index.d.ts +16 -2
  217. package/dist/components/XRScene/renderOutputTarget.d.ts +12 -0
  218. package/dist/components/XRViewport/hooks/useViewportExternalFaces.d.ts +1 -1
  219. package/dist/components/XRViewport/hooks/useViewportMediaSource.d.ts +1 -1
  220. package/dist/components/XRViewport/hooks/useViewportPipeline.d.ts +1 -1
  221. package/dist/components/index.d.ts +11 -0
  222. package/dist/config/index.d.ts +0 -1
  223. package/dist/constants/index.d.ts +4 -1
  224. package/dist/context-DTxSQvp4.js +13 -0
  225. package/dist/context-hA0Rb2Xa.cjs +1 -0
  226. package/dist/contexts-BH7PdKFS.cjs +1 -0
  227. package/dist/contexts-jak8-tND.js +667 -0
  228. package/dist/coordinates/feed.d.ts +52 -0
  229. package/dist/coordinates/index.d.ts +7 -0
  230. package/dist/coordinates/side.d.ts +40 -0
  231. package/dist/coordinates/spaces.d.ts +49 -0
  232. package/dist/coordinates/viewport.d.ts +22 -0
  233. package/dist/coordinates/world.d.ts +15 -0
  234. package/dist/debug-ui/default-setting.cjs +2 -2
  235. package/dist/debug-ui/face-swap-settings/index.d.ts +22 -0
  236. package/dist/debug-ui/gesture-settings/index.d.ts +14 -0
  237. package/dist/debug-ui/hierarchy-panel/index.d.ts +3 -2
  238. package/dist/debug-ui/holistic-tracker-settings/index.d.ts +16 -0
  239. package/dist/debug-ui/index.d.ts +18 -3
  240. package/dist/debug-ui/iris-effect-settings/index.d.ts +12 -0
  241. package/dist/debug-ui/lip-effect-settings/index.d.ts +15 -0
  242. package/dist/debug-ui/media-source/index.d.ts +1 -1
  243. package/dist/debug-ui/media-source/session.d.ts +30 -2
  244. package/dist/debug-ui/media-source.cjs +1 -1
  245. package/dist/debug-ui/media-source.js +1 -1
  246. package/dist/debug-ui/object-inspector-panel/index.d.ts +3 -2
  247. package/dist/debug-ui/product-hotspots/index.d.ts +25 -0
  248. package/dist/debug-ui/scene-editor/hierarchy-panel.d.ts +3 -1
  249. package/dist/debug-ui/scene-editor/inspector-panel.d.ts +3 -1
  250. package/dist/debug-ui/screen-image-settings/index.d.ts +3 -1
  251. package/dist/debug-ui/screen-text-settings/ScreenTextSettingsPanel.d.ts +1 -1
  252. package/dist/debug-ui/screen-text-settings/types.d.ts +2 -0
  253. package/dist/debug-ui/segmentation-overlay-settings/index.d.ts +12 -0
  254. package/dist/debug-ui/settings-panel/index.d.ts +6 -1
  255. package/dist/debug-ui/shared/debugWindow.d.ts +51 -0
  256. package/dist/debug-ui/xr-diagnostics/index.d.ts +26 -0
  257. package/dist/debug-ui.cjs +3 -3
  258. package/dist/debug-ui.js +2695 -2547
  259. package/dist/detector-K8aej4MB.js +59 -0
  260. package/dist/detector-ijypGtse.cjs +1 -0
  261. package/dist/entries/all.d.ts +3 -1
  262. package/dist/entries/core.d.ts +20 -2
  263. package/dist/entries/face-effects.d.ts +123 -9
  264. package/dist/entries/instructions.d.ts +48 -0
  265. package/dist/entries/internal.d.ts +2 -1
  266. package/dist/entries/low-level.d.ts +49 -3
  267. package/dist/entries/particles.d.ts +11 -0
  268. package/dist/entries/product.d.ts +11 -0
  269. package/dist/entries/tracking.d.ts +60 -2
  270. package/dist/face-atlas/attributes.d.ts +30 -0
  271. package/dist/face-atlas/eyes.d.ts +272 -0
  272. package/dist/face-atlas/faceAtlas.generated.d.ts +46 -0
  273. package/dist/face-atlas/glsl/atlasVertex.d.ts +46 -0
  274. package/dist/face-atlas/glsl/common.d.ts +55 -0
  275. package/dist/face-atlas/glsl/design.d.ts +49 -0
  276. package/dist/face-atlas/glsl/eyes.d.ts +73 -0
  277. package/dist/face-atlas/glsl/finish.d.ts +24 -0
  278. package/dist/face-atlas/glsl/format.d.ts +4 -0
  279. package/dist/face-atlas/glsl/index.d.ts +59 -0
  280. package/dist/face-atlas/glsl/shading.d.ts +15 -0
  281. package/dist/face-atlas/glsl/shapes.d.ts +66 -0
  282. package/dist/face-atlas/glsl/sparkle.d.ts +19 -0
  283. package/dist/face-atlas/glsl/uniforms.d.ts +106 -0
  284. package/dist/face-atlas/guide.d.ts +51 -0
  285. package/dist/face-atlas/index.d.ts +25 -0
  286. package/dist/face-atlas/lead.d.ts +117 -0
  287. package/dist/face-atlas/madeUpCamera.d.ts +125 -0
  288. package/dist/face-atlas/masks.d.ts +53 -0
  289. package/dist/face-atlas/obj.d.ts +69 -0
  290. package/dist/face-atlas/polylines.d.ts +63 -0
  291. package/dist/face-atlas/probe/FaceSkinProbe.d.ts +208 -0
  292. package/dist/face-atlas/probe/__fixtures__/emulate.d.ts +9 -0
  293. package/dist/face-atlas/probe/__fixtures__/face.d.ts +24 -0
  294. package/dist/face-atlas/probe/constants.d.ts +137 -0
  295. package/dist/face-atlas/probe/glsl.d.ts +43 -0
  296. package/dist/face-atlas/probe/lightFit.d.ts +108 -0
  297. package/dist/face-atlas/probe/schedule.d.ts +44 -0
  298. package/dist/face-atlas/probe/selfTest.d.ts +87 -0
  299. package/dist/face-atlas/probe/stats.d.ts +143 -0
  300. package/dist/face-atlas/probe/targets.d.ts +70 -0
  301. package/dist/face-atlas/probe/unwrap.d.ts +76 -0
  302. package/dist/face-atlas/quality.d.ts +28 -0
  303. package/dist/face-atlas/regions.d.ts +31 -0
  304. package/dist/face-atlas/registry.d.ts +252 -0
  305. package/dist/face-atlas/renderState.d.ts +86 -0
  306. package/dist/face-atlas/selfOcclusion.d.ts +62 -0
  307. package/dist/face-atlas/shading.d.ts +406 -0
  308. package/dist/face-atlas/shapes.d.ts +86 -0
  309. package/dist/face-atlas/sides.d.ts +41 -0
  310. package/dist/face-atlas/skinMask.d.ts +35 -0
  311. package/dist/face-atlas/surface.d.ts +155 -0
  312. package/dist/face-atlas/topology.d.ts +44 -0
  313. package/dist/face-character/__fixtures__/faceImageDetections.d.ts +25 -0
  314. package/dist/face-character/__fixtures__/faceNode.d.ts +22 -0
  315. package/dist/face-character/bindFaceModel.d.ts +106 -0
  316. package/dist/face-character/canonicalFace.d.ts +17 -0
  317. package/dist/face-character/canonicalFaceGeometry.d.ts +11 -0
  318. package/dist/face-character/canonicalFacePositions.d.ts +7 -0
  319. package/dist/face-character/driveFaceModel.d.ts +57 -0
  320. package/dist/face-character/expressionOutputs.d.ts +45 -0
  321. package/dist/face-character/faceExpressions.d.ts +104 -0
  322. package/dist/face-character/faceImageLandmarker.d.ts +93 -0
  323. package/dist/face-character/faceMeshBinding.d.ts +62 -0
  324. package/dist/face-character/faceMorph.d.ts +77 -0
  325. package/dist/face-character/faceMorphs.d.ts +46 -0
  326. package/dist/face-character/facePhoto.d.ts +138 -0
  327. package/dist/face-character/facePiercings.d.ts +116 -0
  328. package/dist/face-character/facePin.d.ts +131 -0
  329. package/dist/face-character/faceReprojection.d.ts +273 -0
  330. package/dist/face-character/faceReprojector.d.ts +171 -0
  331. package/dist/face-character/faceRig.d.ts +176 -0
  332. package/dist/face-character/faceSwapPresence.d.ts +85 -0
  333. package/dist/face-character/faceTexture.d.ts +169 -0
  334. package/dist/face-character/faceTextureBaker.d.ts +86 -0
  335. package/dist/face-character/faceTextureGuide.d.ts +106 -0
  336. package/dist/face-character/faceTextureStats.d.ts +298 -0
  337. package/dist/face-character/faceTransfer.d.ts +396 -0
  338. package/dist/face-character/faceTransferGeometry.d.ts +109 -0
  339. package/dist/face-character/faceTransferSelfTest.d.ts +94 -0
  340. package/dist/face-character/faceWarp3D.d.ts +101 -0
  341. package/dist/face-character/faceless.d.ts +79 -0
  342. package/dist/face-character/featureWarp.d.ts +28 -0
  343. package/dist/face-character/liveFaceRegistry.d.ts +370 -0
  344. package/dist/face-character/liveValue.d.ts +12 -0
  345. package/dist/face-character/memo.d.ts +15 -0
  346. package/dist/face-effects.cjs +2324 -1
  347. package/dist/face-effects.js +14208 -2268
  348. package/dist/face-expression/index.d.ts +182 -0
  349. package/dist/face-info/landmarks.d.ts +17 -3
  350. package/dist/face-info/types.d.ts +20 -3
  351. package/dist/gestures/definitions.d.ts +98 -0
  352. package/dist/gestures/detector.d.ts +87 -0
  353. package/dist/gestures/index.d.ts +8 -0
  354. package/dist/gestures/measures.d.ts +114 -0
  355. package/dist/gestures/settings.d.ts +49 -0
  356. package/dist/getFaceInfo-B1otSDMX.cjs +1 -0
  357. package/dist/getFaceInfo-Cu4xDWiL.js +62 -0
  358. package/dist/hand/armFit.d.ts +46 -0
  359. package/dist/hand/armMask.d.ts +178 -0
  360. package/dist/hand/handCutout.d.ts +23 -0
  361. package/dist/hand/handCutoutRegistry.d.ts +7 -0
  362. package/dist/hand/handGestures.d.ts +524 -0
  363. package/dist/hand/handPose.d.ts +98 -0
  364. package/dist/hand/handRigSolver.d.ts +159 -0
  365. package/dist/hand/handTattoo.d.ts +81 -0
  366. package/dist/hand/handTouch.d.ts +240 -0
  367. package/dist/hand/wrist.d.ts +44 -0
  368. package/dist/hand/wristFilter.d.ts +44 -0
  369. package/dist/hooks/selectors.d.ts +76 -1
  370. package/dist/hooks/useCalibrationFaceTracker.d.ts +1 -1
  371. package/dist/hooks/useFaceInfo.d.ts +13 -1
  372. package/dist/hooks/useFaceInfos.d.ts +1 -1
  373. package/dist/hooks/useFaceModelAcquisition.d.ts +38 -0
  374. package/dist/hooks/useGesture.d.ts +32 -0
  375. package/dist/hooks/useIrisTracking.d.ts +45 -0
  376. package/dist/hooks/useTrackerContext.d.ts +6 -0
  377. package/dist/hooks/useXRDiagnostics.d.ts +81 -0
  378. package/dist/hooks/useXRModel.d.ts +7 -0
  379. package/dist/hooks/useXRSession/facade.d.ts +42 -2
  380. package/dist/hooks/useXRSession/index.d.ts +2 -2
  381. package/dist/hooks/useXRSession/reason.d.ts +3 -1
  382. package/dist/hooks/useXRSession/registry.d.ts +14 -0
  383. package/dist/hooks/useXRSession/store.d.ts +52 -3
  384. package/dist/index-B1_TzJaI.js +1104 -0
  385. package/dist/index-BavF06C6.js +190 -0
  386. package/dist/index-BfFmpddl.cjs +21 -0
  387. package/dist/index-BuBzneeW.cjs +46 -0
  388. package/dist/index-CGsQWodV.cjs +1 -0
  389. package/dist/index-CIe7eCMH.js +3200 -0
  390. package/dist/index-CfSF8LXa.cjs +1 -0
  391. package/dist/index-D5GTzOzD.cjs +1 -0
  392. package/dist/index-DBhQzvVa.js +314 -0
  393. package/dist/index-DE17y0ZI.cjs +1 -0
  394. package/dist/index-JII7huPk.js +442 -0
  395. package/dist/index-tpCr9CLj.cjs +1 -0
  396. package/dist/index-w1S7fI2B.js +1432 -0
  397. package/dist/index-zGaqrz_K.js +188 -0
  398. package/dist/instructions.cjs +30 -0
  399. package/dist/instructions.js +1507 -0
  400. package/dist/{internal-Dmk1cTXq.js → internal-B90P-clC.js} +138 -119
  401. package/dist/internal-Cjinca64.cjs +1 -0
  402. package/dist/internal.cjs +1 -1
  403. package/dist/internal.js +15 -10
  404. package/dist/iris/compute.d.ts +27 -0
  405. package/dist/iris/index.d.ts +4 -0
  406. package/dist/iris/lead.d.ts +19 -0
  407. package/dist/iris/types.d.ts +89 -0
  408. package/dist/landmarkMask-BFDyBnKM.js +224 -0
  409. package/dist/landmarkMask-u7es2k4X.cjs +1 -0
  410. package/dist/landmarks-BlUqf5MZ.cjs +1 -0
  411. package/dist/landmarks-bftdwq6Z.js +76 -0
  412. package/dist/loaders-BGAUACsd.js +363 -0
  413. package/dist/loaders-BJ1_QCHt.cjs +1 -0
  414. package/dist/low-level.cjs +1 -1
  415. package/dist/low-level.js +1190 -675
  416. package/dist/main.cjs +1 -1
  417. package/dist/main.js +1190 -452
  418. package/dist/models/Base/index.d.ts +49 -0
  419. package/dist/models/Body/index.d.ts +3 -1
  420. package/dist/models/Face/constants.d.ts +8 -0
  421. package/dist/models/Face/index.d.ts +4 -12
  422. package/dist/models/Face/rotation.d.ts +18 -3
  423. package/dist/models/Hand/GestureTracking.d.ts +1 -1
  424. package/dist/models/Hand/HandTracking.d.ts +17 -1
  425. package/dist/models/Holistic/index.d.ts +49 -0
  426. package/dist/models/Holistic/result.d.ts +68 -0
  427. package/dist/models/Segmentation/index.d.ts +2 -0
  428. package/dist/models/SemanticSegmentation/index.d.ts +31 -0
  429. package/dist/models/SemanticSegmentation/presets.d.ts +28 -0
  430. package/dist/models/index.d.ts +2 -0
  431. package/dist/models/nodeSource.d.ts +9 -0
  432. package/dist/particles/emission.d.ts +24 -0
  433. package/dist/particles/eyes.d.ts +24 -0
  434. package/dist/particles/glsl.d.ts +14 -0
  435. package/dist/particles/index.d.ts +10 -0
  436. package/dist/particles/motion.d.ts +42 -0
  437. package/dist/particles/presets.d.ts +12 -0
  438. package/dist/particles/ring.d.ts +58 -0
  439. package/dist/particles/selfTest.d.ts +53 -0
  440. package/dist/particles/settings.d.ts +127 -0
  441. package/dist/particles/shapes.d.ts +29 -0
  442. package/dist/particles/spawner.d.ts +60 -0
  443. package/dist/particles/system.d.ts +64 -0
  444. package/dist/particles.cjs +122 -0
  445. package/dist/particles.js +774 -0
  446. package/dist/product/ProductDimensions.d.ts +16 -0
  447. package/dist/product/ProductHotspot.d.ts +16 -0
  448. package/dist/product/ProductViewer.d.ts +9 -0
  449. package/dist/product/details.d.ts +53 -0
  450. package/dist/product/index.d.ts +14 -0
  451. package/dist/product/loadModelViewer.d.ts +4 -0
  452. package/dist/product/types.d.ts +71 -0
  453. package/dist/product/useProductAr.d.ts +37 -0
  454. package/dist/product/useProductDetails.d.ts +60 -0
  455. package/dist/product.cjs +1 -0
  456. package/dist/product.js +414 -0
  457. package/dist/providers-C8rE26Uf.js +366 -0
  458. package/dist/providers-DHsrhDI2.cjs +62 -0
  459. package/dist/quality/XRQualityController.d.ts +25 -0
  460. package/dist/quality/controller.d.ts +33 -0
  461. package/dist/quality/index.d.ts +6 -0
  462. package/dist/quality/types.d.ts +100 -0
  463. package/dist/quality/useXRQuality.d.ts +28 -0
  464. package/dist/render/renderPasses.d.ts +8 -0
  465. package/dist/render/sceneBeforeRender.d.ts +12 -0
  466. package/dist/{renderGroups-KZk6eRiY.js → renderGroups-B38pUaX2.js} +1 -1
  467. package/dist/{renderGroups-80H3DpTl.cjs → renderGroups-Cb_4Ar1Q.cjs} +1 -1
  468. package/dist/renderPasses-B6l8IpJv.js +1290 -0
  469. package/dist/renderPasses-dqmkft4P.cjs +158 -0
  470. package/dist/renderState-CJNmj5jz.js +39 -0
  471. package/dist/renderState-apSfg4eR.cjs +1 -0
  472. package/dist/scene-object.cjs +1 -1
  473. package/dist/scene-object.js +2 -2
  474. package/dist/segmentation-Cb3ouK6Z.js +1758 -0
  475. package/dist/segmentation-D9pYO6aR.cjs +1 -0
  476. package/dist/segmentation2d/faceMemory.d.ts +28 -0
  477. package/dist/segmentation2d/faceRegions.d.ts +24 -0
  478. package/dist/segmentation2d/index.d.ts +9 -0
  479. package/dist/segmentation2d/maskUv.d.ts +23 -0
  480. package/dist/segmentation2d/rasterize.d.ts +14 -0
  481. package/dist/segmentation2d/types.d.ts +52 -0
  482. package/dist/select-Ck5LGz-J.cjs +1 -0
  483. package/dist/select-pYRo_win.js +233 -0
  484. package/dist/selectors-C4X71aoD.cjs +1 -0
  485. package/dist/selectors-DmNaKIwE.js +196 -0
  486. package/dist/session-BrH8G7iJ.cjs +31 -0
  487. package/dist/session-DgA_z6O1.js +418 -0
  488. package/dist/settings-BJ7FMBsO.js +111 -0
  489. package/dist/settings-C63FMBlF.cjs +1 -0
  490. package/dist/similarityFit-BFqHND2e.cjs +1 -0
  491. package/dist/similarityFit-Bbz-R8AY.js +91 -0
  492. package/dist/spring/index.d.ts +2 -0
  493. package/dist/spring/spring.d.ts +69 -0
  494. package/dist/spring/swing.d.ts +54 -0
  495. package/dist/subjects/index.d.ts +2 -0
  496. package/dist/subjects/select.d.ts +62 -0
  497. package/dist/subjects/types.d.ts +55 -0
  498. package/dist/tracking-config/apply.d.ts +57 -0
  499. package/dist/tracking-config/index.d.ts +7 -0
  500. package/dist/tracking-config/resolve.d.ts +25 -0
  501. package/dist/tracking-config/storage.d.ts +8 -0
  502. package/dist/tracking-config/types.d.ts +106 -0
  503. package/dist/tracking-config/useXRTrackingConfig.d.ts +38 -0
  504. package/dist/tracking.cjs +10 -1
  505. package/dist/tracking.js +1326 -506
  506. package/dist/trigger-D0Pm9noT.cjs +49 -0
  507. package/dist/trigger-IQeys0oS.js +2128 -0
  508. package/dist/types/compositor.d.ts +21 -0
  509. package/dist/types/face.d.ts +20 -1
  510. package/dist/types/hand-tracking.d.ts +9 -0
  511. package/dist/types/holistic.d.ts +121 -0
  512. package/dist/types/index.d.ts +1 -0
  513. package/dist/types/model.d.ts +22 -2
  514. package/dist/types/nodes.d.ts +47 -3
  515. package/dist/types/segmentation.d.ts +24 -0
  516. package/dist/types/session.d.ts +41 -3
  517. package/dist/updateThrottle-BseecYag.js +4 -0
  518. package/dist/updateThrottle-Of5Y4SVa.cjs +1 -0
  519. package/dist/useFaceInfo-BHDNCvsJ.cjs +1 -0
  520. package/dist/useFaceInfo-J4x7LsqL.js +76 -0
  521. package/dist/useFaceResultReader-BvEo5REG.js +61 -0
  522. package/dist/useFaceResultReader-DuaL1KJG.cjs +1 -0
  523. package/dist/useInstructionHold-DOu-RpCM.js +53 -0
  524. package/dist/useInstructionHold-DwJY1Alr.cjs +1 -0
  525. package/dist/useLandmarkPoseFit-Bg-h9BPb.cjs +1 -0
  526. package/dist/useLandmarkPoseFit-Bmb3h6Mw.js +87 -0
  527. package/dist/useXRCapabilities-Cr3RzuAW.cjs +1 -0
  528. package/dist/useXRCapabilities-Cxmlmpbd.js +30 -0
  529. package/dist/utils/canonicalRigidLandmarks.d.ts +8 -0
  530. package/dist/utils/fns.d.ts +6 -3
  531. package/dist/utils/headOccluderFit.d.ts +42 -0
  532. package/dist/utils/integrity.d.ts +21 -1
  533. package/dist/utils/resolveNumFaces.d.ts +13 -0
  534. package/dist/utils/shoulderOccluderFit.d.ts +38 -0
  535. package/dist/utils/similarityFit.d.ts +23 -0
  536. package/dist/utils/updateThrottle.d.ts +2 -0
  537. package/dist/utils/useStableUniforms.d.ts +18 -0
  538. package/dist/uv-BMFt19bg.cjs +1 -0
  539. package/dist/{index-ByoNj0QP.js → uv-DJU_XfmN.js} +15 -247
  540. package/docs/SDK_DOCUMENTATION.md +1 -2
  541. package/docs/api/adaptive-quality.mdx +104 -0
  542. package/docs/api/asset-lifecycle.mdx +78 -0
  543. package/docs/api/body-instructions.mdx +285 -0
  544. package/docs/api/body-triggers.mdx +234 -0
  545. package/docs/api/camera-permission.mdx +142 -0
  546. package/docs/api/coordinate-spaces.mdx +168 -0
  547. package/docs/api/cross-camera.mdx +89 -0
  548. package/docs/api/debug-ui-scene-editor.mdx +23 -2
  549. package/docs/api/diagnostics-calibration.mdx +97 -0
  550. package/docs/api/external-face-mesh.mdx +231 -0
  551. package/docs/api/face-actions.mdx +20 -16
  552. package/docs/api/face-attribute-expression.mdx +1 -1
  553. package/docs/api/face-binding-anchors.mdx +4 -2
  554. package/docs/api/face-character.mdx +157 -0
  555. package/docs/api/face-effects.mdx +9 -0
  556. package/docs/api/face-expression-controller.mdx +153 -0
  557. package/docs/api/face-info.mdx +17 -11
  558. package/docs/api/face-inset.mdx +204 -0
  559. package/docs/api/face-instructions.mdx +183 -0
  560. package/docs/api/face-liquify.mdx +196 -0
  561. package/docs/api/face-mesh.mdx +8 -9
  562. package/docs/api/face-morph.mdx +117 -0
  563. package/docs/api/face-painting.mdx +7 -0
  564. package/docs/api/face-reprojection.mdx +154 -0
  565. package/docs/api/face-retouching.mdx +18 -10
  566. package/docs/api/face-swap.mdx +350 -0
  567. package/docs/api/face-warp-3d.mdx +166 -0
  568. package/docs/api/faceless.mdx +143 -0
  569. package/docs/api/gestures.mdx +209 -0
  570. package/docs/api/hair.mdx +97 -0
  571. package/docs/api/hand-instructions.mdx +222 -0
  572. package/docs/api/hand-rig.mdx +535 -0
  573. package/docs/api/hand-touch.mdx +162 -0
  574. package/docs/api/head-occluder.mdx +563 -0
  575. package/docs/api/holistic-tracker.mdx +164 -0
  576. package/docs/api/instructions.mdx +323 -0
  577. package/docs/api/iris-tracking.mdx +247 -0
  578. package/docs/api/made-up-camera.mdx +131 -0
  579. package/docs/api/makeup-skin-tone.mdx +135 -0
  580. package/docs/api/makeup.mdx +353 -0
  581. package/docs/api/multi-subject.mdx +98 -0
  582. package/docs/api/particles.mdx +155 -0
  583. package/docs/api/person-cutout.mdx +136 -0
  584. package/docs/api/pin-to-face-mesh.mdx +274 -0
  585. package/docs/api/product-ar.mdx +114 -0
  586. package/docs/api/product-details.mdx +78 -0
  587. package/docs/api/screen-space-coordinates.mdx +4 -1
  588. package/docs/api/segmentation-overlay.mdx +301 -0
  589. package/docs/api/session-lifecycle.mdx +136 -0
  590. package/docs/api/trackers.mdx +5 -0
  591. package/docs/api/tracking-config.mdx +108 -0
  592. package/docs/docs.json +51 -1
  593. package/docs/examples/lip-shaders.mdx +273 -0
  594. package/docs/guides/face-atlas-template.svg +1 -0
  595. package/docs/guides/face-atlas-textures.mdx +186 -0
  596. package/docs/guides/face-texture-template.svg +1 -0
  597. package/docs/guides/harness-debug-ui.mdx +4 -4
  598. package/docs/guides/lip-effect-textures.mdx +368 -0
  599. package/docs/guides/lip-uv-template.png +0 -0
  600. package/docs/guides/lip-uv-template.svg +1 -0
  601. package/docs/guides/makeup-design-textures.mdx +109 -0
  602. package/docs/introduction.mdx +1 -2
  603. package/package.json +23 -1
  604. package/dist/DebuggerUI-B6bP6P9r.cjs +0 -1
  605. package/dist/DebuggerUI-BjOMr8q_.js +0 -269
  606. package/dist/FaceMeshRenderer-C5l6VLdO.cjs +0 -155
  607. package/dist/FaceMeshRenderer-wjAHrJzP.js +0 -1270
  608. package/dist/FaceRetouch-BkJzoA79.cjs +0 -134
  609. package/dist/FaceRetouch-DwbKQJAN.js +0 -551
  610. package/dist/components/FaceWarp3D/FaceWarp3DHead.d.ts +0 -15
  611. package/dist/components/FaceWarp3D/defaults.d.ts +0 -37
  612. package/dist/components/FaceWarp3D/warp.d.ts +0 -13
  613. package/dist/contexts-ByhzppYl.js +0 -663
  614. package/dist/contexts-Dr62It_K.cjs +0 -1
  615. package/dist/debug-ui/face-warp-3d/index.d.ts +0 -6
  616. package/dist/getFaceInfo-C4QpCQIY.js +0 -118
  617. package/dist/getFaceInfo-fA1bFBub.cjs +0 -1
  618. package/dist/index-9dlAQAhy.js +0 -1462
  619. package/dist/index-BjmTe9eM.cjs +0 -1
  620. package/dist/index-BpEf2BBb.cjs +0 -1
  621. package/dist/index-CyUUurQT.cjs +0 -1
  622. package/dist/index-DCiMbxC3.cjs +0 -1
  623. package/dist/index-DXT3WccE.js +0 -2089
  624. package/dist/index-DpI-qo5X.cjs +0 -17
  625. package/dist/index-DyVF4vEW.js +0 -111
  626. package/dist/index-VJ0SJwmG.js +0 -214
  627. package/dist/internal-Cq-TEQ5Y.cjs +0 -1
  628. package/dist/renderLayers-lDtL0_43.cjs +0 -1
  629. package/dist/renderLayers-zrK2pv5O.js +0 -13
  630. package/dist/renderPasses-BOoBSr8z.cjs +0 -21
  631. package/dist/renderPasses-BcquyVtu.js +0 -1500
  632. package/dist/selectors-B8H97CKA.js +0 -59
  633. package/dist/selectors-CZLKT2Iv.cjs +0 -1
  634. package/dist/session-CpkiK5YA.cjs +0 -31
  635. package/dist/session-DLFN_VII.js +0 -363
  636. package/dist/useFaceInfo-BJ8-_MOs.cjs +0 -1
  637. package/dist/useFaceInfo-Dk426LTu.js +0 -62
  638. package/dist/useFaceResults-CtetsO9M.js +0 -19
  639. package/dist/useFaceResults-wBJF3zyp.cjs +0 -1
@@ -1,11 +1,60 @@
1
1
  import { RunModelParams } from '../../types';
2
2
  import { PerformanceData } from '../../types/common';
3
+ /**
4
+ * Per-model health read by `useXRDiagnostics`. Every field is a current value
5
+ * (not an event); `null` means "not measured yet" or "not applicable".
6
+ */
7
+ export type XRModelDiagnostics = {
8
+ /** Duration of the last inference in milliseconds. */
9
+ inferenceMs: number | null;
10
+ /** Inferences per second over the last ~1 s window. */
11
+ inferenceFps: number;
12
+ /** Total inferences since `run()`. */
13
+ inferences: number;
14
+ /**
15
+ * RAF ticks the model saw but did not analyse (throttled by `targetFps`, or
16
+ * skipped while busy). A high value next to a low `inferenceFps` means the
17
+ * cap is doing its job; a high value with no cap means the device is slow.
18
+ */
19
+ skippedFrames: number;
20
+ /** Subjects detected in the last inference (faces, hands, bodies; `null` when not applicable). */
21
+ detections: number | null;
22
+ /** Detector confidence of the primary subject, 0..1 (`null` when the model reports none). */
23
+ confidence: number | null;
24
+ /** `error` when the last inference threw; models without inline status report `"ready"`. */
25
+ status: "ready" | "error";
26
+ error: Error | null;
27
+ paused: boolean;
28
+ disposed: boolean;
29
+ };
3
30
  export declare class BaseXRModel {
4
31
  protected disposed: boolean;
5
32
  protected paused: boolean;
6
33
  protected rafId: number | null;
34
+ private statInferenceMs;
35
+ private statInferences;
36
+ private statWindowStart;
37
+ private statWindowCount;
38
+ private statFps;
39
+ private statSkipped;
40
+ private statDetections;
41
+ private statConfidence;
42
+ private statStatus;
43
+ private statError;
44
+ /** Record one completed inference that started at `startMs` (`performance.now()`). */
45
+ protected recordInference(startMs: number, endMs?: number): number;
46
+ /** Record what the last inference found (subjects and the primary confidence). */
47
+ protected recordDetections(count: number | null, confidence?: number | null): void;
48
+ /** Record an inference failure (or clear it with `null`). */
49
+ protected recordInferenceError(error: Error | null): void;
50
+ /** Current health snapshot. Allocates a small object; sample it at UI rate, not per frame. */
51
+ getDiagnostics(): XRModelDiagnostics;
7
52
  protected targetFrameIntervalMs: number;
8
53
  protected lastInferenceMs: number;
54
+ /** Analysis-resolution multiplier (0.25..1) from the quality tier; subclasses read it where they downscale. */
55
+ protected analysisScale: number;
56
+ /** Clamp and store the analysis scale; subclasses with a downscaler forward it. */
57
+ protected setAnalysisScale(scale: number | undefined): void;
9
58
  /** Set the per-frame inference cap. fps <= 0 (or undefined) → uncapped. */
10
59
  protected setTargetFps(fps: number | undefined): void;
11
60
  /**
@@ -7,6 +7,7 @@ export declare class BodyTrackingModel extends BaseXRModel {
7
7
  private landmarker;
8
8
  private processingTime;
9
9
  private coordinates;
10
+ private visibility;
10
11
  private sourceCanvas;
11
12
  private readonly downscaler;
12
13
  constructor();
@@ -15,8 +16,9 @@ export declare class BodyTrackingModel extends BaseXRModel {
15
16
  resume(): void;
16
17
  dispose(): void;
17
18
  private getLandmarks2D;
19
+ private getVisibility;
18
20
  initialize(options?: BodyModelOptions): Promise<void>;
19
- run({ sourceCanvas, targetFps }: RunModelParams): Promise<void>;
21
+ run({ sourceCanvas, targetFps, analysisScale }: RunModelParams): Promise<void>;
20
22
  getModelNode(): XRModelNodeBodyTracking;
21
23
  getPerformanceData(): Promise<PerformanceData>;
22
24
  }
@@ -1,2 +1,10 @@
1
1
  export declare const FACE_OCCLUDER_SCALE_FACTOR = 0.11;
2
2
  export declare const FACE_OCCLUDER_Y_ROTATION_OFFSET_SCALE_FACTOR = 0.004;
3
+ /**
4
+ * The face landmarker model on the SDK CDN (`libConfig.assetStorageEndpoint`).
5
+ * Its SRI hash is in `INTEGRITY_MANIFEST`. The live tracker (VIDEO mode) and
6
+ * the still-image detector (IMAGE mode) both load it.
7
+ */
8
+ export declare const FACE_TRACKING_MODEL_PATH = "/assets/xr/models/face_tracking.task";
9
+ /** The MediaPipe vision WASM folder on the SDK CDN. */
10
+ export declare const VISION_WASM_PATH = "/assets/xr/wasm";
@@ -1,4 +1,3 @@
1
- import { NormalizedLandmark } from '@mediapipe/tasks-vision';
2
1
  import { XRModelNodeFaceTracking } from '../../types/nodes';
3
2
  import { RunModelParams } from '../../types';
4
3
  import { PerformanceData } from '../../types/common';
@@ -6,6 +5,8 @@ import { FaceModelOptions } from '../../types/face';
6
5
  import { BaseXRModel } from '../Base';
7
6
  export declare class FaceTrackingModel extends BaseXRModel {
8
7
  private landmarker;
8
+ /** The face model bytes, held while this model is alive (shared with the still-image detector). */
9
+ private modelBytes;
9
10
  private processingTime;
10
11
  private sourceCanvas;
11
12
  private analysisCanvas;
@@ -16,12 +17,10 @@ export declare class FaceTrackingModel extends BaseXRModel {
16
17
  private faces;
17
18
  private leftCheekScratch;
18
19
  private rightCheekScratch;
19
- private landmarkScratch;
20
20
  private rotMatrixScratch;
21
21
  private rotQuatScratch;
22
22
  private rotEulerScratch;
23
23
  constructor();
24
- private landmarkForSource;
25
24
  private extractAndUpdateFaceData;
26
25
  private processFaceTracking;
27
26
  resume(): void;
@@ -30,17 +29,10 @@ export declare class FaceTrackingModel extends BaseXRModel {
30
29
  private getDetectionResults;
31
30
  private getRawFaceTrackingData;
32
31
  initialize(options?: FaceModelOptions): Promise<void>;
33
- run({ sourceCanvas, getSource, targetFps }: RunModelParams): Promise<void>;
32
+ private releaseModelBytes;
33
+ run({ sourceCanvas, getSource, targetFps, analysisScale, }: RunModelParams): Promise<void>;
34
34
  getModelNode(): XRModelNodeFaceTracking;
35
35
  getPerformanceData(): Promise<PerformanceData>;
36
36
  }
37
37
  export declare const resolveFaceYawRotation: (yawDegrees: number) => number;
38
38
  export declare const resolveFaceAnalysisDimension: (numFaces: number) => 1024 | 512;
39
- /**
40
- * Reference (allocating) source-aware landmark normalization. Non-webcam
41
- * sources (image/video) read mirrored from MediaPipe, so x is flipped to
42
- * display space. The per-frame extraction path uses an in-place scratch
43
- * variant (`landmarkForSource`) to avoid allocating; this pure form exists
44
- * for callers/tests that need a plain array transform.
45
- */
46
- export declare const normalizeFaceLandmarksForSource: (landmarks: NormalizedLandmark[], sourceKind?: "webcam" | "image" | "video") => NormalizedLandmark[];
@@ -1,3 +1,18 @@
1
- import { Euler, Vector3 } from 'three';
2
- /** Writes the SDK convention: up/left positive, down/right negative. */
3
- export declare const writeFaceRotation: (euler: Euler, target: Vector3) => Vector3;
1
+ import { Euler, Matrix4, Quaternion, Vector3 } from 'three';
2
+ /**
3
+ * Writes the SDK convention: up and the person's own left positive. `euler`
4
+ * is the x-mirrored, inverted pose, whose `-y` / `z` read toward the SCREEN's
5
+ * left; that is the person's left on the mirrored webcam (`feedMirrored`,
6
+ * the default), and their right on an unmirrored feed, where yaw and roll are
7
+ * negated. Negating yaw and roll of an XYZ Euler is exactly the x-mirror of
8
+ * the rotation (pitch commutes with it), so the reading is the head as seen in
9
+ * a mirror on every feed (#298).
10
+ */
11
+ export declare const writeFaceRotation: (euler: Euler, target: Vector3, feedMirrored?: boolean) => Vector3;
12
+ /**
13
+ * Writes the head's orientation from MediaPipe's facial transformation matrix:
14
+ * the rotation part, as-is. The matrix maps the canonical face into the camera
15
+ * space of the analyzed frame — the feed as displayed — whose axes are the
16
+ * three.js world axes, so no mirror or sign flip applies (#169).
17
+ */
18
+ export declare const writeFaceQuaternion: (matrix: Matrix4, target: Quaternion) => Quaternion;
@@ -15,7 +15,7 @@ export declare class GestureTrackingModel extends BaseXRModel {
15
15
  resume(): void;
16
16
  dispose(): void;
17
17
  initialize(): Promise<void>;
18
- run({ sourceCanvas, targetFps }: RunModelParams): Promise<void>;
18
+ run({ sourceCanvas, targetFps, analysisScale }: RunModelParams): Promise<void>;
19
19
  getModelNode(): XRModelNodeGestureTracking;
20
20
  getPerformanceData(): Promise<PerformanceData>;
21
21
  }
@@ -2,6 +2,20 @@ import { XRModelNodeHandTracking } from '../../types/nodes';
2
2
  import { RunModelParams } from '../../types';
3
3
  import { PerformanceData } from '../../types/common';
4
4
  import { BaseXRModel } from '../Base';
5
+ /**
6
+ * The hand landmarker's thresholds. In video mode MediaPipe keeps following a
7
+ * hand's last box while the landmark model's presence score stays over
8
+ * `minHandPresenceConfidence`; at the 0.5 default a face under a hand's last
9
+ * position kept scoring as a "ghost" hand (a `HandCutout` then cut a hole in
10
+ * the face's makeup or liquify there). 0.65 is the strictest that still keeps
11
+ * a real hand half hidden behind the other (both hands over the mouth, which
12
+ * score between 0.65 and 0.7); detection and tracking keep MediaPipe's 0.5.
13
+ */
14
+ export declare const HAND_TRACKING_CONFIDENCE: Readonly<{
15
+ minHandDetectionConfidence: 0.5;
16
+ minHandPresenceConfidence: 0.65;
17
+ minTrackingConfidence: 0.5;
18
+ }>;
5
19
  export declare class HandTrackingModel extends BaseXRModel {
6
20
  private landmarker;
7
21
  private processingTime;
@@ -9,7 +23,9 @@ export declare class HandTrackingModel extends BaseXRModel {
9
23
  private coordinates;
10
24
  private gesture;
11
25
  private handedness;
26
+ private poses;
12
27
  private sourceCanvas;
28
+ private getSource;
13
29
  private readonly downscaler;
14
30
  constructor();
15
31
  private getHandData;
@@ -17,7 +33,7 @@ export declare class HandTrackingModel extends BaseXRModel {
17
33
  resume(): void;
18
34
  dispose(): void;
19
35
  initialize(): Promise<void>;
20
- run({ sourceCanvas, targetFps }: RunModelParams): Promise<void>;
36
+ run({ sourceCanvas, getSource, targetFps, analysisScale, }: RunModelParams): Promise<void>;
21
37
  getModelNode(): XRModelNodeHandTracking;
22
38
  getPerformanceData(): Promise<PerformanceData>;
23
39
  }
@@ -0,0 +1,49 @@
1
+ import { RunModelParams } from '../../types';
2
+ import { PerformanceData } from '../../types/common';
3
+ import { HolisticModelOptions } from '../../types/holistic';
4
+ import { XRModelNodeHolisticTracking } from '../../types/nodes';
5
+ import { BaseXRModel } from '../Base';
6
+ export declare class HolisticTrackingModel extends BaseXRModel {
7
+ private landmarker;
8
+ private status;
9
+ private error;
10
+ private processingTime;
11
+ private sourceCanvas;
12
+ private getSource;
13
+ private downscaler;
14
+ private raw;
15
+ private delegatePolicy;
16
+ private delegate;
17
+ /** Kept so the graph can be rebuilt on another delegate without refetching. */
18
+ private vision;
19
+ private modelBuffer;
20
+ private graphOptions;
21
+ private rebuilding;
22
+ private fallbackAttempted;
23
+ private readonly result;
24
+ private readonly builder;
25
+ private readonly node;
26
+ constructor();
27
+ private setRuntimeOptions;
28
+ initialize(options?: HolisticModelOptions): Promise<void>;
29
+ private createLandmarker;
30
+ /**
31
+ * The GPU graph can fail on its first run (the face-blendshape stage has no
32
+ * WebGL kernel for one of its ops). Rebuild on the CPU once, keep the RAF
33
+ * loop alive meanwhile, and run one detection right away so static sources
34
+ * (which pulse models once) still get a result.
35
+ */
36
+ private fallbackToCpu;
37
+ /** One detect + publish outside the loop (used after a delegate rebuild). */
38
+ private detectOnce;
39
+ private detect;
40
+ /** The session mirrors only the webcam feed (an unknown kind is treated as webcam). */
41
+ private isMirrored;
42
+ run({ sourceCanvas, getSource, targetFps, analysisScale, }: RunModelParams): Promise<void>;
43
+ private process;
44
+ resume(): void;
45
+ dispose(): void;
46
+ getModelNode(): XRModelNodeHolisticTracking;
47
+ getPerformanceData(): Promise<PerformanceData>;
48
+ }
49
+ export { DEFAULT_HOLISTIC_ANALYSIS_MAX_DIMENSION, DEFAULT_HOLISTIC_HOLD_MS, DEFAULT_HOLISTIC_MODEL_URL, DEFAULT_HOLISTIC_PREDICT_MS, HolisticResultBuilder, createHolisticResult, resolveHolisticRuntimeOptions, } from './result';
@@ -0,0 +1,68 @@
1
+ import { HolisticLandmarkerResult } from '@mediapipe/tasks-vision';
2
+ import { TrackerPoint } from '../../types/common';
3
+ import { HolisticResult, HolisticRuntimeOptions } from '../../types/holistic';
4
+ /** MediaPipe's published holistic landmarker; the SDK CDN copy is not published yet. */
5
+ export declare const DEFAULT_HOLISTIC_MODEL_URL = "https://storage.googleapis.com/mediapipe-models/holistic_landmarker/holistic_landmarker/float16/latest/holistic_landmarker.task";
6
+ export declare const DEFAULT_HOLISTIC_HOLD_MS = 250;
7
+ export declare const DEFAULT_HOLISTIC_PREDICT_MS = 0;
8
+ /**
9
+ * Pose needs a full-body subject at distance resolved well enough to detect,
10
+ * so the cap matches `BodyTrackingModel` (768) rather than Hand/Face (512).
11
+ */
12
+ export declare const DEFAULT_HOLISTIC_ANALYSIS_MAX_DIMENSION = 768;
13
+ export declare const resolveHolisticRuntimeOptions: (options?: HolisticRuntimeOptions) => Required<HolisticRuntimeOptions>;
14
+ export declare const createHolisticResult: () => HolisticResult;
15
+ type Point3 = {
16
+ x: number;
17
+ y: number;
18
+ z: number;
19
+ };
20
+ /**
21
+ * MediaPipe Pose index with left and right swapped: 0 (nose) stays, then the
22
+ * 16 left/right pairs (eyes 1–3/4–6, ears 7/8, mouth 9/10, shoulders 11/12,
23
+ * elbows 13/14, wrists 15/16, pinkies 17/18, indexes 19/20, thumbs 21/22,
24
+ * hips 23/24, knees 25/26, ankles 27/28, heels 29/30, foot indexes 31/32).
25
+ */
26
+ export declare const MIRRORED_POSE_INDEX: readonly number[];
27
+ /**
28
+ * Converts raw MediaPipe holistic results into the SDK's unified
29
+ * `HolisticResult`, bridging dropouts per stream with `FaceTrackMemory` (the
30
+ * SDK's single hold/predict mechanism). Output arrays and objects are reused
31
+ * frame-over-frame; the published result is mutated in place.
32
+ */
33
+ export declare class HolisticResultBuilder {
34
+ private options;
35
+ private readonly faceMemory;
36
+ private readonly leftHandMemory;
37
+ private readonly rightHandMemory;
38
+ private readonly poseMemory;
39
+ private readonly face;
40
+ private readonly leftHand;
41
+ private readonly rightHand;
42
+ private readonly poseScratch;
43
+ private readonly poseWorldScratch;
44
+ private readonly pose;
45
+ constructor(options?: HolisticRuntimeOptions);
46
+ getOptions(): Required<HolisticRuntimeOptions>;
47
+ setOptions(options?: HolisticRuntimeOptions): void;
48
+ reset(): void;
49
+ private memories;
50
+ /**
51
+ * Publish `raw` (or a miss when `undefined`) into `result` at `nowMs`.
52
+ *
53
+ * `mirrored` says the analysed frame is a mirror of the person (the
54
+ * session's webcam feed). Pose left/right follow the image, and holistic
55
+ * assigns hands from the pose, so on a mirrored frame MediaPipe's "left"
56
+ * is the person's right. Swap both the hands and the pose's left/right
57
+ * landmarks so the whole result is anatomical and self-consistent
58
+ * (`leftHand` and pose wrist 15 are the same physical hand), matching the
59
+ * convention `HandTracker` reports on that feed.
60
+ */
61
+ update(raw: HolisticLandmarkerResult | undefined, nowMs: number, result: HolisticResult, mirrored?: boolean): HolisticResult;
62
+ private updateFace;
63
+ private updateHand;
64
+ private updatePose;
65
+ }
66
+ /** Convenience for tests and custom consumers: a single-stream TrackerPoint copy. */
67
+ export declare const toTrackerPoints: (landmarks: ReadonlyArray<Point3>) => TrackerPoint[];
68
+ export {};
@@ -19,6 +19,8 @@ export declare class BackgroundSegmentationModel extends BaseXRModel {
19
19
  private isProcessing;
20
20
  private latestMask;
21
21
  private rawCache;
22
+ /** When the frame behind `latestMask` was segmented (`performance.now()`). */
23
+ private latestMaskTimeMs;
22
24
  private quality;
23
25
  constructor();
24
26
  private getQualityScaleFactor;
@@ -0,0 +1,31 @@
1
+ import { PerformanceData, RunModelParams } from '../../types';
2
+ import { XRModelNodeSemanticSegmentation } from '../../types/nodes';
3
+ import { SemanticSegmentationModelOptions } from '../../types/segmentation';
4
+ import { BaseXRModel } from '../Base';
5
+ /**
6
+ * Generic MediaPipe category segmenter publishing a `SemanticMask` in feed
7
+ * space. The first acquirer picks the preset (hair or multiclass) and the
8
+ * model asset; the mask object is stable and mutated in place, with `version`
9
+ * bumped on every inference.
10
+ */
11
+ export declare class SemanticSegmentationModel extends BaseXRModel {
12
+ private segmenter;
13
+ private preset;
14
+ private quality;
15
+ private status;
16
+ private error;
17
+ private processingTime;
18
+ private sourceCanvas;
19
+ private processCanvas;
20
+ private isProcessing;
21
+ private readonly mask;
22
+ private readonly node;
23
+ constructor();
24
+ initialize(options?: SemanticSegmentationModelOptions): Promise<void>;
25
+ run({ sourceCanvas, targetFps }: RunModelParams): Promise<void>;
26
+ private process;
27
+ resume(): void;
28
+ getModelNode(): XRModelNodeSemanticSegmentation;
29
+ getPerformanceData(): Promise<PerformanceData>;
30
+ dispose(): void;
31
+ }
@@ -0,0 +1,28 @@
1
+ import { SemanticSegmentationPreset } from '../../types/segmentation';
2
+ export type SemanticSegmentationPresetSpec = {
3
+ /** Class labels in model index order; index 0 is `bg`. */
4
+ labels: readonly string[];
5
+ /**
6
+ * Model asset path on the SDK CDN. Its hash is already pinned in the
7
+ * integrity manifest; once the file is uploaded there, point `defaultUrl`
8
+ * at it.
9
+ */
10
+ assetPath: string;
11
+ /**
12
+ * Where the model loads from by default: MediaPipe's published file, whose
13
+ * bytes are pinned in the integrity manifest, so the default is verified
14
+ * (a republished file fails loudly with an SRI mismatch rather than
15
+ * silently changing behaviour).
16
+ */
17
+ defaultUrl: string;
18
+ /**
19
+ * How a category-mask byte maps to a class index. The hair and multiclass
20
+ * segmenters emit the class index itself (measured: hair reads 0 / 1). The
21
+ * SDK's portrait selfie segmenter is the odd one out and emits 255 for
22
+ * background / 0 for person; `usePersonMask` handles that separately.
23
+ */
24
+ decode: (value: number) => number;
25
+ };
26
+ export declare const SEMANTIC_SEGMENTATION_PRESET_SPECS: Record<SemanticSegmentationPreset, SemanticSegmentationPresetSpec>;
27
+ /** Decode a MediaPipe category mask into class indices, resizing `out` when needed. */
28
+ export declare const decodeCategoryMask: (raw: Uint8Array, decode: (value: number) => number, out: Uint8Array) => Uint8Array;
@@ -1,5 +1,7 @@
1
1
  export { BodyTrackingModel } from './Body';
2
2
  export { FaceTrackingModel } from './Face';
3
3
  export { GestureTrackingModel } from './Hand/GestureTracking';
4
+ export { HolisticTrackingModel } from './Holistic';
4
5
  export { HandTrackingModel } from './Hand/HandTracking';
5
6
  export { BackgroundSegmentationModel } from './Segmentation';
7
+ export { SemanticSegmentationModel } from './SemanticSegmentation';
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The model behind a model node. `getModelNode()` builds a new node object on
3
+ * each call (each `useXRModelNode` consumer holds its own), so per-model
4
+ * bookkeeping (a warning shown once) keys on this instead of the node. Not
5
+ * enumerable; absent on custom nodes.
6
+ */
7
+ export declare const MODEL_NODE_SOURCE: unique symbol;
8
+ /** The model that made `node` (`MODEL_NODE_SOURCE`), else the node itself. */
9
+ export declare const modelNodeSource: (node: object) => object;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * When particles are born (pure): a continuous rate, with the fraction of a
3
+ * particle left at the end of a frame carried to the next, and each birth
4
+ * placed at its own moment inside the frame, so a moving emitter leaves
5
+ * evenly spaced particles at any frame rate.
6
+ */
7
+ /**
8
+ * The longest stretch emitted in one frame (s): after a stall (a hidden tab,
9
+ * a slow load) emission resumes at its rate instead of firing a burst.
10
+ */
11
+ export declare const PARTICLE_MAX_STEP = 0.25;
12
+ export type ParticleEmission = {
13
+ /** The fraction of the next particle already due (0..1). */
14
+ carry: number;
15
+ };
16
+ export declare const createParticleEmission: () => ParticleEmission;
17
+ /**
18
+ * The particles due over a frame of `dt` seconds at `rate` per second. Each
19
+ * birth goes into `out` as its moment in the frame (0 = the frame's start,
20
+ * 1 = now), oldest first; `out.length` is the count. Only the last
21
+ * `PARTICLE_MAX_STEP` seconds of a long frame emit, and at most `max`
22
+ * particles (the newest) per frame.
23
+ */
24
+ export declare const stepParticleEmission: (emission: ParticleEmission, rate: number, dt: number, out?: number[], max?: number) => number[];
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Where an eye emitter sits (pure): in the canonical head frame
3
+ * (`CanonicalHeadFrame`: centimetres, +Y up, +Z out of the face, +X
4
+ * MediaPipe's left), at the centre of the eye opening, a little in front of
5
+ * it, facing +Z (straight out of the face).
6
+ */
7
+ /** What `<ParticleEmitter target>` emits from: one eye (the person's own side) or both. */
8
+ export declare const PARTICLE_EMITTER_TARGETS: readonly ["leftEye", "rightEye", "eyes"];
9
+ export type ParticleEmitterTarget = (typeof PARTICLE_EMITTER_TARGETS)[number];
10
+ /** How far in front of the eye opening the emitter sits (cm), clear of the eye's own surface. */
11
+ export declare const PARTICLE_EYE_FORWARD = 0.4;
12
+ /**
13
+ * The eye's centre (cm, canonical head frame) on MediaPipe's left (+X); the
14
+ * other eye is its mirror. The two contours averaged, so both eyes match.
15
+ */
16
+ export declare const PARTICLE_EYE_CENTRE: readonly [number, number, number];
17
+ /**
18
+ * The person's own `side` eye in the canonical head frame on this feed:
19
+ * their left eye is MediaPipe's left (+X) on an unmirrored feed and
20
+ * MediaPipe's right (−X) on the mirrored webcam.
21
+ */
22
+ export declare const particleEyePosition: (side: "left" | "right", mirrored: boolean) => [number, number, number];
23
+ /** The eyes a target emits from (the person's own sides). */
24
+ export declare const particleTargetSides: (target: ParticleEmitterTarget) => ("left" | "right")[];
@@ -0,0 +1,14 @@
1
+ /** Uniforms and functions shared by the vertex shader and the self-test (GLSL ES 3.00 and 1.00). */
2
+ export declare const PARTICLE_STATE_GLSL: string;
3
+ /**
4
+ * One quad per particle (corners ±1 in `position`), in view space: the
5
+ * model matrix is ignored (particles are in world space). A streak runs from
6
+ * where the particle was `uStretch` seconds ago (at most its age) to where it
7
+ * is. A dead particle collapses outside the clip volume.
8
+ */
9
+ export declare const PARTICLE_VERTEX_SHADER: string;
10
+ /**
11
+ * Straight alpha: the glow's soft disc, or the streak's soft line
12
+ * brightening toward its head (a soft cross-section, both ends fading).
13
+ */
14
+ export declare const PARTICLE_FRAGMENT_SHADER = "\nvarying vec2 vCorner;\nvarying vec4 vColor;\nvarying float vStreak;\nvoid main() {\n float shape;\n if (vStreak > 0.5) {\n float across = exp(-5.0 * vCorner.x * vCorner.x);\n float along = clamp(vCorner.y * 0.5 + 0.5, 0.0, 1.0);\n shape = across * along * along * (1.0 - smoothstep(0.9, 1.0, along));\n } else {\n float r2 = dot(vCorner, vCorner);\n shape = r2 < 1.0 ? (1.0 - r2) * (1.0 - r2) : 0.0;\n }\n float alpha = shape * vColor.a;\n if (alpha < 0.002) discard;\n gl_FragColor = vec4(vColor.rgb, alpha);\n #include <colorspace_fragment>\n}\n";
@@ -0,0 +1,10 @@
1
+ export { DEFAULT_PARTICLE_SETTINGS, PARTICLE_BLENDINGS, PARTICLE_MAX_COLORS, PARTICLE_MAX_PARTICLES, PARTICLE_SETTINGS_RANGES, PARTICLE_SHAPES, PARTICLE_SPRITES, parseParticleColor, particleCapacity, resolveParticleSettings, type ParticleBlending, type ParticleColor, type ParticleOverLife, type ParticleSettings, type ParticleShape, type ParticleSprite, type ResolvedParticleSettings, } from './settings';
2
+ export { createParticleRandom, createParticleStart, sampleParticleCone, sampleParticleStart, type ParticleRandom, type ParticleStart, } from './shapes';
3
+ export { PARTICLE_RECORD, PARTICLE_RECORD_FLOATS, ParticleRing, createParticleRecord, type ParticleRecord, type ParticleSlotRange, } from './ring';
4
+ export { PARTICLE_DRAG_SERIES_LIMIT, createParticleSample, particleAcceleration, particleColorAt, particleDragAcceleration, particleDragDistance, particleOverLife, sampleParticle, type ParticleSample, } from './motion';
5
+ export { PARTICLE_MAX_STEP, createParticleEmission, stepParticleEmission, type ParticleEmission, } from './emission';
6
+ export { PARTICLE_PRESETS, PARTICLE_PRESET_KEYS, isParticlePreset, particlePresetBase, type ParticlePreset, } from './presets';
7
+ export { PARTICLE_EMITTER_TARGETS, PARTICLE_EYE_CENTRE, PARTICLE_EYE_FORWARD, particleEyePosition, particleTargetSides, type ParticleEmitterTarget, } from './eyes';
8
+ export { PARTICLE_FRAGMENT_SHADER, PARTICLE_STATE_GLSL, PARTICLE_VERTEX_SHADER } from './glsl';
9
+ export { ParticleSystem, applyParticleUniforms, createParticleUniforms, type ParticleUniforms, } from './system';
10
+ export { ParticleSpawner, particleUnitOf, spawnParticles, type ParticleSpawnFrame, } from './spawner';
@@ -0,0 +1,42 @@
1
+ import { ResolvedParticleSettings } from './settings';
2
+ /**
3
+ * Particle motion and looks over life (pure): the closed forms the vertex
4
+ * shader evaluates, so a particle's state at any time follows from its spawn
5
+ * record alone. This is the CPU reference the shader is tested against.
6
+ *
7
+ * With drag k and a constant acceleration a (gravity and wind):
8
+ * v(t) = v0·e^(−kt) + a·D(t), D(t) = (1 − e^(−kt)) / k
9
+ * x(t) = x0 + v0·D(t) + a·A(t), A(t) = (t − D(t)) / k
10
+ * and with no drag D = t, A = t²/2 (a short series near kt = 0 keeps both
11
+ * accurate in float32).
12
+ */
13
+ /** Below this k·t the series replaces the exponential forms. */
14
+ export declare const PARTICLE_DRAG_SERIES_LIMIT = 0.01;
15
+ /** How far a unit start velocity carries in `t` seconds under drag `k`: D(t). */
16
+ export declare const particleDragDistance: (k: number, t: number) => number;
17
+ /** How far a unit constant acceleration carries in `t` seconds under drag `k`: A(t). */
18
+ export declare const particleDragAcceleration: (k: number, t: number) => number;
19
+ /** The world acceleration (gravity along −Y plus wind), in emitter units / s². */
20
+ export declare const particleAcceleration: (settings: Pick<ResolvedParticleSettings, "gravity" | "wind">, out?: [number, number, number]) => [number, number, number];
21
+ /** Linear between birth (0) and death (1). */
22
+ export declare const particleOverLife: (range: readonly [number, number], life: number) => number;
23
+ /** The colour at `life` (0..1): the colours spread evenly from birth to death, mixed between neighbours. */
24
+ export declare const particleColorAt: (settings: Pick<ResolvedParticleSettings, "colors" | "colorCount">, life: number, out?: [number, number, number]) => [number, number, number];
25
+ /** One particle at one time. */
26
+ export type ParticleSample = {
27
+ /** Born and not yet past its lifetime. */
28
+ alive: boolean;
29
+ /** Seconds since birth. */
30
+ age: number;
31
+ /** 0 at birth … 1 at death. */
32
+ life: number;
33
+ position: [number, number, number];
34
+ velocity: [number, number, number];
35
+ /** World units. */
36
+ size: number;
37
+ opacity: number;
38
+ color: [number, number, number];
39
+ };
40
+ export declare const createParticleSample: () => ParticleSample;
41
+ /** Slot `slot` of a ring's records at `time` (s), as the shader computes it. */
42
+ export declare const sampleParticle: (data: Float32Array, slot: number, time: number, settings: ResolvedParticleSettings, out?: ParticleSample) => ParticleSample;
@@ -0,0 +1,12 @@
1
+ import { ParticleSettings } from './settings';
2
+ /**
3
+ * Built-in looks (pure). A preset is a base the emitter's own settings go on
4
+ * top of: `<ParticleEmitter preset="laser" speed={400} />` is the laser with
5
+ * faster beams. Values are in centimetres, as inside a head frame.
6
+ */
7
+ export declare const PARTICLE_PRESET_KEYS: readonly ["laser"];
8
+ export type ParticlePreset = (typeof PARTICLE_PRESET_KEYS)[number];
9
+ export declare const PARTICLE_PRESETS: Readonly<Record<ParticlePreset, Partial<ParticleSettings>>>;
10
+ export declare const isParticlePreset: (value: unknown) => value is ParticlePreset;
11
+ /** The settings an emitter starts from: the preset over the defaults (the defaults alone for none or an unknown name). */
12
+ export declare const particlePresetBase: (preset?: string | null) => ParticleSettings;
@@ -0,0 +1,58 @@
1
+ /**
2
+ * The particles' spawn records (pure): a fixed ring of slots, each written
3
+ * once when a particle is emitted and never touched again. The shader works
4
+ * out everything else from the record and the time, so only the slots
5
+ * written since the last upload go to the GPU.
6
+ */
7
+ /** Floats per particle (three vec4s). */
8
+ export declare const PARTICLE_RECORD_FLOATS = 12;
9
+ /**
10
+ * Each record's layout (float offsets): start position (world) and birth
11
+ * time (s); start velocity (world units / s) and lifetime (s); size scale
12
+ * (world units per emitter unit, times the size jitter), unit (world units
13
+ * per emitter unit, for gravity and wind) and a random seed (0..1).
14
+ */
15
+ export declare const PARTICLE_RECORD: Readonly<{
16
+ position: 0;
17
+ birth: 3;
18
+ velocity: 4;
19
+ lifetime: 7;
20
+ sizeScale: 8;
21
+ unit: 9;
22
+ seed: 10;
23
+ }>;
24
+ /** One particle as emitted (reuse one object: `push` copies it). */
25
+ export type ParticleRecord = {
26
+ position: [number, number, number];
27
+ velocity: [number, number, number];
28
+ birth: number;
29
+ lifetime: number;
30
+ sizeScale: number;
31
+ unit: number;
32
+ seed: number;
33
+ };
34
+ export declare const createParticleRecord: () => ParticleRecord;
35
+ /** A range of slots: `[first, count]`. */
36
+ export type ParticleSlotRange = [number, number];
37
+ export declare class ParticleRing {
38
+ readonly capacity: number;
39
+ /** `capacity × PARTICLE_RECORD_FLOATS` floats; a lifetime of 0 is an empty slot. */
40
+ readonly data: Float32Array;
41
+ private head;
42
+ private dirtyFirst;
43
+ private dirtyCount;
44
+ constructor(capacity: number);
45
+ /** The slot the next particle goes in (the oldest). */
46
+ get next(): number;
47
+ /** Writes a particle over the oldest slot; returns the slot. */
48
+ push(record: ParticleRecord): number;
49
+ /**
50
+ * The slots written since the last call, as at most two ranges (one when
51
+ * they do not wrap, the whole ring after a full lap), then forgets them.
52
+ */
53
+ takeDirty(out?: ParticleSlotRange[]): ParticleSlotRange[];
54
+ /** Empties every slot (and marks them all for upload). */
55
+ clear(): void;
56
+ /** Particles alive at `time` (s): born and not yet past their lifetime. */
57
+ aliveAt(time: number): number;
58
+ }