@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,49 @@
|
|
|
1
|
+
import { BodyShapeLimits } from '../../body-pose';
|
|
2
|
+
import { BodyMoveViewLimits } from '../../body-trigger/frame';
|
|
3
|
+
import { BodyMoveLimits } from '../../body-trigger/moves';
|
|
4
|
+
import { BodyTriggerOptions, BodyTriggerState, BodyTriggerTarget } from '../../body-trigger/trigger';
|
|
5
|
+
export type UseBodyTriggerOptions = BodyTriggerTarget & Omit<BodyTriggerOptions, "limits"> & {
|
|
6
|
+
/**
|
|
7
|
+
* Thresholds to override: the move ones (`BODY_MOVE_LIMITS`) and, for
|
|
8
|
+
* poses, BodyInstruction's classifier ones (`BODY_SHAPE_LIMITS`).
|
|
9
|
+
*/
|
|
10
|
+
limits?: Partial<BodyMoveLimits & BodyShapeLimits>;
|
|
11
|
+
/**
|
|
12
|
+
* When a joint counts as in view for the moves (MediaPipe visibility and
|
|
13
|
+
* distance past the frame edge). Default `BODY_MOVE_VIEW_LIMITS`.
|
|
14
|
+
*/
|
|
15
|
+
view?: Partial<BodyMoveViewLimits>;
|
|
16
|
+
/** Which detected body to read. Default 0. */
|
|
17
|
+
bodyIndex?: number;
|
|
18
|
+
/** `false` pauses detection (and releases the body model). Default `true`. */
|
|
19
|
+
active?: boolean;
|
|
20
|
+
/** Optional inference cap for the body model. */
|
|
21
|
+
targetFps?: number;
|
|
22
|
+
/** The pose or move began (counted in `state.count`). Called from the frame loop. */
|
|
23
|
+
onBegin?: (state: BodyTriggerState) => void;
|
|
24
|
+
/** It ended: `endReason` `"released"` (done) or `"lost"` (tracking or view lost). */
|
|
25
|
+
onEnd?: (state: BodyTriggerState) => void;
|
|
26
|
+
/** Any published change. */
|
|
27
|
+
onChange?: (state: BodyTriggerState) => void;
|
|
28
|
+
};
|
|
29
|
+
export type BodyTriggerProps = UseBodyTriggerOptions;
|
|
30
|
+
/**
|
|
31
|
+
* Detect a held body pose (`pose`) or a body move (`move`) on the tracked
|
|
32
|
+
* body, with begin / end events. Acquires the shared body model itself (no
|
|
33
|
+
* `BodyTracker` needed, no second detector). Left / right are the person's own
|
|
34
|
+
* sides on every camera. Leg moves and leg poses need the whole body in view
|
|
35
|
+
* and never fire without it (`state.inView`). Returns React state that changes
|
|
36
|
+
* only when the trigger's state changes. Mount inside the R3F scene.
|
|
37
|
+
*/
|
|
38
|
+
export declare const useBodyTrigger: (options: UseBodyTriggerOptions) => BodyTriggerState;
|
|
39
|
+
/**
|
|
40
|
+
* Declarative `useBodyTrigger`: mount it anywhere inside the scene and act on
|
|
41
|
+
* `onBegin` / `onEnd`. Renders nothing.
|
|
42
|
+
*
|
|
43
|
+
* ```tsx
|
|
44
|
+
* <BodyTrigger pose="tPose" onBegin={() => fly()} />
|
|
45
|
+
* <BodyTrigger move="jump" onBegin={() => hop()} />
|
|
46
|
+
* <BodyTrigger move="punch" side="right" onBegin={(s) => hit(s.side)} />
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare const BodyTrigger: (props: BodyTriggerProps) => null;
|
|
@@ -9,12 +9,25 @@ export interface DebuggerProviderProps {
|
|
|
9
9
|
initialEnabled?: boolean;
|
|
10
10
|
/** Position of the overlay (default: "top-left") */
|
|
11
11
|
position?: "top-left" | "top-right" | "bottom-left" | "bottom-right";
|
|
12
|
+
/**
|
|
13
|
+
* Don't float the overlay: render it yourself with `<DebuggerPanel />`
|
|
14
|
+
* wherever your layout wants it (a side panel). Default `false`.
|
|
15
|
+
*/
|
|
16
|
+
docked?: boolean;
|
|
12
17
|
}
|
|
13
18
|
/**
|
|
14
19
|
* Provider component that manages debugger state
|
|
15
20
|
* Wrap your app with this to enable debugger functionality
|
|
16
21
|
*/
|
|
17
|
-
export declare function DebuggerProvider({ children, keyboardShortcut, initialEnabled, position, }: DebuggerProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export declare function DebuggerProvider({ children, keyboardShortcut, initialEnabled, position, docked, }: DebuggerProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
/**
|
|
24
|
+
* The debugger overlay rendered in place, for a `DebuggerProvider docked`:
|
|
25
|
+
* put it in your own layout (a side panel). Renders nothing while the
|
|
26
|
+
* debugger is off or outside a provider.
|
|
27
|
+
*/
|
|
28
|
+
export declare function DebuggerPanel({ keyboardShortcut, }: {
|
|
29
|
+
keyboardShortcut?: string;
|
|
30
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
18
31
|
/**
|
|
19
32
|
* Access the debugger context
|
|
20
33
|
* Must be used within a DebuggerProvider
|
|
@@ -6,8 +6,10 @@ export interface DebuggerUIProps {
|
|
|
6
6
|
onClose: () => void;
|
|
7
7
|
position?: "top-left" | "top-right" | "bottom-left" | "bottom-right";
|
|
8
8
|
keyboardShortcut?: string;
|
|
9
|
+
/** Render in place (no portal, no fixed corner) — for `DebuggerPanel` in a host layout. */
|
|
10
|
+
docked?: boolean;
|
|
9
11
|
}
|
|
10
12
|
/**
|
|
11
13
|
* Debugger UI component
|
|
12
14
|
*/
|
|
13
|
-
export declare function DebuggerUI({ metrics, collapsed, onCollapse, onClose, position, keyboardShortcut, }: DebuggerUIProps): import(
|
|
15
|
+
export declare function DebuggerUI({ metrics, collapsed, onCollapse, onClose, position, keyboardShortcut, docked, }: DebuggerUIProps): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { FaceAtlasUniforms } from '../../face-atlas/registry';
|
|
3
|
+
import { FaceAtlasRegion, FaceAtlasRegionSelection } from '../../face-atlas/regions';
|
|
4
|
+
import { FaceAtlasSurfaceHandle, UseFaceAtlasSurfaceOptions } from './useFaceAtlasSurface';
|
|
5
|
+
import * as THREE from "three";
|
|
6
|
+
/** What a `FaceAtlasLayer` material factory receives. */
|
|
7
|
+
export type FaceAtlasMaterialContext = {
|
|
8
|
+
/**
|
|
9
|
+
* The layer's uniforms: spread them into your material (`uniforms={ctx.uniforms}`
|
|
10
|
+
* or `{ ...ctx.uniforms, uColor: … }`). Stable for the layer's life and
|
|
11
|
+
* updated every frame: `uCameraMap`, `uPresence`, `uPersonLeftSign` (this
|
|
12
|
+
* layer's), and the face's skin probe (`uSkinStats`, `uSkinStatsPacked`,
|
|
13
|
+
* `uSkinMap`, `uSkinLod`, `uSkinSqrt`) while one runs for this face (a
|
|
14
|
+
* makeup region does, or call `useFaceSkin()`), `null` before.
|
|
15
|
+
*/
|
|
16
|
+
uniforms: FaceAtlasUniforms;
|
|
17
|
+
/** The camera feed, or `null` before the camera starts. */
|
|
18
|
+
cameraTexture: THREE.Texture | null;
|
|
19
|
+
/**
|
|
20
|
+
* +1 on an unmirrored feed (the person's left is canonical +X), −1 on the
|
|
21
|
+
* mirrored webcam. Art painted as on an unmirrored photo samples
|
|
22
|
+
* `(1 − u, v)` when it is −1 (`mirrorFaceAtlasUv`), so each side lands on
|
|
23
|
+
* the person's own side.
|
|
24
|
+
*/
|
|
25
|
+
personLeftSign: 1 | -1;
|
|
26
|
+
faceIndex: number;
|
|
27
|
+
/** The regions drawn (empty when the layer draws explicit `triangles`). */
|
|
28
|
+
regions: readonly FaceAtlasRegion[];
|
|
29
|
+
/** The layer's geometry (shared surface attributes plus this layer's index). */
|
|
30
|
+
geometry: THREE.BufferGeometry;
|
|
31
|
+
};
|
|
32
|
+
/** A material node or instance for the layer. */
|
|
33
|
+
export type FaceAtlasMaterialResult = ReactNode | THREE.Material;
|
|
34
|
+
/** The layer's material: an instance, a node, or a factory of either from the context. */
|
|
35
|
+
export type FaceAtlasMaterialSpec = FaceAtlasMaterialResult | ((context: FaceAtlasMaterialContext) => FaceAtlasMaterialResult);
|
|
36
|
+
export type FaceAtlasLayerProps = UseFaceAtlasSurfaceOptions & {
|
|
37
|
+
/**
|
|
38
|
+
* Atlas regions to draw: one name or an array (union). Default `"face"`
|
|
39
|
+
* (the whole surface without the eye and mouth fills and nostrils). Add
|
|
40
|
+
* `"eyes"` / `"mouth"` for the fills.
|
|
41
|
+
*/
|
|
42
|
+
region?: FaceAtlasRegionSelection;
|
|
43
|
+
/**
|
|
44
|
+
* Explicit triangle indices into `FACE_ATLAS_TRIANGLES`, drawn in this
|
|
45
|
+
* order (e.g. back to front for a layer without depth). Overrides
|
|
46
|
+
* `region`. Keep the array stable (memoise it).
|
|
47
|
+
*/
|
|
48
|
+
triangles?: ArrayLike<number>;
|
|
49
|
+
/**
|
|
50
|
+
* Extra per-landmark attributes for this layer only (468 items each, e.g.
|
|
51
|
+
* a mirror uv). Keep the object stable (memoise it).
|
|
52
|
+
*/
|
|
53
|
+
attributes?: Record<string, THREE.BufferAttribute>;
|
|
54
|
+
/** The material: see `FaceAtlasMaterialSpec`. Spread `MAKEUP_BLENDING` into it. */
|
|
55
|
+
material: FaceAtlasMaterialSpec;
|
|
56
|
+
/** Draw order. Default `MAKEUP_RENDER_ORDER.design` (-1.68), between the eye regions and the lips. */
|
|
57
|
+
renderOrder?: number;
|
|
58
|
+
/** Whether the feed is mirrored, for `personLeftSign`. Default: the session's (`useXRMirrored`). */
|
|
59
|
+
mirrored?: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Draw the face's depth pre-pass and restore around the makeup layers, so
|
|
62
|
+
* the far cheek stops at the nose on a turned head (high and medium
|
|
63
|
+
* quality tiers, with a stencil buffer). Default: on for a visible layer
|
|
64
|
+
* drawn between `MAKEUP_RENDER_ORDER.prepass` and `.restore` (the makeup
|
|
65
|
+
* orders), off otherwise, since a layer outside them gains nothing from
|
|
66
|
+
* the passes. `true` forces them.
|
|
67
|
+
*/
|
|
68
|
+
selfOcclusion?: boolean;
|
|
69
|
+
/** Keep the `faceUv` attribute (camera-image uv per landmark) up to date. Default false. */
|
|
70
|
+
faceUv?: boolean;
|
|
71
|
+
/** Show the layer. Default true. */
|
|
72
|
+
visible?: boolean;
|
|
73
|
+
};
|
|
74
|
+
/** `FaceAtlasLayerMesh` props: a layer's props on a surface handle already held. */
|
|
75
|
+
export type FaceAtlasLayerMeshProps = Omit<FaceAtlasLayerProps, keyof UseFaceAtlasSurfaceOptions> & {
|
|
76
|
+
handle: FaceAtlasSurfaceHandle;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* The layer itself, on a surface handle the caller already holds
|
|
80
|
+
* (`useFaceAtlasSurface`): for SDK components that also read the handle
|
|
81
|
+
* (makeup regions), so one component holds one surface reference. Internal:
|
|
82
|
+
* apps use `FaceAtlasLayer`.
|
|
83
|
+
*/
|
|
84
|
+
export declare const FaceAtlasLayerMesh: ({ handle, region, triangles, attributes, material, renderOrder, mirrored, selfOcclusion, faceUv, visible, }: FaceAtlasLayerMeshProps) => JSX.Element | null;
|
|
85
|
+
/**
|
|
86
|
+
* Draws a material over part of the live face, in the face atlas
|
|
87
|
+
* (`FACE_ATLAS_UVS`): the layer every makeup region, LipEffect, face swap
|
|
88
|
+
* and faceless effect is built on. Pick the triangles by region (or
|
|
89
|
+
* explicit list), give a material (instance, node or factory of the
|
|
90
|
+
* context), and an order in the face layer.
|
|
91
|
+
*
|
|
92
|
+
* It works alone (no `FaceTracker` or Suspense needed: it starts the face
|
|
93
|
+
* model itself), inside a `FaceTracker` (that face), or nested in a
|
|
94
|
+
* `FaceRig` / `FaceWarp3D` / `FaceMorph` (it rides that face, warp and lead
|
|
95
|
+
* included). All layers on one face share one live surface: one rig step,
|
|
96
|
+
* one upload of positions and normals per frame. The meshes are drawn at
|
|
97
|
+
* the scene root, posed by the rig, so no tracker group changes their
|
|
98
|
+
* order. The face holds through dropouts under 250 ms, then fades out.
|
|
99
|
+
*
|
|
100
|
+
* The geometry's attributes: `position` (live, plus warp offsets),
|
|
101
|
+
* `basePosition` (where the skin is in the camera image), `normal` (live),
|
|
102
|
+
* `uv` (atlas), `restPosition` / `restNormal` (canonical cm), `edge` (cm to
|
|
103
|
+
* the face oval), `lipEdge`, `eyeRing`, `faceUv` (with `faceUv`).
|
|
104
|
+
*
|
|
105
|
+
* ```tsx
|
|
106
|
+
* <FaceAtlasLayer
|
|
107
|
+
* region="cheeks"
|
|
108
|
+
* renderOrder={MAKEUP_RENDER_ORDER.blush + 0.01}
|
|
109
|
+
* material={(ctx) => <shaderMaterial {...MAKEUP_BLENDING} depthWrite={false}
|
|
110
|
+
* uniforms={ctx.uniforms} vertexShader={vertex} fragmentShader={fragment} />}
|
|
111
|
+
* />
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
export declare const FaceAtlasLayer: ({ faceIndex, numFaces, leadMs, holdMs, ...props }: FaceAtlasLayerProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import type * as THREE from "three";
|
|
3
|
+
/** The shared made-up camera, as `useMadeUpCamera` hands it out. */
|
|
4
|
+
export type MadeUpCameraHandle = {
|
|
5
|
+
/**
|
|
6
|
+
* The camera image with the makeup over it: the camera texture's layout
|
|
7
|
+
* (same uv and aspect, image top at v = 1), sRGB, decoded by the GPU when
|
|
8
|
+
* sampled. The same object for the target's life.
|
|
9
|
+
*/
|
|
10
|
+
texture: THREE.Texture;
|
|
11
|
+
/** A frame has been rendered into `texture` (before that it is empty). */
|
|
12
|
+
ready: boolean;
|
|
13
|
+
/** Passes rendered so far: it changes every frame, so a reader can tell a new image. */
|
|
14
|
+
readonly frame: number;
|
|
15
|
+
/** The texture's size, px (the camera image's). */
|
|
16
|
+
readonly width: number;
|
|
17
|
+
readonly height: number;
|
|
18
|
+
};
|
|
19
|
+
export type UseMadeUpCameraOptions = {
|
|
20
|
+
/** `false` lets go of the target (the last holder frees it). Default true. */
|
|
21
|
+
enabled?: boolean;
|
|
22
|
+
};
|
|
23
|
+
export type MadeUpCameraProps = UseMadeUpCameraOptions & {
|
|
24
|
+
/** The components that sample the made-up camera instead of the plain camera. */
|
|
25
|
+
children?: ReactNode;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Holds the renderer's shared made-up camera while mounted and `enabled`,
|
|
29
|
+
* and renders it once per frame (whichever holder runs first): the camera
|
|
30
|
+
* image with the makeup over it, feed size. Every holder shares one target;
|
|
31
|
+
* the last one to let go frees it. `null` on the first render, outside a
|
|
32
|
+
* canvas, or while disabled. For your own materials; to make SDK components
|
|
33
|
+
* show makeup, wrap them in `<MadeUpCamera>`.
|
|
34
|
+
*
|
|
35
|
+
* Costs, every frame while held: two feed-size passes (the camera copied
|
|
36
|
+
* under the makeup, then an sRGB copy) and the makeup drawn a second time;
|
|
37
|
+
* about 2 × width × height × 4 bytes plus a depth-stencil buffer of GPU
|
|
38
|
+
* memory.
|
|
39
|
+
*
|
|
40
|
+
* ```tsx
|
|
41
|
+
* const madeUp = useMadeUpCamera();
|
|
42
|
+
* <meshBasicMaterial map={madeUp?.ready ? madeUp.texture : null} />
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare const useMadeUpCamera: (options?: UseMadeUpCameraOptions) => MadeUpCameraHandle | null;
|
|
46
|
+
/**
|
|
47
|
+
* The made-up camera for the components inside it: `FaceInset` (and
|
|
48
|
+
* `useFaceInsetTexture`), the camera-face textures of `FaceMorph` and
|
|
49
|
+
* `FaceReprojection`, and the face swap's live faces sample the camera
|
|
50
|
+
* image WITH the makeup (every makeup region, `LipEffect`, `MakeupDesign`
|
|
51
|
+
* and makeup-order `FaceAtlasLayer`, on every face) instead of the plain
|
|
52
|
+
* camera. Components outside it are unchanged. Off unless mounted: it costs
|
|
53
|
+
* a feed-size render every frame (see `useMadeUpCamera`), shared by every
|
|
54
|
+
* `<MadeUpCamera>`.
|
|
55
|
+
*
|
|
56
|
+
* Makeup drawn on the same face on top shows twice: makeup nested in a
|
|
57
|
+
* `FaceMorph` already rides it, and a face swap should be wrapped only when
|
|
58
|
+
* the face it lands on wears no makeup of its own. `FaceWarp3D` keeps the
|
|
59
|
+
* plain camera: nest the makeup in it instead.
|
|
60
|
+
*
|
|
61
|
+
* ```tsx
|
|
62
|
+
* <Blush />
|
|
63
|
+
* <LipEffect preset="lipstick" shade="classicRed" />
|
|
64
|
+
* <MadeUpCamera>
|
|
65
|
+
* <FaceInset part="mouth" magnify={1.8} />
|
|
66
|
+
* </MadeUpCamera>
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export declare const MadeUpCamera: ({ children, enabled }: MadeUpCameraProps) => import("react/jsx-runtime").JSX.Element;
|
|
70
|
+
/** The made-up camera of the nearest `<MadeUpCamera>` above (null outside one or before mount). */
|
|
71
|
+
export declare const useMadeUpCameraContext: () => MadeUpCameraHandle | null;
|
|
72
|
+
/**
|
|
73
|
+
* The camera image a face component should sample: inside a
|
|
74
|
+
* `<MadeUpCamera>` that has rendered, its texture (camera + makeup); else
|
|
75
|
+
* the session camera texture (`useXRCameraTexture`), or null before the
|
|
76
|
+
* camera starts. Both have the same layout, so a shader samples either the
|
|
77
|
+
* same way; compare `feedTextureVersion(texture)` between frames to tell a
|
|
78
|
+
* new image.
|
|
79
|
+
*/
|
|
80
|
+
export declare const useMadeUpCameraTexture: () => THREE.Texture | null;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { FACE_ATLAS_STENCIL, FACE_RETOUCH_RENDER_ORDER, MAKEUP_BLENDING, MAKEUP_RENDER_ORDER, } from '../../face-atlas/renderState';
|
|
2
|
+
/** Frame priority of an owned face rig's step (the same as `FaceRig`'s). */
|
|
3
|
+
export declare const FACE_ATLAS_RIG_FRAME_PRIORITY = -1;
|
|
4
|
+
/**
|
|
5
|
+
* Frame priority of the face-atlas surface update: after the rig (-1) and
|
|
6
|
+
* after `FaceWarp3D` / `FaceMorph` publish their moved surface (-0.5).
|
|
7
|
+
*/
|
|
8
|
+
export declare const FACE_ATLAS_SURFACE_FRAME_PRIORITY = -0.4;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { FaceAtlasLayer } from './FaceAtlasLayer';
|
|
2
|
+
export type { FaceAtlasLayerProps, FaceAtlasMaterialContext, FaceAtlasMaterialResult, FaceAtlasMaterialSpec, } from './FaceAtlasLayer';
|
|
3
|
+
export { useFaceAtlasSurface } from './useFaceAtlasSurface';
|
|
4
|
+
export { MadeUpCamera, useMadeUpCamera, useMadeUpCameraTexture } from './MadeUpCamera';
|
|
5
|
+
export type { MadeUpCameraHandle, MadeUpCameraProps, UseMadeUpCameraOptions } from './MadeUpCamera';
|
|
6
|
+
export type { FaceAtlasSurfaceHandle, UseFaceAtlasSurfaceOptions } from './useFaceAtlasSurface';
|
|
7
|
+
export { FACE_ATLAS_RIG_FRAME_PRIORITY, FACE_ATLAS_STENCIL, FACE_ATLAS_SURFACE_FRAME_PRIORITY, FACE_RETOUCH_RENDER_ORDER, MAKEUP_BLENDING, MAKEUP_RENDER_ORDER, } from './constants';
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { FaceRigState } from '../../face-character/faceRig';
|
|
2
|
+
import { FaceAtlasQualityKey } from '../../face-atlas/quality';
|
|
3
|
+
import { FaceAtlasRef, FaceAtlasUniforms } from '../../face-atlas/registry';
|
|
4
|
+
import { FaceAtlasSurface } from '../../face-atlas/surface';
|
|
5
|
+
import type * as THREE from "three";
|
|
6
|
+
export type UseFaceAtlasSurfaceOptions = {
|
|
7
|
+
/**
|
|
8
|
+
* Which tracked face. Default: the nearest `FaceRig` / `FaceWarp3D` /
|
|
9
|
+
* `FaceMorph`'s face (its rig is borrowed), else the enclosing
|
|
10
|
+
* `FaceTracker`'s `faceIndex`, else 0. A different index than the rig
|
|
11
|
+
* above gets a rig of its own.
|
|
12
|
+
*/
|
|
13
|
+
faceIndex?: number;
|
|
14
|
+
/**
|
|
15
|
+
* Faces to ask the face model for when this starts it (no `FaceTracker`
|
|
16
|
+
* above): at least `faceIndex + 1`. The first component to start the
|
|
17
|
+
* model sets its count; a `FaceTracker` mounted in the same commit (beside,
|
|
18
|
+
* not around, the layer) starts it first, with its own `numFaces`.
|
|
19
|
+
*/
|
|
20
|
+
numFaces?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Landmark lead (ms) of the surface's own rig. Default: by quality tier
|
|
23
|
+
* (33 / 42 / 66 ms). A borrowed rig keeps its own `leadMs`.
|
|
24
|
+
*/
|
|
25
|
+
leadMs?: number;
|
|
26
|
+
/**
|
|
27
|
+
* Hold time (ms) of the face through tracking dropouts. Every layer on the
|
|
28
|
+
* face shares one hold: the largest `holdMs` any of them asks for wins
|
|
29
|
+
* (default 250 when none does). Ignored when riding a `FaceRig` /
|
|
30
|
+
* `FaceWarp3D` / `FaceMorph` (the rig keeps its own `holdMs`).
|
|
31
|
+
*/
|
|
32
|
+
holdMs?: number;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* One face's live face-atlas surface, shared by every layer on that face.
|
|
36
|
+
* Read the per-frame values (`surface.presence`, `rig.current.morphs`)
|
|
37
|
+
* inside `useFrame`.
|
|
38
|
+
*/
|
|
39
|
+
export type FaceAtlasSurfaceHandle = {
|
|
40
|
+
/** The surface: shared attributes, `presence`, `visible`, `createGeometry` / `releaseGeometry`. */
|
|
41
|
+
surface: FaceAtlasSurface;
|
|
42
|
+
/** The whole face (every atlas triangle, eye and mouth fills included), owned by the surface. */
|
|
43
|
+
geometry: THREE.BufferGeometry;
|
|
44
|
+
/**
|
|
45
|
+
* The pose group (canonical cm, posed by the rig, at the scene root): put
|
|
46
|
+
* meshes drawn from the surface's geometries in here, e.g. with
|
|
47
|
+
* `createPortal(mesh, handle.group)`. Hidden while the face is gone.
|
|
48
|
+
*/
|
|
49
|
+
group: THREE.Object3D;
|
|
50
|
+
/** The rig the surface follows: pose, landmarks, `morphs` (blendshapes, 0..1). */
|
|
51
|
+
rig: FaceAtlasRef<FaceRigState>;
|
|
52
|
+
/**
|
|
53
|
+
* The shared per-face uniforms: camera map, presence, and the face's skin
|
|
54
|
+
* probe while one runs (`useFaceSkin` for this face; null before).
|
|
55
|
+
*/
|
|
56
|
+
uniforms: FaceAtlasUniforms;
|
|
57
|
+
faceIndex: number;
|
|
58
|
+
/** True when the surface steps a rig of its own, false when it rides a `FaceRig` above. */
|
|
59
|
+
owned: boolean;
|
|
60
|
+
/** The quality tier the surface runs at. */
|
|
61
|
+
quality: FaceAtlasQualityKey;
|
|
62
|
+
/**
|
|
63
|
+
* Asks for the face's depth pre-pass and restore around the makeup layers
|
|
64
|
+
* (self-occlusion; high and medium tiers, with a stencil buffer). Returns
|
|
65
|
+
* the release; call it on unmount.
|
|
66
|
+
*/
|
|
67
|
+
requestSelfOcclusion: () => () => void;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* The live face-atlas surface of one face (`FaceAtlasSurfaceHandle`), or
|
|
71
|
+
* `null` on the first render. Works alone: with no `FaceTracker` above, it
|
|
72
|
+
* starts the face model itself (`numFaces`); inside a `FaceTracker` it
|
|
73
|
+
* follows that tracker's face; nested in a `FaceRig`, `FaceWarp3D` or
|
|
74
|
+
* `FaceMorph` it rides that face, warp included. Every layer on the same
|
|
75
|
+
* face shares one surface and one rig step per frame.
|
|
76
|
+
*
|
|
77
|
+
* ```tsx
|
|
78
|
+
* const face = useFaceAtlasSurface();
|
|
79
|
+
* useFrame(() => {
|
|
80
|
+
* if (face) console.log(face.surface.presence, face.rig.current.morphs[0]);
|
|
81
|
+
* });
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export declare const useFaceAtlasSurface: (options?: number | UseFaceAtlasSurfaceOptions) => FaceAtlasSurfaceHandle | null;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { FaceSkinQuality } from '../../face-atlas/probe/constants';
|
|
2
|
+
import { FaceSkinProbe } from '../../face-atlas/probe/FaceSkinProbe';
|
|
3
|
+
import { FaceSkinProbeFormat } from '../../face-atlas/probe/targets';
|
|
4
|
+
import * as THREE from "three";
|
|
5
|
+
/**
|
|
6
|
+
* `useFaceSkin`: one shared `FaceSkinProbe` per renderer and face, fed from
|
|
7
|
+
* the session camera and the face tracker, refcounted by every component
|
|
8
|
+
* that asks for that face's skin (makeup regions, custom layers).
|
|
9
|
+
*/
|
|
10
|
+
export type UseFaceSkinOptions = {
|
|
11
|
+
/** Which tracked face. Default: the enclosing `FaceTracker`'s `faceIndex`, else 0. */
|
|
12
|
+
faceIndex?: number;
|
|
13
|
+
/**
|
|
14
|
+
* Probe quality: `"auto"` (default) follows the session's quality tier
|
|
15
|
+
* (high 128² at 15 Hz, medium 128² at 10 Hz, low 64² at 5 Hz without the
|
|
16
|
+
* light fit). When several components share a face, the best one asked wins.
|
|
17
|
+
*/
|
|
18
|
+
quality?: FaceSkinQuality;
|
|
19
|
+
/** `false` releases the probe (the last user disposes it). Default true. */
|
|
20
|
+
enabled?: boolean;
|
|
21
|
+
};
|
|
22
|
+
/** The uniforms a shader that reads the probe spreads in (values kept current). */
|
|
23
|
+
export type FaceSkinUniforms = {
|
|
24
|
+
uSkinMap: {
|
|
25
|
+
value: THREE.Texture | null;
|
|
26
|
+
};
|
|
27
|
+
uSkinLod: {
|
|
28
|
+
value: number;
|
|
29
|
+
};
|
|
30
|
+
uSkinSqrt: {
|
|
31
|
+
value: number;
|
|
32
|
+
};
|
|
33
|
+
uSkinStats: {
|
|
34
|
+
value: THREE.Texture | null;
|
|
35
|
+
};
|
|
36
|
+
uSkinStatsPacked: {
|
|
37
|
+
value: number;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
/** A face's skin reference (see `FaceSkinProbe`). */
|
|
41
|
+
export type FaceSkinReference = {
|
|
42
|
+
/** The shared probe, or null before mount, while disabled, or outside a canvas. */
|
|
43
|
+
probe: FaceSkinProbe | null;
|
|
44
|
+
/** Atlas-space, premultiplied linear skin `(c·w, w)`, mipmapped. */
|
|
45
|
+
skinMap: THREE.Texture | null;
|
|
46
|
+
/** Every unwrapped texel (lips, brows) weighted by facing, same encoding. */
|
|
47
|
+
featureMap: THREE.Texture | null;
|
|
48
|
+
/** The 8 × 1 stats (`FACE_SKIN_STATS`), read with `FACE_SKIN_STATS_GLSL`. */
|
|
49
|
+
lightingMap: THREE.Texture | null;
|
|
50
|
+
/**
|
|
51
|
+
* `uSkinMap`, `uSkinLod`, `uSkinSqrt`, `uSkinStats`, `uSkinStatsPacked`:
|
|
52
|
+
* one object for this hook's lifetime, its values updated every frame.
|
|
53
|
+
* Spread it into a material's `uniforms`.
|
|
54
|
+
*/
|
|
55
|
+
uniforms: FaceSkinUniforms;
|
|
56
|
+
/** The probe has data (its first update ran). Shaders also read `ready` from the stats. */
|
|
57
|
+
ready: boolean;
|
|
58
|
+
/** `"half-float"` or the `"rgba8"` fallback (null before mount). */
|
|
59
|
+
format: FaceSkinProbeFormat | null;
|
|
60
|
+
faceIndex: number;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* The probe running for a renderer's face, if some `useFaceSkin` holds one
|
|
64
|
+
* (never starts one): the face-atlas surface copies its uniforms into the
|
|
65
|
+
* face's shared layer uniforms.
|
|
66
|
+
*/
|
|
67
|
+
export declare const peekFaceSkinProbe: (gl: THREE.WebGLRenderer, faceIndex: number) => FaceSkinProbe | null;
|
|
68
|
+
/**
|
|
69
|
+
* The person's own skin, light, lip and brow colours for one tracked face,
|
|
70
|
+
* measured from the raw session camera (makeup never feeds back into it).
|
|
71
|
+
* Every component that calls it for the same face shares one probe.
|
|
72
|
+
*
|
|
73
|
+
* ```tsx
|
|
74
|
+
* const skin = useFaceSkin();
|
|
75
|
+
* const material = useMemo(
|
|
76
|
+
* () => new THREE.ShaderMaterial({ uniforms: { ...createMakeupShadingUniforms(), ...skin.uniforms }, … }),
|
|
77
|
+
* [], // skin.uniforms is stable; its values follow the probe
|
|
78
|
+
* );
|
|
79
|
+
* ```
|
|
80
|
+
*
|
|
81
|
+
* It reads the face tracker but does not start it: mount it under a
|
|
82
|
+
* `FaceTracker` (or next to a component that runs the face model).
|
|
83
|
+
*/
|
|
84
|
+
export declare const useFaceSkin: (options?: UseFaceSkinOptions) => FaceSkinReference;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { BoundFaceMesh, ExternalFaceMeshBinding, ExternalFaceMeshPart, FaceModelAlignment } from '../../face-character/bindFaceModel';
|
|
3
|
+
import { FaceDriveMode } from '../../face-character/driveFaceModel';
|
|
4
|
+
import { FaceMeshBindingMode } from '../../face-character/faceMeshBinding';
|
|
5
|
+
import { FaceMorphName } from '../../face-character/faceMorphs';
|
|
6
|
+
import { FaceRigProps } from './FaceRig';
|
|
7
|
+
import type * as THREE from "three";
|
|
8
|
+
export type { ExternalFaceMeshBinding, ExternalFaceMeshPart };
|
|
9
|
+
export type ExternalFaceMeshProps = Omit<FaceRigProps, "children"> & {
|
|
10
|
+
/**
|
|
11
|
+
* The face model (e.g. a GLTF scene), authored in the canonical head frame:
|
|
12
|
+
* centimetres, +Y up, +Z out of the face, landmark 4 at `(0, -0.46, 7.59)` —
|
|
13
|
+
* the frame of `CanonicalHeadFrame` and the v3 head occluder `.blend`. It is
|
|
14
|
+
* cloned (geometry included), so one model can back several faces.
|
|
15
|
+
*/
|
|
16
|
+
model: THREE.Object3D;
|
|
17
|
+
/**
|
|
18
|
+
* What moves it with the expression (see `FaceDriveMode`): `"auto"`
|
|
19
|
+
* (default: `"morphs"` for a full ARKit morph set, `"hybrid"` with only eye
|
|
20
|
+
* / brow morphs, else `"landmarks"`), `"hybrid"`, `"morphs"`, `"landmarks"`
|
|
21
|
+
* or `"none"` (head pose only).
|
|
22
|
+
*/
|
|
23
|
+
drive?: FaceDriveMode;
|
|
24
|
+
/**
|
|
25
|
+
* How vertices bind to the face (see `FaceMeshBindingMode`) — used only where
|
|
26
|
+
* the landmarks bend the mesh (not with `drive="morphs"`). Default `"auto"`.
|
|
27
|
+
*/
|
|
28
|
+
binding?: FaceMeshBindingMode;
|
|
29
|
+
/**
|
|
30
|
+
* How far from the face surface a vertex still follows the landmarks (cm):
|
|
31
|
+
* fully up to the first value, rigid beyond the second. Default `[0.8, 2.5]`.
|
|
32
|
+
*/
|
|
33
|
+
falloff?: readonly [number, number];
|
|
34
|
+
/**
|
|
35
|
+
* Per mesh (by object name): `"surface"`, `"follow"` or `"rigid"`. Default:
|
|
36
|
+
* `"follow"` for a mesh that sits inside the head (eyeballs, teeth),
|
|
37
|
+
* `"surface"` for the rest.
|
|
38
|
+
*/
|
|
39
|
+
parts?: Record<string, ExternalFaceMeshPart>;
|
|
40
|
+
/**
|
|
41
|
+
* Where the model's own features are, so its lids and eyeballs bind to its
|
|
42
|
+
* own eyes (see `FaceFeatureAlignment`). `"auto"` (default): the eyes from
|
|
43
|
+
* the model's eyeballs, when they sit within 1.5 cm of the canonical eye
|
|
44
|
+
* openings; give the positions for a stylised face; `false`: as it is.
|
|
45
|
+
*/
|
|
46
|
+
align?: FaceModelAlignment;
|
|
47
|
+
/**
|
|
48
|
+
* Fit the model's head width to the person's: the ears and the back of the
|
|
49
|
+
* head (not the face) widen or narrow to `FACE_HEAD_WIDTH_RATIO` × the
|
|
50
|
+
* person's face width (landmarks 234–454, from the captured neutral face),
|
|
51
|
+
* ramping in from the face (`FACE_HEAD_FIT_RAMP`). Ears are not tracked, so
|
|
52
|
+
* this is an estimate; `{ width }` scales it (1.05 = 5 % wider). Width
|
|
53
|
+
* only. Default `false`.
|
|
54
|
+
*/
|
|
55
|
+
headFit?: boolean | {
|
|
56
|
+
width?: number;
|
|
57
|
+
};
|
|
58
|
+
/** Expression strength: 0 = rest, 1 = the tracked face, > 1 exaggerates. Default 1. */
|
|
59
|
+
expression?: number;
|
|
60
|
+
/** A gain per expression channel on its morph target (e.g. `{ eyeBlinkLeft: 1.2 }`). */
|
|
61
|
+
morphGain?: Partial<Record<FaceMorphName, number>>;
|
|
62
|
+
/** How far a full look turns an eyeball: [sideways, up/down], degrees. Default [25, 20]. */
|
|
63
|
+
gazeDegrees?: readonly [number, number];
|
|
64
|
+
/** Called once per model with every mesh's binding (inspection, debug views). */
|
|
65
|
+
onBind?: (bindings: ExternalFaceMeshBinding[]) => void;
|
|
66
|
+
/** More content in the canonical head frame (accessories, occluders). */
|
|
67
|
+
children?: ReactNode;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* A typical head's width at the ears over its face width at landmarks
|
|
71
|
+
* 234–454 (both in the canonical frame), the head-size fit's target. Measured
|
|
72
|
+
* on a real head; ears vary, so `headFit.width` fine-tunes it per person.
|
|
73
|
+
*/
|
|
74
|
+
export declare const FACE_HEAD_WIDTH_RATIO = 1.2;
|
|
75
|
+
/**
|
|
76
|
+
* The head width multiplier for a model `earWidth` cm wide at its ears: the
|
|
77
|
+
* person's face width (canonical 234–454 plus their captured neutral shape)
|
|
78
|
+
* × `FACE_HEAD_WIDTH_RATIO` × `width`, over the model's, clamped to 0.8–1.3.
|
|
79
|
+
*/
|
|
80
|
+
export declare const faceHeadWidth: (neutral: ArrayLike<number>, earWidth: number, width?: number) => number;
|
|
81
|
+
/** The meshes of the nearest `ExternalFaceMesh` above, bound to the face (its clone's, not the source model's). */
|
|
82
|
+
export declare const ExternalFaceMeshContext: import('react').Context<readonly BoundFaceMesh[] | null>;
|
|
83
|
+
/**
|
|
84
|
+
* The bound meshes of the nearest `ExternalFaceMesh` above (for components
|
|
85
|
+
* that work on the worn model, like `FaceReprojection`); `null` outside one.
|
|
86
|
+
*/
|
|
87
|
+
export declare const useExternalFaceMesh: () => readonly BoundFaceMesh[] | null;
|
|
88
|
+
/**
|
|
89
|
+
* Your own face model, worn on the tracked face. Authored in the canonical
|
|
90
|
+
* head frame (centimetres, like `CanonicalHeadFrame`), it is placed with the
|
|
91
|
+
* head pose and takes on the face's expression (`drive`): the tracked
|
|
92
|
+
* landmarks bend the mesh — every vertex is bound once to the canonical face
|
|
93
|
+
* surface (by UV when its face UVs follow the canonical layout, else by its
|
|
94
|
+
* closest point), fading to rigid away from the face — and the model's own
|
|
95
|
+
* ARKit-named morph targets play the face's blendshapes (by default the eyes
|
|
96
|
+
* and brows, where an authored blink beats bent landmarks); eyeballs
|
|
97
|
+
* turn with the gaze. Any topology, any UV layout. Only the expression moves it: the person's own face shape is
|
|
98
|
+
* captured as the neutral when the face is found and subtracted (`neutral`,
|
|
99
|
+
* `neutralKey`), so the model keeps its shape. Mount inside a `FaceTracker`;
|
|
100
|
+
* inside a `FaceRig` it shares that rig (and its rig props are ignored),
|
|
101
|
+
* otherwise it runs its own.
|
|
102
|
+
*
|
|
103
|
+
* ```tsx
|
|
104
|
+
* <FaceTracker>
|
|
105
|
+
* <ExternalFaceMesh model={gltf.scene} />
|
|
106
|
+
* </FaceTracker>
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export declare const ExternalFaceMesh: ({ faceIndex, smoothing, expressionSmoothing, holdMs, neutral, neutralMs, leadMs, neutralKey, onTrackingChange, ...props }: ExternalFaceMeshProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { MutableRefObject, ReactNode } from 'react';
|
|
2
|
+
import { ExpressionRule, ExpressionState } from '../../face-character/faceExpressions';
|
|
3
|
+
import { ExpressionOutputRule, ExpressionOutputs } from '../../face-character/expressionOutputs';
|
|
4
|
+
import { FaceRigProps } from './FaceRig';
|
|
5
|
+
export type FaceExpressionControllerRule = ExpressionOutputRule;
|
|
6
|
+
export type { ExpressionOutputs };
|
|
7
|
+
export type UseExpressionValuesResult = {
|
|
8
|
+
/** Live rule state (`value`, `target`, `active`), by rule index — read it in `useFrame`. */
|
|
9
|
+
state: MutableRefObject<ExpressionState>;
|
|
10
|
+
/** A rule's current value, by `id` or index (read it in `useFrame`). */
|
|
11
|
+
get: (rule: string | number) => number;
|
|
12
|
+
/** Puts every rule back at rest. */
|
|
13
|
+
reset: () => void;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Runs expression rules on the nearest `FaceRig`'s face every frame and
|
|
17
|
+
* returns their live values — the headless form of `FaceExpressionController`.
|
|
18
|
+
* Must be inside a `FaceRig` (or an `ExternalFaceMesh`'s children).
|
|
19
|
+
*/
|
|
20
|
+
export declare const useExpressionValues: (rules: readonly ExpressionRule[], { resetKey }?: {
|
|
21
|
+
resetKey?: unknown;
|
|
22
|
+
}) => UseExpressionValuesResult;
|
|
23
|
+
export type FaceExpressionControllerProps = Omit<FaceRigProps, "children"> & {
|
|
24
|
+
/** The rules: an input, its shaping (range, curve, multiplier, clamp, smoothing, rest) and outputs. */
|
|
25
|
+
rules: readonly FaceExpressionControllerRule[];
|
|
26
|
+
/** A new value puts every rule back at rest. */
|
|
27
|
+
resetKey?: unknown;
|
|
28
|
+
/** What the outputs act on (models, accessories), in the canonical head frame. */
|
|
29
|
+
children?: ReactNode;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Turns the tracked face's expression into behaviour: each rule reads a
|
|
33
|
+
* blendshape (neutral removed), a combination, a Face Action or your own
|
|
34
|
+
* function; shapes it (range, curve, multiplier, clamp, attack / release
|
|
35
|
+
* smoothing); and drives morph targets, material uniforms or properties,
|
|
36
|
+
* visibility, transforms, triggers (`onStart` / `onEnd`) or your own setter
|
|
37
|
+
* on its children. On face loss the values ease back to rest. Inside a
|
|
38
|
+
* `FaceRig` (or an `ExternalFaceMesh`'s children) it shares that rig;
|
|
39
|
+
* otherwise it runs its own (mount it in a `FaceTracker`).
|
|
40
|
+
*
|
|
41
|
+
* ```tsx
|
|
42
|
+
* <FaceExpressionController
|
|
43
|
+
* rules={[
|
|
44
|
+
* { input: "jawOpen", multiplier: 1.3, morph: "mouthOpen" },
|
|
45
|
+
* { input: { channels: ["mouthSmileLeft", "mouthSmileRight"], combine: "avg" }, target: "cheeks", property: "uBlush" },
|
|
46
|
+
* { input: { action: "eyeBlink" }, onStart: () => sfx.play("blink") },
|
|
47
|
+
* ]}
|
|
48
|
+
* >
|
|
49
|
+
* <primitive object={character} />
|
|
50
|
+
* </FaceExpressionController>
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare const FaceExpressionController: ({ rules, resetKey, children, faceIndex, smoothing, expressionSmoothing, holdMs, neutral, neutralMs, leadMs, neutralKey, onTrackingChange, }: FaceExpressionControllerProps) => import("react/jsx-runtime").JSX.Element;
|