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