@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,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLSL chunks for makeup shaders (FACE-1).
|
|
3
|
+
*
|
|
4
|
+
* `atlasVertex` is the whole vertex shader of a layer on the face-atlas
|
|
5
|
+
* surface (`FaceAtlasLayer`): it writes every varying the fragment chunks
|
|
6
|
+
* read. For the fragment shader, concatenate these in order, then your
|
|
7
|
+
* `main()`:
|
|
8
|
+
*
|
|
9
|
+
* `common` → `shading` → `sparkle` → `finish` → `shapes`
|
|
10
|
+
*
|
|
11
|
+
* ```glsl
|
|
12
|
+
* void main() {
|
|
13
|
+
* MakeupSample s = makeupSample(); // first: it takes derivatives
|
|
14
|
+
* float mask = blushShape(s.rest); // or your own shape
|
|
15
|
+
* makeupOutput(s, makeupFinish(s, makeupShade(s), mask));
|
|
16
|
+
* }
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* With a mask, split the sample around an early out, so fragments outside
|
|
20
|
+
* the shape read no texture:
|
|
21
|
+
*
|
|
22
|
+
* ```glsl
|
|
23
|
+
* MakeupSample s = makeupSampleGeometry(); // derivatives, rest point, fades
|
|
24
|
+
* float mask = blushShape(s.rest);
|
|
25
|
+
* if (mask * s.fade < 1.0 / 255.0) discard;
|
|
26
|
+
* makeupSampleColor(s); // camera and skin, explicit LODs
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* `common` alone with `shading` is enough for a matte layer:
|
|
30
|
+
* `makeupOutput(s, makeupDiffuse(s, uColor, uCoverage), mask * s.fade * uOpacity, vec3(0.0))`.
|
|
31
|
+
* Draw with `MAKEUP_BLENDING` (premultiplied over). A custom vertex side
|
|
32
|
+
* declares `MAKEUP_VARYINGS_GLSL` and writes every varying in it.
|
|
33
|
+
*
|
|
34
|
+
* `design` (after `common`) samples creator art in the face atlas
|
|
35
|
+
* (`MakeupDesign`): `makeupDesignSample(s.uv)` returns linear rgb and
|
|
36
|
+
* straight alpha, flipped on mirrored feeds so each side stays on the
|
|
37
|
+
* person's own side. Call it before any `discard`.
|
|
38
|
+
*
|
|
39
|
+
* `eyes` (after `shapes`) holds the eye regions' masks (`Eyeshadow`,
|
|
40
|
+
* `Eyeliner`, `Brows`): `eyelinerShape`, `eyeshadowZones` / `eyeshadowMask`
|
|
41
|
+
* / `eyeshadowColor`, and `browGeometry` / `browReach` / `browMask`, on the
|
|
42
|
+
* rest point in canonical cm, with blink fades from `uBlink`.
|
|
43
|
+
*/
|
|
44
|
+
export declare const MAKEUP_GLSL: Readonly<{
|
|
45
|
+
atlasVertex: string;
|
|
46
|
+
common: string;
|
|
47
|
+
shading: string;
|
|
48
|
+
sparkle: string;
|
|
49
|
+
finish: string;
|
|
50
|
+
shapes: string;
|
|
51
|
+
design: "\nuniform sampler2D uDesignMap;\nuniform float uDesignSrgb;\nuniform float uDesignPremultiplied;\n\n// The art's uv on this feed: (1 - u, v) on a mirrored feed (uPersonLeftSign < 0).\nvec2 makeupDesignUv(vec2 uv) {\n return vec2(uPersonLeftSign < 0.0 ? 1.0 - uv.x : uv.x, uv.y);\n}\n\nvec3 makeupDesignDecode(vec3 c) {\n vec3 low = c / 12.92;\n vec3 high = pow((c + 0.055) / 1.055, vec3(2.4));\n return mix(low, high, step(vec3(0.04045), c));\n}\n\n// The art at an atlas uv: linear rgb, straight alpha. Implicit derivatives: call before any discard.\nvec4 makeupDesignSample(vec2 uv) {\n vec4 texel = texture(uDesignMap, makeupDesignUv(uv));\n float a = clamp(texel.a, 0.0, 1.0);\n vec3 c = uDesignPremultiplied > 0.5 ? texel.rgb / max(a, 1e-4) : texel.rgb;\n c = clamp(c, 0.0, 1.0);\n return vec4(uDesignSrgb > 0.5 ? makeupDesignDecode(c) : c, a);\n}\n";
|
|
52
|
+
eyes: string;
|
|
53
|
+
}>;
|
|
54
|
+
export { MAKEUP_VARYINGS_GLSL } from './common';
|
|
55
|
+
export { FACE_ATLAS_ATTRIBUTES_GLSL, FACE_SKIN_STATS_TEXELS } from './atlasVertex';
|
|
56
|
+
export { createMakeupShadingUniforms, type MakeupShadingUniforms } from './uniforms';
|
|
57
|
+
export { createMakeupShapeUniforms, type MakeupShapeUniforms } from './shapes';
|
|
58
|
+
export { createMakeupDesignUniforms, type MakeupDesignUniforms } from './design';
|
|
59
|
+
export { createMakeupEyeUniforms, type MakeupEyeUniforms } from './eyes';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `MAKEUP_GLSL.shading` (after `common`): skin-relative light terms, the
|
|
3
|
+
* diffuse (sheer / opaque coverage), auto shades and the output operator.
|
|
4
|
+
* Mirrors `makeupLighting`, `makeupDiffuse`, `makeupAutoShade` and
|
|
5
|
+
* `makeupOutput` in `lib/face-atlas/shading.ts`.
|
|
6
|
+
*
|
|
7
|
+
* - `S = lum(C) / lum(Rs)`: light on this pixel relative to the GLOBAL
|
|
8
|
+
* settled skin, so a side-lit face keeps its shadow side and skin tone
|
|
9
|
+
* never enters the paint.
|
|
10
|
+
* - `L` (local low-pass) only clips the skin's own shine out of the diffuse
|
|
11
|
+
* (`Sd`) and measures the real highlight `Hcam`.
|
|
12
|
+
* - `makeupOutput` writes premultiplied `(k·enc(D) + enc(base+H) − enc(base), k)`;
|
|
13
|
+
* draw it with `MAKEUP_BLENDING` (One, OneMinusSrcAlpha): opacity is linear.
|
|
14
|
+
*/
|
|
15
|
+
export declare const MAKEUP_SHADING_GLSL: string;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import * as THREE from "three";
|
|
2
|
+
/**
|
|
3
|
+
* `MAKEUP_GLSL.shapes` (after `common`, `shading`, `sparkle` and `finish`):
|
|
4
|
+
* the region shapes, evaluated per fragment on the rest position (canonical
|
|
5
|
+
* cm). Mirrors `lib/face-atlas/shapes.ts`.
|
|
6
|
+
*
|
|
7
|
+
* Face regions (blush, contour, highlighter) are up to `MAKEUP_SHAPE_MAX`
|
|
8
|
+
* soft tapered capsules, set as uniforms from the settings (shape, size,
|
|
9
|
+
* lift), so a shape or size change never recompiles:
|
|
10
|
+
*
|
|
11
|
+
* - `uShapeStart[i]` / `uShapeEnd[i]`: `xyz` the capsule's ends on the
|
|
12
|
+
* canonical −X half (cm), `w` the radius there; `uShapeWeight[i]` its
|
|
13
|
+
* strength; `uShapeCount` the capsules in use.
|
|
14
|
+
* - `uSoftness`: the edge profile, `1 − smoothstep(1 − s, 1 + s, d / r)`.
|
|
15
|
+
* - `uEyeGuard`: `(start, full)` in `eyeRing` hops: fades the shape off the
|
|
16
|
+
* lash line and lids (start ≥ full: off).
|
|
17
|
+
* - `uLipGuard`: the `lipEdge` where the shape is full: fades it to 0 on the
|
|
18
|
+
* outer lip line, where the lips' own triangles (never drawn by a face
|
|
19
|
+
* region) begin, so no shape ends at a hard edge there (0: off).
|
|
20
|
+
*
|
|
21
|
+
* The rest point is folded onto the −X half (`x → −|x|`), so shapes are
|
|
22
|
+
* mirror-symmetric; `s.fade` (from `makeupSample()`) applies the person's
|
|
23
|
+
* own sides. Capsules combine as a soft union, `1 − Π(1 − wᵢ·mᵢ)`.
|
|
24
|
+
*
|
|
25
|
+
* `blushShape`, `contourShape` and `highlighterShape` are the region masks
|
|
26
|
+
* custom materials call (`blushShape(s.rest)`); all three read the same
|
|
27
|
+
* uniforms, which each region's material holds for its own shape.
|
|
28
|
+
*/
|
|
29
|
+
export declare const MAKEUP_SHAPES_GLSL: string;
|
|
30
|
+
/**
|
|
31
|
+
* The uniforms `MAKEUP_GLSL.shapes` declares, empty (no capsules: the mask is
|
|
32
|
+
* 0). `uShapeStart` / `uShapeEnd` / `uShapeWeight` hold Float32Arrays whose
|
|
33
|
+
* identity never changes (`packMakeupShapePrimitives` writes into them).
|
|
34
|
+
*/
|
|
35
|
+
export declare const createMakeupShapeUniforms: () => {
|
|
36
|
+
/** `[x, y, z, radius]` per capsule: the start, canonical −X half, cm. */
|
|
37
|
+
uShapeStart: {
|
|
38
|
+
value: Float32Array<ArrayBuffer>;
|
|
39
|
+
};
|
|
40
|
+
/** `[x, y, z, radius]` per capsule: the end. */
|
|
41
|
+
uShapeEnd: {
|
|
42
|
+
value: Float32Array<ArrayBuffer>;
|
|
43
|
+
};
|
|
44
|
+
/** Each capsule's strength, 0..1. */
|
|
45
|
+
uShapeWeight: {
|
|
46
|
+
value: Float32Array<ArrayBuffer>;
|
|
47
|
+
};
|
|
48
|
+
/** Capsules in use. */
|
|
49
|
+
uShapeCount: {
|
|
50
|
+
value: number;
|
|
51
|
+
};
|
|
52
|
+
/** Edge feather, 0..1 (`softness`). */
|
|
53
|
+
uSoftness: {
|
|
54
|
+
value: number;
|
|
55
|
+
};
|
|
56
|
+
/** `(start, full)` of the eye guard in `eyeRing` hops; `(0, 0)` is off. */
|
|
57
|
+
uEyeGuard: {
|
|
58
|
+
value: THREE.Vector2;
|
|
59
|
+
};
|
|
60
|
+
/** The `lipEdge` where the shape is full (the lip guard); 0 is off. */
|
|
61
|
+
uLipGuard: {
|
|
62
|
+
value: number;
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
/** The uniforms `MAKEUP_GLSL.shapes` reads. */
|
|
66
|
+
export type MakeupShapeUniforms = ReturnType<typeof createMakeupShapeUniforms>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `MAKEUP_GLSL.sparkle` (after `common`): antialiased flakes for shimmer and
|
|
3
|
+
* glitter. Mirrors `makeupFlakes` in `lib/face-atlas/shading.ts` (the hash
|
|
4
|
+
* is integer PCG3D, bit-exact with the mirror).
|
|
5
|
+
*
|
|
6
|
+
* - Flakes hash 3D cells of the rest position (canonical cm), so they stick
|
|
7
|
+
* to the skin. A flake is a sphere inside its cell; the rest-space facet
|
|
8
|
+
* slices it into a disc whose edge ramp integrates to the disc's exact area,
|
|
9
|
+
* so the mean coverage is the flake volume fraction (Delesse).
|
|
10
|
+
* - Flake normals follow a von Mises-Fisher distribution (concentration
|
|
11
|
+
* kappa) around the rest-normal-times-pose, in a frame tied to the head's
|
|
12
|
+
* up, so a still face keeps its sparkle pattern. The glint is
|
|
13
|
+
* `exp(sharpness * (dot(nf, h) - 1))`, whose mean over the flake normals has
|
|
14
|
+
* a closed form.
|
|
15
|
+
* - A flake smaller than `MAKEUP_FLAKES.resolveFullPx` (1.5 px) fades to that
|
|
16
|
+
* expected value (fully at `resolveStartPx`, 0.75 px), so the mean energy is
|
|
17
|
+
* the same at every pixel size. `quality` 0 always returns the expected value.
|
|
18
|
+
*/
|
|
19
|
+
export declare const MAKEUP_SPARKLE_GLSL: string;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import * as THREE from "three";
|
|
2
|
+
/**
|
|
3
|
+
* Every uniform `MAKEUP_GLSL.common` and `MAKEUP_GLSL.atlasVertex` declare,
|
|
4
|
+
* with neutral defaults: a white matte layer at full opacity on both sides,
|
|
5
|
+
* no skin data (`uSkinMap` and `uSkinStats` null; the probe's readiness
|
|
6
|
+
* comes through the vertex stats). Colours are linear (`THREE.Color.set("#hex")`
|
|
7
|
+
* converts from sRGB). Spread `useFaceSkin().uniforms` after these to bind
|
|
8
|
+
* the probe (`uSkinMap`, `uSkinLod`, `uSkinSqrt`, `uSkinStats`,
|
|
9
|
+
* `uSkinStatsPacked`).
|
|
10
|
+
*/
|
|
11
|
+
export declare const createMakeupShadingUniforms: () => {
|
|
12
|
+
/** The camera feed (an sRGB texture, so samples are linear). */
|
|
13
|
+
uCameraMap: {
|
|
14
|
+
value: THREE.Texture | null;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* The skin probe's statistics (`FACE_SKIN_STATS_TEXELS`), read by the
|
|
18
|
+
* atlas vertex chunk. Null binds three's 1×1 empty texture, which reads as
|
|
19
|
+
* "not ready"; a sampler missing from the material would read texture
|
|
20
|
+
* unit 0 (often the camera) as the probe.
|
|
21
|
+
*/
|
|
22
|
+
uSkinStats: {
|
|
23
|
+
value: THREE.Texture | null;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* 1 when `uSkinStats` is the packed RGBA8 layout (three bytes per value,
|
|
27
|
+
* `FaceSkinProbe.statsFormat` "packed"), 0 for float stats.
|
|
28
|
+
*/
|
|
29
|
+
uSkinStatsPacked: {
|
|
30
|
+
value: number;
|
|
31
|
+
};
|
|
32
|
+
/** `FaceSkinProbe.skinMap`: atlas, premultiplied linear `(c·w, w)`, mipmapped. */
|
|
33
|
+
uSkinMap: {
|
|
34
|
+
value: THREE.Texture | null;
|
|
35
|
+
};
|
|
36
|
+
/** The low-pass mip of `uSkinMap`: `makeupSkinLod(probeSize)` (2 at 128², 1 at 64²). */
|
|
37
|
+
uSkinLod: {
|
|
38
|
+
value: number;
|
|
39
|
+
};
|
|
40
|
+
/** 1 when the probe fell back to RGBA8: rgb holds `w·√c` (the root before premultiplying). */
|
|
41
|
+
uSkinSqrt: {
|
|
42
|
+
value: number;
|
|
43
|
+
};
|
|
44
|
+
/** P: the shade, linear. */
|
|
45
|
+
uColor: {
|
|
46
|
+
value: THREE.Color;
|
|
47
|
+
};
|
|
48
|
+
/** `MAKEUP_AUTO_SHADE_ID`; 0 uses `uColor`. */
|
|
49
|
+
uAutoShade: {
|
|
50
|
+
value: number;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* Pigment amount, linear: 0.8 renders 80%. Gloss highlights and glitter
|
|
54
|
+
* flakes follow the mask instead and fade out only below
|
|
55
|
+
* `MAKEUP_FINISH_MODEL.maskTermsFullOpacity`.
|
|
56
|
+
*/
|
|
57
|
+
uOpacity: {
|
|
58
|
+
value: number;
|
|
59
|
+
};
|
|
60
|
+
/** 0 sheer (filters the person's colour, never lighter) … 1 opaque. */
|
|
61
|
+
uCoverage: {
|
|
62
|
+
value: number;
|
|
63
|
+
};
|
|
64
|
+
/** `MAKEUP_FINISH_ID`. */
|
|
65
|
+
uFinish: {
|
|
66
|
+
value: number;
|
|
67
|
+
};
|
|
68
|
+
/** Finish highlight strength, 0..1. */
|
|
69
|
+
uShine: {
|
|
70
|
+
value: number;
|
|
71
|
+
};
|
|
72
|
+
/** Flake colour, linear (used when `uSparkleAuto` is 0). */
|
|
73
|
+
uSparkleColor: {
|
|
74
|
+
value: THREE.Color;
|
|
75
|
+
};
|
|
76
|
+
/** 1 derives the flake colour from the shade (`sparkleColor: ""`). */
|
|
77
|
+
uSparkleAuto: {
|
|
78
|
+
value: number;
|
|
79
|
+
};
|
|
80
|
+
/** Flake density, 0..1. */
|
|
81
|
+
uSparkleDensity: {
|
|
82
|
+
value: number;
|
|
83
|
+
};
|
|
84
|
+
/** Flake diameter, mm. */
|
|
85
|
+
uSparkleSize: {
|
|
86
|
+
value: number;
|
|
87
|
+
};
|
|
88
|
+
/** 1 on the high and medium tiers, 0 on low. */
|
|
89
|
+
uSparkleQuality: {
|
|
90
|
+
value: number;
|
|
91
|
+
};
|
|
92
|
+
/** `(leftOn, rightOn)`: the person's own sides. */
|
|
93
|
+
uSide: {
|
|
94
|
+
value: THREE.Vector2;
|
|
95
|
+
};
|
|
96
|
+
/** #298 `personLeftSign(mirrored)`: +1 unmirrored, −1 on the mirrored webcam. */
|
|
97
|
+
uPersonLeftSign: {
|
|
98
|
+
value: number;
|
|
99
|
+
};
|
|
100
|
+
/** The hold / hide fade, 0..1. */
|
|
101
|
+
uPresence: {
|
|
102
|
+
value: number;
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
/** The uniforms `MAKEUP_GLSL.common` reads. */
|
|
106
|
+
export type MakeupShadingUniforms = ReturnType<typeof createMakeupShadingUniforms>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { FaceAtlasRegion } from './regions';
|
|
2
|
+
/**
|
|
3
|
+
* Atlas UV → pixel in a `size`-pixel square image. Images load with `flipY`,
|
|
4
|
+
* so `v = 1` is the image's top row.
|
|
5
|
+
*/
|
|
6
|
+
export declare const faceAtlasUvToPixel: (u: number, v: number, size: number) => {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* The same point of the face on the other side: `(1 − u, v)`. Exact for the
|
|
12
|
+
* face atlas (its layout is symmetric to 0.001), so art can be mirrored by
|
|
13
|
+
* flipping the image horizontally. Not valid for `CANONICAL_FACE_UVS`.
|
|
14
|
+
*/
|
|
15
|
+
export declare const mirrorFaceAtlasUv: (u: number, v: number) => {
|
|
16
|
+
u: number;
|
|
17
|
+
v: number;
|
|
18
|
+
};
|
|
19
|
+
export type FaceAtlasGuideOptions = {
|
|
20
|
+
/** Pixel size of the square canvas the guide represents. Default 1024. */
|
|
21
|
+
size?: number;
|
|
22
|
+
/** Regions to outline and tint. Default every region except `face` and `skin`. */
|
|
23
|
+
regions?: readonly FaceAtlasRegion[];
|
|
24
|
+
/** Draw the whole triangle wireframe. Default true. */
|
|
25
|
+
wireframe?: boolean;
|
|
26
|
+
/** Draw the title, region names and side labels. Default true. */
|
|
27
|
+
labels?: boolean;
|
|
28
|
+
/** Fill the canvas with a colour. Omit for a transparent background. */
|
|
29
|
+
background?: string;
|
|
30
|
+
};
|
|
31
|
+
export declare const FACE_ATLAS_GUIDE_COLORS: Readonly<Record<FaceAtlasRegion | "wireframe" | "text" | "frame", string>>;
|
|
32
|
+
/**
|
|
33
|
+
* A creator template of the face atlas as an SVG string: every region's
|
|
34
|
+
* triangles tinted and outlined, the wireframe, and which side of the image
|
|
35
|
+
* is which side of the person. Derived from the bundled atlas data, so it
|
|
36
|
+
* registers exactly with what the SDK samples.
|
|
37
|
+
*/
|
|
38
|
+
export declare const createFaceAtlasGuideSvg: (options?: FaceAtlasGuideOptions) => string;
|
|
39
|
+
/** The guide as an `image/svg+xml` data URL, loadable with `THREE.TextureLoader` or an `<img>`. */
|
|
40
|
+
export declare const createFaceAtlasGuideDataUrl: (options?: FaceAtlasGuideOptions) => string;
|
|
41
|
+
/**
|
|
42
|
+
* Rasterize a square guide SVG to a PNG `Blob` in the browser (an `<img>` and
|
|
43
|
+
* a 2D canvas). Shared by the atlas guide and the face-texture guide; `name`
|
|
44
|
+
* prefixes the error messages.
|
|
45
|
+
*/
|
|
46
|
+
export declare const rasterizeGuideSvg: (svg: string, size: number, name: string) => Promise<Blob>;
|
|
47
|
+
/**
|
|
48
|
+
* Rasterize the guide to a PNG `Blob` in the browser (an `<img>` and a 2D
|
|
49
|
+
* canvas), for download or as a texture. Transparent unless `background` is set.
|
|
50
|
+
*/
|
|
51
|
+
export declare const createFaceAtlasGuidePngBlob: (options?: FaceAtlasGuideOptions) => Promise<Blob>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The face atlas: the SDK's one texture layout for painting on the face
|
|
3
|
+
* (makeup, face swap, faceless, LipEffect designs). It is the canonical face
|
|
4
|
+
* OBJ's `vt` layout, bundled as generated data, plus regions, feature lines,
|
|
5
|
+
* static vertex attributes, masks and the creator guide. SDK modules import
|
|
6
|
+
* from here; the public subset is re-exported from `entries/face-effects.ts`.
|
|
7
|
+
* The live-surface registry (`./registry`) and the GLSL chunks (`./glsl`)
|
|
8
|
+
* are imported by path: they pull in the face rig and generated shader
|
|
9
|
+
* text, which a consumer of the atlas data alone should not bundle.
|
|
10
|
+
*/
|
|
11
|
+
export { FACE_ATLAS_EYE_FILLS, FACE_ATLAS_EYE_RINGS, FACE_ATLAS_LIP_RINGS, FACE_ATLAS_MIRROR, FACE_ATLAS_MOUTH_FILL, FACE_ATLAS_NOSTRILS, FACE_ATLAS_OVAL_RING, FACE_ATLAS_SOURCE, FACE_ATLAS_TRIANGLES, FACE_ATLAS_UVS, } from './faceAtlas.generated';
|
|
12
|
+
export { faceAtlasOpenTriangles, getFaceAtlasAttributes, getFaceAtlasLipBand, type FaceAtlasAttributes, } from './attributes';
|
|
13
|
+
export { collectRingBandTriangles, computeEdgeDistance, computeHopDistance, computeRingDistance, computeVertexNormals, triangleIdsToVertices, } from './topology';
|
|
14
|
+
export { FACE_ATLAS_ANCHORS, FACE_ATLAS_POLYLINES, FACE_ATLAS_POLYLINE_NAMES, createFaceAtlasPolylineGlsl, faceAtlasAnchorPosition, mirrorFaceAtlasPolyline, type FaceAtlasAnchorName, type FaceAtlasPolyline, type FaceAtlasPolylineName, } from './polylines';
|
|
15
|
+
export { FACE_ATLAS_REGIONS, getFaceAtlasRegionBounds, getFaceAtlasRegionIndices, getFaceAtlasRegionTriangles, type FaceAtlasRegion, type FaceAtlasRegionSelection, type FaceAtlasUvBounds, } from './regions';
|
|
16
|
+
export { createFaceAtlasMask, createFaceAtlasMaskTexture, faceAtlasMaskToRgba, type FaceAtlasMask, type FaceAtlasMaskOptions, type FaceAtlasMaskTextureOptions, } from './masks';
|
|
17
|
+
export { FACE_ATLAS_CM_PER_UV, FACE_SKIN_MASK, createFaceSkinMask, getFaceSkinMaskTexture, } from './skinMask';
|
|
18
|
+
export { FACE_ATLAS_GUIDE_COLORS, createFaceAtlasGuideDataUrl, createFaceAtlasGuidePngBlob, createFaceAtlasGuideSvg, faceAtlasUvToPixel, mirrorFaceAtlasUv, type FaceAtlasGuideOptions, } from './guide';
|
|
19
|
+
export { LANDMARK_LEAD, LANDMARK_LEAD_COUNT, LandmarkLead, createFaceLandmarkLead, createLandmarkNeighbours, getFaceLandmarkNeighbours, type LandmarkLeadPoint, type LandmarkLeadStep, type LandmarkLeadTuning, type LandmarkNeighbours, } from './lead';
|
|
20
|
+
export { FACE_ATLAS_SURFACE, FACE_ATLAS_SURFACE_ATTRIBUTES, FaceAtlasSurface, faceAtlasSelectionIndices, writeFaceAtlasNormals, type FaceAtlasSurfaceAttributeName, type FaceAtlasSurfaceInput, type FaceAtlasSurfaceTracking, type FaceAtlasTriangleSelection, } from './surface';
|
|
21
|
+
export { FACE_ATLAS_STENCIL, FACE_RETOUCH_RENDER_ORDER, MAKEUP_BLENDING, MAKEUP_RENDER_ORDER, faceAtlasLayerSelfOccludes, } from './renderState';
|
|
22
|
+
export { FACE_ATLAS_PREPASS_STATE, FACE_ATLAS_RESTORE_STATE, createFaceAtlasPrepassMaterial, createFaceAtlasRestoreMaterial, faceAtlasTargetHasStencil, guardFaceAtlasStencilDraw, } from './selfOcclusion';
|
|
23
|
+
export { FACE_ATLAS_QUALITY, resolveFaceAtlasQualityKey, type FaceAtlasQualityKey, } from './quality';
|
|
24
|
+
export { FACE_ATLAS_BLINK_MORPHS, faceAtlasDesignFlipU, faceAtlasSideHalves, makeupSideWeights, type FaceAtlasSide, } from './sides';
|
|
25
|
+
export { MAKEUP_SHAPE_MAX, MAKEUP_SHAPE_SOFTNESS_MIN, createMakeupShapePrimitives, evaluateMakeupShapeMask, faceAtlasSurfacePoint, makeupCapsuleDistance, makeupEyeGuard, makeupLipGuard, makeupShapeProfile, packMakeupShapePrimitives, selectFaceAtlasTriangles, type MakeupCapsule, type MakeupShapePrimitives, } from './shapes';
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/** The face mesh landmarks a lead follows by default (MediaPipe's 468, without the iris points). */
|
|
2
|
+
export declare const LANDMARK_LEAD_COUNT = 468;
|
|
3
|
+
/**
|
|
4
|
+
* Tuning of `LandmarkLead`, set on synthetic jitter and motion at 30 Hz
|
|
5
|
+
* inference: a still face's jitter drops more than 3×, a steady motion is
|
|
6
|
+
* followed within a pixel while the lead covers the gap, and on the face
|
|
7
|
+
* mesh a mouth opening 6 px at 1–3 Hz and a blink trail by under a pixel
|
|
8
|
+
* (RMS over the inner lips and lash lines). Device tuning may change it.
|
|
9
|
+
*/
|
|
10
|
+
export declare const LANDMARK_LEAD: Readonly<{
|
|
11
|
+
/** One Euro cutoff (Hz) of a still point: heavy smoothing of MediaPipe's jitter. */
|
|
12
|
+
minCutoffHz: 0.5;
|
|
13
|
+
/** Cutoff added per feed width per second of the point's speed: little lag while it moves. */
|
|
14
|
+
beta: 200;
|
|
15
|
+
/** Cutoff (Hz) of the speed estimate the cutoff adapts to. */
|
|
16
|
+
derivativeCutoffHz: 2;
|
|
17
|
+
/**
|
|
18
|
+
* Speed (feed widths per second, about 19 px/s on a 640 px feed) below
|
|
19
|
+
* which a point counts as still: the jitter's own apparent speed, so it
|
|
20
|
+
* does not open the filter.
|
|
21
|
+
*/
|
|
22
|
+
speedFloor: 0.03;
|
|
23
|
+
/** Blend of each sample's velocity into the lead velocity (1 = the last sample's alone). */
|
|
24
|
+
velocityBlend: 0.5;
|
|
25
|
+
/** Samples further apart than this (ms) snap: the face was not followed in between. */
|
|
26
|
+
maxGapMs: 500;
|
|
27
|
+
/** A jump of the face's centre larger than this (feed widths) snaps: another face. */
|
|
28
|
+
snapJump: 0.1;
|
|
29
|
+
}>;
|
|
30
|
+
/** The tunable numbers of a `LandmarkLead` (`LANDMARK_LEAD` by default). */
|
|
31
|
+
export type LandmarkLeadTuning = {
|
|
32
|
+
-readonly [K in keyof typeof LANDMARK_LEAD]: number;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Each point's mesh neighbours, compressed: the neighbours of point `i` are
|
|
36
|
+
* `indices[offsets[i] … offsets[i + 1] − 1]` (`createLandmarkNeighbours`).
|
|
37
|
+
*/
|
|
38
|
+
export type LandmarkNeighbours = {
|
|
39
|
+
offsets: Uint32Array;
|
|
40
|
+
indices: Uint16Array;
|
|
41
|
+
};
|
|
42
|
+
/** The edge neighbours of every vertex of a triangle list (flat vertex indices, three per triangle). */
|
|
43
|
+
export declare const createLandmarkNeighbours: (triangles: ArrayLike<number>, count: number) => LandmarkNeighbours;
|
|
44
|
+
/** What one `observe` did: snapped to the raw points, filtered them, or skipped the sample. */
|
|
45
|
+
export type LandmarkLeadStep = "snap" | "smooth" | "skip";
|
|
46
|
+
/** A landmark as the face model reports it (`z` optional). */
|
|
47
|
+
export type LandmarkLeadPoint = {
|
|
48
|
+
x: number;
|
|
49
|
+
y: number;
|
|
50
|
+
z?: number;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* One Euro filter plus a capped velocity lead over the first `count` face
|
|
54
|
+
* landmarks. Call `observe` once per NEW landmark array (not every frame),
|
|
55
|
+
* then `apply(nowMs, leadMs)` every frame and read `points`.
|
|
56
|
+
*
|
|
57
|
+
* ```ts
|
|
58
|
+
* const lead = new LandmarkLead();
|
|
59
|
+
* // in useFrame:
|
|
60
|
+
* if (landmarks !== last) lead.observe(landmarks, performance.now(), aspect);
|
|
61
|
+
* const points = lead.apply(performance.now(), 33); // x, y, z per landmark
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare class LandmarkLead {
|
|
65
|
+
/** Points filtered and led: the first `count` landmarks of every sample. */
|
|
66
|
+
readonly count: number;
|
|
67
|
+
/** The led points, `count × 3` (x, y, z), written by `apply`. */
|
|
68
|
+
readonly points: Float32Array;
|
|
69
|
+
/** The filtered points at the last sample. */
|
|
70
|
+
private readonly filtered;
|
|
71
|
+
/** One Euro speed estimate per coordinate (feed units per second). */
|
|
72
|
+
private readonly derivative;
|
|
73
|
+
/** Lead velocity per coordinate (feed units per second). */
|
|
74
|
+
private readonly velocity;
|
|
75
|
+
/** The filter's lag behind a steadily moving point, per landmark (ms). */
|
|
76
|
+
private readonly lagMs;
|
|
77
|
+
private readonly tuning;
|
|
78
|
+
private readonly neighbours;
|
|
79
|
+
private initialized;
|
|
80
|
+
private sampleMs;
|
|
81
|
+
private centreX;
|
|
82
|
+
private centreY;
|
|
83
|
+
constructor(count?: number, { neighbours, ...tuning }?: Partial<LandmarkLeadTuning> & {
|
|
84
|
+
neighbours?: LandmarkNeighbours | null;
|
|
85
|
+
});
|
|
86
|
+
/** False until the first sample and after `reset`: the next sample snaps. */
|
|
87
|
+
get ready(): boolean;
|
|
88
|
+
/** Time of the last sample (ms). */
|
|
89
|
+
get lastSampleMs(): number;
|
|
90
|
+
/** The next sample snaps (a new face, a new camera source, a reacquired face). */
|
|
91
|
+
reset(): void;
|
|
92
|
+
/**
|
|
93
|
+
* A new landmark sample taken at `timeMs`. Snaps on the first sample, after
|
|
94
|
+
* `reset`, after a gap over `maxGapMs` and on a face-centre jump over
|
|
95
|
+
* `snapJump`; skips a sample with too few points or no time step.
|
|
96
|
+
*/
|
|
97
|
+
observe(landmarks: ArrayLike<LandmarkLeadPoint>, timeMs: number, aspect?: number): LandmarkLeadStep;
|
|
98
|
+
/**
|
|
99
|
+
* Writes the led points for `nowMs` into `points` and returns it: each
|
|
100
|
+
* filtered point moved along its velocity for its filter lag plus the time
|
|
101
|
+
* since the sample, at most `leadMs`. `leadMs` 0 gives the filtered points.
|
|
102
|
+
* Before the first sample the points are left as they are.
|
|
103
|
+
*/
|
|
104
|
+
apply(nowMs: number, leadMs: number): Float32Array;
|
|
105
|
+
private snap;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* The face mesh's landmark neighbours, built once: the edges of
|
|
109
|
+
* `FACE_ATLAS_TRIANGLES` without the eye and mouth fills
|
|
110
|
+
* (`faceAtlasOpenTriangles`). The fills join each lip to the other lip and
|
|
111
|
+
* each lid to the other lid; those move apart when the mouth or an eye
|
|
112
|
+
* opens, so their speeds would cancel and hold the filter shut exactly
|
|
113
|
+
* where the lips and lash lines move.
|
|
114
|
+
*/
|
|
115
|
+
export declare const getFaceLandmarkNeighbours: () => LandmarkNeighbours;
|
|
116
|
+
/** A `LandmarkLead` over the 468 face landmarks, its speeds averaged over mesh neighbours. */
|
|
117
|
+
export declare const createFaceLandmarkLead: (tuning?: Partial<LandmarkLeadTuning>) => LandmarkLead;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import * as THREE from "three";
|
|
2
|
+
/**
|
|
3
|
+
* The made-up camera (FACE-1): the camera image with the makeup drawn over
|
|
4
|
+
* it, in a feed-size texture laid out exactly as the camera texture (same
|
|
5
|
+
* uv, same aspect, sRGB). Components that sample the camera image (a face
|
|
6
|
+
* inset, a face warp or morph, a face swap's live source) can sample it
|
|
7
|
+
* instead and show the makeup. Opt-in: one shared target per renderer,
|
|
8
|
+
* rendered once per frame while anyone holds it (`<MadeUpCamera>`,
|
|
9
|
+
* `useMadeUpCamera`).
|
|
10
|
+
*
|
|
11
|
+
* Each frame (`MadeUpCameraTarget.render`):
|
|
12
|
+
* 1. **Draw** into a working target (RGBA8, depth and stencil): the camera
|
|
13
|
+
* image, then the scene through `MADE_UP_CAMERA_LAYER` only, which holds
|
|
14
|
+
* every face-atlas layer drawn between `MAKEUP_RENDER_ORDER.prepass` and
|
|
15
|
+
* `.restore` (makeup regions, lips, designs, the self-occlusion passes;
|
|
16
|
+
* re-marked every frame) plus `HandCutout`, lit by the lights the main
|
|
17
|
+
* camera sees (put on the layer for the pass). The working target is flagged
|
|
18
|
+
* as three.js flags WebXR targets, so materials write sRGB-encoded colour
|
|
19
|
+
* and blend exactly as they do on the canvas, with the same shader
|
|
20
|
+
* programs. Faces riding a warp draw unwarped (where the camera sees
|
|
21
|
+
* them).
|
|
22
|
+
* 2. **Copy** it into the output texture (SRGB8_ALPHA8), decoding on the way,
|
|
23
|
+
* so the output samples like the camera texture (linear, decoded by the
|
|
24
|
+
* GPU).
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* The three.js layer the made-up camera's pass renders (30; 31 is
|
|
28
|
+
* `EXTERNAL_BACKGROUND_RENDER_LAYER`).
|
|
29
|
+
* The face-atlas makeup layers are put on it every frame; add your own
|
|
30
|
+
* objects to the made-up feed with `object.layers.enable(MADE_UP_CAMERA_LAYER)`.
|
|
31
|
+
* Keep it free for this: anything on it is drawn into the made-up camera.
|
|
32
|
+
*/
|
|
33
|
+
export declare const MADE_UP_CAMERA_LAYER = 30;
|
|
34
|
+
/**
|
|
35
|
+
* Frame priority of the made-up pass: after the face-atlas surfaces update
|
|
36
|
+
* (-0.4), before default-priority frame callbacks (0) that read the texture.
|
|
37
|
+
* A reader that runs earlier (a face swap's live map, -0.75) gets the
|
|
38
|
+
* previous frame's image.
|
|
39
|
+
*/
|
|
40
|
+
export declare const MADE_UP_CAMERA_FRAME_PRIORITY = -0.3;
|
|
41
|
+
/** Whether a face-atlas mesh at `renderOrder` is drawn into the made-up camera (the makeup orders, pre-pass to restore). */
|
|
42
|
+
export declare const madeUpCameraDraws: (renderOrder: number) => boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Puts the makeup meshes of every face of `scene` on `MADE_UP_CAMERA_LAYER`
|
|
45
|
+
* (and every other face-atlas mesh off it), and draws warped faces unwarped
|
|
46
|
+
* while `unwarped` is true. The made-up pass calls it with `true` before
|
|
47
|
+
* drawing and `false` after.
|
|
48
|
+
*/
|
|
49
|
+
export declare const markMadeUpCameraLayers: (scene: THREE.Object3D, unwarped: boolean) => void;
|
|
50
|
+
/** The shader sources, for the static tests. */
|
|
51
|
+
export declare const MADE_UP_CAMERA_GLSL: Readonly<{
|
|
52
|
+
vertex: "\nvarying vec2 vUv;\nvoid main() {\n vUv = position.xy * 0.5 + 0.5;\n gl_Position = vec4(position.xy, 0.0, 1.0);\n}\n";
|
|
53
|
+
camera: "\nuniform sampler2D uMap;\nvarying vec2 vUv;\nvoid main() {\n gl_FragColor = vec4(texture2D(uMap, vUv).rgb, 1.0);\n #include <colorspace_fragment>\n}\n";
|
|
54
|
+
decode: "\nuniform sampler2D uMap;\nvarying vec2 vUv;\nvoid main() {\n gl_FragColor = vec4(sRGBTransferEOTF(texture2D(uMap, vUv)).rgb, 1.0);\n}\n";
|
|
55
|
+
}>;
|
|
56
|
+
/**
|
|
57
|
+
* The working target: 8-bit storage holding sRGB-encoded colour. Tagged
|
|
58
|
+
* sRGB and flagged `isXRRenderTarget` (three.js then writes and tone-maps
|
|
59
|
+
* for it as for the canvas: `outputColorSpace` = the texture's), with an
|
|
60
|
+
* explicit `RGBA8` internal format (no GPU sRGB conversion), so blending
|
|
61
|
+
* happens on encoded values exactly as on the canvas.
|
|
62
|
+
*/
|
|
63
|
+
export declare const createMadeUpCameraWorkTarget: (width: number, height: number) => THREE.WebGLRenderTarget<THREE.Texture>;
|
|
64
|
+
/** The output: SRGB8_ALPHA8 (decoded by the GPU when sampled, as the camera texture is). */
|
|
65
|
+
export declare const createMadeUpCameraOutputTarget: (width: number, height: number) => THREE.WebGLRenderTarget<THREE.Texture>;
|
|
66
|
+
/**
|
|
67
|
+
* A feed texture's content version: the made-up camera's pass count for its
|
|
68
|
+
* texture (a render target's texture never bumps `version`), else
|
|
69
|
+
* `texture.version` (the camera texture bumps it on every new frame).
|
|
70
|
+
* Compare it from frame to frame to skip work when the image is unchanged.
|
|
71
|
+
*/
|
|
72
|
+
export declare const feedTextureVersion: (texture: THREE.Texture) => number;
|
|
73
|
+
/** The camera image with the makeup over it, feed size. See the module doc. */
|
|
74
|
+
export declare class MadeUpCameraTarget {
|
|
75
|
+
private readonly work;
|
|
76
|
+
private readonly output;
|
|
77
|
+
private readonly cameraPass;
|
|
78
|
+
private readonly decodePass;
|
|
79
|
+
private readonly quadCamera;
|
|
80
|
+
private passes;
|
|
81
|
+
/** The last pass drew an image (false again once the camera is gone). */
|
|
82
|
+
private live;
|
|
83
|
+
private stamp;
|
|
84
|
+
constructor();
|
|
85
|
+
/**
|
|
86
|
+
* The made-up feed: the camera texture's layout (uv, aspect, image top at
|
|
87
|
+
* v = 1), sRGB, decoded by the GPU when sampled. The same object for the
|
|
88
|
+
* target's life (a resize keeps it).
|
|
89
|
+
*/
|
|
90
|
+
get texture(): THREE.Texture;
|
|
91
|
+
/** Passes rendered (0: nothing yet, the texture is empty). */
|
|
92
|
+
get frame(): number;
|
|
93
|
+
/**
|
|
94
|
+
* The texture holds the current camera image: a pass has run and the
|
|
95
|
+
* camera has not gone since (`render` without a camera texture ends it).
|
|
96
|
+
*/
|
|
97
|
+
get ready(): boolean;
|
|
98
|
+
get width(): number;
|
|
99
|
+
get height(): number;
|
|
100
|
+
/** `render` once per `stamp` (R3F's `clock.elapsedTime`), whoever calls first. Returns whether it rendered. */
|
|
101
|
+
renderOnce(stamp: number, renderer: THREE.WebGLRenderer, scene: THREE.Object3D, camera: THREE.Camera, cameraTexture: THREE.Texture | null): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* One pass: `cameraTexture` (the session camera) with the scene's
|
|
104
|
+
* `MADE_UP_CAMERA_LAYER` drawn over it through `camera`, into the
|
|
105
|
+
* texture. Feed size: the camera image's (the canvas's drawing buffer
|
|
106
|
+
* when it has none). Leaves the renderer's target, clear colour,
|
|
107
|
+
* `autoClear`, XR and shadow state, the camera's layers and the scene's
|
|
108
|
+
* background and override material as they were. Returns false (nothing
|
|
109
|
+
* drawn) without a camera texture.
|
|
110
|
+
*/
|
|
111
|
+
render(renderer: THREE.WebGLRenderer, scene: THREE.Object3D, camera: THREE.Camera, cameraTexture: THREE.Texture | null): boolean;
|
|
112
|
+
dispose(): void;
|
|
113
|
+
/** Both targets at the camera image's size (capped at the GPU's texture limit). */
|
|
114
|
+
private fitSize;
|
|
115
|
+
}
|
|
116
|
+
/** The renderer's shared made-up camera, with one more holder (made on first use). Pair with `releaseMadeUpCamera`. */
|
|
117
|
+
export declare const acquireMadeUpCamera: (renderer: THREE.WebGLRenderer) => MadeUpCameraTarget;
|
|
118
|
+
/** One holder fewer; the last one disposes the target. */
|
|
119
|
+
export declare const releaseMadeUpCamera: (renderer: THREE.WebGLRenderer, target: MadeUpCameraTarget) => void;
|
|
120
|
+
/**
|
|
121
|
+
* The renderer's made-up camera when someone holds it and it has rendered
|
|
122
|
+
* (never starts one): for shared consumers that serve several components,
|
|
123
|
+
* such as a face's live map.
|
|
124
|
+
*/
|
|
125
|
+
export declare const peekMadeUpCamera: (renderer: THREE.WebGLRenderer) => MadeUpCameraTarget | null;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { DataTexture } from 'three';
|
|
2
|
+
import { FaceAtlasRegionSelection } from './regions';
|
|
3
|
+
export type FaceAtlasMaskOptions = {
|
|
4
|
+
/** Regions painted white (their union). */
|
|
5
|
+
include: FaceAtlasRegionSelection;
|
|
6
|
+
/** Regions cut back out of `include`. */
|
|
7
|
+
exclude?: FaceAtlasRegionSelection;
|
|
8
|
+
/** Width and height in pixels. Default 256. */
|
|
9
|
+
size?: number;
|
|
10
|
+
/**
|
|
11
|
+
* Edge softness as a fraction of the atlas width: the edge fades over about
|
|
12
|
+
* this distance (0.02 = 2 % of the width). Default 0 (antialiased edge only).
|
|
13
|
+
*/
|
|
14
|
+
feather?: number;
|
|
15
|
+
/**
|
|
16
|
+
* Where row 0 sits. `"top"` (default): row 0 is `v = 1`, as in an image, an
|
|
17
|
+
* `ImageData` or a canvas. `"bottom"`: row 0 is `v = 0`, as a
|
|
18
|
+
* `THREE.DataTexture` samples it (`flipY` is false for data textures); use
|
|
19
|
+
* `createFaceAtlasMaskTexture`, which sets this for you.
|
|
20
|
+
*/
|
|
21
|
+
origin?: "top" | "bottom";
|
|
22
|
+
};
|
|
23
|
+
/** A single-channel coverage mask in atlas space (0 outside, 255 inside). */
|
|
24
|
+
export type FaceAtlasMask = {
|
|
25
|
+
width: number;
|
|
26
|
+
height: number;
|
|
27
|
+
data: Uint8ClampedArray;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Rasterize face atlas regions into a coverage mask in plain JavaScript (no
|
|
31
|
+
* canvas, no `ctx.filter`, so it works in workers, Node and iOS Safari):
|
|
32
|
+
* `include` minus `exclude`, 2×2 supersampled, then feathered by a
|
|
33
|
+
* three-pass box blur. Row 0 is `v = 1` by default, ready for an
|
|
34
|
+
* `ImageData` via `faceAtlasMaskToRgba`. For the GPU, use
|
|
35
|
+
* `createFaceAtlasMaskTexture` (or pass `origin: "bottom"` before building
|
|
36
|
+
* your own `THREE.DataTexture`, whose `flipY` is false), or the mask lands
|
|
37
|
+
* upside down.
|
|
38
|
+
*/
|
|
39
|
+
export declare const createFaceAtlasMask: (options: FaceAtlasMaskOptions) => FaceAtlasMask;
|
|
40
|
+
/** Options of `createFaceAtlasMaskTexture`: the mask options without `origin`. */
|
|
41
|
+
export type FaceAtlasMaskTextureOptions = Omit<FaceAtlasMaskOptions, "origin">;
|
|
42
|
+
/**
|
|
43
|
+
* Rasterize face atlas regions straight into a single-channel
|
|
44
|
+
* `THREE.DataTexture` (`RedFormat`, linear filtering, read `.r` in a shader)
|
|
45
|
+
* sampled with the atlas UVs: rows are stored from `v = 0`, so no flip is
|
|
46
|
+
* needed. The caller owns the texture and disposes it.
|
|
47
|
+
*/
|
|
48
|
+
export declare const createFaceAtlasMaskTexture: (options: FaceAtlasMaskTextureOptions) => DataTexture;
|
|
49
|
+
/**
|
|
50
|
+
* Expand a mask to RGBA (`color` RGB, alpha = coverage), e.g.
|
|
51
|
+
* `new ImageData(faceAtlasMaskToRgba(mask), mask.width, mask.height)`.
|
|
52
|
+
*/
|
|
53
|
+
export declare const faceAtlasMaskToRgba: (mask: FaceAtlasMask, color?: readonly [number, number, number]) => Uint8ClampedArray;
|