@vincentt-xr/sdk 2.0.0-alpha.0 → 2.0.0-alpha.2
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 +1813 -27
- package/dist/{DebuggerUI-CEfdddkZ.cjs → DebuggerUI-B45_Gb9d.cjs} +1 -1
- package/dist/{DebuggerUI-Dgop6Q6o.js → DebuggerUI-Cq28c18s.js} +1 -1
- package/dist/FaceMeshRenderer-6t8OsQhK.js +1195 -0
- package/dist/FaceMeshRenderer-lQLhYIW-.cjs +155 -0
- package/dist/FaceRetouch-CDrL0pXg.js +551 -0
- package/dist/FaceRetouch-DtNl8-4e.cjs +134 -0
- package/dist/audio/AudioEngine.d.ts +3 -1
- package/dist/audio/AudioPlayer.d.ts +29 -0
- package/dist/audio/AudioPlayerLogic.d.ts +4 -0
- package/dist/audio/index.d.ts +2 -0
- package/dist/components/Axes/index.d.ts +6 -0
- package/dist/components/FaceMesh/FaceMeshRenderer.d.ts +17 -0
- package/dist/components/FaceMesh/canonical/CanonicalFaceMeshRenderer.d.ts +22 -1
- package/dist/components/FaceMesh/canonical/FaceMeshMaterial.d.ts +25 -0
- package/dist/components/FaceMesh/canonical/assets.d.ts +3 -0
- package/dist/components/FaceMesh/canonical/geometryGroups.d.ts +9 -0
- package/dist/components/FaceMesh/canonical/parseCanonicalFaceModel.d.ts +2 -0
- package/dist/components/FaceMesh/canonical/shaders.d.ts +2 -0
- package/dist/components/FaceMesh/deform.d.ts +3 -0
- package/dist/components/FaceMesh/index.d.ts +5 -0
- package/dist/components/FaceMesh/material/defaults.d.ts +74 -0
- package/dist/components/FaceMesh/material/index.d.ts +1 -0
- package/dist/components/FaceMesh/material/options.d.ts +5 -1
- package/dist/components/FaceMesh/material/support.d.ts +7 -2
- package/dist/components/FaceMesh/material/textures.d.ts +4 -0
- package/dist/components/FaceMesh/material/types.d.ts +4 -2
- package/dist/components/FaceRetouch/Background.d.ts +9 -5
- package/dist/components/FaceRetouch/FaceRetouch.d.ts +47 -0
- package/dist/components/FaceRetouch/index.d.ts +2 -6
- package/dist/components/FaceRetouch/landmarkMask.d.ts +4 -6
- package/dist/components/FaceRetouch/useFaceRetouchMask.d.ts +4 -7
- package/dist/components/FaceTracker/index.d.ts +5 -3
- package/dist/components/FaceWarp3D/FaceWarp3DHead.d.ts +15 -0
- package/dist/components/FaceWarp3D/defaults.d.ts +37 -0
- package/dist/components/FaceWarp3D/index.d.ts +3 -0
- package/dist/components/FaceWarp3D/warp.d.ts +13 -0
- package/dist/components/HandJoints2D/index.d.ts +6 -0
- package/dist/components/HandTracker/index.d.ts +2 -2
- package/dist/components/HandTracking2D/HandVisual.d.ts +12 -0
- package/dist/components/HandTracking2D/index.d.ts +5 -0
- package/dist/components/HandTracking2DController/index.d.ts +5 -0
- package/dist/components/HandTracking3D/index.d.ts +6 -0
- package/dist/components/LightObject/index.d.ts +20 -0
- package/dist/components/LookAt/index.d.ts +23 -0
- package/dist/components/MeshRenderer/index.d.ts +58 -0
- package/dist/components/PerspectiveCamera/index.d.ts +2 -8
- package/dist/components/PinToMesh/index.d.ts +47 -0
- package/dist/components/RenderGroupLayer/index.d.ts +6 -0
- package/dist/components/SceneObjectRenderer/index.d.ts +16 -0
- package/dist/components/Screen2D/ScreenTransformFrame.d.ts +11 -0
- package/dist/components/Screen2D/ScreenTransformHelpers.d.ts +19 -0
- package/dist/components/Screen2D/ScreenTransformInteraction.d.ts +18 -0
- package/dist/components/Screen2D/index.d.ts +5 -0
- package/dist/components/ScreenGlass/defaults.d.ts +3 -0
- package/dist/components/ScreenGlass/index.d.ts +5 -0
- package/dist/components/ScreenGlass/shaders.d.ts +2 -0
- package/dist/components/ScreenGlass/types.d.ts +10 -0
- package/dist/components/ScreenGradient/defaults.d.ts +5 -0
- package/dist/components/ScreenGradient/index.d.ts +5 -0
- package/dist/components/ScreenGradient/shaders.d.ts +2 -0
- package/dist/components/ScreenGradient/types.d.ts +19 -0
- package/dist/components/ScreenImage/ScreenImage.d.ts +4 -0
- package/dist/components/ScreenImage/components/DynamicTextureSync.d.ts +9 -0
- package/dist/components/ScreenImage/components/ScreenImageBody.d.ts +9 -0
- package/dist/components/ScreenImage/components/ScreenImageFrame.d.ts +9 -0
- package/dist/components/ScreenImage/components/ScreenImageTransformFrame.d.ts +9 -0
- package/dist/components/ScreenImage/fit.d.ts +52 -0
- package/dist/components/ScreenImage/index.d.ts +8 -0
- package/dist/components/ScreenImage/materials/ScreenImageBlendMaterial.d.ts +9 -0
- package/dist/components/ScreenImage/materials/ScreenImageMatcap.d.ts +3 -0
- package/dist/components/ScreenImage/source.d.ts +16 -0
- package/dist/components/ScreenImage/types.d.ts +37 -0
- package/dist/components/ScreenImage/utils/ScreenImageConstants.d.ts +9 -0
- package/dist/components/ScreenImage/utils/ScreenImageHelpers.d.ts +4 -0
- package/dist/components/ScreenShape/geometry.d.ts +5 -0
- package/dist/components/ScreenShape/index.d.ts +5 -0
- package/dist/components/ScreenShape/types.d.ts +41 -0
- package/dist/components/ScreenSpaceUI/ScreenTransformGuide.d.ts +15 -0
- package/dist/components/ScreenSpaceUI/ScreenTransformOverlayGuide.d.ts +9 -0
- package/dist/components/ScreenSpaceUI/index.d.ts +2 -0
- package/dist/components/ScreenText/components/ScreenTextBody.d.ts +2 -0
- package/dist/components/ScreenText/components/ScreenTextTransformFrame.d.ts +9 -0
- package/dist/components/ScreenText/constants.d.ts +5 -0
- package/dist/components/ScreenText/index.d.ts +6 -0
- package/dist/components/ScreenText/types.d.ts +31 -0
- package/dist/components/ScreenText/utils/ScreenTextHelpers.d.ts +14 -0
- package/dist/components/ScreenText/utils/ScreenTextMappings.d.ts +17 -0
- package/dist/components/SequentialRenderPasses/index.d.ts +6 -0
- package/dist/components/TextLabel/TextLabel.d.ts +5 -0
- package/dist/components/TextLabel/alignment.d.ts +4 -0
- package/dist/components/TextLabel/bend.d.ts +9 -0
- package/dist/components/TextLabel/canvas/buildTextLabelTexture.d.ts +4 -0
- package/dist/components/TextLabel/canvas/canvasTypography.d.ts +13 -0
- package/dist/components/TextLabel/canvas/drawBackground.d.ts +21 -0
- package/dist/components/TextLabel/canvas/drawEffects.d.ts +34 -0
- package/dist/components/TextLabel/canvas/drawText.d.ts +19 -0
- package/dist/components/TextLabel/components/TextLabelMesh.d.ts +13 -0
- package/dist/components/TextLabel/constants.d.ts +2 -0
- package/dist/components/TextLabel/hooks/useTextLabelTexture.d.ts +7 -0
- package/dist/components/TextLabel/index.d.ts +2 -62
- package/dist/components/TextLabel/layout/measurement.d.ts +8 -0
- package/dist/components/TextLabel/layout/resolveTextLayout.d.ts +25 -0
- package/dist/components/TextLabel/layout/wrapText.d.ts +6 -0
- package/dist/components/TextLabel/types.d.ts +227 -0
- package/dist/components/TrackingAnchor/index.d.ts +18 -2
- package/dist/components/Transform3D/index.d.ts +30 -0
- package/dist/components/XRMediaSurface/index.d.ts +6 -6
- package/dist/components/XRScene/index.d.ts +14 -3
- package/dist/components/XRViewport/XRViewport.d.ts +11 -0
- package/dist/components/XRViewport/components/HiddenMedia.d.ts +7 -0
- package/dist/components/XRViewport/components/MediaAssetPicker.d.ts +8 -0
- package/dist/components/XRViewport/components/MediaControlStack.d.ts +13 -0
- package/dist/components/XRViewport/components/XRViewportLayers.d.ts +30 -0
- package/dist/components/XRViewport/constants.d.ts +24 -0
- package/dist/components/XRViewport/contexts.d.ts +6 -0
- package/dist/components/XRViewport/hooks/useViewportExternalFaces.d.ts +13 -0
- package/dist/components/XRViewport/hooks/useViewportMediaSource.d.ts +16 -0
- package/dist/components/XRViewport/hooks/useViewportMediaTexture.d.ts +10 -0
- package/dist/components/XRViewport/hooks/useViewportPipeline.d.ts +41 -0
- package/dist/components/XRViewport/hooks/useViewportRenderState.d.ts +47 -0
- package/dist/components/XRViewport/index.d.ts +3 -101
- package/dist/components/XRViewport/layout.d.ts +16 -0
- package/dist/components/XRViewport/slots.d.ts +16 -0
- package/dist/components/XRViewport/types.d.ts +89 -0
- package/dist/components/XRViewport/useViewportSize.d.ts +3 -0
- package/dist/components/index.d.ts +19 -0
- package/dist/contexts-BKvTIayr.cjs +1 -0
- package/dist/contexts-Bk5zz_VR.js +214 -0
- package/dist/debug-ui/component-editor/index.d.ts +19 -0
- package/dist/debug-ui/default-setting/index.d.ts +37 -0
- package/dist/debug-ui/default-setting.cjs +21 -0
- package/dist/debug-ui/default-setting.js +777 -0
- package/dist/debug-ui/face-mesh-renderer-settings/index.d.ts +8 -0
- package/dist/debug-ui/face-retouch/index.d.ts +11 -0
- package/dist/debug-ui/face-warp-3d/index.d.ts +6 -0
- package/dist/debug-ui/hand-joints-2d/index.d.ts +6 -0
- package/dist/debug-ui/hand-tracking-2d/index.d.ts +6 -0
- package/dist/debug-ui/hand-tracking-2d-controller/index.d.ts +6 -0
- package/dist/debug-ui/hand-tracking-3d/index.d.ts +6 -0
- package/dist/debug-ui/hierarchy-panel/index.d.ts +29 -0
- package/dist/debug-ui/index.d.ts +46 -0
- package/dist/debug-ui/layer-panel/index.d.ts +18 -0
- package/dist/debug-ui/media-source/MediaSourceSwitcher.d.ts +10 -0
- package/dist/debug-ui/media-source/index.d.ts +6 -0
- package/dist/debug-ui/media-source/media-preset.d.ts +9 -0
- package/dist/debug-ui/media-source/session.d.ts +12 -0
- package/dist/debug-ui/media-source.cjs +1 -0
- package/dist/debug-ui/media-source.js +9 -0
- package/dist/debug-ui/mesh-renderer-settings/index.d.ts +6 -0
- package/dist/debug-ui/object-inspector-panel/index.d.ts +25 -0
- package/dist/debug-ui/pin-to-mesh-settings/index.d.ts +10 -0
- package/dist/debug-ui/scene-editor/context.d.ts +38 -0
- package/dist/debug-ui/scene-editor/hierarchy-panel.d.ts +9 -0
- package/dist/debug-ui/scene-editor/index.d.ts +11 -0
- package/dist/debug-ui/scene-editor/inspector-panel.d.ts +7 -0
- package/dist/debug-ui/scene-editor/store-utils.d.ts +2 -0
- package/dist/debug-ui/scene-editor/viewport-toolbar.d.ts +4 -0
- package/dist/debug-ui/scene-editor/viewport.d.ts +21 -0
- package/dist/debug-ui/screen-glass-settings/index.d.ts +6 -0
- package/dist/debug-ui/screen-gradient-settings/GradientStopsEditor.d.ts +5 -0
- package/dist/debug-ui/screen-gradient-settings/index.d.ts +6 -0
- package/dist/debug-ui/screen-gradient-settings/styles.d.ts +3 -0
- package/dist/debug-ui/screen-image-settings/index.d.ts +9 -0
- package/dist/debug-ui/screen-shape-settings/index.d.ts +6 -0
- package/dist/debug-ui/screen-text-settings/NumberField.d.ts +9 -0
- package/dist/debug-ui/screen-text-settings/ScreenTextSettingsPanel.d.ts +3 -0
- package/dist/debug-ui/screen-text-settings/controls/NestedSection.d.ts +7 -0
- package/dist/debug-ui/screen-text-settings/controls/Section.d.ts +8 -0
- package/dist/debug-ui/screen-text-settings/controls/icons.d.ts +4 -0
- package/dist/debug-ui/screen-text-settings/index.d.ts +2 -0
- package/dist/debug-ui/screen-text-settings/sections/BackgroundSection.d.ts +8 -0
- package/dist/debug-ui/screen-text-settings/sections/ContentSection.d.ts +5 -0
- package/dist/debug-ui/screen-text-settings/sections/EffectsSection.d.ts +25 -0
- package/dist/debug-ui/screen-text-settings/sections/StyleSection.d.ts +5 -0
- package/dist/debug-ui/screen-text-settings/sections/TransformSection.d.ts +5 -0
- package/dist/debug-ui/screen-text-settings/sections/background/BackgroundFillControls.d.ts +2 -0
- package/dist/debug-ui/screen-text-settings/sections/background/BackgroundSizeControls.d.ts +2 -0
- package/dist/debug-ui/screen-text-settings/sections/background/BackgroundStrokeControls.d.ts +2 -0
- package/dist/debug-ui/screen-text-settings/sections/background/types.d.ts +7 -0
- package/dist/debug-ui/screen-text-settings/sections/effects/BendEffectSection.d.ts +4 -0
- package/dist/debug-ui/screen-text-settings/sections/effects/EffectChrome.d.ts +21 -0
- package/dist/debug-ui/screen-text-settings/sections/effects/GlowEffectSection.d.ts +4 -0
- package/dist/debug-ui/screen-text-settings/sections/effects/InnerShadowEffectSection.d.ts +4 -0
- package/dist/debug-ui/screen-text-settings/sections/effects/OutlineEffectSection.d.ts +4 -0
- package/dist/debug-ui/screen-text-settings/sections/effects/ShadowEffectSection.d.ts +4 -0
- package/dist/debug-ui/screen-text-settings/sections/effects/types.d.ts +14 -0
- package/dist/debug-ui/screen-text-settings/settings.d.ts +90 -0
- package/dist/debug-ui/screen-text-settings/styles.d.ts +26 -0
- package/dist/debug-ui/screen-text-settings/transform.d.ts +6 -0
- package/dist/debug-ui/screen-text-settings/types.d.ts +9 -0
- package/dist/debug-ui/settings-panel/index.d.ts +38 -0
- package/dist/debug-ui/shared/MaterialSection.d.ts +13 -0
- package/dist/debug-ui/shared/ScreenTransformSection.d.ts +32 -0
- package/dist/debug-ui/transform-3d-settings/index.d.ts +11 -0
- package/dist/debug-ui.cjs +10 -0
- package/dist/debug-ui.js +8861 -0
- package/dist/drawNormalizedCrop-B-7zU-Xw.cjs +1 -0
- package/dist/drawNormalizedCrop-CRdIDyl1.js +44 -0
- package/dist/entries/all.d.ts +1 -0
- package/dist/entries/core.d.ts +55 -4
- package/dist/entries/face-effects.d.ts +12 -8
- package/dist/entries/internal.d.ts +1 -1
- package/dist/entries/low-level.d.ts +21 -4
- package/dist/entries/scene-object.d.ts +10 -0
- package/dist/entries/tracking.d.ts +25 -2
- package/dist/face-action/index.d.ts +34 -0
- package/dist/face-attribute-expression/index.d.ts +10 -0
- package/dist/face-effects.cjs +1 -252
- package/dist/face-effects.js +1404 -2613
- package/dist/face-info/blendshapes.d.ts +3 -0
- package/dist/face-info/derive.d.ts +8 -0
- package/dist/face-info/drawFaceCrop.d.ts +10 -0
- package/dist/face-info/getFaceInfo.d.ts +8 -0
- package/dist/face-info/index.d.ts +8 -0
- package/dist/face-info/landmarks.d.ts +21 -0
- package/dist/face-info/types.d.ts +52 -0
- package/dist/getFaceInfo-CyPAKh3h.cjs +1 -0
- package/dist/getFaceInfo-hUKMLFcr.js +118 -0
- package/dist/hand/handJoints2d.d.ts +49 -0
- package/dist/hand/handTracking2d.d.ts +33 -0
- package/dist/hand/handTracking2dController.d.ts +65 -0
- package/dist/hand/handTracking3d.d.ts +52 -0
- package/dist/hooks/faceResults.d.ts +1 -1
- package/dist/hooks/useCalibrationFaceTracker.d.ts +1 -1
- package/dist/hooks/useFaceAction.d.ts +3 -0
- package/dist/hooks/useFaceAttributeExpression.d.ts +16 -0
- package/dist/hooks/useFaceDetection.d.ts +18 -0
- package/dist/hooks/useFaceInfo.d.ts +7 -0
- package/dist/hooks/useFaceInfos.d.ts +15 -0
- package/dist/hooks/useFaceResultReader.d.ts +10 -0
- package/dist/hooks/useFrameCapture.d.ts +18 -0
- package/dist/hooks/useMediaRecorder.d.ts +14 -2
- package/dist/hooks/useOwnedTexture.d.ts +6 -0
- package/dist/hooks/useTrackerContext.d.ts +2 -2
- package/dist/hooks/useXRSession/facade.d.ts +3 -0
- package/dist/hooks/useXRSession/registry.d.ts +9 -0
- package/dist/index-82aENaRq.cjs +1 -0
- package/dist/{index-BD-JWMjE.js → index-BgQAX8rs.js} +198 -134
- package/dist/index-CEc1CAmB.cjs +1 -0
- package/dist/index-CTHeBQOs.js +178 -0
- package/dist/index-D4bLzBr6.cjs +1 -0
- package/dist/index-DSpzjuqd.cjs +1 -0
- package/dist/index-Di70KWuY.js +2049 -0
- package/dist/index-DzEzkBIH.cjs +17 -0
- package/dist/{index-CYMj26Ej.js → index-JygePOwo.js} +565 -498
- package/dist/index-UC0Ux38E.js +111 -0
- package/dist/{internal-KOKJDxCG.js → internal-DuMPpcbp.js} +86 -80
- package/dist/internal-i2JkM85N.cjs +1 -0
- package/dist/internal.cjs +1 -1
- package/dist/internal.js +2 -2
- package/dist/low-level.cjs +1 -1
- package/dist/low-level.js +959 -632
- package/dist/main.cjs +1 -1
- package/dist/main.js +556 -455
- package/dist/material/MaterialFill.d.ts +20 -0
- package/dist/material/MeshMaterial.d.ts +14 -0
- package/dist/material/index.d.ts +2 -0
- package/dist/models/Body/index.d.ts +1 -1
- package/dist/models/Face/index.d.ts +1 -0
- package/dist/models/Face/rotation.d.ts +3 -0
- package/dist/models/Hand/HandTracking.d.ts +2 -0
- package/dist/render/layerStack.d.ts +29 -0
- package/dist/render/renderGroups.d.ts +47 -0
- package/dist/render/renderPasses.d.ts +18 -0
- package/dist/renderGroups-C9QJrAXu.js +152 -0
- package/dist/renderGroups-Dvm1J4lW.cjs +1 -0
- package/dist/renderLayers-lDtL0_43.cjs +1 -0
- package/dist/renderLayers-zrK2pv5O.js +13 -0
- package/dist/renderPasses-CT5iBwtg.cjs +21 -0
- package/dist/renderPasses-CjgG_6kQ.js +1500 -0
- package/dist/scene-object/index.d.ts +146 -0
- package/dist/scene-object/runtimeRegistry.d.ts +14 -0
- package/dist/scene-object.cjs +1 -0
- package/dist/scene-object.js +40 -0
- package/dist/screen-image/screenImagePresets.d.ts +13 -0
- package/dist/screen-image/screenImageSettings.d.ts +57 -0
- package/dist/screen-text/screenTextPresets.d.ts +6 -0
- package/dist/screen-text/screenTextSettings.d.ts +147 -0
- package/dist/screen2d/coordinates.d.ts +87 -0
- package/dist/screen2d/index.d.ts +7 -0
- package/dist/screen2d/material-runtime.d.ts +32 -0
- package/dist/screen2d/screenTransform.d.ts +47 -0
- package/dist/screen2d/smoothing.d.ts +5 -0
- package/dist/screen2d/texture.d.ts +10 -0
- package/dist/screen2d/transform.d.ts +25 -0
- package/dist/screen2d/types.d.ts +90 -0
- package/dist/{selectors-Bub0o3qy.cjs → selectors-2QvO5RYY.cjs} +1 -1
- package/dist/{selectors-BHO6TnoC.js → selectors-Dw3C-gSk.js} +5 -5
- package/dist/services/MetricsCollector/index.d.ts +7 -1
- package/dist/services/MetricsCollector/utils.d.ts +1 -1
- package/dist/session-BChR4TgK.cjs +31 -0
- package/dist/session-C1StwN0f.js +363 -0
- package/dist/texture/animatedTexture.d.ts +61 -0
- package/dist/texture/animationMath.d.ts +8 -0
- package/dist/texture/sourceResolver.d.ts +30 -0
- package/dist/tracking.cjs +1 -1
- package/dist/tracking.js +582 -298
- package/dist/types/face.d.ts +1 -13
- package/dist/types/hand-tracking.d.ts +8 -0
- package/dist/types/index.d.ts +0 -1
- package/dist/types/nodes.d.ts +4 -1
- package/dist/types/session.d.ts +2 -0
- package/dist/types/tracking.d.ts +8 -2
- package/dist/types/util-types.d.ts +1 -1
- package/dist/useFaceInfo-C-WfMlYp.cjs +1 -0
- package/dist/useFaceInfo-CwsHZedC.js +62 -0
- package/dist/useFaceResults-CkFc1egZ.js +19 -0
- package/dist/useFaceResults-VcFdOUFV.cjs +1 -0
- package/dist/utils/drawNormalizedCrop.d.ts +22 -0
- package/dist/utils/integrity.d.ts +4 -25
- package/dist/utils/landmarkBounds.d.ts +1 -1
- package/dist/utils/logger.d.ts +2 -2
- package/dist/x-Co8jPhP0.js +127 -0
- package/dist/x-KC8E4Gaj.cjs +41 -0
- package/docs/MIGRATION_GUIDE.md +589 -0
- package/docs/SDK_DOCUMENTATION.md +1155 -0
- package/docs/api/audio.mdx +36 -0
- package/docs/api/behavior-components.mdx +164 -0
- package/docs/api/capture-recording.mdx +103 -0
- package/docs/api/debug-ui-scene-editor.mdx +249 -0
- package/docs/api/face-actions.mdx +104 -0
- package/docs/api/face-attribute-expression.mdx +87 -0
- package/docs/api/face-binding-anchors.mdx +53 -0
- package/docs/api/face-effects.mdx +19 -0
- package/docs/api/face-info.mdx +112 -0
- package/docs/api/face-mesh.mdx +98 -0
- package/docs/api/face-painting.mdx +33 -0
- package/docs/api/face-retouching.mdx +73 -0
- package/docs/api/material-render-state.mdx +132 -0
- package/docs/api/runtime-3d.mdx +311 -0
- package/docs/api/scene-object-store.mdx +213 -0
- package/docs/api/screen-image.mdx +41 -0
- package/docs/api/screen-shape.mdx +64 -0
- package/docs/api/screen-space-coordinates.mdx +41 -0
- package/docs/api/screen-text.mdx +39 -0
- package/docs/api/texture-sources.mdx +55 -0
- package/docs/api/trackers.mdx +46 -0
- package/docs/docs.json +70 -0
- package/docs/examples/scene-object-recipes.mdx +194 -0
- package/docs/guides/harness-debug-ui.mdx +139 -0
- package/docs/inspector/hierarchy-panel.mdx +51 -0
- package/docs/inspector/object-inspector-panel.mdx +51 -0
- package/docs/introduction.mdx +121 -0
- package/docs/scene-objects/overview.mdx +127 -0
- package/docs/scene-objects/render-groups.mdx +77 -0
- package/docs/scene-objects/runtime-rendering.mdx +75 -0
- package/docs/texture-api-consumer.md +58 -0
- package/package.json +55 -7
- package/dist/components/FaceRetouch/retouchRegions.d.ts +0 -23
- package/dist/components/FaceRetouch/useFaceRetouchRegions.d.ts +0 -12
- package/dist/index-B5J4gzn2.cjs +0 -1
- package/dist/index-BVBVg96G.cjs +0 -1
- package/dist/index-DtwHElmG.js +0 -157
- package/dist/index-PtFmD6B8.cjs +0 -1
- package/dist/internal-DH5d1Xnq.cjs +0 -1
- package/dist/modules/XRClient/index.d.ts +0 -9
- package/dist/modules/index.d.ts +0 -1
- package/dist/services/ApiService.d.ts +0 -12
- package/dist/types/client.d.ts +0 -3
- package/dist/useFaceResults-cpsSmKKc.js +0 -81
- package/dist/useFaceResults-hVUJYSEY.cjs +0 -1
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Runtime 3D API"
|
|
3
|
+
description: "Core runtime components for serialized 3D scene objects: Transform3D, MeshRenderer, LightObject, LookAt, PinToMesh, VideoBackground, and SceneObjectRenderer."
|
|
4
|
+
sidebarTitle: "Runtime 3D"
|
|
5
|
+
icon: "cube"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Import runtime components from `@vincentt-xr/sdk`.
|
|
9
|
+
|
|
10
|
+
```tsx
|
|
11
|
+
import {
|
|
12
|
+
DEFAULT_MESH_RENDERER,
|
|
13
|
+
DEFAULT_MESH_RENDERER_RENDER_STATE,
|
|
14
|
+
LightObject,
|
|
15
|
+
LookAt,
|
|
16
|
+
MeshRenderer,
|
|
17
|
+
PinToMesh,
|
|
18
|
+
SceneObjectRenderer,
|
|
19
|
+
Transform3D,
|
|
20
|
+
VideoBackground,
|
|
21
|
+
} from "@vincentt-xr/sdk";
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
`DEFAULT_MESH_RENDERER` and `DEFAULT_MESH_RENDERER_RENDER_STATE` are exported
|
|
25
|
+
for serialized scene construction and editor defaults.
|
|
26
|
+
|
|
27
|
+
## `Transform3D`
|
|
28
|
+
|
|
29
|
+
Applies authored 3D transform state to its children.
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
type Transform3DSettings = {
|
|
33
|
+
enabled: boolean;
|
|
34
|
+
visible: boolean;
|
|
35
|
+
position: { x: number; y: number; z: number };
|
|
36
|
+
rotation: { x: number; y: number; z: number }; // degrees
|
|
37
|
+
scale: { x: number; y: number; z: number };
|
|
38
|
+
showTransformControls?: boolean;
|
|
39
|
+
transformControlMode?: "translate" | "rotate" | "scale";
|
|
40
|
+
transformControlSpace?: "local" | "world";
|
|
41
|
+
};
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
```tsx
|
|
45
|
+
<Transform3D value={transformSettings} onChange={setTransformSettings}>
|
|
46
|
+
<MeshRenderer value={meshRendererSettings} />
|
|
47
|
+
</Transform3D>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## `MeshRenderer`
|
|
51
|
+
|
|
52
|
+
Renders a primitive mesh or GLTF/GLB asset.
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
type MeshRendererSettings = {
|
|
56
|
+
enabled: boolean;
|
|
57
|
+
visible: boolean;
|
|
58
|
+
mesh: "cube" | "sphere" | "plane";
|
|
59
|
+
assetUrl?: string;
|
|
60
|
+
assetNodeName?: string;
|
|
61
|
+
material: {
|
|
62
|
+
type: "standard" | "basic";
|
|
63
|
+
color: string;
|
|
64
|
+
opacity: number;
|
|
65
|
+
wireframe: boolean;
|
|
66
|
+
roughness: number;
|
|
67
|
+
metalness: number;
|
|
68
|
+
renderState?: Partial<MeshRendererRenderState>;
|
|
69
|
+
};
|
|
70
|
+
shadowMode: "off" | "cast" | "receive" | "castReceive";
|
|
71
|
+
};
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
```tsx
|
|
75
|
+
<MeshRenderer
|
|
76
|
+
value={{
|
|
77
|
+
...DEFAULT_MESH_RENDERER,
|
|
78
|
+
mesh: "plane",
|
|
79
|
+
material: {
|
|
80
|
+
...DEFAULT_MESH_RENDERER.material,
|
|
81
|
+
color: "#1b2733",
|
|
82
|
+
renderState: {
|
|
83
|
+
depthTest: true,
|
|
84
|
+
depthWrite: true,
|
|
85
|
+
cullMode: "off",
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
shadowMode: "receive",
|
|
89
|
+
}}
|
|
90
|
+
/>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### `MeshRendererRenderState`
|
|
94
|
+
|
|
95
|
+
Render-state fields map to Three.js material or scoped WebGL draw state.
|
|
96
|
+
|
|
97
|
+
```ts
|
|
98
|
+
type MeshRendererRenderState = {
|
|
99
|
+
depthTest: boolean;
|
|
100
|
+
depthWrite: boolean;
|
|
101
|
+
depthFunc:
|
|
102
|
+
| "never"
|
|
103
|
+
| "less"
|
|
104
|
+
| "equal"
|
|
105
|
+
| "lessEqual"
|
|
106
|
+
| "greater"
|
|
107
|
+
| "notEqual"
|
|
108
|
+
| "greaterEqual"
|
|
109
|
+
| "always";
|
|
110
|
+
colorWrite: boolean;
|
|
111
|
+
colorMask: { r: boolean; g: boolean; b: boolean; a: boolean };
|
|
112
|
+
cullMode: "back" | "front" | "off";
|
|
113
|
+
blendMode: "normal" | "additive" | "subtractive" | "multiply" | "none";
|
|
114
|
+
polygonOffset: {
|
|
115
|
+
enabled: boolean;
|
|
116
|
+
factor: number;
|
|
117
|
+
units: number;
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Defaults preserve standard Three.js behavior:
|
|
123
|
+
|
|
124
|
+
```ts
|
|
125
|
+
{
|
|
126
|
+
depthTest: true,
|
|
127
|
+
depthWrite: true,
|
|
128
|
+
depthFunc: "lessEqual",
|
|
129
|
+
colorWrite: true,
|
|
130
|
+
colorMask: { r: true, g: true, b: true, a: true },
|
|
131
|
+
cullMode: "back",
|
|
132
|
+
blendMode: "normal",
|
|
133
|
+
polygonOffset: { enabled: false, factor: 0, units: 0 },
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Notes:
|
|
138
|
+
|
|
139
|
+
- `wireframe` belongs to material state, not geometry state.
|
|
140
|
+
- `colorMask` is per-channel RGBA write control. It is applied around each mesh
|
|
141
|
+
draw and restored after render.
|
|
142
|
+
- GLTF materials are cloned before SDK material overrides are applied.
|
|
143
|
+
- `instanceCount` is not material state; it belongs to a future instanced-mesh
|
|
144
|
+
API.
|
|
145
|
+
|
|
146
|
+
## `VideoBackground`
|
|
147
|
+
|
|
148
|
+
Renders the camera feed as a flat background. It intentionally does not expose
|
|
149
|
+
depth-test/depth-write props.
|
|
150
|
+
|
|
151
|
+
```tsx
|
|
152
|
+
<VideoBackground
|
|
153
|
+
segmentationMask={maskTexture}
|
|
154
|
+
segmentation="portrait"
|
|
155
|
+
customBackground="#6366f1"
|
|
156
|
+
renderOrder={-999}
|
|
157
|
+
/>
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Use the debug-ui `XRSceneViewport` when the camera feed should behave as a real
|
|
161
|
+
3D plane in an editor. That viewport owns a separate depth-writing
|
|
162
|
+
camera-texture plane without changing `VideoBackground` semantics.
|
|
163
|
+
|
|
164
|
+
## `LightObject`
|
|
165
|
+
|
|
166
|
+
Renders a light from serialized settings plus a `Transform3D` position/rotation.
|
|
167
|
+
|
|
168
|
+
```ts
|
|
169
|
+
type LightSettings = {
|
|
170
|
+
enabled: boolean;
|
|
171
|
+
type: "ambient" | "directional" | "point" | "spot";
|
|
172
|
+
color: string;
|
|
173
|
+
intensity: number;
|
|
174
|
+
castShadow: boolean;
|
|
175
|
+
distance: number;
|
|
176
|
+
angle: number;
|
|
177
|
+
penumbra: number;
|
|
178
|
+
decay: number;
|
|
179
|
+
showHelper: boolean;
|
|
180
|
+
};
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Default `showHelper` is `false`; editor pages can enable it explicitly.
|
|
184
|
+
|
|
185
|
+
## `LookAt`
|
|
186
|
+
|
|
187
|
+
Partial-stage behavior component. Rotates its child toward a target object.
|
|
188
|
+
|
|
189
|
+
```ts
|
|
190
|
+
type LookAtSettings = {
|
|
191
|
+
enabled: boolean;
|
|
192
|
+
targetObjectId: string | null;
|
|
193
|
+
mode: "point" | "direction";
|
|
194
|
+
inheritChildren: boolean;
|
|
195
|
+
offsetRotation: { x: number; y: number; z: number };
|
|
196
|
+
};
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
```tsx
|
|
200
|
+
<LookAt target={targetObject} settings={lookAtSettings}>
|
|
201
|
+
<MeshRenderer value={meshRendererSettings} />
|
|
202
|
+
</LookAt>
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
In `SceneObjectRenderer`, nested child objects do not inherit the parent's
|
|
206
|
+
LookAt rotation by default. Set `inheritChildren: true` when children should
|
|
207
|
+
rigidly follow the parent's look-at facing.
|
|
208
|
+
|
|
209
|
+
## `PinToMesh`
|
|
210
|
+
|
|
211
|
+
Partial-stage behavior component. Pins a runtime wrapper to a target mesh
|
|
212
|
+
surface.
|
|
213
|
+
|
|
214
|
+
```ts
|
|
215
|
+
type PinToMeshSettings = {
|
|
216
|
+
enabled: boolean;
|
|
217
|
+
targetObjectId: string | null;
|
|
218
|
+
orientation: "none" | "position" | "positionAndDirection";
|
|
219
|
+
uv: { x: number; y: number };
|
|
220
|
+
vertexNormal: boolean;
|
|
221
|
+
offsetSpace: "local" | "world";
|
|
222
|
+
offsetPosition: { x: number; y: number; z: number };
|
|
223
|
+
offsetRotation: { x: number; y: number; z: number };
|
|
224
|
+
};
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Default values:
|
|
228
|
+
|
|
229
|
+
```ts
|
|
230
|
+
{
|
|
231
|
+
enabled: false,
|
|
232
|
+
targetObjectId: null,
|
|
233
|
+
orientation: "none",
|
|
234
|
+
uv: { x: 0.5, y: 0.5 },
|
|
235
|
+
vertexNormal: false,
|
|
236
|
+
offsetSpace: "local",
|
|
237
|
+
offsetPosition: { x: 0, y: 0, z: 0 },
|
|
238
|
+
offsetRotation: { x: 0, y: 0, z: 0 },
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
Runtime behavior:
|
|
243
|
+
|
|
244
|
+
- Disabled PinToMesh resets its wrapper to local position `0,0,0` and identity
|
|
245
|
+
rotation.
|
|
246
|
+
- Missing target also resets the wrapper.
|
|
247
|
+
- `Transform3D` remains the authored transform source of truth.
|
|
248
|
+
- `orientation: "positionAndDirection"` aligns to the target surface normal.
|
|
249
|
+
- `offsetRotation` is reapplied from a clean base each frame; it must not
|
|
250
|
+
compound.
|
|
251
|
+
|
|
252
|
+
```tsx
|
|
253
|
+
<PinToMesh target={targetObject} settings={pinToMeshSettings}>
|
|
254
|
+
<Transform3D value={transformSettings}>
|
|
255
|
+
<MeshRenderer value={meshRendererSettings} />
|
|
256
|
+
</Transform3D>
|
|
257
|
+
</PinToMesh>
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## `SceneObjectRenderer`
|
|
261
|
+
|
|
262
|
+
Renders serialized scene-object data through runtime components.
|
|
263
|
+
|
|
264
|
+
```ts
|
|
265
|
+
type SceneObjectRendererProps = {
|
|
266
|
+
objectId: string;
|
|
267
|
+
store: SceneObjectStore;
|
|
268
|
+
editorMode?: boolean;
|
|
269
|
+
renderOrder?: number;
|
|
270
|
+
renderLayer?: number;
|
|
271
|
+
onComponentChange?: (component: SceneComponent) => void;
|
|
272
|
+
fallback?: (message: string) => ReactNode;
|
|
273
|
+
};
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
Supported combinations:
|
|
277
|
+
|
|
278
|
+
| Components | Runtime result |
|
|
279
|
+
| ------------------------------------------ | ------------------------------- |
|
|
280
|
+
| `Transform` | invisible 3D null/container |
|
|
281
|
+
| `Transform` + `MeshRenderer` | 3D object |
|
|
282
|
+
| `Transform` + `MeshRenderer` + `LookAt` | 3D object with look-at behavior |
|
|
283
|
+
| `Transform` + `MeshRenderer` + `PinToMesh` | 3D object with pin behavior |
|
|
284
|
+
| `Transform` + `Light` | light object |
|
|
285
|
+
| `ScreenTransform` | invisible 2D null/container |
|
|
286
|
+
| `ScreenTransform` + `ScreenImage` | screen image |
|
|
287
|
+
| `ScreenTransform` + `ScreenText` | screen text |
|
|
288
|
+
|
|
289
|
+
Nested scene objects are resolved from `SceneObjectStore` data. Root objects
|
|
290
|
+
come from `createRenderPlan`; children are rendered recursively inside their
|
|
291
|
+
parent runtime object, so child transforms inherit parent transforms.
|
|
292
|
+
|
|
293
|
+
## `ScreenImage` architecture and ownership
|
|
294
|
+
|
|
295
|
+
`ScreenImage` is a thin screen-space orchestrator. Its implementation is split
|
|
296
|
+
by responsibility:
|
|
297
|
+
|
|
298
|
+
- `components/ScreenImageBody.tsx` owns the cloned UV texture and generated
|
|
299
|
+
matcap, selects unlit/PBR/matcap/advanced-blend materials, and renders the
|
|
300
|
+
core mesh.
|
|
301
|
+
- `components/ScreenImageFrame.tsx` resolves anchor-based layout.
|
|
302
|
+
- `components/ScreenImageTransformFrame.tsx` owns editor drag listeners,
|
|
303
|
+
transform math, and guide rendering.
|
|
304
|
+
- `materials/` contains GLSL blend materials and procedural matcap generation.
|
|
305
|
+
- `source.ts`, `fit.ts`, `types.ts`, and `utils/` contain reusable pure models,
|
|
306
|
+
source resolution, fitting, defaults, and mapping helpers.
|
|
307
|
+
|
|
308
|
+
Consumer-provided textures remain consumer-owned and are never disposed by
|
|
309
|
+
`ScreenImage`. Internally cloned UV textures and generated matcaps are disposed
|
|
310
|
+
on replacement or unmount. Dynamic video/canvas textures keep their per-frame
|
|
311
|
+
update behavior.
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Scene Object Store API"
|
|
3
|
+
description: "Definitions and helpers for serialized scene data, components, defaults, and immutable store updates."
|
|
4
|
+
sidebarTitle: "Scene Object Store"
|
|
5
|
+
icon: "database"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Import scene-object APIs from `@vincentt-xr/sdk/scene-object`.
|
|
9
|
+
|
|
10
|
+
Internal source layout: scene-object store helpers stay in `lib/scene-object/`;
|
|
11
|
+
render-group helpers live in `lib/render/`; serialized `ScreenImage` and
|
|
12
|
+
`ScreenText` settings live in `lib/screen-image/` and `lib/screen-text/`. Public
|
|
13
|
+
imports stay unchanged.
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import {
|
|
17
|
+
createRenderPlan,
|
|
18
|
+
createDefaultComponent,
|
|
19
|
+
createSceneObject,
|
|
20
|
+
migrateToRenderGroups,
|
|
21
|
+
moveObjectToGroup,
|
|
22
|
+
replaceSceneComponent,
|
|
23
|
+
replaceSceneObject,
|
|
24
|
+
reorderObjectWithinGroup,
|
|
25
|
+
reorderRenderGroup,
|
|
26
|
+
setSceneObjectVisible,
|
|
27
|
+
validateGroupCompatibility,
|
|
28
|
+
type RenderGroupSceneObjectStore,
|
|
29
|
+
type SceneObjectStore,
|
|
30
|
+
} from "@vincentt-xr/sdk/scene-object";
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Core types
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
type SceneObject = {
|
|
37
|
+
id: string;
|
|
38
|
+
name: string;
|
|
39
|
+
enabled: boolean;
|
|
40
|
+
parentObjectId?: string | null;
|
|
41
|
+
childObjectIds?: string[];
|
|
42
|
+
renderGroupId?: string;
|
|
43
|
+
componentIds: string[];
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
type SceneComponent<TType extends SceneComponentType = SceneComponentType> = {
|
|
47
|
+
id: string;
|
|
48
|
+
objectId: string;
|
|
49
|
+
type: TType;
|
|
50
|
+
enabled: boolean;
|
|
51
|
+
settings: ComponentRegistry[TType];
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
type SceneObjectStore = {
|
|
55
|
+
objects: Record<string, SceneObject>;
|
|
56
|
+
components: Record<string, SceneComponent>;
|
|
57
|
+
};
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## `ComponentRegistry`
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
type ComponentRegistry = {
|
|
64
|
+
Transform: Transform3DSettings;
|
|
65
|
+
ScreenTransform: ScreenTransform2DSettings;
|
|
66
|
+
ScreenImage: ScreenImageSettings;
|
|
67
|
+
ScreenText: ScreenTextSettings;
|
|
68
|
+
MeshRenderer: MeshRendererSettings;
|
|
69
|
+
FaceMeshRenderer: FaceMeshRendererSettings;
|
|
70
|
+
Material: MaterialSettings;
|
|
71
|
+
Texture: TextureSettings;
|
|
72
|
+
Light: LightSettings;
|
|
73
|
+
LookAt: LookAtSettings;
|
|
74
|
+
PinToMesh: PinToMeshSettings;
|
|
75
|
+
};
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Create an object
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
const object = createSceneObject({
|
|
82
|
+
id: "mic",
|
|
83
|
+
name: "Mic",
|
|
84
|
+
renderGroupId: "scene3d",
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
const transform = createDefaultComponent("Transform", object.id);
|
|
88
|
+
const meshRenderer = createDefaultComponent("MeshRenderer", object.id);
|
|
89
|
+
|
|
90
|
+
const store: SceneObjectStore = {
|
|
91
|
+
objects: {
|
|
92
|
+
[object.id]: {
|
|
93
|
+
...object,
|
|
94
|
+
componentIds: [transform.id, meshRenderer.id],
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
components: {
|
|
98
|
+
[transform.id]: transform,
|
|
99
|
+
[meshRenderer.id]: meshRenderer,
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## Default components
|
|
105
|
+
|
|
106
|
+
```ts
|
|
107
|
+
createDefaultComponent("Transform", objectId);
|
|
108
|
+
createDefaultComponent("MeshRenderer", objectId);
|
|
109
|
+
createDefaultComponent("FaceMeshRenderer", objectId);
|
|
110
|
+
createDefaultComponent("Light", objectId);
|
|
111
|
+
createDefaultComponent("LookAt", objectId);
|
|
112
|
+
createDefaultComponent("PinToMesh", objectId);
|
|
113
|
+
createDefaultComponent("ScreenTransform", objectId);
|
|
114
|
+
createDefaultComponent("ScreenImage", objectId);
|
|
115
|
+
createDefaultComponent("ScreenText", objectId);
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Defaults are cloned before return, so callers can safely mutate the returned
|
|
119
|
+
settings while constructing serialized scene data.
|
|
120
|
+
|
|
121
|
+
Null/container objects are component combinations, not separate runtime classes:
|
|
122
|
+
|
|
123
|
+
```ts
|
|
124
|
+
// 3D null/container
|
|
125
|
+
const transform = createDefaultComponent("Transform", object.id);
|
|
126
|
+
|
|
127
|
+
// 2D null/container
|
|
128
|
+
const screenTransform = createDefaultComponent("ScreenTransform", object.id);
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
They render no visible mesh/text/image by themselves, but they can parent child
|
|
132
|
+
objects and expose their transform in the debug inspector.
|
|
133
|
+
|
|
134
|
+
## Immutable updates
|
|
135
|
+
|
|
136
|
+
Use these helpers when wiring inspectors or editor panels.
|
|
137
|
+
|
|
138
|
+
```ts
|
|
139
|
+
setStore((current) => replaceSceneComponent(current, nextComponent));
|
|
140
|
+
setStore((current) => replaceSceneObject(current, nextObject));
|
|
141
|
+
setStore((current) => setSceneObjectVisible(current, objectId, false));
|
|
142
|
+
setStore((current) => setSceneObjectParent(current, "child", "parent"));
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Rules:
|
|
146
|
+
|
|
147
|
+
- component edits flow through `replaceSceneComponent`
|
|
148
|
+
- object name/enabled/render-group edits flow through `replaceSceneObject`
|
|
149
|
+
- hierarchy visibility edits flow through `setSceneObjectVisible`
|
|
150
|
+
- hierarchy parent edits flow through `setSceneObjectParent`
|
|
151
|
+
- editor panels should not keep separate transform/material/light/pin state
|
|
152
|
+
|
|
153
|
+
## Nested scene objects
|
|
154
|
+
|
|
155
|
+
3D and 2D scene objects can be nested with `parentObjectId` and
|
|
156
|
+
`childObjectIds`. A child transform is local to its parent transform: the child
|
|
157
|
+
can still move freely, and moving/rotating/scaling the parent affects all
|
|
158
|
+
descendants. Parenting does not rewrite the child's Transform component; the
|
|
159
|
+
existing Transform values become the child's local offset from the parent. A
|
|
160
|
+
child with position `{ x: 0, y: 0, z: 0 }` sits at the parent origin.
|
|
161
|
+
|
|
162
|
+
```ts
|
|
163
|
+
const next = setSceneObjectParent(store, "mic", "emoji");
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
`setSceneObjectParent` updates both sides of the relationship, preserves
|
|
167
|
+
ordering through `childObjectIds`, rejects cycles, and does not preserve world
|
|
168
|
+
position by rewriting Transform values. `createRenderPlan` emits only root
|
|
169
|
+
objects; `SceneObjectRenderer` renders children inside their parent runtime
|
|
170
|
+
object so inherited transforms work.
|
|
171
|
+
|
|
172
|
+
Editor-style parent changes should use
|
|
173
|
+
`setSceneObjectParentPreserveWorldTransform`. That helper updates the hierarchy
|
|
174
|
+
and recalculates the child's local Transform so the object does not visually
|
|
175
|
+
jump at the moment it is nested or un-nested.
|
|
176
|
+
|
|
177
|
+
## Render-group store
|
|
178
|
+
|
|
179
|
+
Grouped scene editors use `RenderGroupSceneObjectStore`.
|
|
180
|
+
|
|
181
|
+
```ts
|
|
182
|
+
type RenderGroupSceneObjectStore = SceneObjectStore & {
|
|
183
|
+
renderGroups: Record<string, RenderGroup>;
|
|
184
|
+
renderGroupOrder: string[];
|
|
185
|
+
};
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Use `createRenderPlan(store)` to derive render entries for
|
|
189
|
+
`SceneObjectRenderer`.
|
|
190
|
+
|
|
191
|
+
```ts
|
|
192
|
+
const grouped: RenderGroupSceneObjectStore = migrateToRenderGroups(store);
|
|
193
|
+
const plan = createRenderPlan(grouped);
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Common render-group helpers:
|
|
197
|
+
|
|
198
|
+
```ts
|
|
199
|
+
reorderRenderGroup(grouped, "scene3d", 0);
|
|
200
|
+
reorderObjectWithinGroup(grouped, "scene3d", "mic", 1);
|
|
201
|
+
|
|
202
|
+
if (validateGroupCompatibility(grouped, "mic", "scene3d")) {
|
|
203
|
+
moveObjectToGroup(grouped, "mic", "scene3d", 0);
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
`createRenderPlan` returns entries with `objectId`, `renderOrder`, and
|
|
208
|
+
`renderLayer`. Feed those entries to `SceneObjectRenderer` and derive pass layers
|
|
209
|
+
from the plan:
|
|
210
|
+
|
|
211
|
+
```ts
|
|
212
|
+
const passLayers = Array.from(new Set(plan.map((entry) => entry.renderLayer)));
|
|
213
|
+
```
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Screen Image"
|
|
3
|
+
description: "Author screen-space images with shared transforms, fitting, materials, and editor settings."
|
|
4
|
+
sidebarTitle: "Screen Image"
|
|
5
|
+
icon: "image"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Use `ScreenImage` for logos, stickers, frames, badges, and photo placeholders.
|
|
9
|
+
It owns its screen transform; prefer `position`, `size`, and `rotation` for
|
|
10
|
+
normal authoring.
|
|
11
|
+
|
|
12
|
+
```tsx
|
|
13
|
+
import { ScreenImage, ScreenSpaceUI } from "@vincentt-xr/sdk";
|
|
14
|
+
|
|
15
|
+
<ScreenSpaceUI>
|
|
16
|
+
<ScreenImage
|
|
17
|
+
name="logo"
|
|
18
|
+
source={{ kind: "image", src: logoUrl }}
|
|
19
|
+
coordinateSpace="canvas"
|
|
20
|
+
canvasSize={{ width: 720, height: 1280 }}
|
|
21
|
+
position={[-180, 464]}
|
|
22
|
+
size={[216, 160]}
|
|
23
|
+
stretchMode="fit"
|
|
24
|
+
opacity={0.95}
|
|
25
|
+
/>
|
|
26
|
+
</ScreenSpaceUI>;
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Sources are `{ kind: "default" }`, `{ kind: "image", src }`, or an existing
|
|
30
|
+
`{ kind: "texture", texture }`. `fit` supports `stretch`, `contain`, and
|
|
31
|
+
`cover`. Canvas coordinates use center origin and positive Y upward.
|
|
32
|
+
|
|
33
|
+
The authored size is the bounding rectangle, not the image's natural size.
|
|
34
|
+
Fit changes content inside that rectangle and never changes the rigid
|
|
35
|
+
transform. Keep visibility, opacity, tint, flips, pivot, overlay, render order,
|
|
36
|
+
transparency, alpha test, position, size, and rotation in one source of truth.
|
|
37
|
+
|
|
38
|
+
For scene objects, combine `ScreenTransform` + `ScreenImage` and use
|
|
39
|
+
`mapScreenImageSettingsToProps`. Use `ScreenImageSettingsPanel` from
|
|
40
|
+
`@vincentt-xr/sdk/debug-ui`; wire `onScreenTransformChange` so drag editing
|
|
41
|
+
updates the same mounted object.
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Screen Shape"
|
|
3
|
+
description: "Verified screen-space vector shapes with solid, gradient, and glass fills."
|
|
4
|
+
sidebarTitle: "Screen Shape"
|
|
5
|
+
icon: "shapes"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
`ScreenShape` renders editable vector primitives in SDK design pixels. Use it
|
|
9
|
+
instead of generating raster assets for circles, ellipses, rectangles, rounded
|
|
10
|
+
rectangles, polygons, stars, and lines.
|
|
11
|
+
|
|
12
|
+
```tsx
|
|
13
|
+
import { ScreenShape, ScreenSpaceUI } from "@vincentt-xr/sdk";
|
|
14
|
+
|
|
15
|
+
<ScreenSpaceUI>
|
|
16
|
+
<ScreenShape
|
|
17
|
+
transform={{ position: { x: 0, y: 0 }, size: { width: 220, height: 220 } }}
|
|
18
|
+
settings={{
|
|
19
|
+
kind: "star",
|
|
20
|
+
fillMode: "gradient",
|
|
21
|
+
fillOpacity: 0.9,
|
|
22
|
+
gradient: {
|
|
23
|
+
type: "angular",
|
|
24
|
+
stops: [
|
|
25
|
+
{ offset: 0, color: "#fb7185" },
|
|
26
|
+
{ offset: 0.5, color: "#8b5cf6" },
|
|
27
|
+
{ offset: 1, color: "#38bdf8" },
|
|
28
|
+
],
|
|
29
|
+
},
|
|
30
|
+
strokeColor: "#ffffff",
|
|
31
|
+
strokeWidth: 3,
|
|
32
|
+
sides: 5,
|
|
33
|
+
innerRadiusRatio: 0.45,
|
|
34
|
+
}}
|
|
35
|
+
/>
|
|
36
|
+
</ScreenSpaceUI>;
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Settings
|
|
40
|
+
|
|
41
|
+
- `kind`: `circle`, `ellipse`, `rectangle`, `roundedRectangle`, `polygon`,
|
|
42
|
+
`star`, or `line`
|
|
43
|
+
- `fillMode`: `solid`, `gradient`, or `glass`
|
|
44
|
+
- `fillColor`, `fillOpacity`, `strokeColor`, `strokeOpacity`, `strokeWidth`
|
|
45
|
+
- `cornerRadius`, `sides`, `innerRadiusRatio`, and `dashed`
|
|
46
|
+
- normalized `lineStart` and `lineEnd` coordinates for lines
|
|
47
|
+
|
|
48
|
+
Regular circles, polygons, and stars preserve equal axes in non-square bounds.
|
|
49
|
+
Ellipses and rectangles fill their bounds.
|
|
50
|
+
|
|
51
|
+
## Gradient and glass
|
|
52
|
+
|
|
53
|
+
Gradients support `linear`, `radial`, and `angular` (conic) modes with 2–8
|
|
54
|
+
color stops. Configure `angle`, `center`, and `radius` as needed. The reusable
|
|
55
|
+
`ScreenGradientMaterial` and `normalizeScreenGradient` exports live in core.
|
|
56
|
+
|
|
57
|
+
Glass uses `tint`, `opacity`, `frost`, and `highlight`. It is a lightweight
|
|
58
|
+
translucent shader, not backdrop blur or refraction. `fillOpacity` multiplies
|
|
59
|
+
the glass opacity. The reusable `ScreenGlassMaterial` is also exported from
|
|
60
|
+
core.
|
|
61
|
+
|
|
62
|
+
For serialized scenes, pair `ScreenTransform` with `ScreenShape`. Use
|
|
63
|
+
`ScreenShapeSettingsPanel` from `@vincentt-xr/sdk/debug-ui` for live editing.
|
|
64
|
+
The verified example is `/screen-shapes`.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Screen-Space Coordinates"
|
|
3
|
+
description: "Convert between SDK design pixels, normalized points, media, DOM clients, rays, and world positions."
|
|
4
|
+
sidebarTitle: "Screen Coordinates"
|
|
5
|
+
icon: "ruler"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Import screen-coordinate helpers from `@vincentt-xr/sdk`. SDK screen pixels use
|
|
9
|
+
a `720x1280` design canvas by default, center origin, and positive Y upward.
|
|
10
|
+
They are not Three.js world units.
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
import {
|
|
14
|
+
clientToScreenPixels,
|
|
15
|
+
normalizedToScreenPixels,
|
|
16
|
+
screenPixelsToUnits,
|
|
17
|
+
screenPointToRay,
|
|
18
|
+
screenUnitsToPixels,
|
|
19
|
+
worldToScreenPixels,
|
|
20
|
+
} from "@vincentt-xr/sdk";
|
|
21
|
+
|
|
22
|
+
const units = screenPixelsToUnits(120, { parentSize });
|
|
23
|
+
const pixels = screenUnitsToPixels(units, { parentSize });
|
|
24
|
+
const label = worldToScreenPixels({ point: worldPoint, camera, viewportSize });
|
|
25
|
+
const ray = screenPointToRay({ point: tapPoint, camera, viewportSize });
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
- `clientToScreenPixels` / `screenPixelsToClient`: pointer events and DOM overlays
|
|
29
|
+
- `normalizedToScreenPixels` / `screenPixelsToNormalized`: top-left-origin normalized points
|
|
30
|
+
- `mediaToScreenPixels` / `screenPixelsToMedia`: cover/contain layout and mirroring
|
|
31
|
+
- `worldToScreenPixels`: labels and indicators over tracked 3D points
|
|
32
|
+
- `screenPointToRay`: hit testing and 3D placement from design pixels
|
|
33
|
+
- `smoothNumber`, `smoothVector2`, `smoothVector3`: frame-rate-independent tracked motion
|
|
34
|
+
|
|
35
|
+
Hide world projections whose `depth` is outside `[-1, 1]`. Reuse optional output
|
|
36
|
+
vectors inside frame loops. Use Three.js `localToWorld`, `worldToLocal`,
|
|
37
|
+
`project`, and `unproject` directly instead of adding SDK wrappers.
|
|
38
|
+
|
|
39
|
+
Use `mergeScreenTransform2D` to fill defaults and `resolveScreenTransform2D` to
|
|
40
|
+
resolve authored position, size, scale, rotation, and pivot. Do not copy the
|
|
41
|
+
default root size or reference-pixel constants into custom renderers.
|