@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,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;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { ArmTracker } from '../../hand/armMask';
|
|
2
|
+
import { HandRigBinding } from '../../hand/handRigSolver';
|
|
3
|
+
import { WristSize } from '../../hand/wrist';
|
|
4
|
+
import { WristRotationFilter } from '../../hand/wristFilter';
|
|
5
|
+
import { ArmMask } from './useArmMask';
|
|
6
|
+
import * as THREE from "three";
|
|
7
|
+
/** The arm found in the mask for one rig (`HandRig`'s `armMask`). */
|
|
8
|
+
export type HandRigArm = {
|
|
9
|
+
tracker: ArmTracker;
|
|
10
|
+
turn: boolean;
|
|
11
|
+
fitWidth: boolean;
|
|
12
|
+
/** The mask it reads (for drawing it). */
|
|
13
|
+
mask: ArmMask | null;
|
|
14
|
+
};
|
|
15
|
+
/** The forearm bone's name in a hand model (optional: made in code when missing). */
|
|
16
|
+
export declare const HAND_RIG_FOREARM = "forearm";
|
|
17
|
+
/**
|
|
18
|
+
* Experimental (vincentt-xr/sdk#319). One rig's wrist and forearm, solved
|
|
19
|
+
* once per frame. The `forearm` bone (a
|
|
20
|
+
* child of `wrist` running up the arm; the model's own, or made in code) is
|
|
21
|
+
* aimed every frame from the wrist point: the hand's wrist frame steadied
|
|
22
|
+
* against edge-on flips (`WristRotationFilter`), then, with `armMask`, turned
|
|
23
|
+
* onto the arm found in the mask and moved onto its middle: aligned in full
|
|
24
|
+
* once the mask is sure, holding its last way while the hand points at the
|
|
25
|
+
* camera, easing back to the hand only when the arm is lost. Wristwear (`WristAttachment`) rides on the forearm bone; the
|
|
26
|
+
* width fit is a scale across the arm (`crossScale`) applied to what rides on
|
|
27
|
+
* it, so the bone itself never takes a shearing scale.
|
|
28
|
+
*/
|
|
29
|
+
export declare class HandRigWrist {
|
|
30
|
+
readonly binding: HandRigBinding;
|
|
31
|
+
readonly forearm: THREE.Object3D;
|
|
32
|
+
readonly filter: WristRotationFilter;
|
|
33
|
+
/** The arm fit (null without `armMask`). */
|
|
34
|
+
arm: HandRigArm | null;
|
|
35
|
+
/** The wrist frame this frame, world (rigid). */
|
|
36
|
+
readonly world: THREE.Matrix4;
|
|
37
|
+
/** Across the arm (X, Z) to fit the arm's width; 1 without a fit. */
|
|
38
|
+
crossScale: number;
|
|
39
|
+
readonly size: WristSize;
|
|
40
|
+
/**
|
|
41
|
+
* The wrist frame in the forearm bone's space (+Y toward the fingers, +Z
|
|
42
|
+
* out of the palm, origin on the wrist joint): where wristwear is authored.
|
|
43
|
+
*/
|
|
44
|
+
readonly forearmFrame: THREE.Matrix4;
|
|
45
|
+
private readonly wristFrame;
|
|
46
|
+
/** inverse(wrist frame in the wrist bone) × the forearm's rest (in the wrist bone). */
|
|
47
|
+
private readonly toForearm;
|
|
48
|
+
private frame;
|
|
49
|
+
private solved;
|
|
50
|
+
/** The hand detection behind this frame (`HandPose.timestampMs`), for the filter. */
|
|
51
|
+
private sample;
|
|
52
|
+
/** The arm's way up on screen and the scale it was aimed with, last frame. */
|
|
53
|
+
private readonly last;
|
|
54
|
+
private readonly w;
|
|
55
|
+
/** `forearm`: the rig's forearm bone, at rest, a child of the wrist bone. */
|
|
56
|
+
constructor(binding: HandRigBinding, forearm: THREE.Object3D);
|
|
57
|
+
/** A new frame (the rig moved; `sample`: its detection): the next `solve` works it out again. */
|
|
58
|
+
tick(sample?: number): void;
|
|
59
|
+
/** The hand was lost: the next pose is taken as it is. */
|
|
60
|
+
reset(): void;
|
|
61
|
+
/**
|
|
62
|
+
* Aims the forearm bone for this frame (once; later calls are free) and
|
|
63
|
+
* returns the wrist frame (world), or null without a wrist bone. Call
|
|
64
|
+
* before render, after the rig has posed the hand.
|
|
65
|
+
*/
|
|
66
|
+
solve(camera: THREE.Camera, aspect: number, nowMs?: number): THREE.Matrix4 | null;
|
|
67
|
+
}
|
|
68
|
+
/** The rig's forearm bone: the model's `forearm` node, or one made under the wrist bone. */
|
|
69
|
+
export declare const ensureForearmBone: (binding: HandRigBinding) => THREE.Object3D | null;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { MutableRefObject, ReactNode } from 'react';
|
|
2
|
+
import { TouchWorld, HandTouchSettings, TouchBody, TouchEvent, TouchHand, TouchWorldSettings } from '../../hand/handTouch';
|
|
3
|
+
import { Handedness } from '../../types/hand-tracking';
|
|
4
|
+
import * as THREE from "three";
|
|
5
|
+
/** The screen pointer's sphere radius, scene units. */
|
|
6
|
+
export declare const HAND_TOUCH_POINTER_RADIUS = 0.15;
|
|
7
|
+
/** How deep the play box is either side of the hand plane (`z = 0`), scene units. */
|
|
8
|
+
export declare const HAND_TOUCH_DEPTH = 0.6;
|
|
9
|
+
export type HandTouchProps = Partial<TouchWorldSettings> & Partial<HandTouchSettings> & {
|
|
10
|
+
/** Which hands play. Default `"both"`. */
|
|
11
|
+
hands?: "both" | Handedness;
|
|
12
|
+
/**
|
|
13
|
+
* The mouse / touch screen plays as a hand too: it pushes, hovers and
|
|
14
|
+
* taps; press on an object to grab it, let go to throw. `{ radius }` in
|
|
15
|
+
* scene units (default 0.15). Default off.
|
|
16
|
+
*/
|
|
17
|
+
pointer?: boolean | {
|
|
18
|
+
radius?: number;
|
|
19
|
+
};
|
|
20
|
+
/** Box depth either side of the hand plane, scene units. Default 0.6. */
|
|
21
|
+
depth?: number;
|
|
22
|
+
/** Raise the floor above the bottom of the screen, scene units. Default 0. */
|
|
23
|
+
floor?: number;
|
|
24
|
+
/** The box the objects stay in, scene units. Default: the screen at the hand plane. */
|
|
25
|
+
bounds?: {
|
|
26
|
+
min: [number, number, number];
|
|
27
|
+
max: [number, number, number];
|
|
28
|
+
};
|
|
29
|
+
/** Draw the hand colliders (the palm and fingertip spheres). */
|
|
30
|
+
showColliders?: boolean;
|
|
31
|
+
/** Everything that happens: grabs, releases, hovers, taps, touches. */
|
|
32
|
+
onEvent?: (event: TouchEvent) => void;
|
|
33
|
+
/** Freeze the objects (the hands still track). */
|
|
34
|
+
paused?: boolean;
|
|
35
|
+
/** `false` pauses the hand model's inference (see `HandTracker`). Default `true`. */
|
|
36
|
+
active?: boolean;
|
|
37
|
+
children?: ReactNode;
|
|
38
|
+
};
|
|
39
|
+
type Registered = {
|
|
40
|
+
object: THREE.Object3D;
|
|
41
|
+
onEvent: MutableRefObject<(event: TouchEvent) => void>;
|
|
42
|
+
};
|
|
43
|
+
export type HandTouchContextValue = {
|
|
44
|
+
world: TouchWorld;
|
|
45
|
+
/** Left, right, pointer: live colliders, updated every frame. */
|
|
46
|
+
hands: readonly TouchHand[];
|
|
47
|
+
/** Used by `Touchable`: the object a body's pose is written to, and its event handler. */
|
|
48
|
+
register: (body: TouchBody, entry: Registered) => () => void;
|
|
49
|
+
};
|
|
50
|
+
export declare const HandTouchContext: import('react').Context<HandTouchContextValue | null>;
|
|
51
|
+
/** The enclosing `HandTouch`'s world and hands (null outside one). */
|
|
52
|
+
export declare const useHandTouch: () => HandTouchContextValue | null;
|
|
53
|
+
/**
|
|
54
|
+
* Touch objects with your hands, no physics engine. Each tracked hand is a
|
|
55
|
+
* palm sphere and five fingertip spheres; `Touchable` children are objects in
|
|
56
|
+
* a box (by default the screen at the hand plane, `depth` deep) with gravity,
|
|
57
|
+
* a floor, walls, bounces and damping. Pinch an object to grab and carry it,
|
|
58
|
+
* let go to throw it, push or poke it, hover and tap it with the index tip.
|
|
59
|
+
* Sits anywhere in the scene (not in a tracker); it runs the hand tracker.
|
|
60
|
+
*/
|
|
61
|
+
export declare const HandTouch: ({ hands, pointer, depth, floor, bounds, showColliders, onEvent, paused, active, children, palmRadius, tipRadius, pinchStart, pinchEnd, pinchReady, smoothing, ...worldSettings }: HandTouchProps) => import("react/jsx-runtime").JSX.Element;
|
|
62
|
+
export {};
|