@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,273 @@
|
|
|
1
|
+
import * as THREE from "three";
|
|
2
|
+
/**
|
|
3
|
+
* Face reprojection (#199): the live camera face, moved into a face model's
|
|
4
|
+
* own UV layout so the model can wear it as a texture. Two steps:
|
|
5
|
+
*
|
|
6
|
+
* 1. **Unwrap** — the camera face is laid out flat in the canonical face UV
|
|
7
|
+
* layout (`CANONICAL_FACE_UVS`): every landmark samples the camera image
|
|
8
|
+
* where the tracker found it. The eye and mouth openings, holes in the
|
|
9
|
+
* canonical surface, are filled so the eyes and the inside of the mouth
|
|
10
|
+
* come along.
|
|
11
|
+
* 2. **Remap** — every vertex of the model is bound once to its closest point
|
|
12
|
+
* on that (filled) canonical surface; drawn in its own UV layout, it reads
|
|
13
|
+
* the unwrapped face there.
|
|
14
|
+
*
|
|
15
|
+
* This file is the pure part (geometry, per-frame weights, bindings, the
|
|
16
|
+
* material patch); `FaceReprojector` renders it.
|
|
17
|
+
*/
|
|
18
|
+
/** An opening in the canonical face surface, filled by the unwrap. */
|
|
19
|
+
export type FaceOpening = "leftEye" | "rightEye" | "mouth";
|
|
20
|
+
/** The canonical face surface with its openings filled, laid out for the unwrap. */
|
|
21
|
+
export type FaceUnwrapMesh = {
|
|
22
|
+
/** Vertices: the 468 landmarks, then one centre per opening. */
|
|
23
|
+
count: number;
|
|
24
|
+
/** Canonical head frame, cm (a centre: the average of its ring). */
|
|
25
|
+
positions: Float32Array;
|
|
26
|
+
/** Canonical UV, v up (a centre: the average of its ring). */
|
|
27
|
+
uvs: Float32Array;
|
|
28
|
+
/** Triangles: the canonical face, then the opening fans. */
|
|
29
|
+
index: Uint16Array;
|
|
30
|
+
/** Triangles of the canonical face itself (the fans follow). */
|
|
31
|
+
faceTriangleCount: number;
|
|
32
|
+
/** Per vertex: 0 on the outer edge of the face, 1 inside (the unwrap fades out at the edge). */
|
|
33
|
+
feather: Float32Array;
|
|
34
|
+
/**
|
|
35
|
+
* Each opening: its landmark ring (in loop order), its centre vertex and its
|
|
36
|
+
* fan's triangles (`[first, count]` in `index / 3`).
|
|
37
|
+
*/
|
|
38
|
+
openings: Record<FaceOpening, {
|
|
39
|
+
ring: Int32Array;
|
|
40
|
+
centre: number;
|
|
41
|
+
triangles: [number, number];
|
|
42
|
+
}>;
|
|
43
|
+
};
|
|
44
|
+
/** A landmark as the face tracker reports it: normalized image x / y (0..1, y down), z in x units. */
|
|
45
|
+
export type FaceImageLandmark = {
|
|
46
|
+
x: number;
|
|
47
|
+
y: number;
|
|
48
|
+
z?: number;
|
|
49
|
+
};
|
|
50
|
+
/** The canonical face surface with its eye and mouth openings filled (built once). */
|
|
51
|
+
export declare const getFaceUnwrapMesh: () => FaceUnwrapMesh;
|
|
52
|
+
export type FaceUnwrapFrameOptions = {
|
|
53
|
+
/**
|
|
54
|
+
* How squarely a patch of skin must face the camera to be kept, as the
|
|
55
|
+
* cosine of its turn: fully below the first value (a cheek seen edge-on, its
|
|
56
|
+
* pixels smeared), fully kept above the second. Default `[0.05, 0.3]`.
|
|
57
|
+
*/
|
|
58
|
+
facing?: readonly [number, number];
|
|
59
|
+
/**
|
|
60
|
+
* Drop the landmarks outside the image (weight 0): a point past the edge
|
|
61
|
+
* samples the clamped edge pixels, not the face. Each opening's centre
|
|
62
|
+
* follows its ring. `FaceReprojector` also drops every sample past the
|
|
63
|
+
* edge in its shader, so the cut is exact. Default `false`;
|
|
64
|
+
* `FaceReprojector` turns it on with `mirrorFill`, so the mirror twin fills
|
|
65
|
+
* those points.
|
|
66
|
+
*/
|
|
67
|
+
inFrame?: boolean;
|
|
68
|
+
};
|
|
69
|
+
/** The default `facing` of the unwrap. */
|
|
70
|
+
export declare const FACE_UNWRAP_FACING: readonly [number, number];
|
|
71
|
+
/**
|
|
72
|
+
* How squarely each unwrap vertex faces the camera, 0..1, for the
|
|
73
|
+
* `getFaceUnwrapMesh().count` (471) vertices: each landmark takes the mean
|
|
74
|
+
* turn of its triangles (on-screen area over 3D area, the cosine of the turn
|
|
75
|
+
* away from the camera), through `smoothstep(facing[0], facing[1], cos)`; each
|
|
76
|
+
* opening's centre takes the mean of its ring. A mirrored image gives the same
|
|
77
|
+
* values (the face's side is the one most of its area shows). `aspect` is the
|
|
78
|
+
* image's width / height; `out` (at least 471 long) is written in place (no
|
|
79
|
+
* allocation). Throws when `out` or `landmarks` is too short.
|
|
80
|
+
*/
|
|
81
|
+
export declare const writeFaceFacing: (landmarks: ArrayLike<FaceImageLandmark>, aspect: number, facing: readonly [number, number], out: Float32Array) => void;
|
|
82
|
+
/**
|
|
83
|
+
* One frame of the unwrap: where each unwrap vertex samples the camera image
|
|
84
|
+
* (`cameraUv`, texture space: x right, y up) and how much of it to keep
|
|
85
|
+
* (`weight`: the edge feather times `writeFaceFacing`, 0 outside the image
|
|
86
|
+
* with `inFrame`). The landmarks are the tracker's for this frame, in the
|
|
87
|
+
* camera image's own space (a mirrored webcam is mirrored before tracking,
|
|
88
|
+
* so they match the camera texture as it is). `aspect` is the camera image's
|
|
89
|
+
* width / height. `cameraUv` (942) and `weight` (471) are written in place.
|
|
90
|
+
*/
|
|
91
|
+
export declare const writeFaceUnwrapFrame: (landmarks: ArrayLike<FaceImageLandmark>, aspect: number, { facing, inFrame }: FaceUnwrapFrameOptions, cameraUv: Float32Array, weight: Float32Array) => void;
|
|
92
|
+
/**
|
|
93
|
+
* The unwrap mesh's UVs in another per-landmark layout (`uvs`: ≥ 468 `[u, v]`
|
|
94
|
+
* pairs, v up), with each opening's centre at the mean of its ring, so the
|
|
95
|
+
* same mesh unwraps into that layout. `CANONICAL_FACE_UVS` (the default)
|
|
96
|
+
* gives `getFaceUnwrapMesh().uvs`; a layout it returned gives itself back.
|
|
97
|
+
* Cached per array (shared: do not mutate).
|
|
98
|
+
*/
|
|
99
|
+
export declare const getFaceUnwrapUvs: (uvs?: ArrayLike<number>) => Float32Array;
|
|
100
|
+
/**
|
|
101
|
+
* Each unwrap vertex's mirror twin, the vertex at `(−x, y, z)`: the 468
|
|
102
|
+
* landmarks by `FACE_ATLAS_MIRROR` (exact, its own inverse), the eye centres
|
|
103
|
+
* swapped and the mouth centre on itself. Shared: do not mutate.
|
|
104
|
+
*/
|
|
105
|
+
export declare const getFaceUnwrapMirror: () => Int32Array;
|
|
106
|
+
/**
|
|
107
|
+
* `mirrorFill` fills a point from its mirror twin only where the twin's
|
|
108
|
+
* weight is clearly better: not at all below the first difference, fully
|
|
109
|
+
* above the second (smoothstep between). Small differences (a face turned a
|
|
110
|
+
* few degrees, the two halves' triangulation) keep the point's own pixels,
|
|
111
|
+
* so asymmetric details (a mole, a parting) are not copied across.
|
|
112
|
+
*/
|
|
113
|
+
export declare const FACE_MIRROR_FILL_RAMP: readonly [number, number];
|
|
114
|
+
/**
|
|
115
|
+
* The second unwrap draw of `mirrorFill`, from one frame of the first
|
|
116
|
+
* (`writeFaceUnwrapFrame`'s `cameraUv` and `weight`): each vertex samples its
|
|
117
|
+
* mirror twin's camera point, weighted to fill only what the first draw left
|
|
118
|
+
* uncovered. Drawn "under" the first (premultiplied, `dst + (1 − dst.a)·src`),
|
|
119
|
+
* a vertex ends at `w + r·(w_twin − w)`, `r` = `FACE_MIRROR_FILL_RAMP` of the
|
|
120
|
+
* difference (0 where its own weight is the better one):
|
|
121
|
+
* `w′ = r·(w_twin − w) / (1 − w)`. A face seen square on is all but unchanged.
|
|
122
|
+
*/
|
|
123
|
+
export declare const writeFaceMirrorFill: (cameraUv: Float32Array, weight: Float32Array, mirrorCameraUv: Float32Array, mirrorWeight: Float32Array) => void;
|
|
124
|
+
/**
|
|
125
|
+
* A binding's per-vertex UV in another unwrap layout: where each vertex reads
|
|
126
|
+
* the unwrap of a `FaceReprojector` made with `uvs` (e.g. `FACE_ATLAS_UVS`).
|
|
127
|
+
* `binding.canonicalUv` is always the canonical layout; this is the same
|
|
128
|
+
* surface point (the barycentric blend of its bound triangle's corners) in
|
|
129
|
+
* `uvs` (≥ 468 `[u, v]` pairs per landmark, or a `getFaceUnwrapUvs` result).
|
|
130
|
+
* Unbound vertices read `(0, 0)`. Writes `out` (2 per vertex; made when not
|
|
131
|
+
* given) and returns it. Use it as the `faceUv` attribute of
|
|
132
|
+
* `patchFaceReprojectionMaterial(..., { attributes: true })` with that
|
|
133
|
+
* reprojector's `unwrapTexture`.
|
|
134
|
+
*/
|
|
135
|
+
export declare const writeFaceReprojectionLayoutUv: (binding: Pick<FaceReprojectionBinding, "triangle" | "weights">, uvs: ArrayLike<number>, out?: Float32Array) => Float32Array;
|
|
136
|
+
/** Where each vertex of a face model reads the unwrapped face. Arrays are per vertex. */
|
|
137
|
+
export type FaceReprojectionBinding = {
|
|
138
|
+
/** The bound triangle of the filled canonical face (`getFaceUnwrapMesh().index / 3`), or -1. */
|
|
139
|
+
triangle: Int32Array;
|
|
140
|
+
/** Barycentric weights of its three corners (flat, 3 per vertex). */
|
|
141
|
+
weights: Float32Array;
|
|
142
|
+
/**
|
|
143
|
+
* The canonical UV of its closest point on the (filled) canonical face
|
|
144
|
+
* (flat, v up). Always the canonical layout (`CANONICAL_FACE_UVS`), whatever
|
|
145
|
+
* a reprojector's `uvs`: `writeFaceReprojectionLayoutUv` gives the same
|
|
146
|
+
* point in another layout.
|
|
147
|
+
*/
|
|
148
|
+
canonicalUv: Float32Array;
|
|
149
|
+
/** How much of the camera face it takes, 0..1 (fading with distance from that surface). */
|
|
150
|
+
coverage: Float32Array;
|
|
151
|
+
/** Signed distance from that surface point, cm (+ = in front of the face). */
|
|
152
|
+
distance: Float32Array;
|
|
153
|
+
};
|
|
154
|
+
export type FaceReprojectionBindingOptions = {
|
|
155
|
+
/**
|
|
156
|
+
* How far from the canonical face surface (cm, either side) a vertex still
|
|
157
|
+
* takes the camera face: fully up to the first value, not at all beyond the
|
|
158
|
+
* second. Default `[1, 3]` — a character's own proportions (a bigger nose, a
|
|
159
|
+
* deeper brow) still read the face; the back of the head does not. The
|
|
160
|
+
* unwrap already fades out at the edge of the face.
|
|
161
|
+
*/
|
|
162
|
+
falloff?: readonly [number, number];
|
|
163
|
+
/**
|
|
164
|
+
* Which filled openings the vertices may bind to (the face skin itself
|
|
165
|
+
* always). Default all. Skin with eyelids that a blink morph closes should
|
|
166
|
+
* leave the eyes out (`["mouth"]`) — else a lid's edge, sitting in the eye
|
|
167
|
+
* opening, wears the eye; eyeballs take `["leftEye", "rightEye"]`.
|
|
168
|
+
*/
|
|
169
|
+
openings?: readonly FaceOpening[];
|
|
170
|
+
};
|
|
171
|
+
/** The closest point on a triangle mesh: its triangle (or -1), barycentric weights, squared distance. */
|
|
172
|
+
export type ClosestPoint = {
|
|
173
|
+
triangle: number;
|
|
174
|
+
u: number;
|
|
175
|
+
v: number;
|
|
176
|
+
w: number;
|
|
177
|
+
d2: number;
|
|
178
|
+
};
|
|
179
|
+
/**
|
|
180
|
+
* A closest-point search over a triangle mesh (`positions` flat xyz,
|
|
181
|
+
* `index` flat triangles; `skip[t]` leaves a triangle out). Triangles are
|
|
182
|
+
* bucketed in a uniform grid by their bounding boxes; a query visits cells in
|
|
183
|
+
* growing shells around the point and stops once no unvisited cell can be
|
|
184
|
+
* closer than the best hit — near-constant time per query instead of a scan of
|
|
185
|
+
* every triangle (a 7 500-vertex transfer onto a 4 600-triangle head: ~400 ms
|
|
186
|
+
* → a few ms). The returned function fills `out`.
|
|
187
|
+
*/
|
|
188
|
+
export declare const createClosestPointSearch: (positions: Float32Array, index: ArrayLike<number>, skip?: Uint8Array) => (px: number, py: number, pz: number, out: ClosestPoint) => ClosestPoint;
|
|
189
|
+
/**
|
|
190
|
+
* Binds a face model's vertices (canonical head frame, cm, flat) to the
|
|
191
|
+
* filled canonical face: each takes the canonical UV of its closest surface
|
|
192
|
+
* point. Pure; run once per mesh.
|
|
193
|
+
*/
|
|
194
|
+
export declare const bindFaceReprojection: (positions: ArrayLike<number>, { falloff, openings }?: FaceReprojectionBindingOptions) => FaceReprojectionBinding;
|
|
195
|
+
/**
|
|
196
|
+
* Which part of the camera face to take: the whole face, or only the eyes
|
|
197
|
+
* and / or the mouth (soft ellipses around the openings, eyelids and lips
|
|
198
|
+
* included) — the classic "your eyes and mouth on a character".
|
|
199
|
+
*/
|
|
200
|
+
export type FaceReprojectionRegion = "face" | "eyes" | "mouth" | "eyesAndMouth";
|
|
201
|
+
/**
|
|
202
|
+
* The region ellipses in the canonical head frame (cm): `[x, y, radiusX,
|
|
203
|
+
* radiusY]` for the left eye, the right eye and the mouth.
|
|
204
|
+
*/
|
|
205
|
+
export declare const faceReprojectionRegionEllipses: () => [number, number, number, number][];
|
|
206
|
+
/** Region switches `[leftEye, rightEye, mouth, all]` for a `FaceReprojectionRegion`. */
|
|
207
|
+
export declare const faceReprojectionRegionMask: (region: FaceReprojectionRegion) => [number, number, number, number];
|
|
208
|
+
/**
|
|
209
|
+
* How a model's material shows the reprojected face:
|
|
210
|
+
* - `"unlit"` (default) — as it is in the camera image (already lit by the
|
|
211
|
+
* room), so it reads as the real face;
|
|
212
|
+
* - `"lit"` — as the material's base colour, shaded by the scene lights.
|
|
213
|
+
*/
|
|
214
|
+
export type FaceReprojectionShading = "unlit" | "lit";
|
|
215
|
+
/** The uniforms a patched material reads (shared, so one update reaches every material). */
|
|
216
|
+
export type FaceReprojectionUniforms = {
|
|
217
|
+
faceReprojectionMap: {
|
|
218
|
+
value: THREE.Texture | null;
|
|
219
|
+
};
|
|
220
|
+
/** 0..1, how much of the camera face shows. */
|
|
221
|
+
faceReprojectionAmount: {
|
|
222
|
+
value: number;
|
|
223
|
+
};
|
|
224
|
+
/** 1 = lit, 0 = unlit. */
|
|
225
|
+
faceReprojectionLit: {
|
|
226
|
+
value: number;
|
|
227
|
+
};
|
|
228
|
+
/** 0..1, skin fill beyond the face (materials patched with `fill`; needs a mipmapped map). */
|
|
229
|
+
faceReprojectionFill: {
|
|
230
|
+
value: number;
|
|
231
|
+
};
|
|
232
|
+
/** cm from the face where the fill has faded out (it fades over the last 20 %). */
|
|
233
|
+
faceReprojectionFillReach: {
|
|
234
|
+
value: number;
|
|
235
|
+
};
|
|
236
|
+
/** The map's texels per cm of canonical face (`faceUnwrapTexelsPerCm`): sets how fast the fill blurs. */
|
|
237
|
+
faceReprojectionFillTexelsPerCm: {
|
|
238
|
+
value: number;
|
|
239
|
+
};
|
|
240
|
+
};
|
|
241
|
+
export declare const createFaceReprojectionUniforms: () => FaceReprojectionUniforms;
|
|
242
|
+
/** Default reach of the skin fill, cm from the face: the whole head and neck of a life-size model. */
|
|
243
|
+
export declare const FACE_REPROJECTION_FILL_REACH = 30;
|
|
244
|
+
/**
|
|
245
|
+
* Texels of an unwrap `resolution` px wide per cm of canonical face (the
|
|
246
|
+
* canonical layout's width in UV over its width in cm). The skin fill blurs
|
|
247
|
+
* by about one texel-cm per cm from the face.
|
|
248
|
+
*/
|
|
249
|
+
export declare const faceUnwrapTexelsPerCm: (resolution: number) => number;
|
|
250
|
+
/**
|
|
251
|
+
* Patches a built-in three.js material (standard, physical, lambert, phong,
|
|
252
|
+
* toon, basic …) to wear a reprojected face texture over its own colour: the
|
|
253
|
+
* texture (premultiplied alpha, in the mesh's own UV layout) covers the base
|
|
254
|
+
* colour where its alpha is, unlit as emissive or lit as base colour. Use it
|
|
255
|
+
* on a material you own (clone a shared one first).
|
|
256
|
+
*
|
|
257
|
+
* `{ attributes: true }` reads the UV and the coverage from the geometry's
|
|
258
|
+
* `faceUv` / `faceCoverage` attributes instead (pass the UNWRAP texture as the
|
|
259
|
+
* map): a mesh bound to the face needs no remap pass. `faceUv` must be in the
|
|
260
|
+
* unwrap's layout: `binding.canonicalUv` for the default canonical layout,
|
|
261
|
+
* `writeFaceReprojectionLayoutUv(binding, uvs)` for a reprojector made with
|
|
262
|
+
* `uvs`. A mismatch draws a scrambled face, with no error.
|
|
263
|
+
*
|
|
264
|
+
* `{ attributes: true, fill: true }` also fills the skin beyond the face (the
|
|
265
|
+
* `faceReprojectionFill*` uniforms; see `FACE_REPROJECTION_FILL_GLSL`) and
|
|
266
|
+
* reads a `faceDistance` attribute: each vertex's distance from the
|
|
267
|
+
* canonical face, cm (`Math.abs(binding.distance[i])`). The map must be
|
|
268
|
+
* mipmapped for it.
|
|
269
|
+
*/
|
|
270
|
+
export declare const patchFaceReprojectionMaterial: (material: THREE.Material, uniforms: FaceReprojectionUniforms, { attributes, fill }?: {
|
|
271
|
+
attributes?: boolean;
|
|
272
|
+
fill?: boolean;
|
|
273
|
+
}) => void;
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { FaceImageLandmark, FaceOpening, FaceReprojectionBindingOptions, FaceReprojectionRegion, FaceUnwrapFrameOptions } from './faceReprojection';
|
|
2
|
+
import * as THREE from "three";
|
|
3
|
+
/** One mesh to reproject onto: its geometry (with a `uv`) and its vertices in the canonical head frame. */
|
|
4
|
+
export type FaceReprojectionTarget = {
|
|
5
|
+
geometry: THREE.BufferGeometry;
|
|
6
|
+
/** The geometry's vertices in the canonical head frame (cm, flat), for the binding. */
|
|
7
|
+
canonical: ArrayLike<number>;
|
|
8
|
+
/** Which filled openings it binds to (see `FaceReprojectionBindingOptions.openings`). Default all. */
|
|
9
|
+
openings?: readonly FaceOpening[];
|
|
10
|
+
};
|
|
11
|
+
export type FaceReprojectorOptions = FaceUnwrapFrameOptions & FaceReprojectionBindingOptions & {
|
|
12
|
+
/** The output texture's size (px, square). Default 1024. */
|
|
13
|
+
resolution?: number;
|
|
14
|
+
/** The unwrapped canonical face texture's size (px, square). Default 512. */
|
|
15
|
+
unwrapResolution?: number;
|
|
16
|
+
/** Edge padding around the model's UV islands, px (0–4). Default 2. */
|
|
17
|
+
padding?: number;
|
|
18
|
+
/**
|
|
19
|
+
* The unwrap's UV layout: one `[u, v]` per landmark (v up, at least 468
|
|
20
|
+
* pairs). Default `CANONICAL_FACE_UVS` (face characters, `FaceMorph`).
|
|
21
|
+
* Pass `FACE_ATLAS_UVS` to unwrap into the face atlas (face swap, makeup
|
|
22
|
+
* art). The remap reads the unwrap in the same layout, so targets
|
|
23
|
+
* (`setTargets`, `texture`) still get their own atlas.
|
|
24
|
+
*
|
|
25
|
+
* The canonical-layout paths do not follow it:
|
|
26
|
+
* `bindFaceReprojection(...).canonicalUv`, a `faceUv` attribute and
|
|
27
|
+
* `patchFaceReprojectionMaterial(..., { attributes: true })` read
|
|
28
|
+
* `unwrapTexture` in the canonical layout. With `uvs`, wear the face
|
|
29
|
+
* through `setTargets` / `texture`, or convert a binding with
|
|
30
|
+
* `writeFaceReprojectionLayoutUv(binding, uvs)`.
|
|
31
|
+
*/
|
|
32
|
+
uvs?: ArrayLike<number>;
|
|
33
|
+
/** Mipmap the unwrap, for reading it smaller than it is (sRGB, so the mips average in linear light). Default `false`. */
|
|
34
|
+
unwrapMipmaps?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Fill skin the camera does not see (the far side of a turned face) from
|
|
37
|
+
* the other side, once, when the unwrap is made: a second draw samples
|
|
38
|
+
* each point's mirror twin and fills only what the first draw left
|
|
39
|
+
* uncovered, so a face seen square on is unchanged. Points outside the
|
|
40
|
+
* image count as unseen (`inFrame` defaults to on with it), so the twin
|
|
41
|
+
* fills them too. Default `false`.
|
|
42
|
+
*/
|
|
43
|
+
mirrorFill?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Edge padding of the unwrap, px (0–16). Default 0. It pads alpha as
|
|
46
|
+
* well: coverage grows by up to this many px at the face's edge and into
|
|
47
|
+
* unseen holes (spots that neither the camera nor `mirrorFill` saw), so
|
|
48
|
+
* padded texels count as seen.
|
|
49
|
+
*/
|
|
50
|
+
unwrapPadding?: number;
|
|
51
|
+
};
|
|
52
|
+
/** The largest `unwrapPadding` (px). */
|
|
53
|
+
export declare const FACE_UNWRAP_MAX_PADDING = 16;
|
|
54
|
+
/**
|
|
55
|
+
* The filled canonical face laid out in an unwrap layout (see
|
|
56
|
+
* `getFaceUnwrapUvs`): `position` = the layout UV (z 0), `canonical` = the
|
|
57
|
+
* rest position (cm), and per-frame `cameraUv` (2) and `weight` (1), ready
|
|
58
|
+
* for `writeFaceUnwrapFrame`. Shared attributes can be passed to make a
|
|
59
|
+
* second geometry over the same buffers (only `cameraUv` and `weight` are its
|
|
60
|
+
* own). The caller disposes it.
|
|
61
|
+
*/
|
|
62
|
+
export declare const createFaceUnwrapGeometry: (uvs?: ArrayLike<number>, share?: THREE.BufferGeometry) => THREE.BufferGeometry;
|
|
63
|
+
/**
|
|
64
|
+
* Renders the live camera face into a face model's own UV layout (see
|
|
65
|
+
* `faceReprojection.ts`): `unwrapTexture` holds the camera face in the
|
|
66
|
+
* unwrap layout (`uvs`, default the canonical face UVs), `texture` the same
|
|
67
|
+
* face in the targets' layout. Both are premultiplied-alpha, transparent
|
|
68
|
+
* where there is no face. Call `render` once per new camera frame (or per new
|
|
69
|
+
* image); `dispose` when done. No React needed.
|
|
70
|
+
*/
|
|
71
|
+
export declare class FaceReprojector {
|
|
72
|
+
readonly unwrapTarget: THREE.WebGLRenderTarget;
|
|
73
|
+
readonly target: THREE.WebGLRenderTarget;
|
|
74
|
+
/** The remap before edge padding. */
|
|
75
|
+
private readonly remapTarget;
|
|
76
|
+
/** The unwrap before its edge padding (made on first use). */
|
|
77
|
+
private unwrapRawTarget;
|
|
78
|
+
private readonly padUniforms;
|
|
79
|
+
private readonly padScene;
|
|
80
|
+
private readonly padMaterial;
|
|
81
|
+
private readonly unwrapPadUniforms;
|
|
82
|
+
private readonly unwrapPadScene;
|
|
83
|
+
private readonly unwrapPadMaterial;
|
|
84
|
+
readonly unwrapUniforms: {
|
|
85
|
+
cameraMap: {
|
|
86
|
+
value: THREE.Texture | null;
|
|
87
|
+
};
|
|
88
|
+
regions: {
|
|
89
|
+
value: THREE.Vector4[];
|
|
90
|
+
};
|
|
91
|
+
regionMask: {
|
|
92
|
+
value: THREE.Vector4;
|
|
93
|
+
};
|
|
94
|
+
regionSoftness: {
|
|
95
|
+
value: number;
|
|
96
|
+
};
|
|
97
|
+
/** 1: drop samples past the image's edge (`inFrame`). */
|
|
98
|
+
inFrame: {
|
|
99
|
+
value: number;
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
readonly remapUniforms: {
|
|
103
|
+
unwrapMap: {
|
|
104
|
+
value: THREE.Texture | null;
|
|
105
|
+
};
|
|
106
|
+
maskMap: {
|
|
107
|
+
value: THREE.Texture | null;
|
|
108
|
+
};
|
|
109
|
+
useMask: {
|
|
110
|
+
value: number;
|
|
111
|
+
};
|
|
112
|
+
canonicalMaskMap: {
|
|
113
|
+
value: THREE.Texture | null;
|
|
114
|
+
};
|
|
115
|
+
useCanonicalMask: {
|
|
116
|
+
value: number;
|
|
117
|
+
};
|
|
118
|
+
};
|
|
119
|
+
private readonly camera;
|
|
120
|
+
private readonly unwrapScene;
|
|
121
|
+
private readonly remapScene;
|
|
122
|
+
private readonly unwrapGeometry;
|
|
123
|
+
private readonly unwrapMaterial;
|
|
124
|
+
/** `mirrorFill`'s second draw: the same mesh, sampling each vertex's mirror twin. */
|
|
125
|
+
private readonly mirrorGeometry;
|
|
126
|
+
private readonly mirrorMesh;
|
|
127
|
+
private readonly mirrorMaterial;
|
|
128
|
+
private readonly remapMaterial;
|
|
129
|
+
private remapMeshes;
|
|
130
|
+
/** Each remap mesh's binding (to re-lay its `canonicalUv` when `uvs` changes). */
|
|
131
|
+
private remapBindings;
|
|
132
|
+
/** The unwrap layout (`getFaceUnwrapUvs(options.uvs)`). */
|
|
133
|
+
private layout;
|
|
134
|
+
private options;
|
|
135
|
+
/** The frame options `render` passes on (one object, reused). */
|
|
136
|
+
private readonly frame;
|
|
137
|
+
constructor(options?: FaceReprojectorOptions);
|
|
138
|
+
/** The face model's texture: the camera face in the targets' UV layout. */
|
|
139
|
+
get texture(): THREE.Texture;
|
|
140
|
+
/** The camera face in the unwrap layout (`uvs`; default the canonical face UVs). */
|
|
141
|
+
get unwrapTexture(): THREE.Texture;
|
|
142
|
+
/**
|
|
143
|
+
* Changes the options. Sizes resize the textures; `uvs` re-lays the unwrap
|
|
144
|
+
* and the bound targets; a `falloff` change needs `setTargets` again.
|
|
145
|
+
*/
|
|
146
|
+
setOptions(options: FaceReprojectorOptions): void;
|
|
147
|
+
/** Which part of the face to take (see `FaceReprojectionRegion`). */
|
|
148
|
+
setRegion(region: FaceReprojectionRegion): void;
|
|
149
|
+
/**
|
|
150
|
+
* Optional masks (their red channel): `mask` in the targets' own UV layout
|
|
151
|
+
* (loaded like the model's own map — glTF textures have `flipY = false`),
|
|
152
|
+
* `canonicalMask` in the unwrap layout (`uvs`; default the canonical face UVs).
|
|
153
|
+
*/
|
|
154
|
+
setMasks(mask: THREE.Texture | null, canonicalMask: THREE.Texture | null): void;
|
|
155
|
+
/** The meshes whose UV layout the output follows (they share one atlas). Binds them (once). */
|
|
156
|
+
setTargets(targets: readonly FaceReprojectionTarget[]): void;
|
|
157
|
+
/** A remap mesh's `canonicalUv`: where each vertex reads the unwrap, in its layout. */
|
|
158
|
+
private writeRemapUv;
|
|
159
|
+
/**
|
|
160
|
+
* Renders one frame: `cameraTexture` is the session's camera image (as the
|
|
161
|
+
* tracker saw it), `landmarks` the tracked face's (≥ 468, normalized image
|
|
162
|
+
* space). Any image works the same way (a photo in a `CanvasTexture` with
|
|
163
|
+
* its detected landmarks). Leaves the renderer's target and clear colour as
|
|
164
|
+
* they were.
|
|
165
|
+
*/
|
|
166
|
+
render(renderer: THREE.WebGLRenderer, cameraTexture: THREE.Texture, landmarks: ArrayLike<FaceImageLandmark>): void;
|
|
167
|
+
private rawUnwrapTarget;
|
|
168
|
+
private restore;
|
|
169
|
+
private clearTargets;
|
|
170
|
+
dispose(): void;
|
|
171
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { LandmarkLead } from '../face-atlas/lead';
|
|
2
|
+
import { FaceInfo, FaceInfoTarget } from '../face-info';
|
|
3
|
+
import { LandmarkPoseSmoothingState } from '../components/HeadOccluder/useLandmarkPoseFit';
|
|
4
|
+
import { XRModelNodeFaceTracking } from '../types/nodes';
|
|
5
|
+
import * as THREE from "three";
|
|
6
|
+
/** Number of expression channels (`FACE_MORPH_NAMES`). */
|
|
7
|
+
export declare const FACE_MORPH_COUNT: number;
|
|
8
|
+
/**
|
|
9
|
+
* Where a face rig stands: following a tracked face, holding its last pose
|
|
10
|
+
* through a short dropout, or lost (hidden).
|
|
11
|
+
*/
|
|
12
|
+
export type FaceRigTracking = "tracked" | "held" | "lost";
|
|
13
|
+
export type FaceRigOptions = {
|
|
14
|
+
/**
|
|
15
|
+
* Per-frame EMA factor for the head pose while the head is still, `1` = no
|
|
16
|
+
* smoothing. Adaptive: fast head motion follows immediately (full speed at
|
|
17
|
+
* `FACE_RIG_FAST_TURN_DEG` per frame), so a quick shake does not trail.
|
|
18
|
+
* Default 0.5.
|
|
19
|
+
*/
|
|
20
|
+
smoothing?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Per-frame EMA factor for the expression (the per-landmark offsets), `1` =
|
|
23
|
+
* none. MediaPipe's landmark depth is noisy; a little smoothing keeps a
|
|
24
|
+
* bound mesh calm. Default 0.6.
|
|
25
|
+
*/
|
|
26
|
+
expressionSmoothing?: number;
|
|
27
|
+
/** Keep the last pose and expression through dropouts shorter than this (ms). Default 250. */
|
|
28
|
+
holdMs?: number;
|
|
29
|
+
/**
|
|
30
|
+
* The face at rest, subtracted from the offsets so a model keeps its OWN
|
|
31
|
+
* shape and only the expression moves it:
|
|
32
|
+
* - `"auto"` (default) — captured over the first `neutralMs` after the face
|
|
33
|
+
* is found (look at the camera with a relaxed face; `recalibrateFaceRig`
|
|
34
|
+
* captures again);
|
|
35
|
+
* - `"none"` — keep the person's face shape too (the mesh conforms to the
|
|
36
|
+
* face: wider eyes, a longer jaw …).
|
|
37
|
+
*/
|
|
38
|
+
neutral?: "auto" | "none";
|
|
39
|
+
/** How long the neutral capture averages over (ms). Default 600. */
|
|
40
|
+
neutralMs?: number;
|
|
41
|
+
/**
|
|
42
|
+
* Landmark lead (ms), read by `FaceRig` / `stepFaceRigFromModel` (not by
|
|
43
|
+
* `stepFaceRig`). Inference runs below the render rate, so between two
|
|
44
|
+
* samples the landmarks hold while the camera image moves on. Above 0, the
|
|
45
|
+
* landmarks go through a `LandmarkLead` first: a One Euro filter (steady
|
|
46
|
+
* when still, quick when moving) plus a velocity lead of at most this long,
|
|
47
|
+
* so geometry drawn from the rig keeps up with the camera image. About one
|
|
48
|
+
* inference interval suits (33 ms at 30 Hz). Default 0: the raw landmarks,
|
|
49
|
+
* as before. Makeup's own rigs use 33 / 42 / 66 ms by quality tier.
|
|
50
|
+
*/
|
|
51
|
+
leadMs?: number;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* One face's live state in the canonical head frame, updated every frame by
|
|
55
|
+
* `stepFaceRig` (`FaceRig` does it from the tracker). Everything a face
|
|
56
|
+
* character needs: where the head is, and how the face has moved within it.
|
|
57
|
+
*/
|
|
58
|
+
export type FaceRigState = {
|
|
59
|
+
tracking: FaceRigTracking;
|
|
60
|
+
/** Which tracked face drives it (set by `FaceRig`). */
|
|
61
|
+
faceIndex: number;
|
|
62
|
+
/** Last time a face was seen (ms), or `null`. */
|
|
63
|
+
lastSeenMs: number | null;
|
|
64
|
+
/**
|
|
65
|
+
* The head pose, canonical centimetres → world: `world = position +
|
|
66
|
+
* quaternion · (scale · canonical)`. Smoothed; snaps on (re)acquire.
|
|
67
|
+
*/
|
|
68
|
+
pose: LandmarkPoseSmoothingState;
|
|
69
|
+
/**
|
|
70
|
+
* The live landmarks in the head frame of THIS frame's raw fit (canonical
|
|
71
|
+
* cm, flat, 468 × 3): what the expression is measured on.
|
|
72
|
+
*/
|
|
73
|
+
local: Float32Array;
|
|
74
|
+
/**
|
|
75
|
+
* The live landmarks in the frame of the SMOOTHED `pose` — where they are
|
|
76
|
+
* on screen once drawn inside the rig (cm, flat, 468 × 3). Content that must
|
|
77
|
+
* sit exactly on the camera image (a warped or morphing face, a pin on the
|
|
78
|
+
* skin) uses these: `local` drawn through the smoothed pose trails a fast
|
|
79
|
+
* turn.
|
|
80
|
+
*/
|
|
81
|
+
view: Float32Array;
|
|
82
|
+
/**
|
|
83
|
+
* The expression: live minus the face at rest per landmark (canonical cm,
|
|
84
|
+
* flat, 468 × 3), smoothed — the rest being the captured neutral face (or
|
|
85
|
+
* the canonical face with `neutral: "none"`). Near zero on the rigid
|
|
86
|
+
* landmarks; the jaw, lips, cheeks, brows and lids carry it. Zero while the
|
|
87
|
+
* neutral is being captured and when lost.
|
|
88
|
+
*/
|
|
89
|
+
residual: Float32Array;
|
|
90
|
+
/** The captured neutral offsets (person's face shape − canonical, cm, flat). */
|
|
91
|
+
neutral: Float32Array;
|
|
92
|
+
/**
|
|
93
|
+
* The expression channels, 0..1, in `FACE_MORPH_NAMES` order (MediaPipe
|
|
94
|
+
* blendshapes): smoothed, with the person's resting values removed (a
|
|
95
|
+
* resting squint of 0.1 reads 0; a full blink still reads 1). Zero while
|
|
96
|
+
* the neutral is being captured and when lost or without scores.
|
|
97
|
+
*/
|
|
98
|
+
morphs: Float32Array;
|
|
99
|
+
/** The resting blendshape scores captured with the neutral. */
|
|
100
|
+
morphNeutral: Float32Array;
|
|
101
|
+
/**
|
|
102
|
+
* The latest raw face (MediaPipe's blendshapes as reported, the head
|
|
103
|
+
* rotation reading, landmarks) — for Face Actions and custom logic; kept
|
|
104
|
+
* through a hold, `null` when lost. `FaceRig` fills it; `stepFaceRig` only
|
|
105
|
+
* clears it.
|
|
106
|
+
*/
|
|
107
|
+
face: FaceInfo | null;
|
|
108
|
+
/** `"capturing"` until the neutral is averaged, then `"ready"` (always `"ready"` with `neutral: "none"`). */
|
|
109
|
+
neutralState: "capturing" | "ready";
|
|
110
|
+
/** When the current neutral capture started (ms), or `null` before the first tracked frame. */
|
|
111
|
+
neutralSince: number | null;
|
|
112
|
+
/** Frames averaged into `neutral` so far. */
|
|
113
|
+
neutralFrames: number;
|
|
114
|
+
};
|
|
115
|
+
export declare const createFaceRigState: () => FaceRigState;
|
|
116
|
+
/**
|
|
117
|
+
* Captures the neutral face again from the next tracked frames (call it while
|
|
118
|
+
* the person looks at the camera with a relaxed face). With `neutral: "auto"`
|
|
119
|
+
* this also happens on its own each time the face is found.
|
|
120
|
+
*/
|
|
121
|
+
export declare const recalibrateFaceRig: (state: FaceRigState) => void;
|
|
122
|
+
/**
|
|
123
|
+
* Head motion per frame at which the pose stops smoothing and follows the
|
|
124
|
+
* tracker directly: this many degrees of turn, or `FACE_RIG_FAST_MOVE_CM` of
|
|
125
|
+
* travel. In between, the smoothing eases off in proportion.
|
|
126
|
+
*/
|
|
127
|
+
export declare const FACE_RIG_FAST_TURN_DEG = 6;
|
|
128
|
+
export declare const FACE_RIG_FAST_MOVE_CM = 1.5;
|
|
129
|
+
/**
|
|
130
|
+
* One frame of a face rig. `world` is the face's 468 landmarks in world space
|
|
131
|
+
* (flat; each unprojected on its own depth plane, as the head fit does), or
|
|
132
|
+
* `null` when no face is tracked this frame. Solves the head pose from the
|
|
133
|
+
* rigid landmarks, smooths it, re-expresses every landmark in the head frame
|
|
134
|
+
* and smooths the per-landmark expression offsets. `scores` are the face's
|
|
135
|
+
* blendshape scores in `FACE_MORPH_NAMES` order (0..1), when the tracker has
|
|
136
|
+
* them. Returns `"found"` / `"lost"` on a tracking edge, else `null`.
|
|
137
|
+
* Allocation-free.
|
|
138
|
+
*/
|
|
139
|
+
export declare const stepFaceRig: (state: FaceRigState, world: ArrayLike<number> | null, nowMs: number, { smoothing, expressionSmoothing, holdMs, neutral, neutralMs, }?: FaceRigOptions, scores?: ArrayLike<number> | null) => "found" | "lost" | null;
|
|
140
|
+
/**
|
|
141
|
+
* One rig's working memory for `stepFaceRigFromModel`: the rig state plus
|
|
142
|
+
* the scratch it fills every frame. Create one per rig and keep it.
|
|
143
|
+
*/
|
|
144
|
+
export type FaceRigDriver = {
|
|
145
|
+
/** The rig it steps. */
|
|
146
|
+
readonly rig: FaceRigState;
|
|
147
|
+
/** The landmarks in world space, flat 468 × 3 (each on its own depth plane). */
|
|
148
|
+
readonly world: Float64Array;
|
|
149
|
+
/** Blendshape scores in `FACE_MORPH_NAMES` order. */
|
|
150
|
+
readonly scores: Float32Array;
|
|
151
|
+
/** Storage for `rig.face`. */
|
|
152
|
+
readonly faceInfo: FaceInfoTarget;
|
|
153
|
+
/** The landmark lead, created on the first step with `leadMs` > 0. */
|
|
154
|
+
lead: LandmarkLead | null;
|
|
155
|
+
/** The landmark array the lead last observed (a new array = a new inference). */
|
|
156
|
+
leadSample: unknown;
|
|
157
|
+
};
|
|
158
|
+
/** A driver for `rig` (a new rig state by default). */
|
|
159
|
+
export declare const createFaceRigDriver: (rig?: FaceRigState) => FaceRigDriver;
|
|
160
|
+
/**
|
|
161
|
+
* Restarts a driver's rig for another face source (a new camera, another
|
|
162
|
+
* video): captures the neutral again, snaps the pose and the landmark lead.
|
|
163
|
+
*/
|
|
164
|
+
export declare const resetFaceRigDriver: (driver: FaceRigDriver) => void;
|
|
165
|
+
/**
|
|
166
|
+
* One frame of a face rig driven by the face model: `FaceRig`'s step without
|
|
167
|
+
* React. Reads face `faceIndex` from `node` (the shared face model's node),
|
|
168
|
+
* unprojects each landmark through `camera` on its own depth plane (the
|
|
169
|
+
* landmark z is in feed-width units around the head centre, as the head fit
|
|
170
|
+
* reads it), runs the landmark lead when `options.leadMs` > 0 (snapping it
|
|
171
|
+
* when a lost face is found again), then
|
|
172
|
+
* `stepFaceRig` with the blendshape scores, and refreshes `rig.face`. Returns
|
|
173
|
+
* `"found"` / `"lost"` on a tracking edge, else `null`. Allocation-free
|
|
174
|
+
* after the lead is created.
|
|
175
|
+
*/
|
|
176
|
+
export declare const stepFaceRigFromModel: (driver: FaceRigDriver, node: XRModelNodeFaceTracking | null | undefined, faceIndex: number, camera: THREE.Camera, nowMs: number, options?: FaceRigOptions) => "found" | "lost" | null;
|