@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.
- package/GROUNDING.md +4643 -170
- package/README.md +1 -0
- package/dist/CanonicalHeadFrame-BHcWyaiK.js +1506 -0
- package/dist/CanonicalHeadFrame-D-_T1OMU.cjs +1 -0
- package/dist/DebuggerUI-7ngnJsBe.js +275 -0
- package/dist/DebuggerUI-CoglgKdO.cjs +1 -0
- package/dist/FaceRetouch-CLoTfrcs.js +1071 -0
- package/dist/FaceRetouch-J1lC1WbS.cjs +134 -0
- package/dist/FaceSurface-CHAMEeG1.cjs +1 -0
- package/dist/FaceSurface-DmP9AEeC.js +27 -0
- package/dist/SegmentationOverlay-D_FWkcyP.cjs +35 -0
- package/dist/SegmentationOverlay-vn5x_knv.js +6237 -0
- package/dist/SkeletonUtils-C2r90MtN.js +21 -0
- package/dist/SkeletonUtils-CddIup1F.cjs +1 -0
- package/dist/TextLabel-XE0rQSDn.cjs +2 -0
- package/dist/TextLabel-c9BCucOI.js +961 -0
- package/dist/assets/gltfLoader.d.ts +16 -0
- package/dist/assets/loaders.d.ts +16 -1
- package/dist/body-pose/index.d.ts +521 -0
- package/dist/body-trigger/__fixtures__/syntheticBody.d.ts +83 -0
- package/dist/body-trigger/frame.d.ts +88 -0
- package/dist/body-trigger/index.d.ts +6 -0
- package/dist/body-trigger/moves.d.ts +235 -0
- package/dist/body-trigger/trigger.d.ts +75 -0
- package/dist/calibration/calibration.d.ts +11 -6
- package/dist/canonicalFace-BHwyCx1c.js +9 -0
- package/dist/canonicalFace-C83I225R.cjs +1 -0
- package/dist/components/BodyInstruction/BodyPoseHint.d.ts +63 -0
- package/dist/components/BodyInstruction/index.d.ts +69 -0
- package/dist/components/BodyInstruction/useBodyPose.d.ts +23 -0
- package/dist/components/BodyTracker/index.d.ts +10 -2
- package/dist/components/BodyTrigger/index.d.ts +49 -0
- package/dist/components/Debugger/DebuggerProvider.d.ts +14 -1
- package/dist/components/Debugger/DebuggerUI.d.ts +3 -1
- package/dist/components/FaceAtlas/FaceAtlasLayer.d.ts +114 -0
- package/dist/components/FaceAtlas/MadeUpCamera.d.ts +80 -0
- package/dist/components/FaceAtlas/constants.d.ts +8 -0
- package/dist/components/FaceAtlas/index.d.ts +7 -0
- package/dist/components/FaceAtlas/useFaceAtlasSurface.d.ts +84 -0
- package/dist/components/FaceAtlas/useFaceSkin.d.ts +84 -0
- package/dist/components/FaceCharacter/ExternalFaceMesh.d.ts +109 -0
- package/dist/components/FaceCharacter/FaceExpressionController.d.ts +53 -0
- package/dist/components/FaceCharacter/FaceMorph.d.ts +71 -0
- package/dist/components/FaceCharacter/FacePiercing.d.ts +65 -0
- package/dist/components/FaceCharacter/FaceReprojection.d.ts +85 -0
- package/dist/components/FaceCharacter/FaceRig.d.ts +38 -0
- package/dist/components/FaceCharacter/FaceSurface.d.ts +49 -0
- package/dist/components/FaceCharacter/FaceSurfaceOccluder.d.ts +39 -0
- package/dist/components/FaceCharacter/PinToFaceMesh.d.ts +68 -0
- package/dist/components/FaceCharacter/index.d.ts +18 -0
- package/dist/components/FaceCharacter/useFaceReprojector.d.ts +10 -0
- package/dist/components/FaceInset/FaceInset.d.ts +68 -0
- package/dist/components/FaceInset/frame.d.ts +94 -0
- package/dist/components/FaceInset/index.d.ts +6 -0
- package/dist/components/FaceInset/material.d.ts +40 -0
- package/dist/components/FaceInset/useFaceInsetTexture.d.ts +37 -0
- package/dist/components/FaceInstruction/FaceExpressionHint.d.ts +43 -0
- package/dist/components/FaceInstruction/index.d.ts +56 -0
- package/dist/components/FaceInstruction/useFaceExpression.d.ts +20 -0
- package/dist/components/FaceLiquify/FaceLiquify.d.ts +49 -0
- package/dist/components/FaceLiquify/debug.d.ts +37 -0
- package/dist/components/FaceLiquify/frame.d.ts +55 -0
- package/dist/components/FaceLiquify/index.d.ts +10 -0
- package/dist/components/FaceLiquify/material.d.ts +39 -0
- package/dist/components/FaceLiquify/pass.d.ts +49 -0
- package/dist/components/FaceLiquify/presence.d.ts +25 -0
- package/dist/components/FaceLiquify/presets.d.ts +82 -0
- package/dist/components/FaceLiquify/selfTest.d.ts +66 -0
- package/dist/components/FaceLiquify/target.d.ts +85 -0
- package/dist/components/FaceLiquify/warp.d.ts +72 -0
- package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +5 -3
- package/dist/components/FaceMesh/canonical/geometryGroups.d.ts +21 -0
- package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +9 -0
- package/dist/components/FaceMesh/index.d.ts +1 -1
- package/dist/components/FaceRetouch/Background.d.ts +3 -1
- package/dist/components/FaceRetouch/FaceRetouch.d.ts +5 -0
- package/dist/components/FaceRetouch/renderState.d.ts +19 -0
- package/dist/components/FaceSwap/FaceMirror.d.ts +46 -0
- package/dist/components/FaceSwap/FaceSwap.d.ts +58 -0
- package/dist/components/FaceSwap/FaceTextureLayer.d.ts +72 -0
- package/dist/components/FaceSwap/faceSwapPlan.d.ts +91 -0
- package/dist/components/FaceSwap/index.d.ts +13 -0
- package/dist/components/FaceSwap/settings.d.ts +300 -0
- package/dist/components/FaceSwap/useFaceTexture.d.ts +35 -0
- package/dist/components/FaceSwap/useLiveFace.d.ts +38 -0
- package/dist/components/FaceSwap/useLiveFaceTexture.d.ts +31 -0
- package/dist/components/FaceWarp3D/FaceWarp3D.d.ts +50 -0
- package/dist/components/FaceWarp3D/index.d.ts +2 -3
- package/dist/components/Faceless/Faceless.d.ts +51 -0
- package/dist/components/Faceless/index.d.ts +2 -0
- package/dist/components/HairLock/HairLock.d.ts +39 -0
- package/dist/components/HairLock/index.d.ts +2 -0
- package/dist/components/HairLock/lockGeometry.d.ts +15 -0
- package/dist/components/HandCutout/index.d.ts +35 -0
- package/dist/components/HandInstruction/HandGestureHint.d.ts +70 -0
- package/dist/components/HandInstruction/index.d.ts +74 -0
- package/dist/components/HandInstruction/useHandGesture.d.ts +22 -0
- package/dist/components/HandRig/ForearmOccluder.d.ts +29 -0
- package/dist/components/HandRig/HandAttachment.d.ts +34 -0
- package/dist/components/HandRig/HandOccluder.d.ts +55 -0
- package/dist/components/HandRig/HandTattoo.d.ts +61 -0
- package/dist/components/HandRig/WristAttachment.d.ts +34 -0
- package/dist/components/HandRig/index.d.ts +101 -0
- package/dist/components/HandRig/useArmMask.d.ts +29 -0
- package/dist/components/HandRig/wristSolve.d.ts +69 -0
- package/dist/components/HandTouch/HandTouch.d.ts +62 -0
- package/dist/components/HandTouch/Touchable.d.ts +36 -0
- package/dist/components/HandTouch/index.d.ts +2 -0
- package/dist/components/HeadBinding/index.d.ts +14 -0
- package/dist/components/HeadOccluder/CanonicalHeadFrame.d.ts +22 -0
- package/dist/components/HeadOccluder/Earrings.d.ts +55 -0
- package/dist/components/HeadOccluder/HeadAttachment.d.ts +38 -0
- package/dist/components/HeadOccluder/NeckOccluder.d.ts +64 -0
- package/dist/components/HeadOccluder/earringPlacement.d.ts +31 -0
- package/dist/components/HeadOccluder/headAttachmentPoints.d.ts +69 -0
- package/dist/components/HeadOccluder/index.d.ts +57 -3
- package/dist/components/HeadOccluder/useCanonicalHeadFit.d.ts +36 -0
- package/dist/components/HeadOccluder/useLandmarkPoseFit.d.ts +80 -0
- package/dist/components/Instruction/HintStage.d.ts +29 -0
- package/dist/components/Instruction/InstructionCue.d.ts +126 -0
- package/dist/components/Instruction/gestureHold.d.ts +20 -0
- package/dist/components/Instruction/ghost.d.ts +129 -0
- package/dist/components/Instruction/hintBlend.d.ts +19 -0
- package/dist/components/Instruction/hintLook.d.ts +81 -0
- package/dist/components/Instruction/hintLoop.d.ts +36 -0
- package/dist/components/Instruction/index.d.ts +41 -0
- package/dist/components/Instruction/useGhostModel.d.ts +33 -0
- package/dist/components/Instruction/useInstructionHold.d.ts +72 -0
- package/dist/components/LipEffect/LipEffect.d.ts +22 -2
- package/dist/components/LipEffect/LipEffectMaterial.d.ts +62 -10
- package/dist/components/LipEffect/LipEffects.d.ts +5 -2
- package/dist/components/LipEffect/defaults.d.ts +21 -2
- package/dist/components/LipEffect/index.d.ts +1 -1
- package/dist/components/LipEffect/lipShading.d.ts +73 -0
- package/dist/components/LipEffect/settings.d.ts +117 -13
- package/dist/components/LipEffect/shader.d.ts +39 -0
- package/dist/components/LipEffect/types.d.ts +82 -10
- package/dist/components/LipEffect/useLipDesignTextures.d.ts +6 -0
- package/dist/components/LipEffect/uvGuide.d.ts +31 -16
- package/dist/components/Makeup/Blush.d.ts +18 -0
- package/dist/components/Makeup/Brows.d.ts +20 -0
- package/dist/components/Makeup/Contour.d.ts +17 -0
- package/dist/components/Makeup/Eyeliner.d.ts +20 -0
- package/dist/components/Makeup/Eyeshadow.d.ts +20 -0
- package/dist/components/Makeup/Highlighter.d.ts +18 -0
- package/dist/components/Makeup/MakeupDesign.d.ts +37 -0
- package/dist/components/Makeup/MakeupRegion.d.ts +132 -0
- package/dist/components/Makeup/constants.d.ts +44 -0
- package/dist/components/Makeup/design.d.ts +106 -0
- package/dist/components/Makeup/designSamples.d.ts +42 -0
- package/dist/components/Makeup/eyes.d.ts +114 -0
- package/dist/components/Makeup/fields.d.ts +10 -0
- package/dist/components/Makeup/geometry.d.ts +106 -0
- package/dist/components/Makeup/index.d.ts +26 -0
- package/dist/components/Makeup/looks.d.ts +28 -0
- package/dist/components/Makeup/material.d.ts +239 -0
- package/dist/components/Makeup/settings.d.ts +54 -0
- package/dist/components/Makeup/shades.d.ts +143 -0
- package/dist/components/Makeup/shapes.d.ts +27 -0
- package/dist/components/Makeup/skinTone.d.ts +135 -0
- package/dist/components/Makeup/types.d.ts +110 -0
- package/dist/components/Makeup/useMakeupSkinTone.d.ts +40 -0
- package/dist/components/Necklace/Necklace.d.ts +44 -0
- package/dist/components/Necklace/index.d.ts +1 -0
- package/dist/components/ParticleEmitter/ParticleEmitter.d.ts +69 -0
- package/dist/components/ParticleEmitter/index.d.ts +1 -0
- package/dist/components/ShoulderOccluder/index.d.ts +43 -0
- package/dist/components/ShoulderOccluder/useCanonicalTorsoFit.d.ts +24 -0
- package/dist/components/SpringSwing/SpringSwing.d.ts +22 -0
- package/dist/components/SpringSwing/index.d.ts +1 -0
- package/dist/components/XRScene/renderOutputTarget.d.ts +12 -0
- package/dist/components/index.d.ts +8 -0
- package/dist/config/index.d.ts +0 -1
- package/dist/context-DTxSQvp4.js +13 -0
- package/dist/context-hA0Rb2Xa.cjs +1 -0
- package/dist/contexts-BH7PdKFS.cjs +1 -0
- package/dist/contexts-jak8-tND.js +667 -0
- package/dist/coordinates/index.d.ts +2 -0
- package/dist/coordinates/side.d.ts +40 -0
- package/dist/debug-ui/default-setting.cjs +2 -2
- package/dist/debug-ui/face-swap-settings/index.d.ts +22 -0
- package/dist/debug-ui/hierarchy-panel/index.d.ts +3 -2
- package/dist/debug-ui/index.d.ts +4 -3
- package/dist/debug-ui/media-source/index.d.ts +1 -1
- package/dist/debug-ui/media-source/session.d.ts +30 -2
- package/dist/debug-ui/media-source.cjs +1 -1
- package/dist/debug-ui/media-source.js +1 -1
- package/dist/debug-ui/object-inspector-panel/index.d.ts +3 -2
- package/dist/debug-ui/product-hotspots/index.d.ts +3 -2
- package/dist/debug-ui/scene-editor/hierarchy-panel.d.ts +3 -1
- package/dist/debug-ui/scene-editor/inspector-panel.d.ts +3 -1
- package/dist/debug-ui/screen-image-settings/index.d.ts +3 -1
- package/dist/debug-ui/screen-text-settings/ScreenTextSettingsPanel.d.ts +1 -1
- package/dist/debug-ui/screen-text-settings/types.d.ts +2 -0
- package/dist/debug-ui/settings-panel/index.d.ts +6 -1
- package/dist/debug-ui/shared/debugWindow.d.ts +51 -0
- package/dist/debug-ui/xr-diagnostics/index.d.ts +3 -2
- package/dist/debug-ui.cjs +3 -3
- package/dist/debug-ui.js +2250 -2472
- package/dist/entries/all.d.ts +3 -1
- package/dist/entries/core.d.ts +3 -2
- package/dist/entries/face-effects.d.ts +114 -8
- package/dist/entries/instructions.d.ts +48 -0
- package/dist/entries/internal.d.ts +2 -1
- package/dist/entries/low-level.d.ts +28 -1
- package/dist/entries/particles.d.ts +11 -0
- package/dist/entries/tracking.d.ts +37 -2
- package/dist/face-atlas/attributes.d.ts +30 -0
- package/dist/face-atlas/eyes.d.ts +272 -0
- package/dist/face-atlas/faceAtlas.generated.d.ts +46 -0
- package/dist/face-atlas/glsl/atlasVertex.d.ts +46 -0
- package/dist/face-atlas/glsl/common.d.ts +55 -0
- package/dist/face-atlas/glsl/design.d.ts +49 -0
- package/dist/face-atlas/glsl/eyes.d.ts +73 -0
- package/dist/face-atlas/glsl/finish.d.ts +24 -0
- package/dist/face-atlas/glsl/format.d.ts +4 -0
- package/dist/face-atlas/glsl/index.d.ts +59 -0
- package/dist/face-atlas/glsl/shading.d.ts +15 -0
- package/dist/face-atlas/glsl/shapes.d.ts +66 -0
- package/dist/face-atlas/glsl/sparkle.d.ts +19 -0
- package/dist/face-atlas/glsl/uniforms.d.ts +106 -0
- package/dist/face-atlas/guide.d.ts +51 -0
- package/dist/face-atlas/index.d.ts +25 -0
- package/dist/face-atlas/lead.d.ts +117 -0
- package/dist/face-atlas/madeUpCamera.d.ts +125 -0
- package/dist/face-atlas/masks.d.ts +53 -0
- package/dist/face-atlas/obj.d.ts +69 -0
- package/dist/face-atlas/polylines.d.ts +63 -0
- package/dist/face-atlas/probe/FaceSkinProbe.d.ts +208 -0
- package/dist/face-atlas/probe/__fixtures__/emulate.d.ts +9 -0
- package/dist/face-atlas/probe/__fixtures__/face.d.ts +24 -0
- package/dist/face-atlas/probe/constants.d.ts +137 -0
- package/dist/face-atlas/probe/glsl.d.ts +43 -0
- package/dist/face-atlas/probe/lightFit.d.ts +108 -0
- package/dist/face-atlas/probe/schedule.d.ts +44 -0
- package/dist/face-atlas/probe/selfTest.d.ts +87 -0
- package/dist/face-atlas/probe/stats.d.ts +143 -0
- package/dist/face-atlas/probe/targets.d.ts +70 -0
- package/dist/face-atlas/probe/unwrap.d.ts +76 -0
- package/dist/face-atlas/quality.d.ts +28 -0
- package/dist/face-atlas/regions.d.ts +31 -0
- package/dist/face-atlas/registry.d.ts +252 -0
- package/dist/face-atlas/renderState.d.ts +86 -0
- package/dist/face-atlas/selfOcclusion.d.ts +62 -0
- package/dist/face-atlas/shading.d.ts +406 -0
- package/dist/face-atlas/shapes.d.ts +86 -0
- package/dist/face-atlas/sides.d.ts +41 -0
- package/dist/face-atlas/skinMask.d.ts +35 -0
- package/dist/face-atlas/surface.d.ts +155 -0
- package/dist/face-atlas/topology.d.ts +44 -0
- package/dist/face-character/__fixtures__/faceImageDetections.d.ts +25 -0
- package/dist/face-character/__fixtures__/faceNode.d.ts +22 -0
- package/dist/face-character/bindFaceModel.d.ts +106 -0
- package/dist/face-character/canonicalFace.d.ts +17 -0
- package/dist/face-character/canonicalFaceGeometry.d.ts +11 -0
- package/dist/face-character/canonicalFacePositions.d.ts +7 -0
- package/dist/face-character/driveFaceModel.d.ts +57 -0
- package/dist/face-character/expressionOutputs.d.ts +45 -0
- package/dist/face-character/faceExpressions.d.ts +104 -0
- package/dist/face-character/faceImageLandmarker.d.ts +93 -0
- package/dist/face-character/faceMeshBinding.d.ts +62 -0
- package/dist/face-character/faceMorph.d.ts +77 -0
- package/dist/face-character/faceMorphs.d.ts +46 -0
- package/dist/face-character/facePhoto.d.ts +138 -0
- package/dist/face-character/facePiercings.d.ts +116 -0
- package/dist/face-character/facePin.d.ts +131 -0
- package/dist/face-character/faceReprojection.d.ts +273 -0
- package/dist/face-character/faceReprojector.d.ts +171 -0
- package/dist/face-character/faceRig.d.ts +176 -0
- package/dist/face-character/faceSwapPresence.d.ts +85 -0
- package/dist/face-character/faceTexture.d.ts +169 -0
- package/dist/face-character/faceTextureBaker.d.ts +86 -0
- package/dist/face-character/faceTextureGuide.d.ts +106 -0
- package/dist/face-character/faceTextureStats.d.ts +298 -0
- package/dist/face-character/faceTransfer.d.ts +396 -0
- package/dist/face-character/faceTransferGeometry.d.ts +109 -0
- package/dist/face-character/faceTransferSelfTest.d.ts +94 -0
- package/dist/face-character/faceWarp3D.d.ts +101 -0
- package/dist/face-character/faceless.d.ts +79 -0
- package/dist/face-character/featureWarp.d.ts +28 -0
- package/dist/face-character/liveFaceRegistry.d.ts +370 -0
- package/dist/face-character/liveValue.d.ts +12 -0
- package/dist/face-character/memo.d.ts +15 -0
- package/dist/face-effects.cjs +2252 -83
- package/dist/face-effects.js +14234 -1231
- package/dist/face-expression/index.d.ts +182 -0
- package/dist/face-info/landmarks.d.ts +17 -3
- package/dist/face-info/types.d.ts +20 -3
- package/dist/gestures/definitions.d.ts +15 -2
- package/dist/gestures/index.d.ts +1 -1
- package/dist/gestures/measures.d.ts +21 -8
- package/dist/getFaceInfo-B1otSDMX.cjs +1 -0
- package/dist/getFaceInfo-Cu4xDWiL.js +62 -0
- package/dist/hand/armFit.d.ts +46 -0
- package/dist/hand/armMask.d.ts +178 -0
- package/dist/hand/handCutout.d.ts +23 -0
- package/dist/hand/handCutoutRegistry.d.ts +7 -0
- package/dist/hand/handGestures.d.ts +524 -0
- package/dist/hand/handPose.d.ts +98 -0
- package/dist/hand/handRigSolver.d.ts +159 -0
- package/dist/hand/handTattoo.d.ts +81 -0
- package/dist/hand/handTouch.d.ts +240 -0
- package/dist/hand/wrist.d.ts +44 -0
- package/dist/hand/wristFilter.d.ts +44 -0
- package/dist/hooks/selectors.d.ts +8 -0
- package/dist/hooks/useFaceModelAcquisition.d.ts +38 -0
- package/dist/hooks/useTrackerContext.d.ts +6 -0
- package/dist/index-B1_TzJaI.js +1104 -0
- package/dist/index-BavF06C6.js +190 -0
- package/dist/index-BfFmpddl.cjs +21 -0
- package/dist/index-BuBzneeW.cjs +46 -0
- package/dist/index-CGsQWodV.cjs +1 -0
- package/dist/index-CIe7eCMH.js +3200 -0
- package/dist/index-CfSF8LXa.cjs +1 -0
- package/dist/index-D5GTzOzD.cjs +1 -0
- package/dist/index-DBhQzvVa.js +314 -0
- package/dist/index-DE17y0ZI.cjs +1 -0
- package/dist/index-JII7huPk.js +442 -0
- package/dist/index-tpCr9CLj.cjs +1 -0
- package/dist/{renderPasses-NnKZVfBy.js → index-w1S7fI2B.js} +219 -247
- package/dist/index-zGaqrz_K.js +188 -0
- package/dist/instructions.cjs +30 -0
- package/dist/instructions.js +1507 -0
- package/dist/{internal-vsfNQycj.js → internal-B90P-clC.js} +138 -118
- package/dist/internal-Cjinca64.cjs +1 -0
- package/dist/internal.cjs +1 -1
- package/dist/internal.js +15 -10
- package/dist/iris/compute.d.ts +7 -5
- package/dist/iris/types.d.ts +6 -4
- package/dist/{landmarkMask-CbTFzBYG.js → landmarkMask-BFDyBnKM.js} +6 -6
- package/dist/landmarks-BlUqf5MZ.cjs +1 -0
- package/dist/landmarks-bftdwq6Z.js +76 -0
- package/dist/loaders-BGAUACsd.js +363 -0
- package/dist/loaders-BJ1_QCHt.cjs +1 -0
- package/dist/low-level.cjs +1 -1
- package/dist/low-level.js +666 -602
- package/dist/main.cjs +1 -1
- package/dist/main.js +866 -1182
- package/dist/models/Body/index.d.ts +2 -0
- package/dist/models/Face/constants.d.ts +8 -0
- package/dist/models/Face/index.d.ts +3 -11
- package/dist/models/Face/rotation.d.ts +18 -3
- package/dist/models/Hand/HandTracking.d.ts +17 -1
- package/dist/models/Segmentation/index.d.ts +2 -0
- package/dist/models/nodeSource.d.ts +9 -0
- package/dist/particles/emission.d.ts +24 -0
- package/dist/particles/eyes.d.ts +24 -0
- package/dist/particles/glsl.d.ts +14 -0
- package/dist/particles/index.d.ts +10 -0
- package/dist/particles/motion.d.ts +42 -0
- package/dist/particles/presets.d.ts +12 -0
- package/dist/particles/ring.d.ts +58 -0
- package/dist/particles/selfTest.d.ts +53 -0
- package/dist/particles/settings.d.ts +127 -0
- package/dist/particles/shapes.d.ts +29 -0
- package/dist/particles/spawner.d.ts +60 -0
- package/dist/particles/system.d.ts +64 -0
- package/dist/particles.cjs +122 -0
- package/dist/particles.js +774 -0
- package/dist/product.cjs +1 -1
- package/dist/product.js +29 -29
- package/dist/{providers-C0Dlhh9Z.js → providers-C8rE26Uf.js} +127 -126
- package/dist/providers-DHsrhDI2.cjs +62 -0
- package/dist/render/renderPasses.d.ts +8 -0
- package/dist/render/sceneBeforeRender.d.ts +12 -0
- package/dist/{renderGroups-CN1cGFUo.js → renderGroups-B38pUaX2.js} +1 -1
- package/dist/{renderGroups-O4KmaMl9.cjs → renderGroups-Cb_4Ar1Q.cjs} +1 -1
- package/dist/renderPasses-B6l8IpJv.js +1290 -0
- package/dist/renderPasses-dqmkft4P.cjs +158 -0
- package/dist/renderState-CJNmj5jz.js +39 -0
- package/dist/renderState-apSfg4eR.cjs +1 -0
- package/dist/scene-object.cjs +1 -1
- package/dist/scene-object.js +2 -2
- package/dist/segmentation-Cb3ouK6Z.js +1758 -0
- package/dist/segmentation-D9pYO6aR.cjs +1 -0
- package/dist/segmentation2d/types.d.ts +6 -0
- package/dist/select-Ck5LGz-J.cjs +1 -0
- package/dist/select-pYRo_win.js +233 -0
- package/dist/selectors-C4X71aoD.cjs +1 -0
- package/dist/selectors-DmNaKIwE.js +196 -0
- package/dist/session-BrH8G7iJ.cjs +31 -0
- package/dist/session-DgA_z6O1.js +418 -0
- package/dist/{settings-aQk845NJ.js → settings-BJ7FMBsO.js} +53 -15
- package/dist/settings-C63FMBlF.cjs +1 -0
- package/dist/similarityFit-BFqHND2e.cjs +1 -0
- package/dist/similarityFit-Bbz-R8AY.js +91 -0
- package/dist/spring/index.d.ts +2 -0
- package/dist/spring/spring.d.ts +69 -0
- package/dist/spring/swing.d.ts +54 -0
- package/dist/tracking.cjs +10 -1
- package/dist/tracking.js +1002 -855
- package/dist/trigger-D0Pm9noT.cjs +49 -0
- package/dist/trigger-IQeys0oS.js +2128 -0
- package/dist/types/face.d.ts +20 -1
- package/dist/types/hand-tracking.d.ts +9 -0
- package/dist/types/nodes.d.ts +20 -1
- package/dist/types/segmentation.d.ts +5 -0
- package/dist/updateThrottle-BseecYag.js +4 -0
- package/dist/updateThrottle-Of5Y4SVa.cjs +1 -0
- package/dist/useFaceInfo-BHDNCvsJ.cjs +1 -0
- package/dist/useFaceInfo-J4x7LsqL.js +76 -0
- package/dist/useFaceResultReader-BvEo5REG.js +61 -0
- package/dist/useFaceResultReader-DuaL1KJG.cjs +1 -0
- package/dist/useInstructionHold-DOu-RpCM.js +53 -0
- package/dist/useInstructionHold-DwJY1Alr.cjs +1 -0
- package/dist/useLandmarkPoseFit-Bg-h9BPb.cjs +1 -0
- package/dist/useLandmarkPoseFit-Bmb3h6Mw.js +87 -0
- package/dist/{useXRCapabilities-B1R2ghy-.cjs → useXRCapabilities-Cr3RzuAW.cjs} +1 -1
- package/dist/{useXRCapabilities-C68v__wB.js → useXRCapabilities-Cxmlmpbd.js} +1 -1
- package/dist/utils/canonicalRigidLandmarks.d.ts +8 -0
- package/dist/utils/headOccluderFit.d.ts +42 -0
- package/dist/utils/integrity.d.ts +17 -0
- package/dist/utils/resolveNumFaces.d.ts +13 -0
- package/dist/utils/shoulderOccluderFit.d.ts +38 -0
- package/dist/utils/similarityFit.d.ts +23 -0
- package/dist/uv-BMFt19bg.cjs +1 -0
- package/dist/{index-CsUdQ-pn.js → uv-DJU_XfmN.js} +15 -249
- package/docs/SDK_DOCUMENTATION.md +1 -2
- package/docs/api/adaptive-quality.mdx +1 -1
- package/docs/api/body-instructions.mdx +285 -0
- package/docs/api/body-triggers.mdx +234 -0
- package/docs/api/camera-permission.mdx +1 -1
- package/docs/api/coordinate-spaces.mdx +7 -4
- package/docs/api/cross-camera.mdx +3 -2
- package/docs/api/debug-ui-scene-editor.mdx +23 -2
- package/docs/api/external-face-mesh.mdx +231 -0
- package/docs/api/face-actions.mdx +20 -16
- package/docs/api/face-attribute-expression.mdx +1 -1
- package/docs/api/face-binding-anchors.mdx +4 -2
- package/docs/api/face-character.mdx +157 -0
- package/docs/api/face-effects.mdx +3 -0
- package/docs/api/face-expression-controller.mdx +153 -0
- package/docs/api/face-info.mdx +17 -11
- package/docs/api/face-inset.mdx +204 -0
- package/docs/api/face-instructions.mdx +183 -0
- package/docs/api/face-liquify.mdx +196 -0
- package/docs/api/face-mesh.mdx +4 -7
- package/docs/api/face-morph.mdx +117 -0
- package/docs/api/face-painting.mdx +7 -0
- package/docs/api/face-reprojection.mdx +154 -0
- package/docs/api/face-retouching.mdx +18 -10
- package/docs/api/face-swap.mdx +350 -0
- package/docs/api/face-warp-3d.mdx +166 -0
- package/docs/api/faceless.mdx +143 -0
- package/docs/api/gestures.mdx +68 -32
- package/docs/api/hair.mdx +97 -0
- package/docs/api/hand-instructions.mdx +222 -0
- package/docs/api/hand-rig.mdx +535 -0
- package/docs/api/hand-touch.mdx +162 -0
- package/docs/api/head-occluder.mdx +563 -0
- package/docs/api/holistic-tracker.mdx +6 -1
- package/docs/api/instructions.mdx +323 -0
- package/docs/api/iris-tracking.mdx +24 -19
- package/docs/api/made-up-camera.mdx +131 -0
- package/docs/api/makeup-skin-tone.mdx +135 -0
- package/docs/api/makeup.mdx +353 -0
- package/docs/api/multi-subject.mdx +4 -1
- package/docs/api/particles.mdx +155 -0
- package/docs/api/person-cutout.mdx +1 -1
- package/docs/api/pin-to-face-mesh.mdx +274 -0
- package/docs/api/product-ar.mdx +5 -2
- package/docs/api/segmentation-overlay.mdx +1 -1
- package/docs/docs.json +29 -1
- package/docs/examples/lip-shaders.mdx +82 -33
- package/docs/guides/face-atlas-template.svg +1 -0
- package/docs/guides/face-atlas-textures.mdx +186 -0
- package/docs/guides/face-texture-template.svg +1 -0
- package/docs/guides/harness-debug-ui.mdx +4 -4
- package/docs/guides/lip-effect-textures.mdx +178 -102
- package/docs/guides/lip-uv-template.png +0 -0
- package/docs/guides/lip-uv-template.svg +1 -1
- package/docs/guides/makeup-design-textures.mdx +109 -0
- package/docs/introduction.mdx +1 -2
- package/package.json +11 -1
- package/dist/DebuggerUI-C-ldiozL.js +0 -269
- package/dist/DebuggerUI-CWX5EtQv.cjs +0 -1
- package/dist/FaceMeshRenderer-BEEXZwS6.cjs +0 -158
- package/dist/FaceMeshRenderer-UuH5sTXG.js +0 -1322
- package/dist/FaceRetouch-C7h7x9kd.js +0 -683
- package/dist/FaceRetouch-DqftT26Y.cjs +0 -134
- package/dist/GLTFLoader-C5q63sKO.js +0 -1633
- package/dist/GLTFLoader-Cb_CRwmG.cjs +0 -1
- package/dist/SegmentationOverlay-DQuW3dsc.js +0 -133
- package/dist/SegmentationOverlay-aWVod8Kl.cjs +0 -1
- package/dist/components/FaceWarp3D/FaceWarp3DHead.d.ts +0 -15
- package/dist/components/FaceWarp3D/defaults.d.ts +0 -37
- package/dist/components/FaceWarp3D/warp.d.ts +0 -13
- package/dist/contexts-CO0sd4JQ.cjs +0 -1
- package/dist/contexts-FzlnnMYD.js +0 -669
- package/dist/debug-ui/face-warp-3d/index.d.ts +0 -6
- package/dist/getFaceInfo-BkZfaQs-.js +0 -118
- package/dist/getFaceInfo-ahPxQFGu.cjs +0 -1
- package/dist/index--RgGzZ6X.cjs +0 -47
- package/dist/index-CHVbH0hz.js +0 -214
- package/dist/index-CeVkgsag.cjs +0 -1
- package/dist/index-CnGox6Xr.js +0 -3054
- package/dist/index-DKBAh6hV.cjs +0 -1
- package/dist/index-DsZwTfG0.cjs +0 -1
- package/dist/index-Dw6tj2Mi.js +0 -144
- package/dist/index-OCPjOaeP.cjs +0 -1
- package/dist/index-s9pF4zkG.js +0 -2053
- package/dist/internal-BYza1h8_.cjs +0 -1
- package/dist/measures-9dQPdw96.js +0 -154
- package/dist/measures-KfJzpvod.cjs +0 -1
- package/dist/providers-YNwkmNeK.cjs +0 -62
- package/dist/renderPasses-Cg-zqmEz.cjs +0 -21
- package/dist/screenTransform-BenfCtZt.js +0 -44
- package/dist/screenTransform-BiXdpVf0.cjs +0 -1
- package/dist/segmentation-9PhSvc-R.cjs +0 -1
- package/dist/segmentation-CeOTKemr.js +0 -5
- package/dist/selectors-C5G1PMYL.js +0 -195
- package/dist/selectors-Du_PsVnW.cjs +0 -1
- package/dist/session-BBr0yN8h.cjs +0 -31
- package/dist/session-Cy0m7l7-.js +0 -363
- package/dist/settings-DRR7-snV.cjs +0 -1
- package/dist/useFaceInfo-Blf7FCu3.js +0 -303
- package/dist/useFaceInfo-C5mO8NQY.cjs +0 -1
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { MakeupAutoShadeRegion, MakeupRegion } from './constants';
|
|
2
|
+
/**
|
|
3
|
+
* Curated shade palettes per region: generic camelCase names (no brand or
|
|
4
|
+
* product names) to sRGB hex. Shades are relative to the person's own skin,
|
|
5
|
+
* so an opaque shade renders as its nominal colour on average skin under
|
|
6
|
+
* settled light, on every skin tone.
|
|
7
|
+
*/
|
|
8
|
+
export declare const MAKEUP_SHADES: {
|
|
9
|
+
readonly lips: {
|
|
10
|
+
readonly nude: "#b9826f";
|
|
11
|
+
readonly rosewood: "#9e5a5a";
|
|
12
|
+
readonly mauve: "#a0606e";
|
|
13
|
+
readonly softPink: "#d88a95";
|
|
14
|
+
readonly coral: "#e0645a";
|
|
15
|
+
readonly peach: "#e8907a";
|
|
16
|
+
readonly classicRed: "#a3202d";
|
|
17
|
+
readonly brick: "#8e3b2c";
|
|
18
|
+
readonly berry: "#7b2846";
|
|
19
|
+
readonly plum: "#5e2a45";
|
|
20
|
+
readonly wine: "#5a1a28";
|
|
21
|
+
readonly chocolate: "#5b3a2e";
|
|
22
|
+
};
|
|
23
|
+
readonly contour: {
|
|
24
|
+
readonly fair: "#c9a08a";
|
|
25
|
+
readonly light: "#b48a72";
|
|
26
|
+
readonly medium: "#98705a";
|
|
27
|
+
readonly tan: "#7f5a45";
|
|
28
|
+
readonly deep: "#5e4032";
|
|
29
|
+
readonly rich: "#432c22";
|
|
30
|
+
readonly bronzeLight: "#b9805a";
|
|
31
|
+
readonly bronzeDeep: "#8a5532";
|
|
32
|
+
};
|
|
33
|
+
readonly blush: {
|
|
34
|
+
readonly softPink: "#e8a0a8";
|
|
35
|
+
readonly rose: "#d97a85";
|
|
36
|
+
readonly peach: "#f0a07c";
|
|
37
|
+
readonly coral: "#ec7b67";
|
|
38
|
+
readonly apricot: "#f2a86b";
|
|
39
|
+
readonly mauve: "#c0828f";
|
|
40
|
+
readonly berry: "#b04a68";
|
|
41
|
+
readonly brick: "#b4574a";
|
|
42
|
+
readonly terracotta: "#c4694c";
|
|
43
|
+
readonly plum: "#8f4a68";
|
|
44
|
+
};
|
|
45
|
+
readonly highlighter: {
|
|
46
|
+
readonly pearl: "#f6eee6";
|
|
47
|
+
readonly champagne: "#f2dcc0";
|
|
48
|
+
readonly gold: "#e9c27a";
|
|
49
|
+
readonly roseGold: "#eab3a0";
|
|
50
|
+
readonly bronzeGlow: "#d29a66";
|
|
51
|
+
readonly lilacPearl: "#e6d6ef";
|
|
52
|
+
};
|
|
53
|
+
readonly eyeshadow: {
|
|
54
|
+
readonly ivory: "#f3e6d3";
|
|
55
|
+
readonly champagne: "#e9d2b0";
|
|
56
|
+
readonly sand: "#d2b48c";
|
|
57
|
+
readonly taupe: "#8f7a6e";
|
|
58
|
+
readonly warmBrown: "#8b5a3c";
|
|
59
|
+
readonly coolBrown: "#6e5a50";
|
|
60
|
+
readonly espresso: "#3e2a22";
|
|
61
|
+
readonly charcoal: "#3a3a3c";
|
|
62
|
+
readonly black: "#141414";
|
|
63
|
+
readonly bronze: "#a8743f";
|
|
64
|
+
readonly copper: "#b5653a";
|
|
65
|
+
readonly gold: "#d4ae5a";
|
|
66
|
+
readonly roseGold: "#d49a8a";
|
|
67
|
+
readonly plum: "#6b3a5a";
|
|
68
|
+
readonly burgundy: "#6e2433";
|
|
69
|
+
readonly olive: "#6f6a3a";
|
|
70
|
+
readonly navy: "#23314f";
|
|
71
|
+
readonly emerald: "#1f6b52";
|
|
72
|
+
readonly teal: "#1f6f73";
|
|
73
|
+
readonly lilac: "#b8a0cf";
|
|
74
|
+
readonly silver: "#c5c7cb";
|
|
75
|
+
};
|
|
76
|
+
readonly eyeliner: {
|
|
77
|
+
readonly black: "#0d0d0d";
|
|
78
|
+
readonly brownBlack: "#231a16";
|
|
79
|
+
readonly brown: "#4a3226";
|
|
80
|
+
readonly charcoal: "#33343a";
|
|
81
|
+
readonly navy: "#1c2848";
|
|
82
|
+
readonly plum: "#4f2442";
|
|
83
|
+
readonly emerald: "#145a44";
|
|
84
|
+
readonly bronze: "#8a5a2e";
|
|
85
|
+
readonly gold: "#c9a14e";
|
|
86
|
+
readonly white: "#f5f3ef";
|
|
87
|
+
};
|
|
88
|
+
readonly brows: {
|
|
89
|
+
readonly blonde: "#a88a62";
|
|
90
|
+
readonly taupe: "#7c6a5c";
|
|
91
|
+
readonly softBrown: "#6b4f3c";
|
|
92
|
+
readonly mediumBrown: "#57402f";
|
|
93
|
+
readonly darkBrown: "#3d2c22";
|
|
94
|
+
readonly softBlack: "#252020";
|
|
95
|
+
readonly auburn: "#7a4030";
|
|
96
|
+
readonly grey: "#8a8580";
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
/** A named shade of one region's palette, e.g. `MakeupShadeName<"lips">` is `"nude" | "rosewood" | …`. */
|
|
100
|
+
export type MakeupShadeName<R extends MakeupRegion> = Extract<keyof (typeof MAKEUP_SHADES)[R], string>;
|
|
101
|
+
/**
|
|
102
|
+
* What a region's `shade` field accepts: a palette name, `"custom"` (the
|
|
103
|
+
* `color` field as given) and, for lips, blush, contour, highlighter and
|
|
104
|
+
* brows, `"auto"` (from the person's own colouring).
|
|
105
|
+
*/
|
|
106
|
+
export type MakeupShadeSetting<R extends MakeupRegion> = MakeupShadeName<R> | "custom" | (R extends MakeupAutoShadeRegion ? "auto" : never);
|
|
107
|
+
/** The palette names per region, in palette order. */
|
|
108
|
+
export declare const MAKEUP_SHADE_NAMES: {
|
|
109
|
+
readonly [R in MakeupRegion]: readonly MakeupShadeName<R>[];
|
|
110
|
+
};
|
|
111
|
+
/** True when `region`'s `shade` accepts `"auto"`. */
|
|
112
|
+
export declare const supportsAutoMakeupShade: (region: MakeupRegion) => region is MakeupAutoShadeRegion;
|
|
113
|
+
export declare const isMakeupShadeName: <R extends MakeupRegion>(region: R, value: unknown) => value is MakeupShadeName<R>;
|
|
114
|
+
/**
|
|
115
|
+
* A shade name to its sRGB hex; `"auto"` stays `"auto"` where the region
|
|
116
|
+
* supports it (the colour is computed on the GPU). `undefined` for
|
|
117
|
+
* `"custom"` and for names that are not in the region's palette.
|
|
118
|
+
*/
|
|
119
|
+
export declare function resolveMakeupShade(region: MakeupRegion, shade: string): string | undefined;
|
|
120
|
+
/**
|
|
121
|
+
* Resolves one `shade` / `color` pair (the region's main pair, or eyeshadow's
|
|
122
|
+
* crease and inner pairs). The shade comes from the explicit value, else the
|
|
123
|
+
* base (defaults then shape). A palette shade sets the colour; an explicit
|
|
124
|
+
* colour that differs from it wins and the shade becomes `"custom"`. With
|
|
125
|
+
* `"auto"` the colour keeps the base colour as the fallback shown until the
|
|
126
|
+
* person's own colour is measured. Re-resolving a resolved pair is a no-op.
|
|
127
|
+
*
|
|
128
|
+
* Exception: when both are explicit and the colour is one a shade produced
|
|
129
|
+
* (any colour of the region's palette, or the base colour), the explicit
|
|
130
|
+
* named or `"auto"` shade wins. That colour was carried over from a resolved
|
|
131
|
+
* object, so `{ ...resolved, shade: "coral" }` gives coral.
|
|
132
|
+
*/
|
|
133
|
+
export declare const resolveMakeupShadePair: <R extends MakeupRegion>(region: R, shadeInput: unknown, colorInput: unknown, baseShade: MakeupShadeSetting<R>, baseColor: string) => {
|
|
134
|
+
shade: MakeupShadeSetting<R>;
|
|
135
|
+
color: string;
|
|
136
|
+
};
|
|
137
|
+
/** `"classicRed"` → `"Classic red"`. */
|
|
138
|
+
export declare const makeupNameLabel: (name: string) => string;
|
|
139
|
+
/** Select options for a region's shade field: custom, auto (where supported), then the palette. */
|
|
140
|
+
export declare const makeupShadeOptions: <R extends MakeupRegion>(region: R) => {
|
|
141
|
+
label: string;
|
|
142
|
+
value: string;
|
|
143
|
+
}[];
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { MakeupRegion } from './constants';
|
|
2
|
+
import { MakeupSettings } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Placement presets per region, in display order. Lips use the `LipEffect`
|
|
5
|
+
* presets (their `preset` field plays the part of `shape`).
|
|
6
|
+
*/
|
|
7
|
+
export declare const MAKEUP_SHAPE_NAMES: {
|
|
8
|
+
readonly lips: readonly ["lipstick", "gloss", "matte", "tint", "metallic", "gradient", "shimmer", "glitter"];
|
|
9
|
+
readonly contour: readonly ["soft", "sculpted", "bronzed", "nose"];
|
|
10
|
+
readonly blush: readonly ["apples", "lifted", "draped", "sunKissed"];
|
|
11
|
+
readonly highlighter: readonly ["cheekbones", "strobe", "glow", "nose"];
|
|
12
|
+
readonly eyeshadow: readonly ["lid", "crease", "smoky", "cutCrease", "halo", "winged"];
|
|
13
|
+
readonly eyeliner: readonly ["tightline", "classic", "winged", "catEye", "smudged", "kohl"];
|
|
14
|
+
readonly brows: readonly ["natural", "softArch", "straight", "highArch", "bold", "thin"];
|
|
15
|
+
};
|
|
16
|
+
/** A placement preset of one region, e.g. `MakeupShape<"blush">` is `"apples" | "lifted" | …`. */
|
|
17
|
+
export type MakeupShape<R extends MakeupRegion> = (typeof MAKEUP_SHAPE_NAMES)[R][number];
|
|
18
|
+
/**
|
|
19
|
+
* What each shape sets. Shapes set placement (geometry fields), `softness`
|
|
20
|
+
* and `coverage`; the shade and finish stay the caller's. Resolution order is
|
|
21
|
+
* defaults → shape → finish → shade → explicit values.
|
|
22
|
+
*/
|
|
23
|
+
export declare const MAKEUP_SHAPES: {
|
|
24
|
+
readonly [R in MakeupRegion]: Readonly<Record<MakeupShape<R>, Partial<MakeupSettings[R]>>>;
|
|
25
|
+
};
|
|
26
|
+
/** True when `value` is one of `region`'s shapes (lips: a `LipEffect` preset). */
|
|
27
|
+
export declare const isMakeupShape: <R extends MakeupRegion>(region: R, value: unknown) => value is MakeupShape<R>;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { FaceSkinStats } from '../../face-atlas/probe/stats';
|
|
2
|
+
import { Vec3 } from '../../face-atlas/shading';
|
|
3
|
+
import { MakeupRegion } from './constants';
|
|
4
|
+
import { MakeupShadeName } from './shades';
|
|
5
|
+
/**
|
|
6
|
+
* The skin-tone readout (FACE-1, `useMakeupSkinTone`): skin depth and
|
|
7
|
+
* undertone from the skin probe's settled skin colour, and the curated
|
|
8
|
+
* palette shades closest to what each region would paint on this person.
|
|
9
|
+
* Pure functions: the hook feeds them the probe's stats; a photo's stats
|
|
10
|
+
* (`FaceSkinProbe.renderStill` + `readStats`) work the same way.
|
|
11
|
+
*/
|
|
12
|
+
/** Skin depth, lightest to deepest (the contour palette's names). */
|
|
13
|
+
export declare const MAKEUP_SKIN_DEPTHS: readonly ["fair", "light", "medium", "tan", "deep", "rich"];
|
|
14
|
+
export type MakeupSkinDepth = (typeof MAKEUP_SKIN_DEPTHS)[number];
|
|
15
|
+
/** Undertone, from the skin's hue: pinker (cool) to more golden (warm). */
|
|
16
|
+
export declare const MAKEUP_UNDERTONES: readonly ["cool", "neutral", "warm"];
|
|
17
|
+
export type MakeupUndertone = (typeof MAKEUP_UNDERTONES)[number];
|
|
18
|
+
/** The readout's thresholds and defaults. Angles are degrees, lightness and chroma CIELAB units. */
|
|
19
|
+
export declare const MAKEUP_SKIN_TONE: Readonly<{
|
|
20
|
+
/**
|
|
21
|
+
* Lower ITA bound of each depth but the deepest (the Individual Typology
|
|
22
|
+
* Angle, `atan((L* − 50) / b*)`, with Chardon's skin categories: very light
|
|
23
|
+
* > 55°, light > 41°, intermediate > 28°, tan > 10°, brown > −30°, dark).
|
|
24
|
+
*/
|
|
25
|
+
readonly depthIta: Readonly<{
|
|
26
|
+
fair: 55;
|
|
27
|
+
light: 41;
|
|
28
|
+
medium: 28;
|
|
29
|
+
tan: 10;
|
|
30
|
+
deep: -30;
|
|
31
|
+
}>;
|
|
32
|
+
/** Skin hue (CIELAB `h_ab`) under this is cool (at `undertoneKneeL` and lighter). */
|
|
33
|
+
readonly coolHue: 50;
|
|
34
|
+
/** Skin hue over this is warm; between `coolHue` and it, neutral. */
|
|
35
|
+
readonly warmHue: 60;
|
|
36
|
+
/**
|
|
37
|
+
* Skin lightness (CIELAB `L*`) under which both hue cuts move down: deeper
|
|
38
|
+
* skin has a lower hue whatever its undertone.
|
|
39
|
+
*/
|
|
40
|
+
readonly undertoneKneeL: 50;
|
|
41
|
+
/** How far both hue cuts move down per `L*` unit under `undertoneKneeL`, degrees. */
|
|
42
|
+
readonly undertoneHueShift: 0.25;
|
|
43
|
+
/** Skin chroma (CIELAB `C*ab`) under this reads neutral whatever its hue (a grey or washed-out image). */
|
|
44
|
+
readonly minUndertoneChroma: 6;
|
|
45
|
+
/** Lip or brow colour used once the probe saw at least this share of their taps (else derived from the skin). */
|
|
46
|
+
readonly minFeatureSeen: 0.25;
|
|
47
|
+
/** Shades recommended per region. */
|
|
48
|
+
readonly recommendations: 3;
|
|
49
|
+
/** `useMakeupSkinTone`: ms between reads of the probe (2 a second). */
|
|
50
|
+
readonly readbackMs: 500;
|
|
51
|
+
/** `useMakeupSkinTone`: the shortest `intervalMs` it accepts. */
|
|
52
|
+
readonly minReadbackMs: 200;
|
|
53
|
+
}>;
|
|
54
|
+
/** Each region's recommended palette shades, best first. */
|
|
55
|
+
export type MakeupShadeRecommendations = {
|
|
56
|
+
readonly [R in MakeupRegion]: readonly MakeupShadeName<R>[];
|
|
57
|
+
};
|
|
58
|
+
/** What `computeMakeupSkinTone` reads off the stats (a `FaceSkinStats` fits). */
|
|
59
|
+
export type MakeupSkinToneInput = Pick<FaceSkinStats, "skinSlow" | "ready" | "lip" | "lipSeen" | "brow" | "browSeen">;
|
|
60
|
+
export type MakeupSkinTone = {
|
|
61
|
+
/** The settled skin colour as the camera shows it, sRGB hex. */
|
|
62
|
+
skin: string;
|
|
63
|
+
/** Its CIELAB (D65) `[L*, a*, b*]`. */
|
|
64
|
+
lab: readonly [number, number, number];
|
|
65
|
+
depth: MakeupSkinDepth;
|
|
66
|
+
/** The Individual Typology Angle, degrees: higher is lighter (`MAKEUP_SKIN_TONE.depthIta`). */
|
|
67
|
+
ita: number;
|
|
68
|
+
undertone: MakeupUndertone;
|
|
69
|
+
/** The skin's CIELAB hue angle `h_ab`, degrees (skin is usually 40–70). */
|
|
70
|
+
hue: number;
|
|
71
|
+
/** The skin's CIELAB chroma `C*ab`. */
|
|
72
|
+
chroma: number;
|
|
73
|
+
/** The person's own lip colour, sRGB hex, or null while too little lip was seen. */
|
|
74
|
+
lips: string | null;
|
|
75
|
+
/** The person's own brow-hair colour, sRGB hex, or null while too little brow was seen. */
|
|
76
|
+
brows: string | null;
|
|
77
|
+
/** Palette shades per region, best first: the shades nearest what each region would paint on this person. */
|
|
78
|
+
recommendations: MakeupShadeRecommendations;
|
|
79
|
+
};
|
|
80
|
+
export type ComputeMakeupSkinToneOptions = {
|
|
81
|
+
/** Shades per region. Default `MAKEUP_SKIN_TONE.recommendations` (3). */
|
|
82
|
+
count?: number;
|
|
83
|
+
};
|
|
84
|
+
type MVec3 = [number, number, number];
|
|
85
|
+
/** Linear sRGB → CIELAB (D65), `[L*, a*, b*]`. */
|
|
86
|
+
export declare const linearSrgbToLab: (c: Vec3) => MVec3;
|
|
87
|
+
/** `#rrggbb` → linear sRGB. */
|
|
88
|
+
export declare const hexToLinearSrgb: (hex: string) => MVec3;
|
|
89
|
+
/** Linear sRGB → `#rrggbb` (clamped). */
|
|
90
|
+
export declare const linearSrgbToHex: (c: Vec3) => string;
|
|
91
|
+
/** The Individual Typology Angle of a CIELAB colour, degrees: `atan2(L* − 50, b*)`. */
|
|
92
|
+
export declare const skinTypologyAngle: (lab: Vec3) => number;
|
|
93
|
+
/** Skin depth from the ITA (`MAKEUP_SKIN_TONE.depthIta`). */
|
|
94
|
+
export declare const classifyMakeupSkinDepth: (ita: number) => MakeupSkinDepth;
|
|
95
|
+
/**
|
|
96
|
+
* Undertone from the skin's CIELAB hue and chroma (`MAKEUP_SKIN_TONE`). With
|
|
97
|
+
* its `lightness` (`L*`), the hue cuts move down for skin deeper than
|
|
98
|
+
* `undertoneKneeL`, so deep skin is not read as cool for its lower hue.
|
|
99
|
+
*/
|
|
100
|
+
export declare const classifyMakeupUndertone: (hue: number, chroma: number, lightness?: number) => MakeupUndertone;
|
|
101
|
+
/**
|
|
102
|
+
* What each region would paint on this person (linear colours): the GPU's
|
|
103
|
+
* `shade: "auto"` recipes (`makeupAutoShade`) on the settled skin, lip and
|
|
104
|
+
* brow colours, plus a soft transition shade for eyeshadow (the skin
|
|
105
|
+
* deepened) and a liner from the brow hair (darkened). Blush, highlighter
|
|
106
|
+
* and eyeshadow then lean toward the undertone's hues (warm: peach, gold,
|
|
107
|
+
* bronze; cool: rose, pearl, taupe). Lips and brows fall back to colours
|
|
108
|
+
* derived from the skin while too little of them was seen.
|
|
109
|
+
*/
|
|
110
|
+
export declare const makeupToneTargets: (skin: Vec3, lip: Vec3 | null, brow: Vec3 | null, undertone?: MakeupUndertone) => { readonly [R in MakeupRegion]: MVec3; };
|
|
111
|
+
/** The `count` palette shades of `region` nearest (CIELAB ΔE) to a linear colour, best first. */
|
|
112
|
+
export declare const nearestMakeupShades: <R extends MakeupRegion>(region: R, target: Vec3, count?: number) => MakeupShadeName<R>[];
|
|
113
|
+
/**
|
|
114
|
+
* The skin-tone readout from the probe's stats (`FaceSkinStats`, e.g.
|
|
115
|
+
* `readFaceSkinStats` of `FaceSkinProbe.readStatsAsync`): skin depth (ITA),
|
|
116
|
+
* undertone (CIELAB hue) and palette shades per region. `null` until the
|
|
117
|
+
* probe is ready (`ready` past `MAKEUP_SKIN_READY`) or while the skin reads black.
|
|
118
|
+
*
|
|
119
|
+
* It measures the image, not the person: the camera's white balance moves
|
|
120
|
+
* the hue (a warm room reads warm), and its exposure moves the depth.
|
|
121
|
+
*/
|
|
122
|
+
/**
|
|
123
|
+
* `ready` at or above this counts as ready. It ramps to 1, but the packed
|
|
124
|
+
* 8-bit stats some GPUs fall back to (no float render targets) top out at
|
|
125
|
+
* 255/256, so an exact 1 never comes there (the probe's self-test uses the same).
|
|
126
|
+
*/
|
|
127
|
+
export declare const MAKEUP_SKIN_READY = 0.99;
|
|
128
|
+
export declare const computeMakeupSkinTone: (stats: MakeupSkinToneInput, options?: ComputeMakeupSkinToneOptions) => MakeupSkinTone | null;
|
|
129
|
+
/**
|
|
130
|
+
* Whether two readouts differ enough to tell the app (`useMakeupSkinTone`
|
|
131
|
+
* re-renders only then): another depth, undertone, recommendation, or a
|
|
132
|
+
* skin, lip or brow colour that moved by a step of the sRGB hex.
|
|
133
|
+
*/
|
|
134
|
+
export declare const makeupSkinToneChanged: (previous: MakeupSkinTone | null, next: MakeupSkinTone | null) => boolean;
|
|
135
|
+
export {};
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { LipEffectSettings } from '../LipEffect/settings';
|
|
2
|
+
import { MakeupFaceRegion, MakeupFinish, MakeupRegion, MakeupSide } from './constants';
|
|
3
|
+
import { MakeupShadeSetting } from './shades';
|
|
4
|
+
import { MakeupShape } from './shapes';
|
|
5
|
+
/**
|
|
6
|
+
* Fields every makeup region shares (lips use `LipEffectSettings`). Flat and
|
|
7
|
+
* serializable: a settings object can live in a store, a URL or a panel.
|
|
8
|
+
*/
|
|
9
|
+
export type MakeupRegionSettings<R extends MakeupFaceRegion> = {
|
|
10
|
+
/** `false` draws nothing and costs nothing. Looks use it for unused regions. */
|
|
11
|
+
enabled: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Placement preset from `MAKEUP_SHAPES[region]`; it sets the geometry
|
|
14
|
+
* fields and `coverage`. `"custom"` applies no preset: the placement is the
|
|
15
|
+
* region's default shape's (contour `soft`, blush `apples`, highlighter
|
|
16
|
+
* `cheekbones`, eyeshadow `lid`, eyeliner `classic`, brows `natural`) with
|
|
17
|
+
* the fields as given.
|
|
18
|
+
*/
|
|
19
|
+
shape: MakeupShape<R> | "custom";
|
|
20
|
+
/**
|
|
21
|
+
* A named colour from `MAKEUP_SHADES[region]` (sets `color`), `"auto"`
|
|
22
|
+
* where supported (from the person's own colouring; `color` is the
|
|
23
|
+
* fallback until it is measured) or `"custom"` (`color` as given).
|
|
24
|
+
*/
|
|
25
|
+
shade: MakeupShadeSetting<R>;
|
|
26
|
+
/** CSS colour. An explicit colour that differs from the shade wins and the shade becomes `"custom"`. */
|
|
27
|
+
color: string;
|
|
28
|
+
/** Linear amount, 0..1: 0.8 renders 80 %. */
|
|
29
|
+
opacity: number;
|
|
30
|
+
/** 0 = sheer (filters the person's own colour, never lightens), 1 = opaque (covers the skin). */
|
|
31
|
+
coverage: number;
|
|
32
|
+
/** How the product reflects light. Choosing a finish sets `shine` and the sparkle fields. */
|
|
33
|
+
finish: MakeupFinish;
|
|
34
|
+
/** Strength of the finish highlight, 0..1. */
|
|
35
|
+
shine: number;
|
|
36
|
+
/** Flake colour for `shimmer` / `glitter`; `""` derives it from the shade. */
|
|
37
|
+
sparkleColor: string;
|
|
38
|
+
/** Flake density, 0..1 (`shimmer` and `glitter` only). */
|
|
39
|
+
sparkleDensity: number;
|
|
40
|
+
/** Flake size in millimetres, 0.1..1.5. */
|
|
41
|
+
sparkleSize: number;
|
|
42
|
+
/** Edge feather, 0..1. */
|
|
43
|
+
softness: number;
|
|
44
|
+
/** The person's own side(s) to paint, on every feed. */
|
|
45
|
+
side: MakeupSide;
|
|
46
|
+
};
|
|
47
|
+
export type BlushSettings = MakeupRegionSettings<"blush"> & {
|
|
48
|
+
/** Scale of the placement, 0.5..1.5. */
|
|
49
|
+
size: number;
|
|
50
|
+
/** −1..1: 0 sits on the cheek, positive lifts toward the temple, negative drops toward the apples. */
|
|
51
|
+
lift: number;
|
|
52
|
+
};
|
|
53
|
+
export type ContourSettings = MakeupRegionSettings<"contour"> & {
|
|
54
|
+
/** Scale of the placement, 0.5..1.5. */
|
|
55
|
+
size: number;
|
|
56
|
+
};
|
|
57
|
+
export type HighlighterSettings = MakeupRegionSettings<"highlighter"> & {
|
|
58
|
+
/** Scale of the placement, 0.5..1.5. */
|
|
59
|
+
size: number;
|
|
60
|
+
};
|
|
61
|
+
export type EyeshadowSettings = MakeupRegionSettings<"eyeshadow"> & {
|
|
62
|
+
/** How far the lid colour reaches, 0..1: lash line (0) to brow (1). */
|
|
63
|
+
height: number;
|
|
64
|
+
/** Strength of the crease band, 0..1. */
|
|
65
|
+
crease: number;
|
|
66
|
+
/** Crease colour by name; `creaseColor` wins when it differs. */
|
|
67
|
+
creaseShade: MakeupShadeSetting<"eyeshadow">;
|
|
68
|
+
creaseColor: string;
|
|
69
|
+
/** Shadow along the lower lash line, 0..1. */
|
|
70
|
+
lower: number;
|
|
71
|
+
/** Inner-corner highlight, 0..1. */
|
|
72
|
+
inner: number;
|
|
73
|
+
/** Inner-corner colour by name; `innerColor` wins when it differs. */
|
|
74
|
+
innerShade: MakeupShadeSetting<"eyeshadow">;
|
|
75
|
+
innerColor: string;
|
|
76
|
+
};
|
|
77
|
+
export type EyelinerSettings = MakeupRegionSettings<"eyeliner"> & {
|
|
78
|
+
/** Line width at its thickest, in millimetres, 0.2..4. */
|
|
79
|
+
thickness: number;
|
|
80
|
+
/** Wing length past the outer corner, in millimetres, 0..15. */
|
|
81
|
+
wing: number;
|
|
82
|
+
/** Wing angle in degrees, 0..45, upward in the person's frame. */
|
|
83
|
+
wingAngle: number;
|
|
84
|
+
/** Lower lash line, 0..1 (fades while blinking). */
|
|
85
|
+
lower: number;
|
|
86
|
+
/** Softens and widens the line, 0..1. */
|
|
87
|
+
smudge: number;
|
|
88
|
+
};
|
|
89
|
+
export type BrowsSettings = MakeupRegionSettings<"brows"> & {
|
|
90
|
+
/** 0..1; 0.5 follows the person's own brow, higher is thicker and darker. */
|
|
91
|
+
boldness: number;
|
|
92
|
+
/** 0 tints only the real hairs, 1 fills a full powder shape. */
|
|
93
|
+
fill: number;
|
|
94
|
+
/** Procedural hair strokes, 0..1. */
|
|
95
|
+
strokes: number;
|
|
96
|
+
};
|
|
97
|
+
/** Settings per region: `MakeupSettings["blush"]` is `BlushSettings`, lips are `LipEffectSettings`. */
|
|
98
|
+
export type MakeupSettings = {
|
|
99
|
+
lips: LipEffectSettings;
|
|
100
|
+
contour: ContourSettings;
|
|
101
|
+
blush: BlushSettings;
|
|
102
|
+
highlighter: HighlighterSettings;
|
|
103
|
+
eyeshadow: EyeshadowSettings;
|
|
104
|
+
eyeliner: EyelinerSettings;
|
|
105
|
+
brows: BrowsSettings;
|
|
106
|
+
};
|
|
107
|
+
/** Partial settings per region, as looks and overrides carry them. */
|
|
108
|
+
export type MakeupSettingsInput = {
|
|
109
|
+
[R in MakeupRegion]?: Partial<MakeupSettings[R]>;
|
|
110
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { FaceSkinQuality } from '../../face-atlas/probe/constants';
|
|
2
|
+
import { MakeupSkinTone } from './skinTone';
|
|
3
|
+
export type UseMakeupSkinToneOptions = {
|
|
4
|
+
/** Which tracked face. Default: the nearest `FaceRig` / `FaceTracker`'s face, else 0. */
|
|
5
|
+
faceIndex?: number;
|
|
6
|
+
/** Faces to start the face model with when this starts it (no `FaceTracker` above). */
|
|
7
|
+
numFaces?: number;
|
|
8
|
+
/**
|
|
9
|
+
* Milliseconds between reads of the probe, at least
|
|
10
|
+
* `MAKEUP_SKIN_TONE.minReadbackMs` (200). Default 500 (two reads a second).
|
|
11
|
+
*/
|
|
12
|
+
intervalMs?: number;
|
|
13
|
+
/** Shades recommended per region. Default 3. */
|
|
14
|
+
count?: number;
|
|
15
|
+
/** The skin probe's quality (`useFaceSkin`). Default `"auto"`. */
|
|
16
|
+
quality?: FaceSkinQuality;
|
|
17
|
+
/** `false` stops reading and releases the probe. Default true. */
|
|
18
|
+
enabled?: boolean;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* The person's skin tone for shade-finder UIs: skin depth (`fair` … `rich`),
|
|
22
|
+
* undertone (`cool`, `neutral`, `warm`), the measured skin, lip and brow
|
|
23
|
+
* colours, and the curated palette shades nearest what each region would
|
|
24
|
+
* paint on them (`MakeupSkinTone`). `null` until the face's skin probe has
|
|
25
|
+
* settled.
|
|
26
|
+
*
|
|
27
|
+
* It reads the shared skin probe of the face (the one makeup uses; it starts
|
|
28
|
+
* one if none runs) back from the GPU without stalling it, at most every
|
|
29
|
+
* `intervalMs` (default 500 ms), and re-renders only when the readout
|
|
30
|
+
* changes. Works alone (it starts the face model when no `FaceTracker` is
|
|
31
|
+
* above). The camera's white balance moves the undertone and its exposure
|
|
32
|
+
* the depth: it describes the image, not the person, so offer it as a
|
|
33
|
+
* suggestion, never a label.
|
|
34
|
+
*
|
|
35
|
+
* ```tsx
|
|
36
|
+
* const tone = useMakeupSkinTone();
|
|
37
|
+
* <Blush shade={tone?.recommendations.blush[0] ?? "rose"} />
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export declare const useMakeupSkinTone: (options?: UseMakeupSkinToneOptions) => MakeupSkinTone | null;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { SpringSwingOptions } from '../../spring/swing';
|
|
3
|
+
import { CanonicalOffset } from '../HeadOccluder/useLandmarkPoseFit';
|
|
4
|
+
import { CanonicalTorsoFitOptions } from '../ShoulderOccluder/useCanonicalTorsoFit';
|
|
5
|
+
import type * as THREE from "three";
|
|
6
|
+
/** Nodes whose name contains one of these swing (`*_pendant`, `*_charm`). */
|
|
7
|
+
export declare const NECKLACE_SWING_NODES: readonly string[];
|
|
8
|
+
/** A pendant lies on the chest: it swings less far than an earring. */
|
|
9
|
+
export declare const NECKLACE_SWING_DEFAULTS: Readonly<SpringSwingOptions>;
|
|
10
|
+
export type NecklaceProps = Omit<CanonicalTorsoFitOptions, "offset"> & {
|
|
11
|
+
/**
|
|
12
|
+
* The necklace, authored in the torso frame: centimetres, origin between
|
|
13
|
+
* the shoulder joints, +X screen right, +Y up, +Z toward the camera, the
|
|
14
|
+
* chain on the neck base and upper chest. A pendant is a child node named
|
|
15
|
+
* `…pendant…` (or `…charm…`) with its origin on its bail. Cloned, so pass a
|
|
16
|
+
* loaded GLB's scene (or one of its nodes) as it is.
|
|
17
|
+
*/
|
|
18
|
+
model?: THREE.Object3D | null;
|
|
19
|
+
/** JSX in the same frame (it does not swing). */
|
|
20
|
+
children?: ReactNode;
|
|
21
|
+
/**
|
|
22
|
+
* The pendants swing on a spring about their bail as the body moves, then
|
|
23
|
+
* settle: `true` (default) for the gentle default, `SpringSwingOptions`, or
|
|
24
|
+
* `false` (rigid). They hang along the torso's own down.
|
|
25
|
+
*/
|
|
26
|
+
swing?: boolean | SpringSwingOptions;
|
|
27
|
+
/** Name parts of the nodes that swing. Default `NECKLACE_SWING_NODES`. */
|
|
28
|
+
swingNodes?: readonly string[];
|
|
29
|
+
/** Hide the chain behind the neck and shoulders (a `ShoulderOccluder`). Default true. */
|
|
30
|
+
occluder?: boolean;
|
|
31
|
+
/** The occluder's mesh (`ShoulderOccluder` `url`); default the SDK's CDN copy. */
|
|
32
|
+
occluderUrl?: string;
|
|
33
|
+
/** Nudge on top of the fit, in torso centimetres. */
|
|
34
|
+
offset?: CanonicalOffset;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* A necklace on a tracked body: the chain sits on the neck base and upper
|
|
38
|
+
* chest (the canonical torso fit), its pendants swing, and the shoulder
|
|
39
|
+
* occluder hides the chain behind the neck. Inside a `BodyTracker` it uses
|
|
40
|
+
* that body; anywhere else it tracks the body itself (`bodyIndex`). Hidden
|
|
41
|
+
* while the body is lost. Under a `HeadOccluder` (a `HeadBinding`) the chin
|
|
42
|
+
* hides the chain behind it too.
|
|
43
|
+
*/
|
|
44
|
+
export declare const Necklace: ({ model, children, swing, swingNodes, occluder, occluderUrl, offset, bodyIndex, ...fit }: NecklaceProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { NECKLACE_SWING_DEFAULTS, NECKLACE_SWING_NODES, Necklace, type NecklaceProps, } from './Necklace';
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Euler, Vector3 } from '@react-three/fiber';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { ParticleEmitterTarget } from '../../particles/eyes';
|
|
4
|
+
import { ParticlePreset } from '../../particles/presets';
|
|
5
|
+
import { ParticleSettings } from '../../particles/settings';
|
|
6
|
+
import { ParticleSystem } from '../../particles/system';
|
|
7
|
+
import type * as THREE from "three";
|
|
8
|
+
export type ParticleEmitterProps = Partial<ParticleSettings> & {
|
|
9
|
+
/** A built-in look the other settings go on top of (`PARTICLE_PRESETS`). */
|
|
10
|
+
preset?: ParticlePreset;
|
|
11
|
+
/**
|
|
12
|
+
* Emit from the person's own left eye, right eye, or both (two emitters),
|
|
13
|
+
* straight out of the face. `position`, `rotation` and `scale` then apply
|
|
14
|
+
* about the eye, in the head's centimetres. Inside a `FaceTracker` it
|
|
15
|
+
* follows that tracker's face; anywhere else it tracks the face itself.
|
|
16
|
+
*/
|
|
17
|
+
target?: ParticleEmitterTarget;
|
|
18
|
+
/** With `target`: the face (default: the enclosing `FaceTracker`'s, else 0). */
|
|
19
|
+
faceIndex?: number;
|
|
20
|
+
/** With `target` and no enclosing `FaceTracker`: faces the face model tracks when this starts it. */
|
|
21
|
+
numFaces?: number;
|
|
22
|
+
/** New particles keep coming. False stops emitting; the particles already out live on. Default true. */
|
|
23
|
+
emitting?: boolean;
|
|
24
|
+
/** The particles' render order (they draw in the transparent pass). Default 0. */
|
|
25
|
+
renderOrder?: number;
|
|
26
|
+
/** The emitter's place in its parent (its +Z is forward). */
|
|
27
|
+
position?: Vector3;
|
|
28
|
+
rotation?: Euler;
|
|
29
|
+
scale?: Vector3;
|
|
30
|
+
/** Called with each emitter's `ParticleSystem` when it is made, and with null when it goes. */
|
|
31
|
+
onSystem?: (system: ParticleSystem | null) => void;
|
|
32
|
+
children?: ReactNode;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Emits particles from where it is: put it anywhere in the scene, inside a
|
|
36
|
+
* tracker to follow a face or a hand, or give it a `target` (the eyes).
|
|
37
|
+
* Particles are drawn in world space and keep their own path once out; they
|
|
38
|
+
* live on when the emitter stops or its tracker hides (it emits only while
|
|
39
|
+
* shown). Settings are props (any subset of `ParticleSettings`, over a
|
|
40
|
+
* `preset`), in the emitter's units: inside a head frame (and with
|
|
41
|
+
* `target`), centimetres. The ref is the emitter's group (with two eyes, the
|
|
42
|
+
* person's left one).
|
|
43
|
+
*/
|
|
44
|
+
export declare const ParticleEmitter: import('react').ForwardRefExoticComponent<Partial<ParticleSettings> & {
|
|
45
|
+
/** A built-in look the other settings go on top of (`PARTICLE_PRESETS`). */
|
|
46
|
+
preset?: ParticlePreset;
|
|
47
|
+
/**
|
|
48
|
+
* Emit from the person's own left eye, right eye, or both (two emitters),
|
|
49
|
+
* straight out of the face. `position`, `rotation` and `scale` then apply
|
|
50
|
+
* about the eye, in the head's centimetres. Inside a `FaceTracker` it
|
|
51
|
+
* follows that tracker's face; anywhere else it tracks the face itself.
|
|
52
|
+
*/
|
|
53
|
+
target?: ParticleEmitterTarget;
|
|
54
|
+
/** With `target`: the face (default: the enclosing `FaceTracker`'s, else 0). */
|
|
55
|
+
faceIndex?: number;
|
|
56
|
+
/** With `target` and no enclosing `FaceTracker`: faces the face model tracks when this starts it. */
|
|
57
|
+
numFaces?: number;
|
|
58
|
+
/** New particles keep coming. False stops emitting; the particles already out live on. Default true. */
|
|
59
|
+
emitting?: boolean;
|
|
60
|
+
/** The particles' render order (they draw in the transparent pass). Default 0. */
|
|
61
|
+
renderOrder?: number;
|
|
62
|
+
/** The emitter's place in its parent (its +Z is forward). */
|
|
63
|
+
position?: Vector3;
|
|
64
|
+
rotation?: Euler;
|
|
65
|
+
scale?: Vector3;
|
|
66
|
+
/** Called with each emitter's `ParticleSystem` when it is made, and with null when it goes. */
|
|
67
|
+
onSystem?: (system: ParticleSystem | null) => void;
|
|
68
|
+
children?: ReactNode;
|
|
69
|
+
} & import('react').RefAttributes<THREE.Group<THREE.Object3DEventMap>>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ParticleEmitter, type ParticleEmitterProps } from './ParticleEmitter';
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
import { CanonicalOffset } from '../HeadOccluder/useLandmarkPoseFit';
|
|
3
|
+
import { CanonicalTorsoFitOptions } from './useCanonicalTorsoFit';
|
|
4
|
+
export { CANONICAL_TORSO_FIT_DEFAULT_SMOOTHING, useCanonicalTorsoFit, } from './useCanonicalTorsoFit';
|
|
5
|
+
export type { CanonicalTorsoFitOptions } from './useCanonicalTorsoFit';
|
|
6
|
+
/** The canonical-frame shoulder / upper-torso mesh. */
|
|
7
|
+
export declare const SHOULDER_OCCLUDER_V1_PATH = "/assets/xr/3d-models/shoulder-occluder-v1.glb";
|
|
8
|
+
export declare const SHOULDER_OCCLUDER_DEFAULT_OPACITY = 1;
|
|
9
|
+
export declare const shoulderOccluderUrl: () => string;
|
|
10
|
+
export type ShoulderOccluderProps = {
|
|
11
|
+
/** Which tracked body feeds the fit. Matches the parent `BodyTracker`'s `bodyIndex`. */
|
|
12
|
+
bodyIndex?: number;
|
|
13
|
+
/** Adjustments on top of the fit, in torso centimetres. */
|
|
14
|
+
offset?: CanonicalOffset;
|
|
15
|
+
/** Override the mesh. The fit expects a torso-frame mesh. */
|
|
16
|
+
url?: string;
|
|
17
|
+
/** Draw the mesh visibly (calibration). Production keeps it depth-only. */
|
|
18
|
+
showDebugMaterial?: boolean;
|
|
19
|
+
opacity?: number;
|
|
20
|
+
/** Per-frame EMA factor for the fitted pose, `1` = no smoothing. */
|
|
21
|
+
smoothing?: number;
|
|
22
|
+
onFit?: CanonicalTorsoFitOptions["onFit"];
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Depth-only shoulder and upper-torso mesh under a `BodyTracker`, so
|
|
26
|
+
* accessories around the neck and shoulders (necklaces, scarves, straps,
|
|
27
|
+
* wings, capes) pass behind the body. Same contract as `HeadOccluder`:
|
|
28
|
+
* `colorWrite: false`, `depthWrite: true`, `renderOrder: -1`,
|
|
29
|
+
* `frustumCulled: false`, fitted every frame from the two shoulder
|
|
30
|
+
* landmarks only (selfie mode; nothing below them is read). Mount it beside a `HeadBinding` / `HeadOccluder` for a full
|
|
31
|
+
* head-and-shoulders occluder; the two necks overlap on purpose.
|
|
32
|
+
*/
|
|
33
|
+
export declare const ShoulderOccluder: ({ bodyIndex, offset, url, showDebugMaterial, opacity, smoothing, onFit, }: ShoulderOccluderProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
34
|
+
export type CanonicalTorsoFrameProps = PropsWithChildren<CanonicalTorsoFitOptions>;
|
|
35
|
+
/**
|
|
36
|
+
* A group, inside a `BodyTracker`, whose children are authored in torso
|
|
37
|
+
* centimetres: origin between the shoulder joints, +X screen right (the
|
|
38
|
+
* person's right in the mirrored selfie view), +Y up, +Z toward the camera;
|
|
39
|
+
* shoulders at `x = ±18`. Fitted with
|
|
40
|
+
* the same solver as `ShoulderOccluder`, so a necklace placed here sits where
|
|
41
|
+
* the occluder expects it.
|
|
42
|
+
*/
|
|
43
|
+
export declare const CanonicalTorsoFrame: ({ children, ...options }: CanonicalTorsoFrameProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { MutableRefObject } from 'react';
|
|
2
|
+
import { CanonicalOffset, LandmarkPoseFit } from '../HeadOccluder/useLandmarkPoseFit';
|
|
3
|
+
import * as THREE from "three";
|
|
4
|
+
export type CanonicalTorsoFitOptions = {
|
|
5
|
+
/** Which tracked body feeds the fit. Matches the parent `BodyTracker`'s `bodyIndex`. */
|
|
6
|
+
bodyIndex?: number;
|
|
7
|
+
offset?: CanonicalOffset;
|
|
8
|
+
/** Per-frame EMA factor for the fitted pose, `1` = no smoothing. */
|
|
9
|
+
smoothing?: number;
|
|
10
|
+
enabled?: boolean;
|
|
11
|
+
onFit?: (fit: LandmarkPoseFit) => void;
|
|
12
|
+
/** Fires once on body found (`true`) and once on body lost (`false`). */
|
|
13
|
+
onTrackingChange?: (tracked: boolean) => void;
|
|
14
|
+
};
|
|
15
|
+
export declare const CANONICAL_TORSO_FIT_DEFAULT_SMOOTHING = 0.5;
|
|
16
|
+
/**
|
|
17
|
+
* Drives `target` (a child of a `BodyTracker` group) with the canonical torso
|
|
18
|
+
* pose from the two shoulder joints: scale from their distance, roll from the
|
|
19
|
+
* line between them, yaw from their depth difference, no pitch. Nothing below
|
|
20
|
+
* the shoulders is read (selfie mode: the hips are out of frame and their
|
|
21
|
+
* predicted positions inflated the torso at close range). Written as a local
|
|
22
|
+
* transform re-expressed in the parent's frame, like the head fit.
|
|
23
|
+
*/
|
|
24
|
+
export declare const useCanonicalTorsoFit: (target: MutableRefObject<THREE.Object3D | null>, { bodyIndex, offset, smoothing, enabled, onFit, onTrackingChange, }?: CanonicalTorsoFitOptions) => void;
|