@vincentt-xr/sdk 2.0.0-alpha.8 → 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 (517) hide show
  1. package/GROUNDING.md +4643 -170
  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/gltfLoader.d.ts +16 -0
  18. package/dist/assets/loaders.d.ts +16 -1
  19. package/dist/body-pose/index.d.ts +521 -0
  20. package/dist/body-trigger/__fixtures__/syntheticBody.d.ts +83 -0
  21. package/dist/body-trigger/frame.d.ts +88 -0
  22. package/dist/body-trigger/index.d.ts +6 -0
  23. package/dist/body-trigger/moves.d.ts +235 -0
  24. package/dist/body-trigger/trigger.d.ts +75 -0
  25. package/dist/calibration/calibration.d.ts +11 -6
  26. package/dist/canonicalFace-BHwyCx1c.js +9 -0
  27. package/dist/canonicalFace-C83I225R.cjs +1 -0
  28. package/dist/components/BodyInstruction/BodyPoseHint.d.ts +63 -0
  29. package/dist/components/BodyInstruction/index.d.ts +69 -0
  30. package/dist/components/BodyInstruction/useBodyPose.d.ts +23 -0
  31. package/dist/components/BodyTracker/index.d.ts +10 -2
  32. package/dist/components/BodyTrigger/index.d.ts +49 -0
  33. package/dist/components/Debugger/DebuggerProvider.d.ts +14 -1
  34. package/dist/components/Debugger/DebuggerUI.d.ts +3 -1
  35. package/dist/components/FaceAtlas/FaceAtlasLayer.d.ts +114 -0
  36. package/dist/components/FaceAtlas/MadeUpCamera.d.ts +80 -0
  37. package/dist/components/FaceAtlas/constants.d.ts +8 -0
  38. package/dist/components/FaceAtlas/index.d.ts +7 -0
  39. package/dist/components/FaceAtlas/useFaceAtlasSurface.d.ts +84 -0
  40. package/dist/components/FaceAtlas/useFaceSkin.d.ts +84 -0
  41. package/dist/components/FaceCharacter/ExternalFaceMesh.d.ts +109 -0
  42. package/dist/components/FaceCharacter/FaceExpressionController.d.ts +53 -0
  43. package/dist/components/FaceCharacter/FaceMorph.d.ts +71 -0
  44. package/dist/components/FaceCharacter/FacePiercing.d.ts +65 -0
  45. package/dist/components/FaceCharacter/FaceReprojection.d.ts +85 -0
  46. package/dist/components/FaceCharacter/FaceRig.d.ts +38 -0
  47. package/dist/components/FaceCharacter/FaceSurface.d.ts +49 -0
  48. package/dist/components/FaceCharacter/FaceSurfaceOccluder.d.ts +39 -0
  49. package/dist/components/FaceCharacter/PinToFaceMesh.d.ts +68 -0
  50. package/dist/components/FaceCharacter/index.d.ts +18 -0
  51. package/dist/components/FaceCharacter/useFaceReprojector.d.ts +10 -0
  52. package/dist/components/FaceInset/FaceInset.d.ts +68 -0
  53. package/dist/components/FaceInset/frame.d.ts +94 -0
  54. package/dist/components/FaceInset/index.d.ts +6 -0
  55. package/dist/components/FaceInset/material.d.ts +40 -0
  56. package/dist/components/FaceInset/useFaceInsetTexture.d.ts +37 -0
  57. package/dist/components/FaceInstruction/FaceExpressionHint.d.ts +43 -0
  58. package/dist/components/FaceInstruction/index.d.ts +56 -0
  59. package/dist/components/FaceInstruction/useFaceExpression.d.ts +20 -0
  60. package/dist/components/FaceLiquify/FaceLiquify.d.ts +49 -0
  61. package/dist/components/FaceLiquify/debug.d.ts +37 -0
  62. package/dist/components/FaceLiquify/frame.d.ts +55 -0
  63. package/dist/components/FaceLiquify/index.d.ts +10 -0
  64. package/dist/components/FaceLiquify/material.d.ts +39 -0
  65. package/dist/components/FaceLiquify/pass.d.ts +49 -0
  66. package/dist/components/FaceLiquify/presence.d.ts +25 -0
  67. package/dist/components/FaceLiquify/presets.d.ts +82 -0
  68. package/dist/components/FaceLiquify/selfTest.d.ts +66 -0
  69. package/dist/components/FaceLiquify/target.d.ts +85 -0
  70. package/dist/components/FaceLiquify/warp.d.ts +72 -0
  71. package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +5 -3
  72. package/dist/components/FaceMesh/canonical/geometryGroups.d.ts +21 -0
  73. package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +9 -0
  74. package/dist/components/FaceMesh/index.d.ts +1 -1
  75. package/dist/components/FaceRetouch/Background.d.ts +3 -1
  76. package/dist/components/FaceRetouch/FaceRetouch.d.ts +5 -0
  77. package/dist/components/FaceRetouch/renderState.d.ts +19 -0
  78. package/dist/components/FaceSwap/FaceMirror.d.ts +46 -0
  79. package/dist/components/FaceSwap/FaceSwap.d.ts +58 -0
  80. package/dist/components/FaceSwap/FaceTextureLayer.d.ts +72 -0
  81. package/dist/components/FaceSwap/faceSwapPlan.d.ts +91 -0
  82. package/dist/components/FaceSwap/index.d.ts +13 -0
  83. package/dist/components/FaceSwap/settings.d.ts +300 -0
  84. package/dist/components/FaceSwap/useFaceTexture.d.ts +35 -0
  85. package/dist/components/FaceSwap/useLiveFace.d.ts +38 -0
  86. package/dist/components/FaceSwap/useLiveFaceTexture.d.ts +31 -0
  87. package/dist/components/FaceWarp3D/FaceWarp3D.d.ts +50 -0
  88. package/dist/components/FaceWarp3D/index.d.ts +2 -3
  89. package/dist/components/Faceless/Faceless.d.ts +51 -0
  90. package/dist/components/Faceless/index.d.ts +2 -0
  91. package/dist/components/HairLock/HairLock.d.ts +39 -0
  92. package/dist/components/HairLock/index.d.ts +2 -0
  93. package/dist/components/HairLock/lockGeometry.d.ts +15 -0
  94. package/dist/components/HandCutout/index.d.ts +35 -0
  95. package/dist/components/HandInstruction/HandGestureHint.d.ts +70 -0
  96. package/dist/components/HandInstruction/index.d.ts +74 -0
  97. package/dist/components/HandInstruction/useHandGesture.d.ts +22 -0
  98. package/dist/components/HandRig/ForearmOccluder.d.ts +29 -0
  99. package/dist/components/HandRig/HandAttachment.d.ts +34 -0
  100. package/dist/components/HandRig/HandOccluder.d.ts +55 -0
  101. package/dist/components/HandRig/HandTattoo.d.ts +61 -0
  102. package/dist/components/HandRig/WristAttachment.d.ts +34 -0
  103. package/dist/components/HandRig/index.d.ts +101 -0
  104. package/dist/components/HandRig/useArmMask.d.ts +29 -0
  105. package/dist/components/HandRig/wristSolve.d.ts +69 -0
  106. package/dist/components/HandTouch/HandTouch.d.ts +62 -0
  107. package/dist/components/HandTouch/Touchable.d.ts +36 -0
  108. package/dist/components/HandTouch/index.d.ts +2 -0
  109. package/dist/components/HeadBinding/index.d.ts +14 -0
  110. package/dist/components/HeadOccluder/CanonicalHeadFrame.d.ts +22 -0
  111. package/dist/components/HeadOccluder/Earrings.d.ts +55 -0
  112. package/dist/components/HeadOccluder/HeadAttachment.d.ts +38 -0
  113. package/dist/components/HeadOccluder/NeckOccluder.d.ts +64 -0
  114. package/dist/components/HeadOccluder/earringPlacement.d.ts +31 -0
  115. package/dist/components/HeadOccluder/headAttachmentPoints.d.ts +69 -0
  116. package/dist/components/HeadOccluder/index.d.ts +57 -3
  117. package/dist/components/HeadOccluder/useCanonicalHeadFit.d.ts +36 -0
  118. package/dist/components/HeadOccluder/useLandmarkPoseFit.d.ts +80 -0
  119. package/dist/components/Instruction/HintStage.d.ts +29 -0
  120. package/dist/components/Instruction/InstructionCue.d.ts +126 -0
  121. package/dist/components/Instruction/gestureHold.d.ts +20 -0
  122. package/dist/components/Instruction/ghost.d.ts +129 -0
  123. package/dist/components/Instruction/hintBlend.d.ts +19 -0
  124. package/dist/components/Instruction/hintLook.d.ts +81 -0
  125. package/dist/components/Instruction/hintLoop.d.ts +36 -0
  126. package/dist/components/Instruction/index.d.ts +41 -0
  127. package/dist/components/Instruction/useGhostModel.d.ts +33 -0
  128. package/dist/components/Instruction/useInstructionHold.d.ts +72 -0
  129. package/dist/components/LipEffect/LipEffect.d.ts +22 -2
  130. package/dist/components/LipEffect/LipEffectMaterial.d.ts +62 -10
  131. package/dist/components/LipEffect/LipEffects.d.ts +5 -2
  132. package/dist/components/LipEffect/defaults.d.ts +21 -2
  133. package/dist/components/LipEffect/index.d.ts +1 -1
  134. package/dist/components/LipEffect/lipShading.d.ts +73 -0
  135. package/dist/components/LipEffect/settings.d.ts +117 -13
  136. package/dist/components/LipEffect/shader.d.ts +39 -0
  137. package/dist/components/LipEffect/types.d.ts +82 -10
  138. package/dist/components/LipEffect/useLipDesignTextures.d.ts +6 -0
  139. package/dist/components/LipEffect/uvGuide.d.ts +31 -16
  140. package/dist/components/Makeup/Blush.d.ts +18 -0
  141. package/dist/components/Makeup/Brows.d.ts +20 -0
  142. package/dist/components/Makeup/Contour.d.ts +17 -0
  143. package/dist/components/Makeup/Eyeliner.d.ts +20 -0
  144. package/dist/components/Makeup/Eyeshadow.d.ts +20 -0
  145. package/dist/components/Makeup/Highlighter.d.ts +18 -0
  146. package/dist/components/Makeup/MakeupDesign.d.ts +37 -0
  147. package/dist/components/Makeup/MakeupRegion.d.ts +132 -0
  148. package/dist/components/Makeup/constants.d.ts +44 -0
  149. package/dist/components/Makeup/design.d.ts +106 -0
  150. package/dist/components/Makeup/designSamples.d.ts +42 -0
  151. package/dist/components/Makeup/eyes.d.ts +114 -0
  152. package/dist/components/Makeup/fields.d.ts +10 -0
  153. package/dist/components/Makeup/geometry.d.ts +106 -0
  154. package/dist/components/Makeup/index.d.ts +26 -0
  155. package/dist/components/Makeup/looks.d.ts +28 -0
  156. package/dist/components/Makeup/material.d.ts +239 -0
  157. package/dist/components/Makeup/settings.d.ts +54 -0
  158. package/dist/components/Makeup/shades.d.ts +143 -0
  159. package/dist/components/Makeup/shapes.d.ts +27 -0
  160. package/dist/components/Makeup/skinTone.d.ts +135 -0
  161. package/dist/components/Makeup/types.d.ts +110 -0
  162. package/dist/components/Makeup/useMakeupSkinTone.d.ts +40 -0
  163. package/dist/components/Necklace/Necklace.d.ts +44 -0
  164. package/dist/components/Necklace/index.d.ts +1 -0
  165. package/dist/components/ParticleEmitter/ParticleEmitter.d.ts +69 -0
  166. package/dist/components/ParticleEmitter/index.d.ts +1 -0
  167. package/dist/components/ShoulderOccluder/index.d.ts +43 -0
  168. package/dist/components/ShoulderOccluder/useCanonicalTorsoFit.d.ts +24 -0
  169. package/dist/components/SpringSwing/SpringSwing.d.ts +22 -0
  170. package/dist/components/SpringSwing/index.d.ts +1 -0
  171. package/dist/components/XRScene/renderOutputTarget.d.ts +12 -0
  172. package/dist/components/index.d.ts +8 -0
  173. package/dist/config/index.d.ts +0 -1
  174. package/dist/context-DTxSQvp4.js +13 -0
  175. package/dist/context-hA0Rb2Xa.cjs +1 -0
  176. package/dist/contexts-BH7PdKFS.cjs +1 -0
  177. package/dist/contexts-jak8-tND.js +667 -0
  178. package/dist/coordinates/index.d.ts +2 -0
  179. package/dist/coordinates/side.d.ts +40 -0
  180. package/dist/debug-ui/default-setting.cjs +2 -2
  181. package/dist/debug-ui/face-swap-settings/index.d.ts +22 -0
  182. package/dist/debug-ui/hierarchy-panel/index.d.ts +3 -2
  183. package/dist/debug-ui/index.d.ts +4 -3
  184. package/dist/debug-ui/media-source/index.d.ts +1 -1
  185. package/dist/debug-ui/media-source/session.d.ts +30 -2
  186. package/dist/debug-ui/media-source.cjs +1 -1
  187. package/dist/debug-ui/media-source.js +1 -1
  188. package/dist/debug-ui/object-inspector-panel/index.d.ts +3 -2
  189. package/dist/debug-ui/product-hotspots/index.d.ts +3 -2
  190. package/dist/debug-ui/scene-editor/hierarchy-panel.d.ts +3 -1
  191. package/dist/debug-ui/scene-editor/inspector-panel.d.ts +3 -1
  192. package/dist/debug-ui/screen-image-settings/index.d.ts +3 -1
  193. package/dist/debug-ui/screen-text-settings/ScreenTextSettingsPanel.d.ts +1 -1
  194. package/dist/debug-ui/screen-text-settings/types.d.ts +2 -0
  195. package/dist/debug-ui/settings-panel/index.d.ts +6 -1
  196. package/dist/debug-ui/shared/debugWindow.d.ts +51 -0
  197. package/dist/debug-ui/xr-diagnostics/index.d.ts +3 -2
  198. package/dist/debug-ui.cjs +3 -3
  199. package/dist/debug-ui.js +2250 -2472
  200. package/dist/entries/all.d.ts +3 -1
  201. package/dist/entries/core.d.ts +3 -2
  202. package/dist/entries/face-effects.d.ts +114 -8
  203. package/dist/entries/instructions.d.ts +48 -0
  204. package/dist/entries/internal.d.ts +2 -1
  205. package/dist/entries/low-level.d.ts +28 -1
  206. package/dist/entries/particles.d.ts +11 -0
  207. package/dist/entries/tracking.d.ts +37 -2
  208. package/dist/face-atlas/attributes.d.ts +30 -0
  209. package/dist/face-atlas/eyes.d.ts +272 -0
  210. package/dist/face-atlas/faceAtlas.generated.d.ts +46 -0
  211. package/dist/face-atlas/glsl/atlasVertex.d.ts +46 -0
  212. package/dist/face-atlas/glsl/common.d.ts +55 -0
  213. package/dist/face-atlas/glsl/design.d.ts +49 -0
  214. package/dist/face-atlas/glsl/eyes.d.ts +73 -0
  215. package/dist/face-atlas/glsl/finish.d.ts +24 -0
  216. package/dist/face-atlas/glsl/format.d.ts +4 -0
  217. package/dist/face-atlas/glsl/index.d.ts +59 -0
  218. package/dist/face-atlas/glsl/shading.d.ts +15 -0
  219. package/dist/face-atlas/glsl/shapes.d.ts +66 -0
  220. package/dist/face-atlas/glsl/sparkle.d.ts +19 -0
  221. package/dist/face-atlas/glsl/uniforms.d.ts +106 -0
  222. package/dist/face-atlas/guide.d.ts +51 -0
  223. package/dist/face-atlas/index.d.ts +25 -0
  224. package/dist/face-atlas/lead.d.ts +117 -0
  225. package/dist/face-atlas/madeUpCamera.d.ts +125 -0
  226. package/dist/face-atlas/masks.d.ts +53 -0
  227. package/dist/face-atlas/obj.d.ts +69 -0
  228. package/dist/face-atlas/polylines.d.ts +63 -0
  229. package/dist/face-atlas/probe/FaceSkinProbe.d.ts +208 -0
  230. package/dist/face-atlas/probe/__fixtures__/emulate.d.ts +9 -0
  231. package/dist/face-atlas/probe/__fixtures__/face.d.ts +24 -0
  232. package/dist/face-atlas/probe/constants.d.ts +137 -0
  233. package/dist/face-atlas/probe/glsl.d.ts +43 -0
  234. package/dist/face-atlas/probe/lightFit.d.ts +108 -0
  235. package/dist/face-atlas/probe/schedule.d.ts +44 -0
  236. package/dist/face-atlas/probe/selfTest.d.ts +87 -0
  237. package/dist/face-atlas/probe/stats.d.ts +143 -0
  238. package/dist/face-atlas/probe/targets.d.ts +70 -0
  239. package/dist/face-atlas/probe/unwrap.d.ts +76 -0
  240. package/dist/face-atlas/quality.d.ts +28 -0
  241. package/dist/face-atlas/regions.d.ts +31 -0
  242. package/dist/face-atlas/registry.d.ts +252 -0
  243. package/dist/face-atlas/renderState.d.ts +86 -0
  244. package/dist/face-atlas/selfOcclusion.d.ts +62 -0
  245. package/dist/face-atlas/shading.d.ts +406 -0
  246. package/dist/face-atlas/shapes.d.ts +86 -0
  247. package/dist/face-atlas/sides.d.ts +41 -0
  248. package/dist/face-atlas/skinMask.d.ts +35 -0
  249. package/dist/face-atlas/surface.d.ts +155 -0
  250. package/dist/face-atlas/topology.d.ts +44 -0
  251. package/dist/face-character/__fixtures__/faceImageDetections.d.ts +25 -0
  252. package/dist/face-character/__fixtures__/faceNode.d.ts +22 -0
  253. package/dist/face-character/bindFaceModel.d.ts +106 -0
  254. package/dist/face-character/canonicalFace.d.ts +17 -0
  255. package/dist/face-character/canonicalFaceGeometry.d.ts +11 -0
  256. package/dist/face-character/canonicalFacePositions.d.ts +7 -0
  257. package/dist/face-character/driveFaceModel.d.ts +57 -0
  258. package/dist/face-character/expressionOutputs.d.ts +45 -0
  259. package/dist/face-character/faceExpressions.d.ts +104 -0
  260. package/dist/face-character/faceImageLandmarker.d.ts +93 -0
  261. package/dist/face-character/faceMeshBinding.d.ts +62 -0
  262. package/dist/face-character/faceMorph.d.ts +77 -0
  263. package/dist/face-character/faceMorphs.d.ts +46 -0
  264. package/dist/face-character/facePhoto.d.ts +138 -0
  265. package/dist/face-character/facePiercings.d.ts +116 -0
  266. package/dist/face-character/facePin.d.ts +131 -0
  267. package/dist/face-character/faceReprojection.d.ts +273 -0
  268. package/dist/face-character/faceReprojector.d.ts +171 -0
  269. package/dist/face-character/faceRig.d.ts +176 -0
  270. package/dist/face-character/faceSwapPresence.d.ts +85 -0
  271. package/dist/face-character/faceTexture.d.ts +169 -0
  272. package/dist/face-character/faceTextureBaker.d.ts +86 -0
  273. package/dist/face-character/faceTextureGuide.d.ts +106 -0
  274. package/dist/face-character/faceTextureStats.d.ts +298 -0
  275. package/dist/face-character/faceTransfer.d.ts +396 -0
  276. package/dist/face-character/faceTransferGeometry.d.ts +109 -0
  277. package/dist/face-character/faceTransferSelfTest.d.ts +94 -0
  278. package/dist/face-character/faceWarp3D.d.ts +101 -0
  279. package/dist/face-character/faceless.d.ts +79 -0
  280. package/dist/face-character/featureWarp.d.ts +28 -0
  281. package/dist/face-character/liveFaceRegistry.d.ts +370 -0
  282. package/dist/face-character/liveValue.d.ts +12 -0
  283. package/dist/face-character/memo.d.ts +15 -0
  284. package/dist/face-effects.cjs +2252 -83
  285. package/dist/face-effects.js +14234 -1231
  286. package/dist/face-expression/index.d.ts +182 -0
  287. package/dist/face-info/landmarks.d.ts +17 -3
  288. package/dist/face-info/types.d.ts +20 -3
  289. package/dist/gestures/definitions.d.ts +15 -2
  290. package/dist/gestures/index.d.ts +1 -1
  291. package/dist/gestures/measures.d.ts +21 -8
  292. package/dist/getFaceInfo-B1otSDMX.cjs +1 -0
  293. package/dist/getFaceInfo-Cu4xDWiL.js +62 -0
  294. package/dist/hand/armFit.d.ts +46 -0
  295. package/dist/hand/armMask.d.ts +178 -0
  296. package/dist/hand/handCutout.d.ts +23 -0
  297. package/dist/hand/handCutoutRegistry.d.ts +7 -0
  298. package/dist/hand/handGestures.d.ts +524 -0
  299. package/dist/hand/handPose.d.ts +98 -0
  300. package/dist/hand/handRigSolver.d.ts +159 -0
  301. package/dist/hand/handTattoo.d.ts +81 -0
  302. package/dist/hand/handTouch.d.ts +240 -0
  303. package/dist/hand/wrist.d.ts +44 -0
  304. package/dist/hand/wristFilter.d.ts +44 -0
  305. package/dist/hooks/selectors.d.ts +8 -0
  306. package/dist/hooks/useFaceModelAcquisition.d.ts +38 -0
  307. package/dist/hooks/useTrackerContext.d.ts +6 -0
  308. package/dist/index-B1_TzJaI.js +1104 -0
  309. package/dist/index-BavF06C6.js +190 -0
  310. package/dist/index-BfFmpddl.cjs +21 -0
  311. package/dist/index-BuBzneeW.cjs +46 -0
  312. package/dist/index-CGsQWodV.cjs +1 -0
  313. package/dist/index-CIe7eCMH.js +3200 -0
  314. package/dist/index-CfSF8LXa.cjs +1 -0
  315. package/dist/index-D5GTzOzD.cjs +1 -0
  316. package/dist/index-DBhQzvVa.js +314 -0
  317. package/dist/index-DE17y0ZI.cjs +1 -0
  318. package/dist/index-JII7huPk.js +442 -0
  319. package/dist/index-tpCr9CLj.cjs +1 -0
  320. package/dist/{renderPasses-NnKZVfBy.js → index-w1S7fI2B.js} +219 -247
  321. package/dist/index-zGaqrz_K.js +188 -0
  322. package/dist/instructions.cjs +30 -0
  323. package/dist/instructions.js +1507 -0
  324. package/dist/{internal-vsfNQycj.js → internal-B90P-clC.js} +138 -118
  325. package/dist/internal-Cjinca64.cjs +1 -0
  326. package/dist/internal.cjs +1 -1
  327. package/dist/internal.js +15 -10
  328. package/dist/iris/compute.d.ts +7 -5
  329. package/dist/iris/types.d.ts +6 -4
  330. package/dist/{landmarkMask-CbTFzBYG.js → landmarkMask-BFDyBnKM.js} +6 -6
  331. package/dist/landmarks-BlUqf5MZ.cjs +1 -0
  332. package/dist/landmarks-bftdwq6Z.js +76 -0
  333. package/dist/loaders-BGAUACsd.js +363 -0
  334. package/dist/loaders-BJ1_QCHt.cjs +1 -0
  335. package/dist/low-level.cjs +1 -1
  336. package/dist/low-level.js +666 -602
  337. package/dist/main.cjs +1 -1
  338. package/dist/main.js +866 -1182
  339. package/dist/models/Body/index.d.ts +2 -0
  340. package/dist/models/Face/constants.d.ts +8 -0
  341. package/dist/models/Face/index.d.ts +3 -11
  342. package/dist/models/Face/rotation.d.ts +18 -3
  343. package/dist/models/Hand/HandTracking.d.ts +17 -1
  344. package/dist/models/Segmentation/index.d.ts +2 -0
  345. package/dist/models/nodeSource.d.ts +9 -0
  346. package/dist/particles/emission.d.ts +24 -0
  347. package/dist/particles/eyes.d.ts +24 -0
  348. package/dist/particles/glsl.d.ts +14 -0
  349. package/dist/particles/index.d.ts +10 -0
  350. package/dist/particles/motion.d.ts +42 -0
  351. package/dist/particles/presets.d.ts +12 -0
  352. package/dist/particles/ring.d.ts +58 -0
  353. package/dist/particles/selfTest.d.ts +53 -0
  354. package/dist/particles/settings.d.ts +127 -0
  355. package/dist/particles/shapes.d.ts +29 -0
  356. package/dist/particles/spawner.d.ts +60 -0
  357. package/dist/particles/system.d.ts +64 -0
  358. package/dist/particles.cjs +122 -0
  359. package/dist/particles.js +774 -0
  360. package/dist/product.cjs +1 -1
  361. package/dist/product.js +29 -29
  362. package/dist/{providers-C0Dlhh9Z.js → providers-C8rE26Uf.js} +127 -126
  363. package/dist/providers-DHsrhDI2.cjs +62 -0
  364. package/dist/render/renderPasses.d.ts +8 -0
  365. package/dist/render/sceneBeforeRender.d.ts +12 -0
  366. package/dist/{renderGroups-CN1cGFUo.js → renderGroups-B38pUaX2.js} +1 -1
  367. package/dist/{renderGroups-O4KmaMl9.cjs → renderGroups-Cb_4Ar1Q.cjs} +1 -1
  368. package/dist/renderPasses-B6l8IpJv.js +1290 -0
  369. package/dist/renderPasses-dqmkft4P.cjs +158 -0
  370. package/dist/renderState-CJNmj5jz.js +39 -0
  371. package/dist/renderState-apSfg4eR.cjs +1 -0
  372. package/dist/scene-object.cjs +1 -1
  373. package/dist/scene-object.js +2 -2
  374. package/dist/segmentation-Cb3ouK6Z.js +1758 -0
  375. package/dist/segmentation-D9pYO6aR.cjs +1 -0
  376. package/dist/segmentation2d/types.d.ts +6 -0
  377. package/dist/select-Ck5LGz-J.cjs +1 -0
  378. package/dist/select-pYRo_win.js +233 -0
  379. package/dist/selectors-C4X71aoD.cjs +1 -0
  380. package/dist/selectors-DmNaKIwE.js +196 -0
  381. package/dist/session-BrH8G7iJ.cjs +31 -0
  382. package/dist/session-DgA_z6O1.js +418 -0
  383. package/dist/{settings-aQk845NJ.js → settings-BJ7FMBsO.js} +53 -15
  384. package/dist/settings-C63FMBlF.cjs +1 -0
  385. package/dist/similarityFit-BFqHND2e.cjs +1 -0
  386. package/dist/similarityFit-Bbz-R8AY.js +91 -0
  387. package/dist/spring/index.d.ts +2 -0
  388. package/dist/spring/spring.d.ts +69 -0
  389. package/dist/spring/swing.d.ts +54 -0
  390. package/dist/tracking.cjs +10 -1
  391. package/dist/tracking.js +1002 -855
  392. package/dist/trigger-D0Pm9noT.cjs +49 -0
  393. package/dist/trigger-IQeys0oS.js +2128 -0
  394. package/dist/types/face.d.ts +20 -1
  395. package/dist/types/hand-tracking.d.ts +9 -0
  396. package/dist/types/nodes.d.ts +20 -1
  397. package/dist/types/segmentation.d.ts +5 -0
  398. package/dist/updateThrottle-BseecYag.js +4 -0
  399. package/dist/updateThrottle-Of5Y4SVa.cjs +1 -0
  400. package/dist/useFaceInfo-BHDNCvsJ.cjs +1 -0
  401. package/dist/useFaceInfo-J4x7LsqL.js +76 -0
  402. package/dist/useFaceResultReader-BvEo5REG.js +61 -0
  403. package/dist/useFaceResultReader-DuaL1KJG.cjs +1 -0
  404. package/dist/useInstructionHold-DOu-RpCM.js +53 -0
  405. package/dist/useInstructionHold-DwJY1Alr.cjs +1 -0
  406. package/dist/useLandmarkPoseFit-Bg-h9BPb.cjs +1 -0
  407. package/dist/useLandmarkPoseFit-Bmb3h6Mw.js +87 -0
  408. package/dist/{useXRCapabilities-B1R2ghy-.cjs → useXRCapabilities-Cr3RzuAW.cjs} +1 -1
  409. package/dist/{useXRCapabilities-C68v__wB.js → useXRCapabilities-Cxmlmpbd.js} +1 -1
  410. package/dist/utils/canonicalRigidLandmarks.d.ts +8 -0
  411. package/dist/utils/headOccluderFit.d.ts +42 -0
  412. package/dist/utils/integrity.d.ts +17 -0
  413. package/dist/utils/resolveNumFaces.d.ts +13 -0
  414. package/dist/utils/shoulderOccluderFit.d.ts +38 -0
  415. package/dist/utils/similarityFit.d.ts +23 -0
  416. package/dist/uv-BMFt19bg.cjs +1 -0
  417. package/dist/{index-CsUdQ-pn.js → uv-DJU_XfmN.js} +15 -249
  418. package/docs/SDK_DOCUMENTATION.md +1 -2
  419. package/docs/api/adaptive-quality.mdx +1 -1
  420. package/docs/api/body-instructions.mdx +285 -0
  421. package/docs/api/body-triggers.mdx +234 -0
  422. package/docs/api/camera-permission.mdx +1 -1
  423. package/docs/api/coordinate-spaces.mdx +7 -4
  424. package/docs/api/cross-camera.mdx +3 -2
  425. package/docs/api/debug-ui-scene-editor.mdx +23 -2
  426. package/docs/api/external-face-mesh.mdx +231 -0
  427. package/docs/api/face-actions.mdx +20 -16
  428. package/docs/api/face-attribute-expression.mdx +1 -1
  429. package/docs/api/face-binding-anchors.mdx +4 -2
  430. package/docs/api/face-character.mdx +157 -0
  431. package/docs/api/face-effects.mdx +3 -0
  432. package/docs/api/face-expression-controller.mdx +153 -0
  433. package/docs/api/face-info.mdx +17 -11
  434. package/docs/api/face-inset.mdx +204 -0
  435. package/docs/api/face-instructions.mdx +183 -0
  436. package/docs/api/face-liquify.mdx +196 -0
  437. package/docs/api/face-mesh.mdx +4 -7
  438. package/docs/api/face-morph.mdx +117 -0
  439. package/docs/api/face-painting.mdx +7 -0
  440. package/docs/api/face-reprojection.mdx +154 -0
  441. package/docs/api/face-retouching.mdx +18 -10
  442. package/docs/api/face-swap.mdx +350 -0
  443. package/docs/api/face-warp-3d.mdx +166 -0
  444. package/docs/api/faceless.mdx +143 -0
  445. package/docs/api/gestures.mdx +68 -32
  446. package/docs/api/hair.mdx +97 -0
  447. package/docs/api/hand-instructions.mdx +222 -0
  448. package/docs/api/hand-rig.mdx +535 -0
  449. package/docs/api/hand-touch.mdx +162 -0
  450. package/docs/api/head-occluder.mdx +563 -0
  451. package/docs/api/holistic-tracker.mdx +6 -1
  452. package/docs/api/instructions.mdx +323 -0
  453. package/docs/api/iris-tracking.mdx +24 -19
  454. package/docs/api/made-up-camera.mdx +131 -0
  455. package/docs/api/makeup-skin-tone.mdx +135 -0
  456. package/docs/api/makeup.mdx +353 -0
  457. package/docs/api/multi-subject.mdx +4 -1
  458. package/docs/api/particles.mdx +155 -0
  459. package/docs/api/person-cutout.mdx +1 -1
  460. package/docs/api/pin-to-face-mesh.mdx +274 -0
  461. package/docs/api/product-ar.mdx +5 -2
  462. package/docs/api/segmentation-overlay.mdx +1 -1
  463. package/docs/docs.json +29 -1
  464. package/docs/examples/lip-shaders.mdx +82 -33
  465. package/docs/guides/face-atlas-template.svg +1 -0
  466. package/docs/guides/face-atlas-textures.mdx +186 -0
  467. package/docs/guides/face-texture-template.svg +1 -0
  468. package/docs/guides/harness-debug-ui.mdx +4 -4
  469. package/docs/guides/lip-effect-textures.mdx +178 -102
  470. package/docs/guides/lip-uv-template.png +0 -0
  471. package/docs/guides/lip-uv-template.svg +1 -1
  472. package/docs/guides/makeup-design-textures.mdx +109 -0
  473. package/docs/introduction.mdx +1 -2
  474. package/package.json +11 -1
  475. package/dist/DebuggerUI-C-ldiozL.js +0 -269
  476. package/dist/DebuggerUI-CWX5EtQv.cjs +0 -1
  477. package/dist/FaceMeshRenderer-BEEXZwS6.cjs +0 -158
  478. package/dist/FaceMeshRenderer-UuH5sTXG.js +0 -1322
  479. package/dist/FaceRetouch-C7h7x9kd.js +0 -683
  480. package/dist/FaceRetouch-DqftT26Y.cjs +0 -134
  481. package/dist/GLTFLoader-C5q63sKO.js +0 -1633
  482. package/dist/GLTFLoader-Cb_CRwmG.cjs +0 -1
  483. package/dist/SegmentationOverlay-DQuW3dsc.js +0 -133
  484. package/dist/SegmentationOverlay-aWVod8Kl.cjs +0 -1
  485. package/dist/components/FaceWarp3D/FaceWarp3DHead.d.ts +0 -15
  486. package/dist/components/FaceWarp3D/defaults.d.ts +0 -37
  487. package/dist/components/FaceWarp3D/warp.d.ts +0 -13
  488. package/dist/contexts-CO0sd4JQ.cjs +0 -1
  489. package/dist/contexts-FzlnnMYD.js +0 -669
  490. package/dist/debug-ui/face-warp-3d/index.d.ts +0 -6
  491. package/dist/getFaceInfo-BkZfaQs-.js +0 -118
  492. package/dist/getFaceInfo-ahPxQFGu.cjs +0 -1
  493. package/dist/index--RgGzZ6X.cjs +0 -47
  494. package/dist/index-CHVbH0hz.js +0 -214
  495. package/dist/index-CeVkgsag.cjs +0 -1
  496. package/dist/index-CnGox6Xr.js +0 -3054
  497. package/dist/index-DKBAh6hV.cjs +0 -1
  498. package/dist/index-DsZwTfG0.cjs +0 -1
  499. package/dist/index-Dw6tj2Mi.js +0 -144
  500. package/dist/index-OCPjOaeP.cjs +0 -1
  501. package/dist/index-s9pF4zkG.js +0 -2053
  502. package/dist/internal-BYza1h8_.cjs +0 -1
  503. package/dist/measures-9dQPdw96.js +0 -154
  504. package/dist/measures-KfJzpvod.cjs +0 -1
  505. package/dist/providers-YNwkmNeK.cjs +0 -62
  506. package/dist/renderPasses-Cg-zqmEz.cjs +0 -21
  507. package/dist/screenTransform-BenfCtZt.js +0 -44
  508. package/dist/screenTransform-BiXdpVf0.cjs +0 -1
  509. package/dist/segmentation-9PhSvc-R.cjs +0 -1
  510. package/dist/segmentation-CeOTKemr.js +0 -5
  511. package/dist/selectors-C5G1PMYL.js +0 -195
  512. package/dist/selectors-Du_PsVnW.cjs +0 -1
  513. package/dist/session-BBr0yN8h.cjs +0 -31
  514. package/dist/session-Cy0m7l7-.js +0 -363
  515. package/dist/settings-DRR7-snV.cjs +0 -1
  516. package/dist/useFaceInfo-Blf7FCu3.js +0 -303
  517. package/dist/useFaceInfo-C5mO8NQY.cjs +0 -1
