@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
@@ -0,0 +1,53 @@
1
+ import * as THREE from "three";
2
+ /**
3
+ * A GPU self-test of the particles on this device's WebGL2:
4
+ *
5
+ * 1. **compile**: the particle and parity shaders link, with no shader or GL error.
6
+ * 2. **parity**: `PARTICLE_STATE_GLSL` matches `sampleParticle` (the CPU
7
+ * reference) for particles from a moving, turning, scaled emitter, at
8
+ * several times, under no forces, under drag, gravity and wind, and with
9
+ * colour ramps (float targets; skipped where the GPU cannot render them).
10
+ * 3. **same frame**: particles emitted in the scene's before-render hook
11
+ * draw in that very render, along the emitter's path, and nowhere else.
12
+ * 4. **streak**: a streak lies along its motion and never reaches behind
13
+ * its emitter (its tail is at most its age).
14
+ * 5. **dead**: past their lifetime, particles draw nothing.
15
+ *
16
+ * The headless smoke run drives it (`example/smoke/particles.spec.ts`); open
17
+ * `/smoke/particles.html` on the dev server to run it on a device.
18
+ */
19
+ export type ParticleSelfTestCheck = {
20
+ name: string;
21
+ ok: boolean;
22
+ detail: string;
23
+ };
24
+ export type ParticleSelfTestResult = {
25
+ ok: boolean;
26
+ error: string | null;
27
+ checks: ParticleSelfTestCheck[];
28
+ };
29
+ export declare const PARTICLE_SELF_TEST: Readonly<{
30
+ parityParticles: 256;
31
+ parityTimes: readonly number[];
32
+ /** Position and velocity: |GPU − CPU| ≤ abs + rel × |CPU|. */
33
+ motionTolerance: {
34
+ abs: number;
35
+ rel: number;
36
+ };
37
+ /** Size, opacity, colour and life. */
38
+ looksTolerance: 0.0002;
39
+ /** Birth and death within this of the time are not compared (float32 rounding). */
40
+ boundaryMargin: 0.001;
41
+ /** The draw checks' target (px, square) and view (world units across). */
42
+ drawSize: 128;
43
+ drawView: 32;
44
+ /** A pixel is lit above this (8-bit sum of RGB). */
45
+ litLevel: 24;
46
+ }>;
47
+ /**
48
+ * Runs every check on `options.renderer` (default: an offscreen renderer it
49
+ * disposes). Never rejects: failures and thrown errors are in the result.
50
+ */
51
+ export declare const runParticleSelfTest: (options?: {
52
+ renderer?: THREE.WebGLRenderer;
53
+ }) => Promise<ParticleSelfTestResult>;
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Particle emitter settings (pure): the fields, their defaults and ranges,
3
+ * and `resolveParticleSettings`, which turns any partial (from an app or an
4
+ * agent) into a complete, clamped set the emitter and the shader read.
5
+ *
6
+ * Lengths, speeds and forces are in the emitter's own units: its world
7
+ * scale when a particle is emitted converts them (inside a head frame they
8
+ * are centimetres). Gravity pulls along the world's −Y, wind pushes along
9
+ * the world's axes; the shape and the direction particles leave in are in
10
+ * the emitter's axes (+Z forward).
11
+ */
12
+ /** Where particles start: one point, a sphere, a box, or the base of a cone. */
13
+ export declare const PARTICLE_SHAPES: readonly ["point", "sphere", "box", "cone"];
14
+ export type ParticleShape = (typeof PARTICLE_SHAPES)[number];
15
+ /** The built-in particle shapes: a soft round glow, or a streak along the motion. */
16
+ export declare const PARTICLE_SPRITES: readonly ["glow", "streak"];
17
+ export type ParticleSprite = (typeof PARTICLE_SPRITES)[number];
18
+ /** `additive` brightens what is behind (light, lasers); `normal` covers it. */
19
+ export declare const PARTICLE_BLENDINGS: readonly ["additive", "normal"];
20
+ export type ParticleBlending = (typeof PARTICLE_BLENDINGS)[number];
21
+ /** A CSS colour (`"#ff3b30"`, `"red"`, `"rgb(255 0 0)"`) or a hex number (`0xff3b30`). */
22
+ export type ParticleColor = string | number;
23
+ /** One value for the whole life, or `[start, end]` (linear over life). */
24
+ export type ParticleOverLife = number | readonly [number, number];
25
+ /** The most colours over life. */
26
+ export declare const PARTICLE_MAX_COLORS = 4;
27
+ /** The most particles one emitter keeps alive. */
28
+ export declare const PARTICLE_MAX_PARTICLES = 65536;
29
+ export type ParticleSettings = {
30
+ /** Particles per second. */
31
+ rate: number;
32
+ /** Seconds each particle lives. */
33
+ lifetime: number;
34
+ /** 0..1: each particle lives `lifetime × (1 − lifetimeJitter × random)`. */
35
+ lifetimeJitter: number;
36
+ /** Where particles start (the emitter's axes and units). */
37
+ shape: ParticleShape;
38
+ /** `sphere`: its radius. `cone`: its base radius (0 = from one point). */
39
+ radius: number;
40
+ /** `box`: its full size along x, y, z. */
41
+ boxSize: readonly [number, number, number];
42
+ /**
43
+ * Degrees around the emitter's +Z: `point` and `box` send particles within
44
+ * this angle, `cone` is a cone of this half angle (180 = every direction).
45
+ * `sphere` sends them outward.
46
+ */
47
+ angle: number;
48
+ /** `sphere` and `box`: start on the surface only. */
49
+ surface: boolean;
50
+ /** Start speed, units per second. */
51
+ speed: number;
52
+ /** 0..1: each particle starts at `speed × (1 − speedJitter × random)`. */
53
+ speedJitter: number;
54
+ /** Pull along the world's −Y, units per second² (negative floats up). */
55
+ gravity: number;
56
+ /** Constant push along the world's x, y, z, units per second². */
57
+ wind: readonly [number, number, number];
58
+ /** How fast speed decays, per second (0: none). With gravity or wind it sets the top speed. */
59
+ drag: number;
60
+ /** Size over life, units (the glow's width, the streak's thickness). */
61
+ size: ParticleOverLife;
62
+ /** 0..1: each particle is `size × (1 − sizeJitter × random)`. */
63
+ sizeJitter: number;
64
+ /** Colour over life: one colour, or up to 4 spread evenly from birth to death. */
65
+ color: ParticleColor | readonly ParticleColor[];
66
+ /** Opacity over life, 0..1. */
67
+ opacity: ParticleOverLife;
68
+ /** The built-in shape drawn. */
69
+ sprite: ParticleSprite;
70
+ /** `streak`: its length, as the seconds of motion it covers. */
71
+ stretch: number;
72
+ blending: ParticleBlending;
73
+ /** The most particles alive at once; 0 (default) sizes it from `rate × lifetime`. */
74
+ maxParticles: number;
75
+ /** The random sequence's seed: the same seed and inputs give the same particles. */
76
+ seed: number;
77
+ };
78
+ /** A generic emitter: a soft white spray along +Z, sized for centimetres. */
79
+ export declare const DEFAULT_PARTICLE_SETTINGS: ParticleSettings;
80
+ /** Valid ranges of the numeric fields (each component of `boxSize`, `wind`, `size`, `opacity`). */
81
+ export declare const PARTICLE_SETTINGS_RANGES: {
82
+ readonly rate: readonly [0, 10000];
83
+ readonly lifetime: readonly [0.02, 30];
84
+ readonly lifetimeJitter: readonly [0, 1];
85
+ readonly radius: readonly [0, 10000];
86
+ readonly boxSize: readonly [0, 10000];
87
+ readonly angle: readonly [0, 180];
88
+ readonly speed: readonly [0, 100000];
89
+ readonly speedJitter: readonly [0, 1];
90
+ readonly gravity: readonly [-100000, 100000];
91
+ readonly wind: readonly [-100000, 100000];
92
+ readonly drag: readonly [0, 100];
93
+ readonly size: readonly [0, 10000];
94
+ readonly sizeJitter: readonly [0, 1];
95
+ readonly opacity: readonly [0, 1];
96
+ readonly stretch: readonly [0, 1];
97
+ readonly maxParticles: readonly [0, 65536];
98
+ readonly seed: readonly [-1000000000, 1000000000];
99
+ };
100
+ /** Everything the emitter and the shader read, complete and clamped. */
101
+ export type ResolvedParticleSettings = Omit<ParticleSettings, "boxSize" | "wind" | "size" | "color" | "opacity"> & {
102
+ boxSize: [number, number, number];
103
+ wind: [number, number, number];
104
+ /** Size at birth and at death. */
105
+ size: [number, number];
106
+ /** Opacity at birth and at death. */
107
+ opacity: [number, number];
108
+ /** The colours over life, linear RGB, `colorCount` of them (1..4), 3 floats each. */
109
+ colors: Float32Array;
110
+ colorCount: number;
111
+ /** Particles kept (the ring's size): `maxParticles`, or enough for `rate × lifetime`. */
112
+ capacity: number;
113
+ };
114
+ /** A colour as linear RGB, or null when it cannot be read. */
115
+ export declare const parseParticleColor: (value: unknown) => [number, number, number] | null;
116
+ /**
117
+ * Particles to keep for `rate × lifetime` alive at once, with room for a
118
+ * slow frame's spawns: 10% more plus a tenth of a second's worth.
119
+ */
120
+ export declare const particleCapacity: (rate: number, lifetime: number, maxParticles?: number) => number;
121
+ /**
122
+ * Any partial settings → complete, clamped settings. Missing, non-finite or
123
+ * unknown values fall back to `base` (default `DEFAULT_PARTICLE_SETTINGS`);
124
+ * numbers clamp to `PARTICLE_SETTINGS_RANGES`; colours that cannot be read
125
+ * fall back as a whole; more than 4 colours keep the first 4.
126
+ */
127
+ export declare const resolveParticleSettings: (input?: Partial<ParticleSettings>, base?: ParticleSettings) => ResolvedParticleSettings;
@@ -0,0 +1,29 @@
1
+ import { ResolvedParticleSettings } from './settings';
2
+ /**
3
+ * Where a particle starts and which way it leaves (pure), in the emitter's
4
+ * own axes and units: +Z is forward. The emitter's world transform is
5
+ * applied when the particle is emitted (`spawnParticles`).
6
+ */
7
+ /** A seeded random sequence in [0, 1) (mulberry32): the same seed gives the same numbers. */
8
+ export type ParticleRandom = () => number;
9
+ export declare const createParticleRandom: (seed: number) => ParticleRandom;
10
+ /** A start point and a unit direction, written in place. */
11
+ export type ParticleStart = {
12
+ position: [number, number, number];
13
+ direction: [number, number, number];
14
+ };
15
+ export declare const createParticleStart: () => ParticleStart;
16
+ /** A direction within `angle` degrees of +Z, uniform over that cap of the sphere. */
17
+ export declare const sampleParticleCone: (angle: number, random: ParticleRandom, out: [number, number, number]) => [number, number, number];
18
+ /**
19
+ * One particle's start (the emitter's axes and units):
20
+ * - `point`: at the origin, leaving within `angle` of +Z;
21
+ * - `sphere`: inside the sphere of `radius` (on it with `surface`), leaving
22
+ * outward from the centre;
23
+ * - `box`: inside the box of `boxSize` centred on the origin (on its faces
24
+ * with `surface`), leaving within `angle` of +Z;
25
+ * - `cone`: on the disc of `radius` at the origin, facing +Z, leaving along
26
+ * the cone of half angle `angle` (tilted outward by `angle × distance /
27
+ * radius`; with radius 0, anywhere within `angle`).
28
+ */
29
+ export declare const sampleParticleStart: (settings: Pick<ResolvedParticleSettings, "shape" | "radius" | "boxSize" | "angle" | "surface">, random: ParticleRandom, out?: ParticleStart) => ParticleStart;
@@ -0,0 +1,60 @@
1
+ import { ParticleRing } from './ring';
2
+ import { ResolvedParticleSettings } from './settings';
3
+ import { ParticleRandom } from './shapes';
4
+ import * as THREE from "three";
5
+ /**
6
+ * Emitting particles into the ring (pure, no GPU): each frame, the
7
+ * particles due are placed along the emitter's path from its last world
8
+ * transform to this one, at their own moments in the frame, and written as
9
+ * spawn records in world space. They keep their own path from then on.
10
+ */
11
+ /** The emitter's mean world scale (world units per emitter unit). */
12
+ export declare const particleUnitOf: (matrix: THREE.Matrix4) => number;
13
+ /** One frame of the emitter's motion: its world transform and the clock (s) at the last frame and now. */
14
+ export type ParticleSpawnFrame = {
15
+ from: THREE.Matrix4;
16
+ to: THREE.Matrix4;
17
+ timeFrom: number;
18
+ timeTo: number;
19
+ };
20
+ /**
21
+ * Writes one particle per birth moment (`births`, 0..1 through the frame)
22
+ * into `ring`. Settings are in the emitter's units: its world scale at the
23
+ * birth converts speed and size and is kept for gravity and wind. The random
24
+ * sequence advances by the same count per particle whatever the settings.
25
+ */
26
+ export declare const spawnParticles: (ring: ParticleRing, settings: ResolvedParticleSettings, frame: ParticleSpawnFrame, births: readonly number[], random: ParticleRandom) => void;
27
+ /**
28
+ * One emitter's particles on the CPU side: its settings, its ring of spawn
29
+ * records, its rate and random sequence, and its last pose. `update` once a
30
+ * frame with the emitter's world matrix and the clock; upload the ring's
31
+ * dirty slots after it.
32
+ */
33
+ export declare class ParticleSpawner {
34
+ private ringValue;
35
+ private settingsValue;
36
+ private random;
37
+ private readonly emission;
38
+ private readonly births;
39
+ private readonly last;
40
+ private lastTime;
41
+ private readonly frame;
42
+ constructor(settings: ResolvedParticleSettings);
43
+ get ring(): ParticleRing;
44
+ get settings(): ResolvedParticleSettings;
45
+ /**
46
+ * New settings. A new capacity starts a new (empty) ring and a new seed a
47
+ * new random sequence; anything else applies to the particles already out
48
+ * (the shader reads it every frame) and to the next ones.
49
+ */
50
+ setSettings(settings: ResolvedParticleSettings): void;
51
+ /**
52
+ * One frame at `time` (s) with the emitter at `matrix` (world): emits the
53
+ * particles due since the last update along the emitter's path, unless
54
+ * `emitting` is false. The first update only records the pose. Returns how
55
+ * many were emitted.
56
+ */
57
+ update(matrix: THREE.Matrix4, time: number, emitting?: boolean): number;
58
+ /** Removes every particle and forgets the last pose (the next update starts again). */
59
+ reset(): void;
60
+ }
@@ -0,0 +1,64 @@
1
+ import { ParticleRing } from './ring';
2
+ import { ParticleSettings, ResolvedParticleSettings } from './settings';
3
+ import * as THREE from "three";
4
+ /**
5
+ * One emitter's particles on the GPU (no React): `mesh` draws every slot of
6
+ * the spawner's ring as an instanced quad, and `update` emits, uploads only
7
+ * the new slots and moves the clock. The mesh is in world space wherever it
8
+ * sits in the scene (its own transform is ignored).
9
+ */
10
+ export type ParticleUniforms = {
11
+ uTime: THREE.IUniform<number>;
12
+ uDrag: THREE.IUniform<number>;
13
+ uAcceleration: THREE.IUniform<THREE.Vector3>;
14
+ uSize: THREE.IUniform<THREE.Vector2>;
15
+ uOpacity: THREE.IUniform<THREE.Vector2>;
16
+ uColors: THREE.IUniform<THREE.Vector3[]>;
17
+ uColorCount: THREE.IUniform<number>;
18
+ uSprite: THREE.IUniform<number>;
19
+ uStretch: THREE.IUniform<number>;
20
+ };
21
+ export declare const createParticleUniforms: () => ParticleUniforms;
22
+ /** Writes resolved settings into the uniforms (everything but the clock). */
23
+ export declare const applyParticleUniforms: (uniforms: ParticleUniforms, settings: ResolvedParticleSettings) => void;
24
+ export declare class ParticleSystem {
25
+ /** Add it anywhere in the scene (its own transform is ignored); render order is yours to set. */
26
+ readonly mesh: THREE.Mesh<THREE.InstancedBufferGeometry, THREE.ShaderMaterial>;
27
+ readonly uniforms: ParticleUniforms;
28
+ private readonly spawner;
29
+ private buffer;
30
+ private bufferRing;
31
+ private epoch;
32
+ private readonly ranges;
33
+ private disposed;
34
+ constructor(settings?: Partial<ParticleSettings>, base?: ParticleSettings);
35
+ /** The settings in use (resolved). */
36
+ get settings(): ResolvedParticleSettings;
37
+ /** The spawn records (slots in use show their lifetime above 0). */
38
+ get ring(): ParticleRing;
39
+ /** The clock the shader draws at (s since the first update). */
40
+ get time(): number;
41
+ /**
42
+ * New settings (any subset, over `base`, default `DEFAULT_PARTICLE_SETTINGS`).
43
+ * A new capacity empties the particles; anything else applies to the
44
+ * particles already out too.
45
+ */
46
+ setSettings(settings: Partial<ParticleSettings>, base?: ParticleSettings): void;
47
+ /**
48
+ * One frame: the emitter at `matrix` (world) at `time` (s, any clock that
49
+ * moves forward). Emits the particles due (unless `emitting` is false),
50
+ * uploads the new slots and sets the clock. Call it after the world
51
+ * matrices are up to date and before the render (the scene's
52
+ * `onBeforeRender`) so new particles draw this frame. A second call at the
53
+ * same time does nothing more. Returns how many were emitted.
54
+ */
55
+ update(matrix: THREE.Matrix4, time: number, emitting?: boolean): number;
56
+ /** Particles alive now (counts the ring on the CPU: for a readout, not every frame). */
57
+ aliveCount(): number;
58
+ /** Removes every particle; the next update starts emitting again. */
59
+ reset(): void;
60
+ dispose(): void;
61
+ private apply;
62
+ /** A new ring (a capacity change) needs a new geometry around it. */
63
+ private syncRing;
64
+ }
@@ -0,0 +1,122 @@
1
+ "use strict";var je=Object.defineProperty;var Ge=(t,e,i)=>e in t?je(t,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[e]=i;var p=(t,e,i)=>Ge(t,typeof e!="symbol"?e+"":e,i);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("react/jsx-runtime"),W=require("@react-three/fiber"),R=require("react"),Ve=require("./selectors-C4X71aoD.cjs"),K=require("./index-DE17y0ZI.cjs"),Je=require("./index-CfSF8LXa.cjs"),re=require("./CanonicalHeadFrame-D-_T1OMU.cjs"),Be=require("three"),Ue=require("./useLandmarkPoseFit-Bg-h9BPb.cjs");function He(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const i in t)if(i!=="default"){const r=Object.getOwnPropertyDescriptor(t,i);Object.defineProperty(e,i,r.get?r:{enumerable:!0,get:()=>t[i]})}}return e.default=t,Object.freeze(e)}const f=He(Be),qe=["leftEye","rightEye","eyes"],Xe=[263,249,390,373,374,380,381,382,362,398,384,385,386,387,388,466],Ye=[33,7,163,144,145,153,154,155,133,173,157,158,159,160,161,246],Q=t=>{const e=[0,0,0];return t.forEach(i=>{for(let r=0;r<3;r+=1)e[r]+=re.CANONICAL_FACE_POSITIONS[i*3+r]/t.length}),e},se=.4,ae=(()=>{const t=Q(Xe),e=Q(Ye);return Object.freeze([(t[0]-e[0])/2,(t[1]+e[1])/2,(t[2]+e[2])/2+se])})(),oe=(t,e)=>{const[i,r,s]=ae;return[Je.personLeftSign(e)*(t==="left"?1:-1)*i,r,s]},ne=t=>t==="eyes"?["left","right"]:[t==="leftEye"?"left":"right"],ce=["point","sphere","box","cone"],le=["glow","streak"],fe=["additive","normal"],D=4,z=65536,L=Object.freeze({rate:60,lifetime:1.5,lifetimeJitter:.2,shape:"cone",radius:0,boxSize:Object.freeze([10,10,10]),angle:15,surface:!1,speed:30,speedJitter:.2,gravity:0,wind:Object.freeze([0,0,0]),drag:0,size:Object.freeze([1,.2]),sizeJitter:.3,color:"#ffffff",opacity:Object.freeze([1,0]),sprite:"glow",stretch:.05,blending:"additive",maxParticles:0,seed:1}),he={rate:[0,1e4],lifetime:[.02,30],lifetimeJitter:[0,1],radius:[0,1e4],boxSize:[0,1e4],angle:[0,180],speed:[0,1e5],speedJitter:[0,1],gravity:[-1e5,1e5],wind:[-1e5,1e5],drag:[0,100],size:[0,1e4],sizeJitter:[0,1],opacity:[0,1],stretch:[0,1],maxParticles:[0,z],seed:[-1e9,1e9]},I=(t,e,i,r)=>typeof t=="number"&&Number.isFinite(t)?Math.min(i,Math.max(e,t)):r,k=(t,e,i)=>typeof e=="string"&&t.includes(e)?e:i,Z=(t,[e,i],r)=>{const s=Array.isArray(t)?t:[];return[0,1,2].map(a=>I(s[a],e,i,r[a]))},ee=(t,[e,i],r)=>{const s=typeof r=="number"?[r,r]:r;if(typeof t=="number"){const o=I(t,e,i,s[0]);return[o,o]}const a=Array.isArray(t)?t:[];return[I(a[0],e,i,s[0]),I(a[1],e,i,s[1])]},v=new f.Color,pe=t=>typeof t=="number"&&Number.isFinite(t)?(v.setHex(Math.max(0,Math.min(16777215,Math.round(t)))),[v.r,v.g,v.b]):typeof t!="string"||t.trim()===""?null:(v.setRGB(-1,-1,-1),v.setStyle(t),v.r<0?null:[v.r,v.g,v.b]),$e=(t,e)=>{const i=s=>{const o=(Array.isArray(s)?s:[s]).slice(0,D).map(pe);return o.length>0&&o.every(Boolean)?o:null},r=i(t)??i(e)??[[1,1,1]];return{colors:Float32Array.from(r.flat()),colorCount:r.length}},ue=(t,e,i=0)=>{if(i>0)return Math.min(z,Math.ceil(i));const r=Math.max(0,t)*Math.max(0,e);return Math.min(z,Math.max(1,Math.ceil(r*1.1+Math.max(0,t)*.1)+8))},F=(t={},e=L)=>{const i=he,r=n=>I(t[n],i[n][0],i[n][1],e[n]),s=r("rate"),a=r("lifetime"),o=Math.round(r("maxParticles"));return{rate:s,lifetime:a,lifetimeJitter:r("lifetimeJitter"),shape:k(ce,t.shape,e.shape),radius:r("radius"),boxSize:Z(t.boxSize,i.boxSize,e.boxSize),angle:r("angle"),surface:typeof t.surface=="boolean"?t.surface:e.surface,speed:r("speed"),speedJitter:r("speedJitter"),gravity:r("gravity"),wind:Z(t.wind,i.wind,e.wind),drag:r("drag"),size:ee(t.size,i.size,e.size),sizeJitter:r("sizeJitter"),...$e(t.color,e.color),opacity:ee(t.opacity,i.opacity,e.opacity),sprite:k(le,t.sprite,e.sprite),stretch:r("stretch"),blending:k(fe,t.blending,e.blending),maxParticles:o,seed:r("seed"),capacity:ue(s,a,o)}},me=["laser"],de=Object.freeze({laser:Object.freeze({rate:900,lifetime:.3,lifetimeJitter:.15,shape:"cone",radius:.08,angle:.6,speed:260,speedJitter:.05,gravity:0,wind:[0,0,0],drag:0,size:[.5,.2],sizeJitter:.2,color:["#ffffff","#ff3b30","#7a0000"],opacity:[1,0],sprite:"streak",stretch:.08,blending:"additive"})}),ye=t=>typeof t=="string"&&me.includes(t),Ee=t=>ye(t)?{...L,...de[t]}:L,A=12,b=Object.freeze({position:0,birth:3,velocity:4,lifetime:7,sizeScale:8,unit:9,seed:10}),Se=()=>({position:[0,0,0],velocity:[0,0,0],birth:0,lifetime:0,sizeScale:1,unit:1,seed:0});class j{constructor(e){p(this,"capacity");p(this,"data");p(this,"head",0);p(this,"dirtyFirst",0);p(this,"dirtyCount",0);this.capacity=Math.max(1,Math.floor(e)),this.data=new Float32Array(this.capacity*A)}get next(){return this.head}push(e){const i=this.head,r=i*A,s=this.data,a=b;return s[r+a.position]=e.position[0],s[r+a.position+1]=e.position[1],s[r+a.position+2]=e.position[2],s[r+a.birth]=e.birth,s[r+a.velocity]=e.velocity[0],s[r+a.velocity+1]=e.velocity[1],s[r+a.velocity+2]=e.velocity[2],s[r+a.lifetime]=e.lifetime,s[r+a.sizeScale]=e.sizeScale,s[r+a.unit]=e.unit,s[r+a.seed]=e.seed,s[r+11]=0,this.dirtyCount===0&&(this.dirtyFirst=i),this.dirtyCount=Math.min(this.capacity,this.dirtyCount+1),this.head=(i+1)%this.capacity,i}takeDirty(e=[]){e.length=0;const i=this.dirtyCount;if(i===0)return e;if(i>=this.capacity)e.push([0,this.capacity]);else{const r=this.dirtyFirst,s=r+i;s<=this.capacity?e.push([r,i]):e.push([r,this.capacity-r],[0,s-this.capacity])}return this.dirtyCount=0,e}clear(){this.data.fill(0),this.head=0,this.dirtyFirst=0,this.dirtyCount=this.capacity}aliveAt(e){const i=this.data;let r=0;for(let s=0;s<i.length;s+=A){const a=e-i[s+b.birth];a>=0&&a<i[s+b.lifetime]&&(r+=1)}return r}}const O=.01,ge=(t,e)=>{const i=t*e;return i<O?e*(1-i/2+i*i/6-i*i*i/24):(1-Math.exp(-i))/t},ve=(t,e)=>{const i=t*e;return i<O?e*e*(.5-i/6+i*i/24-i*i*i/120):(e-(1-Math.exp(-i))/t)/t},B=(t,e=[0,0,0])=>(e[0]=t.wind[0],e[1]=t.wind[1]-t.gravity,e[2]=t.wind[2],e),G=(t,e)=>t[0]+(t[1]-t[0])*e,Re=(t,e,i=[0,0,0])=>{const{colors:r,colorCount:s}=t,a=Math.min(1,Math.max(0,e))*(s-1),o=Math.min(s-1,Math.floor(a)),n=Math.min(s-1,o+1),c=a-o;for(let l=0;l<3;l+=1)i[l]=r[o*3+l]+(r[n*3+l]-r[o*3+l])*c;return i},Ae=()=>({alive:!1,age:0,life:0,position:[0,0,0],velocity:[0,0,0],size:0,opacity:0,color:[0,0,0]}),te=[0,0,0],We=(t,e,i,r,s=Ae())=>{const a=e*A,o=b,n=t[a+o.lifetime],c=i-t[a+o.birth];s.age=c,s.alive=n>0&&c>=0&&c<n;const l=Math.min(Math.max(c,0),Math.max(n,0));s.life=n>0?l/n:0;const h=r.drag,u=ge(h,l),g=ve(h,l),P=Math.exp(-h*l),m=t[a+o.unit];B(r,te);for(let d=0;d<3;d+=1){const M=te[d]*m,y=t[a+o.velocity+d];s.position[d]=t[a+o.position+d]+y*u+M*g,s.velocity[d]=y*P+M*u}return s.size=G(r.size,s.life)*t[a+o.sizeScale],s.opacity=G(r.opacity,s.life),Re(r,s.life,s.color),s},Ke=t=>Number.isInteger(t)?`${t}.0`:`${t}`,Pe=`
2
+ uniform float uTime;
3
+ uniform float uDrag;
4
+ uniform vec3 uAcceleration;
5
+ uniform vec2 uSize;
6
+ uniform vec2 uOpacity;
7
+ uniform vec3 uColors[${D}];
8
+ uniform float uColorCount;
9
+
10
+ const float PARTICLE_DRAG_SERIES_LIMIT = ${Ke(O)};
11
+
12
+ float particleDragDistance(float k, float t) {
13
+ float kt = k * t;
14
+ if (kt < PARTICLE_DRAG_SERIES_LIMIT) {
15
+ return t * (1.0 - kt / 2.0 + kt * kt / 6.0 - kt * kt * kt / 24.0);
16
+ }
17
+ return (1.0 - exp(-kt)) / k;
18
+ }
19
+
20
+ float particleDragAcceleration(float k, float t) {
21
+ float kt = k * t;
22
+ if (kt < PARTICLE_DRAG_SERIES_LIMIT) {
23
+ return t * t * (0.5 - kt / 6.0 + kt * kt / 24.0 - kt * kt * kt / 120.0);
24
+ }
25
+ return (t - (1.0 - exp(-kt)) / k) / k;
26
+ }
27
+
28
+ vec3 particleColorAt(float life) {
29
+ float last = max(uColorCount, 1.0) - 1.0;
30
+ float x = clamp(life, 0.0, 1.0) * last;
31
+ float i = min(floor(x), last);
32
+ float j = min(i + 1.0, last);
33
+ return mix(uColors[int(i)], uColors[int(j)], x - i);
34
+ }
35
+
36
+ struct ParticleState {
37
+ float alive;
38
+ float life;
39
+ vec3 position;
40
+ vec3 velocity;
41
+ float size;
42
+ float opacity;
43
+ vec3 color;
44
+ };
45
+
46
+ // start: position (world) and birth; motion: velocity (world) and lifetime;
47
+ // extra: size scale, unit (world units per emitter unit), seed.
48
+ ParticleState particleState(vec4 start, vec4 motion, vec4 extra, float time) {
49
+ ParticleState s;
50
+ float lifetime = motion.w;
51
+ float age = time - start.w;
52
+ s.alive = (lifetime > 0.0 && age >= 0.0 && age < lifetime) ? 1.0 : 0.0;
53
+ float t = clamp(age, 0.0, max(lifetime, 0.0));
54
+ s.life = lifetime > 0.0 ? t / lifetime : 0.0;
55
+ float D = particleDragDistance(uDrag, t);
56
+ float A = particleDragAcceleration(uDrag, t);
57
+ vec3 a = uAcceleration * extra.y;
58
+ s.position = start.xyz + motion.xyz * D + a * A;
59
+ s.velocity = motion.xyz * exp(-uDrag * t) + a * D;
60
+ s.size = mix(uSize.x, uSize.y, s.life) * extra.x;
61
+ s.opacity = mix(uOpacity.x, uOpacity.y, s.life);
62
+ s.color = particleColorAt(s.life);
63
+ return s;
64
+ }
65
+ `,Te=`
66
+ attribute vec4 aStart;
67
+ attribute vec4 aMotion;
68
+ attribute vec4 aExtra;
69
+ uniform float uSprite;
70
+ uniform float uStretch;
71
+ varying vec2 vCorner;
72
+ varying vec4 vColor;
73
+ varying float vStreak;
74
+ ${Pe}
75
+ void main() {
76
+ ParticleState p = particleState(aStart, aMotion, aExtra, uTime);
77
+ vCorner = position.xy;
78
+ vColor = vec4(p.color, p.opacity);
79
+ vStreak = 0.0;
80
+ if (p.alive < 0.5 || p.size <= 0.0 || p.opacity <= 0.0) {
81
+ gl_Position = vec4(0.0, 0.0, 2.0, 1.0);
82
+ return;
83
+ }
84
+ float halfSize = 0.5 * p.size;
85
+ vec3 head = (viewMatrix * vec4(p.position, 1.0)).xyz;
86
+ vec3 point = head + vec3(position.xy * halfSize, 0.0);
87
+ if (uSprite > 0.5) {
88
+ // Never longer than the particle's own path: a newborn streak starts at the emitter.
89
+ float tailSeconds = min(uStretch, max(uTime - aStart.w, 0.0));
90
+ vec3 tail = (viewMatrix * vec4(p.position - p.velocity * tailSeconds, 1.0)).xyz;
91
+ vec3 axis = head - tail;
92
+ vec3 toPoint = isOrthographic ? vec3(0.0, 0.0, -1.0) : normalize(head);
93
+ vec3 side = cross(axis, toPoint);
94
+ float sideLength = length(side);
95
+ // Seen end-on (or not moving), a streak is a glow.
96
+ if (sideLength > 0.05 * p.size) {
97
+ point = mix(tail, head, position.y * 0.5 + 0.5) + side / sideLength * position.x * halfSize;
98
+ vStreak = 1.0;
99
+ }
100
+ }
101
+ gl_Position = projectionMatrix * vec4(point, 1.0);
102
+ }
103
+ `,Ce=`
104
+ varying vec2 vCorner;
105
+ varying vec4 vColor;
106
+ varying float vStreak;
107
+ void main() {
108
+ float shape;
109
+ if (vStreak > 0.5) {
110
+ float across = exp(-5.0 * vCorner.x * vCorner.x);
111
+ float along = clamp(vCorner.y * 0.5 + 0.5, 0.0, 1.0);
112
+ shape = across * along * along * (1.0 - smoothstep(0.9, 1.0, along));
113
+ } else {
114
+ float r2 = dot(vCorner, vCorner);
115
+ shape = r2 < 1.0 ? (1.0 - r2) * (1.0 - r2) : 0.0;
116
+ }
117
+ float alpha = shape * vColor.a;
118
+ if (alpha < 0.002) discard;
119
+ gl_FragColor = vec4(vColor.rgb, alpha);
120
+ #include <colorspace_fragment>
121
+ }
122
+ `,xe=.25,Me=()=>({carry:0}),_e=(t,e,i,r=[],s=1/0)=>{if(r.length=0,!(e>0)||!(i>0))return r;const a=Math.min(xe,i),o=t.carry+e*a,n=Math.floor(o),c=Math.max(0,n-Math.max(0,Math.floor(s)));for(let l=c;l<n;l+=1){const h=(l+1-t.carry)/e;r.push(Math.min(1,(i-a+h)/i))}return t.carry=o-n,r},V=t=>{let e=Math.floor(t)>>>0;return()=>{e=e+1831565813>>>0;let i=e;return i=Math.imul(i^i>>>15,i|1),i^=i+Math.imul(i^i>>>7,i|61),((i^i>>>14)>>>0)/4294967296}},U=()=>({position:[0,0,0],direction:[0,0,1]}),Ie=Math.PI/180,w=(t,e,i)=>{const r=Math.cos(Math.min(180,Math.max(0,t))*Ie),s=1-e()*(1-r),a=Math.sqrt(Math.max(0,1-s*s)),o=e()*2*Math.PI;return i[0]=a*Math.cos(o),i[1]=a*Math.sin(o),i[2]=s,i},Qe=(t,e)=>w(180,t,e),be=(t,e,i=U())=>{const r=i.position,s=i.direction;switch(r[0]=0,r[1]=0,r[2]=0,t.shape){case"sphere":{Qe(e,s);const a=t.radius*(t.surface?1:Math.cbrt(e()));r[0]=s[0]*a,r[1]=s[1]*a,r[2]=s[2]*a;break}case"box":{const[a,o,n]=t.boxSize;if(r[0]=(e()-.5)*a,r[1]=(e()-.5)*o,r[2]=(e()-.5)*n,t.surface){const c=[o*n,a*n,a*o],l=c[0]+c[1]+c[2];let h=e()*(l>0?l:3),u=0;if(l>0)for(;u<2&&h>=c[u];)h-=c[u],u+=1;else u=Math.min(2,Math.floor(h));r[u]=(e()<.5?-.5:.5)*t.boxSize[u]}w(t.angle,e,s);break}case"cone":{const a=t.radius;if(a>0){const o=Math.sqrt(e()),n=e()*2*Math.PI,c=Math.cos(n),l=Math.sin(n);r[0]=a*o*c,r[1]=a*o*l;const h=Math.min(180,t.angle)*Ie*o;s[0]=Math.sin(h)*c,s[1]=Math.sin(h)*l,s[2]=Math.cos(h)}else w(t.angle,e,s);break}default:w(t.angle,e,s)}return i},J=t=>{const e=t.elements,i=Math.hypot(e[0],e[1],e[2]),r=Math.hypot(e[4],e[5],e[6]),s=Math.hypot(e[8],e[9],e[10]);return(i+r+s)/3},N=U(),S=Se(),x=new f.Vector3,E=new f.Vector3,_=new f.Vector3,we=(t,e,i,r,s)=>{const a=J(i.from),o=J(i.to);for(let n=0;n<r.length;n+=1){const c=r[n];be(e,s,N);const l=s(),h=s(),u=s(),g=s();x.fromArray(N.position),E.copy(x).applyMatrix4(i.from),_.copy(x).applyMatrix4(i.to),E.lerp(_,c),S.position[0]=E.x,S.position[1]=E.y,S.position[2]=E.z,x.fromArray(N.direction),E.copy(x).transformDirection(i.from),_.copy(x).transformDirection(i.to),E.lerp(_,c),E.lengthSq()>1e-12?E.normalize():E.copy(_);const P=a+(o-a)*c,m=e.speed*(1-e.speedJitter*l)*P;S.velocity[0]=E.x*m,S.velocity[1]=E.y*m,S.velocity[2]=E.z*m,S.birth=i.timeFrom+(i.timeTo-i.timeFrom)*c,S.lifetime=e.lifetime*(1-e.lifetimeJitter*h),S.sizeScale=(1-e.sizeJitter*u)*P,S.unit=P,S.seed=g,t.push(S)}};class Le{constructor(e){p(this,"ringValue");p(this,"settingsValue");p(this,"random");p(this,"emission",Me());p(this,"births",[]);p(this,"last",new f.Matrix4);p(this,"lastTime",null);p(this,"frame",{from:new f.Matrix4,to:new f.Matrix4,timeFrom:0,timeTo:0});this.settingsValue=e,this.ringValue=new j(e.capacity),this.random=V(e.seed)}get ring(){return this.ringValue}get settings(){return this.settingsValue}setSettings(e){const i=this.settingsValue;this.settingsValue=e,e.capacity!==i.capacity&&(this.ringValue=new j(e.capacity),this.ringValue.clear()),e.seed!==i.seed&&(this.random=V(e.seed))}update(e,i,r=!0){const s=this.lastTime;if(this.lastTime=i,s===null||!r||!(i>s))return this.last.copy(e),r||(this.emission.carry=0),0;const a=this.settingsValue;_e(this.emission,a.rate,i-s,this.births,this.ringValue.capacity);const o=this.frame;return o.from.copy(this.last),o.to.copy(e),o.timeFrom=s,o.timeTo=i,we(this.ringValue,a,o,this.births,this.random),this.last.copy(e),this.births.length}reset(){this.ringValue.clear(),this.emission.carry=0,this.lastTime=null}}const ze=()=>({uTime:{value:0},uDrag:{value:0},uAcceleration:{value:new f.Vector3},uSize:{value:new f.Vector2(1,1)},uOpacity:{value:new f.Vector2(1,1)},uColors:{value:Array.from({length:D},()=>new f.Vector3(1,1,1))},uColorCount:{value:1},uSprite:{value:0},uStretch:{value:0}}),De=(t,e)=>{t.uDrag.value=e.drag,t.uAcceleration.value.fromArray(B(e)),t.uSize.value.set(e.size[0],e.size[1]),t.uOpacity.value.set(e.opacity[0],e.opacity[1]),t.uColors.value.forEach((i,r)=>{const s=Math.min(r,e.colorCount-1)*3;i.set(e.colors[s],e.colors[s+1],e.colors[s+2])}),t.uColorCount.value=e.colorCount,t.uSprite.value=e.sprite==="streak"?1:0,t.uStretch.value=e.stretch},Ze=[-1,-1,0,1,-1,0,1,1,0,-1,1,0],et=[0,1,2,0,2,3],ie=t=>{const e=new f.InstancedBufferGeometry;e.setAttribute("position",new f.Float32BufferAttribute(Ze,3)),e.setIndex(et);const i=new f.InstancedInterleavedBuffer(t.data,A,1);return i.setUsage(f.DynamicDrawUsage),e.setAttribute("aStart",new f.InterleavedBufferAttribute(i,4,0)),e.setAttribute("aMotion",new f.InterleavedBufferAttribute(i,4,4)),e.setAttribute("aExtra",new f.InterleavedBufferAttribute(i,4,8)),e.instanceCount=t.capacity,e.boundingSphere=new f.Sphere(new f.Vector3,1/0),{geometry:e,buffer:i}};class Oe{constructor(e={},i){p(this,"mesh");p(this,"uniforms",ze());p(this,"spawner");p(this,"buffer");p(this,"bufferRing");p(this,"epoch",null);p(this,"ranges",[]);p(this,"disposed",!1);const r=F(e,i);this.spawner=new Le(r),this.bufferRing=this.spawner.ring;const{geometry:s,buffer:a}=ie(this.bufferRing);this.buffer=a;const o=new f.ShaderMaterial({name:"Particles",uniforms:this.uniforms,vertexShader:Te,fragmentShader:Ce,transparent:!0,depthTest:!0,depthWrite:!1,side:f.DoubleSide,toneMapped:!1});this.mesh=new f.Mesh(s,o),this.mesh.name="Particles",this.mesh.frustumCulled=!1,this.mesh.matrixAutoUpdate=!1,this.mesh.raycast=()=>{},this.apply(r)}get settings(){return this.spawner.settings}get ring(){return this.spawner.ring}get time(){return this.uniforms.uTime.value}setSettings(e,i=L){const r=F(e,i);this.spawner.setSettings(r),this.apply(r)}update(e,i,r=!0){if(this.disposed)return 0;this.epoch===null&&(this.epoch=i);const s=i-this.epoch,a=this.spawner.update(e,s,r);return this.syncRing(),this.spawner.ring.takeDirty(this.ranges),this.ranges.length>0&&(this.ranges.forEach(([o,n])=>this.buffer.addUpdateRange(o*A,n*A)),this.buffer.needsUpdate=!0),this.uniforms.uTime.value=s,a}aliveCount(){return this.spawner.ring.aliveAt(Math.fround(this.uniforms.uTime.value))}reset(){this.spawner.reset(),this.epoch=null,this.uniforms.uTime.value=0}dispose(){this.disposed||(this.disposed=!0,this.mesh.geometry.dispose(),this.mesh.material.dispose())}apply(e){De(this.uniforms,e),this.mesh.material.blending=e.blending==="additive"?f.AdditiveBlending:f.NormalBlending,this.syncRing()}syncRing(){const e=this.spawner.ring;if(e===this.bufferRing||!this.mesh)return;this.mesh.geometry.dispose();const{geometry:i,buffer:r}=ie(e);this.mesh.geometry=i,this.buffer=r,this.bufferRing=e}}const tt=t=>{for(let e=t;e;e=e.parent)if(!e.visible)return!1;return!0},H=R.forwardRef(({base:t,emitting:e=!0,renderOrder:i=0,position:r,rotation:s,scale:a,onSystem:o,children:n,...c},l)=>{const h=W.useThree(y=>y.scene),u=W.useThree(y=>y.get),g=R.useRef(null);R.useImperativeHandle(l,()=>g.current,[]);const P=JSON.stringify(c),m=R.useRef({settings:c,base:t,emitting:e,onSystem:o});m.current={settings:c,base:t,emitting:e,onSystem:o};const[d,M]=R.useState(null);return R.useEffect(()=>{var q,X;const y=new Oe(m.current.settings,m.current.base);h.add(y.mesh);const Fe=Ue.addSceneBeforeRender(h,()=>{const C=g.current;C&&y.update(C.matrixWorld,u().clock.elapsedTime,m.current.emitting&&tt(C))});return M(y),(X=(q=m.current).onSystem)==null||X.call(q,y),()=>{var C,Y;Fe(),h.remove(y.mesh),y.dispose(),(Y=(C=m.current).onSystem)==null||Y.call(C,null),M($=>$===y?null:$)}},[h,u]),R.useEffect(()=>{d==null||d.setSettings(m.current.settings,m.current.base)},[d,P,t]),d&&(d.mesh.renderOrder=i),T.jsx("group",{ref:g,position:r,rotation:s,scale:a,children:n})});H.displayName="Emitter";const ke=R.forwardRef(({target:t,faceIndex:e,numFaces:i,base:r,seed:s,...a},o)=>{const n=K.useTrackerContext(),c=Ve.useXRMirrored(),l=s??r.seed,h=T.jsx(re.CanonicalHeadFrame,{faceIndex:e,children:ne(t).map((u,g)=>T.jsx("group",{position:oe(u,c),children:T.jsx(H,{ref:g===0?o:void 0,base:r,seed:l+g,...a})},u))});return(n==null?void 0:n.type)==="face"?h:T.jsx(K.FaceTracker,{faceIndex:e??0,numFaces:i,children:h})});ke.displayName="EyeEmitters";const Ne=R.forwardRef(({preset:t,target:e,faceIndex:i,numFaces:r,...s},a)=>{const o=R.useMemo(()=>Ee(t),[t]);return e?T.jsx(ke,{ref:a,target:e,faceIndex:i,numFaces:r,base:o,...s}):T.jsx(H,{ref:a,base:o,...s})});Ne.displayName="ParticleEmitter";exports.DEFAULT_PARTICLE_SETTINGS=L;exports.PARTICLE_BLENDINGS=fe;exports.PARTICLE_DRAG_SERIES_LIMIT=O;exports.PARTICLE_EMITTER_TARGETS=qe;exports.PARTICLE_EYE_CENTRE=ae;exports.PARTICLE_EYE_FORWARD=se;exports.PARTICLE_FRAGMENT_SHADER=Ce;exports.PARTICLE_MAX_COLORS=D;exports.PARTICLE_MAX_PARTICLES=z;exports.PARTICLE_MAX_STEP=xe;exports.PARTICLE_PRESETS=de;exports.PARTICLE_PRESET_KEYS=me;exports.PARTICLE_RECORD=b;exports.PARTICLE_RECORD_FLOATS=A;exports.PARTICLE_SETTINGS_RANGES=he;exports.PARTICLE_SHAPES=ce;exports.PARTICLE_SPRITES=le;exports.PARTICLE_STATE_GLSL=Pe;exports.PARTICLE_VERTEX_SHADER=Te;exports.ParticleEmitter=Ne;exports.ParticleRing=j;exports.ParticleSpawner=Le;exports.ParticleSystem=Oe;exports.applyParticleUniforms=De;exports.createParticleEmission=Me;exports.createParticleRandom=V;exports.createParticleRecord=Se;exports.createParticleSample=Ae;exports.createParticleStart=U;exports.createParticleUniforms=ze;exports.isParticlePreset=ye;exports.parseParticleColor=pe;exports.particleAcceleration=B;exports.particleCapacity=ue;exports.particleColorAt=Re;exports.particleDragAcceleration=ve;exports.particleDragDistance=ge;exports.particleEyePosition=oe;exports.particleOverLife=G;exports.particlePresetBase=Ee;exports.particleTargetSides=ne;exports.particleUnitOf=J;exports.resolveParticleSettings=F;exports.sampleParticle=We;exports.sampleParticleCone=w;exports.sampleParticleStart=be;exports.spawnParticles=we;exports.stepParticleEmission=_e;