@vincentt-xr/sdk 2.0.0-alpha.7 → 2.0.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/GROUNDING.md +5651 -82
- 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/cache.d.ts +99 -0
- package/dist/assets/estimate.d.ts +11 -0
- package/dist/assets/gltfLoader.d.ts +16 -0
- package/dist/assets/index.d.ts +7 -0
- package/dist/assets/loaders.d.ts +43 -0
- package/dist/assets/react.d.ts +33 -0
- 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 +75 -0
- package/dist/calibration/index.d.ts +6 -0
- package/dist/calibration/storage.d.ts +13 -0
- package/dist/calibration/types.d.ts +53 -0
- package/dist/calibration/useXRCalibration.d.ts +46 -0
- package/dist/camera/CameraPermissionGate.d.ts +26 -0
- package/dist/camera/devices.d.ts +26 -0
- package/dist/camera/index.d.ts +8 -0
- package/dist/camera/permission.d.ts +86 -0
- package/dist/camera/useCameraPermission.d.ts +35 -0
- package/dist/canonicalFace-BHwyCx1c.js +9 -0
- package/dist/canonicalFace-C83I225R.cjs +1 -0
- package/dist/capabilities/detect.d.ts +45 -0
- package/dist/capabilities/index.d.ts +5 -0
- package/dist/capabilities/types.d.ts +120 -0
- package/dist/capabilities/useXRCapabilities.d.ts +18 -0
- package/dist/compat/environment.d.ts +5 -0
- package/dist/compat/index.d.ts +4 -0
- package/dist/compat/run.d.ts +18 -0
- package/dist/compat/scenarios.d.ts +10 -0
- package/dist/compat/types.d.ts +101 -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 +17 -0
- 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 +37 -5
- package/dist/components/FaceMesh/canonical/geometryGroups.d.ts +21 -0
- package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +21 -0
- package/dist/components/FaceMesh/canonical/shaders.d.ts +1 -1
- package/dist/components/FaceMesh/index.d.ts +2 -2
- 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/GestureListener/index.d.ts +11 -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/HandTracker/index.d.ts +10 -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/HolisticTracker/index.d.ts +69 -0
- package/dist/components/HolisticTracker/settings.d.ts +58 -0
- package/dist/components/HolisticTracker/signals.d.ts +49 -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/IrisEffect/IrisMaterial.d.ts +73 -0
- package/dist/components/IrisEffect/index.d.ts +51 -0
- package/dist/components/IrisEffect/settings.d.ts +117 -0
- package/dist/components/LipEffect/LipEffect.d.ts +27 -1
- package/dist/components/LipEffect/LipEffectMaterial.d.ts +95 -7
- package/dist/components/LipEffect/LipEffects.d.ts +12 -0
- package/dist/components/LipEffect/defaults.d.ts +46 -4
- package/dist/components/LipEffect/index.d.ts +11 -3
- package/dist/components/LipEffect/lipShading.d.ts +73 -0
- package/dist/components/LipEffect/settings.d.ts +375 -0
- package/dist/components/LipEffect/shader.d.ts +39 -0
- package/dist/components/LipEffect/types.d.ts +128 -9
- package/dist/components/LipEffect/useLipDesignTextures.d.ts +17 -0
- package/dist/components/LipEffect/uvGuide.d.ts +74 -0
- 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/PersonCutout/index.d.ts +50 -0
- package/dist/components/PersonCutout/personCutout.d.ts +16 -0
- package/dist/components/ScreenImage/components/ScreenImageBody.d.ts +1 -1
- package/dist/components/ScreenImage/index.d.ts +3 -1
- package/dist/components/ScreenImage/materials/ScreenImageBlendMaterial.d.ts +1 -1
- package/dist/components/ScreenImage/materials/ScreenImageMaskMaterial.d.ts +11 -0
- package/dist/components/ScreenImage/source.d.ts +6 -0
- package/dist/components/ScreenImage/types.d.ts +18 -0
- package/dist/components/SegmentationOverlay/SegmentationOverlay.d.ts +37 -0
- package/dist/components/SegmentationOverlay/SegmentationOverlayMaterial.d.ts +31 -0
- package/dist/components/SegmentationOverlay/index.d.ts +9 -0
- package/dist/components/SegmentationOverlay/maskTexture.d.ts +23 -0
- package/dist/components/SegmentationOverlay/providers.d.ts +72 -0
- package/dist/components/SegmentationOverlay/settings.d.ts +65 -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/XRProvider/index.d.ts +16 -2
- package/dist/components/XRScene/renderOutputTarget.d.ts +12 -0
- package/dist/components/XRViewport/hooks/useViewportExternalFaces.d.ts +1 -1
- package/dist/components/XRViewport/hooks/useViewportMediaSource.d.ts +1 -1
- package/dist/components/XRViewport/hooks/useViewportPipeline.d.ts +1 -1
- package/dist/components/index.d.ts +11 -0
- package/dist/config/index.d.ts +0 -1
- package/dist/constants/index.d.ts +4 -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/feed.d.ts +52 -0
- package/dist/coordinates/index.d.ts +7 -0
- package/dist/coordinates/side.d.ts +40 -0
- package/dist/coordinates/spaces.d.ts +49 -0
- package/dist/coordinates/viewport.d.ts +22 -0
- package/dist/coordinates/world.d.ts +15 -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/gesture-settings/index.d.ts +14 -0
- package/dist/debug-ui/hierarchy-panel/index.d.ts +3 -2
- package/dist/debug-ui/holistic-tracker-settings/index.d.ts +16 -0
- package/dist/debug-ui/index.d.ts +18 -3
- package/dist/debug-ui/iris-effect-settings/index.d.ts +12 -0
- package/dist/debug-ui/lip-effect-settings/index.d.ts +15 -0
- 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 +25 -0
- 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/segmentation-overlay-settings/index.d.ts +12 -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 +26 -0
- package/dist/debug-ui.cjs +3 -3
- package/dist/debug-ui.js +2695 -2547
- package/dist/detector-K8aej4MB.js +59 -0
- package/dist/detector-ijypGtse.cjs +1 -0
- package/dist/entries/all.d.ts +3 -1
- package/dist/entries/core.d.ts +20 -2
- package/dist/entries/face-effects.d.ts +123 -9
- package/dist/entries/instructions.d.ts +48 -0
- package/dist/entries/internal.d.ts +2 -1
- package/dist/entries/low-level.d.ts +49 -3
- package/dist/entries/particles.d.ts +11 -0
- package/dist/entries/product.d.ts +11 -0
- package/dist/entries/tracking.d.ts +60 -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 +2324 -1
- package/dist/face-effects.js +14208 -2268
- 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 +98 -0
- package/dist/gestures/detector.d.ts +87 -0
- package/dist/gestures/index.d.ts +8 -0
- package/dist/gestures/measures.d.ts +114 -0
- package/dist/gestures/settings.d.ts +49 -0
- 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 +76 -1
- package/dist/hooks/useCalibrationFaceTracker.d.ts +1 -1
- package/dist/hooks/useFaceInfo.d.ts +13 -1
- package/dist/hooks/useFaceInfos.d.ts +1 -1
- package/dist/hooks/useFaceModelAcquisition.d.ts +38 -0
- package/dist/hooks/useGesture.d.ts +32 -0
- package/dist/hooks/useIrisTracking.d.ts +45 -0
- package/dist/hooks/useTrackerContext.d.ts +6 -0
- package/dist/hooks/useXRDiagnostics.d.ts +81 -0
- package/dist/hooks/useXRModel.d.ts +7 -0
- package/dist/hooks/useXRSession/facade.d.ts +42 -2
- package/dist/hooks/useXRSession/index.d.ts +2 -2
- package/dist/hooks/useXRSession/reason.d.ts +3 -1
- package/dist/hooks/useXRSession/registry.d.ts +14 -0
- package/dist/hooks/useXRSession/store.d.ts +52 -3
- 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/index-w1S7fI2B.js +1432 -0
- package/dist/index-zGaqrz_K.js +188 -0
- package/dist/instructions.cjs +30 -0
- package/dist/instructions.js +1507 -0
- package/dist/{internal-Dmk1cTXq.js → internal-B90P-clC.js} +138 -119
- 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 +27 -0
- package/dist/iris/index.d.ts +4 -0
- package/dist/iris/lead.d.ts +19 -0
- package/dist/iris/types.d.ts +89 -0
- package/dist/landmarkMask-BFDyBnKM.js +224 -0
- package/dist/landmarkMask-u7es2k4X.cjs +1 -0
- 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 +1190 -675
- package/dist/main.cjs +1 -1
- package/dist/main.js +1190 -452
- package/dist/models/Base/index.d.ts +49 -0
- package/dist/models/Body/index.d.ts +3 -1
- package/dist/models/Face/constants.d.ts +8 -0
- package/dist/models/Face/index.d.ts +4 -12
- package/dist/models/Face/rotation.d.ts +18 -3
- package/dist/models/Hand/GestureTracking.d.ts +1 -1
- package/dist/models/Hand/HandTracking.d.ts +17 -1
- package/dist/models/Holistic/index.d.ts +49 -0
- package/dist/models/Holistic/result.d.ts +68 -0
- package/dist/models/Segmentation/index.d.ts +2 -0
- package/dist/models/SemanticSegmentation/index.d.ts +31 -0
- package/dist/models/SemanticSegmentation/presets.d.ts +28 -0
- package/dist/models/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/ProductDimensions.d.ts +16 -0
- package/dist/product/ProductHotspot.d.ts +16 -0
- package/dist/product/ProductViewer.d.ts +9 -0
- package/dist/product/details.d.ts +53 -0
- package/dist/product/index.d.ts +14 -0
- package/dist/product/loadModelViewer.d.ts +4 -0
- package/dist/product/types.d.ts +71 -0
- package/dist/product/useProductAr.d.ts +37 -0
- package/dist/product/useProductDetails.d.ts +60 -0
- package/dist/product.cjs +1 -0
- package/dist/product.js +414 -0
- package/dist/providers-C8rE26Uf.js +366 -0
- package/dist/providers-DHsrhDI2.cjs +62 -0
- package/dist/quality/XRQualityController.d.ts +25 -0
- package/dist/quality/controller.d.ts +33 -0
- package/dist/quality/index.d.ts +6 -0
- package/dist/quality/types.d.ts +100 -0
- package/dist/quality/useXRQuality.d.ts +28 -0
- package/dist/render/renderPasses.d.ts +8 -0
- package/dist/render/sceneBeforeRender.d.ts +12 -0
- package/dist/{renderGroups-KZk6eRiY.js → renderGroups-B38pUaX2.js} +1 -1
- package/dist/{renderGroups-80H3DpTl.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/faceMemory.d.ts +28 -0
- package/dist/segmentation2d/faceRegions.d.ts +24 -0
- package/dist/segmentation2d/index.d.ts +9 -0
- package/dist/segmentation2d/maskUv.d.ts +23 -0
- package/dist/segmentation2d/rasterize.d.ts +14 -0
- package/dist/segmentation2d/types.d.ts +52 -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-BJ7FMBsO.js +111 -0
- 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/subjects/index.d.ts +2 -0
- package/dist/subjects/select.d.ts +62 -0
- package/dist/subjects/types.d.ts +55 -0
- package/dist/tracking-config/apply.d.ts +57 -0
- package/dist/tracking-config/index.d.ts +7 -0
- package/dist/tracking-config/resolve.d.ts +25 -0
- package/dist/tracking-config/storage.d.ts +8 -0
- package/dist/tracking-config/types.d.ts +106 -0
- package/dist/tracking-config/useXRTrackingConfig.d.ts +38 -0
- package/dist/tracking.cjs +10 -1
- package/dist/tracking.js +1326 -506
- package/dist/trigger-D0Pm9noT.cjs +49 -0
- package/dist/trigger-IQeys0oS.js +2128 -0
- package/dist/types/compositor.d.ts +21 -0
- package/dist/types/face.d.ts +20 -1
- package/dist/types/hand-tracking.d.ts +9 -0
- package/dist/types/holistic.d.ts +121 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/model.d.ts +22 -2
- package/dist/types/nodes.d.ts +47 -3
- package/dist/types/segmentation.d.ts +24 -0
- package/dist/types/session.d.ts +41 -3
- 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-Cr3RzuAW.cjs +1 -0
- package/dist/useXRCapabilities-Cxmlmpbd.js +30 -0
- package/dist/utils/canonicalRigidLandmarks.d.ts +8 -0
- package/dist/utils/fns.d.ts +6 -3
- package/dist/utils/headOccluderFit.d.ts +42 -0
- package/dist/utils/integrity.d.ts +21 -1
- 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/utils/updateThrottle.d.ts +2 -0
- package/dist/utils/useStableUniforms.d.ts +18 -0
- package/dist/uv-BMFt19bg.cjs +1 -0
- package/dist/{index-ByoNj0QP.js → uv-DJU_XfmN.js} +15 -247
- package/docs/SDK_DOCUMENTATION.md +1 -2
- package/docs/api/adaptive-quality.mdx +104 -0
- package/docs/api/asset-lifecycle.mdx +78 -0
- package/docs/api/body-instructions.mdx +285 -0
- package/docs/api/body-triggers.mdx +234 -0
- package/docs/api/camera-permission.mdx +142 -0
- package/docs/api/coordinate-spaces.mdx +168 -0
- package/docs/api/cross-camera.mdx +89 -0
- package/docs/api/debug-ui-scene-editor.mdx +23 -2
- package/docs/api/diagnostics-calibration.mdx +97 -0
- 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 +9 -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 +8 -9
- 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 +209 -0
- 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 +164 -0
- package/docs/api/instructions.mdx +323 -0
- package/docs/api/iris-tracking.mdx +247 -0
- 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 +98 -0
- package/docs/api/particles.mdx +155 -0
- package/docs/api/person-cutout.mdx +136 -0
- package/docs/api/pin-to-face-mesh.mdx +274 -0
- package/docs/api/product-ar.mdx +114 -0
- package/docs/api/product-details.mdx +78 -0
- package/docs/api/screen-space-coordinates.mdx +4 -1
- package/docs/api/segmentation-overlay.mdx +301 -0
- package/docs/api/session-lifecycle.mdx +136 -0
- package/docs/api/trackers.mdx +5 -0
- package/docs/api/tracking-config.mdx +108 -0
- package/docs/docs.json +51 -1
- package/docs/examples/lip-shaders.mdx +273 -0
- 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 +368 -0
- package/docs/guides/lip-uv-template.png +0 -0
- package/docs/guides/lip-uv-template.svg +1 -0
- package/docs/guides/makeup-design-textures.mdx +109 -0
- package/docs/introduction.mdx +1 -2
- package/package.json +23 -1
- package/dist/DebuggerUI-B6bP6P9r.cjs +0 -1
- package/dist/DebuggerUI-BjOMr8q_.js +0 -269
- package/dist/FaceMeshRenderer-C5l6VLdO.cjs +0 -155
- package/dist/FaceMeshRenderer-wjAHrJzP.js +0 -1270
- package/dist/FaceRetouch-BkJzoA79.cjs +0 -134
- package/dist/FaceRetouch-DwbKQJAN.js +0 -551
- 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-ByhzppYl.js +0 -663
- package/dist/contexts-Dr62It_K.cjs +0 -1
- package/dist/debug-ui/face-warp-3d/index.d.ts +0 -6
- package/dist/getFaceInfo-C4QpCQIY.js +0 -118
- package/dist/getFaceInfo-fA1bFBub.cjs +0 -1
- package/dist/index-9dlAQAhy.js +0 -1462
- package/dist/index-BjmTe9eM.cjs +0 -1
- package/dist/index-BpEf2BBb.cjs +0 -1
- package/dist/index-CyUUurQT.cjs +0 -1
- package/dist/index-DCiMbxC3.cjs +0 -1
- package/dist/index-DXT3WccE.js +0 -2089
- package/dist/index-DpI-qo5X.cjs +0 -17
- package/dist/index-DyVF4vEW.js +0 -111
- package/dist/index-VJ0SJwmG.js +0 -214
- package/dist/internal-Cq-TEQ5Y.cjs +0 -1
- package/dist/renderLayers-lDtL0_43.cjs +0 -1
- package/dist/renderLayers-zrK2pv5O.js +0 -13
- package/dist/renderPasses-BOoBSr8z.cjs +0 -21
- package/dist/renderPasses-BcquyVtu.js +0 -1500
- package/dist/selectors-B8H97CKA.js +0 -59
- package/dist/selectors-CZLKT2Iv.cjs +0 -1
- package/dist/session-CpkiK5YA.cjs +0 -31
- package/dist/session-DLFN_VII.js +0 -363
- package/dist/useFaceInfo-BJ8-_MOs.cjs +0 -1
- package/dist/useFaceInfo-Dk426LTu.js +0 -62
- package/dist/useFaceResults-CtetsO9M.js +0 -19
- package/dist/useFaceResults-wBJF3zyp.cjs +0 -1
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { SpringSettings } from '../../spring/spring';
|
|
2
|
+
import * as THREE from "three";
|
|
3
|
+
/** A lock of hair swings slower and further than jewellery. */
|
|
4
|
+
export declare const HAIR_LOCK_SPRING: Readonly<SpringSettings>;
|
|
5
|
+
/** A lock's shape when its props leave it out. */
|
|
6
|
+
export declare const HAIR_LOCK_DEFAULTS: Readonly<{
|
|
7
|
+
length: 16;
|
|
8
|
+
segments: 8;
|
|
9
|
+
thickness: readonly [number, number];
|
|
10
|
+
color: "#3b2416";
|
|
11
|
+
}>;
|
|
12
|
+
export type HairLockProps = Partial<SpringSettings> & {
|
|
13
|
+
/** The root, in head centimetres (the canonical head frame: +X MediaPipe's left, +Y up, +Z out of the face). */
|
|
14
|
+
position?: [number, number, number];
|
|
15
|
+
/** The way the lock leaves the root (head frame); it curves down from there. Default straight down. */
|
|
16
|
+
direction?: [number, number, number];
|
|
17
|
+
/** Length, cm. Default 16. */
|
|
18
|
+
length?: number;
|
|
19
|
+
/** Joints along it. Default 8. */
|
|
20
|
+
segments?: number;
|
|
21
|
+
/** Radius at the root and at the tip, cm. Default `[1.2, 0.3]`. */
|
|
22
|
+
thickness?: number | readonly [number, number];
|
|
23
|
+
/** Default a dark brown. */
|
|
24
|
+
color?: THREE.ColorRepresentation;
|
|
25
|
+
/** False: it hangs still at rest. Default true. */
|
|
26
|
+
enabled?: boolean;
|
|
27
|
+
/** The tracked face (when it runs its own head fit). Default 0. */
|
|
28
|
+
faceIndex?: number;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Experimental: its props and look may change in a later alpha.
|
|
32
|
+
*
|
|
33
|
+
* A lock of hair on a tracked head (a pigtail, a ponytail, a strand): a
|
|
34
|
+
* chain of springs from its root that swings with head motion and settles,
|
|
35
|
+
* drawn as a tapered tube. It hangs along the head's own down. Put it in a
|
|
36
|
+
* `HeadBinding` (its occluder hides the part behind the head); inside a
|
|
37
|
+
* `CanonicalHeadFrame` it reuses that fit, otherwise it runs its own.
|
|
38
|
+
*/
|
|
39
|
+
export declare const HairLock: (props: HairLockProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as THREE from "three";
|
|
2
|
+
/**
|
|
3
|
+
* A hair lock's mesh (pure): a tube of `rings × sides` vertices plus a tip
|
|
4
|
+
* vertex, rewritten in place every frame along the lock's current points
|
|
5
|
+
* (parallel-transported frames, so it never twists), its radius tapering
|
|
6
|
+
* from root to tip.
|
|
7
|
+
*/
|
|
8
|
+
/** A tube geometry with room for `rings` rings of `sides` vertices and a closed tip. */
|
|
9
|
+
export declare const createLockGeometry: (rings: number, sides: number) => THREE.BufferGeometry;
|
|
10
|
+
/**
|
|
11
|
+
* Writes the tube along `points` (one ring each; at least 2) with radii
|
|
12
|
+
* tapering from `rootRadius` to `tipRadius`, into the geometry's positions
|
|
13
|
+
* and normals, and the tip vertex a little past the last point.
|
|
14
|
+
*/
|
|
15
|
+
export declare const writeLock: (geometry: THREE.BufferGeometry, points: readonly THREE.Vector3[], sides: number, rootRadius: number, tipRadius: number) => void;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { HandCutoutOptions } from '../../hand/handCutout';
|
|
2
|
+
import * as THREE from "three";
|
|
3
|
+
export type HandCutoutProps = HandCutoutOptions & {
|
|
4
|
+
/** Show the silhouette (translucent magenta) instead of only cutting. Default false. */
|
|
5
|
+
debug?: boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Draw order: before the content it hides. Default -900 (after the camera
|
|
8
|
+
* background). It applies in the scene root's tier, outside the tracker
|
|
9
|
+
* group's, so it holds against content anywhere in the scene.
|
|
10
|
+
*/
|
|
11
|
+
renderOrder?: number;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* The cut-out's material: depth only, at the near plane. The depth test stays
|
|
15
|
+
* ON with an always-pass function: WebGL writes no depth at all while the
|
|
16
|
+
* depth test is disabled, so `depthTest: false` would draw nothing into the
|
|
17
|
+
* depth buffer and hide nothing.
|
|
18
|
+
*/
|
|
19
|
+
export declare const createHandCutoutMaterial: () => THREE.ShaderMaterial;
|
|
20
|
+
/**
|
|
21
|
+
* Hands in front of the face (or of anything 3D): the tracked hands'
|
|
22
|
+
* silhouettes on screen (palm, fingers, forearm) are drawn as depth only at
|
|
23
|
+
* the near plane, so 3D content drawn after them is hidden there and the real
|
|
24
|
+
* hand in the camera image shows through — a hand over a `FaceWarp3D`,
|
|
25
|
+
* `FaceMorph`, character or accessory stays in front. Mount inside a
|
|
26
|
+
* `HandTracker` (it reads the tracker's model; it does not start one), in the
|
|
27
|
+
* same scene as the content. Content must test depth (the default).
|
|
28
|
+
*
|
|
29
|
+
* ```tsx
|
|
30
|
+
* <HandTracker numHands={2}>
|
|
31
|
+
* <HandCutout />
|
|
32
|
+
* </HandTracker>
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare const HandCutout: ({ inflate, forearm, debug, renderOrder, }: HandCutoutProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { HandDigit, HandGestureDefinition, HandGestureName, HandHintPose } from '../../hand/handGestures';
|
|
2
|
+
import { Handedness } from '../../types/hand-tracking';
|
|
3
|
+
import { HintLook } from '../Instruction/hintLook';
|
|
4
|
+
import { HintLoop } from '../Instruction/hintLoop';
|
|
5
|
+
import * as THREE from "three";
|
|
6
|
+
/** The hand's loop: a `HintLoop` plus the finger stagger. */
|
|
7
|
+
export type HandHintLoop = HintLoop & {
|
|
8
|
+
/**
|
|
9
|
+
* How much later the last digit moves than the first, as a share of the
|
|
10
|
+
* move (pinky first, index last). `0` moves them together. Default 0.21.
|
|
11
|
+
*/
|
|
12
|
+
stagger?: number;
|
|
13
|
+
};
|
|
14
|
+
export type HandGestureHintProps = {
|
|
15
|
+
/** A gesture name, your own definition (`defineHandGesture`), or just its hint pose. */
|
|
16
|
+
gesture: HandGestureName | HandGestureDefinition | HandHintPose;
|
|
17
|
+
/** A skinned hand following the rig contract (e.g. the SDK example `hand-v1.glb` scene). */
|
|
18
|
+
model: THREE.Object3D;
|
|
19
|
+
/**
|
|
20
|
+
* Authored poses, one single-key clip per pose (the GLB's `animations`;
|
|
21
|
+
* `hand-v1.glb` ships them). A gesture whose `hint.clip` is here plays it;
|
|
22
|
+
* otherwise its procedural hint is used.
|
|
23
|
+
*/
|
|
24
|
+
poses?: readonly THREE.AnimationClip[];
|
|
25
|
+
/** The chirality the model is authored as. Default `"right"`. */
|
|
26
|
+
modelHand?: Handedness;
|
|
27
|
+
/** The hand to show. Default `"right"`; the other chirality is the model mirrored. */
|
|
28
|
+
showHand?: Handedness;
|
|
29
|
+
/** Height of the hand in the parent's units (the hint is fitted to it). Default `1`. */
|
|
30
|
+
height?: number;
|
|
31
|
+
/**
|
|
32
|
+
* Loop timing, merged over `HAND_HINT_LOOP` (2.2 s per cycle, from a
|
|
33
|
+
* relaxed hand, the fingers closing one after another with a small settle).
|
|
34
|
+
*/
|
|
35
|
+
loop?: HandHintLoop;
|
|
36
|
+
/** The look, merged over `HAND_HINT_LOOK` (ghost, halo, glow, highlight). */
|
|
37
|
+
look?: HintLook;
|
|
38
|
+
/**
|
|
39
|
+
* Digits drawn brighter (the ones that make the gesture). Default: the
|
|
40
|
+
* hint's `highlight`, else picked from the gesture — the extended digits
|
|
41
|
+
* for a named shape or a count, thumb + index for an OK sign, the thumb for
|
|
42
|
+
* thumbs up / down; none for a fist or an open hand. `false` turns it off.
|
|
43
|
+
*/
|
|
44
|
+
highlight?: readonly HandDigit[] | false;
|
|
45
|
+
/**
|
|
46
|
+
* Auto orbit: the hand swings this many degrees to each side about the
|
|
47
|
+
* vertical and back (ping-pong), so it reads as 3D; the pose is untouched.
|
|
48
|
+
* `0` holds the view still. Default `35`.
|
|
49
|
+
*/
|
|
50
|
+
orbit?: number;
|
|
51
|
+
/** Seconds per orbit swing (side to side and back). Default `6`. */
|
|
52
|
+
orbitSeconds?: number;
|
|
53
|
+
/** Render order of the hand (keep it above the AR content it may overlap). */
|
|
54
|
+
renderOrder?: number;
|
|
55
|
+
};
|
|
56
|
+
/** The hand's default look: the plain ghost (with the model's wrist fade), a thin halo. */
|
|
57
|
+
export declare const HAND_HINT_LOOK: HintLook;
|
|
58
|
+
/** The hand's default loop. */
|
|
59
|
+
export declare const HAND_HINT_LOOP: HandHintLoop;
|
|
60
|
+
/**
|
|
61
|
+
* A 3D hand showing a gesture — the instruction's demonstration. Poses the
|
|
62
|
+
* model with the gesture's hint (an authored clip from `poses` when the model
|
|
63
|
+
* has it, else a procedural pose — both tested against the detector), turns
|
|
64
|
+
* it to the hint's `yaw` and `roll`, fits it to `height`, and loops relaxed →
|
|
65
|
+
* pose with the fingers closing one after another, while slowly orbiting side
|
|
66
|
+
* to side (`orbit`). Drawn as a ghost (`look`): the gesture's key digits
|
|
67
|
+
* brighter. Place it in the scene where the hint should appear (e.g. inside
|
|
68
|
+
* `ScreenSpaceUI`); `HandInstruction` does this.
|
|
69
|
+
*/
|
|
70
|
+
export declare const HandGestureHint: ({ gesture, model, poses, modelHand, showHand, height, loop, look, highlight, orbit, orbitSeconds, renderOrder, }: HandGestureHintProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { HandDigit, HandGestureDefinition, HandGestureName, HandShapeLimits } from '../../hand/handGestures';
|
|
2
|
+
import { Handedness } from '../../types/hand-tracking';
|
|
3
|
+
import { HintLook } from '../Instruction/hintLook';
|
|
4
|
+
import { InstructionOptions, InstructionSize, InstructionStatus } from '../Instruction/InstructionCue';
|
|
5
|
+
import { HandHintLoop } from './HandGestureHint';
|
|
6
|
+
import type * as THREE from "three";
|
|
7
|
+
export { HAND_HINT_LOOK, HAND_HINT_LOOP, HandGestureHint } from './HandGestureHint';
|
|
8
|
+
export type { HandGestureHintProps, HandHintLoop } from './HandGestureHint';
|
|
9
|
+
export { useHandGesture } from './useHandGesture';
|
|
10
|
+
export type { UseHandGestureOptions, UseHandGestureResult } from './useHandGesture';
|
|
11
|
+
/** The instruction draws in this renderOrder band, over the AR scene (= `INSTRUCTION_RENDER_ORDER`). */
|
|
12
|
+
export declare const HAND_INSTRUCTION_RENDER_ORDER = 2000;
|
|
13
|
+
/** Default nudge copy when no hand has been seen for `nudgeAfterMs`. */
|
|
14
|
+
export declare const HAND_INSTRUCTION_NUDGE_TEXT = "Show your hand to the camera";
|
|
15
|
+
/**
|
|
16
|
+
* Where the prompt stands: no hand in view, a hand in view but not doing the
|
|
17
|
+
* gesture, doing it (holding), or completed.
|
|
18
|
+
*/
|
|
19
|
+
export type HandInstructionStatus = InstructionStatus;
|
|
20
|
+
export type HandInstructionSize = InstructionSize;
|
|
21
|
+
export type HandInstructionProps = InstructionOptions & {
|
|
22
|
+
/** What to ask for: a `HAND_GESTURES` name or your own `defineHandGesture(…)`. */
|
|
23
|
+
gesture: HandGestureName | HandGestureDefinition;
|
|
24
|
+
/** The hint hand: a skinned hand following the rig contract (e.g. `hand-v1.glb`'s scene). */
|
|
25
|
+
model: THREE.Object3D;
|
|
26
|
+
/** The model's authored poses (e.g. `hand-v1.glb`'s `animations`); see `HandGestureHint`. */
|
|
27
|
+
poses?: readonly THREE.AnimationClip[];
|
|
28
|
+
/** Chirality the model is authored as. Default `"right"`. */
|
|
29
|
+
modelHand?: Handedness;
|
|
30
|
+
/** Instruction copy. Default: the gesture's `label` ("Show a peace sign"). */
|
|
31
|
+
text?: string;
|
|
32
|
+
/** Which of the person's hands may do it: `"left"`, `"right"` or `"any"` (default). */
|
|
33
|
+
hand?: Handedness | "any";
|
|
34
|
+
/** Hold time to complete. Default 400 ms. */
|
|
35
|
+
holdMs?: number;
|
|
36
|
+
/** Dropouts shorter than this do not restart the hold. Default 150 ms. */
|
|
37
|
+
graceMs?: number;
|
|
38
|
+
/** Classifier thresholds to override (see `HAND_SHAPE_LIMITS`). */
|
|
39
|
+
limits?: Partial<HandShapeLimits>;
|
|
40
|
+
/** The hint's auto orbit, degrees to each side. Default `35`; `0` = still. */
|
|
41
|
+
orbit?: number;
|
|
42
|
+
/** The hint's look, merged over `HAND_HINT_LOOK`. */
|
|
43
|
+
look?: HintLook;
|
|
44
|
+
/** The hint's loop, merged over `HAND_HINT_LOOP`. */
|
|
45
|
+
loop?: HandHintLoop;
|
|
46
|
+
/** The hint's highlighted digits (default: picked from the gesture); `false` = none. */
|
|
47
|
+
highlight?: readonly HandDigit[] | false;
|
|
48
|
+
/** Called once when the gesture is held long enough. */
|
|
49
|
+
onComplete?: () => void;
|
|
50
|
+
/** `false` hides it and pauses detection. Default `true`. */
|
|
51
|
+
active?: boolean;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* A minimal on-screen instruction that asks for a hand gesture and waits for
|
|
55
|
+
* it: the looping ghost hint hand (`HandGestureHint`) with the copy under it —
|
|
56
|
+
* no card, no progress bar. Holding the gesture for `holdMs` completes it
|
|
57
|
+
* (`onComplete`, a small pop and a white ring, then it fades out); with no
|
|
58
|
+
* hand in view for a while it adds a nudge line and the hint pulses. Mount
|
|
59
|
+
* inside the R3F scene (`XRScene`); it draws over the AR content and acquires
|
|
60
|
+
* the hand model itself. Every part is customisable (`look`, `loop`,
|
|
61
|
+
* `textStyle`, `motion`, `renderText` …); for a fully custom one, compose
|
|
62
|
+
* `<Instruction>` with `useHandGesture` and any symbol.
|
|
63
|
+
*
|
|
64
|
+
* ```tsx
|
|
65
|
+
* <HandInstruction
|
|
66
|
+
* gesture="peace"
|
|
67
|
+
* text="Peace to start"
|
|
68
|
+
* model={handGltf.scene}
|
|
69
|
+
* poses={handGltf.animations}
|
|
70
|
+
* onComplete={start}
|
|
71
|
+
* />
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare const HandInstruction: ({ active, text, ...props }: HandInstructionProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { MutableRefObject } from 'react';
|
|
2
|
+
import { HandGestureSpec, HandShape, HandShapeLimits } from '../../hand/handGestures';
|
|
3
|
+
import { Handedness } from '../../types/hand-tracking';
|
|
4
|
+
import { InstructionDetector, InstructionHoldOptions } from '../Instruction/useInstructionHold';
|
|
5
|
+
export type UseHandGestureOptions = InstructionHoldOptions & {
|
|
6
|
+
/** Which hand may perform it: the person's `"left"` / `"right"`, or `"any"` (default). */
|
|
7
|
+
hand?: Handedness | "any";
|
|
8
|
+
/** Classifier thresholds to override for this detector (see `HAND_SHAPE_LIMITS`). */
|
|
9
|
+
limits?: Partial<HandShapeLimits>;
|
|
10
|
+
};
|
|
11
|
+
export type UseHandGestureResult = InstructionDetector & {
|
|
12
|
+
/** The latest analysed shape per hand (for readouts), read in `useFrame`. */
|
|
13
|
+
shapesRef: MutableRefObject<Partial<Record<Handedness, HandShape>>>;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Detects a hand gesture on the tracked hands, with hold-to-complete: a
|
|
17
|
+
* `HAND_GESTURES` name, a rule, a match function `(shape, side) => boolean`
|
|
18
|
+
* or a definition (`defineHandGesture`). Returns an `InstructionDetector`
|
|
19
|
+
* (pass it to `<Instruction detector>`). Mount inside the R3F scene; it
|
|
20
|
+
* acquires the hand model itself.
|
|
21
|
+
*/
|
|
22
|
+
export declare const useHandGesture: (gesture: HandGestureSpec, { hand, limits, active, ...hold }?: UseHandGestureOptions) => UseHandGestureResult;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { WristSize } from '../../hand/wrist';
|
|
2
|
+
import * as THREE from "three";
|
|
3
|
+
export type ForearmOccluderOptions = {
|
|
4
|
+
/** How far up the arm, in palm lengths. Default `FOREARM_OCCLUDER_LENGTH` (2.5). */
|
|
5
|
+
length?: number;
|
|
6
|
+
/** Wider (> 1) or narrower than the measured wrist. Default 1. */
|
|
7
|
+
scale?: number;
|
|
8
|
+
};
|
|
9
|
+
export type ForearmOccluderProps = ForearmOccluderOptions & {
|
|
10
|
+
showDebugMaterial?: boolean;
|
|
11
|
+
opacity?: number;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* A tapered elliptic tube from the wrist up the forearm, along the hand's own
|
|
15
|
+
* axis (wrist frame, model units): `width × depth` at the wrist, flaring by
|
|
16
|
+
* `FOREARM_OCCLUDER_FLARE` toward the elbow, reaching a little into the hand
|
|
17
|
+
* so there is no gap at the wrist.
|
|
18
|
+
*/
|
|
19
|
+
export declare const createForearmGeometry: (wrist: WristSize, { length, scale }?: ForearmOccluderOptions) => THREE.BufferGeometry;
|
|
20
|
+
/**
|
|
21
|
+
* Experimental: its props and behaviour may change in a later alpha
|
|
22
|
+
* (vincentt-xr/sdk#319).
|
|
23
|
+
*
|
|
24
|
+
* A depth-only forearm on the enclosing `HandRig` / `HandOccluder`: the back
|
|
25
|
+
* of a watch strap or bracelet hides behind the arm. On the rig's forearm
|
|
26
|
+
* bone (along the arm found in the mask with `armMask`, else the hand's
|
|
27
|
+
* steadied axis), sized from the wrist.
|
|
28
|
+
*/
|
|
29
|
+
export declare const ForearmOccluder: ({ length, scale, showDebugMaterial, opacity, }: ForearmOccluderProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { HandAttachmentJoint } from '../../hand/handRigSolver';
|
|
3
|
+
export type HandAttachmentProps = {
|
|
4
|
+
/**
|
|
5
|
+
* The finger bone to ride on, named by the joint it starts at:
|
|
6
|
+
* `indexMcp` = the base segment of the index finger (MCP → PIP), `indexPip`
|
|
7
|
+
* the middle one, `indexDip` the last; the thumb's are `thumbCmc`,
|
|
8
|
+
* `thumbMcp`, `thumbIp`.
|
|
9
|
+
*/
|
|
10
|
+
joint: HandAttachmentJoint;
|
|
11
|
+
/** Where along that segment, 0 = at the joint, 1 = at the next one. Default `0.5`. */
|
|
12
|
+
along?: number;
|
|
13
|
+
/**
|
|
14
|
+
* Adjustment in the attachment frame (+Y toward the fingertip, +Z out of the
|
|
15
|
+
* palm, −Z = back of the hand): `position` in model units (cm for the SDK's
|
|
16
|
+
* `hand-v1`), `rotation` in radians, `scale` as a multiplier.
|
|
17
|
+
*/
|
|
18
|
+
offset?: {
|
|
19
|
+
position?: [number, number, number];
|
|
20
|
+
rotation?: [number, number, number];
|
|
21
|
+
scale?: number;
|
|
22
|
+
};
|
|
23
|
+
children?: ReactNode;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Puts its children on a finger of the enclosing `HandRig` / `HandOccluder`:
|
|
27
|
+
* a ring around a segment, a nail on a tip, a watch on the wrist bone's
|
|
28
|
+
* neighbour. Children are authored in the attachment frame, in the model's
|
|
29
|
+
* units (centimetres for the SDK hand): a ring around +Y with its stone at −Z
|
|
30
|
+
* sits on the back of the finger. They follow the bone, its tracked length,
|
|
31
|
+
* the hand's visibility and its mirroring (on the other chirality the content
|
|
32
|
+
* is mirrored too — symmetric pieces such as rings are unaffected).
|
|
33
|
+
*/
|
|
34
|
+
export declare const HandAttachment: ({ joint, along, offset, children }: HandAttachmentProps) => JSX.Element | null;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { ForearmOccluderOptions } from './ForearmOccluder';
|
|
2
|
+
import { HandRigProps } from './index';
|
|
3
|
+
import * as THREE from "three";
|
|
4
|
+
/** Drawn before everything in the scene so its depth is in place for the attachments. */
|
|
5
|
+
export declare const HAND_OCCLUDER_RENDER_ORDER = -1;
|
|
6
|
+
/**
|
|
7
|
+
* Pushes every vertex along its (skinned) normal by the `inflate` uniform, in
|
|
8
|
+
* model units, after skinning — so the posed fingers grow or shrink evenly.
|
|
9
|
+
*
|
|
10
|
+
* Coupled to three's MeshBasicMaterial vertex shader text (pinned
|
|
11
|
+
* `three@0.173.0`; the test patches the real shader): it needs the
|
|
12
|
+
* `void main() {` and `#include <skinning_vertex>` tokens. If either is missing
|
|
13
|
+
* it returns the shader UNCHANGED (no inflate) rather than half-patched — a
|
|
14
|
+
* uniform used but never declared would fail to compile and lose the occluder.
|
|
15
|
+
*/
|
|
16
|
+
export declare const patchHandOccluderInflate: (vertexShader: string) => string;
|
|
17
|
+
/**
|
|
18
|
+
* A depth-only material for a skinned hand, with an `inflate` (model units)
|
|
19
|
+
* uniform in `userData.inflate`. With `debug` it draws as a translucent grey.
|
|
20
|
+
*/
|
|
21
|
+
export declare const createHandOccluderMaterial: () => THREE.MeshBasicMaterial;
|
|
22
|
+
export type HandOccluderProps = Omit<HandRigProps, "material"> & {
|
|
23
|
+
/**
|
|
24
|
+
* Grow (+) or shrink (−) the occluder along its normals, in model units
|
|
25
|
+
* (centimetres for the SDK hand). Real fingers vary; a ring must stay
|
|
26
|
+
* OUTSIDE the occluder or its front is hidden too, so shrink rather than
|
|
27
|
+
* grow when in doubt. Default `0`.
|
|
28
|
+
*/
|
|
29
|
+
inflate?: number;
|
|
30
|
+
/** Draw the occluder (translucent grey) instead of depth only — for calibration. */
|
|
31
|
+
showDebugMaterial?: boolean;
|
|
32
|
+
/** Debug material opacity. Default `0.5`. */
|
|
33
|
+
opacity?: number;
|
|
34
|
+
/**
|
|
35
|
+
* Experimental. A forearm too (`ForearmOccluder`): `true`, or options
|
|
36
|
+
* (`length` in palm lengths, `scale`), so the back of a watch strap or
|
|
37
|
+
* bracelet hides behind the arm. Default off.
|
|
38
|
+
*/
|
|
39
|
+
forearm?: boolean | ForearmOccluderOptions;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* A depth-only hand: the `HandRig` fit (position, rotation, size, finger pose
|
|
43
|
+
* and lengths) applied to a hand model that writes depth but no colour, drawn
|
|
44
|
+
* first (`HAND_OCCLUDER_RENDER_ORDER`). Whatever is behind the tracked hand —
|
|
45
|
+
* the back half of a ring, the far side of a watch — fails the depth test and
|
|
46
|
+
* disappears, while the camera image shows the real hand. Put the jewellery in
|
|
47
|
+
* as `HandAttachment` children so it rides on the same fit:
|
|
48
|
+
*
|
|
49
|
+
* ```tsx
|
|
50
|
+
* <HandOccluder hand="right" model={handGltf.scene}>
|
|
51
|
+
* <HandAttachment joint="ringMcp" along={0.6}><primitive object={ring} /></HandAttachment>
|
|
52
|
+
* </HandOccluder>
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export declare const HandOccluder: ({ inflate, showDebugMaterial, opacity, onModel, forearm, children, ...rig }: HandOccluderProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { HandTattooPlacement } from '../../hand/handTattoo';
|
|
2
|
+
import * as THREE from "three";
|
|
3
|
+
/** How the art meets the skin. */
|
|
4
|
+
export type HandTattooBlend = "multiply" | "normal";
|
|
5
|
+
/**
|
|
6
|
+
* Sets a tattoo material's blending: `"multiply"` darkens the surface by the
|
|
7
|
+
* art (ink: skin shading shows through, white leaves the skin as is);
|
|
8
|
+
* `"normal"` lays the art's own colours over it (stickers, light ink).
|
|
9
|
+
*/
|
|
10
|
+
export declare const setHandTattooBlend: (material: THREE.ShaderMaterial, blend: HandTattooBlend) => void;
|
|
11
|
+
/**
|
|
12
|
+
* The tattoo material: projects `uniforms.map` through `uniforms.decalMatrix`
|
|
13
|
+
* (`handTattooMatrix`) from the mesh's rest surface; works on skinned and
|
|
14
|
+
* plain meshes. Blends over the depth already drawn (no depth writes, pulled
|
|
15
|
+
* forward with a polygon offset so it wins on the same surface).
|
|
16
|
+
*/
|
|
17
|
+
export declare const createHandTattooMaterial: (blend?: HandTattooBlend) => THREE.ShaderMaterial;
|
|
18
|
+
export type HandTattooProps = {
|
|
19
|
+
/**
|
|
20
|
+
* The art: an image URL (loaded here, sRGB) or a texture you own (set its
|
|
21
|
+
* `colorSpace` to `THREE.SRGBColorSpace`). Dark ink on transparent (or on
|
|
22
|
+
* white, with `blend="multiply"`).
|
|
23
|
+
*/
|
|
24
|
+
src: string | THREE.Texture;
|
|
25
|
+
/** `"back"` (default) of the hand or `"palm"`. */
|
|
26
|
+
placement?: HandTattooPlacement;
|
|
27
|
+
/**
|
|
28
|
+
* Art width in model units (cm for the SDK hand); the height follows the
|
|
29
|
+
* image's aspect. Default `HAND_TATTOO_DEFAULT_SIZE` palm lengths (≈ 4.8 cm).
|
|
30
|
+
*/
|
|
31
|
+
size?: number;
|
|
32
|
+
/** `[towardThumb, towardFingers]` from the centre of that side, model units. Default `[0, 0]`. */
|
|
33
|
+
offset?: readonly [number, number];
|
|
34
|
+
/** Radians, counter-clockwise as seen looking at that side with the fingers up. Default `0`. */
|
|
35
|
+
rotation?: number;
|
|
36
|
+
/** 0..1. Default `0.9`. */
|
|
37
|
+
opacity?: number;
|
|
38
|
+
/** `"multiply"` (default: ink, skin shading shows through) or `"normal"` (the art's own colours). */
|
|
39
|
+
blend?: HandTattooBlend;
|
|
40
|
+
/** Default `HAND_TATTOO_RENDER_ORDER` (1): after the hand model. */
|
|
41
|
+
renderOrder?: number;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Art on the hand's skin (#271): projected onto the enclosing `HandRig` /
|
|
45
|
+
* `HandOccluder` model's surface in its rest pose, so it bends, stretches and
|
|
46
|
+
* turns with the fingers and the palm. Inside a `HandOccluder` it inks the
|
|
47
|
+
* real hand in the camera image (the occluder's depth hides it where the hand
|
|
48
|
+
* covers itself, e.g. curled fingers over a palm tattoo); inside a visible
|
|
49
|
+
* `HandRig` it prints on that model (a glove, a skin).
|
|
50
|
+
*
|
|
51
|
+
* ```tsx
|
|
52
|
+
* <HandOccluder hand="right" model={handGltf.scene} inflate={-0.1}>
|
|
53
|
+
* <HandTattoo src="/tattoos/rose.png" placement="back" size={5} opacity={0.85} />
|
|
54
|
+
* </HandOccluder>
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* Needs no UVs: placement is measured from the rig's joints. On the mirrored
|
|
58
|
+
* chirality the placement mirrors with the hand (`offset[0]` stays toward the
|
|
59
|
+
* thumb) but the art itself never reads mirrored.
|
|
60
|
+
*/
|
|
61
|
+
export declare const HandTattoo: ({ src, placement, size, offset, rotation, opacity, blend, renderOrder, }: HandTattooProps) => null;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { WristSize } from '../../hand/wrist';
|
|
3
|
+
export type WristAttachmentProps = {
|
|
4
|
+
/** How far up the forearm from the wrist joint, model units (cm for the SDK hand). Default 1. */
|
|
5
|
+
along?: number;
|
|
6
|
+
/** A nudge in the wrist frame: `position` (model units), `rotation` (radians), `scale`. */
|
|
7
|
+
offset?: {
|
|
8
|
+
position?: [number, number, number];
|
|
9
|
+
rotation?: [number, number, number];
|
|
10
|
+
scale?: number;
|
|
11
|
+
};
|
|
12
|
+
/** In the wrist frame; a function gets the wrist's size (`WristSize`, model units). */
|
|
13
|
+
children?: ReactNode | ((wrist: WristSize) => ReactNode);
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Experimental: its props and behaviour may change in a later alpha
|
|
17
|
+
* (vincentt-xr/sdk#319).
|
|
18
|
+
*
|
|
19
|
+
* Puts its children on the wrist of the enclosing `HandRig` or
|
|
20
|
+
* `HandOccluder`, riding on the rig's `forearm` bone: a watch, a bracelet, a
|
|
21
|
+
* cuff. The wrist frame: +Y toward the
|
|
22
|
+
* fingers (−Y up the forearm), +Z out of the palm (−Z is the back of the
|
|
23
|
+
* wrist, where a watch face sits), +X across; model units, centimetres for
|
|
24
|
+
* the SDK hand. It rides on the rig's fit, so it turns and scales with the
|
|
25
|
+
* tracked hand. A function child gets the wrist's size, to fit a strap.
|
|
26
|
+
*
|
|
27
|
+
* The frame is steadied against the flips an edge-on hand can cause (a
|
|
28
|
+
* sudden turn is taken only once it lasts). With the rig's `armMask` it also
|
|
29
|
+
* follows the arm found in the mask: turned about the camera ray through the
|
|
30
|
+
* wrist onto the arm's direction on screen, moved across onto its middle,
|
|
31
|
+
* and scaled across (X, Z, gently) toward the arm's width; easing back to the
|
|
32
|
+
* hand's own axis when the arm can't be found.
|
|
33
|
+
*/
|
|
34
|
+
export declare const WristAttachment: ({ along, offset, children }: WristAttachmentProps) => JSX.Element | null;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { ArmFitSettings, ArmMeasureOptions } from '../../hand/armMask';
|
|
3
|
+
import { HandRigBinding } from '../../hand/handRigSolver';
|
|
4
|
+
import { Handedness } from '../../types/hand-tracking';
|
|
5
|
+
import { ArmMaskKind } from './useArmMask';
|
|
6
|
+
import { HandRigWrist } from './wristSolve';
|
|
7
|
+
import * as THREE from "three";
|
|
8
|
+
export { HAND_RIG_FOREARM, HandRigWrist, ensureForearmBone, type HandRigArm } from './wristSolve';
|
|
9
|
+
export type HandRigProps = {
|
|
10
|
+
/** The person's hand to follow (anatomical, on every source). */
|
|
11
|
+
hand: Handedness;
|
|
12
|
+
/**
|
|
13
|
+
* A skinned hand following the rig contract (`HAND_RIG_REQUIRED_JOINTS`),
|
|
14
|
+
* e.g. a loaded `gltf.scene`. It is cloned (skeleton included) per rig, so
|
|
15
|
+
* one loaded model can drive both hands; materials are shared — swap them
|
|
16
|
+
* on `model` or in `onModel`.
|
|
17
|
+
*/
|
|
18
|
+
model: THREE.Object3D;
|
|
19
|
+
/** The chirality the model is authored as. Default `"right"`; the other is drawn mirrored. */
|
|
20
|
+
modelHand?: Handedness;
|
|
21
|
+
/** Per-frame EMA factor for the hand and finger poses, `1` = none. Default `0.5`. */
|
|
22
|
+
smoothing?: number;
|
|
23
|
+
/**
|
|
24
|
+
* `"tracked"` (default): each finger segment takes the tracked hand's length
|
|
25
|
+
* (`applyHandRigLengths`: lengthened along the bone only, so fingers keep the
|
|
26
|
+
* model's thickness; ratios clamped to `HAND_RIG_LENGTH_RANGE`). `"model"`:
|
|
27
|
+
* keep the model's own proportions (only the whole hand is scaled).
|
|
28
|
+
*/
|
|
29
|
+
fingerLengths?: "tracked" | "model";
|
|
30
|
+
/** Keep drawing a lost hand during the short hold (`HandPose.held`). Default `true`. */
|
|
31
|
+
showHeld?: boolean;
|
|
32
|
+
/** Fires once on found (`true`) and once on lost (`false`). */
|
|
33
|
+
onTrackingChange?: (tracked: boolean) => void;
|
|
34
|
+
/**
|
|
35
|
+
* Replaces every mesh material of this rig's clone (e.g. a glove, a ghost
|
|
36
|
+
* or a different skin tone per hand). Omit to keep the model's own. The
|
|
37
|
+
* caller owns (and disposes) it.
|
|
38
|
+
*/
|
|
39
|
+
material?: THREE.Material;
|
|
40
|
+
/**
|
|
41
|
+
* Called once with this rig's clone (e.g. to set shadows or render order).
|
|
42
|
+
* Attachments and tattoo layers may already be inside it; the model's own meshes carry
|
|
43
|
+
* `userData[HAND_RIG_MODEL_MESH]`.
|
|
44
|
+
*/
|
|
45
|
+
onModel?: (clone: THREE.Object3D) => void;
|
|
46
|
+
/** `false` pauses the hand model's inference (see `HandTracker`). Default `true`. */
|
|
47
|
+
active?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Experimental (vincentt-xr/sdk#319). Find the forearm in a segmentation
|
|
50
|
+
* mask, so `WristAttachment` content
|
|
51
|
+
* (and the forearm occluder) follows the real arm on screen and fits its
|
|
52
|
+
* width, not just the hand's axis: `"skin"` (the multiclass segmenter's
|
|
53
|
+
* bare skin, apart from the face and clothes) or `"portrait"` (the person
|
|
54
|
+
* mask: no edges where the arm is in front of the body), or options.
|
|
55
|
+
* Default off.
|
|
56
|
+
*/
|
|
57
|
+
armMask?: ArmMaskKind | HandRigArmMaskOptions;
|
|
58
|
+
/** `HandAttachment`s (rings, nails, watches …) on its bones and `HandTattoo`s on its skin. */
|
|
59
|
+
children?: ReactNode;
|
|
60
|
+
};
|
|
61
|
+
/** `armMask` with options: the mask, what to fit, the measure and the easing. */
|
|
62
|
+
export type HandRigArmMaskOptions = Partial<ArmFitSettings> & ArmMeasureOptions & {
|
|
63
|
+
/** Default `"skin"`: the arm's bare skin, apart from the face and the clothes. */
|
|
64
|
+
kind?: ArmMaskKind;
|
|
65
|
+
/** Turn wristwear onto the arm's direction. Default true. */
|
|
66
|
+
turn?: boolean;
|
|
67
|
+
/** Fit wristwear to the arm's width (and centre it on the arm). Default true. */
|
|
68
|
+
fitWidth?: boolean;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* The enclosing rig's wrist (`HandRigWrist`): its frame, steadied and fitted
|
|
72
|
+
* to the arm, solved once per frame for every `WristAttachment` on it.
|
|
73
|
+
*/
|
|
74
|
+
export declare const HandRigWristContext: import('react').Context<HandRigWrist | null>;
|
|
75
|
+
/**
|
|
76
|
+
* `userData` flag on the hand model's own meshes in a rig's clone. The clone
|
|
77
|
+
* also carries `HandAttachment` content (portaled into its bones) and
|
|
78
|
+
* `HandTattoo` layers (siblings of the model meshes); check this
|
|
79
|
+
* flag to touch only the hand.
|
|
80
|
+
*/
|
|
81
|
+
export declare const HAND_RIG_MODEL_MESH = "vincenttHandRigModelMesh";
|
|
82
|
+
/** The binding of the enclosing `HandRig` / `HandOccluder`, for `HandAttachment` / `HandTattoo`. */
|
|
83
|
+
export declare const HandRigContext: import('react').Context<HandRigBinding | null>;
|
|
84
|
+
/**
|
|
85
|
+
* Drives a skinned hand model from a tracked hand (#165). Place it anywhere in
|
|
86
|
+
* the scene (not inside a tracker): it reads both hands from the shared hand
|
|
87
|
+
* model, fits the model's palm to the live palm (position, rotation, size) and
|
|
88
|
+
* swings every finger bone toward its live child joint, measured from the
|
|
89
|
+
* model's own rest pose. Mount one per hand:
|
|
90
|
+
*
|
|
91
|
+
* ```tsx
|
|
92
|
+
* <HandRig hand="left" model={gltf.scene} />
|
|
93
|
+
* <HandRig hand="right" model={gltf.scene} />
|
|
94
|
+
* ```
|
|
95
|
+
*
|
|
96
|
+
* Identity is anatomical and sticky (`assignHandPoses`): a hand that drops out
|
|
97
|
+
* is held briefly, then hidden, and comes back on the same rig — never the
|
|
98
|
+
* other one — snapped to its new pose. On the mirrored webcam a right hand
|
|
99
|
+
* looks like a left hand, so a right-hand model is mirrored onto it.
|
|
100
|
+
*/
|
|
101
|
+
export declare const HandRig: ({ hand, model, modelHand, smoothing, fingerLengths, showHeld, onTrackingChange, material, onModel, active, armMask, children, }: HandRigProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ArmMaskSource } from '../../hand/armMask';
|
|
2
|
+
/**
|
|
3
|
+
* Which mask the arm is looked for in: `"portrait"` (the person, from the
|
|
4
|
+
* portrait segmenter; sleeves count, an arm in front of the body has no
|
|
5
|
+
* edges) or `"skin"` (bare skin, the multiclass segmenter's `body_skin`;
|
|
6
|
+
* works in front of clothes, not over a sleeve).
|
|
7
|
+
*/
|
|
8
|
+
export type ArmMaskKind = "portrait" | "skin";
|
|
9
|
+
export type ArmMask = ArmMaskSource & {
|
|
10
|
+
readonly kind: ArmMaskKind;
|
|
11
|
+
/** Bumped on every new mask; 0 until the first one. */
|
|
12
|
+
readonly version: number;
|
|
13
|
+
/** `performance.now()` of the frame the mask comes from, when known. */
|
|
14
|
+
readonly timestampMs: number | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Pulls the segmenter's latest mask (in place, no copy); true when it is
|
|
17
|
+
* new. Call once per frame; reads back from the GPU at most `maxFps` times
|
|
18
|
+
* a second (portrait).
|
|
19
|
+
*/
|
|
20
|
+
refresh: (nowMs: number) => boolean;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Experimental (vincentt-xr/sdk#319). The arm mask for wristwear: acquires the portrait or the multiclass
|
|
24
|
+
* segmenter while `kind` is set (`false` acquires nothing) and reads its mask
|
|
25
|
+
* where it lives. The multiclass segmenter shares
|
|
26
|
+
* `XRModel.SEMANTIC_SEGMENTATION` with the hair mask: the first acquirer in a
|
|
27
|
+
* session picks the preset, so `"skin"` needs it not to be the hair one.
|
|
28
|
+
*/
|
|
29
|
+
export declare const useArmMask: (kind: ArmMaskKind | false) => ArmMask | null;
|