@@ -0,0 +1,353 @@
1
+ ---
2
+ title: "Makeup"
3
+ description: "Lipstick, contour, blush, highlighter, eyeshadow, eyeliner, brows and painted designs on the live face, shaded against the person's own skin and light, with looks, shades and six finishes."
4
+ sidebarTitle: "Makeup"
5
+ icon: "brush"
6
+ ---
7
+
8
+ Makeup paints the live face. Each region is its own component, imported from
9
+ `@vincentt-xr/sdk/face-effects`:
10
+
11
+ | Region | Component | Paints |
12
+ | ------------- | -------------- | -------------------------------------------------- |
13
+ | `lips` | `LipEffect` | Lipstick, gloss, tint, lip designs |
14
+ | `contour` | `Contour` | Cheek hollows, jawline, temples, sides of the nose |
15
+ | `blush` | `Blush` | The cheeks |
16
+ | `highlighter` | `Highlighter` | Cheekbones, brow bone, nose bridge, cupid's bow |
17
+ | `eyeshadow` | `Eyeshadow` | The lids, crease, lower lash line and inner corner |
18
+ | `eyeliner` | `Eyeliner` | Upper and lower lash lines, wings |
19
+ | `brows` | `Brows` | The person's own brows, tinted, filled or reshaped |
20
+ | — | `MakeupDesign` | Your own art: freckles, face gems, graphic liner |
21
+
22
+ Paint is shaded relative to the person's own skin, lip colour and light, so a shade reads as its named
23
+ colour on every skin tone and follows the room light. Every edit (look, shade, shape, finish, side) is
24
+ a uniform change, never a shader recompile.
25
+
26
+ ## Quick start
27
+
28
+ ```tsx
29
+ import { VideoBackground, XRScene } from "@vincentt-xr/sdk";
30
+ import {
31
+ Blush,
32
+ Brows,
33
+ Contour,
34
+ Eyeliner,
35
+ Eyeshadow,
36
+ Highlighter,
37
+ LipEffect,
38
+ MAKEUP_LOOKS,
39
+ } from "@vincentt-xr/sdk/face-effects";
40
+
41
+ const look = MAKEUP_LOOKS.softGlam;
42
+
43
+ <XRScene>
44
+ <VideoBackground />
45
+ <Contour {...look.contour} />
46
+ <Blush {...look.blush} shade="coral" />
47
+ <Highlighter {...look.highlighter} />
48
+ <Eyeshadow {...look.eyeshadow} />
49
+ <Eyeliner {...look.eyeliner} />
50
+ <Brows {...look.brows} />
51
+ <LipEffect {...look.lips} />
52
+ </XRScene>;
53
+ ```
54
+
55
+ Spread a look region into its component and put overrides after the spread. No prop is required:
56
+ `<Blush />` paints the default blush. `LipEffect` suspends once on mount, so keep it under a
57
+ `<Suspense>`.
58
+
59
+ ## Where it binds
60
+
61
+ No `FaceTracker` is needed.
62
+
63
+ - **Alone**: the component starts the face model itself, with `numFaces` faces (at least
64
+ `faceIndex + 1`). Pass the same `numFaces` to every face component.
65
+ - **Inside a `FaceTracker`**: it paints that tracker's face.
66
+ - **Nested in a `FaceRig`, `FaceWarp3D` or `FaceMorph`**: it rides that face, warp included. Makeup
67
+ outside a warp does not follow it.
68
+
69
+ Every region on one face shares one live surface and one skin probe. A face lost for under 250 ms
70
+ holds; then the makeup fades out.
71
+
72
+ ## Looks
73
+
74
+ `MAKEUP_LOOKS[name]` holds a `label`, a `description` and partial settings for all seven regions.
75
+ A region a look leaves bare is `{ enabled: false }`.
76
+
77
+ | Look | `MAKEUP_LOOKS` key |
78
+ | ---------- | ------------------ |
79
+ | Natural | `natural` |
80
+ | Soft glam | `softGlam` |
81
+ | Sun-kissed | `sunKissed` |
82
+ | Glam | `glam` |
83
+ | Smoky eye | `smokyEye` |
84
+ | Bold lip | `boldLip` |
85
+ | Editorial | `editorial` |
86
+ | Glitter | `glitter` |
87
+
88
+ `MAKEUP_LOOK_NAMES` lists them in this order. Only `natural` uses `"auto"` shades.
89
+
90
+ ## Settings
91
+
92
+ Every region has flat, serializable settings (`BlushSettings`, `ContourSettings`, …;
93
+ `MakeupSettings[region]` maps each region to its type). They are the component's props.
94
+
95
+ | Field | Meaning |
96
+ | ----------------------------------------------- | ----------------------------------------------------------------------------------------- |
97
+ | `enabled` | `false` draws nothing and holds nothing (default `true`) |
98
+ | `shape` | A placement preset (`MAKEUP_SHAPE_NAMES[region]`) or `"custom"`. Lips: `preset` |
99
+ | `shade` | A `MAKEUP_SHADES[region]` name, `"auto"` where supported, or `"custom"` |
100
+ | `color` | CSS colour. A colour that differs from the shade wins, and `shade` becomes `"custom"` |
101
+ | `opacity` | Linear amount 0..1. `0` hides the region but keeps it ready |
102
+ | `coverage` | 0 sheer (filters the person's own colour, never lightens) … 1 opaque |
103
+ | `finish`, `shine` | One of six finishes (below) and its highlight strength 0..1 |
104
+ | `sparkleColor`, `sparkleDensity`, `sparkleSize` | Flakes for `shimmer` and `glitter`: colour (`""` = from the shade), density 0..1, size mm |
105
+ | `softness` | Edge feather 0..1 |
106
+ | `side` | `"both"`, `"left"` or `"right"`: the person's own side on every feed |
107
+
108
+ Lips have the same fields except `softness` and `side` (`edgeSoftness` sets their edge), with
109
+ `preset` in place of `shape`.
110
+
111
+ Region fields:
112
+
113
+ | Region | `shape` values | Extra fields |
114
+ | ------------- | -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
115
+ | `contour` | `soft`, `sculpted`, `bronzed`, `nose` | `size` 0.5..1.5 |
116
+ | `blush` | `apples`, `lifted`, `draped`, `sunKissed` | `size` 0.5..1.5; `lift` −1..1 (positive toward the temple) |
117
+ | `highlighter` | `cheekbones`, `strobe`, `glow`, `nose` | `size` 0.5..1.5 |
118
+ | `eyeshadow` | `lid`, `crease`, `smoky`, `cutCrease`, `halo`, `winged` | `height`, `crease` + `creaseShade`, `lower`, `inner` + `innerShade` (all 0..1) |
119
+ | `eyeliner` | `tightline`, `classic`, `winged`, `catEye`, `smudged`, `kohl` | `thickness` mm 0.2..4; `wing` mm 0..15; `wingAngle` 0..45°; `lower`; `smudge` |
120
+ | `brows` | `natural`, `softArch`, `straight`, `highArch`, `bold`, `thin` | `boldness` (0.5 = their own brow); `fill` (0 tints the hairs only); `strokes` |
121
+ | `lips` | `preset`: `lipstick`, `gloss`, `matte`, `tint`, `metallic`, `gradient`, `shimmer`, `glitter` | The `LipEffect` fields |
122
+
123
+ `shape: "custom"` applies no preset: the region keeps its default placement, with the fields as
124
+ given.
125
+
126
+ ### Resolving and editing
127
+
128
+ Resolution order: defaults, then the shape, then the finish's `shine` and sparkle values, then the
129
+ shade's colour, then explicit values. Numbers are clamped; invalid values fall back.
130
+
131
+ ```tsx
132
+ import {
133
+ patchMakeupSettings,
134
+ resolveMakeupLook,
135
+ resolveMakeupSettings,
136
+ } from "@vincentt-xr/sdk/face-effects";
137
+
138
+ const blush = resolveMakeupSettings("blush", { shape: "lifted", shade: "coral" });
139
+ const glitter = patchMakeupSettings("blush", blush, { finish: "glitter" });
140
+ const look = resolveMakeupLook("softGlam", { eyeliner: { shape: "winged" } });
141
+ ```
142
+
143
+ - Spread-then-override works for partials (a look's regions, your own objects).
144
+ - A resolved object carries the values its shape and finish produced, so `{ ...resolved, finish:
145
+ "glitter" }` changes nothing else. Change resolved settings with `patchMakeupSettings`.
146
+ - `MAKEUP_SETTINGS_FIELDS[region]` (lips: `LIP_EFFECT_SETTINGS_FIELDS`) are typed `SettingsPanel`
147
+ fields for an editing panel. Pass what the panel emits through `patchMakeupSettings`.
148
+
149
+ ## Shades and `"auto"`
150
+
151
+ `MAKEUP_SHADES[region]` maps generic names (`coral`, `champagne`, `softBlack`, …) to sRGB hex;
152
+ `MAKEUP_SHADE_NAMES[region]` lists them in palette order.
153
+
154
+ `shade: "auto"` takes the colour from the person, on the GPU, with no readback:
155
+
156
+ | Region | `"auto"` colour |
157
+ | ------------- | --------------------------------- |
158
+ | `lips` | their own lip colour, deepened |
159
+ | `blush` | their skin hue, moved toward rose |
160
+ | `contour` | their skin, darkened |
161
+ | `highlighter` | their skin, lifted |
162
+ | `brows` | their brow-hair colour |
163
+
164
+ Eyeshadow and eyeliner have no `"auto"`. With `"auto"`, `color` is shown for the first ~0.3 s, until
165
+ the skin probe has measured the colour. To show a shade finder, read the person's depth, undertone
166
+ and best palette shades with [`useMakeupSkinTone`](/api/makeup-skin-tone).
167
+
168
+ ## Finishes
169
+
170
+ | `finish` | Look |
171
+ | ---------- | ----------------------------------------------------------- |
172
+ | `matte` | The skin's own shine removed |
173
+ | `satin` | A soft sheen |
174
+ | `gloss` | A wet highlight that keeps its strength at low opacity |
175
+ | `shimmer` | Satin plus dense fine flakes |
176
+ | `metallic` | A highlight tinted by the shade, from the room light |
177
+ | `glitter` | Sparse large flakes that sparkle with head and light motion |
178
+
179
+ Flakes stick to the skin and fade to their average below 1.5 px, so they never crawl. The low
180
+ quality tier turns shimmer into a smooth sheen and halves glitter density.
181
+
182
+ ## Sides
183
+
184
+ `side` is the person's own side on every feed: the mirrored webcam, the rear camera, images and
185
+ video. `<Blush side="left" />` paints the person's left cheek, which is on the screen's left on the
186
+ mirrored webcam and on the screen's right on the rear camera.
187
+
188
+ ## Hands in front
189
+
190
+ Add `HandCutout` so a hand over the face stays bare and in front of the makeup:
191
+
192
+ ```tsx
193
+ import { HandCutout, HandTracker } from "@vincentt-xr/sdk/tracking";
194
+
195
+ <XRScene>
196
+ <VideoBackground />
197
+ <HandTracker>
198
+ <HandCutout />
199
+ </HandTracker>
200
+ <Blush shade="rose" />
201
+ <LipEffect preset="lipstick" shade="classicRed" />
202
+ </XRScene>;
203
+ ```
204
+
205
+ `HandCutout` draws each hand's silhouette as depth at the near plane before the face layer, so
206
+ makeup is hidden where a hand is.
207
+
208
+ ## Two people
209
+
210
+ Give each component `faceIndex` and the same `numFaces`:
211
+
212
+ ```tsx
213
+ <>
214
+ <Blush shade="rose" faceIndex={0} numFaces={2} />
215
+ <Blush shade="peach" faceIndex={1} numFaces={2} />
216
+ <LipEffects
217
+ maxFaces={2}
218
+ faces={(faceIndex) => (faceIndex === 0 ? { preset: "matte" } : { preset: "gloss" })}
219
+ />
220
+ </>
221
+ ```
222
+
223
+ Inside `<FaceTracker numFaces={2} faceIndex={n}>`, the component paints that tracker's face.
224
+ `LipEffects` draws one lip effect per face; with a single config the faces share one material.
225
+
226
+ ## Draw order
227
+
228
+ Makeup draws in the face layer (`MAKEUP_RENDER_ORDER`):
229
+
230
+ | Order | What |
231
+ | ----- | ---------------------------------------------------------- |
232
+ | −900 | `HandCutout` |
233
+ | −2.5 | `FaceRetouch` |
234
+ | −2 | The face: `FaceWarp3D`, `FaceMorph`, characters, face swap |
235
+ | −1.9 | `contour` |
236
+ | −1.86 | `blush` |
237
+ | −1.83 | `highlighter` |
238
+ | −1.8 | `eyeshadow` |
239
+ | −1.76 | `eyeliner` |
240
+ | −1.72 | `brows` |
241
+ | −1.68 | `design` (`MakeupDesign`) |
242
+ | −1.64 | `lips` |
243
+ | −1.5 | `FaceInset` |
244
+ | −1 | Head occluder |
245
+ | 0+ | Accessories |
246
+
247
+ Hands and glasses draw over makeup. On a turned head the far cheek stops at the nose (high and
248
+ medium quality tiers). Effects that show the camera image (`FaceInset`, `FaceMorph`, `FaceReprojection`, face swap) show
249
+ it without makeup; wrap them in [`MadeUpCamera`](/api/made-up-camera) to include it. `FaceWarp3D`
250
+ always shows the plain camera: nest the makeup in the warp instead.
251
+
252
+ ## Designs
253
+
254
+ `MakeupDesign` paints art you made in the face atlas, shaded like makeup:
255
+
256
+ ```tsx
257
+ import { MakeupDesign } from "@vincentt-xr/sdk/face-effects";
258
+
259
+ <MakeupDesign
260
+ texture="/makeup/freckles.svg"
261
+ region={["cheeks", "nose"]}
262
+ coverage={0.45}
263
+ opacity={0.8}
264
+ />;
265
+ ```
266
+
267
+ The art's alpha is where it paints; its colours are the paint. See
268
+ [Makeup Design Textures](/guides/makeup-design-textures) for painting it and
269
+ [Face Atlas Textures](/guides/face-atlas-textures) for the layout.
270
+
271
+ ## Custom materials
272
+
273
+ Every region component and `MakeupDesign` take `material`: a material node, an instance you own, or
274
+ a factory of `MakeupMaterialContext`. Lips have their own material contract (see
275
+ [Lip Shaders](/examples/lip-shaders)). Pass `ctx.uniforms` (kept current from the settings and bound to the face)
276
+ and build the shader from the `MAKEUP_GLSL` chunks:
277
+
278
+ ```tsx
279
+ import * as THREE from "three";
280
+ import {
281
+ Blush,
282
+ MAKEUP_BLENDING,
283
+ MAKEUP_GLSL,
284
+ type MakeupMaterialContext,
285
+ } from "@vincentt-xr/sdk/face-effects";
286
+
287
+ <Blush
288
+ shape="draped"
289
+ material={(ctx: MakeupMaterialContext) => (
290
+ <shaderMaterial
291
+ glslVersion={THREE.GLSL3}
292
+ {...MAKEUP_BLENDING}
293
+ depthWrite={false}
294
+ uniforms={ctx.uniforms}
295
+ vertexShader={MAKEUP_GLSL.atlasVertex}
296
+ fragmentShader={`${MAKEUP_GLSL.common}${MAKEUP_GLSL.shading}${MAKEUP_GLSL.sparkle}${MAKEUP_GLSL.finish}${MAKEUP_GLSL.shapes}
297
+ void main() {
298
+ MakeupSample s = makeupSampleGeometry();
299
+ float k = blushShape(s.rest) * s.fade * uOpacity;
300
+ if (k < 1.0 / 255.0) discard;
301
+ makeupSampleColor(s);
302
+ makeupOutput(s, makeupDiffuse(s, uColor, uCoverage), k, vec3(0.0));
303
+ }`}
304
+ />
305
+ )}
306
+ />;
307
+ ```
308
+
309
+ - The factory runs once per region and factory, not on edits: read live values from `ctx.uniforms`
310
+ and `ctx.skin`. Keep a factory that returns a `THREE.Material` stable (module scope or
311
+ `useCallback`).
312
+ - To drive one material yourself on every face, make it with `createMakeupMaterial(region)`, edit it
313
+ with `updateMakeupMaterial(material, { settings })` and pass it as `sharedMaterial`. You dispose
314
+ it.
315
+ - The eye masks are in `MAKEUP_GLSL.eyes`; the design sampler is in `MAKEUP_GLSL.design`.
316
+
317
+ ## Cost and limits
318
+
319
+ - One draw per region per face, over only the triangles its shape can reach. Pixels outside the
320
+ shape are discarded before any texture read.
321
+ - One GPU program serves contour, blush and highlighter; each eye region and designs have their own.
322
+ Each is compiled once on first mount; the region shows when it is ready, within 2 s.
323
+ - Eye shapes are placed from MediaPipe's lash and brow landmarks. Very hooded lids, brows under
324
+ bangs, or brow landmarks off the real brow shift them.
325
+ - A long eyeliner wing reads up to ~15 % shorter on the far side of a turned eye.
326
+ - The skin probe needs the face in view. Until it settles, `"auto"` shows `color`.
327
+
328
+ ## Example
329
+
330
+ `/makeup` in the SDK playground has the eight looks and a custom mix, a panel per region, the lip
331
+ effect with designs and custom materials, the skin-tone readout with "apply", one or two faces, a
332
+ compare toggle and hands in front. Settings are kept in the URL: `?look=glam&faces=2&hands=0`.
333
+
334
+ ## Manual visual test plan
335
+
336
+ Open `/makeup` on the webcam, in even light.
337
+
338
+ 1. **Looks**: step through all eight. Each matches its description; nothing flickers or swims while
339
+ you move your head.
340
+ 2. **Compare**: toggle "makeup on". Only the made-up regions change.
341
+ 3. **Skin tones**: on the two-people clip, the same opaque shade reads as the same colour on both
342
+ faces.
343
+ 4. **Auto**: `natural` adapts to your own lips, skin and brows within about a second.
344
+ 5. **Sides**: blush with `side` left paints your real left cheek (the screen's left on the webcam).
345
+ On a clip, it paints the person's left cheek (the screen's right).
346
+ 6. **Hands**: a hand over the mouth and cheek stays bare. Turn "hands in front" off: the makeup
347
+ draws over the hand.
348
+ 7. **Turned head**: the far cheek's blush stops at the nose.
349
+ 8. **Blinks**: close one eye. Its lower liner and lower shadow fade; the other eye's stay.
350
+ 9. **Two faces**: faces "two" paints both people; "second face" gives the second person its own look.
351
+ 10. **Finishes**: glitter flakes stick to the skin and sparkle with head motion; gloss shows a moving
352
+ highlight.
353
+ 11. **Dropout**: cover the camera. The makeup holds briefly, then fades out.
@@ -32,7 +32,10 @@ icon: "people-group"
32
32
 
33
33
  `XR_MAX_SUBJECTS` carries this table. Every consumer that needs more than one
34
34
  face must ask for it; a consumer that asks for fewer than the first acquirer
35
- gets the larger count.
35
+ gets the larger count. The count the face model started with is the read-only
36
+ `numFaces` on its node (`useXRModelNode<XRModelNodeFaceTracking>(XRModel.FACE_TRACKER)`
37
+ from `@vincentt-xr/sdk/low-level`), so a consumer that asked for more can tell
38
+ that it got fewer.
36
39
 
37
40
  ## Selecting one subject
38
41
 
@@ -0,0 +1,155 @@
1
+ ---
2
+ title: "Particles"
3
+ description: "GPU particle emitters: place one anywhere in the scene, inside a tracker, or on the eyes. Laser eyes in one line, or your own emitter from a settings object."
4
+ sidebarTitle: "Particles"
5
+ icon: "sparkles"
6
+ ---
7
+
8
+ `ParticleEmitter` emits GPU particles from wherever it is.
9
+
10
+ - **Cheap.** Each particle is written once when it is emitted; the shader works out where it is,
11
+ how big and what colour from that and the time. Thousands of particles are one draw call.
12
+ - **World space.** Particles keep their own path once out: a turning head sweeps them, and they
13
+ live on when the emitter stops or its face is lost.
14
+ - **On time.** New particles start exactly at the emitter in the frame it is drawn, however fast it
15
+ moves.
16
+
17
+ Import from `@vincentt-xr/sdk/particles`.
18
+
19
+ ## Quick start: laser eyes
20
+
21
+ ```tsx
22
+ import { VideoBackground, XRScene } from "@vincentt-xr/sdk";
23
+ import { ParticleEmitter } from "@vincentt-xr/sdk/particles";
24
+
25
+ <XRScene>
26
+ <VideoBackground />
27
+ <ParticleEmitter preset="laser" target="eyes" />
28
+ </XRScene>;
29
+ ```
30
+
31
+ It tracks the face itself; no `FaceTracker` is needed.
32
+
33
+ ## Where it emits
34
+
35
+ - **`target="eyes"`** (or `"leftEye"`, `"rightEye"`): one emitter in front of each eye, aimed
36
+ straight out of the face. Left and right are the person's own sides on every feed.
37
+ `position`, `rotation` and `scale` then apply about the eye, in centimetres:
38
+ `rotation={[0.15, 0, 0]}` aims the beams a little down.
39
+ - **Inside a tracker**: put it in a `FaceTracker`, `CanonicalHeadFrame`, `HeadAttachment` or a
40
+ hand anchor and it follows that.
41
+ - **Anywhere in the scene**: like any 3D object. Its +Z is the direction particles leave in.
42
+
43
+ It emits only while it and every parent are visible; the particles already out live on.
44
+
45
+ ## Presets
46
+
47
+ `preset` is a starting point; any other prop goes on top of it.
48
+
49
+ ```tsx
50
+ <ParticleEmitter preset="laser" target="eyes" speed={400} color={["#ffffff", "#3be8ff"]} />
51
+ ```
52
+
53
+ | Preset | Look |
54
+ | --------- | ------------------------------------------------------------------------------- |
55
+ | `"laser"` | Dense additive streaks in a 0.6° cone, 900 per second, white-hot cooling to red |
56
+
57
+ ## Your own emitter
58
+
59
+ Every setting is a prop; leave out any you do not need. Lengths, speeds and forces are in the
60
+ emitter's units: inside a head frame (and with `target`), centimetres. Elsewhere the emitter's
61
+ world scale converts them, so `scale` sets the units of a free emitter.
62
+
63
+ ```tsx
64
+ // Glowing tears that fall from the eyes.
65
+ <ParticleEmitter
66
+ target="eyes"
67
+ shape="cone"
68
+ angle={30}
69
+ rate={120}
70
+ lifetime={1}
71
+ speed={6}
72
+ gravity={150}
73
+ size={[0.45, 0.25]}
74
+ color={["#ffffff", "#7fdcff"]}
75
+ />
76
+ ```
77
+
78
+ | Setting | Default | Meaning |
79
+ | -------------- | -------------- | ----------------------------------------------------------------------------------------------- |
80
+ | `rate` | 60 | Particles per second |
81
+ | `lifetime` | 1.5 | Seconds each lives; `lifetimeJitter` (0.2) shortens some |
82
+ | `shape` | `"cone"` | `"point"`, `"sphere"`, `"box"` or `"cone"` |
83
+ | `radius` | 0 | Sphere radius; cone base radius (0: from one point) |
84
+ | `boxSize` | `[10, 10, 10]` | Box size |
85
+ | `angle` | 15 | Degrees around +Z: `point` and `box` leave within it, `cone` is a cone of it; `sphere` goes out |
86
+ | `surface` | false | Sphere and box: start on the surface |
87
+ | `speed` | 30 | Start speed; `speedJitter` (0.2) slows some |
88
+ | `gravity` | 0 | Pull down (negative floats up) |
89
+ | `wind` | `[0, 0, 0]` | Constant push along the world's x, y, z |
90
+ | `drag` | 0 | Speed decay per second |
91
+ | `size` | `[1, 0.2]` | Size at birth and at death (one number: constant); `sizeJitter` (0.3) |
92
+ | `color` | `"#ffffff"` | One colour, or up to 4 spread from birth to death |
93
+ | `opacity` | `[1, 0]` | Opacity at birth and at death |
94
+ | `sprite` | `"glow"` | `"glow"` (soft disc) or `"streak"` (a line along the motion) |
95
+ | `stretch` | 0.05 | Streak length, in seconds of motion |
96
+ | `blending` | `"additive"` | `"additive"` (light) or `"normal"` |
97
+ | `maxParticles` | 0 | Alive at once; 0 sizes it from `rate × lifetime` |
98
+ | `seed` | 1 | The same seed and settings give the same particles |
99
+
100
+ Other props: `emitting` (default true), `renderOrder`, `position`, `rotation`, `scale`,
101
+ `faceIndex` and `numFaces` (with `target`), `onSystem` (receives each emitter's
102
+ `ParticleSystem`), and `children`.
103
+
104
+ Settings from an app or an agent are safe as they are: missing, non-finite or unknown values fall
105
+ back to the defaults and numbers are clamped (`resolveParticleSettings`, `PARTICLE_SETTINGS_RANGES`).
106
+
107
+ ## Drawing
108
+
109
+ - Particles draw in the transparent pass, depth-tested, without writing depth: a head occluder
110
+ hides the ones behind the head.
111
+ - `additive` brightens what is behind, so it suits light, sparks and lasers; on a white background
112
+ it turns white. Use `normal` for solid particles.
113
+ - A streak is seen end-on as a glow: beams coming straight at the camera look short.
114
+
115
+ ## Building blocks
116
+
117
+ For your own system without React: `ParticleSystem` (`new ParticleSystem(settings)`, add `mesh` to
118
+ the scene, call `update(emitterWorldMatrix, seconds)` in the scene's `onBeforeRender` so new
119
+ particles draw that frame), the shaders (`PARTICLE_VERTEX_SHADER`, `PARTICLE_FRAGMENT_SHADER`,
120
+ `PARTICLE_STATE_GLSL`) and their CPU reference `sampleParticle`. See `GROUNDING.md` for the full
121
+ list.
122
+
123
+ ## Limits
124
+
125
+ - Particles do not collide with the face, hands or each other, and nothing pushes them after they
126
+ leave; only gravity, wind and drag act on them.
127
+ - No textures: the shapes are the built-in glow and streak.
128
+ - `normal` blending does not sort particles: overlapping translucent ones can draw in the wrong
129
+ order.
130
+ - One emitter keeps at most 65536 particles alive.
131
+
132
+ ## Example
133
+
134
+ `/particles` in the SDK playground: the laser preset (speed, colour, aim) or a custom emitter with
135
+ every setting as a control and the code to paste, from the eyes or a free emitter in the scene,
136
+ with the live particle count. Settings are in the URL: `?look=custom`, `?from=scene`,
137
+ `?lcolor=cyan`, `?aim=10`, `?emitter={"shape":"sphere"}`.
138
+
139
+ `/smoke/particles.html` runs the GPU self-test on any device and shows the four shapes live.
140
+
141
+ ## Manual visual test plan
142
+
143
+ Open `/particles` on the webcam.
144
+
145
+ 1. **Laser**: a beam comes from each eye, white at the eye and red further out. Close one eye: the
146
+ beam stays on that eye.
147
+ 2. **Sweep**: turn your head left and right. The beams sweep with it and curve as they go; no
148
+ smear or flash appears near the eyes.
149
+ 3. **Sides**: "left eye" emits from your own left eye, on the webcam and on a clip.
150
+ 4. **Aim**: aim 20° down points both beams down.
151
+ 5. **Lost face**: cover the camera. No new particles come; the ones out fly on and fade.
152
+ 6. **Custom**: the default tears fall down your cheeks. Try each shape, the streak sprite and
153
+ every colour ramp; the code shown matches what you see.
154
+ 7. **Scene**: "scene (below)" sends particles up from your chest, independent of your face.
155
+ 8. **Phone**: the laser at about 30 fps on a mid-range phone; the particle count stays steady.
@@ -116,7 +116,7 @@ all consume the same instance.
116
116
 
117
117
  ## Manual visual test plan
118
118
 
119
- Run `/person-cutout` in the playground:
119
+ Run `/segmentation?mode=cutout` in the playground:
120
120
 
121
121
  | Case | Source / background | Expect |
122
122
  | ------------------------ | --------------------------------------- | ------------------------------------------------------------------------------- |