@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
|
@@ -1,61 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const { session: n } = $(), s = B(), [i, f] = W(null), u = r0(t), o = A(t);
|
|
12
|
-
o.current = t, F(() => {
|
|
13
|
-
let c = !1;
|
|
14
|
-
return f(null), n.registry.acquire(e, s, o.current).catch((l) => {
|
|
15
|
-
c || f(l instanceof Error ? l : new Error(String(l)));
|
|
16
|
-
}), () => {
|
|
17
|
-
c = !0, n.registry.release(e, s);
|
|
18
|
-
};
|
|
19
|
-
}, [n, e, s, u]), F(() => {
|
|
20
|
-
n.registry.setActive(e, s, r);
|
|
21
|
-
}, [n, e, s, r]);
|
|
22
|
-
const d = n.store, h = q(
|
|
23
|
-
(c) => d.subscribe(c),
|
|
24
|
-
() => d.getSnapshot().pipeline.get(e) ?? null,
|
|
25
|
-
() => null
|
|
26
|
-
), p = v(() => h ? h.getModelNode() : null, [h]);
|
|
27
|
-
return {
|
|
28
|
-
ready: h !== null && i === null,
|
|
29
|
-
node: p,
|
|
30
|
-
error: i
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
const s0 = ({ materialProps: e, settings: t }) => t.type === "basic" ? /* @__PURE__ */ _("meshBasicMaterial", { ...e }) : /* @__PURE__ */ _(
|
|
34
|
-
"meshStandardMaterial",
|
|
35
|
-
{
|
|
36
|
-
...e,
|
|
37
|
-
roughness: t.roughness,
|
|
38
|
-
metalness: t.metalness
|
|
39
|
-
}
|
|
40
|
-
), g = 1e-6, o0 = (e) => {
|
|
41
|
-
const { x: t, y: r, z: n } = e.scale;
|
|
42
|
-
return Math.abs(t - r) <= g && Math.abs(t - n) <= g ? t : 1;
|
|
43
|
-
}, R0 = (e, t, r, n) => {
|
|
44
|
-
if (!r.enabled) return e;
|
|
45
|
-
const s = o0(r);
|
|
46
|
-
return n.x = t.x + (e.x - t.x) * s + r.position.x, n.y = t.y + (e.y - t.y) * s - r.position.y, n.z = t.z + (e.z - t.z) * s + r.position.z, n;
|
|
47
|
-
}, c0 = (e, t, r) => e0(e, t, r), b0 = (e, t, r) => {
|
|
48
|
-
const n = (e.x - 0.5) * 2, s = (0.5 - e.y) * 2, i = T.MathUtils.clamp(e.z * 2, -1, 1);
|
|
49
|
-
return r.set(n, s, i).unproject(t);
|
|
50
|
-
}, i0 = (e, t, r, n, s, i) => {
|
|
51
|
-
const f = Math.min(t, e.length);
|
|
52
|
-
for (let u = 0; u < f; u++) {
|
|
53
|
-
s(e[u], n, i);
|
|
54
|
-
const o = u * 3;
|
|
55
|
-
r[o] = i.x, r[o + 1] = i.y, r[o + 2] = i.z;
|
|
56
|
-
}
|
|
57
|
-
return f;
|
|
58
|
-
}, a0 = [
|
|
1
|
+
const E = {
|
|
2
|
+
/** Camera background and segmentation mask. `depthTest` disabled. */
|
|
3
|
+
BACKGROUND: -1e3,
|
|
4
|
+
/** Free world-space content. `depthTest` enabled. */
|
|
5
|
+
WORLD: 0,
|
|
6
|
+
/** Descendants of `FaceTracker` / `HandTracker` / `BodyTracker`. `depthTest` enabled. */
|
|
7
|
+
TRACKED: 100,
|
|
8
|
+
/** Descendants of `ScreenSpaceUI`. `depthTest` disabled. */
|
|
9
|
+
SCREEN_UI: 1e3
|
|
10
|
+
}, R = [
|
|
59
11
|
[127, 34, 139],
|
|
60
12
|
[11, 0, 37],
|
|
61
13
|
[232, 231, 120],
|
|
@@ -909,7 +861,7 @@ const s0 = ({ materialProps: e, settings: t }) => t.type === "basic" ? /* @__PUR
|
|
|
909
861
|
[390, 339, 249],
|
|
910
862
|
[339, 448, 255],
|
|
911
863
|
[255, 339, 448]
|
|
912
|
-
].flat(),
|
|
864
|
+
].flat(), s = [
|
|
913
865
|
0.5104879319667817,
|
|
914
866
|
0.33515610277652746,
|
|
915
867
|
0.5174233198165894,
|
|
@@ -1866,193 +1818,9 @@ const s0 = ({ materialProps: e, settings: t }) => t.type === "basic" ? /* @__PUR
|
|
|
1866
1818
|
0.618020570576191,
|
|
1867
1819
|
0.33353258967399596,
|
|
1868
1820
|
0.5936576622724534
|
|
1869
|
-
]
|
|
1870
|
-
type: "standard",
|
|
1871
|
-
color: "#ffffff",
|
|
1872
|
-
opacity: 1,
|
|
1873
|
-
wireframe: !1,
|
|
1874
|
-
roughness: 1,
|
|
1875
|
-
metalness: 0
|
|
1876
|
-
}, K = ({
|
|
1877
|
-
material: e,
|
|
1878
|
-
faceIndex: t = 0,
|
|
1879
|
-
numFaces: r,
|
|
1880
|
-
visible: n = !0,
|
|
1881
|
-
children: s
|
|
1882
|
-
}) => {
|
|
1883
|
-
const { ready: i, node: f } = j(
|
|
1884
|
-
P.FACE_TRACKER,
|
|
1885
|
-
r === void 0 ? void 0 : { numFaces: r }
|
|
1886
|
-
), { camera: u } = k(), o = A(null), d = A(null), h = A(null), p = A(null), c = A(null), l = A(new T.Vector3()), E = v(() => {
|
|
1887
|
-
const m = new Uint16Array(a0), x = new T.BufferAttribute(m, 1), y = new T.Float32BufferAttribute(u0, 2), R = new Float32Array(l0), a = new T.Float32BufferAttribute(R, 3);
|
|
1888
|
-
return a.setUsage(T.DynamicDrawUsage), { indexAttr: x, uvAttr: y, positionAttr: a, positions: R };
|
|
1889
|
-
}, []);
|
|
1890
|
-
F(() => {
|
|
1891
|
-
p.current = E.indexAttr, c.current = E.uvAttr, h.current = E.positionAttr, d.current = E.positions;
|
|
1892
|
-
const m = o.current;
|
|
1893
|
-
if (m) {
|
|
1894
|
-
const x = m.geometry;
|
|
1895
|
-
x.setAttribute("position", E.positionAttr), x.setAttribute("uv", E.uvAttr), x.setIndex(E.indexAttr);
|
|
1896
|
-
}
|
|
1897
|
-
return () => {
|
|
1898
|
-
p.current = null, c.current = null, h.current = null, d.current = null;
|
|
1899
|
-
};
|
|
1900
|
-
}, [E]), U(() => {
|
|
1901
|
-
var M;
|
|
1902
|
-
if (!i || !f || !o.current) return;
|
|
1903
|
-
const { detectionResults: m } = f, x = (M = m == null ? void 0 : m.faceLandmarks) == null ? void 0 : M[t], y = o.current.geometry, R = d.current, a = h.current;
|
|
1904
|
-
if (!x || x.length === 0 || !R || !a) {
|
|
1905
|
-
y.drawRange.count !== 0 && y.setDrawRange(0, 0);
|
|
1906
|
-
return;
|
|
1907
|
-
}
|
|
1908
|
-
y.getAttribute("position") !== a && (y.setAttribute("position", a), y.setAttribute("uv", c.current), y.setIndex(p.current)), y.drawRange.count === 0 && y.setDrawRange(0, 1 / 0), i0(
|
|
1909
|
-
x,
|
|
1910
|
-
H,
|
|
1911
|
-
R,
|
|
1912
|
-
u,
|
|
1913
|
-
c0,
|
|
1914
|
-
l.current
|
|
1915
|
-
), a.needsUpdate = !0, y.computeVertexNormals();
|
|
1916
|
-
});
|
|
1917
|
-
const S = s != null && s !== !1;
|
|
1918
|
-
return /* @__PURE__ */ w("mesh", { material: e, ref: o, visible: n, children: [
|
|
1919
|
-
/* @__PURE__ */ _("bufferGeometry", {}),
|
|
1920
|
-
!e && !S && /* @__PURE__ */ _(
|
|
1921
|
-
s0,
|
|
1922
|
-
{
|
|
1923
|
-
settings: f0,
|
|
1924
|
-
materialProps: {
|
|
1925
|
-
attach: "material",
|
|
1926
|
-
transparent: !0,
|
|
1927
|
-
depthWrite: !1,
|
|
1928
|
-
side: T.DoubleSide,
|
|
1929
|
-
needsUpdate: !0
|
|
1930
|
-
}
|
|
1931
|
-
}
|
|
1932
|
-
),
|
|
1933
|
-
!e && S ? s : null
|
|
1934
|
-
] });
|
|
1935
|
-
};
|
|
1936
|
-
K.displayName = "FaceMesh";
|
|
1937
|
-
const L = {
|
|
1938
|
-
"face.forehead": 10,
|
|
1939
|
-
"face.noseTip": 1,
|
|
1940
|
-
"face.chin": 152,
|
|
1941
|
-
"face.leftEyeOuter": 263,
|
|
1942
|
-
"face.rightEyeOuter": 33,
|
|
1943
|
-
"face.leftCheek": 425,
|
|
1944
|
-
"face.rightCheek": 205,
|
|
1945
|
-
"face.mouthCenter": 13,
|
|
1946
|
-
"face.leftEarlobe": 454,
|
|
1947
|
-
"face.rightEarlobe": 234
|
|
1948
|
-
}, y0 = {
|
|
1949
|
-
"face.center": [10, 152, 234, 454],
|
|
1950
|
-
"face.leftEye": [263, 362, 387, 373],
|
|
1951
|
-
"face.rightEye": [33, 133, 158, 145]
|
|
1952
|
-
}, V = (e, t = 0) => Number.isFinite(e) ? e : t, D = (e) => Math.max(-1, Math.min(1, V(e))), d0 = { x: 0, y: 0, z: 0 }, h0 = (e, t, r = d0, n = { x: 0, y: 0, z: 0, visibility: 0 }) => {
|
|
1953
|
-
const s = L[e];
|
|
1954
|
-
if (s !== void 0) {
|
|
1955
|
-
const c = t[s];
|
|
1956
|
-
return c ? Object.assign(n, c) : null;
|
|
1957
|
-
}
|
|
1958
|
-
const i = y0[e];
|
|
1959
|
-
if (i) {
|
|
1960
|
-
n.x = 0, n.y = 0, n.z = 0;
|
|
1961
|
-
for (const c of i) {
|
|
1962
|
-
const l = t[c];
|
|
1963
|
-
if (!l) return null;
|
|
1964
|
-
n.x += l.x, n.y += l.y, n.z += l.z;
|
|
1965
|
-
}
|
|
1966
|
-
return n.x /= i.length, n.y /= i.length, n.z /= i.length, n.visibility = 1, n;
|
|
1967
|
-
}
|
|
1968
|
-
if (e !== "face.custom" || t.length === 0) return null;
|
|
1969
|
-
let f = 1 / 0, u = 1 / 0, o = -1 / 0, d = -1 / 0, h = 0;
|
|
1970
|
-
for (const c of t)
|
|
1971
|
-
f = Math.min(f, c.x), u = Math.min(u, c.y), o = Math.max(o, c.x), d = Math.max(d, c.y), h += c.z;
|
|
1972
|
-
const p = o - f;
|
|
1973
|
-
return n.x = (f + o) * 0.5 - D(r.x) * p * 0.5, n.y = (u + d) * 0.5 - D(r.y) * (d - u) * 0.5, n.z = h / t.length - V(r.z) * p, n.visibility = 1, n;
|
|
1974
|
-
}, T0 = {
|
|
1975
|
-
left: L["face.leftEyeOuter"],
|
|
1976
|
-
right: L["face.rightEyeOuter"]
|
|
1977
|
-
}, X = J(null), _0 = () => G(X), p0 = ({
|
|
1978
|
-
faceIndex: e = 0,
|
|
1979
|
-
numFaces: t,
|
|
1980
|
-
scaleWithFace: r = !1,
|
|
1981
|
-
followFaceRoll: n = !0,
|
|
1982
|
-
targetFps: s,
|
|
1983
|
-
active: i = !0,
|
|
1984
|
-
children: f
|
|
1985
|
-
}) => {
|
|
1986
|
-
const u = A(!1), o = A(null), d = v(() => {
|
|
1987
|
-
if (!(t === void 0 && s === void 0))
|
|
1988
|
-
return {
|
|
1989
|
-
...t === void 0 ? {} : { numFaces: t },
|
|
1990
|
-
...s === void 0 ? {} : { targetFps: s }
|
|
1991
|
-
};
|
|
1992
|
-
}, [t, s]), { ready: h, node: p } = j(
|
|
1993
|
-
P.FACE_TRACKER,
|
|
1994
|
-
d,
|
|
1995
|
-
i
|
|
1996
|
-
), { camera: c } = k(), l = A(c);
|
|
1997
|
-
l.current !== c && (l.current = c, u.current = !1);
|
|
1998
|
-
const E = A(null), S = A({ x: 0, y: 0, z: 0, visibility: 0 });
|
|
1999
|
-
U(() => {
|
|
2000
|
-
if (!h || !p || !o.current) return;
|
|
2001
|
-
E.current = p, !u.current && l.current && (p.setCamera(l.current, e), u.current = !0);
|
|
2002
|
-
const a = p.getFace(e);
|
|
2003
|
-
if (!a) {
|
|
2004
|
-
o.current.visible = !1;
|
|
2005
|
-
return;
|
|
2006
|
-
}
|
|
2007
|
-
o.current.visible = !0;
|
|
2008
|
-
const { position: M, rotation: C, scale: b } = a.transform;
|
|
2009
|
-
o.current.position.set(M.x, M.y, M.z), o.current.rotation.set(C.x, C.y, n ? C.z : 0), r ? o.current.scale.set(b.x, b.y, b.z) : o.current.scale.set(1, 1, 1);
|
|
2010
|
-
});
|
|
2011
|
-
const m = Q(
|
|
2012
|
-
(a, M) => {
|
|
2013
|
-
var O, I;
|
|
2014
|
-
const C = E.current, b = (I = (O = C == null ? void 0 : C.detectionResults) == null ? void 0 : O.faceLandmarks) == null ? void 0 : I[e];
|
|
2015
|
-
if (!b || b.length === 0) return null;
|
|
2016
|
-
const N = h0(
|
|
2017
|
-
a,
|
|
2018
|
-
b,
|
|
2019
|
-
M,
|
|
2020
|
-
S.current
|
|
2021
|
-
);
|
|
2022
|
-
return N ? { position: t0(N, l.current) } : null;
|
|
2023
|
-
},
|
|
2024
|
-
[e]
|
|
2025
|
-
), x = v(
|
|
2026
|
-
() => ({ type: "face", resolveLandmark: m }),
|
|
2027
|
-
[m]
|
|
2028
|
-
);
|
|
2029
|
-
let y;
|
|
2030
|
-
const R = [];
|
|
2031
|
-
return z.Children.forEach(f, (a) => {
|
|
2032
|
-
var M, C;
|
|
2033
|
-
z.isValidElement(a) && // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2034
|
-
(((M = a.type) == null ? void 0 : M.displayName) === "FaceTracker.Mesh" || // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2035
|
-
((C = a.type) == null ? void 0 : C.displayName) === "FaceMesh") ? y = z.cloneElement(a, { faceIndex: e, numFaces: t }) : R.push(a);
|
|
2036
|
-
}), /* @__PURE__ */ w(X.Provider, { value: x, children: [
|
|
2037
|
-
/* @__PURE__ */ _("group", { ref: o, renderOrder: n0.TRACKED, children: R }),
|
|
2038
|
-
y
|
|
2039
|
-
] });
|
|
2040
|
-
}, Z = (e) => /* @__PURE__ */ _(K, { ...e });
|
|
2041
|
-
Z.displayName = "FaceTracker.Mesh";
|
|
2042
|
-
const Y = p0;
|
|
2043
|
-
Y.Mesh = Z;
|
|
2044
|
-
const S0 = Y;
|
|
1821
|
+
];
|
|
2045
1822
|
export {
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
X as T,
|
|
2050
|
-
_0 as a,
|
|
2051
|
-
Y as b,
|
|
2052
|
-
K as c,
|
|
2053
|
-
L as d,
|
|
2054
|
-
b0 as p,
|
|
2055
|
-
h0 as r,
|
|
2056
|
-
R0 as t,
|
|
2057
|
-
j as u
|
|
1823
|
+
R as F,
|
|
1824
|
+
E as R,
|
|
1825
|
+
s as a
|
|
2058
1826
|
};
|
|
@@ -31,10 +31,9 @@ The XR SDK (`@vincentt-xr/sdk`) is a WebAR SDK that provides AI-powered tracking
|
|
|
31
31
|
Source of truth: `example/src/navigation/routes.tsx`. This list is a readable summary only.
|
|
32
32
|
|
|
33
33
|
- `/unified-architecture`: debug-ui scene editor composition for face tracking
|
|
34
|
-
- `/
|
|
34
|
+
- `/face-mesh?faces=two`: multi-face face-mesh sanity example
|
|
35
35
|
- `/body`: visible body-tracking anchors
|
|
36
36
|
- `/debugger`: debugger overlay and metrics example
|
|
37
|
-
- `/viewport-editor`: reusable 3D scene editor fixture
|
|
38
37
|
- `/face-retouch-legacy`: legacy face-retouch shader settings example
|
|
39
38
|
|
|
40
39
|
## Installation
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Adaptive Quality & Performance Budget"
|
|
3
|
+
description: "An opt-out performance budget that measures frame time, inference time, memory and device signals, then steps tracker fps, analysis resolution, render pixel ratio and camera resolution between declared tiers; bounded, observable, reversible."
|
|
4
|
+
sidebarTitle: "Adaptive Quality"
|
|
5
|
+
icon: "gauge"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Phones differ by an order of magnitude and heat up over a session. Instead
|
|
9
|
+
of hand-tuning `perf.targetFps`, declare quality tiers and a budget; the
|
|
10
|
+
controller moves between the tiers and tells you why.
|
|
11
|
+
|
|
12
|
+
```tsx
|
|
13
|
+
import { XRProvider, useXRQuality } from "@vincentt-xr/sdk";
|
|
14
|
+
|
|
15
|
+
// On by default. Customise, pin, or turn it off:
|
|
16
|
+
<XRProvider quality={{ budget: { maxFrameMs: 33 }, minTier: "medium" }}>…</XRProvider>;
|
|
17
|
+
<XRProvider quality={{ adaptive: false, initialTier: "medium" }}>…</XRProvider>;
|
|
18
|
+
<XRProvider quality={false}>…</XRProvider>;
|
|
19
|
+
|
|
20
|
+
const { tier, decision, signals, setTier, lock, unlock, reset } = useXRQuality();
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Tiers and budget (serializable)
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
const DEFAULT_QUALITY_TIERS = [
|
|
27
|
+
{ name: "high", targetFps: 30, renderScale: 1, analysisScale: 1, camRes: 960 },
|
|
28
|
+
{ name: "medium", targetFps: 24, renderScale: 0.8, analysisScale: 0.85, camRes: 720 },
|
|
29
|
+
{ name: "low", targetFps: 15, renderScale: 0.6, analysisScale: 0.7, camRes: 640 },
|
|
30
|
+
];
|
|
31
|
+
const DEFAULT_PERFORMANCE_BUDGET = {
|
|
32
|
+
maxFrameMs: 1000 / 24,
|
|
33
|
+
maxInferenceMs: 24,
|
|
34
|
+
maxMemoryMb: null,
|
|
35
|
+
sampleMs: 1000,
|
|
36
|
+
downgradeAfter: 2,
|
|
37
|
+
upgradeAfter: 6,
|
|
38
|
+
upgradeHeadroom: 0.75,
|
|
39
|
+
cooldownMs: 4000,
|
|
40
|
+
};
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Tiers are ordered best → worst; every knob is optional. `resolveQualityConfig`
|
|
44
|
+
validates a partial config (clamps scales to 0.25..1, drops invalid knobs,
|
|
45
|
+
resolves `initialTier` / `minTier` / `maxTier` by index or name), and the
|
|
46
|
+
result is plain JSON you can persist.
|
|
47
|
+
|
|
48
|
+
## Knobs and ownership
|
|
49
|
+
|
|
50
|
+
| Knob | Owner | Applied how |
|
|
51
|
+
| --------------- | ------------------------------------------------------------------- | -------------------------------------------------------------- |
|
|
52
|
+
| `targetFps` | session perf config → every tracker without its own `targetFps` | `_setPerf` re-runs the models; immediate |
|
|
53
|
+
| `analysisScale` | session perf config → every model's analysis downscaler | immediate (next inference) |
|
|
54
|
+
| `renderScale` | `<XRScene>` pixel ratio: `min(devicePixelRatio, cap) × renderScale` | immediate; `cap` is the `dpr` ceiling (3 or `canvasProps.dpr`) |
|
|
55
|
+
| `camRes` | session perf config, **only with `rebindCamera: true`** | re-opens the webcam once when the tier changes |
|
|
56
|
+
|
|
57
|
+
A per-tracker `targetFps` prop still beats the tier. The app's own `perf`
|
|
58
|
+
is the base the tiers are merged over, and it is restored when the
|
|
59
|
+
controller unmounts.
|
|
60
|
+
|
|
61
|
+
## Behaviour
|
|
62
|
+
|
|
63
|
+
- **Sample** every `sampleMs`: mean main-thread frame time (window RAF),
|
|
64
|
+
fps, total tracker inference (`inferenceMsTotal` from diagnostics), feed
|
|
65
|
+
fps, JS heap (`performance.memory` where it exists), `deviceMemory`,
|
|
66
|
+
`hardwareConcurrency`, thermal. Hidden tabs are never judged.
|
|
67
|
+
- **Judge** most severe first: thermal `critical` → memory over
|
|
68
|
+
`maxMemoryMb` → inference over `maxInferenceMs` → frame time over
|
|
69
|
+
`maxFrameMs`.
|
|
70
|
+
- **Step down** after `downgradeAfter` consecutive bad samples, at most once
|
|
71
|
+
per `cooldownMs`, never below `minTier`. At the floor and still over
|
|
72
|
+
budget on frame time, `signals.thermal` becomes `"suspected"` so the app
|
|
73
|
+
can shed content; nothing else changes.
|
|
74
|
+
- **Step up** after `upgradeAfter` consecutive good samples (frame time and
|
|
75
|
+
inference under `budget × upgradeHeadroom`), never above `maxTier`.
|
|
76
|
+
- **Initial tier**: `initialTier` if set, else one step down from the top on
|
|
77
|
+
devices with ≤ 4 GB or ≤ 4 cores.
|
|
78
|
+
- **Manual**: `setTier()` (controller may move again after the cooldown),
|
|
79
|
+
`lock()` / `unlock()`, `reset()`. Every change is a decision with a
|
|
80
|
+
`reason` (`init`, `frame-time`, `inference`, `memory`, `thermal`,
|
|
81
|
+
`recovered`, `manual`, `locked`, `reset`) kept in `history`.
|
|
82
|
+
- **Unsupported signals degrade gracefully**: no `performance.memory` →
|
|
83
|
+
`memoryMb: null` and memory is ignored; no thermal API in browsers →
|
|
84
|
+
`thermal: "unknown"` unless the host passes one to
|
|
85
|
+
`<XRQualityController thermal=…>`.
|
|
86
|
+
|
|
87
|
+
The state is published to the session store (`useXRQualityState()` in
|
|
88
|
+
low-level) and shows in `useXRDiagnostics().quality` and the
|
|
89
|
+
`XRDiagnosticsPanel`. The pure stepping functions (`stepQualityController`,
|
|
90
|
+
`judgeSample`, …) are exported from `/low-level` for tests and custom
|
|
91
|
+
controllers.
|
|
92
|
+
|
|
93
|
+
## Manual validation
|
|
94
|
+
|
|
95
|
+
Run `/session-health`, quality section (budget tightened: 2 bad samples, 3 s cooldown):
|
|
96
|
+
|
|
97
|
+
| Case | Steps | Expect |
|
|
98
|
+
| ----------- | --------------------------- | ----------------------------------------------------------------- |
|
|
99
|
+
| Baseline | load with a video source | tier `high` (or `medium` on a weak device), `init` |
|
|
100
|
+
| Load | simulated load 60 ms | within ~3 s `medium` (`frame-time`), then `low` |
|
|
101
|
+
| Recover | load 0 | after ~4 good samples back to `medium`, then `high` (`recovered`) |
|
|
102
|
+
| Lock | lock, load 60 | stays put |
|
|
103
|
+
| Manual | pick `low` | tier `low` (`manual`), diagnostics panel shows it |
|
|
104
|
+
| Pixel ratio | pick `low` on a DPR-3 phone | scene renders softer (0.6×) |
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Asset Lifecycle & GPU Memory"
|
|
3
|
+
description: "Preload, cache, reference-count, de-duplicate, dispose and budget textures, GLB models and video with the SDK's own three.js loaders; observe usage and eviction."
|
|
4
|
+
sidebarTitle: "Asset Lifecycle"
|
|
5
|
+
icon: "memory"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
GPU memory grows when the same texture is loaded twice, when a route change
|
|
9
|
+
leaves a model behind, or when nobody owns disposal. The asset cache gives
|
|
10
|
+
every asset one identity, one load, one owner list and one disposal.
|
|
11
|
+
|
|
12
|
+
```tsx
|
|
13
|
+
import {
|
|
14
|
+
XRAssetCacheProvider,
|
|
15
|
+
defineGltfAsset,
|
|
16
|
+
defineTextureAsset,
|
|
17
|
+
useXRAsset,
|
|
18
|
+
useXRAssetStats,
|
|
19
|
+
} from "@vincentt-xr/sdk";
|
|
20
|
+
|
|
21
|
+
const HAT = defineGltfAsset("https://cdn.example.com/hat.glb");
|
|
22
|
+
const LOGO = defineTextureAsset("https://cdn.example.com/logo.png");
|
|
23
|
+
|
|
24
|
+
const Hat = () => {
|
|
25
|
+
const { value, status } = useXRAsset(HAT); // shared with every other <Hat>
|
|
26
|
+
return value ? <primitive object={value.scene} /> : null;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
<XRAssetCacheProvider>
|
|
30
|
+
{" "}
|
|
31
|
+
{/* optional: scopes a cache; releases unreferenced assets on unmount */}
|
|
32
|
+
<Hat />
|
|
33
|
+
<Hat /> {/* second mount: cache hit, same scene object */}
|
|
34
|
+
</XRAssetCacheProvider>;
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Model
|
|
38
|
+
|
|
39
|
+
- **Definition** `XRAssetDefinition<T> = { key, load(signal), dispose?(value), bytes?(value) }`. `key` is the identity; `defineTextureAsset`, `defineGltfAsset` and `defineVideoAsset` build one over three's loaders (no drei); SDK-CDN URLs go through the verifying fetch (fail closed without a pinned hash), consumer URLs are fetched plainly. Loads honour the abort signal, and a decode or parse that finishes after a release is disposed, not leaked. Write your own for anything else (audio buffers, JSON, fonts).
|
|
40
|
+
- **Acquire / release** `cache.acquire(asset, ownerId)` returns the shared value (in-flight loads are shared too); `cache.release(key, ownerId)` drops that owner. Owners are ids, so a re-render or a StrictMode double mount never double-counts. `useXRAsset` does both for a component.
|
|
41
|
+
- **Unreferenced values stay cached** until the budget needs room, `disposeUnreferenced()` or `disposeAll()`. A value nobody wanted by the time its load finished is disposed at once; releasing during a load aborts it.
|
|
42
|
+
- **Budget** `createAssetCache({ budgetBytes })` (default 256 MiB, `Infinity` disables). Above it, unreferenced values are disposed least-recently-used first; referenced values are never evicted, so `overBudget` can stay true while everything is in use. `setBudget` applies immediately; `evict(bytes)` forces room.
|
|
43
|
+
- **Bytes** come from `bytes(value)`: `estimateTextureBytes` (RGBA × mip chain), `estimateGeometryBytes`, `estimateObjectBytes` (geometries and textures reachable from a scene, each once). They are estimates of resident GPU memory; the browser exposes no exact figure.
|
|
44
|
+
- **Disposal is exactly once**: `dispose(value)` runs once per loaded value, on eviction, `disposeUnreferenced`, `disposeAll` or a too-late load. `disposeObject3D` releases every geometry, material and texture under an object.
|
|
45
|
+
- **Errors** are recorded on the entry (`status: "error"`); the next acquire retries.
|
|
46
|
+
|
|
47
|
+
## Observability
|
|
48
|
+
|
|
49
|
+
`useXRAssetStats()` (or `cache.getStats()`) reports `assets`,
|
|
50
|
+
`referencedAssets`, `loadingAssets`, `erroredAssets`, `usageBytes`,
|
|
51
|
+
`reclaimableBytes`, `budgetBytes`, `overBudget`, `evictions`, `hits` and
|
|
52
|
+
`misses`; `cache.list()` gives every entry with its status, bytes and owner
|
|
53
|
+
count; `cache.subscribe(listener)` fires on every change.
|
|
54
|
+
|
|
55
|
+
## Route changes and session shutdown
|
|
56
|
+
|
|
57
|
+
Owners release on unmount, so navigating away drops every reference held by
|
|
58
|
+
the page. `<XRAssetCacheProvider>` then calls `disposeUnreferenced()` as it
|
|
59
|
+
unmounts (`disposeUnreferencedOnUnmount`, default `true`), so a page-scoped
|
|
60
|
+
cache leaves nothing behind; the app-wide default cache (no provider) keeps
|
|
61
|
+
unreferenced values for the next page until the budget says otherwise. For
|
|
62
|
+
a hard shutdown call `cache.disposeAll()`. Tracker-owned resources (the
|
|
63
|
+
MediaPipe models, the camera texture, segmentation masks) are managed by the
|
|
64
|
+
session registry, released once when the provider unmounts; the asset cache
|
|
65
|
+
covers everything the app loads on top.
|
|
66
|
+
|
|
67
|
+
## Manual validation
|
|
68
|
+
|
|
69
|
+
Run `/asset-lifecycle` (a 24 MB page-scoped cache):
|
|
70
|
+
|
|
71
|
+
| Case | Steps | Expect |
|
|
72
|
+
| ------------ | ----------------------------------- | ------------------------------------------------------------------ |
|
|
73
|
+
| Dedupe | mount texture 1 twice (remount) | `hits` rises, one entry |
|
|
74
|
+
| Release | unmount a texture | entry stays with 0 owners, `reclaimable` grows |
|
|
75
|
+
| Budget | lower the budget slider | unreferenced entries disappear oldest first, `evictions` counts up |
|
|
76
|
+
| Referenced | budget below usage with all mounted | `OVER` shown, nothing evicted |
|
|
77
|
+
| Preload | "preload texture 4" | entry `ready` with 0 owners; mounting it is a hit |
|
|
78
|
+
| Route change | navigate away and back | entries empty on return (provider disposed the unreferenced ones) |
|