@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,36 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { TouchBodyOptions, TouchEvent, TouchHandId } from '../../hand/handTouch';
|
|
3
|
+
import * as THREE from "three";
|
|
4
|
+
/** What a `Touchable`'s look can react to. */
|
|
5
|
+
export type TouchableState = {
|
|
6
|
+
hovered: boolean;
|
|
7
|
+
grabbed: boolean;
|
|
8
|
+
/** The hand hovering or holding it. */
|
|
9
|
+
hand: TouchHandId | null;
|
|
10
|
+
};
|
|
11
|
+
type EventOf<T extends TouchEvent["type"]> = Extract<TouchEvent, {
|
|
12
|
+
type: T;
|
|
13
|
+
}>;
|
|
14
|
+
export type TouchableProps = TouchBodyOptions & {
|
|
15
|
+
/** The built-in look's colour (when there are no children). Default `"#f97316"`. */
|
|
16
|
+
color?: THREE.ColorRepresentation;
|
|
17
|
+
onGrab?: (event: EventOf<"grab">) => void;
|
|
18
|
+
/** Let go: `speed` is how fast it was thrown. */
|
|
19
|
+
onRelease?: (event: EventOf<"release">) => void;
|
|
20
|
+
/** The index tip touched it and left quickly. */
|
|
21
|
+
onTap?: (event: EventOf<"tap">) => void;
|
|
22
|
+
/** A hand part started touching it (`part`, `speed`): for sounds. */
|
|
23
|
+
onTouch?: (event: EventOf<"touch">) => void;
|
|
24
|
+
onHoverChange?: (hovered: boolean, hand: TouchHandId) => void;
|
|
25
|
+
/** The look, centred on the object (scene units); a function gets its state. Default a ball or a cube. */
|
|
26
|
+
children?: ReactNode | ((state: TouchableState) => ReactNode);
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* An object the hands can touch, inside a `HandTouch`: a ball (`shape:
|
|
30
|
+
* "sphere"`) or a cube (`"box"`, `size` = edge), `size` in scene units.
|
|
31
|
+
* `position` and `velocity` are where it starts; after that the world moves
|
|
32
|
+
* it. With no children it draws a ball or a cube in `color` that glows while
|
|
33
|
+
* hovered or held.
|
|
34
|
+
*/
|
|
35
|
+
export declare const Touchable: ({ shape, size, position, velocity, mass, bounce, grabbable, pushable, gravity, color, onGrab, onRelease, onTap, onTouch, onHoverChange, children, }: TouchableProps) => import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
export {};
|
|
@@ -1,12 +1,26 @@
|
|
|
1
1
|
import { PropsWithChildren } from 'react';
|
|
2
|
+
import { HeadOccluderFit, HeadOccluderOffset, HeadOccluderProps } from '../HeadOccluder';
|
|
2
3
|
import * as THREE from "three";
|
|
3
4
|
export type HeadBindingOccluderOptions = {
|
|
5
|
+
/**
|
|
6
|
+
* `"canonical"` (default): the v3 canonical-frame head, fitted from the live
|
|
7
|
+
* landmarks every frame — no tuning. `"manual"`: the legacy sculpted shell
|
|
8
|
+
* placed with `position` / `rotation` / `scale`.
|
|
9
|
+
*/
|
|
10
|
+
fit?: HeadOccluderFit;
|
|
11
|
+
/** Canonical-fit adjustments, in canonical centimetres. */
|
|
12
|
+
offset?: HeadOccluderOffset;
|
|
13
|
+
/** Manual-fit transform (ignored by the canonical fit). */
|
|
4
14
|
position?: [number, number, number];
|
|
5
15
|
rotation?: [number, number, number];
|
|
6
16
|
scale?: [number, number, number];
|
|
7
17
|
url?: string;
|
|
8
18
|
showDebugMaterial?: boolean;
|
|
9
19
|
opacity?: number;
|
|
20
|
+
/** Per-frame EMA factor for the fitted pose (rotation, position and scale); `1` = none. */
|
|
21
|
+
smoothing?: number;
|
|
22
|
+
/** Neck and shoulders too: `true` / `"bust"`, or options (`follow: "head" | "torso"`). See `HeadOccluder`'s `neck`. */
|
|
23
|
+
neck?: HeadOccluderProps["neck"];
|
|
10
24
|
};
|
|
11
25
|
export type HeadBindingProps = PropsWithChildren & {
|
|
12
26
|
/** Face index from the shared face-tracking result to bind this subtree to. */
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
import { CanonicalHeadFitOptions } from './useCanonicalHeadFit';
|
|
3
|
+
export type CanonicalHeadFrameProps = PropsWithChildren<CanonicalHeadFitOptions>;
|
|
4
|
+
/**
|
|
5
|
+
* Set by `CanonicalHeadFrame` for its subtree: a `HeadAttachment` inside one is
|
|
6
|
+
* a plain offset group in the already-fitted frame (one fit, many points)
|
|
7
|
+
* instead of running a fit of its own.
|
|
8
|
+
*/
|
|
9
|
+
export declare const CanonicalHeadFrameContext: import('react').Context<boolean>;
|
|
10
|
+
/**
|
|
11
|
+
* A group, inside a `FaceTracker`, whose children are authored in canonical
|
|
12
|
+
* centimetres: +X toward the screen's right on a face looking at the camera
|
|
13
|
+
* (the person's own right in the mirrored selfie view), +Y up, +Z out of the
|
|
14
|
+
* face toward the camera, origin at the canonical face model's origin
|
|
15
|
+
* (landmark 4 is at `(0, -0.46, 7.59)`, the nose bridge at `z ≈ 5.8`, the ears
|
|
16
|
+
* at `x ≈ ±8.8`; see `HEAD_ATTACHMENT_POINTS`). It is fitted with the same
|
|
17
|
+
* solver as the canonical `HeadOccluder`, so an accessory placed here sits
|
|
18
|
+
* exactly where the occluder expects it, in centimetres a modeller can measure
|
|
19
|
+
* against the shipped `.blend`. Hidden while the face is lost; snaps on
|
|
20
|
+
* reacquire.
|
|
21
|
+
*/
|
|
22
|
+
export declare const CanonicalHeadFrame: ({ children, ...options }: CanonicalHeadFrameProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { SpringSwingOptions } from '../../spring/swing';
|
|
3
|
+
import { EarringSide } from './earringPlacement';
|
|
4
|
+
import { CanonicalHeadFitOptions } from './useCanonicalHeadFit';
|
|
5
|
+
import { CanonicalOffset } from './useLandmarkPoseFit';
|
|
6
|
+
import type * as THREE from "three";
|
|
7
|
+
export type EarringsProps = Omit<CanonicalHeadFitOptions, "offset"> & {
|
|
8
|
+
/**
|
|
9
|
+
* The earring, authored once in the ear frame: centimetres, origin on the
|
|
10
|
+
* piercing, +X away from the head, +Y up, +Z out of the face (as for the
|
|
11
|
+
* ear at canonical +X, `HEAD_ATTACHMENT_POINTS.leftEarLobe`). Cloned once
|
|
12
|
+
* per ear, so pass a loaded GLB's scene (or one of its nodes) as it is.
|
|
13
|
+
*/
|
|
14
|
+
model?: THREE.Object3D | null;
|
|
15
|
+
/**
|
|
16
|
+
* JSX instead of (or as well as) `model`, authored the same way. It mounts
|
|
17
|
+
* once per ear, so it must build its own objects (`<mesh>`, drei `<Clone>`),
|
|
18
|
+
* never one shared `<primitive object>`. A function receives the person's
|
|
19
|
+
* side, for a mismatched pair; both are still authored in the ear frame.
|
|
20
|
+
*/
|
|
21
|
+
children?: ReactNode | ((side: EarringSide) => ReactNode);
|
|
22
|
+
/** Wear one on the person's own left ear. Default `true`. */
|
|
23
|
+
left?: boolean;
|
|
24
|
+
/** Wear one on the person's own right ear. Default `true`. */
|
|
25
|
+
right?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Nudge on top of the lobe, in the ear frame (mirrored with the earring on
|
|
28
|
+
* the screen-left ear): `position` in centimetres, `rotation` in radians,
|
|
29
|
+
* `scale` as a multiplier, all about the piercing.
|
|
30
|
+
*/
|
|
31
|
+
offset?: CanonicalOffset;
|
|
32
|
+
/**
|
|
33
|
+
* Whether the feed is mirrored. Defaults to the session's (`useXRMirrored`:
|
|
34
|
+
* the front webcam is), which is what keeps `left` on the person's own left
|
|
35
|
+
* ear.
|
|
36
|
+
*/
|
|
37
|
+
mirrored?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Swing on a spring about the piercing as the head moves (drops, hoops),
|
|
40
|
+
* then settle: `true` for the gentle default, or `SpringSwingOptions`
|
|
41
|
+
* (`frequency`, `damping`, `maxAngle`, `length` in cm). Each ear swings on
|
|
42
|
+
* its own. Default off (rigid).
|
|
43
|
+
*/
|
|
44
|
+
swing?: boolean | SpringSwingOptions;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* A pair of earrings on a tracked head: one earring, authored once in the ear
|
|
48
|
+
* frame, worn on both ear lobes (the one on the screen's left mirrored). `left`
|
|
49
|
+
* / `right` are the person's own ears on every feed. Place it inside a
|
|
50
|
+
* `HeadBinding` (or a `FaceTracker` with a `HeadOccluder`) so the head hides
|
|
51
|
+
* the far earring as the head turns. Inside a `CanonicalHeadFrame` it reuses
|
|
52
|
+
* the frame's fit; on its own it runs one fit for both ears. Hidden while the
|
|
53
|
+
* face is lost, snapped on reacquire.
|
|
54
|
+
*/
|
|
55
|
+
export declare const Earrings: ({ model, children, left, right, offset, mirrored, swing, ...fitOptions }: EarringsProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
import { HeadAttachmentPoint } from './headAttachmentPoints';
|
|
3
|
+
import { CanonicalHeadFitOptions } from './useCanonicalHeadFit';
|
|
4
|
+
import { CanonicalOffset } from './useLandmarkPoseFit';
|
|
5
|
+
export type HeadAttachmentProps = PropsWithChildren<Omit<CanonicalHeadFitOptions, "offset"> & {
|
|
6
|
+
/**
|
|
7
|
+
* Where on the head the children's origin sits. `leftEar` / `rightEar` /
|
|
8
|
+
* `leftEarLobe` / `rightEarLobe` are the person's own ears on every feed.
|
|
9
|
+
*/
|
|
10
|
+
point: HeadAttachmentPoint;
|
|
11
|
+
/**
|
|
12
|
+
* Authored adjustment ON TOP of the point: `position` in canonical
|
|
13
|
+
* centimetres (head axes, relative to the point; for an ear point in the
|
|
14
|
+
* ear frame, +X away from the head), `rotation` in radians and `scale` as
|
|
15
|
+
* a multiplier, both about the point.
|
|
16
|
+
*/
|
|
17
|
+
offset?: CanonicalOffset;
|
|
18
|
+
/**
|
|
19
|
+
* Whether the feed is mirrored. Defaults to the session's (`useXRMirrored`:
|
|
20
|
+
* the front webcam is), which is what keeps `leftEar` on the person's own
|
|
21
|
+
* left ear.
|
|
22
|
+
*/
|
|
23
|
+
mirrored?: boolean;
|
|
24
|
+
}>;
|
|
25
|
+
/**
|
|
26
|
+
* Attaches its children to a named point on a tracked head — glasses on
|
|
27
|
+
* `noseBridge`, a hat on `crown`, headphones on the ears — with the children
|
|
28
|
+
* authored in canonical centimetres around that point, facing +Z (out of the
|
|
29
|
+
* face). Ear points are the person's own ears and their children are authored
|
|
30
|
+
* in the ear frame (+X away from the head); the ear on the screen's left gets
|
|
31
|
+
* them mirrored. For a pair of earrings use `Earrings`. Place it inside a
|
|
32
|
+
* `FaceTracker` / `HeadBinding`; it follows that tracker's face. Inside a
|
|
33
|
+
* `CanonicalHeadFrame` it reuses the frame's fit (and its smoothing and
|
|
34
|
+
* tracking events); on its own it runs the same canonical fit as the head
|
|
35
|
+
* occluder. Hidden while the face is lost, snapped on reacquire, so nothing is
|
|
36
|
+
* left behind or slides in.
|
|
37
|
+
*/
|
|
38
|
+
export declare const HeadAttachment: ({ point, offset, mirrored, children, ...fitOptions }: HeadAttachmentProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { CanonicalOffset } from './useLandmarkPoseFit';
|
|
2
|
+
import * as THREE from "three";
|
|
3
|
+
/**
|
|
4
|
+
* Neck and shoulder occluders that go with the head occluder (`neck` on
|
|
5
|
+
* `HeadOccluder` / `HeadBinding`'s `occluder`). `"bust"`: the skinned bust
|
|
6
|
+
* of "Complete 3D Reference - Spark AR" by jepharaujo (CC BY 4.0), in the
|
|
7
|
+
* canonical head frame, its neck a three-bone chain.
|
|
8
|
+
*/
|
|
9
|
+
export declare const NECK_OCCLUDER_TYPES: readonly ["bust"];
|
|
10
|
+
export type NeckOccluderType = (typeof NECK_OCCLUDER_TYPES)[number];
|
|
11
|
+
/**
|
|
12
|
+
* What moves it: `"head"` (the head fit, no body tracking: the top of the
|
|
13
|
+
* neck follows the head, the shoulders stay level below it) or `"torso"`
|
|
14
|
+
* (the torso fit from body tracking: the shoulders follow the real ones).
|
|
15
|
+
*/
|
|
16
|
+
export declare const NECK_OCCLUDER_FOLLOWS: readonly ["head", "torso"];
|
|
17
|
+
export type NeckOccluderFollow = (typeof NECK_OCCLUDER_FOLLOWS)[number];
|
|
18
|
+
export declare const NECK_OCCLUDER_BUST_PATH = "/assets/xr/3d-models/neck-occluder-bust-v1.glb";
|
|
19
|
+
/** The SDK CDN copy of a neck occluder type's mesh (only `"bust"` so far). */
|
|
20
|
+
export declare const neckOccluderUrl: (type?: NeckOccluderType) => string;
|
|
21
|
+
/**
|
|
22
|
+
* Where the bust sits in the torso frame (`follow: "torso"`), torso cm: its
|
|
23
|
+
* neck base (head cm `(0, -11.86, -5.45)`) on the torso's neck stub, 3 cm
|
|
24
|
+
* lower than the stub's top so the neck stays under the chin (the live torso
|
|
25
|
+
* fit sits a little high).
|
|
26
|
+
*/
|
|
27
|
+
export declare const NECK_BUST_TORSO_POSITION: readonly [number, number, number];
|
|
28
|
+
/** With `follow: "head"`: how much of the head's turn (yaw) the shoulders take. */
|
|
29
|
+
export declare const NECK_OCCLUDER_SHOULDER_TURN = 0.25;
|
|
30
|
+
export type NeckOccluderOptions = {
|
|
31
|
+
/** The mesh. Default `"bust"`. */
|
|
32
|
+
type?: NeckOccluderType;
|
|
33
|
+
/** What moves it. Default `"head"`. */
|
|
34
|
+
follow?: NeckOccluderFollow;
|
|
35
|
+
/** With `"head"`: 0..1, how much of the head's turn the shoulders take. Default 0.25. */
|
|
36
|
+
shoulderTurn?: number;
|
|
37
|
+
/** Override the mesh (a bust in the canonical head frame with neck_top / neck_mid / neck_base bones). */
|
|
38
|
+
url?: string;
|
|
39
|
+
/** A nudge: head cm with `"head"`, torso cm with `"torso"`. */
|
|
40
|
+
offset?: CanonicalOffset;
|
|
41
|
+
/** With `"torso"`: the tracked body. Default 0. */
|
|
42
|
+
bodyIndex?: number;
|
|
43
|
+
/** Draw it visibly (calibration). */
|
|
44
|
+
showDebugMaterial?: boolean;
|
|
45
|
+
opacity?: number;
|
|
46
|
+
};
|
|
47
|
+
export type NeckOccluderProps = NeckOccluderOptions & {
|
|
48
|
+
/** With `"head"`: the face (default the parent `FaceTracker`'s). */
|
|
49
|
+
faceIndex?: number;
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* With `follow: "head"`: the neck's middle and base bones each turn half of
|
|
53
|
+
* what keeps the shoulders level, facing the camera and turned by
|
|
54
|
+
* `shoulderTurn` of the head's yaw; the top bone follows the head. Writes
|
|
55
|
+
* into `out` (the bones' rotation on top of their rest).
|
|
56
|
+
*/
|
|
57
|
+
export declare const neckBoneTwist: (headWorld: THREE.Quaternion, cameraWorld: THREE.Quaternion, shoulderTurn: number, out: THREE.Quaternion) => THREE.Quaternion;
|
|
58
|
+
/**
|
|
59
|
+
* The neck and shoulders as a depth-only occluder: the head hides what passes
|
|
60
|
+
* behind the neck and shoulders too (necklace backs, hair, collars). Mounted
|
|
61
|
+
* by `HeadOccluder`'s `neck`; on its own inside a `FaceTracker` (head) or
|
|
62
|
+
* anywhere (torso: it tracks the body itself unless in a `BodyTracker`).
|
|
63
|
+
*/
|
|
64
|
+
export declare const NeckOccluder: ({ type, follow, shoulderTurn, url, offset, bodyIndex, faceIndex, showDebugMaterial, opacity, }: NeckOccluderProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { CanonicalOffset } from './useLandmarkPoseFit';
|
|
2
|
+
import * as THREE from "three";
|
|
3
|
+
/** The person's own ear, as `leftEarLobe` / `rightEarLobe` name it (#298). */
|
|
4
|
+
export type EarringSide = "left" | "right";
|
|
5
|
+
/** Draw order of an earring's opaque meshes: after the head occluder (-1) and the face effects. */
|
|
6
|
+
export declare const EARRING_RENDER_ORDER = 5;
|
|
7
|
+
/** Transparent earring parts draw after the opaque ones. */
|
|
8
|
+
export declare const EARRING_TRANSPARENT_RENDER_ORDER = 6;
|
|
9
|
+
export type EarringPlacement = {
|
|
10
|
+
position: [number, number, number];
|
|
11
|
+
rotation: [number, number, number];
|
|
12
|
+
scale: [number, number, number];
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Where the earring for the person's own `side` ear sits in the canonical head
|
|
16
|
+
* frame on this feed (`mirrored`: the front webcam; default unmirrored): on
|
|
17
|
+
* that ear's lobe, with the authored `offset` on top. Earrings are authored
|
|
18
|
+
* in the ear frame (+X away from the head, the ear at canonical +X); the one on
|
|
19
|
+
* the screen's left (canonical −X) is that mirrored across the head's
|
|
20
|
+
* mid-plane (x → −x): the position's x and the rotation's y / z flip, and the
|
|
21
|
+
* scale's x is negative, so an earring turned out and forward on one ear is
|
|
22
|
+
* turned out and forward on the other too.
|
|
23
|
+
*/
|
|
24
|
+
export declare const earringPlacement: (side: EarringSide, offset?: CanonicalOffset, mirrored?: boolean) => EarringPlacement;
|
|
25
|
+
/**
|
|
26
|
+
* One ear's copy of an earring model: a deep clone that shares geometry and
|
|
27
|
+
* materials, never frustum-culled (the fitted head moves every frame), its
|
|
28
|
+
* meshes drawn after the occluder (`EARRING_RENDER_ORDER`, transparent parts
|
|
29
|
+
* one later) unless they already carry a render order.
|
|
30
|
+
*/
|
|
31
|
+
export declare const cloneEarringModel: (model: THREE.Object3D) => THREE.Object3D;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { CanonicalOffset } from './useLandmarkPoseFit';
|
|
2
|
+
import * as THREE from "three";
|
|
3
|
+
/**
|
|
4
|
+
* Named places on the head to attach an accessory to. Each is a fixed point in
|
|
5
|
+
* the canonical head frame (`CanonicalHeadFrame`): centimetres, +X toward the
|
|
6
|
+
* screen's right on a face looking at the camera, +Y up, +Z out of the face
|
|
7
|
+
* toward the camera.
|
|
8
|
+
*
|
|
9
|
+
* `leftEar` / `rightEar` (and the lobes) are the person's OWN ears on every
|
|
10
|
+
* feed (#298). The canonical +X ear is MediaPipe's left (landmark 454's side):
|
|
11
|
+
* the person's left ear on an unmirrored feed (rear camera, image, video) and
|
|
12
|
+
* their right ear on the mirrored front webcam, so the table below is given as
|
|
13
|
+
* on an unmirrored feed and `resolveHeadAttachmentPoint` swaps the sided points
|
|
14
|
+
* on a mirrored one.
|
|
15
|
+
*/
|
|
16
|
+
export type HeadAttachmentPoint = "headCenter" | "crown" | "forehead" | "noseBridge" | "noseTip" | "chin" | "leftEar" | "rightEar" | "leftEarLobe" | "rightEarLobe";
|
|
17
|
+
/**
|
|
18
|
+
* Canonical centimetres for each `HeadAttachmentPoint`. Face points are the
|
|
19
|
+
* canonical MediaPipe landmarks (the first 468 vertices of the v3 head
|
|
20
|
+
* occluder): `forehead` = 151, `noseBridge` = 6 (the nose ridge where a
|
|
21
|
+
* glasses bridge rests, between the eyes), `noseTip` = 1, `chin` = 152. The
|
|
22
|
+
* skull points are measured on the v3 occluder (`assets-src/head-occluder/
|
|
23
|
+
* head-occluder-v3.blend`): `headCenter` is the skull's centre, `crown` its
|
|
24
|
+
* top, and the ears are the centres of its ear volumes. The ear lobes are the
|
|
25
|
+
* piercing: on the outside of each ear volume, 0.8 cm above its lowest point and
|
|
26
|
+
* a quarter centimetre ahead of its centre, 2 mm clear of its surface, so an
|
|
27
|
+
* earring authored outward from it (+X, away from the head) is never cut by the
|
|
28
|
+
* occluder (`assets-src/accessories/build_earrings.py` checks it).
|
|
29
|
+
*
|
|
30
|
+
* Sided points are given as on an UNMIRRORED feed: the person's left ear at
|
|
31
|
+
* canonical +X (MediaPipe's left). Use `resolveHeadAttachmentPoint(point,
|
|
32
|
+
* mirrored)` for the person's own ear on a given feed.
|
|
33
|
+
*/
|
|
34
|
+
export declare const HEAD_ATTACHMENT_POINTS: Readonly<Record<HeadAttachmentPoint, readonly [number, number, number]>>;
|
|
35
|
+
export declare const HEAD_ATTACHMENT_POINT_NAMES: readonly HeadAttachmentPoint[];
|
|
36
|
+
/** A point resolved for one feed (see `resolveHeadAttachmentPoint`). */
|
|
37
|
+
export type ResolvedHeadAttachmentPoint = {
|
|
38
|
+
/** Canonical centimetres of the person's own point on this feed. */
|
|
39
|
+
position: readonly [number, number, number];
|
|
40
|
+
/**
|
|
41
|
+
* `true` for an ear point on the screen's left (canonical −X): its children
|
|
42
|
+
* are mirrored (x → −x) so that +X still points away from the head.
|
|
43
|
+
*/
|
|
44
|
+
mirror: boolean;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Where `point` is for the person on this feed. `mirrored` is the feed's
|
|
48
|
+
* mirror state (`useXRMirrored()`; the front webcam is mirrored): there the
|
|
49
|
+
* person's left ear is at canonical −X, on an unmirrored feed at +X.
|
|
50
|
+
* Centre points do not depend on the feed.
|
|
51
|
+
*/
|
|
52
|
+
export declare const resolveHeadAttachmentPoint: (point: HeadAttachmentPoint, mirrored?: boolean) => ResolvedHeadAttachmentPoint;
|
|
53
|
+
/**
|
|
54
|
+
* Writes the canonical position (centimetres) of the person's own `point` on
|
|
55
|
+
* this feed into `out` (`mirrored`: see `resolveHeadAttachmentPoint`; default
|
|
56
|
+
* an unmirrored feed, i.e. the table as given).
|
|
57
|
+
*/
|
|
58
|
+
export declare const getHeadAttachmentPoint: (point: HeadAttachmentPoint, out?: THREE.Vector3, mirrored?: boolean) => THREE.Vector3;
|
|
59
|
+
/**
|
|
60
|
+
* The fit offset that puts a fitted frame's origin on the person's own
|
|
61
|
+
* `point` for this feed, moved by the authored `offset.position` (canonical
|
|
62
|
+
* centimetres, in the head's axes; for an ear point in the ear frame, +X away
|
|
63
|
+
* from the head) and turned by `offset.rotation` about the point. On a
|
|
64
|
+
* mirrored ear (`mirror`) the offset is mirrored with it: x and the Y / Z
|
|
65
|
+
* rotations negate. `offset.scale` is left out: the fit scales its offset
|
|
66
|
+
* position too, so a scale here would slide the point — `HeadAttachment`
|
|
67
|
+
* applies it (and the ear mirror) on an inner group instead.
|
|
68
|
+
*/
|
|
69
|
+
export declare const resolveHeadAttachmentOffset: (point: HeadAttachmentPoint, offset?: CanonicalOffset, mirrored?: boolean) => CanonicalOffset;
|
|
@@ -1,13 +1,67 @@
|
|
|
1
|
-
|
|
1
|
+
import { CanonicalHeadFitOptions, CanonicalHeadOffset } from './useCanonicalHeadFit';
|
|
2
|
+
import { NeckOccluderOptions, NeckOccluderType } from './NeckOccluder';
|
|
3
|
+
export { CanonicalHeadFrame } from './CanonicalHeadFrame';
|
|
4
|
+
export { HeadAttachment } from './HeadAttachment';
|
|
5
|
+
export type { HeadAttachmentProps } from './HeadAttachment';
|
|
6
|
+
export { Earrings } from './Earrings';
|
|
7
|
+
export { NECK_BUST_TORSO_POSITION, NECK_OCCLUDER_BUST_PATH, NECK_OCCLUDER_FOLLOWS, NECK_OCCLUDER_SHOULDER_TURN, NECK_OCCLUDER_TYPES, NeckOccluder, neckBoneTwist, neckOccluderUrl, } from './NeckOccluder';
|
|
8
|
+
export type { NeckOccluderFollow, NeckOccluderOptions, NeckOccluderProps, NeckOccluderType, } from './NeckOccluder';
|
|
9
|
+
export type { EarringsProps } from './Earrings';
|
|
10
|
+
export type { EarringSide } from './earringPlacement';
|
|
11
|
+
export { HEAD_ATTACHMENT_POINTS, HEAD_ATTACHMENT_POINT_NAMES, getHeadAttachmentPoint, resolveHeadAttachmentPoint, } from './headAttachmentPoints';
|
|
12
|
+
export type { HeadAttachmentPoint, ResolvedHeadAttachmentPoint } from './headAttachmentPoints';
|
|
13
|
+
export type { CanonicalHeadFrameProps } from './CanonicalHeadFrame';
|
|
14
|
+
export { CANONICAL_HEAD_FIT_DEFAULT_SMOOTHING, useCanonicalHeadFit } from './useCanonicalHeadFit';
|
|
15
|
+
export { useLandmarkPoseFit, stepLandmarkPoseSmoothing, LANDMARK_POSE_FIT_DEFAULT_SMOOTHING, LANDMARK_POSE_FIT_SNAP_CM, } from './useLandmarkPoseFit';
|
|
16
|
+
export type { CanonicalOffset, LandmarkPoseFit, LandmarkPoseFitOptions, LandmarkPoseSmoothingState, } from './useLandmarkPoseFit';
|
|
17
|
+
export type { CanonicalHeadFitOptions, CanonicalHeadOffset } from './useCanonicalHeadFit';
|
|
18
|
+
/**
|
|
19
|
+
* How the occluder is placed inside its `FaceTracker` group.
|
|
20
|
+
*
|
|
21
|
+
* - `"canonical"` (default): the v3 head, authored in the canonical face frame,
|
|
22
|
+
* is fitted every frame to 31 rigid live landmarks — see
|
|
23
|
+
* `solveCanonicalHeadPose`. Exact for scale, rotation and position; `offset`
|
|
24
|
+
* adjusts on top of the fit in canonical centimetres.
|
|
25
|
+
* - `"manual"`: the legacy path. `position` / `rotation` / `scale` are applied
|
|
26
|
+
* verbatim inside the group, as `HeadBinding` did before v3.
|
|
27
|
+
*/
|
|
28
|
+
export type HeadOccluderFit = "canonical" | "manual";
|
|
29
|
+
export type HeadOccluderOffset = CanonicalHeadOffset;
|
|
30
|
+
export type HeadOccluderProps = {
|
|
31
|
+
fit?: HeadOccluderFit;
|
|
32
|
+
/** Which tracked face feeds the canonical fit. Defaults to the parent `FaceTracker`'s `faceIndex`. */
|
|
33
|
+
faceIndex?: number;
|
|
34
|
+
/** Canonical-fit adjustments. Ignored in `"manual"`. */
|
|
35
|
+
offset?: HeadOccluderOffset;
|
|
36
|
+
/** Manual-fit transform. Ignored in `"canonical"`. */
|
|
2
37
|
position?: [number, number, number];
|
|
3
38
|
rotation?: [number, number, number];
|
|
4
39
|
scale?: [number, number, number];
|
|
40
|
+
/** Override the mesh. The canonical fit expects a v3-frame mesh. */
|
|
5
41
|
url?: string;
|
|
42
|
+
/** Draw the mesh visibly (calibration). Production keeps it depth-only. */
|
|
6
43
|
showDebugMaterial?: boolean;
|
|
7
44
|
opacity?: number;
|
|
45
|
+
/** Per-frame EMA factor for the fitted pose, `1` = no smoothing. */
|
|
46
|
+
smoothing?: number;
|
|
47
|
+
/** Per-frame `HeadPoseFit` callback (canonical fit only); no React state at frame rate. */
|
|
48
|
+
onFit?: CanonicalHeadFitOptions["onFit"];
|
|
49
|
+
/**
|
|
50
|
+
* Add a neck and shoulders occluder: `true` or `"bust"` for the bust moved
|
|
51
|
+
* by the head fit (no body tracking), or `NeckOccluderOptions` (`follow:
|
|
52
|
+
* "torso"` moves it with body tracking instead). Default none.
|
|
53
|
+
*/
|
|
54
|
+
neck?: boolean | NeckOccluderType | NeckOccluderOptions;
|
|
8
55
|
};
|
|
9
56
|
export declare const HEAD_OCCLUDER_DEFAULT_POSITION: [number, number, number];
|
|
10
57
|
export declare const HEAD_OCCLUDER_DEFAULT_SCALE: [number, number, number];
|
|
11
58
|
export declare const HEAD_OCCLUDER_DEFAULT_OPACITY = 1;
|
|
12
|
-
export declare const
|
|
13
|
-
|
|
59
|
+
export declare const HEAD_OCCLUDER_DEFAULT_SMOOTHING = 0.5;
|
|
60
|
+
/** The legacy sculpted shell (`"manual"` fit). */
|
|
61
|
+
export declare const HEAD_OCCLUDER_V2_PATH = "/assets/xr/3d-models/head-occluder-v2.glb";
|
|
62
|
+
/** The canonical-frame head (`"canonical"` fit). */
|
|
63
|
+
export declare const HEAD_OCCLUDER_V3_PATH = "/assets/xr/3d-models/head-occluder-v3.glb";
|
|
64
|
+
/** Drawn before everything in the tracked layer so its depth is in place for the accessories. */
|
|
65
|
+
export declare const HEAD_OCCLUDER_RENDER_ORDER = -1;
|
|
66
|
+
export declare const headOccluderUrl: (fit?: HeadOccluderFit) => string;
|
|
67
|
+
export declare const HeadOccluder: ({ fit, faceIndex, offset, position: modelPosition, rotation: modelRotation, scale: modelScale, url, showDebugMaterial, opacity, smoothing, onFit, neck, }: HeadOccluderProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { MutableRefObject } from 'react';
|
|
2
|
+
import { CanonicalOffset, LandmarkPoseFit } from './useLandmarkPoseFit';
|
|
3
|
+
import * as THREE from "three";
|
|
4
|
+
export type CanonicalHeadOffset = CanonicalOffset;
|
|
5
|
+
export type CanonicalHeadFitOptions = {
|
|
6
|
+
/**
|
|
7
|
+
* Which tracked face feeds the fit. Defaults to the parent `FaceTracker`'s
|
|
8
|
+
* (or `HeadBinding`'s) `faceIndex`, so it only needs setting to read a
|
|
9
|
+
* different face than the group it sits in.
|
|
10
|
+
*/
|
|
11
|
+
faceIndex?: number;
|
|
12
|
+
offset?: CanonicalHeadOffset;
|
|
13
|
+
/** Per-frame EMA factor for the fitted pose, `1` = no smoothing. */
|
|
14
|
+
smoothing?: number;
|
|
15
|
+
/** `false` leaves the object untouched (and releases the face model). */
|
|
16
|
+
enabled?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Called every fitted frame with the raw solver result (world units) — for
|
|
19
|
+
* calibration readouts and tests. Do not set React state in it at frame rate.
|
|
20
|
+
*/
|
|
21
|
+
onFit?: (fit: LandmarkPoseFit) => void;
|
|
22
|
+
/** Fires once on face found (`true`) and once on face lost (`false`). */
|
|
23
|
+
onTrackingChange?: (tracked: boolean) => void;
|
|
24
|
+
};
|
|
25
|
+
export declare const CANONICAL_HEAD_FIT_DEFAULT_SMOOTHING = 0.5;
|
|
26
|
+
/**
|
|
27
|
+
* Drives `target` (a child of a `FaceTracker` group) with the canonical head
|
|
28
|
+
* pose every frame: the similarity that maps the canonical rigid landmarks
|
|
29
|
+
* onto the live ones in world space. Anything authored in canonical
|
|
30
|
+
* centimetres under `target` then lands on the head — the v3 occluder, or a
|
|
31
|
+
* creator's accessory. The pose is written as a LOCAL transform (world pose
|
|
32
|
+
* re-expressed in the parent group's frame), so it does not depend on where
|
|
33
|
+
* the group's own heuristic put its origin or how it scaled. Hides the object
|
|
34
|
+
* while the face is not tracked and snaps (no smoothing) on reacquire.
|
|
35
|
+
*/
|
|
36
|
+
export declare const useCanonicalHeadFit: (target: MutableRefObject<THREE.Object3D | null>, { faceIndex: faceIndexOption, offset, smoothing, enabled, onFit, onTrackingChange, }?: CanonicalHeadFitOptions) => void;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { MutableRefObject } from 'react';
|
|
2
|
+
import { SimilarityFit } from '../../utils/similarityFit';
|
|
3
|
+
import * as THREE from "three";
|
|
4
|
+
export type CanonicalOffset = {
|
|
5
|
+
/** Canonical centimetres, in the fitted frame (rotates with it). */
|
|
6
|
+
position?: [number, number, number];
|
|
7
|
+
/** Radians, applied after the fitted rotation. */
|
|
8
|
+
rotation?: [number, number, number];
|
|
9
|
+
/** Multiplier on the fitted scale (`1` = exact). */
|
|
10
|
+
scale?: number;
|
|
11
|
+
};
|
|
12
|
+
export type LandmarkPoseFit = SimilarityFit & {
|
|
13
|
+
/** World units per canonical centimetre (the fit's scale). */
|
|
14
|
+
worldUnitsPerCm: number;
|
|
15
|
+
/** Number of landmarks used. */
|
|
16
|
+
count: number;
|
|
17
|
+
};
|
|
18
|
+
export type LandmarkPoseFitOptions = {
|
|
19
|
+
/** Canonical positions, flat `[x, y, z, …]` centimetres. */
|
|
20
|
+
canonical: ArrayLike<number>;
|
|
21
|
+
/**
|
|
22
|
+
* Fills `out` (flat world coordinates, same order as `canonical`) from the
|
|
23
|
+
* live tracker and returns `true`, or returns `false` when there is nothing
|
|
24
|
+
* to fit this frame (the object is then hidden).
|
|
25
|
+
*/
|
|
26
|
+
readLive: (out: Float64Array) => boolean;
|
|
27
|
+
offset?: CanonicalOffset;
|
|
28
|
+
/** Per-frame EMA factor for the pose, `1` = no smoothing. */
|
|
29
|
+
smoothing?: number;
|
|
30
|
+
enabled?: boolean;
|
|
31
|
+
onFit?: (fit: LandmarkPoseFit) => void;
|
|
32
|
+
/**
|
|
33
|
+
* Called once when the subject is found and once when it is lost (not per
|
|
34
|
+
* frame). While lost the object is hidden; on reacquire it snaps to the new
|
|
35
|
+
* pose instead of easing in from where it was lost.
|
|
36
|
+
*/
|
|
37
|
+
onTrackingChange?: (tracked: boolean) => void;
|
|
38
|
+
/**
|
|
39
|
+
* The solver. Defaults to the Umeyama similarity over `canonical` vs the
|
|
40
|
+
* live points (≥ 3 points). A caller with fewer points supplies its own
|
|
41
|
+
* (the shoulder fit uses two).
|
|
42
|
+
*/
|
|
43
|
+
solve?: (live: Float64Array, out: LandmarkPoseFit) => LandmarkPoseFit;
|
|
44
|
+
};
|
|
45
|
+
export declare const LANDMARK_POSE_FIT_DEFAULT_SMOOTHING = 0.5;
|
|
46
|
+
/**
|
|
47
|
+
* A fitted origin that moves farther than this in one frame (canonical
|
|
48
|
+
* centimetres) snaps instead of easing: a different person took the tracked
|
|
49
|
+
* index, or the subject re-entered elsewhere. Head motion between two frames
|
|
50
|
+
* is a few centimetres; easing across a face swap would slide the accessory
|
|
51
|
+
* over the screen.
|
|
52
|
+
*/
|
|
53
|
+
export declare const LANDMARK_POSE_FIT_SNAP_CM = 20;
|
|
54
|
+
export type LandmarkPoseSmoothingState = {
|
|
55
|
+
tracked: boolean;
|
|
56
|
+
quaternion: THREE.Quaternion;
|
|
57
|
+
position: THREE.Vector3;
|
|
58
|
+
scale: number;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* One frame of the fit's smoothing: snap on (re)acquire or on a jump larger
|
|
62
|
+
* than `snapDistance`, EMA otherwise. `fit` is `null` when nothing is tracked
|
|
63
|
+
* this frame. Returns whether tracking changed this frame (found or lost) so
|
|
64
|
+
* callers can fire edge events.
|
|
65
|
+
*
|
|
66
|
+
* `snapDistance` is in the fit's SOURCE units (the canonical points it maps
|
|
67
|
+
* from): the jump is measured as world distance / `fit.scale`. The default,
|
|
68
|
+
* `LANDMARK_POSE_FIT_SNAP_CM`, suits the centimetre canonical head and torso
|
|
69
|
+
* fits; a fit from a model in other units passes its own (`HandRig` uses
|
|
70
|
+
* `handRigSnapDistance`, a multiple of the model's palm length).
|
|
71
|
+
*/
|
|
72
|
+
export declare const stepLandmarkPoseSmoothing: (state: LandmarkPoseSmoothingState, fit: Pick<SimilarityFit, "quaternion" | "translation" | "scale"> | null, smoothing: number, snapDistance?: number) => boolean;
|
|
73
|
+
/**
|
|
74
|
+
* The shared per-frame machinery behind the canonical head and torso fits:
|
|
75
|
+
* read the live points, solve the similarity that maps the canonical set onto
|
|
76
|
+
* them, smooth, apply the authored offset, and write the WORLD pose as a local
|
|
77
|
+
* transform re-expressed in the parent's frame — so the fitted object does not
|
|
78
|
+
* depend on where its tracker group put its origin or how it scaled.
|
|
79
|
+
*/
|
|
80
|
+
export declare const useLandmarkPoseFit: (target: MutableRefObject<THREE.Object3D | null>, { canonical, readLive, offset, smoothing, enabled, onFit, onTrackingChange, solve, }: LandmarkPoseFitOptions) => void;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import type * as THREE from "three";
|
|
3
|
+
export type HintStageProps = {
|
|
4
|
+
/** Height of the hint's slot in the parent's units. */
|
|
5
|
+
height: number;
|
|
6
|
+
/** The hint's own span (model units) that fits `height`: see `orbitSpan`. */
|
|
7
|
+
span: number;
|
|
8
|
+
/** Draw it as a mirror image (a selfie feed). Default `false`. */
|
|
9
|
+
mirrored?: boolean;
|
|
10
|
+
/** Auto orbit: degrees to each side about the vertical (ping-pong). `0` = still. Default 0. */
|
|
11
|
+
orbit?: number;
|
|
12
|
+
/** Seconds per orbit swing. Default 6. */
|
|
13
|
+
orbitSeconds?: number;
|
|
14
|
+
/** The back-glow disc's material (`useGhostModel`'s `glowMaterial`); `null` = none. */
|
|
15
|
+
glow?: THREE.Material | null;
|
|
16
|
+
/** The glow disc's diameter × `span`. Default 1.75. */
|
|
17
|
+
glowSize?: number;
|
|
18
|
+
/** The hint's render order (the glow draws just before its band). */
|
|
19
|
+
renderOrder?: number;
|
|
20
|
+
/** The posed model, centred on the origin, facing +Z. It orbits; the glow does not. */
|
|
21
|
+
children: ReactNode;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* The stage every instruction hint stands on: scales a centred model so
|
|
25
|
+
* `span` fits `height`, mirrors it if asked, puts the back-glow disc behind
|
|
26
|
+
* it and swings it in a slow auto orbit. Use it with `useGhostModel` for a
|
|
27
|
+
* hint on your own model.
|
|
28
|
+
*/
|
|
29
|
+
export declare const HintStage: ({ height, span, mirrored, orbit, orbitSeconds, glow, glowSize, renderOrder, children, }: HintStageProps) => import("react/jsx-runtime").JSX.Element;
|