@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,80 @@
|
|
|
1
|
+
import { MutableRefObject } from 'react';
|
|
2
|
+
import { SimilarityFit } from '../../utils/similarityFit';
|
|
3
|
+
import * as THREE from "three";
|
|
4
|
+
export type CanonicalOffset = {
|
|
5
|
+
/** Canonical centimetres, in the fitted frame (rotates with it). */
|
|
6
|
+
position?: [number, number, number];
|
|
7
|
+
/** Radians, applied after the fitted rotation. */
|
|
8
|
+
rotation?: [number, number, number];
|
|
9
|
+
/** Multiplier on the fitted scale (`1` = exact). */
|
|
10
|
+
scale?: number;
|
|
11
|
+
};
|
|
12
|
+
export type LandmarkPoseFit = SimilarityFit & {
|
|
13
|
+
/** World units per canonical centimetre (the fit's scale). */
|
|
14
|
+
worldUnitsPerCm: number;
|
|
15
|
+
/** Number of landmarks used. */
|
|
16
|
+
count: number;
|
|
17
|
+
};
|
|
18
|
+
export type LandmarkPoseFitOptions = {
|
|
19
|
+
/** Canonical positions, flat `[x, y, z, …]` centimetres. */
|
|
20
|
+
canonical: ArrayLike<number>;
|
|
21
|
+
/**
|
|
22
|
+
* Fills `out` (flat world coordinates, same order as `canonical`) from the
|
|
23
|
+
* live tracker and returns `true`, or returns `false` when there is nothing
|
|
24
|
+
* to fit this frame (the object is then hidden).
|
|
25
|
+
*/
|
|
26
|
+
readLive: (out: Float64Array) => boolean;
|
|
27
|
+
offset?: CanonicalOffset;
|
|
28
|
+
/** Per-frame EMA factor for the pose, `1` = no smoothing. */
|
|
29
|
+
smoothing?: number;
|
|
30
|
+
enabled?: boolean;
|
|
31
|
+
onFit?: (fit: LandmarkPoseFit) => void;
|
|
32
|
+
/**
|
|
33
|
+
* Called once when the subject is found and once when it is lost (not per
|
|
34
|
+
* frame). While lost the object is hidden; on reacquire it snaps to the new
|
|
35
|
+
* pose instead of easing in from where it was lost.
|
|
36
|
+
*/
|
|
37
|
+
onTrackingChange?: (tracked: boolean) => void;
|
|
38
|
+
/**
|
|
39
|
+
* The solver. Defaults to the Umeyama similarity over `canonical` vs the
|
|
40
|
+
* live points (≥ 3 points). A caller with fewer points supplies its own
|
|
41
|
+
* (the shoulder fit uses two).
|
|
42
|
+
*/
|
|
43
|
+
solve?: (live: Float64Array, out: LandmarkPoseFit) => LandmarkPoseFit;
|
|
44
|
+
};
|
|
45
|
+
export declare const LANDMARK_POSE_FIT_DEFAULT_SMOOTHING = 0.5;
|
|
46
|
+
/**
|
|
47
|
+
* A fitted origin that moves farther than this in one frame (canonical
|
|
48
|
+
* centimetres) snaps instead of easing: a different person took the tracked
|
|
49
|
+
* index, or the subject re-entered elsewhere. Head motion between two frames
|
|
50
|
+
* is a few centimetres; easing across a face swap would slide the accessory
|
|
51
|
+
* over the screen.
|
|
52
|
+
*/
|
|
53
|
+
export declare const LANDMARK_POSE_FIT_SNAP_CM = 20;
|
|
54
|
+
export type LandmarkPoseSmoothingState = {
|
|
55
|
+
tracked: boolean;
|
|
56
|
+
quaternion: THREE.Quaternion;
|
|
57
|
+
position: THREE.Vector3;
|
|
58
|
+
scale: number;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* One frame of the fit's smoothing: snap on (re)acquire or on a jump larger
|
|
62
|
+
* than `snapDistance`, EMA otherwise. `fit` is `null` when nothing is tracked
|
|
63
|
+
* this frame. Returns whether tracking changed this frame (found or lost) so
|
|
64
|
+
* callers can fire edge events.
|
|
65
|
+
*
|
|
66
|
+
* `snapDistance` is in the fit's SOURCE units (the canonical points it maps
|
|
67
|
+
* from): the jump is measured as world distance / `fit.scale`. The default,
|
|
68
|
+
* `LANDMARK_POSE_FIT_SNAP_CM`, suits the centimetre canonical head and torso
|
|
69
|
+
* fits; a fit from a model in other units passes its own (`HandRig` uses
|
|
70
|
+
* `handRigSnapDistance`, a multiple of the model's palm length).
|
|
71
|
+
*/
|
|
72
|
+
export declare const stepLandmarkPoseSmoothing: (state: LandmarkPoseSmoothingState, fit: Pick<SimilarityFit, "quaternion" | "translation" | "scale"> | null, smoothing: number, snapDistance?: number) => boolean;
|
|
73
|
+
/**
|
|
74
|
+
* The shared per-frame machinery behind the canonical head and torso fits:
|
|
75
|
+
* read the live points, solve the similarity that maps the canonical set onto
|
|
76
|
+
* them, smooth, apply the authored offset, and write the WORLD pose as a local
|
|
77
|
+
* transform re-expressed in the parent's frame — so the fitted object does not
|
|
78
|
+
* depend on where its tracker group put its origin or how it scaled.
|
|
79
|
+
*/
|
|
80
|
+
export declare const useLandmarkPoseFit: (target: MutableRefObject<THREE.Object3D | null>, { canonical, readLive, offset, smoothing, enabled, onFit, onTrackingChange, solve, }: LandmarkPoseFitOptions) => void;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react';
|
|
2
|
+
import { HolisticHandSide, HolisticModelOptions, HolisticTrackingStatus } from '../../types/holistic';
|
|
3
|
+
import { XRModelNodeHolisticTracking } from '../../types/nodes';
|
|
4
|
+
/** What `useHolisticTracking()` returns: the shared node plus its lifecycle. */
|
|
5
|
+
export type HolisticTrackingContextValue = {
|
|
6
|
+
node: XRModelNodeHolisticTracking | null;
|
|
7
|
+
/** True once the model is registered and initialized without error. */
|
|
8
|
+
ready: boolean;
|
|
9
|
+
status: HolisticTrackingStatus;
|
|
10
|
+
error: Error | null;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Read the nearest `<HolisticTracker>`'s shared node. Call `node.getResult()`
|
|
14
|
+
* inside `useFrame`; the result object is stable and mutated in place.
|
|
15
|
+
* Outside a provider this returns an inactive context (never throws).
|
|
16
|
+
*/
|
|
17
|
+
export declare const useHolisticTracking: () => HolisticTrackingContextValue;
|
|
18
|
+
export type HolisticTrackerProps = PropsWithChildren & HolisticModelOptions & {
|
|
19
|
+
/**
|
|
20
|
+
* Whether this tracker should run. `false` pauses the shared model's
|
|
21
|
+
* per-frame inference while keeping it initialized, so flipping back to
|
|
22
|
+
* `true` resumes instantly. When several consumers share the model, it
|
|
23
|
+
* runs while any is active. Defaults to `true`.
|
|
24
|
+
*/
|
|
25
|
+
active?: boolean;
|
|
26
|
+
/** Called whenever the lifecycle status changes (`loading` → `ready` / `error`). */
|
|
27
|
+
onStatusChange?: (status: HolisticTrackingStatus, error: Error | null) => void;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* One MediaPipe Holistic inference shared by every descendant. Compose the
|
|
31
|
+
* streams with `<HolisticTracker.Face>`, `<HolisticTracker.Hand hand="left">`
|
|
32
|
+
* and `<HolisticTracker.Body>`, which accept the same `TrackingAnchor`
|
|
33
|
+
* targets as the individual trackers, or read the unified result through
|
|
34
|
+
* `useHolisticTracking()`.
|
|
35
|
+
*/
|
|
36
|
+
declare const HolisticTrackerComponent: ({ children, active, onStatusChange, modelUrl, delegate, minFaceDetectionConfidence, minFacePresenceConfidence, minPoseDetectionConfidence, minPosePresenceConfidence, minHandLandmarksConfidence, outputFaceBlendshapes, targetFps, hands, analysisMaxDimension, holdMs, predictMs, }: HolisticTrackerProps) => import("react/jsx-runtime").JSX.Element;
|
|
37
|
+
/**
|
|
38
|
+
* The face stream: `face.*` anchors. The group origin is face landmark 4, the
|
|
39
|
+
* same landmark `FaceTracker` uses for its position. No head rotation
|
|
40
|
+
* (holistic has no transform matrix).
|
|
41
|
+
*/
|
|
42
|
+
declare const HolisticFace: {
|
|
43
|
+
({ children }: PropsWithChildren): import("react/jsx-runtime").JSX.Element;
|
|
44
|
+
displayName: string;
|
|
45
|
+
};
|
|
46
|
+
export type HolisticHandProps = PropsWithChildren & {
|
|
47
|
+
/** Which hand this group follows. Holistic tracks at most one of each. */
|
|
48
|
+
hand: HolisticHandSide;
|
|
49
|
+
};
|
|
50
|
+
/** One hand stream: `hand.*` anchors, group origin at the wrist. */
|
|
51
|
+
declare const HolisticHand: {
|
|
52
|
+
({ hand, children }: HolisticHandProps): import("react/jsx-runtime").JSX.Element;
|
|
53
|
+
displayName: string;
|
|
54
|
+
};
|
|
55
|
+
/** The pose stream: `body.*` anchors (incl. the synthesized `body.neck`), group origin at the head. */
|
|
56
|
+
declare const HolisticBody: {
|
|
57
|
+
({ children }: PropsWithChildren): import("react/jsx-runtime").JSX.Element;
|
|
58
|
+
displayName: string;
|
|
59
|
+
};
|
|
60
|
+
export declare const HolisticTracker: typeof HolisticTrackerComponent & {
|
|
61
|
+
Face: typeof HolisticFace;
|
|
62
|
+
Hand: typeof HolisticHand;
|
|
63
|
+
Body: typeof HolisticBody;
|
|
64
|
+
};
|
|
65
|
+
export { DEFAULT_HOLISTIC_SIGNAL_THRESHOLDS, createHolisticSignals, getHolisticSignals, isHandRaised, isPalmOpen, } from './signals';
|
|
66
|
+
export type { HolisticSignalThresholds, HolisticSignals } from './signals';
|
|
67
|
+
export { DEFAULT_HOLISTIC_TRACKER_SETTINGS, HOLISTIC_HANDS_OPTIONS, HOLISTIC_TRACKER_SETTINGS_FIELDS, patchHolisticTrackerSettings, resolveHolisticTrackerSettings, toHolisticTrackerProps, } from './settings';
|
|
68
|
+
export type { HolisticTrackerSettings } from './settings';
|
|
69
|
+
export { DEFAULT_HOLISTIC_ANALYSIS_MAX_DIMENSION, DEFAULT_HOLISTIC_HOLD_MS, DEFAULT_HOLISTIC_MODEL_URL, DEFAULT_HOLISTIC_PREDICT_MS, } from '../../models/Holistic/result';
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { HolisticHandsOption, HolisticModelOptions } from '../../types/holistic';
|
|
2
|
+
/** Flat, panel-friendly settings for `<HolisticTracker>`. */
|
|
3
|
+
export type HolisticTrackerSettings = {
|
|
4
|
+
hands: HolisticHandsOption;
|
|
5
|
+
/** Inference cap (fps); `0` = uncapped. */
|
|
6
|
+
targetFps: number;
|
|
7
|
+
analysisMaxDimension: number;
|
|
8
|
+
holdMs: number;
|
|
9
|
+
predictMs: number;
|
|
10
|
+
outputFaceBlendshapes: boolean;
|
|
11
|
+
};
|
|
12
|
+
export declare const HOLISTIC_HANDS_OPTIONS: readonly ["both", "left", "right", "none"];
|
|
13
|
+
export declare const DEFAULT_HOLISTIC_TRACKER_SETTINGS: HolisticTrackerSettings;
|
|
14
|
+
export declare const HOLISTIC_TRACKER_SETTINGS_FIELDS: [{
|
|
15
|
+
readonly key: "hands";
|
|
16
|
+
readonly label: "Hands";
|
|
17
|
+
readonly type: "select";
|
|
18
|
+
readonly options: {
|
|
19
|
+
label: "none" | "left" | "right" | "both";
|
|
20
|
+
value: "none" | "left" | "right" | "both";
|
|
21
|
+
}[];
|
|
22
|
+
}, {
|
|
23
|
+
readonly key: "targetFps";
|
|
24
|
+
readonly label: "Target FPS (0 = uncapped)";
|
|
25
|
+
readonly type: "number";
|
|
26
|
+
readonly min: 0;
|
|
27
|
+
readonly max: 60;
|
|
28
|
+
readonly step: 1;
|
|
29
|
+
}, {
|
|
30
|
+
readonly key: "analysisMaxDimension";
|
|
31
|
+
readonly label: "Analysis max px";
|
|
32
|
+
readonly type: "number";
|
|
33
|
+
readonly min: 256;
|
|
34
|
+
readonly max: 1280;
|
|
35
|
+
readonly step: 64;
|
|
36
|
+
}, {
|
|
37
|
+
readonly key: "holdMs";
|
|
38
|
+
readonly label: "Hold (ms)";
|
|
39
|
+
readonly type: "number";
|
|
40
|
+
readonly min: 0;
|
|
41
|
+
readonly max: 1000;
|
|
42
|
+
readonly step: 10;
|
|
43
|
+
}, {
|
|
44
|
+
readonly key: "predictMs";
|
|
45
|
+
readonly label: "Predict (ms)";
|
|
46
|
+
readonly type: "number";
|
|
47
|
+
readonly min: 0;
|
|
48
|
+
readonly max: 300;
|
|
49
|
+
readonly step: 10;
|
|
50
|
+
}, {
|
|
51
|
+
readonly key: "outputFaceBlendshapes";
|
|
52
|
+
readonly label: "Face blendshapes (re-inits)";
|
|
53
|
+
readonly type: "boolean";
|
|
54
|
+
}];
|
|
55
|
+
export declare const resolveHolisticTrackerSettings: (value?: Partial<HolisticTrackerSettings>) => HolisticTrackerSettings;
|
|
56
|
+
export declare const patchHolisticTrackerSettings: (current: HolisticTrackerSettings, patch: Partial<HolisticTrackerSettings>) => HolisticTrackerSettings;
|
|
57
|
+
/** Map panel settings onto `<HolisticTracker>` props (`targetFps: 0` → uncapped). */
|
|
58
|
+
export declare const toHolisticTrackerProps: (settings: HolisticTrackerSettings) => HolisticModelOptions;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { HolisticHandResult, HolisticHandSide, HolisticResult } from '../../types/holistic';
|
|
2
|
+
export type HolisticSignalThresholds = {
|
|
3
|
+
/** Mean of `mouthSmileLeft` / `mouthSmileRight` at or above which `smiling` is true. Default 0.3. */
|
|
4
|
+
smile: number;
|
|
5
|
+
/** `jawOpen` at or above which `mouthOpen` is true. Default 0.25. */
|
|
6
|
+
mouthOpen: number;
|
|
7
|
+
/** Pose landmarks below this visibility are ignored. Default 0.5. */
|
|
8
|
+
minVisibility: number;
|
|
9
|
+
/** A finger is extended when its tip is this many times farther from the wrist than its base. Default 1.25. */
|
|
10
|
+
fingerExtension: number;
|
|
11
|
+
};
|
|
12
|
+
export declare const DEFAULT_HOLISTIC_SIGNAL_THRESHOLDS: HolisticSignalThresholds;
|
|
13
|
+
/**
|
|
14
|
+
* Derived, per-frame booleans that combine the holistic streams. Plain data
|
|
15
|
+
* so it can be read in `useFrame`, logged, or driven into UI state.
|
|
16
|
+
*/
|
|
17
|
+
export type HolisticSignals = {
|
|
18
|
+
facePresent: boolean;
|
|
19
|
+
leftHandPresent: boolean;
|
|
20
|
+
rightHandPresent: boolean;
|
|
21
|
+
posePresent: boolean;
|
|
22
|
+
/** Mean smile blendshape score, 0..1 (0 without a face). */
|
|
23
|
+
smile: number;
|
|
24
|
+
/** `jawOpen` blendshape score, 0..1 (0 without a face). */
|
|
25
|
+
mouthOpen: number;
|
|
26
|
+
smiling: boolean;
|
|
27
|
+
mouthIsOpen: boolean;
|
|
28
|
+
/** Pose wrist above the same-side shoulder (tracker space, Y up). */
|
|
29
|
+
leftHandRaised: boolean;
|
|
30
|
+
rightHandRaised: boolean;
|
|
31
|
+
/** At least three of index..pinky extended on the holistic hand. */
|
|
32
|
+
leftPalmOpen: boolean;
|
|
33
|
+
rightPalmOpen: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* The combined gesture: a raised, open hand while smiling. The right hand
|
|
36
|
+
* wins when both qualify; `null` otherwise.
|
|
37
|
+
*/
|
|
38
|
+
greeting: HolisticHandSide | null;
|
|
39
|
+
};
|
|
40
|
+
export declare const createHolisticSignals: () => HolisticSignals;
|
|
41
|
+
/** True when at least three of index..pinky are extended away from the wrist. */
|
|
42
|
+
export declare const isPalmOpen: (hand: HolisticHandResult | null, fingerExtension?: number) => boolean;
|
|
43
|
+
/** True when the pose wrist on `side` is above its shoulder and both are visible enough. */
|
|
44
|
+
export declare const isHandRaised: (result: HolisticResult, side: HolisticHandSide, minVisibility?: number) => boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Compute the combined signals for a result. Pass `out` to reuse an object
|
|
47
|
+
* across frames; thresholds default to `DEFAULT_HOLISTIC_SIGNAL_THRESHOLDS`.
|
|
48
|
+
*/
|
|
49
|
+
export declare const getHolisticSignals: (result: HolisticResult, thresholds?: Partial<HolisticSignalThresholds>, out?: HolisticSignals) => HolisticSignals;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import type * as THREE from "three";
|
|
3
|
+
export type HintStageProps = {
|
|
4
|
+
/** Height of the hint's slot in the parent's units. */
|
|
5
|
+
height: number;
|
|
6
|
+
/** The hint's own span (model units) that fits `height`: see `orbitSpan`. */
|
|
7
|
+
span: number;
|
|
8
|
+
/** Draw it as a mirror image (a selfie feed). Default `false`. */
|
|
9
|
+
mirrored?: boolean;
|
|
10
|
+
/** Auto orbit: degrees to each side about the vertical (ping-pong). `0` = still. Default 0. */
|
|
11
|
+
orbit?: number;
|
|
12
|
+
/** Seconds per orbit swing. Default 6. */
|
|
13
|
+
orbitSeconds?: number;
|
|
14
|
+
/** The back-glow disc's material (`useGhostModel`'s `glowMaterial`); `null` = none. */
|
|
15
|
+
glow?: THREE.Material | null;
|
|
16
|
+
/** The glow disc's diameter × `span`. Default 1.75. */
|
|
17
|
+
glowSize?: number;
|
|
18
|
+
/** The hint's render order (the glow draws just before its band). */
|
|
19
|
+
renderOrder?: number;
|
|
20
|
+
/** The posed model, centred on the origin, facing +Z. It orbits; the glow does not. */
|
|
21
|
+
children: ReactNode;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* The stage every instruction hint stands on: scales a centred model so
|
|
25
|
+
* `span` fits `height`, mirrors it if asked, puts the back-glow disc behind
|
|
26
|
+
* it and swings it in a slow auto orbit. Use it with `useGhostModel` for a
|
|
27
|
+
* hint on your own model.
|
|
28
|
+
*/
|
|
29
|
+
export declare const HintStage: ({ height, span, mirrored, orbit, orbitSeconds, glow, glowSize, renderOrder, children, }: HintStageProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { TextLabelProps } from '../TextLabel/types';
|
|
3
|
+
import { InstructionDetector } from './useInstructionHold';
|
|
4
|
+
import * as THREE from "three";
|
|
5
|
+
/** The instructions draw in this renderOrder band, over the AR scene. */
|
|
6
|
+
export declare const INSTRUCTION_RENDER_ORDER = 2000;
|
|
7
|
+
/**
|
|
8
|
+
* Where a prompt stands: nothing usable in view (no hand / face), in view but
|
|
9
|
+
* not doing it, doing it (holding), or completed.
|
|
10
|
+
*/
|
|
11
|
+
export type InstructionStatus = "waiting" | "detected" | "holding" | "done";
|
|
12
|
+
export type InstructionSize = "sm" | "md" | "lg";
|
|
13
|
+
export type InstructionPlacement = "top" | "center" | "bottom";
|
|
14
|
+
/** `TextLabel` styling for the instruction's lines (everything but its text and placement). */
|
|
15
|
+
export type InstructionTextStyle = Partial<Omit<TextLabelProps, "text" | "lines" | "aspect" | "scale" | "position" | "rotation" | "renderOrder" | "visible" | "name">>;
|
|
16
|
+
/** What `renderText` gets for each line it draws. */
|
|
17
|
+
export type InstructionTextSlot = {
|
|
18
|
+
/** The copy (the main text, the done text, or the nudge). */
|
|
19
|
+
text: string;
|
|
20
|
+
role: "text" | "nudge";
|
|
21
|
+
/** The line's box, in screen-space world units, centred on the origin. */
|
|
22
|
+
width: number;
|
|
23
|
+
height: number;
|
|
24
|
+
/** Draw it at this render order (above the symbol). */
|
|
25
|
+
renderOrder: number;
|
|
26
|
+
/** The resolved default style (what the built-in `TextLabel` would use). */
|
|
27
|
+
style: InstructionTextStyle;
|
|
28
|
+
};
|
|
29
|
+
/** Timings and feedback of the layout. Every field is optional; `0` / `false` turns a part off. */
|
|
30
|
+
export type InstructionMotion = {
|
|
31
|
+
/** Fade-in time, seconds. Default 0.35. */
|
|
32
|
+
fadeIn?: number;
|
|
33
|
+
/** Fade-out time after completing (with `hideOnComplete`), seconds. Default 0.5. */
|
|
34
|
+
fadeOut?: number;
|
|
35
|
+
/** How far it rises while fading in, × the symbol height. Default 0.15. */
|
|
36
|
+
rise?: number;
|
|
37
|
+
/** Idle bob of the symbol, × its height. Default 0.02. */
|
|
38
|
+
bob?: number;
|
|
39
|
+
/** The completion pop: extra scale at its peak. Default 0.1. */
|
|
40
|
+
pop?: number;
|
|
41
|
+
/** The pop's duration, seconds. Default 0.3. */
|
|
42
|
+
popSeconds?: number;
|
|
43
|
+
/** The symbol's breathing pulse while nudging (extra scale). Default 0.06. */
|
|
44
|
+
nudgePulse?: number;
|
|
45
|
+
/** The success ring that expands from the symbol on completion. `false` = none. */
|
|
46
|
+
ring?: false | {
|
|
47
|
+
/** Default white. */
|
|
48
|
+
color?: THREE.ColorRepresentation;
|
|
49
|
+
/** Seconds. Default 0.6. */
|
|
50
|
+
seconds?: number;
|
|
51
|
+
/** Peak opacity. Default 0.7. */
|
|
52
|
+
opacity?: number;
|
|
53
|
+
/** Start and end size, × the symbol height. Default 0.45 → 0.95. */
|
|
54
|
+
from?: number;
|
|
55
|
+
to?: number;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
/** Proportions of the layout, relative to the size preset's height. */
|
|
59
|
+
export type InstructionLayout = {
|
|
60
|
+
/** Text line height. Default 0.3. */
|
|
61
|
+
textHeight?: number;
|
|
62
|
+
/** Gap between the symbol and the text. Default 0.1. */
|
|
63
|
+
gap?: number;
|
|
64
|
+
/** Nudge line height. Default 0.2. */
|
|
65
|
+
nudgeHeight?: number;
|
|
66
|
+
/** Maximum text width. Default 6 (and at most 90 % of the screen). */
|
|
67
|
+
textWidth?: number;
|
|
68
|
+
/** Distance from the screen edge for top / bottom placement, × the screen height. Default 0.06. */
|
|
69
|
+
edgeMargin?: number;
|
|
70
|
+
};
|
|
71
|
+
/** The layout and copy options every instruction shares (all optional). */
|
|
72
|
+
export type InstructionOptions = {
|
|
73
|
+
/** Copy shown once completed, while it fades out. Default: keep `text`. */
|
|
74
|
+
doneText?: string;
|
|
75
|
+
/** Second line after `nudgeAfterMs` with nothing in view; `null` = no nudge. */
|
|
76
|
+
nudgeText?: string | null;
|
|
77
|
+
/** How long with nothing in view before the nudge (ms). Default 3000. */
|
|
78
|
+
nudgeAfterMs?: number;
|
|
79
|
+
/**
|
|
80
|
+
* `"sm"`, `"md"` (default) or `"lg"`: the symbol is 10 / 14 / 19 % of the
|
|
81
|
+
* screen height; or your own fraction of the screen height (e.g. `0.22`).
|
|
82
|
+
*/
|
|
83
|
+
size?: InstructionSize | number;
|
|
84
|
+
/** Where it stands: `"top"`, `"center"` (default) or `"bottom"`. */
|
|
85
|
+
placement?: InstructionPlacement;
|
|
86
|
+
/** Shift from the placement, in half-screens (`[0.5, 0]` = a quarter screen right). */
|
|
87
|
+
offset?: [number, number];
|
|
88
|
+
/** Text colour. Default white, with a soft dark shadow so it reads on any camera feed. */
|
|
89
|
+
color?: string;
|
|
90
|
+
/** `TextLabel` styling for the text, merged over the default (font, weight, shadow, stroke …). */
|
|
91
|
+
textStyle?: InstructionTextStyle;
|
|
92
|
+
/** Styling for the nudge line, merged over `textStyle` (default: normal weight). */
|
|
93
|
+
nudgeTextStyle?: InstructionTextStyle;
|
|
94
|
+
/**
|
|
95
|
+
* Draw the text yourself: return any R3F node for a line (use transparent
|
|
96
|
+
* materials — the layout fades every mesh under it). Default: a `TextLabel`.
|
|
97
|
+
*/
|
|
98
|
+
renderText?: (slot: InstructionTextSlot) => ReactNode;
|
|
99
|
+
/** Timings and feedback (fade, rise, bob, pop, nudge pulse, success ring). */
|
|
100
|
+
motion?: InstructionMotion;
|
|
101
|
+
/** Proportions (text height, gap, widths, edge margin). */
|
|
102
|
+
layout?: InstructionLayout;
|
|
103
|
+
/** Fade out once completed. Default `true`. */
|
|
104
|
+
hideOnComplete?: boolean;
|
|
105
|
+
/** Called once with the first status, then on every change (app logic, announcements). */
|
|
106
|
+
onStatusChange?: (status: InstructionStatus) => void;
|
|
107
|
+
};
|
|
108
|
+
export type InstructionCueProps = InstructionOptions & {
|
|
109
|
+
/** Instruction copy. */
|
|
110
|
+
text: string;
|
|
111
|
+
/** The detector driving it: its hold status and whether something usable is in view. */
|
|
112
|
+
detector: Pick<InstructionDetector, "status" | "isInView">;
|
|
113
|
+
/** The symbol (hand, face, an image …), drawn `height` tall in the given renderOrder band. */
|
|
114
|
+
symbol: (height: number, renderOrder: number) => ReactNode;
|
|
115
|
+
/** The symbol's slot height relative to the size preset (a standing figure is taller). Default 1. */
|
|
116
|
+
symbolAspect?: number;
|
|
117
|
+
};
|
|
118
|
+
/** The default text style: bold, centred, shrink-to-fit, with a soft dark shadow. */
|
|
119
|
+
export declare const INSTRUCTION_TEXT_STYLE: InstructionTextStyle;
|
|
120
|
+
/**
|
|
121
|
+
* The minimal instruction layout: the symbol stacked over the copy, a nudge
|
|
122
|
+
* line when nothing is in view, a status report, and on completion a small
|
|
123
|
+
* pop, a ring and (optionally) a fade-out. Mount inside a `ScreenSpaceUI`
|
|
124
|
+
* (`<Instruction>` does).
|
|
125
|
+
*/
|
|
126
|
+
export declare const InstructionCue: ({ text, doneText, nudgeText, nudgeAfterMs, size, placement, offset, color, textStyle, nudgeTextStyle, renderText, motion, layout, hideOnComplete, onStatusChange, detector, symbol, symbolAspect, }: InstructionCueProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hold-to-complete timing for a gesture prompt: the gesture must be held for
|
|
3
|
+
* `holdMs` to count, a dropout shorter than `graceMs` (a missed frame, a
|
|
4
|
+
* blink of the tracker) does not restart it, and once done it stays done
|
|
5
|
+
* until reset. Pure — feed it one `matched` sample per frame.
|
|
6
|
+
*/
|
|
7
|
+
export type GestureHoldStatus = "waiting" | "holding" | "done";
|
|
8
|
+
export type GestureHoldState = {
|
|
9
|
+
status: GestureHoldStatus;
|
|
10
|
+
/** When the current hold began (ms), or `null`. */
|
|
11
|
+
since: number | null;
|
|
12
|
+
/** Last time the gesture matched (ms), or `null`. */
|
|
13
|
+
lastMatch: number | null;
|
|
14
|
+
/** 0..1 of `holdMs`; 1 once done. */
|
|
15
|
+
progress: number;
|
|
16
|
+
};
|
|
17
|
+
export declare const GESTURE_HOLD_DEFAULT_MS = 400;
|
|
18
|
+
export declare const GESTURE_HOLD_GRACE_MS = 150;
|
|
19
|
+
export declare const createGestureHoldState: () => GestureHoldState;
|
|
20
|
+
export declare const stepGestureHold: (state: GestureHoldState, matched: boolean, nowMs: number, holdMs?: number, graceMs?: number) => GestureHoldState;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import * as THREE from "three";
|
|
2
|
+
/**
|
|
3
|
+
* The "ghost" look shared by the instruction hints (hand and face): a soft
|
|
4
|
+
* white matcap, translucent where the surface faces the viewer and bright at
|
|
5
|
+
* the silhouette, a depth pre-pass so only the front surface shows, and a soft
|
|
6
|
+
* dark halo so the hint reads on light backgrounds.
|
|
7
|
+
*/
|
|
8
|
+
/** A soft white studio matcap, generated (no texture download): just enough shading to read form. */
|
|
9
|
+
export declare const createHintMatcap: () => THREE.Texture;
|
|
10
|
+
/** Room for a skeleton's bones in the highlight table (a Mixamo rig has 68). */
|
|
11
|
+
export declare const GHOST_MAX_BONES = 96;
|
|
12
|
+
export type GhostOptions = {
|
|
13
|
+
/** Tint (multiplies the matcap). Default white. */
|
|
14
|
+
color?: THREE.ColorRepresentation;
|
|
15
|
+
/** Opacity where the surface faces the viewer. Default 0.5. */
|
|
16
|
+
core?: number;
|
|
17
|
+
/** Opacity at the silhouette. Default 0.95. */
|
|
18
|
+
rim?: number;
|
|
19
|
+
/** How far the rim is pushed toward white (0..1). Default 0.6. */
|
|
20
|
+
whiten?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Multiply by the model's `COLOR_0` (a wrist fade, a cheek blush). Default
|
|
23
|
+
* `true`; pass `false` for a model without vertex colours, which WebGL would
|
|
24
|
+
* otherwise read as black. (`useGhostModel` picks this for you.)
|
|
25
|
+
*/
|
|
26
|
+
vertexColors?: boolean;
|
|
27
|
+
/** Opacity highlighted parts reach. Default 0.9. */
|
|
28
|
+
highlightOpacity?: number;
|
|
29
|
+
/** How far highlighted parts are pushed toward white (0..1). Default 0.55. */
|
|
30
|
+
highlightWhiten?: number;
|
|
31
|
+
};
|
|
32
|
+
export type GhostUniforms = {
|
|
33
|
+
uHighlight: {
|
|
34
|
+
value: Float32Array;
|
|
35
|
+
};
|
|
36
|
+
uHighlightGain: {
|
|
37
|
+
value: number;
|
|
38
|
+
};
|
|
39
|
+
uCore: {
|
|
40
|
+
value: number;
|
|
41
|
+
};
|
|
42
|
+
uRim: {
|
|
43
|
+
value: number;
|
|
44
|
+
};
|
|
45
|
+
uWhiten: {
|
|
46
|
+
value: number;
|
|
47
|
+
};
|
|
48
|
+
uHighlightOpacity: {
|
|
49
|
+
value: number;
|
|
50
|
+
};
|
|
51
|
+
uHighlightWhiten: {
|
|
52
|
+
value: number;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* The ghost material: faint where the surface faces the viewer, bright at the
|
|
57
|
+
* silhouette (a fresnel rim), times the model's `COLOR_0` (a wrist fade, a
|
|
58
|
+
* cheek blush). Skinned parts can be lit brighter per bone (`uHighlight`: a
|
|
59
|
+
* weight per skeleton bone, blended by the skin weights). Opacities and the
|
|
60
|
+
* rim whitening are uniforms, so every tint shares one shader program. Pair
|
|
61
|
+
* with a depth pre-pass so only the front surface shows.
|
|
62
|
+
*/
|
|
63
|
+
export declare const createGhostMaterial: (matcap: THREE.Texture, options?: GhostOptions) => THREE.MeshMatcapMaterial;
|
|
64
|
+
export type HaloOptions = {
|
|
65
|
+
/** How far the halo reaches out from the surface, in the mesh's own units. */
|
|
66
|
+
width: number;
|
|
67
|
+
/** Halo colour. Default a deep slate, `#0f172a`. */
|
|
68
|
+
color?: THREE.ColorRepresentation;
|
|
69
|
+
/** Peak opacity at the silhouette. Default 0.3. */
|
|
70
|
+
opacity?: number;
|
|
71
|
+
/** Multiply by the model's `COLOR_0`. Default `true`. */
|
|
72
|
+
vertexColors?: boolean;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* A soft dark halo: the surface pushed out along its (skinned / morphed)
|
|
76
|
+
* normals by `width` model units and drawn from the back faces, fading to
|
|
77
|
+
* nothing at the outer edge. Drawn after the depth pre-pass, so only the band
|
|
78
|
+
* outside the silhouette shows. Width, colour and opacity are uniforms
|
|
79
|
+
* (`userData.halo`), so changing them does not recompile.
|
|
80
|
+
*/
|
|
81
|
+
export declare const createHaloMaterial: ({ width, color, opacity, vertexColors, }: HaloOptions) => THREE.MeshMatcapMaterial;
|
|
82
|
+
/** Writes depth only, drawn just before the hint so its hidden (back) layers are culled. */
|
|
83
|
+
export declare const createDepthPrepassMaterial: () => THREE.MeshBasicMaterial;
|
|
84
|
+
/** `userData` key marking a twin mesh: the depth pre-pass or the halo (the original is the hint). */
|
|
85
|
+
export declare const HINT_TWIN = "instructionHintTwin";
|
|
86
|
+
export type HintTwinKind = "prepass" | "halo";
|
|
87
|
+
/** A hint mesh and its two twins (same geometry, skeleton and morph targets). */
|
|
88
|
+
export type HintMeshSet = {
|
|
89
|
+
mesh: THREE.Mesh;
|
|
90
|
+
twins: THREE.Mesh[];
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Adds a depth-only twin (so a see-through hint shows its front surface, not
|
|
94
|
+
* every layer behind it) and a halo twin next to every mesh under `root`.
|
|
95
|
+
* Returns the sets, so callers can copy morph weights onto the twins.
|
|
96
|
+
*/
|
|
97
|
+
export declare const addHintTwins: (root: THREE.Object3D) => HintMeshSet[];
|
|
98
|
+
/**
|
|
99
|
+
* Gives every mesh under `root` its material and draw order, in the same
|
|
100
|
+
* renderOrder band: depth pre-pass → halo (outside the silhouette) → the hint.
|
|
101
|
+
*/
|
|
102
|
+
export declare const assignHintMaterials: (root: THREE.Object3D, { main, prepass, halo, showHalo, renderOrder, }: {
|
|
103
|
+
main: (mesh: THREE.Mesh) => THREE.Material;
|
|
104
|
+
prepass: THREE.Material;
|
|
105
|
+
halo: THREE.Material;
|
|
106
|
+
showHalo: boolean;
|
|
107
|
+
renderOrder?: number;
|
|
108
|
+
}) => void;
|
|
109
|
+
/**
|
|
110
|
+
* The square span (display units) that holds `points` while they swing about
|
|
111
|
+
* the vertical through `middle` by ±`amplitude` radians: the widest reach
|
|
112
|
+
* either side of the middle over the swing.
|
|
113
|
+
*/
|
|
114
|
+
export declare const orbitSpan: (points: THREE.Vector3[], middle: THREE.Vector3, amplitude: number) => number;
|
|
115
|
+
/** Smoothstep easing used by the hint loops. */
|
|
116
|
+
export declare const ease: (x: number) => number;
|
|
117
|
+
/**
|
|
118
|
+
* A soft back-glow: a radial gradient on a camera-facing disc, drawn BEHIND
|
|
119
|
+
* the hint (before its depth pre-pass) so it shows only around the silhouette
|
|
120
|
+
* and faintly through the translucent ghost — never as inner layers. White by
|
|
121
|
+
* default; opacity is the material's, so a fade multiplies it as usual.
|
|
122
|
+
*/
|
|
123
|
+
export declare const createGlowMaterial: (color?: THREE.ColorRepresentation, opacity?: number) => THREE.MeshBasicMaterial;
|
|
124
|
+
/** Disposes a material made by {@link createGlowMaterial} (and its gradient texture). */
|
|
125
|
+
export declare const disposeGlowMaterial: (material: THREE.MeshBasicMaterial) => void;
|
|
126
|
+
/** Whether every mesh under `root` carries a vertex colour attribute (`COLOR_0`). */
|
|
127
|
+
export declare const hasVertexColors: (root: THREE.Object3D) => boolean;
|
|
128
|
+
export declare const readClipQuaternions: (clip: THREE.AnimationClip) => Map<string, THREE.Quaternion>;
|
|
129
|
+
export declare const readClipPositions: (clip: THREE.AnimationClip) => Map<string, THREE.Vector3>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as THREE from "three";
|
|
2
|
+
/** Poses a model somewhere between two states: `apply(0)` = from, `apply(1)` = to. */
|
|
3
|
+
export type HintBlend = {
|
|
4
|
+
apply: (amount: number) => void;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Blends every node a pair of single-key clips animates (their first
|
|
8
|
+
* `.quaternion` key, and `.position` for the nodes a clip moves, like the hips
|
|
9
|
+
* of a squat; nodes found by name under `root`) from `from` to `to`.
|
|
10
|
+
* A missing clip stands for the model's current (rest) pose. For a hint on any
|
|
11
|
+
* rigged model: `apply(sampleHintLoop(t).amount)` each frame.
|
|
12
|
+
*/
|
|
13
|
+
export declare const createClipBlend: (root: THREE.Object3D, from?: THREE.AnimationClip, to?: THREE.AnimationClip) => HintBlend;
|
|
14
|
+
/**
|
|
15
|
+
* Blends morph targets by name on `meshes` (every other target held at 0):
|
|
16
|
+
* `apply(amount)` sets each named target to its weight × `amount`. Meshes
|
|
17
|
+
* without a target skip it.
|
|
18
|
+
*/
|
|
19
|
+
export declare const createMorphBlend: (meshes: readonly THREE.Mesh[], targets: Record<string, number>) => HintBlend;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { GhostOptions } from './ghost';
|
|
2
|
+
import type * as THREE from "three";
|
|
3
|
+
/** The soft dark band around a hint's silhouette (reads on light camera feeds). */
|
|
4
|
+
export type HintHalo = {
|
|
5
|
+
/** Reach out from the surface, in the model's units (cm for the example models). */
|
|
6
|
+
width?: number;
|
|
7
|
+
/** Default `#0f172a` (deep slate). */
|
|
8
|
+
color?: THREE.ColorRepresentation;
|
|
9
|
+
/** Peak opacity. Default 0.3. */
|
|
10
|
+
opacity?: number;
|
|
11
|
+
};
|
|
12
|
+
/** The soft light disc behind a hint; it brightens as the pose forms. */
|
|
13
|
+
export type HintGlow = {
|
|
14
|
+
/** Default white. */
|
|
15
|
+
color?: THREE.ColorRepresentation;
|
|
16
|
+
/** Disc diameter × the hint's fitted span. */
|
|
17
|
+
size?: number;
|
|
18
|
+
/** Opacity while relaxed. Default 0.5. */
|
|
19
|
+
idle?: number;
|
|
20
|
+
/** Opacity at the full pose. Default 0.85. */
|
|
21
|
+
full?: number;
|
|
22
|
+
};
|
|
23
|
+
/** How the parts that make the pose (key fingers, the posing arms) stand out. */
|
|
24
|
+
export type HintHighlight = {
|
|
25
|
+
/** Opacity they reach. Default 0.9. */
|
|
26
|
+
opacity?: number;
|
|
27
|
+
/** How far they are pushed toward white (0..1). Default 0.55. */
|
|
28
|
+
whiten?: number;
|
|
29
|
+
/** Share of the highlight already shown while relaxed (0..1). Default 0.25. */
|
|
30
|
+
idle?: number;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Everything about how a hint model is drawn. Every hint takes a `look`; it is
|
|
34
|
+
* merged over that hint's default (`HAND_HINT_LOOK`, `FACE_HINT_LOOK`,
|
|
35
|
+
* `BODY_HINT_LOOK`), so you only write what you change. `false` turns a layer off.
|
|
36
|
+
*
|
|
37
|
+
* ```tsx
|
|
38
|
+
* <HandGestureHint look={{ ghost: { color: "#9be7ff", core: 0.35 }, halo: false }} … />
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export type HintLook = {
|
|
42
|
+
/** The base ghost every part gets: tint, opacities, rim whitening. */
|
|
43
|
+
ghost?: GhostOptions;
|
|
44
|
+
/**
|
|
45
|
+
* Per-part overrides by the model's material name, merged over `ghost`
|
|
46
|
+
* (e.g. `{ iris: { color: "#2a2732", core: 0.9 } }`). `null` removes a default tint.
|
|
47
|
+
*/
|
|
48
|
+
parts?: Record<string, GhostOptions | null>;
|
|
49
|
+
halo?: HintHalo | false;
|
|
50
|
+
glow?: HintGlow | false;
|
|
51
|
+
highlight?: HintHighlight | false;
|
|
52
|
+
/** Your own matcap (shading) texture. Default: a generated soft white studio matcap. */
|
|
53
|
+
matcap?: THREE.Texture;
|
|
54
|
+
/**
|
|
55
|
+
* Replaces the ghost on every part (any three.js material; the halo and glow
|
|
56
|
+
* still apply unless turned off). Highlights need the ghost material.
|
|
57
|
+
*/
|
|
58
|
+
material?: THREE.Material;
|
|
59
|
+
};
|
|
60
|
+
/** A look with every layer resolved (what `useGhostModel` draws). */
|
|
61
|
+
export type ResolvedHintLook = {
|
|
62
|
+
ghost: GhostOptions;
|
|
63
|
+
parts: Record<string, GhostOptions>;
|
|
64
|
+
halo: Required<HintHalo> | false;
|
|
65
|
+
glow: Required<HintGlow> | false;
|
|
66
|
+
highlight: Required<HintHighlight> | false;
|
|
67
|
+
matcap?: THREE.Texture;
|
|
68
|
+
material?: THREE.Material;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Merges `over` onto `base` layer by layer (`ghost`, each part, `halo`,
|
|
72
|
+
* `glow`, `highlight` field by field; `false` turns a layer off, `null`
|
|
73
|
+
* drops a part's tint) and fills the remaining defaults.
|
|
74
|
+
*/
|
|
75
|
+
export declare const mergeHintLook: (base: HintLook, over?: HintLook) => ResolvedHintLook;
|
|
76
|
+
/**
|
|
77
|
+
* A key for a look's plain values (textures and materials are compared by
|
|
78
|
+
* identity separately), so an inline `look` object does not rebuild materials
|
|
79
|
+
* every render.
|
|
80
|
+
*/
|
|
81
|
+
export declare const hintLookKey: (look: HintLook | undefined) => string;
|