@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,366 @@
|
|
|
1
|
+
var W = Object.defineProperty;
|
|
2
|
+
var Y = (e, r, t) => r in e ? W(e, r, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[r] = t;
|
|
3
|
+
var E = (e, r, t) => Y(e, typeof r != "symbol" ? r + "" : r, t);
|
|
4
|
+
import { q as B, n as V, v as H, w as N, x as X, X as x, y as b, S as K, F as q } from "./index-CIe7eCMH.js";
|
|
5
|
+
import { useMemo as g, useEffect as L, useState as j, useRef as T } from "react";
|
|
6
|
+
import * as d from "three";
|
|
7
|
+
import { p as J, S as Q, F as Z, L as $, R as ee, a as te, b as re, O as se, I as ae } from "./landmarkMask-BFDyBnKM.js";
|
|
8
|
+
import { useFrame as S } from "@react-three/fiber";
|
|
9
|
+
import { b as w, c as ne } from "./selectors-DmNaKIwE.js";
|
|
10
|
+
import { u as U } from "./landmarks-bftdwq6Z.js";
|
|
11
|
+
import { s as z } from "./updateThrottle-BseecYag.js";
|
|
12
|
+
const oe = {
|
|
13
|
+
left: {
|
|
14
|
+
/** Iris center. */
|
|
15
|
+
center: 473,
|
|
16
|
+
/** Iris ring: outer, top, inner, bottom (image order: right, up, left, down for the left eye). */
|
|
17
|
+
ring: [474, 475, 476, 477],
|
|
18
|
+
innerCorner: 362,
|
|
19
|
+
outerCorner: 263,
|
|
20
|
+
upperLid: 386,
|
|
21
|
+
lowerLid: 374
|
|
22
|
+
},
|
|
23
|
+
right: {
|
|
24
|
+
center: 468,
|
|
25
|
+
ring: [469, 470, 471, 472],
|
|
26
|
+
innerCorner: 133,
|
|
27
|
+
outerCorner: 33,
|
|
28
|
+
upperLid: 159,
|
|
29
|
+
lowerLid: 145
|
|
30
|
+
}
|
|
31
|
+
}, ie = 478, ce = 0.2, p = () => ({ x: 0, y: 0, z: 0 }), A = (e) => ({
|
|
32
|
+
side: e,
|
|
33
|
+
detected: !1,
|
|
34
|
+
center: p(),
|
|
35
|
+
trackerCenter: { x: 0, y: 0, z: 0 },
|
|
36
|
+
ring: [p(), p(), p(), p()],
|
|
37
|
+
radius: 0,
|
|
38
|
+
eyeCenter: p(),
|
|
39
|
+
eyeWidth: 0,
|
|
40
|
+
openness: 0,
|
|
41
|
+
offset: { x: 0, y: 0 },
|
|
42
|
+
confidence: 0
|
|
43
|
+
}), Ue = (e = 0) => ({
|
|
44
|
+
version: 0,
|
|
45
|
+
timestampMs: 0,
|
|
46
|
+
faceIndex: e,
|
|
47
|
+
detected: !1,
|
|
48
|
+
held: !1,
|
|
49
|
+
confidence: 1,
|
|
50
|
+
left: A("left"),
|
|
51
|
+
right: A("right")
|
|
52
|
+
}), C = (e, r) => {
|
|
53
|
+
e.x = r.x, e.y = r.y, e.z = r.z;
|
|
54
|
+
}, I = (e) => Math.max(-1, Math.min(1, e)), O = (e, r, t, a = 1, s = !1) => {
|
|
55
|
+
const n = oe[B(r, s)];
|
|
56
|
+
if (!e || e.length < ie)
|
|
57
|
+
return t.detected = !1, t.confidence = 0, !1;
|
|
58
|
+
const o = e[n.center];
|
|
59
|
+
C(t.center, o), V(o, t.trackerCenter);
|
|
60
|
+
for (let f = 0; f < 4; f += 1) C(t.ring[f], e[n.ring[f]]);
|
|
61
|
+
t.radius = Math.abs(t.ring[0].x - t.ring[2].x) / 2;
|
|
62
|
+
const c = e[n.innerCorner], i = e[n.outerCorner];
|
|
63
|
+
t.eyeCenter.x = (c.x + i.x) / 2, t.eyeCenter.y = (c.y + i.y) / 2, t.eyeCenter.z = (c.z + i.z) / 2, t.eyeWidth = Math.hypot(c.x - i.x, c.y - i.y);
|
|
64
|
+
const u = Math.abs(e[n.lowerLid].y - e[n.upperLid].y);
|
|
65
|
+
t.openness = t.eyeWidth > 0 ? u / t.eyeWidth : 0;
|
|
66
|
+
const l = t.eyeWidth / 2, h = s ? -1 : 1;
|
|
67
|
+
return t.offset.x = l > 0 ? I(h * (o.x - t.eyeCenter.x) / l) : 0, t.offset.y = l > 0 ? I((t.eyeCenter.y - o.y) / l) : 0, t.detected = !0, t.confidence = Math.max(0, Math.min(1, t.openness / ce)) * a, !0;
|
|
68
|
+
}, ze = (e, r, t, a = {}) => {
|
|
69
|
+
const s = a.held ?? !1, n = a.faceConfidence ?? (s ? 0 : 1), o = a.mirrored ?? !1;
|
|
70
|
+
e.faceIndex = a.faceIndex ?? e.faceIndex;
|
|
71
|
+
const c = O(r, "left", e.left, n, o), i = O(r, "right", e.right, n, o);
|
|
72
|
+
return e.detected = c && i, e.held = e.detected && s, e.confidence = e.detected ? n : 0, e.timestampMs = t, e.version += 1, e;
|
|
73
|
+
}, le = () => ({ x: 0, y: 0, z: 0, vx: 0, vy: 0, vz: 0, sampleMs: 0, seen: !1 });
|
|
74
|
+
class De {
|
|
75
|
+
constructor(r = 250) {
|
|
76
|
+
E(this, "slots", {});
|
|
77
|
+
E(this, "maxGapMs");
|
|
78
|
+
this.maxGapMs = r;
|
|
79
|
+
}
|
|
80
|
+
reset() {
|
|
81
|
+
this.slots = {};
|
|
82
|
+
}
|
|
83
|
+
/** Record a fresh inference sample for `key` (e.g. "left"). */
|
|
84
|
+
observe(r, t, a) {
|
|
85
|
+
const s = this.slots[r] ?? (this.slots[r] = le()), n = (a - s.sampleMs) / 1e3;
|
|
86
|
+
s.seen && n > 0 && n * 1e3 <= this.maxGapMs ? (s.vx = 0.5 * s.vx + 0.5 * ((t.x - s.x) / n), s.vy = 0.5 * s.vy + 0.5 * ((t.y - s.y) / n), s.vz = 0.5 * s.vz + 0.5 * ((t.z - s.z) / n)) : (s.vx = 0, s.vy = 0, s.vz = 0), s.x = t.x, s.y = t.y, s.z = t.z, s.sampleMs = a, s.seen = !0;
|
|
87
|
+
}
|
|
88
|
+
/** Write the extrapolated position of `key` into `out`; a no-op before the first sample. */
|
|
89
|
+
apply(r, t, a, s) {
|
|
90
|
+
const n = this.slots[r];
|
|
91
|
+
if (!n || !n.seen || a <= 0) return s;
|
|
92
|
+
const o = Math.max(0, Math.min(t - n.sampleMs, a)) / 1e3;
|
|
93
|
+
return s.x = n.x + n.vx * o, s.y = n.y + n.vy * o, s.z = n.z + n.vz * o, s;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const D = (e = 1, r = 1) => {
|
|
97
|
+
const t = new d.DataTexture(
|
|
98
|
+
new Uint8Array(e * r),
|
|
99
|
+
e,
|
|
100
|
+
r,
|
|
101
|
+
d.RedFormat,
|
|
102
|
+
d.UnsignedByteType
|
|
103
|
+
);
|
|
104
|
+
return t.minFilter = d.NearestFilter, t.magFilter = d.NearestFilter, t.generateMipmaps = !1, t.flipY = !1, t.unpackAlignment = 1, t.needsUpdate = !0, t;
|
|
105
|
+
}, ue = (e, r) => {
|
|
106
|
+
const t = e.image;
|
|
107
|
+
if (t.width !== r.width || t.height !== r.height) {
|
|
108
|
+
e.dispose();
|
|
109
|
+
const a = D(r.width, r.height);
|
|
110
|
+
return a.image.data.set(r.indices), a.needsUpdate = !0, a;
|
|
111
|
+
}
|
|
112
|
+
return t.data.set(r.indices), e.needsUpdate = !0, e;
|
|
113
|
+
}, Fe = (e) => {
|
|
114
|
+
const r = g(
|
|
115
|
+
() => ({ texture: D(), version: -1, mask: null }),
|
|
116
|
+
[]
|
|
117
|
+
);
|
|
118
|
+
return L(() => () => r.texture.dispose(), [r]), { holder: r, sync: () => (e && (r.mask !== e || r.version !== e.version) && (r.texture = ue(r.texture, e), r.mask = e, r.version = e.version), r.texture) };
|
|
119
|
+
}, de = ({
|
|
120
|
+
space: e = "feed",
|
|
121
|
+
mirrored: r = !1,
|
|
122
|
+
maskWidth: t,
|
|
123
|
+
maskHeight: a,
|
|
124
|
+
feedWidth: s,
|
|
125
|
+
feedHeight: n,
|
|
126
|
+
zoom: o = 1
|
|
127
|
+
}, c = new d.Matrix3()) => {
|
|
128
|
+
let i = 1, u = 1;
|
|
129
|
+
if (e === "source") {
|
|
130
|
+
const v = H(
|
|
131
|
+
{ width: t, height: a },
|
|
132
|
+
{ width: s, height: n },
|
|
133
|
+
"cover",
|
|
134
|
+
o
|
|
135
|
+
);
|
|
136
|
+
v && (i = s / v.drawWidth, u = n / v.drawHeight);
|
|
137
|
+
}
|
|
138
|
+
const l = r ? -i : i, h = 0.5 - 0.5 * l, f = -u, m = 0.5 + 0.5 * u;
|
|
139
|
+
return c.set(l, 0, h, 0, f, m, 0, 0, 1);
|
|
140
|
+
}, fe = 4, he = `
|
|
141
|
+
varying vec2 vUv;
|
|
142
|
+
void main() {
|
|
143
|
+
vUv = uv;
|
|
144
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
145
|
+
}`, me = `
|
|
146
|
+
uniform sampler2D cameraTexture;
|
|
147
|
+
uniform sampler2D maskTexture;
|
|
148
|
+
uniform sampler2D designTexture;
|
|
149
|
+
uniform float useDesign;
|
|
150
|
+
uniform vec4 labels;
|
|
151
|
+
uniform float labelCount;
|
|
152
|
+
uniform float invert;
|
|
153
|
+
uniform vec3 tint;
|
|
154
|
+
uniform float opacity;
|
|
155
|
+
uniform float blendMode;
|
|
156
|
+
uniform float feather;
|
|
157
|
+
uniform vec2 maskTexel;
|
|
158
|
+
uniform mat3 maskTransform;
|
|
159
|
+
varying vec2 vUv;
|
|
160
|
+
|
|
161
|
+
float member(vec2 uv) {
|
|
162
|
+
if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) return 0.0;
|
|
163
|
+
float index = floor(texture2D(maskTexture, uv).r * 255.0 + 0.5);
|
|
164
|
+
float m = 0.0;
|
|
165
|
+
if (labelCount > 0.5 && abs(index - labels.x) < 0.5) m = 1.0;
|
|
166
|
+
if (labelCount > 1.5 && abs(index - labels.y) < 0.5) m = 1.0;
|
|
167
|
+
if (labelCount > 2.5 && abs(index - labels.z) < 0.5) m = 1.0;
|
|
168
|
+
if (labelCount > 3.5 && abs(index - labels.w) < 0.5) m = 1.0;
|
|
169
|
+
return invert > 0.5 ? 1.0 - m : m;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
void main() {
|
|
173
|
+
vec2 maskUv = (maskTransform * vec3(vUv, 1.0)).xy;
|
|
174
|
+
float coverage;
|
|
175
|
+
if (feather > 0.0) {
|
|
176
|
+
vec2 step = maskTexel * feather;
|
|
177
|
+
coverage = 0.0;
|
|
178
|
+
for (int y = -1; y <= 1; y++) {
|
|
179
|
+
for (int x = -1; x <= 1; x++) {
|
|
180
|
+
coverage += member(maskUv + vec2(float(x), float(y)) * step);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
coverage /= 9.0;
|
|
184
|
+
} else {
|
|
185
|
+
coverage = member(maskUv);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
vec3 base = texture2D(cameraTexture, vUv).rgb;
|
|
189
|
+
vec4 design = useDesign > 0.5 ? texture2D(designTexture, vUv) : vec4(1.0);
|
|
190
|
+
vec3 paint = tint * design.rgb;
|
|
191
|
+
vec3 blended = blendMode < 0.5
|
|
192
|
+
? paint
|
|
193
|
+
: blendMode < 1.5
|
|
194
|
+
? base * paint
|
|
195
|
+
: blendMode < 2.5
|
|
196
|
+
? 1.0 - (1.0 - base) * (1.0 - paint)
|
|
197
|
+
: mix(2.0 * base * paint, 1.0 - 2.0 * (1.0 - base) * (1.0 - paint), step(0.5, base));
|
|
198
|
+
|
|
199
|
+
gl_FragColor = vec4(blended, coverage * opacity * design.a);
|
|
200
|
+
#include <colorspace_fragment>
|
|
201
|
+
}`;
|
|
202
|
+
let M = null;
|
|
203
|
+
const F = () => (M || (M = new d.DataTexture(new Uint8Array([255, 255, 255, 255]), 1, 1), M.needsUpdate = !0), M), ve = () => {
|
|
204
|
+
const e = {
|
|
205
|
+
cameraTexture: { value: null },
|
|
206
|
+
maskTexture: { value: null },
|
|
207
|
+
designTexture: { value: F() },
|
|
208
|
+
useDesign: { value: 0 },
|
|
209
|
+
labels: { value: new d.Vector4(-1, -1, -1, -1) },
|
|
210
|
+
labelCount: { value: 0 },
|
|
211
|
+
invert: { value: 0 },
|
|
212
|
+
tint: { value: new d.Color() },
|
|
213
|
+
opacity: { value: 1 },
|
|
214
|
+
blendMode: { value: 0 },
|
|
215
|
+
feather: { value: 0 },
|
|
216
|
+
maskTexel: { value: new d.Vector2(1, 1) },
|
|
217
|
+
maskTransform: { value: new d.Matrix3() }
|
|
218
|
+
};
|
|
219
|
+
return new d.ShaderMaterial({
|
|
220
|
+
uniforms: e,
|
|
221
|
+
vertexShader: he,
|
|
222
|
+
fragmentShader: me,
|
|
223
|
+
transparent: !0,
|
|
224
|
+
depthTest: !1,
|
|
225
|
+
depthWrite: !1,
|
|
226
|
+
toneMapped: !1,
|
|
227
|
+
side: d.DoubleSide
|
|
228
|
+
});
|
|
229
|
+
}, pe = (e, r) => J(r).map((t) => e ? e.labels.indexOf(t) : -1).filter((t) => t >= 0).slice(0, fe), xe = (e, r) => e && e.version > 0 ? pe(e, r) : [], ge = (e, {
|
|
230
|
+
cameraTexture: r,
|
|
231
|
+
maskTexture: t,
|
|
232
|
+
mask: a,
|
|
233
|
+
settings: s,
|
|
234
|
+
designTexture: n = null,
|
|
235
|
+
feedWidth: o = 0,
|
|
236
|
+
feedHeight: c = 0
|
|
237
|
+
}) => {
|
|
238
|
+
const i = e.uniforms, u = xe(a, s.label);
|
|
239
|
+
i.cameraTexture.value = r, i.maskTexture.value = t, i.designTexture.value = n ?? F(), i.useDesign.value = n ? 1 : 0, i.labels.value.set(u[0] ?? -1, u[1] ?? -1, u[2] ?? -1, u[3] ?? -1), i.labelCount.value = u.length, i.invert.value = s.invert ? 1 : 0, i.tint.value.set(s.color), i.opacity.value = s.opacity, i.blendMode.value = Q.indexOf(s.blendMode), i.feather.value = s.feather;
|
|
240
|
+
const l = (a == null ? void 0 : a.width) ?? 1, h = (a == null ? void 0 : a.height) ?? 1;
|
|
241
|
+
return i.maskTexel.value.set(1 / l, 1 / h), de(
|
|
242
|
+
{
|
|
243
|
+
space: (a == null ? void 0 : a.space) ?? "feed",
|
|
244
|
+
mirrored: s.mirrored,
|
|
245
|
+
maskWidth: l,
|
|
246
|
+
maskHeight: h,
|
|
247
|
+
feedWidth: o,
|
|
248
|
+
feedHeight: c
|
|
249
|
+
},
|
|
250
|
+
i.maskTransform.value
|
|
251
|
+
), e;
|
|
252
|
+
}, Ge = (e) => {
|
|
253
|
+
const r = g(ve, []);
|
|
254
|
+
return L(() => () => r.dispose(), [r]), ge(r, e), r;
|
|
255
|
+
}, Me = ["bg", "face_skin", "brows", "eyes", "lips", "mouth"], Te = [
|
|
256
|
+
{ label: "face_skin", polygons: [Z] },
|
|
257
|
+
{ label: "brows", polygons: [$, ee] },
|
|
258
|
+
{ label: "eyes", polygons: [te, re] },
|
|
259
|
+
{ label: "lips", polygons: [se] },
|
|
260
|
+
{ label: "mouth", polygons: [ae] }
|
|
261
|
+
], ye = (e, r, { regions: t, clear: a = !0 } = {}, s = []) => {
|
|
262
|
+
a && N(e), Te.forEach(({ label: n, polygons: o }) => {
|
|
263
|
+
if (t && !t.includes(n)) return;
|
|
264
|
+
const c = e.labels.indexOf(n);
|
|
265
|
+
c < 0 || o.forEach(
|
|
266
|
+
(i) => X(e, r, i, c, s)
|
|
267
|
+
);
|
|
268
|
+
});
|
|
269
|
+
}, Ee = (e) => {
|
|
270
|
+
const r = e == null ? void 0 : e.image, t = (r == null ? void 0 : r.width) ?? 0, a = (r == null ? void 0 : r.height) ?? 0;
|
|
271
|
+
return t > 0 && a > 0 ? { width: t, height: a } : { width: 1, height: 1 };
|
|
272
|
+
}, be = (e, r) => {
|
|
273
|
+
const t = r / Math.max(e.width, e.height, 1);
|
|
274
|
+
return {
|
|
275
|
+
width: Math.max(1, Math.round(e.width * t)),
|
|
276
|
+
height: Math.max(1, Math.round(e.height * t))
|
|
277
|
+
};
|
|
278
|
+
}, ke = ({
|
|
279
|
+
faceIndex: e = "all",
|
|
280
|
+
regions: r,
|
|
281
|
+
resolution: t = 256,
|
|
282
|
+
maxUpdateFps: a,
|
|
283
|
+
holdMs: s = 250,
|
|
284
|
+
predictMs: n = 0
|
|
285
|
+
} = {}) => {
|
|
286
|
+
const o = w(x.FACE_TRACKER), c = ne(), i = Ee(c), u = be(i, t), l = g(
|
|
287
|
+
() => b(u.width, u.height, Me),
|
|
288
|
+
[u.width, u.height]
|
|
289
|
+
), h = T([]), f = T(-1 / 0), m = T(null);
|
|
290
|
+
m.current || (m.current = new q({ holdMs: s, predictMs: n }));
|
|
291
|
+
const v = m.current;
|
|
292
|
+
return v.setOptions({ holdMs: s, predictMs: n }), S((y) => {
|
|
293
|
+
var _;
|
|
294
|
+
if (z(y.clock.elapsedTime, f.current, a)) return;
|
|
295
|
+
f.current = y.clock.elapsedTime;
|
|
296
|
+
const R = ((_ = o == null ? void 0 : o.detectionResults) == null ? void 0 : _.faceLandmarks) ?? [], G = e === "all" ? R : [R[e] ?? []], k = v.update(G, y.clock.elapsedTime * 1e3);
|
|
297
|
+
N(l), k.forEach(
|
|
298
|
+
(P) => ye(l, P, { regions: r, clear: !1 }, h.current)
|
|
299
|
+
), l.version += 1;
|
|
300
|
+
}), l;
|
|
301
|
+
}, Se = ["bg", "person"], Pe = ({
|
|
302
|
+
maxUpdateFps: e = 15,
|
|
303
|
+
active: r = !0
|
|
304
|
+
} = {}) => {
|
|
305
|
+
U(x.BACKGROUND_SEGMENTATION, { type: "portrait" }, r);
|
|
306
|
+
const t = w(x.BACKGROUND_SEGMENTATION), a = g(() => b(1, 1, Se), []), s = T(-1 / 0);
|
|
307
|
+
return S((n) => {
|
|
308
|
+
var u;
|
|
309
|
+
if (z(n.clock.elapsedTime, s.current, e)) return;
|
|
310
|
+
const o = (u = t == null ? void 0 : t.getRawSegmentationData) == null ? void 0 : u.call(t);
|
|
311
|
+
if (!(o != null && o.maskData) || o.width <= 0 || o.height <= 0) return;
|
|
312
|
+
s.current = n.clock.elapsedTime, (a.width !== o.width || a.height !== o.height) && (a.width = o.width, a.height = o.height, a.indices = new Uint8Array(o.width * o.height));
|
|
313
|
+
const c = o.maskData, i = a.indices;
|
|
314
|
+
for (let l = 0; l < i.length; l += 1) i[l] = c[l] > 127 ? 0 : 1;
|
|
315
|
+
a.version += 1, a.timestampMs = o.timestampMs;
|
|
316
|
+
}), a;
|
|
317
|
+
}, we = ({
|
|
318
|
+
active: e = !0,
|
|
319
|
+
...r
|
|
320
|
+
} = {}) => {
|
|
321
|
+
const { ready: t, error: a } = U(
|
|
322
|
+
x.SEMANTIC_SEGMENTATION,
|
|
323
|
+
r,
|
|
324
|
+
e
|
|
325
|
+
), s = w(x.SEMANTIC_SEGMENTATION), n = r.preset ?? "hair", o = g(
|
|
326
|
+
() => b(1, 1, K[n].labels),
|
|
327
|
+
[n]
|
|
328
|
+
), [c, i] = j({ status: "loading", error: null });
|
|
329
|
+
S(() => {
|
|
330
|
+
const f = (s == null ? void 0 : s.getStatus()) ?? "loading", m = (s == null ? void 0 : s.getError()) ?? null;
|
|
331
|
+
(f !== c.status || m !== c.error) && i({ status: f, error: m });
|
|
332
|
+
});
|
|
333
|
+
const u = (s == null ? void 0 : s.getMask()) ?? o, l = a ?? c.error, h = l ? "error" : t ? c.status : "loading";
|
|
334
|
+
return { mask: u, status: h, error: l, labels: u.labels };
|
|
335
|
+
}, We = (e = {}) => we({ ...e, preset: "hair" });
|
|
336
|
+
export {
|
|
337
|
+
Te as F,
|
|
338
|
+
De as I,
|
|
339
|
+
fe as M,
|
|
340
|
+
Se as P,
|
|
341
|
+
me as S,
|
|
342
|
+
Fe as a,
|
|
343
|
+
Ge as b,
|
|
344
|
+
Ue as c,
|
|
345
|
+
oe as d,
|
|
346
|
+
ie as e,
|
|
347
|
+
We as f,
|
|
348
|
+
Pe as g,
|
|
349
|
+
we as h,
|
|
350
|
+
ce as i,
|
|
351
|
+
O as j,
|
|
352
|
+
A as k,
|
|
353
|
+
he as l,
|
|
354
|
+
ve as m,
|
|
355
|
+
pe as n,
|
|
356
|
+
ge as o,
|
|
357
|
+
D as p,
|
|
358
|
+
ue as q,
|
|
359
|
+
xe as r,
|
|
360
|
+
be as s,
|
|
361
|
+
de as t,
|
|
362
|
+
ze as u,
|
|
363
|
+
ye as v,
|
|
364
|
+
ke as w,
|
|
365
|
+
Me as x
|
|
366
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";var re=Object.defineProperty;var ne=(e,r,t)=>r in e?re(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t;var y=(e,r,t)=>ne(e,typeof r!="symbol"?r+"":r,t);const d=require("./index-CfSF8LXa.cjs"),v=require("react"),se=require("three"),M=require("./landmarkMask-u7es2k4X.cjs"),_=require("@react-three/fiber"),T=require("./selectors-C4X71aoD.cjs"),w=require("./landmarks-BlUqf5MZ.cjs"),C=require("./updateThrottle-Of5Y4SVa.cjs");function ae(e){const r=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const t in e)if(t!=="default"){const s=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,s.get?s:{enumerable:!0,get:()=>e[t]})}}return r.default=e,Object.freeze(r)}const f=ae(se),k={left:{center:473,ring:[474,475,476,477],innerCorner:362,outerCorner:263,upperLid:386,lowerLid:374},right:{center:468,ring:[469,470,471,472],innerCorner:133,outerCorner:33,upperLid:159,lowerLid:145}},U=478,D=.2,g=()=>({x:0,y:0,z:0}),R=e=>({side:e,detected:!1,center:g(),trackerCenter:{x:0,y:0,z:0},ring:[g(),g(),g(),g()],radius:0,eyeCenter:g(),eyeWidth:0,openness:0,offset:{x:0,y:0},confidence:0}),ie=(e=0)=>({version:0,timestampMs:0,faceIndex:e,detected:!1,held:!1,confidence:1,left:R("left"),right:R("right")}),I=(e,r)=>{e.x=r.x,e.y=r.y,e.z=r.z},L=e=>Math.max(-1,Math.min(1,e)),b=(e,r,t,s=1,n=!1)=>{const a=k[d.personSide(r,n)];if(!e||e.length<U)return t.detected=!1,t.confidence=0,!1;const i=e[a.center];I(t.center,i),d.normalizedTrackerPointToTrackerPoint(i,t.trackerCenter);for(let m=0;m<4;m+=1)I(t.ring[m],e[a.ring[m]]);t.radius=Math.abs(t.ring[0].x-t.ring[2].x)/2;const c=e[a.innerCorner],o=e[a.outerCorner];t.eyeCenter.x=(c.x+o.x)/2,t.eyeCenter.y=(c.y+o.y)/2,t.eyeCenter.z=(c.z+o.z)/2,t.eyeWidth=Math.hypot(c.x-o.x,c.y-o.y);const u=Math.abs(e[a.lowerLid].y-e[a.upperLid].y);t.openness=t.eyeWidth>0?u/t.eyeWidth:0;const l=t.eyeWidth/2,h=n?-1:1;return t.offset.x=l>0?L(h*(i.x-t.eyeCenter.x)/l):0,t.offset.y=l>0?L((t.eyeCenter.y-i.y)/l):0,t.detected=!0,t.confidence=Math.max(0,Math.min(1,t.openness/D))*s,!0},oe=(e,r,t,s={})=>{const n=s.held??!1,a=s.faceConfidence??(n?0:1),i=s.mirrored??!1;e.faceIndex=s.faceIndex??e.faceIndex;const c=b(r,"left",e.left,a,i),o=b(r,"right",e.right,a,i);return e.detected=c&&o,e.held=e.detected&&n,e.confidence=e.detected?a:0,e.timestampMs=t,e.version+=1,e},ce=()=>({x:0,y:0,z:0,vx:0,vy:0,vz:0,sampleMs:0,seen:!1});class le{constructor(r=250){y(this,"slots",{});y(this,"maxGapMs");this.maxGapMs=r}reset(){this.slots={}}observe(r,t,s){const n=this.slots[r]??(this.slots[r]=ce()),a=(s-n.sampleMs)/1e3;n.seen&&a>0&&a*1e3<=this.maxGapMs?(n.vx=.5*n.vx+.5*((t.x-n.x)/a),n.vy=.5*n.vy+.5*((t.y-n.y)/a),n.vz=.5*n.vz+.5*((t.z-n.z)/a)):(n.vx=0,n.vy=0,n.vz=0),n.x=t.x,n.y=t.y,n.z=t.z,n.sampleMs=s,n.seen=!0}apply(r,t,s,n){const a=this.slots[r];if(!a||!a.seen||s<=0)return n;const i=Math.max(0,Math.min(t-a.sampleMs,s))/1e3;return n.x=a.x+a.vx*i,n.y=a.y+a.vy*i,n.z=a.z+a.vz*i,n}}const A=(e=1,r=1)=>{const t=new f.DataTexture(new Uint8Array(e*r),e,r,f.RedFormat,f.UnsignedByteType);return t.minFilter=f.NearestFilter,t.magFilter=f.NearestFilter,t.generateMipmaps=!1,t.flipY=!1,t.unpackAlignment=1,t.needsUpdate=!0,t},z=(e,r)=>{const t=e.image;if(t.width!==r.width||t.height!==r.height){e.dispose();const s=A(r.width,r.height);return s.image.data.set(r.indices),s.needsUpdate=!0,s}return t.data.set(r.indices),e.needsUpdate=!0,e},ue=e=>{const r=v.useMemo(()=>({texture:A(),version:-1,mask:null}),[]);return v.useEffect(()=>()=>r.texture.dispose(),[r]),{holder:r,sync:()=>(e&&(r.mask!==e||r.version!==e.version)&&(r.texture=z(r.texture,e),r.mask=e,r.version=e.version),r.texture)}},F=({space:e="feed",mirrored:r=!1,maskWidth:t,maskHeight:s,feedWidth:n,feedHeight:a,zoom:i=1},c=new f.Matrix3)=>{let o=1,u=1;if(e==="source"){const E=d.computeFitLayout({width:t,height:s},{width:n,height:a},"cover",i);E&&(o=n/E.drawWidth,u=a/E.drawHeight)}const l=r?-o:o,h=.5-.5*l,m=-u,p=.5+.5*u;return c.set(l,0,h,0,m,p,0,0,1)},G=4,P=`
|
|
2
|
+
varying vec2 vUv;
|
|
3
|
+
void main() {
|
|
4
|
+
vUv = uv;
|
|
5
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
6
|
+
}`,X=`
|
|
7
|
+
uniform sampler2D cameraTexture;
|
|
8
|
+
uniform sampler2D maskTexture;
|
|
9
|
+
uniform sampler2D designTexture;
|
|
10
|
+
uniform float useDesign;
|
|
11
|
+
uniform vec4 labels;
|
|
12
|
+
uniform float labelCount;
|
|
13
|
+
uniform float invert;
|
|
14
|
+
uniform vec3 tint;
|
|
15
|
+
uniform float opacity;
|
|
16
|
+
uniform float blendMode;
|
|
17
|
+
uniform float feather;
|
|
18
|
+
uniform vec2 maskTexel;
|
|
19
|
+
uniform mat3 maskTransform;
|
|
20
|
+
varying vec2 vUv;
|
|
21
|
+
|
|
22
|
+
float member(vec2 uv) {
|
|
23
|
+
if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) return 0.0;
|
|
24
|
+
float index = floor(texture2D(maskTexture, uv).r * 255.0 + 0.5);
|
|
25
|
+
float m = 0.0;
|
|
26
|
+
if (labelCount > 0.5 && abs(index - labels.x) < 0.5) m = 1.0;
|
|
27
|
+
if (labelCount > 1.5 && abs(index - labels.y) < 0.5) m = 1.0;
|
|
28
|
+
if (labelCount > 2.5 && abs(index - labels.z) < 0.5) m = 1.0;
|
|
29
|
+
if (labelCount > 3.5 && abs(index - labels.w) < 0.5) m = 1.0;
|
|
30
|
+
return invert > 0.5 ? 1.0 - m : m;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
void main() {
|
|
34
|
+
vec2 maskUv = (maskTransform * vec3(vUv, 1.0)).xy;
|
|
35
|
+
float coverage;
|
|
36
|
+
if (feather > 0.0) {
|
|
37
|
+
vec2 step = maskTexel * feather;
|
|
38
|
+
coverage = 0.0;
|
|
39
|
+
for (int y = -1; y <= 1; y++) {
|
|
40
|
+
for (int x = -1; x <= 1; x++) {
|
|
41
|
+
coverage += member(maskUv + vec2(float(x), float(y)) * step);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
coverage /= 9.0;
|
|
45
|
+
} else {
|
|
46
|
+
coverage = member(maskUv);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
vec3 base = texture2D(cameraTexture, vUv).rgb;
|
|
50
|
+
vec4 design = useDesign > 0.5 ? texture2D(designTexture, vUv) : vec4(1.0);
|
|
51
|
+
vec3 paint = tint * design.rgb;
|
|
52
|
+
vec3 blended = blendMode < 0.5
|
|
53
|
+
? paint
|
|
54
|
+
: blendMode < 1.5
|
|
55
|
+
? base * paint
|
|
56
|
+
: blendMode < 2.5
|
|
57
|
+
? 1.0 - (1.0 - base) * (1.0 - paint)
|
|
58
|
+
: mix(2.0 * base * paint, 1.0 - 2.0 * (1.0 - base) * (1.0 - paint), step(0.5, base));
|
|
59
|
+
|
|
60
|
+
gl_FragColor = vec4(blended, coverage * opacity * design.a);
|
|
61
|
+
#include <colorspace_fragment>
|
|
62
|
+
}`;let x=null;const Y=()=>(x||(x=new f.DataTexture(new Uint8Array([255,255,255,255]),1,1),x.needsUpdate=!0),x),V=()=>{const e={cameraTexture:{value:null},maskTexture:{value:null},designTexture:{value:Y()},useDesign:{value:0},labels:{value:new f.Vector4(-1,-1,-1,-1)},labelCount:{value:0},invert:{value:0},tint:{value:new f.Color},opacity:{value:1},blendMode:{value:0},feather:{value:0},maskTexel:{value:new f.Vector2(1,1)},maskTransform:{value:new f.Matrix3}};return new f.ShaderMaterial({uniforms:e,vertexShader:P,fragmentShader:X,transparent:!0,depthTest:!1,depthWrite:!1,toneMapped:!1,side:f.DoubleSide})},B=(e,r)=>M.parseOverlayLabels(r).map(t=>e?e.labels.indexOf(t):-1).filter(t=>t>=0).slice(0,G),H=(e,r)=>e&&e.version>0?B(e,r):[],W=(e,{cameraTexture:r,maskTexture:t,mask:s,settings:n,designTexture:a=null,feedWidth:i=0,feedHeight:c=0})=>{const o=e.uniforms,u=H(s,n.label);o.cameraTexture.value=r,o.maskTexture.value=t,o.designTexture.value=a??Y(),o.useDesign.value=a?1:0,o.labels.value.set(u[0]??-1,u[1]??-1,u[2]??-1,u[3]??-1),o.labelCount.value=u.length,o.invert.value=n.invert?1:0,o.tint.value.set(n.color),o.opacity.value=n.opacity,o.blendMode.value=M.SEGMENTATION_OVERLAY_BLEND_MODES.indexOf(n.blendMode),o.feather.value=n.feather;const l=(s==null?void 0:s.width)??1,h=(s==null?void 0:s.height)??1;return o.maskTexel.value.set(1/l,1/h),F({space:(s==null?void 0:s.space)??"feed",mirrored:n.mirrored,maskWidth:l,maskHeight:h,feedWidth:i,feedHeight:c},o.maskTransform.value),e},de=e=>{const r=v.useMemo(V,[]);return v.useEffect(()=>()=>r.dispose(),[r]),W(r,e),r},q=["bg","face_skin","brows","eyes","lips","mouth"],K=[{label:"face_skin",polygons:[M.FACE_OVAL]},{label:"brows",polygons:[M.LEFT_EYEBROW,M.RIGHT_EYEBROW]},{label:"eyes",polygons:[M.LEFT_EYE,M.RIGHT_EYE]},{label:"lips",polygons:[M.OUTER_LIPS]},{label:"mouth",polygons:[M.INNER_MOUTH]}],j=(e,r,{regions:t,clear:s=!0}={},n=[])=>{s&&d.clearSemanticMask(e),K.forEach(({label:a,polygons:i})=>{if(t&&!t.includes(a))return;const c=e.labels.indexOf(a);c<0||i.forEach(o=>d.fillLandmarkPolygon(e,r,o,c,n))})},fe=e=>{const r=e==null?void 0:e.image,t=(r==null?void 0:r.width)??0,s=(r==null?void 0:r.height)??0;return t>0&&s>0?{width:t,height:s}:{width:1,height:1}},J=(e,r)=>{const t=r/Math.max(e.width,e.height,1);return{width:Math.max(1,Math.round(e.width*t)),height:Math.max(1,Math.round(e.height*t))}},me=({faceIndex:e="all",regions:r,resolution:t=256,maxUpdateFps:s,holdMs:n=250,predictMs:a=0}={})=>{const i=T.useXRModelNode(d.XRModel.FACE_TRACKER),c=T.useXRCameraTexture(),o=fe(c),u=J(o,t),l=v.useMemo(()=>d.createSemanticMask(u.width,u.height,q),[u.width,u.height]),h=v.useRef([]),m=v.useRef(-1/0),p=v.useRef(null);p.current||(p.current=new d.FaceTrackMemory({holdMs:n,predictMs:a}));const E=p.current;return E.setOptions({holdMs:n,predictMs:a}),_.useFrame(S=>{var N;if(C.shouldSkipUpdate(S.clock.elapsedTime,m.current,s))return;m.current=S.clock.elapsedTime;const O=((N=i==null?void 0:i.detectionResults)==null?void 0:N.faceLandmarks)??[],$=e==="all"?O:[O[e]??[]],ee=E.update($,S.clock.elapsedTime*1e3);d.clearSemanticMask(l),ee.forEach(te=>j(l,te,{regions:r,clear:!1},h.current)),l.version+=1}),l},Q=["bg","person"],ve=({maxUpdateFps:e=15,active:r=!0}={})=>{w.useXRModel(d.XRModel.BACKGROUND_SEGMENTATION,{type:"portrait"},r);const t=T.useXRModelNode(d.XRModel.BACKGROUND_SEGMENTATION),s=v.useMemo(()=>d.createSemanticMask(1,1,Q),[]),n=v.useRef(-1/0);return _.useFrame(a=>{var u;if(C.shouldSkipUpdate(a.clock.elapsedTime,n.current,e))return;const i=(u=t==null?void 0:t.getRawSegmentationData)==null?void 0:u.call(t);if(!(i!=null&&i.maskData)||i.width<=0||i.height<=0)return;n.current=a.clock.elapsedTime,(s.width!==i.width||s.height!==i.height)&&(s.width=i.width,s.height=i.height,s.indices=new Uint8Array(i.width*i.height));const c=i.maskData,o=s.indices;for(let l=0;l<o.length;l+=1)o[l]=c[l]>127?0:1;s.version+=1,s.timestampMs=i.timestampMs}),s},Z=({active:e=!0,...r}={})=>{const{ready:t,error:s}=w.useXRModel(d.XRModel.SEMANTIC_SEGMENTATION,r,e),n=T.useXRModelNode(d.XRModel.SEMANTIC_SEGMENTATION),a=r.preset??"hair",i=v.useMemo(()=>d.createSemanticMask(1,1,d.SEMANTIC_SEGMENTATION_PRESET_SPECS[a].labels),[a]),[c,o]=v.useState({status:"loading",error:null});_.useFrame(()=>{const m=(n==null?void 0:n.getStatus())??"loading",p=(n==null?void 0:n.getError())??null;(m!==c.status||p!==c.error)&&o({status:m,error:p})});const u=(n==null?void 0:n.getMask())??i,l=s??c.error,h=l?"error":t?c.status:"loading";return{mask:u,status:h,error:l,labels:u.labels}},he=(e={})=>Z({...e,preset:"hair"});exports.FACE_REGION_LABELS=q;exports.FACE_REGION_POLYGONS=K;exports.IRIS_FULL_OPENNESS=D;exports.IRIS_LANDMARKS=k;exports.IRIS_LANDMARK_COUNT=U;exports.IrisLead=le;exports.MAX_OVERLAY_LABELS=G;exports.PERSON_MASK_LABELS=Q;exports.SEGMENTATION_OVERLAY_FRAGMENT_SHADER=X;exports.SEGMENTATION_OVERLAY_VERTEX_SHADER=P;exports.computeIrisEye=b;exports.computeMaskUvTransform=F;exports.createIrisEye=R;exports.createIrisResult=ie;exports.createSegmentationOverlayMaterial=V;exports.createSemanticMaskTexture=A;exports.rasterizeFaceRegions=j;exports.resolveActiveOverlayLabelIndices=H;exports.resolveMaskSize=J;exports.resolveOverlayLabelIndices=B;exports.updateIrisResult=oe;exports.updateSegmentationOverlayMaterial=W;exports.uploadSemanticMask=z;exports.useFaceRegionMask=me;exports.useHairMask=he;exports.usePersonMask=ve;exports.useSegmentationOverlayMaterial=de;exports.useSemanticMaskTexture=ue;exports.useSemanticSegmentationMask=Z;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { XRQualityConfigInput, XRQualitySignals, XRQualityState } from './types';
|
|
2
|
+
/** Static device signals (memory, cores) read once. */
|
|
3
|
+
export declare const readDeviceSignals: () => Pick<XRQualitySignals, "deviceMemoryGb" | "hardwareConcurrency">;
|
|
4
|
+
export type XRQualityControllerProps = {
|
|
5
|
+
/** Partial config merged over the defaults (`resolveQualityConfig`). */
|
|
6
|
+
config?: XRQualityConfigInput;
|
|
7
|
+
/** Externally supplied thermal state (a native shell can forward the OS value). */
|
|
8
|
+
thermal?: XRQualitySignals["thermal"];
|
|
9
|
+
/**
|
|
10
|
+
* Called whenever a different tier is applied (automatic or manual). The
|
|
11
|
+
* floor-level `signals.thermal === "suspected"` flag changes no tier, so it
|
|
12
|
+
* does not fire this; read `useXRQuality().signals` to react to it.
|
|
13
|
+
*/
|
|
14
|
+
onDecision?: (state: XRQualityState) => void;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Samples main-thread frame time, tracker inference and memory on
|
|
18
|
+
* `budget.sampleMs`, steps the pure controller, publishes the state to the
|
|
19
|
+
* session store and applies the tier: `targetFps` + `analysisScale` through
|
|
20
|
+
* the session perf config, `renderScale` through `<XRScene>` (which reads
|
|
21
|
+
* the state), and `camRes` only when the tier sets `rebindCamera`. Mounted by
|
|
22
|
+
* `<XRProvider>` by default; mount it yourself with `quality={false}` on the
|
|
23
|
+
* provider to place it or configure it differently.
|
|
24
|
+
*/
|
|
25
|
+
export declare const XRQualityController: ({ config, thermal, onDecision }: XRQualityControllerProps) => null;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { XRPerformanceBudget, XRQualityConfig, XRQualityConfigInput, XRQualityReason, XRQualitySignals, XRQualityState, XRQualityTier } from './types';
|
|
2
|
+
export declare const DEFAULT_QUALITY_TIERS: XRQualityTier[];
|
|
3
|
+
export declare const DEFAULT_PERFORMANCE_BUDGET: XRPerformanceBudget;
|
|
4
|
+
export declare const DEFAULT_QUALITY_CONFIG: XRQualityConfig;
|
|
5
|
+
export declare const EMPTY_QUALITY_SIGNALS: XRQualitySignals;
|
|
6
|
+
/** Validate a tier; invalid knobs are dropped, out-of-range ones clamped. */
|
|
7
|
+
export declare const resolveQualityTier: (tier: Partial<XRQualityTier>, index: number) => XRQualityTier;
|
|
8
|
+
export declare const resolvePerformanceBudget: (budget?: Partial<XRPerformanceBudget>) => XRPerformanceBudget;
|
|
9
|
+
/** Validate a partial config into a complete, serializable one. */
|
|
10
|
+
export declare const resolveQualityConfig: (config?: XRQualityConfigInput) => XRQualityConfig;
|
|
11
|
+
/** Starting tier from static device signals: low-memory / few-core devices start one step down. */
|
|
12
|
+
export declare const resolveInitialTierIndex: (config: XRQualityConfig, signals: XRQualitySignals) => number;
|
|
13
|
+
export declare const createQualityState: (config: XRQualityConfig, signals?: XRQualitySignals, now?: number) => XRQualityState;
|
|
14
|
+
/** Why a sample is over budget, most severe first; `null` when within budget. */
|
|
15
|
+
export declare const judgeSample: (signals: XRQualitySignals, budget: XRPerformanceBudget) => Exclude<XRQualityReason, "init" | "recovered" | "manual" | "locked" | "reset"> | null;
|
|
16
|
+
/**
|
|
17
|
+
* One controller step. Pure: returns the next state (same object when
|
|
18
|
+
* nothing changed). Bounded to `[maxTier, minTier]`, hysteretic (streaks),
|
|
19
|
+
* rate-limited (cooldown), reversible (steps back up after `upgradeAfter`
|
|
20
|
+
* good samples), and inert while `locked` or `adaptive: false`.
|
|
21
|
+
*/
|
|
22
|
+
export declare const stepQualityController: (state: XRQualityState, signals: XRQualitySignals, config: XRQualityConfig, now: number) => XRQualityState;
|
|
23
|
+
/** Manual tier selection (does not lock). */
|
|
24
|
+
export declare const setQualityTier: (state: XRQualityState, config: XRQualityConfig, ref: number | string, now: number) => XRQualityState;
|
|
25
|
+
export declare const lockQuality: (state: XRQualityState, config: XRQualityConfig, locked: boolean, now: number) => XRQualityState;
|
|
26
|
+
/**
|
|
27
|
+
* The tier the controller must apply now, or `null` when `lastApplied` is
|
|
28
|
+
* already it. Compares tier identity (the decision may have been written to
|
|
29
|
+
* the store by `useXRQuality().setTier` between two samples, so comparing
|
|
30
|
+
* decisions would miss it).
|
|
31
|
+
*/
|
|
32
|
+
export declare const tierToApply: (state: XRQualityState, lastApplied: XRQualityTier | null) => XRQualityTier | null;
|
|
33
|
+
export declare const resetQuality: (config: XRQualityConfig, signals: XRQualitySignals, now: number) => XRQualityState;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { XRPerformanceBudget, XRQualityConfig, XRQualityConfigInput, XRQualityDecision, XRQualityReason, XRQualitySignals, XRQualityState, XRQualityTier, } from './types';
|
|
2
|
+
export { XRQualityController, readDeviceSignals } from './XRQualityController';
|
|
3
|
+
export type { XRQualityControllerProps } from './XRQualityController';
|
|
4
|
+
export { useXRQuality } from './useXRQuality';
|
|
5
|
+
export type { UseXRQualityResult } from './useXRQuality';
|
|
6
|
+
export { DEFAULT_PERFORMANCE_BUDGET, DEFAULT_QUALITY_CONFIG, DEFAULT_QUALITY_TIERS, EMPTY_QUALITY_SIGNALS, createQualityState, judgeSample, lockQuality, resetQuality, resolveInitialTierIndex, resolvePerformanceBudget, resolveQualityConfig, resolveQualityTier, setQualityTier, stepQualityController, tierToApply, } from './controller';
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One quality level. Every knob is optional; an omitted knob keeps the
|
|
3
|
+
* session's own value. Tiers are plain JSON so they can be persisted.
|
|
4
|
+
*/
|
|
5
|
+
export type XRQualityTier = {
|
|
6
|
+
name: string;
|
|
7
|
+
/** Inference cap applied to every tracker without its own `targetFps`. */
|
|
8
|
+
targetFps?: number;
|
|
9
|
+
/** Multiplier on the renderer's device pixel ratio cap (0.25..1). */
|
|
10
|
+
renderScale?: number;
|
|
11
|
+
/** Multiplier on every model's analysis resolution (0.25..1). */
|
|
12
|
+
analysisScale?: number;
|
|
13
|
+
/** Camera capture width; applied only when `rebindCamera` is true (a rebind re-opens the camera). */
|
|
14
|
+
camRes?: number;
|
|
15
|
+
/** Allow this tier to re-open the webcam to apply `camRes`. Default false. */
|
|
16
|
+
rebindCamera?: boolean;
|
|
17
|
+
};
|
|
18
|
+
/** Thresholds the controller judges samples against. Plain JSON. */
|
|
19
|
+
export type XRPerformanceBudget = {
|
|
20
|
+
/** Frame time above which a sample is "bad" (ms). Default 1000 / 24. */
|
|
21
|
+
maxFrameMs: number;
|
|
22
|
+
/** Total tracker inference per frame above which a sample is "bad" (ms). Default 24. */
|
|
23
|
+
maxInferenceMs: number;
|
|
24
|
+
/** JS heap usage above which a sample is "bad" (MB); `null` ignores memory. Default null. */
|
|
25
|
+
maxMemoryMb: number | null;
|
|
26
|
+
/** Sampling period (ms). Default 1000. */
|
|
27
|
+
sampleMs: number;
|
|
28
|
+
/** Consecutive bad samples before stepping down. Default 2. */
|
|
29
|
+
downgradeAfter: number;
|
|
30
|
+
/** Consecutive good samples (frame time under `maxFrameMs × upgradeHeadroom`) before stepping up. Default 6. */
|
|
31
|
+
upgradeAfter: number;
|
|
32
|
+
/** A "good" sample must leave this much headroom (0..1 of `maxFrameMs`). Default 0.75. */
|
|
33
|
+
upgradeHeadroom: number;
|
|
34
|
+
/** Minimum time between two automatic changes (ms). Default 4000. */
|
|
35
|
+
cooldownMs: number;
|
|
36
|
+
};
|
|
37
|
+
/** What the controller measured in one sample. */
|
|
38
|
+
export type XRQualitySignals = {
|
|
39
|
+
/** Mean main-thread frame time over the sample (ms); `null` before the first sample. */
|
|
40
|
+
frameMs: number | null;
|
|
41
|
+
/** Frames per second over the sample. */
|
|
42
|
+
fps: number | null;
|
|
43
|
+
/** Sum of the last inference of every running model (ms). */
|
|
44
|
+
inferenceMs: number | null;
|
|
45
|
+
/** Feed frames per second the session blitted. */
|
|
46
|
+
feedFps: number | null;
|
|
47
|
+
/** JS heap in use (MB) where `performance.memory` exists. */
|
|
48
|
+
memoryMb: number | null;
|
|
49
|
+
/** `navigator.deviceMemory` (GB) where exposed. */
|
|
50
|
+
deviceMemoryGb: number | null;
|
|
51
|
+
hardwareConcurrency: number | null;
|
|
52
|
+
/**
|
|
53
|
+
* Thermal state. Browsers expose none, so this is `"unknown"` unless the
|
|
54
|
+
* app supplies one (a native shell can); `"suspected"` is set by the
|
|
55
|
+
* controller when frame time keeps degrading at the lowest tier.
|
|
56
|
+
*/
|
|
57
|
+
thermal: "unknown" | "nominal" | "suspected" | "critical";
|
|
58
|
+
};
|
|
59
|
+
export type XRQualityReason = "init" | "frame-time" | "inference" | "memory" | "thermal" | "recovered" | "manual" | "locked" | "reset";
|
|
60
|
+
export type XRQualityDecision = {
|
|
61
|
+
/** Index into `tiers`. */
|
|
62
|
+
index: number;
|
|
63
|
+
tier: XRQualityTier;
|
|
64
|
+
reason: XRQualityReason;
|
|
65
|
+
/** `performance.now()` of the decision. */
|
|
66
|
+
at: number;
|
|
67
|
+
};
|
|
68
|
+
/** Controller state; serializable except for nothing (plain data). */
|
|
69
|
+
export type XRQualityState = {
|
|
70
|
+
index: number;
|
|
71
|
+
/** When true the controller stops adjusting; `setTier` still works. */
|
|
72
|
+
locked: boolean;
|
|
73
|
+
badStreak: number;
|
|
74
|
+
goodStreak: number;
|
|
75
|
+
lastChangeAt: number;
|
|
76
|
+
decision: XRQualityDecision;
|
|
77
|
+
/** Last decisions, newest first (bounded). */
|
|
78
|
+
history: XRQualityDecision[];
|
|
79
|
+
signals: XRQualitySignals;
|
|
80
|
+
};
|
|
81
|
+
export type XRQualityConfig = {
|
|
82
|
+
/** Ordered best → worst. Default `DEFAULT_QUALITY_TIERS`. */
|
|
83
|
+
tiers: XRQualityTier[];
|
|
84
|
+
budget: XRPerformanceBudget;
|
|
85
|
+
/** Start here (index or name); default: picked from device signals. */
|
|
86
|
+
initialTier?: number | string;
|
|
87
|
+
/** The controller may step down to this tier at most (index or name). Default the last. */
|
|
88
|
+
minTier?: number | string;
|
|
89
|
+
/** The controller may step up to this tier at most. Default the first. */
|
|
90
|
+
maxTier?: number | string;
|
|
91
|
+
/** `false` keeps the initial tier and never adjusts (still observable). Default true. */
|
|
92
|
+
adaptive: boolean;
|
|
93
|
+
/** Bound of `history`. Default 20. */
|
|
94
|
+
historySize: number;
|
|
95
|
+
};
|
|
96
|
+
/** What creators pass: everything optional, tiers and budget partial. `resolveQualityConfig` fills it in. */
|
|
97
|
+
export type XRQualityConfigInput = Partial<Omit<XRQualityConfig, "tiers" | "budget">> & {
|
|
98
|
+
tiers?: Array<Partial<XRQualityTier>>;
|
|
99
|
+
budget?: Partial<XRPerformanceBudget>;
|
|
100
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { XRQualityConfigInput, XRQualityDecision, XRQualitySignals, XRQualityState, XRQualityTier } from './types';
|
|
2
|
+
export type UseXRQualityResult = {
|
|
3
|
+
/** Current tier (`null` until the controller publishes). */
|
|
4
|
+
tier: XRQualityTier | null;
|
|
5
|
+
index: number;
|
|
6
|
+
tiers: XRQualityTier[];
|
|
7
|
+
decision: XRQualityDecision | null;
|
|
8
|
+
history: XRQualityDecision[];
|
|
9
|
+
signals: XRQualitySignals | null;
|
|
10
|
+
locked: boolean;
|
|
11
|
+
/** Pick a tier by index or name (does not lock; the controller may move again after the cooldown). */
|
|
12
|
+
setTier: (ref: number | string) => void;
|
|
13
|
+
/** Freeze the current tier (`lock()`), or let the controller adjust again (`unlock()`). */
|
|
14
|
+
lock: () => void;
|
|
15
|
+
unlock: () => void;
|
|
16
|
+
/** Back to the initial tier for this device; clears the lock. */
|
|
17
|
+
reset: () => void;
|
|
18
|
+
state: XRQualityState | null;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Observe and steer adaptive quality. The controller (mounted by
|
|
22
|
+
* `<XRProvider>` by default) publishes its state AND its resolved config to
|
|
23
|
+
* the session store; this hook reads both, so `tiers` and name-based
|
|
24
|
+
* `setTier("medium")` resolve against the provider's tiers without passing
|
|
25
|
+
* the config again. Manual decisions are written back through the store and
|
|
26
|
+
* applied by the controller on its next sample.
|
|
27
|
+
*/
|
|
28
|
+
export declare const useXRQuality: (config?: XRQualityConfigInput) => UseXRQualityResult;
|
|
@@ -3,6 +3,14 @@ export declare const MAX_RENDER_GROUP_PASSES = 30;
|
|
|
3
3
|
/** Temporary layer for backgrounds not yet represented by a scene object. */
|
|
4
4
|
export declare const EXTERNAL_BACKGROUND_RENDER_LAYER = 31;
|
|
5
5
|
export declare const getRenderGroupLayer: (groupIndex: number, baseLayer?: number) => number;
|
|
6
|
+
/**
|
|
7
|
+
* Inside `renderSequentialPasses`: which pass is rendering now (internal; a
|
|
8
|
+
* screen pass such as FaceLiquify runs in the last one only). Null outside.
|
|
9
|
+
*/
|
|
10
|
+
export declare const getRenderPassContext: (renderer: WebGLRenderer) => {
|
|
11
|
+
index: number;
|
|
12
|
+
count: number;
|
|
13
|
+
} | null;
|
|
6
14
|
export type SequentialRenderOptions = {
|
|
7
15
|
renderer: WebGLRenderer;
|
|
8
16
|
scene: Scene;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type * as THREE from "three";
|
|
2
|
+
/**
|
|
3
|
+
* Work to run each time a scene is rendered, after three has updated every
|
|
4
|
+
* world matrix and before it uploads geometry: what reads where something is
|
|
5
|
+
* this frame (trackers have moved it) acts on it in the same frame. Particle
|
|
6
|
+
* emitters upload their new particles here; spring swings turn jewellery
|
|
7
|
+
* from the pose it is drawn at. One chained `scene.onBeforeRender` per
|
|
8
|
+
* scene, restored when the last callback leaves.
|
|
9
|
+
*/
|
|
10
|
+
export type SceneBeforeRender = (renderer: THREE.WebGLRenderer, scene: THREE.Scene, camera: THREE.Camera) => void;
|
|
11
|
+
/** Runs `callback` before every render of `scene`; returns the removal. */
|
|
12
|
+
export declare const addSceneBeforeRender: (scene: THREE.Scene, callback: SceneBeforeRender) => (() => void);
|