@relu-interactives/spatial-ecs 0.5.2 → 0.8.0
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/dist/{System-V_mv07le.d.cts → System-8D-XBDKZ.d.cts} +734 -8
- package/dist/{System-V_mv07le.d.ts → System-DPMAW30g.d.ts} +734 -8
- package/dist/{XRHandPose-CU3vNFuS.d.ts → XRHandPose-G0Dl-F0w.d.ts} +93 -3
- package/dist/{XRHandPose-CQTLGxFC.d.cts → XRHandPose-VQMT1WXj.d.cts} +93 -3
- package/dist/animation/index.cjs +252 -0
- package/dist/animation/index.cjs.map +1 -0
- package/dist/animation/index.d.cts +100 -0
- package/dist/animation/index.d.ts +100 -0
- package/dist/animation/index.js +4 -0
- package/dist/animation/index.js.map +1 -0
- package/dist/chunk-CKTHDXPS.js +11 -0
- package/dist/chunk-CKTHDXPS.js.map +1 -0
- package/dist/chunk-G4XJ53LS.js +1237 -0
- package/dist/chunk-G4XJ53LS.js.map +1 -0
- package/dist/chunk-GSWC6LLD.js +241 -0
- package/dist/chunk-GSWC6LLD.js.map +1 -0
- package/dist/{chunk-DF5SSRN6.js → chunk-JIJQFW6P.js} +1216 -2920
- package/dist/chunk-JIJQFW6P.js.map +1 -0
- package/dist/{chunk-BUEKOSR5.js → chunk-NNDUOQ7O.js} +188 -14
- package/dist/chunk-NNDUOQ7O.js.map +1 -0
- package/dist/chunk-OHCNPPMX.js +334 -0
- package/dist/chunk-OHCNPPMX.js.map +1 -0
- package/dist/{chunk-RXBLOO5B.js → chunk-SGF73YTF.js} +105 -715
- package/dist/chunk-SGF73YTF.js.map +1 -0
- package/dist/chunk-U727NTWQ.js +2856 -0
- package/dist/chunk-U727NTWQ.js.map +1 -0
- package/dist/{chunk-OY7ZODZP.js → chunk-XE4OXN2W.js} +3 -9
- package/dist/chunk-XE4OXN2W.js.map +1 -0
- package/dist/{chunk-OWQSESTO.js → chunk-XU2DVWCP.js} +4 -3
- package/dist/chunk-XU2DVWCP.js.map +1 -0
- package/dist/components/index.cjs +183 -10
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.d.cts +5 -3
- package/dist/components/index.d.ts +5 -3
- package/dist/components/index.js +3 -2
- package/dist/docs/api/Behaviour/classes/Behaviour.md +366 -79
- package/dist/docs/api/Behaviour/index.md +7 -3
- package/dist/docs/api/Behaviour/type-aliases/UiInteractionEvent.md +35 -0
- package/dist/docs/api/Component/classes/Component.md +14 -1
- package/dist/docs/api/components/classes/AnimationComponent.md +26 -26
- package/dist/docs/api/components/classes/AudioComponent.md +19 -19
- package/dist/docs/api/components/classes/CameraComponent.md +14 -14
- package/dist/docs/api/components/classes/EntityType.md +4 -4
- package/dist/docs/api/components/classes/Environment.md +5 -4
- package/dist/docs/api/components/classes/ImageComponent.md +7 -7
- package/dist/docs/api/components/classes/ImageTarget.md +8 -8
- package/dist/docs/api/components/classes/ImageTargetAnchor.md +4 -4
- package/dist/docs/api/components/classes/InstanceSlotComponent.md +4 -4
- package/dist/docs/api/components/classes/InstancedMeshComponent.md +10 -10
- package/dist/docs/api/components/classes/LightComponent.md +6 -6
- package/dist/docs/api/components/classes/MaterialComponent.md +16 -16
- package/dist/docs/api/components/classes/MeshComponent.md +3 -3
- package/dist/docs/api/components/classes/MeshGeometryComponent.md +9 -9
- package/dist/docs/api/components/classes/ModelComponent.md +8 -5
- package/dist/docs/api/components/classes/Name.md +3 -3
- package/dist/docs/api/components/classes/Object3DRef.md +4 -4
- package/dist/docs/api/components/classes/ParentId.md +3 -3
- package/dist/docs/api/components/classes/PhysicsComponent.md +7 -6
- package/dist/docs/api/components/classes/Postprocessing.md +3 -3
- package/dist/docs/api/components/classes/PrefabInstance.md +5 -5
- package/dist/docs/api/components/classes/PrefabNode.md +3 -3
- package/dist/docs/api/components/classes/ScriptComponent.md +5 -5
- package/dist/docs/api/components/classes/ScriptObjectComponent.md +9 -9
- package/dist/docs/api/components/classes/Selectable.md +3 -3
- package/dist/docs/api/components/classes/SelectionTransformState.md +5 -5
- package/dist/docs/api/components/classes/SpriteComponent.md +7 -7
- package/dist/docs/api/components/classes/TransformComponent.md +12 -12
- package/dist/docs/api/components/classes/UIButtonComponent.md +63 -0
- package/dist/docs/api/components/classes/UIPanelComponent.md +62 -0
- package/dist/docs/api/components/classes/UISliderComponent.md +59 -0
- package/dist/docs/api/components/classes/UITextComponent.md +59 -0
- package/dist/docs/api/components/classes/UIToggleComponent.md +56 -0
- package/dist/docs/api/components/classes/VRTeleportAreaComponent.md +53 -0
- package/dist/docs/api/components/classes/VideoComponent.md +28 -28
- package/dist/docs/api/components/classes/XRAnchorComponent.md +64 -0
- package/dist/docs/api/components/classes/XREnvironmentComponent.md +64 -0
- package/dist/docs/api/components/classes/XRHandPoseComponent.md +50 -0
- package/dist/docs/api/components/classes/XRInteractableComponent.md +74 -0
- package/dist/docs/api/components/classes/XRInteractorComponent.md +57 -0
- package/dist/docs/api/components/classes/XRInteractorSideComponent.md +50 -0
- package/dist/docs/api/components/classes/XRRigComponent.md +68 -0
- package/dist/docs/api/components/functions/createAttachPoint.md +25 -0
- package/dist/docs/api/components/functions/createHandPoseEntry.md +25 -0
- package/dist/docs/api/components/functions/defaultMaterialValue.md +1 -1
- package/dist/docs/api/components/functions/handPoseDefinitionFor.md +33 -0
- package/dist/docs/api/components/functions/normalizeEnvironmentLighting.md +30 -0
- package/dist/docs/api/components/functions/normalizePhysicsState.md +1 -1
- package/dist/docs/api/components/functions/setModelLoadState.md +33 -0
- package/dist/docs/api/components/functions/setPhysicsLiveRef.md +3 -9
- package/dist/docs/api/components/index.md +61 -4
- package/dist/docs/api/components/type-aliases/AnimationComponentOptions.md +9 -9
- package/dist/docs/api/components/type-aliases/CameraComponentOptions.md +13 -13
- package/dist/docs/api/components/type-aliases/CameraProjection.md +1 -1
- package/dist/docs/api/components/type-aliases/CameraRuntimeType.md +5 -3
- package/dist/docs/api/components/type-aliases/ColliderShape.md +1 -1
- package/dist/docs/api/components/type-aliases/ColliderState.md +20 -20
- package/dist/docs/api/components/type-aliases/CubeMeshParameters.md +4 -4
- package/dist/docs/api/components/type-aliases/EditableMeshObjectKind.md +1 -1
- package/dist/docs/api/components/type-aliases/EnvironmentFogState.md +8 -8
- package/dist/docs/api/components/type-aliases/EnvironmentFogType.md +1 -1
- package/dist/docs/api/components/type-aliases/EnvironmentGradientEffect.md +1 -1
- package/dist/docs/api/components/type-aliases/EnvironmentLightingState.md +40 -0
- package/dist/docs/api/components/type-aliases/EnvironmentSkyboxImageProjection.md +22 -0
- package/dist/docs/api/components/type-aliases/EnvironmentSkyboxState.md +9 -7
- package/dist/docs/api/components/type-aliases/EnvironmentSkyboxType.md +1 -1
- package/dist/docs/api/components/type-aliases/EnvironmentState.md +7 -5
- package/dist/docs/api/components/type-aliases/EnvironmentToneMapping.md +16 -0
- package/dist/docs/api/components/type-aliases/ImageTargetAnchorOptions.md +3 -3
- package/dist/docs/api/components/type-aliases/ImageTargetReference.md +7 -7
- package/dist/docs/api/components/type-aliases/InstanceTransform.md +13 -13
- package/dist/docs/api/components/type-aliases/InstancedMeshKind.md +1 -1
- package/dist/docs/api/components/type-aliases/LightShadowState.md +37 -0
- package/dist/docs/api/components/type-aliases/LightValueState.md +13 -11
- package/dist/docs/api/components/type-aliases/MaterialTypeValue.md +1 -1
- package/dist/docs/api/components/type-aliases/MaterialValueState.md +28 -28
- package/dist/docs/api/components/type-aliases/MeshGeometryParameters.md +1 -1
- package/dist/docs/api/components/type-aliases/MeshGeometryParametersByKind.md +7 -7
- package/dist/docs/api/components/type-aliases/ModelLoadState.md +15 -0
- package/dist/docs/api/components/type-aliases/PhysicsState.md +3 -3
- package/dist/docs/api/components/type-aliases/PlaneMeshParameters.md +3 -3
- package/dist/docs/api/components/type-aliases/PostprocessingState.md +62 -62
- package/dist/docs/api/components/type-aliases/RadiusHeightMeshParameters.md +3 -3
- package/dist/docs/api/components/type-aliases/RadiusMeshParameters.md +2 -2
- package/dist/docs/api/components/type-aliases/RigidbodyState.md +17 -17
- package/dist/docs/api/components/type-aliases/RigidbodyType.md +1 -1
- package/dist/docs/api/components/type-aliases/ScriptEntry.md +8 -8
- package/dist/docs/api/components/type-aliases/ScriptObjectComponentInput.md +1 -1
- package/dist/docs/api/components/type-aliases/ScriptObjectRuntimeState.md +1 -1
- package/dist/docs/api/components/type-aliases/TextureFilteringValue.md +1 -1
- package/dist/docs/api/components/type-aliases/TransformData.md +4 -4
- package/dist/docs/api/components/type-aliases/TransformModeValue.md +1 -1
- package/dist/docs/api/components/type-aliases/TransformSpaceValue.md +1 -1
- package/dist/docs/api/components/type-aliases/UIButtonOptions.md +45 -0
- package/dist/docs/api/components/type-aliases/UIPanelOptions.md +39 -0
- package/dist/docs/api/components/type-aliases/UISliderOptions.md +39 -0
- package/dist/docs/api/components/type-aliases/UITextOptions.md +41 -0
- package/dist/docs/api/components/type-aliases/UIToggleOptions.md +35 -0
- package/dist/docs/api/components/type-aliases/UiFollowMode.md +15 -0
- package/dist/docs/api/components/type-aliases/UiTextAlign.md +13 -0
- package/dist/docs/api/components/type-aliases/UiTextVAlign.md +13 -0
- package/dist/docs/api/components/type-aliases/VRTeleportAreaOptions.md +29 -0
- package/dist/docs/api/components/type-aliases/Vec3.md +4 -4
- package/dist/docs/api/components/type-aliases/VrTeleportShape.md +15 -0
- package/dist/docs/api/components/type-aliases/XRAnchorOptions.md +23 -0
- package/dist/docs/api/components/type-aliases/XRHandPoseOptions.md +23 -0
- package/dist/docs/api/components/type-aliases/XRInteractableOptions.md +75 -0
- package/dist/docs/api/components/type-aliases/XRInteractorOptions.md +37 -0
- package/dist/docs/api/components/type-aliases/XRRigOptions.md +51 -0
- package/dist/docs/api/components/type-aliases/XrAttachPoint.md +53 -0
- package/dist/docs/api/components/type-aliases/XrDistanceGrabBehavior.md +19 -0
- package/dist/docs/api/components/type-aliases/XrEnvironmentKind.md +15 -0
- package/dist/docs/api/components/type-aliases/XrEnvironmentOrientation.md +15 -0
- package/dist/docs/api/components/type-aliases/XrEnvironmentPhysics.md +25 -0
- package/dist/docs/api/components/type-aliases/XrGrabGesture.md +19 -0
- package/dist/docs/api/components/type-aliases/XrGrabHands.md +20 -0
- package/dist/docs/api/components/type-aliases/XrGrabReach.md +20 -0
- package/dist/docs/api/components/type-aliases/XrHandPoseEntry.md +49 -0
- package/dist/docs/api/components/type-aliases/XrHandPreset.md +19 -0
- package/dist/docs/api/components/type-aliases/XrInteractorSide.md +15 -0
- package/dist/docs/api/components/type-aliases/XrInteractorType.md +13 -0
- package/dist/docs/api/components/type-aliases/XrLocomotionMode.md +15 -0
- package/dist/docs/api/components/type-aliases/XrTrackingOrigin.md +24 -0
- package/dist/docs/api/components/type-aliases/XrTwoHandRotation.md +15 -0
- package/dist/docs/api/components/variables/DEFAULT_COLLIDER_STATE.md +1 -1
- package/dist/docs/api/components/variables/DEFAULT_ENVIRONMENT_LIGHTING.md +15 -0
- package/dist/docs/api/components/variables/DEFAULT_ENVIRONMENT_STATE.md +1 -1
- package/dist/docs/api/components/variables/DEFAULT_INSTANCED_MESH_PARAMETERS.md +1 -1
- package/dist/docs/api/components/variables/DEFAULT_INSTANCE_TRANSFORM.md +1 -1
- package/dist/docs/api/components/variables/DEFAULT_MESH_GEOMETRY_PARAMETERS.md +1 -1
- package/dist/docs/api/components/variables/DEFAULT_PHYSICS_STATE.md +1 -1
- package/dist/docs/api/components/variables/DEFAULT_POSE_CURLS.md +13 -0
- package/dist/docs/api/components/variables/DEFAULT_POSE_DIRECTIONS.md +13 -0
- package/dist/docs/api/components/variables/DEFAULT_POSTPROCESSING_STATE.md +1 -1
- package/dist/docs/api/components/variables/DEFAULT_RIGIDBODY_STATE.md +1 -1
- package/dist/docs/api/components/variables/MODEL_NO_PATH_MESSAGE.md +15 -0
- package/dist/docs/api/index/classes/AnimationStateMachine.md +16 -16
- package/dist/docs/api/index/classes/AnimationStateManager.md +13 -13
- package/dist/docs/api/index/classes/AnimationSystem.md +3 -3
- package/dist/docs/api/index/classes/AudioSystem.md +4 -4
- package/dist/docs/api/index/classes/CameraSyncSystem.md +2 -2
- package/dist/docs/api/index/classes/EnvironmentSyncSystem.md +19 -4
- package/dist/docs/api/index/classes/HandPoseTracker.md +114 -0
- package/dist/docs/api/index/classes/InputSystem.md +33 -33
- package/dist/docs/api/index/classes/InstancedMeshSystem.md +2 -2
- package/dist/docs/api/index/classes/LightSyncSystem.md +2 -2
- package/dist/docs/api/index/classes/MaterialSyncSystem.md +3 -3
- package/dist/docs/api/index/classes/MeshGeometrySystem.md +2 -2
- package/dist/docs/api/index/classes/ObjectManagementSystem.md +14 -14
- package/dist/docs/api/index/classes/ObjectVisibilitySystem.md +2 -2
- package/dist/docs/api/index/classes/PhysicsSyncSystem.md +4 -4
- package/dist/docs/api/index/classes/PostprocessingSyncSystem.md +34 -10
- package/dist/docs/api/index/classes/RenderSystem.md +13 -4
- package/dist/docs/api/index/classes/ScriptBehaviourSystem.md +9 -5
- package/dist/docs/api/index/classes/ScriptObject.md +10 -10
- package/dist/docs/api/index/classes/ScriptObjectSystem.md +6 -6
- package/dist/docs/api/index/classes/TeleportAimGate.md +114 -0
- package/dist/docs/api/index/classes/ThrowVelocityTracker.md +89 -0
- package/dist/docs/api/index/classes/TransformSyncSystem.md +2 -2
- package/dist/docs/api/index/classes/UIInteractionSystem.md +60 -0
- package/dist/docs/api/index/classes/UIPanelSystem.md +79 -0
- package/dist/docs/api/index/classes/VRTeleportAreaSystem.md +49 -0
- package/dist/docs/api/index/classes/VideoSystem.md +8 -6
- package/dist/docs/api/index/classes/World.md +282 -100
- package/dist/docs/api/index/classes/XRAnchorSystem.md +90 -0
- package/dist/docs/api/index/classes/XRControllerVisualSystem.md +77 -0
- package/dist/docs/api/index/classes/XREnvironmentSystem.md +137 -0
- package/dist/docs/api/index/classes/XRHandPoseSystem.md +107 -0
- package/dist/docs/api/index/classes/XRHitTestSystem.md +93 -0
- package/dist/docs/api/index/classes/XRHoverVisualSystem.md +76 -0
- package/dist/docs/api/index/classes/XRInputSystem.md +189 -0
- package/dist/docs/api/index/classes/XRInteractionSystem.md +323 -0
- package/dist/docs/api/index/classes/XRLocomotionSystem.md +128 -0
- package/dist/docs/api/index/classes/XRSessionSystem.md +116 -0
- package/dist/docs/api/index/classes/XRTeleportVisualSystem.md +75 -0
- package/dist/docs/api/index/functions/angularVelocityFrom.md +33 -0
- package/dist/docs/api/index/functions/applyHandMaterial.md +26 -0
- package/dist/docs/api/index/functions/applyPrefabToSnapshotInstances.md +1 -1
- package/dist/docs/api/index/functions/arcGroundCrossing.md +30 -0
- package/dist/docs/api/index/functions/buildComponentValueMaps.md +1 -1
- package/dist/docs/api/index/functions/buildNodeKeyMapsFromSnapshot.md +1 -1
- package/dist/docs/api/index/functions/buildNodeMapsFromSnapshot.md +1 -1
- package/dist/docs/api/index/functions/canonicalizeComponentValue.md +1 -1
- package/dist/docs/api/index/functions/clearModelCache.md +1 -1
- package/dist/docs/api/index/functions/clearPrefabCache.md +1 -1
- package/dist/docs/api/index/functions/cloneHandPose.md +23 -0
- package/dist/docs/api/index/functions/collectDiffPaths.md +1 -1
- package/dist/docs/api/index/functions/collectDirectPrefabDependencies.md +1 -1
- package/dist/docs/api/index/functions/collectEntitySubtree.md +1 -1
- package/dist/docs/api/index/functions/collectSnapshotSubtreeIds.md +1 -1
- package/dist/docs/api/index/functions/computeFingerCurl.md +29 -0
- package/dist/docs/api/index/functions/computeHandShape.md +29 -0
- package/dist/docs/api/index/functions/computeInstanceOverrides.md +1 -1
- package/dist/docs/api/index/functions/computePalmPose.md +30 -0
- package/dist/docs/api/index/functions/computePalmWidth.md +25 -0
- package/dist/docs/api/index/functions/computePinch.md +29 -0
- package/dist/docs/api/index/functions/computeSpread.md +33 -0
- package/dist/docs/api/index/functions/createAnimationComponent.md +1 -1
- package/dist/docs/api/index/functions/createAudioComponent.md +1 -1
- package/dist/docs/api/index/functions/createCameraComponent.md +1 -1
- package/dist/docs/api/index/functions/createEntityTypeComponent.md +2 -2
- package/dist/docs/api/index/functions/createEnvironmentComponent.md +1 -1
- package/dist/docs/api/index/functions/createHandMaterial.md +30 -0
- package/dist/docs/api/index/functions/createImageComponent.md +1 -1
- package/dist/docs/api/index/functions/createImageTargetAnchorComponent.md +1 -1
- package/dist/docs/api/index/functions/createImageTargetComponent.md +2 -2
- package/dist/docs/api/index/functions/createInstanceSlotComponent.md +1 -1
- package/dist/docs/api/index/functions/createInstancedMeshComponent.md +1 -1
- package/dist/docs/api/index/functions/createLightComponent.md +2 -2
- package/dist/docs/api/index/functions/createMaterialComponent.md +2 -2
- package/dist/docs/api/index/functions/createMeshComponent.md +1 -1
- package/dist/docs/api/index/functions/createMeshGeometryComponent.md +1 -1
- package/dist/docs/api/index/functions/createModelComponent.md +1 -1
- package/dist/docs/api/index/functions/createNameComponent.md +1 -1
- package/dist/docs/api/index/functions/createObject3DRefComponent.md +1 -1
- package/dist/docs/api/index/functions/createParentIdComponent.md +1 -1
- package/dist/docs/api/index/functions/createPhysicsComponent.md +1 -1
- package/dist/docs/api/index/functions/createPostprocessingComponent.md +1 -1
- package/dist/docs/api/index/functions/createScriptComponent.md +1 -1
- package/dist/docs/api/index/functions/createScriptObjectComponent.md +1 -1
- package/dist/docs/api/index/functions/createSelectableComponent.md +1 -1
- package/dist/docs/api/index/functions/createSelectionTransformStateComponent.md +1 -1
- package/dist/docs/api/index/functions/createSpriteComponent.md +1 -1
- package/dist/docs/api/index/functions/createTransformComponent.md +1 -1
- package/dist/docs/api/index/functions/createUIButtonComponent.md +28 -0
- package/dist/docs/api/index/functions/createUIPanelComponent.md +28 -0
- package/dist/docs/api/index/functions/createUISliderComponent.md +28 -0
- package/dist/docs/api/index/functions/createUITextComponent.md +28 -0
- package/dist/docs/api/index/functions/createUIToggleComponent.md +28 -0
- package/dist/docs/api/index/functions/createVRTeleportAreaComponent.md +28 -0
- package/dist/docs/api/index/functions/createVideoComponent.md +1 -1
- package/dist/docs/api/index/functions/createXRAnchorComponent.md +28 -0
- package/dist/docs/api/index/functions/createXRHandPoseComponent.md +28 -0
- package/dist/docs/api/index/functions/createXRInteractableComponent.md +28 -0
- package/dist/docs/api/index/functions/createXRInteractorComponent.md +28 -0
- package/dist/docs/api/index/functions/createXRInteractorSideComponent.md +28 -0
- package/dist/docs/api/index/functions/createXRRigComponent.md +28 -0
- package/dist/docs/api/index/functions/decanonicalizeComponentValue.md +1 -1
- package/dist/docs/api/index/functions/despawnPrefab.md +1 -1
- package/dist/docs/api/index/functions/encodeOverride.md +1 -1
- package/dist/docs/api/index/functions/estimateHandScale.md +28 -0
- package/dist/docs/api/index/functions/findSnapshotRootEntityIds.md +1 -1
- package/dist/docs/api/index/functions/findTopLevelNestedRegions.md +1 -1
- package/dist/docs/api/index/functions/getHandPosePreset.md +31 -0
- package/dist/docs/api/index/functions/groupOverridePaths.md +1 -1
- package/dist/docs/api/index/functions/handPoseFromCurls.md +42 -0
- package/dist/docs/api/index/functions/hydrateWorldFromSnapshot.md +1 -1
- package/dist/docs/api/index/functions/hydrateWorldFromSnapshotDetailed.md +1 -1
- package/dist/docs/api/index/functions/indexSnapshotByEntity.md +1 -1
- package/dist/docs/api/index/functions/instantiateSubtree.md +1 -1
- package/dist/docs/api/index/functions/loadPrefab.md +1 -1
- package/dist/docs/api/index/functions/loadSharedGltf.md +1 -1
- package/dist/docs/api/index/functions/matchHandPose.md +34 -0
- package/dist/docs/api/index/functions/mergeComponentValue.md +1 -1
- package/dist/docs/api/index/functions/parseOverride.md +1 -1
- package/dist/docs/api/index/functions/parsePrefabAsset.md +1 -1
- package/dist/docs/api/index/functions/prefabFileVersionFor.md +1 -1
- package/dist/docs/api/index/functions/readXrCapabilities.md +30 -0
- package/dist/docs/api/index/functions/registerDefaultComponentFactories.md +1 -1
- package/dist/docs/api/index/functions/registerDefaultFactories.md +1 -1
- package/dist/docs/api/index/functions/remapSnapshotEntityIds.md +3 -3
- package/dist/docs/api/index/functions/resolveDracoDecoderPath.md +1 -1
- package/dist/docs/api/index/functions/restoreComponentState.md +1 -1
- package/dist/docs/api/index/functions/restorePostCreateComponents.md +1 -1
- package/dist/docs/api/index/functions/sampleTeleportArc.md +40 -0
- package/dist/docs/api/index/functions/serializeEntitySubtree.md +1 -1
- package/dist/docs/api/index/functions/setDracoDecoderPath.md +1 -1
- package/dist/docs/api/index/functions/setPrefabAssetUrlResolver.md +1 -1
- package/dist/docs/api/index/functions/spawnPrefab.md +1 -1
- package/dist/docs/api/index/index.md +116 -4
- package/dist/docs/api/index/interfaces/ChromaKeyOptions.md +20 -0
- package/dist/docs/api/index/interfaces/EcsSystem.md +3 -3
- package/dist/docs/api/index/interfaces/PostprocessingBuildContext.md +21 -0
- package/dist/docs/api/index/interfaces/PostprocessingPipeline.md +84 -0
- package/dist/docs/api/index/interfaces/RenderBackend.md +168 -0
- package/dist/docs/api/index/interfaces/StateMachine.md +13 -13
- package/dist/docs/api/index/type-aliases/AnimationStateCallbacks.md +4 -4
- package/dist/docs/api/index/type-aliases/ApplyPrefabToSnapshotResult.md +3 -3
- package/dist/docs/api/index/type-aliases/ComponentFactory.md +1 -1
- package/dist/docs/api/index/type-aliases/ComponentValueMaps.md +50 -26
- package/dist/docs/api/index/type-aliases/EcsComponentFactoryKind.md +14 -2
- package/dist/docs/api/index/type-aliases/EcsRenderer.md +17 -0
- package/dist/docs/api/index/type-aliases/EcsWorldComponentSnapshot.md +3 -3
- package/dist/docs/api/index/type-aliases/EcsWorldStateSnapshotLike.md +4 -4
- package/dist/docs/api/index/type-aliases/ExternalRefWarning.md +5 -5
- package/dist/docs/api/index/type-aliases/HandMaterialOptions.md +32 -0
- package/dist/docs/api/index/type-aliases/HandPoseTrackerOptions.md +27 -0
- package/dist/docs/api/index/type-aliases/HydrateOptions.md +3 -3
- package/dist/docs/api/index/type-aliases/HydrateWorldFromSnapshotResult.md +4 -4
- package/dist/docs/api/index/type-aliases/InstantiateSubtreeResult.md +3 -3
- package/dist/docs/api/index/type-aliases/KeyboardKey.md +1 -1
- package/dist/docs/api/index/type-aliases/ModuleLoader.md +1 -1
- package/dist/docs/api/index/type-aliases/MouseButton.md +1 -1
- package/dist/docs/api/index/type-aliases/NestedRegion.md +5 -5
- package/dist/docs/api/index/type-aliases/NodeKeyMaps.md +5 -5
- package/dist/docs/api/index/type-aliases/NodeMaps.md +4 -4
- package/dist/docs/api/index/type-aliases/PrefabAsset.md +5 -5
- package/dist/docs/api/index/type-aliases/RemapSnapshotOptions.md +2 -2
- package/dist/docs/api/index/type-aliases/RendererKind.md +15 -0
- package/dist/docs/api/index/type-aliases/ScriptBehaviourSystemOptions.md +23 -0
- package/dist/docs/api/index/type-aliases/ScriptErrorEvent.md +39 -0
- package/dist/docs/api/index/type-aliases/ScriptErrorListener.md +25 -0
- package/dist/docs/api/index/type-aliases/ScriptErrorPhase.md +28 -0
- package/dist/docs/api/index/type-aliases/ScriptErrorReport.md +31 -0
- package/dist/docs/api/index/type-aliases/ScriptErrorSource.md +15 -0
- package/dist/docs/api/index/type-aliases/SelectionContext.md +4 -4
- package/dist/docs/api/index/type-aliases/SerializeEntitySubtreeResult.md +4 -4
- package/dist/docs/api/index/type-aliases/SpawnPrefabOptions.md +5 -5
- package/dist/docs/api/index/type-aliases/SpawnPrefabSource.md +1 -1
- package/dist/docs/api/index/type-aliases/SubtreeSnapshot.md +3 -3
- package/dist/docs/api/index/type-aliases/UiCanvasLike.md +46 -0
- package/dist/docs/api/index/type-aliases/VelocitySample.md +23 -0
- package/dist/docs/api/index/type-aliases/XrCapabilities.md +41 -0
- package/dist/docs/api/index/type-aliases/XrFinger.md +13 -0
- package/dist/docs/api/index/type-aliases/XrFingerCurl.md +27 -0
- package/dist/docs/api/index/type-aliases/XrFingerTarget.md +31 -0
- package/dist/docs/api/index/type-aliases/XrHandJointName.md +40 -0
- package/dist/docs/api/index/type-aliases/XrHandJoints.md +18 -0
- package/dist/docs/api/index/type-aliases/XrHandPoseAxis.md +15 -0
- package/dist/docs/api/index/type-aliases/XrHandPoseContext.md +23 -0
- package/dist/docs/api/index/type-aliases/XrHandPoseDefinition.md +47 -0
- package/dist/docs/api/index/type-aliases/XrHandPoseDirection.md +21 -0
- package/dist/docs/api/index/type-aliases/XrHandPoseEvent.md +13 -0
- package/dist/docs/api/index/type-aliases/XrHandPoseEventDetail.md +27 -0
- package/dist/docs/api/index/type-aliases/XrHandPoseMatch.md +25 -0
- package/dist/docs/api/index/type-aliases/XrHandPoseOrientation.md +25 -0
- package/dist/docs/api/index/type-aliases/XrHandShape.md +46 -0
- package/dist/docs/api/index/type-aliases/XrHandedness.md +15 -0
- package/dist/docs/api/index/type-aliases/XrHitResult.md +25 -0
- package/dist/docs/api/index/type-aliases/XrInputKind.md +19 -0
- package/dist/docs/api/index/type-aliases/XrInputState.md +60 -0
- package/dist/docs/api/index/type-aliases/XrPalmPose.md +31 -0
- package/dist/docs/api/index/variables/ADDED_NODE_MARKER_COMPONENT.md +2 -2
- package/dist/docs/api/index/variables/ARC_GRAVITY.md +15 -0
- package/dist/docs/api/index/variables/ARC_MAX_TIME.md +15 -0
- package/dist/docs/api/index/variables/ARC_SPEED.md +15 -0
- package/dist/docs/api/index/variables/ARC_STEPS.md +15 -0
- package/dist/docs/api/index/variables/CURLED_COS.md +13 -0
- package/dist/docs/api/index/variables/DEFAULT_DIRECTION_TOLERANCE.md +15 -0
- package/dist/docs/api/index/variables/DEFAULT_ENTER_CONFIDENCE.md +13 -0
- package/dist/docs/api/index/variables/DEFAULT_EXIT_CONFIDENCE.md +13 -0
- package/dist/docs/api/index/variables/DEFAULT_LOST_GRACE_SECONDS.md +13 -0
- package/dist/docs/api/index/variables/DEFAULT_MIN_HOLD_SECONDS.md +13 -0
- package/dist/docs/api/index/variables/DEFAULT_SCRIPT_ERROR_RETRY_DELAY.md +17 -0
- package/dist/docs/api/index/variables/FALLBACK_HAND_SCALE.md +15 -0
- package/dist/docs/api/index/variables/HAND_POSE_PRESETS.md +19 -0
- package/dist/docs/api/index/variables/HAND_POSE_PRESET_IDS.md +15 -0
- package/dist/docs/api/index/variables/HYDRATABLE_ENTITY_KINDS.md +1 -1
- package/dist/docs/api/index/variables/KeyboardKeys.md +89 -89
- package/dist/docs/api/index/variables/MATCH_FALLOFF.md +15 -0
- package/dist/docs/api/index/variables/MAX_PLAUSIBLE_SPEED.md +25 -0
- package/dist/docs/api/index/variables/MAX_SAMPLE_AGE_SECONDS.md +18 -0
- package/dist/docs/api/index/variables/NODE_KEY_SEPARATOR.md +1 -1
- package/dist/docs/api/index/variables/NO_XR_CAPABILITIES.md +15 -0
- package/dist/docs/api/index/variables/OVERRIDE_DIFF_EXCLUDED_COMPONENTS.md +1 -1
- package/dist/docs/api/index/variables/OVERRIDE_ROOT_EXCLUDED_COMPONENTS.md +1 -1
- package/dist/docs/api/index/variables/PINCH_FINGERS.md +15 -0
- package/dist/docs/api/index/variables/PREFAB_FILE_VERSION.md +1 -1
- package/dist/docs/api/index/variables/PREFAB_FILE_VERSION_NESTED.md +1 -1
- package/dist/docs/api/index/variables/SCRIPT_OBJECT_ROOT_FLAG.md +1 -1
- package/dist/docs/api/index/variables/SHARED_MODEL_RESOURCE_FLAG.md +1 -1
- package/dist/docs/api/index/variables/STRAIGHT_COS.md +19 -0
- package/dist/docs/api/index/variables/VELOCITY_SAMPLES.md +15 -0
- package/dist/docs/api/index/variables/XR_FINGERS.md +13 -0
- package/dist/docs/api/index/variables/XR_HOVER_SHELL_FLAG.md +15 -0
- package/dist/docs/api/index/variables/webglBackend.md +16 -0
- package/dist/docs/api/typedoc-sidebar.json +1 -1
- package/dist/docs/api/types/type-aliases/AssetInput.md +3 -3
- package/dist/docs/api/types/type-aliases/CheckboxInput.md +3 -3
- package/dist/docs/api/types/type-aliases/ColorInput.md +1 -1
- package/dist/docs/api/types/type-aliases/ComponentInput.md +4 -4
- package/dist/docs/api/types/type-aliases/ComponentKind.md +1 -1
- package/dist/docs/api/types/type-aliases/DropdownInput.md +3 -3
- package/dist/docs/api/types/type-aliases/DropdownOption.md +3 -3
- package/dist/docs/api/types/type-aliases/EcsEntityEditorKind.md +1 -1
- package/dist/docs/api/types/type-aliases/EcsEntityKind.md +10 -2
- package/dist/docs/api/types/type-aliases/EntityId.md +1 -1
- package/dist/docs/api/types/type-aliases/EntityInput.md +3 -3
- package/dist/docs/api/types/type-aliases/FloatInput.md +1 -1
- package/dist/docs/api/types/type-aliases/IntersectionResult.md +3 -3
- package/dist/docs/api/types/type-aliases/ParentLookup.md +3 -3
- package/dist/docs/api/types/type-aliases/SelectionListener.md +1 -1
- package/dist/docs/api/types/type-aliases/SliderInput.md +5 -5
- package/dist/docs/api/types/type-aliases/TextInput.md +1 -1
- package/dist/docs/api/types/type-aliases/ToggleInput.md +1 -1
- package/dist/docs/api/types/type-aliases/Vec3.md +1 -1
- package/dist/docs/api/types/type-aliases/Vector2Input.md +3 -3
- package/dist/docs/api/types/type-aliases/Vector3Input.md +4 -4
- package/dist/docs/api/types/type-aliases/WorldEntityView.md +1 -1
- package/dist/docs/guide/audio-mixing-and-sound-banks.md +71 -0
- package/dist/docs/guide/authoring-a-behaviour.md +3 -3
- package/dist/docs/guide/authoring-a-script-object.md +12 -9
- package/dist/docs/guide/behaviour-data-binding/index.md +11 -11
- package/dist/docs/guide/behaviour-lifecycle.md +9 -0
- package/dist/docs/guide/bone-attachments-and-ik.md +128 -0
- package/dist/docs/guide/component-catalog.md +10 -2
- package/dist/docs/guide/components/light.md +42 -0
- package/dist/docs/guide/components/model.md +32 -3
- package/dist/docs/guide/concepts.md +2 -2
- package/dist/docs/guide/getting-started/creating-objects.md +2 -2
- package/dist/docs/guide/getting-started/editing-objects.md +2 -2
- package/dist/docs/guide/getting-started/editor/ai-agent.md +227 -0
- package/dist/docs/guide/getting-started/editor/hierarchy.md +2 -2
- package/dist/docs/guide/getting-started/editor/index.md +3 -2
- package/dist/docs/guide/getting-started/editor/inspector.md +2 -2
- package/dist/docs/guide/getting-started/editor/scene-inspector.md +3 -3
- package/dist/docs/guide/getting-started/editor/toolbar.md +11 -11
- package/dist/docs/guide/getting-started/editor/viewport.md +17 -9
- package/dist/docs/guide/getting-started/index.md +1 -1
- package/dist/docs/guide/getting-started/installation.md +1 -1
- package/dist/docs/guide/getting-started/preview-and-test.md +7 -7
- package/dist/docs/guide/getting-started/project-types/image-tracking.md +23 -11
- package/dist/docs/guide/getting-started/project-types/index.md +4 -4
- package/dist/docs/guide/getting-started/project-types/vr.md +270 -2
- package/dist/docs/guide/getting-started/projects.md +4 -5
- package/dist/docs/guide/getting-started/shortcuts.md +5 -4
- package/dist/docs/guide/multiplayer.md +92 -0
- package/dist/docs/guide/scene/environment.md +101 -4
- package/dist/docs/guide/scene/index.md +4 -4
- package/dist/docs/guide/scene/postprocessing.md +67 -5
- package/dist/docs/guide/spawning/area-light.md +2 -0
- package/dist/docs/guide/systems/environment-sync-system.md +11 -6
- package/dist/docs/guide/systems/light-sync-system.md +5 -3
- package/dist/docs/guide/systems/postprocessing-sync-system.md +16 -6
- package/dist/docs/guide/systems/render-system.md +7 -6
- package/dist/docs/guide/systems/script-behaviour-system.md +7 -5
- package/dist/docs/guide/systems/script-object-system.md +3 -1
- package/dist/docs/guide/systems/video-system.md +1 -1
- package/dist/docs/guide/webgpu-and-tsl.md +415 -0
- package/dist/docs/guide/world-api.md +52 -2
- package/dist/factories/index.cjs +770 -283
- package/dist/factories/index.cjs.map +1 -1
- package/dist/factories/index.d.cts +14 -3
- package/dist/factories/index.d.ts +14 -3
- package/dist/factories/index.js +7 -4
- package/dist/{index-D2Jt_JzH.d.ts → index-C61n65PE.d.ts} +135 -42
- package/dist/{index-DaG03vyN.d.cts → index-C70N4BYG.d.cts} +135 -42
- package/dist/{index-C3ik3sA1.d.ts → index-D9DjrUn3.d.cts} +25 -3
- package/dist/{index-Dlr-7-4m.d.cts → index-DppafVu4.d.ts} +25 -3
- package/dist/index.cjs +3642 -1263
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +113 -11
- package/dist/index.d.ts +113 -11
- package/dist/index.js +187 -12
- package/dist/index.js.map +1 -1
- package/dist/network/index.cjs +4896 -0
- package/dist/network/index.cjs.map +1 -0
- package/dist/network/index.d.cts +98 -0
- package/dist/network/index.d.ts +98 -0
- package/dist/network/index.js +493 -0
- package/dist/network/index.js.map +1 -0
- package/dist/systems/index.cjs +3958 -1762
- package/dist/systems/index.cjs.map +1 -1
- package/dist/systems/index.d.cts +4 -2
- package/dist/systems/index.d.ts +4 -2
- package/dist/systems/index.js +8 -4
- package/dist/types.d.cts +3 -1
- package/dist/types.d.ts +3 -1
- package/dist/webgpu/index.d.ts +113 -0
- package/dist/webgpu/index.js +302 -0
- package/dist/webgpu/index.js.map +1 -0
- package/dist/worldSnapshotUtils.d.cts +3 -1
- package/dist/worldSnapshotUtils.d.ts +3 -1
- package/dist/worldSnapshotUtils.js +3 -2
- package/package.json +19 -3
- package/dist/chunk-BUEKOSR5.js.map +0 -1
- package/dist/chunk-DF5SSRN6.js.map +0 -1
- package/dist/chunk-OWQSESTO.js.map +0 -1
- package/dist/chunk-OY7ZODZP.js.map +0 -1
- package/dist/chunk-RXBLOO5B.js.map +0 -1
- package/dist/chunk-WJD2VKEH.js +0 -315
- package/dist/chunk-WJD2VKEH.js.map +0 -1
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
import { __name } from './chunk-XE4OXN2W.js';
|
|
2
|
+
import * as THREE from 'three';
|
|
3
|
+
import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';
|
|
4
|
+
import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';
|
|
5
|
+
import { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js';
|
|
6
|
+
import { DotScreenPass } from 'three/examples/jsm/postprocessing/DotScreenPass.js';
|
|
7
|
+
import { GlitchPass } from 'three/examples/jsm/postprocessing/GlitchPass.js';
|
|
8
|
+
import { FilmPass } from 'three/examples/jsm/postprocessing/FilmPass.js';
|
|
9
|
+
import { BokehPass } from 'three/examples/jsm/postprocessing/BokehPass.js';
|
|
10
|
+
import { SSAOPass } from 'three/examples/jsm/postprocessing/SSAOPass.js';
|
|
11
|
+
import { ShaderPass } from 'three/examples/jsm/postprocessing/ShaderPass.js';
|
|
12
|
+
import { OutputPass } from 'three/examples/jsm/postprocessing/OutputPass.js';
|
|
13
|
+
import { SMAAPass } from 'three/examples/jsm/postprocessing/SMAAPass.js';
|
|
14
|
+
import { HueSaturationShader } from 'three/examples/jsm/shaders/HueSaturationShader.js';
|
|
15
|
+
import { RGBShiftShader } from 'three/examples/jsm/shaders/RGBShiftShader.js';
|
|
16
|
+
import { SepiaShader } from 'three/examples/jsm/shaders/SepiaShader.js';
|
|
17
|
+
import { VignetteShader } from 'three/examples/jsm/shaders/VignetteShader.js';
|
|
18
|
+
|
|
19
|
+
var PixelationShader = {
|
|
20
|
+
name: "PixelationShader",
|
|
21
|
+
uniforms: {
|
|
22
|
+
tDiffuse: { value: null },
|
|
23
|
+
resolution: { value: new THREE.Vector2(1, 1) },
|
|
24
|
+
pixelSize: { value: 6 }
|
|
25
|
+
},
|
|
26
|
+
vertexShader: (
|
|
27
|
+
/* glsl */
|
|
28
|
+
`
|
|
29
|
+
varying vec2 vUv;
|
|
30
|
+
void main() {
|
|
31
|
+
vUv = uv;
|
|
32
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
33
|
+
}
|
|
34
|
+
`
|
|
35
|
+
),
|
|
36
|
+
fragmentShader: (
|
|
37
|
+
/* glsl */
|
|
38
|
+
`
|
|
39
|
+
uniform sampler2D tDiffuse;
|
|
40
|
+
uniform vec2 resolution;
|
|
41
|
+
uniform float pixelSize;
|
|
42
|
+
varying vec2 vUv;
|
|
43
|
+
void main() {
|
|
44
|
+
vec2 block = max(pixelSize, 1.0) / resolution;
|
|
45
|
+
vec2 coord = block * (floor(vUv / block) + 0.5);
|
|
46
|
+
gl_FragColor = texture2D(tDiffuse, coord);
|
|
47
|
+
}
|
|
48
|
+
`
|
|
49
|
+
)
|
|
50
|
+
};
|
|
51
|
+
var _PixelationPass = class _PixelationPass extends ShaderPass {
|
|
52
|
+
constructor(granularity, getPixelRatio) {
|
|
53
|
+
super(PixelationShader);
|
|
54
|
+
this.granularity = Math.max(1, granularity);
|
|
55
|
+
this.getPixelRatio = getPixelRatio;
|
|
56
|
+
this.updatePixelSize();
|
|
57
|
+
}
|
|
58
|
+
updatePixelSize() {
|
|
59
|
+
const uniform = this.uniforms.pixelSize;
|
|
60
|
+
if (uniform) {
|
|
61
|
+
uniform.value = this.granularity * Math.max(1, this.getPixelRatio());
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
setSize(width, height) {
|
|
65
|
+
const resolution = this.uniforms.resolution;
|
|
66
|
+
if (resolution) {
|
|
67
|
+
resolution.value.set(Math.max(1, width), Math.max(1, height));
|
|
68
|
+
}
|
|
69
|
+
this.updatePixelSize();
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
__name(_PixelationPass, "PixelationPass");
|
|
73
|
+
var PixelationPass = _PixelationPass;
|
|
74
|
+
function createWebglPostprocessing({
|
|
75
|
+
renderer: rendererInput,
|
|
76
|
+
scene,
|
|
77
|
+
camera,
|
|
78
|
+
values
|
|
79
|
+
}) {
|
|
80
|
+
const renderer = rendererInput;
|
|
81
|
+
const composer = new EffectComposer(renderer);
|
|
82
|
+
composer.addPass(new RenderPass(scene, camera));
|
|
83
|
+
if (values.dof.enabled) {
|
|
84
|
+
composer.addPass(
|
|
85
|
+
new BokehPass(scene, camera, {
|
|
86
|
+
focus: values.dof.focusDistance,
|
|
87
|
+
aperture: Math.max(0, values.dof.focalLength),
|
|
88
|
+
maxblur: Math.max(0, values.dof.bokehScale)
|
|
89
|
+
})
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
if (values.bloom.enabled) {
|
|
93
|
+
const size = renderer.getSize(new THREE.Vector2());
|
|
94
|
+
composer.addPass(
|
|
95
|
+
new UnrealBloomPass(
|
|
96
|
+
new THREE.Vector2(size.width, size.height),
|
|
97
|
+
values.bloom.intensity,
|
|
98
|
+
values.bloom.radius,
|
|
99
|
+
values.bloom.threshold
|
|
100
|
+
)
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
if (values.vignette.enabled) {
|
|
104
|
+
const pass = new ShaderPass(VignetteShader);
|
|
105
|
+
const offset = pass.uniforms.offset;
|
|
106
|
+
const darkness = pass.uniforms.darkness;
|
|
107
|
+
if (offset) {
|
|
108
|
+
offset.value = values.vignette.offset;
|
|
109
|
+
}
|
|
110
|
+
if (darkness) {
|
|
111
|
+
darkness.value = values.vignette.darkness;
|
|
112
|
+
}
|
|
113
|
+
composer.addPass(pass);
|
|
114
|
+
}
|
|
115
|
+
if (values.hueSaturation.enabled) {
|
|
116
|
+
const pass = new ShaderPass(HueSaturationShader);
|
|
117
|
+
const hue = pass.uniforms.hue;
|
|
118
|
+
const saturation = pass.uniforms.saturation;
|
|
119
|
+
if (hue) {
|
|
120
|
+
hue.value = values.hueSaturation.hue;
|
|
121
|
+
}
|
|
122
|
+
if (saturation) {
|
|
123
|
+
saturation.value = values.hueSaturation.saturation;
|
|
124
|
+
}
|
|
125
|
+
composer.addPass(pass);
|
|
126
|
+
}
|
|
127
|
+
if (values.sepia.enabled) {
|
|
128
|
+
const pass = new ShaderPass(SepiaShader);
|
|
129
|
+
const amount = pass.uniforms.amount;
|
|
130
|
+
if (amount) {
|
|
131
|
+
amount.value = values.sepia.intensity;
|
|
132
|
+
}
|
|
133
|
+
composer.addPass(pass);
|
|
134
|
+
}
|
|
135
|
+
if (values.noise.enabled) {
|
|
136
|
+
composer.addPass(new FilmPass(values.noise.opacity));
|
|
137
|
+
}
|
|
138
|
+
if (values.dotScreen.enabled) {
|
|
139
|
+
composer.addPass(
|
|
140
|
+
new DotScreenPass(
|
|
141
|
+
new THREE.Vector2(0, 0),
|
|
142
|
+
values.dotScreen.angle ?? values.dotScreen.dotScreenAngle,
|
|
143
|
+
values.dotScreen.scale ?? values.dotScreen.dotScreenScale
|
|
144
|
+
)
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
if (values.ssao.enabled) {
|
|
148
|
+
const pass = new SSAOPass(scene, camera);
|
|
149
|
+
pass.kernelRadius = values.ssao.radius;
|
|
150
|
+
pass.minDistance = 1e-3;
|
|
151
|
+
pass.maxDistance = Math.max(0.01, values.ssao.intensity);
|
|
152
|
+
composer.addPass(pass);
|
|
153
|
+
}
|
|
154
|
+
if (values.glitch.enabled) {
|
|
155
|
+
const pass = new GlitchPass();
|
|
156
|
+
pass.enabled = true;
|
|
157
|
+
pass.goWild = Boolean(values.glitch.active);
|
|
158
|
+
composer.addPass(pass);
|
|
159
|
+
}
|
|
160
|
+
if (values.chromAberration.enabled) {
|
|
161
|
+
const pass = new ShaderPass(RGBShiftShader);
|
|
162
|
+
const { offsetX, offsetY } = values.chromAberration;
|
|
163
|
+
const amount = pass.uniforms.amount;
|
|
164
|
+
const angle = pass.uniforms.angle;
|
|
165
|
+
if (amount) {
|
|
166
|
+
amount.value = Math.hypot(offsetX, offsetY);
|
|
167
|
+
}
|
|
168
|
+
if (angle) {
|
|
169
|
+
angle.value = Math.atan2(offsetY, offsetX);
|
|
170
|
+
}
|
|
171
|
+
composer.addPass(pass);
|
|
172
|
+
}
|
|
173
|
+
if (values.pixelation.enabled) {
|
|
174
|
+
composer.addPass(
|
|
175
|
+
new PixelationPass(
|
|
176
|
+
values.pixelation.granularity,
|
|
177
|
+
() => typeof renderer.getPixelRatio === "function" ? renderer.getPixelRatio() : 1
|
|
178
|
+
)
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
if (values.smaa.enabled) {
|
|
182
|
+
composer.addPass(new SMAAPass());
|
|
183
|
+
}
|
|
184
|
+
composer.addPass(new OutputPass());
|
|
185
|
+
return composer;
|
|
186
|
+
}
|
|
187
|
+
__name(createWebglPostprocessing, "createWebglPostprocessing");
|
|
188
|
+
var CHROMA_KEY_FLAG = "ecsChromaKey";
|
|
189
|
+
function createWebglChromaKeyMaterial(texture, options) {
|
|
190
|
+
const material = new THREE.ShaderMaterial({
|
|
191
|
+
uniforms: {
|
|
192
|
+
tex: { value: texture },
|
|
193
|
+
keyColor: { value: new THREE.Color(options.keyColor) },
|
|
194
|
+
similarity: { value: options.similarity },
|
|
195
|
+
smoothness: { value: options.smoothness },
|
|
196
|
+
spill: { value: options.spill }
|
|
197
|
+
},
|
|
198
|
+
vertexShader: `
|
|
199
|
+
varying vec2 vUv;
|
|
200
|
+
void main() {
|
|
201
|
+
vUv = uv;
|
|
202
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
203
|
+
}
|
|
204
|
+
`,
|
|
205
|
+
fragmentShader: `
|
|
206
|
+
uniform sampler2D tex;
|
|
207
|
+
uniform vec3 keyColor;
|
|
208
|
+
uniform float similarity;
|
|
209
|
+
uniform float smoothness;
|
|
210
|
+
uniform float spill;
|
|
211
|
+
varying vec2 vUv;
|
|
212
|
+
|
|
213
|
+
void main() {
|
|
214
|
+
vec4 texel = texture2D(tex, vUv);
|
|
215
|
+
float chromaDist = distance(texel.rgb, keyColor);
|
|
216
|
+
float alpha = smoothstep(similarity, similarity + smoothness, chromaDist);
|
|
217
|
+
|
|
218
|
+
float spillFactor = smoothstep(similarity, similarity + spill + smoothness, chromaDist);
|
|
219
|
+
vec3 despilled = mix(vec3(dot(texel.rgb, vec3(0.299, 0.587, 0.114))), texel.rgb, spillFactor);
|
|
220
|
+
|
|
221
|
+
gl_FragColor = vec4(despilled, texel.a * alpha);
|
|
222
|
+
}
|
|
223
|
+
`,
|
|
224
|
+
transparent: true,
|
|
225
|
+
side: THREE.DoubleSide
|
|
226
|
+
});
|
|
227
|
+
material.userData[CHROMA_KEY_FLAG] = true;
|
|
228
|
+
return material;
|
|
229
|
+
}
|
|
230
|
+
__name(createWebglChromaKeyMaterial, "createWebglChromaKeyMaterial");
|
|
231
|
+
function updateWebglChromaKeyMaterial(material, options) {
|
|
232
|
+
if (!(material instanceof THREE.ShaderMaterial)) return false;
|
|
233
|
+
const { keyColor, similarity, smoothness, spill } = material.uniforms;
|
|
234
|
+
if (!keyColor || !similarity || !smoothness || !spill) return false;
|
|
235
|
+
keyColor.value.set(options.keyColor);
|
|
236
|
+
similarity.value = options.similarity;
|
|
237
|
+
smoothness.value = options.smoothness;
|
|
238
|
+
spill.value = options.spill;
|
|
239
|
+
return true;
|
|
240
|
+
}
|
|
241
|
+
__name(updateWebglChromaKeyMaterial, "updateWebglChromaKeyMaterial");
|
|
242
|
+
var areaLightTablesRequested = false;
|
|
243
|
+
function prepareWebglAreaLights() {
|
|
244
|
+
if (areaLightTablesRequested) return;
|
|
245
|
+
areaLightTablesRequested = true;
|
|
246
|
+
import('three/examples/jsm/lights/RectAreaLightUniformsLib.js').then(
|
|
247
|
+
({ RectAreaLightUniformsLib }) => {
|
|
248
|
+
RectAreaLightUniformsLib.init();
|
|
249
|
+
},
|
|
250
|
+
(error) => {
|
|
251
|
+
areaLightTablesRequested = false;
|
|
252
|
+
console.warn("[spatial-ecs] Could not load the area light tables.", error);
|
|
253
|
+
}
|
|
254
|
+
);
|
|
255
|
+
}
|
|
256
|
+
__name(prepareWebglAreaLights, "prepareWebglAreaLights");
|
|
257
|
+
var webglBackend = {
|
|
258
|
+
kind: "webgl",
|
|
259
|
+
prepareAreaLights: prepareWebglAreaLights,
|
|
260
|
+
createPostprocessing: createWebglPostprocessing,
|
|
261
|
+
createChromaKeyMaterial: createWebglChromaKeyMaterial,
|
|
262
|
+
updateChromaKeyMaterial: updateWebglChromaKeyMaterial
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
// core/render/RenderBackend.ts
|
|
266
|
+
function getRendererKindOf(renderer) {
|
|
267
|
+
return renderer?.isWebGPURenderer === true ? "webgpu" : "webgl";
|
|
268
|
+
}
|
|
269
|
+
__name(getRendererKindOf, "getRendererKindOf");
|
|
270
|
+
function readWorldRendererKind(world) {
|
|
271
|
+
const candidate = world;
|
|
272
|
+
if (typeof candidate?.getRendererKind === "function") {
|
|
273
|
+
return candidate.getRendererKind();
|
|
274
|
+
}
|
|
275
|
+
if (typeof candidate?.getRenderer === "function") {
|
|
276
|
+
try {
|
|
277
|
+
return getRendererKindOf(candidate.getRenderer());
|
|
278
|
+
} catch {
|
|
279
|
+
return "webgl";
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return "webgl";
|
|
283
|
+
}
|
|
284
|
+
__name(readWorldRendererKind, "readWorldRendererKind");
|
|
285
|
+
var unsupportedWebGpuFallbackBackend = {
|
|
286
|
+
kind: "webgpu",
|
|
287
|
+
createPostprocessing: /* @__PURE__ */ __name(() => null, "createPostprocessing"),
|
|
288
|
+
createChromaKeyMaterial: /* @__PURE__ */ __name((texture) => new THREE.MeshBasicMaterial({
|
|
289
|
+
map: texture,
|
|
290
|
+
transparent: true,
|
|
291
|
+
side: THREE.DoubleSide
|
|
292
|
+
}), "createChromaKeyMaterial"),
|
|
293
|
+
updateChromaKeyMaterial: /* @__PURE__ */ __name(() => false, "updateChromaKeyMaterial")
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
// core/render/resolveBackend.ts
|
|
297
|
+
var warnedRenderers = /* @__PURE__ */ new WeakSet();
|
|
298
|
+
function warnOnce(renderer, message) {
|
|
299
|
+
if (warnedRenderers.has(renderer)) return;
|
|
300
|
+
warnedRenderers.add(renderer);
|
|
301
|
+
console.warn(message);
|
|
302
|
+
}
|
|
303
|
+
__name(warnOnce, "warnOnce");
|
|
304
|
+
function resolveRenderBackend(renderer, requested) {
|
|
305
|
+
const kind = getRendererKindOf(renderer);
|
|
306
|
+
const backend = requested ?? webglBackend;
|
|
307
|
+
if (backend.kind === kind) return backend;
|
|
308
|
+
if (kind === "webgpu") {
|
|
309
|
+
warnOnce(
|
|
310
|
+
renderer,
|
|
311
|
+
"[spatial-ecs] This World has a WebGPURenderer but no WebGPU backend, so post-processing, green-screen keying and area lights are off. Pass `backend: webgpuBackend` from '@relu-interactives/spatial-ecs/webgpu'."
|
|
312
|
+
);
|
|
313
|
+
return unsupportedWebGpuFallbackBackend;
|
|
314
|
+
}
|
|
315
|
+
warnOnce(
|
|
316
|
+
renderer,
|
|
317
|
+
"[spatial-ecs] The WebGPU backend was passed with a WebGLRenderer; using the WebGL backend instead. Use `new WebGPURenderer()` from 'three/webgpu' to render with WebGPU."
|
|
318
|
+
);
|
|
319
|
+
return webglBackend;
|
|
320
|
+
}
|
|
321
|
+
__name(resolveRenderBackend, "resolveRenderBackend");
|
|
322
|
+
function readWorldRenderBackend(world) {
|
|
323
|
+
const getter = world?.getRenderBackend;
|
|
324
|
+
if (typeof getter === "function") {
|
|
325
|
+
const backend = getter.call(world);
|
|
326
|
+
if (backend) return backend;
|
|
327
|
+
}
|
|
328
|
+
return webglBackend;
|
|
329
|
+
}
|
|
330
|
+
__name(readWorldRenderBackend, "readWorldRenderBackend");
|
|
331
|
+
|
|
332
|
+
export { getRendererKindOf, readWorldRenderBackend, readWorldRendererKind, resolveRenderBackend, webglBackend };
|
|
333
|
+
//# sourceMappingURL=chunk-OHCNPPMX.js.map
|
|
334
|
+
//# sourceMappingURL=chunk-OHCNPPMX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../core/render/webglBackend.ts","../core/render/RenderBackend.ts","../core/render/fallbackBackend.ts","../core/render/resolveBackend.ts"],"names":["THREE2"],"mappings":";;;;;;;;;;;;;;;;;;AAyBA,IAAM,gBAAA,GAAmB;AAAA,EACvB,IAAA,EAAM,kBAAA;AAAA,EACN,QAAA,EAAU;AAAA,IACR,QAAA,EAAU,EAAE,KAAA,EAAO,IAAA,EAA6B;AAAA,IAChD,YAAY,EAAE,KAAA,EAAO,IAAU,KAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,CAAC,CAAA,EAAE;AAAA,IAC7C,SAAA,EAAW,EAAE,KAAA,EAAO,CAAA;AAAE,GACxB;AAAA,EACA,YAAA;AAAA;AAAA,IAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAAA,GAAA;AAAA,EAOzB,cAAA;AAAA;AAAA,IAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AAAA;AAW7B,CAAA;AAOA,IAAM,eAAA,GAAN,MAAM,eAAA,SAAuB,UAAA,CAAW;AAAA,EAItC,WAAA,CAAY,aAAqB,aAAA,EAA6B;AAC5D,IAAA,KAAA,CAAM,gBAAgB,CAAA;AACtB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,WAAW,CAAA;AAC1C,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AACrB,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AAAA,EAEQ,eAAA,GAAwB;AAC9B,IAAA,MAAM,OAAA,GAAU,KAAK,QAAA,CAAS,SAAA;AAC9B,IAAA,IAAI,OAAA,EAAS;AAEX,MAAA,OAAA,CAAQ,KAAA,GAAQ,KAAK,WAAA,GAAc,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,CAAK,eAAe,CAAA;AAAA,IACrE;AAAA,EACF;AAAA,EAEA,OAAA,CAAQ,OAAe,MAAA,EAAsB;AAC3C,IAAA,MAAM,UAAA,GAAa,KAAK,QAAA,CAAS,UAAA;AACjC,IAAA,IAAI,UAAA,EAAY;AACd,MAAC,UAAA,CAAW,KAAA,CAAwB,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAM,CAAC,CAAA;AAAA,IACjF;AACA,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AACF,CAAA;AA1BwC,MAAA,CAAA,eAAA,EAAA,gBAAA,CAAA;AAAxC,IAAM,cAAA,GAAN,eAAA;AAsCA,SAAS,yBAAA,CAA0B;AAAA,EACjC,QAAA,EAAU,aAAA;AAAA,EACV,KAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAuD;AACrD,EAAA,MAAM,QAAA,GAAW,aAAA;AACjB,EAAA,MAAM,QAAA,GAAW,IAAI,cAAA,CAAe,QAAQ,CAAA;AAC5C,EAAA,QAAA,CAAS,OAAA,CAAQ,IAAI,UAAA,CAAW,KAAA,EAAO,MAAM,CAAC,CAAA;AAE9C,EAAA,IAAI,MAAA,CAAO,IAAI,OAAA,EAAS;AACtB,IAAA,QAAA,CAAS,OAAA;AAAA,MACP,IAAI,SAAA,CAAU,KAAA,EAAO,MAAA,EAAQ;AAAA,QAC3B,KAAA,EAAO,OAAO,GAAA,CAAI,aAAA;AAAA,QAClB,UAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,IAAI,WAAW,CAAA;AAAA,QAC5C,SAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,IAAI,UAAU;AAAA,OAC3C;AAAA,KACH;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,MAAM,OAAA,EAAS;AACxB,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,CAAQ,IAAU,eAAS,CAAA;AACjD,IAAA,QAAA,CAAS,OAAA;AAAA,MACP,IAAI,eAAA;AAAA,QACF,IAAU,KAAA,CAAA,OAAA,CAAQ,IAAA,CAAK,KAAA,EAAO,KAAK,MAAM,CAAA;AAAA,QACzC,OAAO,KAAA,CAAM,SAAA;AAAA,QACb,OAAO,KAAA,CAAM,MAAA;AAAA,QACb,OAAO,KAAA,CAAM;AAAA;AACf,KACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,SAAS,OAAA,EAAS;AAC3B,IAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW,cAAc,CAAA;AAC1C,IAAA,MAAM,MAAA,GAAS,KAAK,QAAA,CAAS,MAAA;AAC7B,IAAA,MAAM,QAAA,GAAW,KAAK,QAAA,CAAS,QAAA;AAC/B,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,KAAA,GAAQ,OAAO,QAAA,CAAS,MAAA;AAAA,IACjC;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,QAAA,CAAS,KAAA,GAAQ,OAAO,QAAA,CAAS,QAAA;AAAA,IACnC;AACA,IAAA,QAAA,CAAS,QAAQ,IAAI,CAAA;AAAA,EACvB;AAEA,EAAA,IAAI,MAAA,CAAO,cAAc,OAAA,EAAS;AAChC,IAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW,mBAAmB,CAAA;AAC/C,IAAA,MAAM,GAAA,GAAM,KAAK,QAAA,CAAS,GAAA;AAC1B,IAAA,MAAM,UAAA,GAAa,KAAK,QAAA,CAAS,UAAA;AACjC,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,GAAA,CAAI,KAAA,GAAQ,OAAO,aAAA,CAAc,GAAA;AAAA,IACnC;AACA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,UAAA,CAAW,KAAA,GAAQ,OAAO,aAAA,CAAc,UAAA;AAAA,IAC1C;AACA,IAAA,QAAA,CAAS,QAAQ,IAAI,CAAA;AAAA,EACvB;AAEA,EAAA,IAAI,MAAA,CAAO,MAAM,OAAA,EAAS;AACxB,IAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW,WAAW,CAAA;AACvC,IAAA,MAAM,MAAA,GAAS,KAAK,QAAA,CAAS,MAAA;AAC7B,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,KAAA,GAAQ,OAAO,KAAA,CAAM,SAAA;AAAA,IAC9B;AACA,IAAA,QAAA,CAAS,QAAQ,IAAI,CAAA;AAAA,EACvB;AAEA,EAAA,IAAI,MAAA,CAAO,MAAM,OAAA,EAAS;AACxB,IAAA,QAAA,CAAS,QAAQ,IAAI,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,EACrD;AAEA,EAAA,IAAI,MAAA,CAAO,UAAU,OAAA,EAAS;AAC5B,IAAA,QAAA,CAAS,OAAA;AAAA,MACP,IAAI,aAAA;AAAA,QACF,IAAU,KAAA,CAAA,OAAA,CAAQ,CAAA,EAAG,CAAC,CAAA;AAAA,QACtB,MAAA,CAAO,SAAA,CAAU,KAAA,IAAS,MAAA,CAAO,SAAA,CAAU,cAAA;AAAA,QAC3C,MAAA,CAAO,SAAA,CAAU,KAAA,IAAS,MAAA,CAAO,SAAA,CAAU;AAAA;AAC7C,KACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,KAAK,OAAA,EAAS;AACvB,IAAA,MAAM,IAAA,GAAO,IAAI,QAAA,CAAS,KAAA,EAAO,MAAM,CAAA;AACvC,IAAA,IAAA,CAAK,YAAA,GAAe,OAAO,IAAA,CAAK,MAAA;AAChC,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AACnB,IAAA,IAAA,CAAK,cAAc,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,MAAA,CAAO,KAAK,SAAS,CAAA;AACvD,IAAA,QAAA,CAAS,QAAQ,IAAI,CAAA;AAAA,EACvB;AAEA,EAAA,IAAI,MAAA,CAAO,OAAO,OAAA,EAAS;AACzB,IAAA,MAAM,IAAA,GAAO,IAAI,UAAA,EAAW;AAC5B,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA;AAC1C,IAAA,QAAA,CAAS,QAAQ,IAAI,CAAA;AAAA,EACvB;AAEA,EAAA,IAAI,MAAA,CAAO,gBAAgB,OAAA,EAAS;AAGlC,IAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW,cAAc,CAAA;AAC1C,IAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAQ,GAAI,MAAA,CAAO,eAAA;AACpC,IAAA,MAAM,MAAA,GAAS,KAAK,QAAA,CAAS,MAAA;AAC7B,IAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,CAAS,KAAA;AAC5B,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS,OAAO,CAAA;AAAA,IAC5C;AACA,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,KAAA,CAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAA,EAAS,OAAO,CAAA;AAAA,IAC3C;AACA,IAAA,QAAA,CAAS,QAAQ,IAAI,CAAA;AAAA,EACvB;AAEA,EAAA,IAAI,MAAA,CAAO,WAAW,OAAA,EAAS;AAC7B,IAAA,QAAA,CAAS,OAAA;AAAA,MACP,IAAI,cAAA;AAAA,QAAe,OAAO,UAAA,CAAW,WAAA;AAAA,QAAa,MAChD,OAAO,QAAA,CAAS,kBAAkB,UAAA,GAAa,QAAA,CAAS,eAAc,GAAI;AAAA;AAC5E,KACF;AAAA,EACF;AAEA,EAAA,IAAI,MAAA,CAAO,KAAK,OAAA,EAAS;AACvB,IAAA,QAAA,CAAS,OAAA,CAAQ,IAAI,QAAA,EAAU,CAAA;AAAA,EACjC;AAEA,EAAA,QAAA,CAAS,OAAA,CAAQ,IAAI,UAAA,EAAY,CAAA;AACjC,EAAA,OAAO,QAAA;AACT;AA9HS,MAAA,CAAA,yBAAA,EAAA,2BAAA,CAAA;AAkIT,IAAM,eAAA,GAAkB,cAAA;AAExB,SAAS,4BAAA,CACP,SACA,OAAA,EACsB;AACtB,EAAA,MAAM,QAAA,GAAW,IAAU,KAAA,CAAA,cAAA,CAAe;AAAA,IACxC,QAAA,EAAU;AAAA,MACR,GAAA,EAAK,EAAE,KAAA,EAAO,OAAA,EAAQ;AAAA,MACtB,UAAU,EAAE,KAAA,EAAO,IAAU,KAAA,CAAA,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAE;AAAA,MACrD,UAAA,EAAY,EAAE,KAAA,EAAO,OAAA,CAAQ,UAAA,EAAW;AAAA,MACxC,UAAA,EAAY,EAAE,KAAA,EAAO,OAAA,CAAQ,UAAA,EAAW;AAAA,MACxC,KAAA,EAAO,EAAE,KAAA,EAAO,OAAA,CAAQ,KAAA;AAAM,KAChC;AAAA,IACA,YAAA,EAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAOd,cAAA,EAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAmBhB,WAAA,EAAa,IAAA;AAAA,IACb,IAAA,EAAY,KAAA,CAAA;AAAA,GACb,CAAA;AACD,EAAA,QAAA,CAAS,QAAA,CAAS,eAAe,CAAA,GAAI,IAAA;AACrC,EAAA,OAAO,QAAA;AACT;AA3CS,MAAA,CAAA,4BAAA,EAAA,8BAAA,CAAA;AA6CT,SAAS,4BAAA,CACP,UACA,OAAA,EACS;AACT,EAAA,IAAI,EAAE,QAAA,YAA0B,KAAA,CAAA,cAAA,CAAA,EAAiB,OAAO,KAAA;AACxD,EAAA,MAAM,EAAE,QAAA,EAAU,UAAA,EAAY,UAAA,EAAY,KAAA,KAAU,QAAA,CAAS,QAAA;AAC7D,EAAA,IAAI,CAAC,YAAY,CAAC,UAAA,IAAc,CAAC,UAAA,IAAc,CAAC,OAAO,OAAO,KAAA;AAC9D,EAAC,QAAA,CAAS,KAAA,CAAsB,GAAA,CAAI,OAAA,CAAQ,QAAQ,CAAA;AACpD,EAAA,UAAA,CAAW,QAAQ,OAAA,CAAQ,UAAA;AAC3B,EAAA,UAAA,CAAW,QAAQ,OAAA,CAAQ,UAAA;AAC3B,EAAA,KAAA,CAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,EAAA,OAAO,IAAA;AACT;AAZS,MAAA,CAAA,4BAAA,EAAA,8BAAA,CAAA;AAgBT,IAAI,wBAAA,GAA2B,KAAA;AAS/B,SAAS,sBAAA,GAA+B;AACtC,EAAA,IAAI,wBAAA,EAA0B;AAC9B,EAAA,wBAAA,GAA2B,IAAA;AAC3B,EAAA,OAAO,uDAAuD,CAAA,CAAE,IAAA;AAAA,IAC9D,CAAC,EAAE,wBAAA,EAAyB,KAAM;AAChC,MAAA,wBAAA,CAAyB,IAAA,EAAK;AAAA,IAChC,CAAA;AAAA,IACA,CAAC,KAAA,KAAU;AACT,MAAA,wBAAA,GAA2B,KAAA;AAC3B,MAAA,OAAA,CAAQ,IAAA,CAAK,uDAAuD,KAAK,CAAA;AAAA,IAC3E;AAAA,GACF;AACF;AAZS,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAkBF,IAAM,YAAA,GAA8B;AAAA,EACzC,IAAA,EAAM,OAAA;AAAA,EACN,iBAAA,EAAmB,sBAAA;AAAA,EACnB,oBAAA,EAAsB,yBAAA;AAAA,EACtB,uBAAA,EAAyB,4BAAA;AAAA,EACzB,uBAAA,EAAyB;AAC3B;;;ACzNO,SAAS,kBAAkB,QAAA,EAAiC;AACjE,EAAA,OAAQ,QAAA,EACJ,gBAAA,KAAqB,IAAA,GACrB,QAAA,GACA,OAAA;AACN;AALgB,MAAA,CAAA,iBAAA,EAAA,mBAAA,CAAA;AAWT,SAAS,sBAAsB,KAAA,EAA8B;AAClE,EAAA,MAAM,SAAA,GAAY,KAAA;AAIlB,EAAA,IAAI,OAAO,SAAA,EAAW,eAAA,KAAoB,UAAA,EAAY;AACpD,IAAA,OAAO,UAAU,eAAA,EAAgB;AAAA,EACnC;AACA,EAAA,IAAI,OAAO,SAAA,EAAW,WAAA,KAAgB,UAAA,EAAY;AAChD,IAAA,IAAI;AACF,MAAA,OAAO,iBAAA,CAAkB,SAAA,CAAU,WAAA,EAAa,CAAA;AAAA,IAClD,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,OAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAhBgB,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AChGT,IAAM,gCAAA,GAAkD;AAAA,EAC7D,IAAA,EAAM,QAAA;AAAA,EACN,oBAAA,+BAA4B,IAAA,EAAN,sBAAA,CAAA;AAAA,EACtB,uBAAA,kBAAyB,MAAA,CAAA,CAAC,OAAA,KACxB,IAAUA,KAAA,CAAA,iBAAA,CAAkB;AAAA,IAC1B,GAAA,EAAK,OAAA;AAAA,IACL,WAAA,EAAa,IAAA;AAAA,IACb,IAAA,EAAYA,KAAA,CAAA;AAAA,GACb,CAAA,EALsB,yBAAA,CAAA;AAAA,EAMzB,uBAAA,+BAA+B,KAAA,EAAN,yBAAA;AAC3B,CAAA;;;ACpBA,IAAM,eAAA,uBAAsB,OAAA,EAAgB;AAE5C,SAAS,QAAA,CAAS,UAAkB,OAAA,EAAuB;AACzD,EAAA,IAAI,eAAA,CAAgB,GAAA,CAAI,QAAQ,CAAA,EAAG;AACnC,EAAA,eAAA,CAAgB,IAAI,QAAQ,CAAA;AAC5B,EAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AACtB;AAJS,MAAA,CAAA,QAAA,EAAA,UAAA,CAAA;AAeF,SAAS,oBAAA,CACd,UACA,SAAA,EACe;AACf,EAAA,MAAM,IAAA,GAAO,kBAAkB,QAAQ,CAAA;AACvC,EAAA,MAAM,UAAU,SAAA,IAAa,YAAA;AAC7B,EAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,IAAA,EAAM,OAAO,OAAA;AAElC,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,QAAA;AAAA,MACE,QAAA;AAAA,MACA;AAAA,KAGF;AACA,IAAA,OAAO,gCAAA;AAAA,EACT;AAEA,EAAA,QAAA;AAAA,IACE,QAAA;AAAA,IACA;AAAA,GAGF;AACA,EAAA,OAAO,YAAA;AACT;AAzBgB,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AA+BT,SAAS,uBAAuB,KAAA,EAA+B;AACpE,EAAA,MAAM,SAAU,KAAA,EACZ,gBAAA;AACJ,EAAA,IAAI,OAAO,WAAW,UAAA,EAAY;AAChC,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AACjC,IAAA,IAAI,SAAS,OAAO,OAAA;AAAA,EACtB;AACA,EAAA,OAAO,YAAA;AACT;AARgB,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA","file":"chunk-OHCNPPMX.js","sourcesContent":["import * as THREE from \"three\";\nimport { EffectComposer } from \"three/examples/jsm/postprocessing/EffectComposer.js\";\nimport { RenderPass } from \"three/examples/jsm/postprocessing/RenderPass.js\";\nimport { UnrealBloomPass } from \"three/examples/jsm/postprocessing/UnrealBloomPass.js\";\nimport { DotScreenPass } from \"three/examples/jsm/postprocessing/DotScreenPass.js\";\nimport { GlitchPass } from \"three/examples/jsm/postprocessing/GlitchPass.js\";\nimport { FilmPass } from \"three/examples/jsm/postprocessing/FilmPass.js\";\nimport { BokehPass } from \"three/examples/jsm/postprocessing/BokehPass.js\";\nimport { SSAOPass } from \"three/examples/jsm/postprocessing/SSAOPass.js\";\nimport { ShaderPass } from \"three/examples/jsm/postprocessing/ShaderPass.js\";\nimport { OutputPass } from \"three/examples/jsm/postprocessing/OutputPass.js\";\nimport { SMAAPass } from \"three/examples/jsm/postprocessing/SMAAPass.js\";\nimport { HueSaturationShader } from \"three/examples/jsm/shaders/HueSaturationShader.js\";\nimport { RGBShiftShader } from \"three/examples/jsm/shaders/RGBShiftShader.js\";\nimport { SepiaShader } from \"three/examples/jsm/shaders/SepiaShader.js\";\nimport { VignetteShader } from \"three/examples/jsm/shaders/VignetteShader.js\";\n\nimport type {\n ChromaKeyOptions,\n PostprocessingBuildContext,\n PostprocessingPipeline,\n RenderBackend,\n} from \"./RenderBackend\";\n\n/** Mosaic shader: samples the centre of each `pixelSize`-texel block. */\nconst PixelationShader = {\n name: \"PixelationShader\",\n uniforms: {\n tDiffuse: { value: null as THREE.Texture | null },\n resolution: { value: new THREE.Vector2(1, 1) },\n pixelSize: { value: 6 },\n },\n vertexShader: /* glsl */ `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: /* glsl */ `\n uniform sampler2D tDiffuse;\n uniform vec2 resolution;\n uniform float pixelSize;\n varying vec2 vUv;\n void main() {\n vec2 block = max(pixelSize, 1.0) / resolution;\n vec2 coord = block * (floor(vUv / block) + 0.5);\n gl_FragColor = texture2D(tDiffuse, coord);\n }\n `,\n};\n\n/**\n * Full-screen pixelation. A post pass rather than `RenderPixelatedPass` so it\n * pixelates whatever the chain produced so far and costs one texture fetch per\n * pixel instead of an extra scene + normals render.\n */\nclass PixelationPass extends ShaderPass {\n private readonly granularity: number;\n private readonly getPixelRatio: () => number;\n\n constructor(granularity: number, getPixelRatio: () => number) {\n super(PixelationShader);\n this.granularity = Math.max(1, granularity);\n this.getPixelRatio = getPixelRatio;\n this.updatePixelSize();\n }\n\n private updatePixelSize(): void {\n const uniform = this.uniforms.pixelSize;\n if (uniform) {\n // `granularity` is in CSS pixels; the composer works in device pixels.\n uniform.value = this.granularity * Math.max(1, this.getPixelRatio());\n }\n }\n\n setSize(width: number, height: number): void {\n const resolution = this.uniforms.resolution;\n if (resolution) {\n (resolution.value as THREE.Vector2).set(Math.max(1, width), Math.max(1, height));\n }\n this.updatePixelSize();\n }\n}\n\n/**\n * Build the WebGL `EffectComposer` for `values`.\n *\n * Pass order: scene render → depth of field → bloom → vignette →\n * hue/saturation → sepia → film noise → dot screen → SSAO → glitch →\n * chromatic aberration → pixelation → SMAA → output (tone mapping + sRGB).\n *\n * The returned object IS the `EffectComposer`, so scripts that read\n * `scene.userData.ecsPostprocessingComposer.passes` keep working.\n */\nfunction createWebglPostprocessing({\n renderer: rendererInput,\n scene,\n camera,\n values,\n}: PostprocessingBuildContext): PostprocessingPipeline {\n const renderer = rendererInput as THREE.WebGLRenderer;\n const composer = new EffectComposer(renderer);\n composer.addPass(new RenderPass(scene, camera));\n\n if (values.dof.enabled) {\n composer.addPass(\n new BokehPass(scene, camera, {\n focus: values.dof.focusDistance,\n aperture: Math.max(0, values.dof.focalLength),\n maxblur: Math.max(0, values.dof.bokehScale),\n }),\n );\n }\n\n if (values.bloom.enabled) {\n const size = renderer.getSize(new THREE.Vector2());\n composer.addPass(\n new UnrealBloomPass(\n new THREE.Vector2(size.width, size.height),\n values.bloom.intensity,\n values.bloom.radius,\n values.bloom.threshold,\n ),\n );\n }\n\n if (values.vignette.enabled) {\n const pass = new ShaderPass(VignetteShader);\n const offset = pass.uniforms.offset;\n const darkness = pass.uniforms.darkness;\n if (offset) {\n offset.value = values.vignette.offset;\n }\n if (darkness) {\n darkness.value = values.vignette.darkness;\n }\n composer.addPass(pass);\n }\n\n if (values.hueSaturation.enabled) {\n const pass = new ShaderPass(HueSaturationShader);\n const hue = pass.uniforms.hue;\n const saturation = pass.uniforms.saturation;\n if (hue) {\n hue.value = values.hueSaturation.hue;\n }\n if (saturation) {\n saturation.value = values.hueSaturation.saturation;\n }\n composer.addPass(pass);\n }\n\n if (values.sepia.enabled) {\n const pass = new ShaderPass(SepiaShader);\n const amount = pass.uniforms.amount;\n if (amount) {\n amount.value = values.sepia.intensity;\n }\n composer.addPass(pass);\n }\n\n if (values.noise.enabled) {\n composer.addPass(new FilmPass(values.noise.opacity));\n }\n\n if (values.dotScreen.enabled) {\n composer.addPass(\n new DotScreenPass(\n new THREE.Vector2(0, 0),\n values.dotScreen.angle ?? values.dotScreen.dotScreenAngle,\n values.dotScreen.scale ?? values.dotScreen.dotScreenScale,\n ),\n );\n }\n\n if (values.ssao.enabled) {\n const pass = new SSAOPass(scene, camera);\n pass.kernelRadius = values.ssao.radius;\n pass.minDistance = 0.001;\n pass.maxDistance = Math.max(0.01, values.ssao.intensity);\n composer.addPass(pass);\n }\n\n if (values.glitch.enabled) {\n const pass = new GlitchPass();\n pass.enabled = true;\n pass.goWild = Boolean(values.glitch.active);\n composer.addPass(pass);\n }\n\n if (values.chromAberration.enabled) {\n // RGBShift offsets red by +amount and blue by -amount along `angle`, so\n // the authored (x, y) offset maps to its length and direction.\n const pass = new ShaderPass(RGBShiftShader);\n const { offsetX, offsetY } = values.chromAberration;\n const amount = pass.uniforms.amount;\n const angle = pass.uniforms.angle;\n if (amount) {\n amount.value = Math.hypot(offsetX, offsetY);\n }\n if (angle) {\n angle.value = Math.atan2(offsetY, offsetX);\n }\n composer.addPass(pass);\n }\n\n if (values.pixelation.enabled) {\n composer.addPass(\n new PixelationPass(values.pixelation.granularity, () =>\n typeof renderer.getPixelRatio === \"function\" ? renderer.getPixelRatio() : 1,\n ),\n );\n }\n\n if (values.smaa.enabled) {\n composer.addPass(new SMAAPass());\n }\n\n composer.addPass(new OutputPass());\n return composer;\n}\n\n// ── Chroma key ────────────────────────────────────────────────────────────\n\nconst CHROMA_KEY_FLAG = \"ecsChromaKey\";\n\nfunction createWebglChromaKeyMaterial(\n texture: THREE.Texture,\n options: ChromaKeyOptions,\n): THREE.ShaderMaterial {\n const material = new THREE.ShaderMaterial({\n uniforms: {\n tex: { value: texture },\n keyColor: { value: new THREE.Color(options.keyColor) },\n similarity: { value: options.similarity },\n smoothness: { value: options.smoothness },\n spill: { value: options.spill },\n },\n vertexShader: `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: `\n uniform sampler2D tex;\n uniform vec3 keyColor;\n uniform float similarity;\n uniform float smoothness;\n uniform float spill;\n varying vec2 vUv;\n\n void main() {\n vec4 texel = texture2D(tex, vUv);\n float chromaDist = distance(texel.rgb, keyColor);\n float alpha = smoothstep(similarity, similarity + smoothness, chromaDist);\n\n float spillFactor = smoothstep(similarity, similarity + spill + smoothness, chromaDist);\n vec3 despilled = mix(vec3(dot(texel.rgb, vec3(0.299, 0.587, 0.114))), texel.rgb, spillFactor);\n\n gl_FragColor = vec4(despilled, texel.a * alpha);\n }\n `,\n transparent: true,\n side: THREE.DoubleSide,\n });\n material.userData[CHROMA_KEY_FLAG] = true;\n return material;\n}\n\nfunction updateWebglChromaKeyMaterial(\n material: THREE.Material,\n options: ChromaKeyOptions,\n): boolean {\n if (!(material instanceof THREE.ShaderMaterial)) return false;\n const { keyColor, similarity, smoothness, spill } = material.uniforms;\n if (!keyColor || !similarity || !smoothness || !spill) return false;\n (keyColor.value as THREE.Color).set(options.keyColor);\n similarity.value = options.similarity;\n smoothness.value = options.smoothness;\n spill.value = options.spill;\n return true;\n}\n\n// ── Area lights ───────────────────────────────────────────────────────────\n\nlet areaLightTablesRequested = false;\n\n/**\n * `RectAreaLight` shading needs lookup tables in `UniformsLib`; without them\n * area lights render black. The tables are ~300 KB of source, so they load on\n * demand the first time an area light is created rather than with every\n * WebGL bundle. WebGL reads them at render time, so a light created before\n * the import resolves lights up on the next frame.\n */\nfunction prepareWebglAreaLights(): void {\n if (areaLightTablesRequested) return;\n areaLightTablesRequested = true;\n import(\"three/examples/jsm/lights/RectAreaLightUniformsLib.js\").then(\n ({ RectAreaLightUniformsLib }) => {\n RectAreaLightUniformsLib.init();\n },\n (error) => {\n areaLightTablesRequested = false;\n console.warn(\"[spatial-ecs] Could not load the area light tables.\", error);\n },\n );\n}\n\n/**\n * The default {@link RenderBackend}: three's `WebGLRenderer`, post-processing\n * through `EffectComposer`, GLSL chroma key.\n */\nexport const webglBackend: RenderBackend = {\n kind: \"webgl\",\n prepareAreaLights: prepareWebglAreaLights,\n createPostprocessing: createWebglPostprocessing,\n createChromaKeyMaterial: createWebglChromaKeyMaterial,\n updateChromaKeyMaterial: updateWebglChromaKeyMaterial,\n};\n","import type * as THREE from \"three\";\n// Type-only: the default entry must never load `three/webgpu` at runtime.\nimport type { WebGPURenderer } from \"three/webgpu\";\n\nimport type { PostprocessingState } from \"../components/Postprocessing\";\nimport type { World } from \"../World\";\n\n/**\n * A renderer a {@link World} can run on: three's classic `WebGLRenderer`, or\n * `WebGPURenderer` from `three/webgpu` (which falls back to WebGL 2 on its own\n * when the browser has no WebGPU).\n */\nexport type EcsRenderer = THREE.WebGLRenderer | WebGPURenderer;\n\n/** Which renderer family a world is drawing with. */\nexport type RendererKind = \"webgl\" | \"webgpu\";\n\n/**\n * A built post-processing chain. `RenderSystem` calls `render()` in place of\n * `renderer.render()` while it is active.\n *\n * `setSize` / `setPixelRatio` are optional: a WebGL `EffectComposer` needs\n * them, while a WebGPU `RenderPipeline` reads the renderer's size every frame.\n */\nexport interface PostprocessingPipeline {\n render(): void;\n setSize?(width: number, height: number): void;\n setPixelRatio?(pixelRatio: number): void;\n dispose(): void;\n}\n\n/** Everything a backend needs to build a post-processing chain. */\nexport interface PostprocessingBuildContext {\n renderer: EcsRenderer;\n scene: THREE.Scene;\n camera: THREE.PerspectiveCamera;\n /** The scene's current `Postprocessing.values` (`postEnabled` is `true`). */\n values: PostprocessingState;\n /** The world being rendered, when known (used to scope one-time warnings). */\n world?: World;\n}\n\n/** Green-screen settings, in the same units as `VideoComponent.options`. */\nexport interface ChromaKeyOptions {\n /** Colour to key out (any three.js colour representation, e.g. `\"#00ff00\"`). */\n keyColor: THREE.ColorRepresentation;\n /** Colour distance below which a pixel is fully transparent. */\n similarity: number;\n /** Width of the soft edge above `similarity`. */\n smoothness: number;\n /** How far past the edge the key colour is desaturated (spill removal). */\n spill: number;\n}\n\n/**\n * Everything renderer-specific the engine does, behind one small interface so\n * a {@link World} can run on WebGL or WebGPU.\n *\n * The default is `webglBackend` (exported from the package root). For a\n * `WebGPURenderer`, pass `webgpuBackend` from\n * `@relu-interactives/spatial-ecs/webgpu`.\n */\nexport interface RenderBackend {\n /** Renderer family this backend drives. */\n readonly kind: RendererKind;\n /** One-time renderer setup, called once from the `World` constructor. */\n install?(world: World): void;\n /**\n * Called the first time an area light (`RectAreaLight`) is created, so the\n * backend can load the lookup tables those lights need. Optional.\n */\n prepareAreaLights?(world: World): void;\n /**\n * Build the post-processing chain for `context.values`. Return `null` to\n * render the scene directly (no chain).\n */\n createPostprocessing(\n context: PostprocessingBuildContext,\n ): PostprocessingPipeline | null;\n /**\n * Apply a values change to an existing chain without rebuilding it. Return\n * `true` when the chain was updated in place, `false` when the change is\n * structural (an effect switched on or off) and the caller must rebuild.\n * When omitted, every change rebuilds.\n */\n updatePostprocessing?(\n pipeline: PostprocessingPipeline,\n previous: PostprocessingState,\n next: PostprocessingState,\n ): boolean;\n /** Material that renders `texture` with `options.keyColor` keyed out. */\n createChromaKeyMaterial(\n texture: THREE.Texture,\n options: ChromaKeyOptions,\n ): THREE.Material;\n /**\n * Push new options into a material made by {@link createChromaKeyMaterial}.\n * Returns `false` when `material` is not one of this backend's chroma-key\n * materials.\n */\n updateChromaKeyMaterial(material: THREE.Material, options: ChromaKeyOptions): boolean;\n}\n\n/** `\"webgpu\"` for a `WebGPURenderer`, otherwise `\"webgl\"`. */\nexport function getRendererKindOf(renderer: unknown): RendererKind {\n return (renderer as { isWebGPURenderer?: unknown } | null | undefined)\n ?.isWebGPURenderer === true\n ? \"webgpu\"\n : \"webgl\";\n}\n\n/**\n * The renderer kind of `world`, tolerating partial worlds (test doubles and\n * worlds from older builds without `getRendererKind`).\n */\nexport function readWorldRendererKind(world: unknown): RendererKind {\n const candidate = world as {\n getRendererKind?: () => RendererKind;\n getRenderer?: () => unknown;\n } | null;\n if (typeof candidate?.getRendererKind === \"function\") {\n return candidate.getRendererKind();\n }\n if (typeof candidate?.getRenderer === \"function\") {\n try {\n return getRendererKindOf(candidate.getRenderer());\n } catch {\n return \"webgl\";\n }\n }\n return \"webgl\";\n}\n","import * as THREE from \"three\";\n\nimport type { RenderBackend } from \"./RenderBackend\";\n\n/**\n * What a `World` uses when it is handed a `WebGPURenderer` but no WebGPU\n * backend. Nothing here may touch WebGL-only APIs (`EffectComposer`, GLSL\n * `ShaderMaterial`), and the default entry may not import `three/webgpu`, so\n * it does the safe minimum:\n *\n * - no post-processing (the scene renders directly; tone mapping from\n * `Environment`/`Postprocessing` still applies through the renderer),\n * - green-screen videos play un-keyed through a plain `MeshBasicMaterial`,\n * which `WebGPURenderer` converts to a node material by itself.\n *\n * Area lights need lookup tables that only the WebGPU backend installs, so\n * they cannot render here either. Pass `webgpuBackend` from\n * `@relu-interactives/spatial-ecs/webgpu` to get all of it.\n */\nexport const unsupportedWebGpuFallbackBackend: RenderBackend = {\n kind: \"webgpu\",\n createPostprocessing: () => null,\n createChromaKeyMaterial: (texture) =>\n new THREE.MeshBasicMaterial({\n map: texture,\n transparent: true,\n side: THREE.DoubleSide,\n }),\n updateChromaKeyMaterial: () => false,\n};\n","import { unsupportedWebGpuFallbackBackend } from \"./fallbackBackend\";\nimport {\n getRendererKindOf,\n type EcsRenderer,\n type RenderBackend,\n} from \"./RenderBackend\";\nimport { webglBackend } from \"./webglBackend\";\n\n/** Renderers already warned about, so each mismatch is reported once. */\nconst warnedRenderers = new WeakSet<object>();\n\nfunction warnOnce(renderer: object, message: string): void {\n if (warnedRenderers.has(renderer)) return;\n warnedRenderers.add(renderer);\n console.warn(message);\n}\n\n/**\n * Pick the backend a world runs with. `requested` wins when it matches the\n * renderer. A mismatch is warned about once per renderer and resolved to\n * something that cannot crash:\n *\n * - `WebGPURenderer` without a WebGPU backend → no post-processing,\n * un-keyed green screen (never `EffectComposer` or GLSL on WebGPU).\n * - `WebGLRenderer` with a WebGPU backend → the WebGL backend.\n */\nexport function resolveRenderBackend(\n renderer: EcsRenderer,\n requested: RenderBackend | undefined,\n): RenderBackend {\n const kind = getRendererKindOf(renderer);\n const backend = requested ?? webglBackend;\n if (backend.kind === kind) return backend;\n\n if (kind === \"webgpu\") {\n warnOnce(\n renderer,\n \"[spatial-ecs] This World has a WebGPURenderer but no WebGPU backend, so \" +\n \"post-processing, green-screen keying and area lights are off. Pass \" +\n \"`backend: webgpuBackend` from '@relu-interactives/spatial-ecs/webgpu'.\",\n );\n return unsupportedWebGpuFallbackBackend;\n }\n\n warnOnce(\n renderer,\n \"[spatial-ecs] The WebGPU backend was passed with a WebGLRenderer; using \" +\n \"the WebGL backend instead. Use `new WebGPURenderer()` from 'three/webgpu' \" +\n \"to render with WebGPU.\",\n );\n return webglBackend;\n}\n\n/**\n * The backend of `world`, tolerating partial worlds (test doubles) by falling\n * back to the WebGL backend.\n */\nexport function readWorldRenderBackend(world: unknown): RenderBackend {\n const getter = (world as { getRenderBackend?: () => RenderBackend } | null)\n ?.getRenderBackend;\n if (typeof getter === \"function\") {\n const backend = getter.call(world);\n if (backend) return backend;\n }\n return webglBackend;\n}\n"]}
|