@needle-tools/engine 4.5.5-next.f053174 → 4.5.6-next.1d4dc79
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/CHANGELOG.md +1 -1
- package/dist/{needle-engine.bundle-DvRTYg0j.js → needle-engine.bundle-BgKkDMl2.js} +3 -3
- package/dist/{needle-engine.bundle-DFfLpZpn.min.js → needle-engine.bundle-D9kyS8Tj.min.js} +1 -1
- package/dist/{needle-engine.bundle-Dx2hV9Bu.umd.cjs → needle-engine.bundle-DqD4rb6x.umd.cjs} +2 -2
- package/dist/needle-engine.js +2 -2
- package/dist/needle-engine.min.js +1 -1
- package/dist/needle-engine.umd.cjs +1 -1
- package/package.json +2 -3
- package/plugins/common/license.js +12 -2
- package/dist/gltf-progressive-BEgFkNGc.light.min.js +0 -8
- package/dist/gltf-progressive-C9Dguupm.light.umd.cjs +0 -8
- package/dist/gltf-progressive-ZWp05WqX.light.js +0 -1054
- package/dist/needle-engine.bundle-5YrltOTW.light.umd.cjs +0 -1559
- package/dist/needle-engine.bundle-Bjtl-M4D.light.js +0 -43245
- package/dist/needle-engine.bundle-BxW8rOic.light.min.js +0 -1559
- package/dist/needle-engine.light.d.ts +0 -132
- package/dist/needle-engine.light.js +0 -617
- package/dist/needle-engine.light.min.js +0 -1
- package/dist/needle-engine.light.umd.cjs +0 -1
- package/dist/postprocessing-FosLwPQS.light.min.js +0 -1637
- package/dist/postprocessing-WrSov-2f.light.umd.cjs +0 -1637
- package/dist/postprocessing-hAt4uO_H.light.js +0 -14814
- package/dist/rapier-CU5cp-KB.light.js +0 -5142
- package/dist/rapier-CUe6_xwE.light.umd.cjs +0 -1
- package/dist/rapier-CyWhltHY.light.min.js +0 -1
- package/dist/three-1JG7vpNC.light.js +0 -32110
- package/dist/three-CFtLGNtV.light.min.js +0 -3874
- package/dist/three-Cn7l9Zcu.light.umd.cjs +0 -3874
- package/dist/three-examples-BEj-FSbn.light.umd.cjs +0 -501
- package/dist/three-examples-BnHP6TJv.light.min.js +0 -501
- package/dist/three-examples-D7sODHUy.light.js +0 -10800
- package/dist/three-mesh-ui-455xHppU.light.umd.cjs +0 -406
- package/dist/three-mesh-ui-d5QV--Fw.light.js +0 -6230
- package/dist/three-mesh-ui-d9DMm4Vu.light.min.js +0 -406
- package/dist/vendor-C6uo3n0R.light.js +0 -14010
- package/dist/vendor-Chn-TYVI.light.umd.cjs +0 -1121
- package/dist/vendor-D_SttDVr.light.min.js +0 -1121
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./needle-engine.bundle-Dx2hV9Bu.umd.cjs"),a=require("./gltf-progressive-Ccf3INjK.umd.cjs"),s=require("./three-f-JuZtOs.umd.cjs"),o={VERSION:e.VERSION,Context:e.Context,NeedleXRSession:e.NeedleXRSession,assets:{loadFromURL:e.loadAsset},onStart:e.onStart,onUpdate:e.onUpdate,onBeforeRender:e.onBeforeRender,onAfterRender:e.onAfterRender,onInitializedContext:e.onInitialized,onDestroyContext:e.onDestroy,onClearContext:e.onClear};var n;((n=globalThis.Needle)==null?void 0:n.VERSION)!==void 0&&console.warn(`Needle Engine is already imported: ${globalThis.Needle.VERSION}`);function i(t){for(const r in t)o[r]=t[r]}i(e.Component);i(e.Components);for(const t of Object.getOwnPropertyNames(e.GameObject))switch(t){case"prototype":case"constructor":case"length":case"name":continue;default:o[t]=e.GameObject[t];break}if(!globalThis.Needle)globalThis.Needle=o;else for(const t in o)globalThis.Needle[t]=o[t];globalThis.THREE?console.warn("Three.js is already imported"):globalThis.THREE=s.THREE;exports.$physicsKey=e.$physicsKey;exports.ActionBuilder=e.ActionBuilder;exports.ActionCollection=e.ActionCollection;exports.ActionModel=e.ActionModel;exports.Addressables=e.Addressables;exports.AlignmentConstraint=e.AlignmentConstraint;exports.AmbientMode=e.AmbientMode;exports.Animation=e.Animation;exports.AnimationCurve=e.AnimationCurve;exports.AnimationExtension=e.AnimationExtension;exports.AnimationTrackHandler=e.AnimationTrackHandler;exports.AnimationUtils=e.AnimationUtils;exports.Animator=e.Animator;exports.AnimatorConditionMode=e.AnimatorConditionMode;exports.AnimatorController=e.AnimatorController;exports.AnimatorControllerParameterType=e.AnimatorControllerParameterType;exports.AnimatorStateInfo=e.AnimatorStateInfo;exports.Antialiasing=e.Antialiasing;exports.Application=e.Application;exports.AssetDatabase=e.AssetDatabase;exports.AssetReference=e.AssetReference;exports.AudioExtension=e.AudioExtension;exports.AudioListener=e.AudioListener;exports.AudioSource=e.AudioSource;exports.AudioTrackHandler=e.AudioTrackHandler;exports.Avatar=e.Avatar;exports.AvatarBlink_Simple=e.AvatarBlink_Simple;exports.AvatarEyeLook_Rotation=e.AvatarEyeLook_Rotation;exports.AvatarLoader=e.AvatarLoader;exports.AvatarMarker=e.AvatarMarker;exports.AvatarModel=e.AvatarModel;exports.Avatar_Brain_LookAt=e.Avatar_Brain_LookAt;exports.Avatar_MouthShapes=e.Avatar_MouthShapes;exports.Avatar_MustacheShake=e.Avatar_MustacheShake;exports.Avatar_POI=e.Avatar_POI;exports.Axes=e.Axes;exports.AxesHelper=e.AxesHelper;exports.BUILD_TIME=e.BUILD_TIME;exports.BaseUIComponent=e.BaseUIComponent;exports.BasicIKConstraint=e.BasicIKConstraint;exports.BehaviorExtension=e.BehaviorExtension;exports.BehaviorModel=e.BehaviorModel;exports.Behaviour=e.Component$1;Object.defineProperty(exports,"BlobStorage",{enumerable:!0,get:()=>e.BlobStorage});exports.BloomEffect=e.BloomEffect;exports.BoxCollider=e.BoxCollider;exports.BoxGizmo=e.BoxGizmo;exports.BoxHelperComponent=e.BoxHelperComponent;exports.Button=e.Button;exports.ButtonsFactory=e.ButtonsFactory;exports.CallDirection=e.CallDirection;exports.CallInfo=e.CallInfo;exports.Camera=e.Camera;exports.CameraTargetReachedEvent=e.CameraTargetReachedEvent;exports.Canvas=e.Canvas;exports.CanvasGroup=e.CanvasGroup;exports.CapsuleCollider=e.CapsuleCollider;exports.ChangeMaterialOnClick=e.ChangeMaterialOnClick;exports.ChangeTransformOnClick=e.ChangeTransformOnClick;exports.CharacterController=e.CharacterController;exports.CharacterControllerInput=e.CharacterControllerInput;exports.ChromaticAberration=e.ChromaticAberration;exports.CircularBuffer=e.CircularBuffer;exports.ClearFlags=e.ClearFlags;exports.ClipExtrapolation=e.ClipExtrapolation;exports.Collider=e.Collider;exports.Collision=e.Collision;exports.CollisionDetectionMode=e.CollisionDetectionMode;exports.ColorAdjustments=e.ColorAdjustments;exports.ColorBySpeedModule=e.ColorBySpeedModule;exports.ColorOverLifetimeModule=e.ColorOverLifetimeModule;exports.Component=e.Component$1;exports.ComponentLifecycleEvents=e.ComponentLifecycleEvents;exports.ConnectionEvents=e.ConnectionEvents;exports.ContactPoint=e.ContactPoint;exports.ContactShadows=e.ContactShadows;exports.Context=e.Context;exports.ContextArgs=e.ContextArgs;exports.ContextEvent=e.ContextEvent;exports.ContextRegistry=e.ContextRegistry;exports.ControlTrackHandler=e.ControlTrackHandler;exports.CustomBranding=e.CustomBranding;exports.CustomShader=e.CustomShader;exports.DefaultReflectionMode=e.DefaultReflectionMode;exports.Deletable=e.Deletable;exports.DeleteBox=e.DeleteBox;exports.DepthOfField=e.DepthOfField;exports.DeviceFlag=e.DeviceFlag;Object.defineProperty(exports,"DeviceUtilities",{enumerable:!0,get:()=>e.DeviceUtilities});exports.DocumentExtension=e.DocumentExtension;exports.DragControls=e.DragControls;exports.DragMode=e.DragMode;exports.DropListener=e.DropListener;exports.Duplicatable=e.Duplicatable;exports.EffectWrapper=e.EffectWrapper;exports.EmissionModule=e.EmissionModule;exports.EmphasizeOnClick=e.EmphasizeOnClick;exports.EngineLoadingView=e.EngineLoadingView;exports.EnvironmentScene=e.EnvironmentScene;exports.EventList=e.EventList;exports.EventListEvent=e.EventListEvent;exports.EventSystem=e.EventSystem;exports.EventTrigger=e.EventTrigger;exports.FieldWithDefault=e.FieldWithDefault;exports.FileReference=e.FileReference;exports.FileReferenceSerializer=e.FileReferenceSerializer;exports.FileSpawnModel=e.FileSpawnModel;exports.File_Event=e.File_Event;exports.FixedJoint=e.FixedJoint;exports.Fog=e.Fog;exports.FrameEvent=e.FrameEvent;exports.GENERATOR=e.GENERATOR;exports.GameObject=e.GameObject;exports.Gizmos=e.Gizmos;exports.GltfExport=e.GltfExport;exports.GltfExportBox=e.GltfExportBox;exports.Gradient=e.Gradient;exports.Graphic=e.Graphic;exports.GraphicRaycaster=e.GraphicRaycaster;exports.Graphics=e.Graphics;exports.GridHelper=e.GridHelper;exports.GridLayoutGroup=e.GridLayoutGroup;exports.GroundProjectedEnv=e.GroundProjectedEnv;exports.GroupActionModel=e.GroupActionModel;exports.HideFlags=e.HideFlags;exports.HideOnStart=e.HideOnStart;exports.HingeJoint=e.HingeJoint;exports.HorizontalLayoutGroup=e.HorizontalLayoutGroup;exports.HostData=e.HostData;exports.Image=e.Image;exports.ImageReference=e.ImageReference;exports.ImageReferenceSerializer=e.ImageReferenceSerializer;exports.InheritVelocityModule=e.InheritVelocityModule;exports.Input=e.Input;exports.InputEventQueue=e.InputEventQueue;exports.InputEvents=e.InputEvents;exports.InputField=e.InputField;exports.InstanceHandle=e.InstanceHandle;exports.InstancingHandler=e.InstancingHandler;exports.InstancingUtil=e.InstancingUtil;exports.InstantiateEvent=e.InstantiateEvent;exports.InstantiateIdProvider=e.InstantiateIdProvider;exports.InstantiateOptions=e.InstantiateOptions;exports.Interactable=e.Interactable;Object.defineProperty(exports,"InternalScreenshotUtils",{enumerable:!0,get:()=>e.InternalScreenshotUtils});exports.JoinedRoomResponse=e.JoinedRoomResponse;exports.KeyEventArgs=e.KeyEventArgs;exports.Keyframe=e.Keyframe;exports.LODGroup=e.LODGroup;exports.LODModel=e.LODModel;exports.LeftRoomResponse=e.LeftRoomResponse;exports.Light=e.Light;exports.LightData=e.LightData;exports.LimitVelocityOverLifetimeModule=e.LimitVelocityOverLifetimeModule;exports.LoadingElementOptions=e.LoadingElementOptions;exports.LogStats=e.LogStats;exports.LogType=e.LogType;exports.LookAt=e.LookAt;exports.LookAtConstraint=e.LookAtConstraint;exports.MainModule=e.MainModule;exports.MarkerType=e.MarkerType;exports.MaskableGraphic=e.MaskableGraphic;exports.Mathf=e.Mathf;exports.MeshCollider=e.MeshCollider;exports.MeshRenderer=e.MeshRenderer;exports.MinMaxCurve=e.MinMaxCurve;exports.MinMaxGradient=e.MinMaxGradient;Object.defineProperty(exports,"NEEDLE_ENGINE_MODULES",{enumerable:!0,get:()=>e.MODULES});exports.NEKeyboardEvent=e.NEKeyboardEvent;exports.NEPointerEvent=e.NEPointerEvent;exports.NeedleButtonElement=e.NeedleButtonElement;exports.NeedleEngine=e.ContextRegistry;exports.NeedleEngineHTMLElement=e.NeedleEngineHTMLElement;Object.defineProperty(exports,"NeedleEngineModelLoader",{enumerable:!0,get:()=>e.NeedleEngineModelLoader});exports.NeedleMenu=e.NeedleMenu;exports.NeedlePatchesKey=e.NeedlePatchesKey;exports.NeedleUSDZExporter=e.USDZExporter$1;exports.NeedleXRController=e.NeedleXRController;exports.NeedleXRSession=e.NeedleXRSession;exports.NeedleXRSync=e.NeedleXRSync;exports.NeedleXRUtils=e.NeedleXRUtils;exports.NestedGltf=e.NestedGltf;exports.NetworkConnection=e.NetworkConnection;exports.NetworkedStreamEvents=e.NetworkedStreamEvents;exports.NetworkedStreams=e.NetworkedStreams;exports.Networking=e.Networking;exports.NewInstanceModel=e.NewInstanceModel;exports.NoiseModule=e.NoiseModule;exports.ObjectRaycaster=e.ObjectRaycaster;exports.ObjectUtils=e.ObjectUtils;exports.OffsetConstraint=e.OffsetConstraint;exports.OneEuroFilter=e.OneEuroFilter;exports.OneEuroFilterXYZ=e.OneEuroFilterXYZ;exports.OpenURL=e.OpenURL;exports.OrbitControls=e.OrbitControls;exports.Outline=e.Outline;exports.OwnershipEvent=e.OwnershipEvent;exports.OwnershipModel=e.OwnershipModel;exports.PUBLIC_KEY=e.PUBLIC_KEY;exports.Padding=e.Padding;exports.ParticleBurst=e.ParticleBurst;exports.ParticleSubEmitter=e.ParticleSubEmitter;exports.ParticleSystem=e.ParticleSystem;exports.ParticleSystemBaseBehaviour=e.ParticleSystemBaseBehaviour;exports.ParticleSystemRenderer=e.ParticleSystemRenderer;exports.ParticleSystemShapeType=e.ParticleSystemShapeType;exports.PeerHandle=e.PeerHandle;exports.PeerNetworking=e.PeerNetworking;exports.Physics=e.Physics;exports.PhysicsExtension=e.PhysicsExtension;exports.PhysicsMaterialCombine=e.PhysicsMaterialCombine;exports.PixelationEffect=e.PixelationEffect;exports.PlayAnimationOnClick=e.PlayAnimationOnClick;exports.PlayAudioOnClick=e.PlayAudioOnClick;exports.PlayableDirector=e.PlayableDirector;exports.PlayerColor=e.PlayerColor;exports.PlayerState=e.PlayerState;exports.PlayerStateEvent=e.PlayerStateEvent;exports.PlayerSync=e.PlayerSync;exports.PlayerView=e.PlayerView;exports.PlayerViewManager=e.PlayerViewManager;exports.PointerEventData=e.PointerEventData;exports.PointerType=e.PointerType;exports.PostProcessingEffect=e.PostProcessingEffect;exports.PostProcessingHandler=e.PostProcessingHandler;exports.PostProcessingManager=e.Volume;exports.PreliminaryAction=e.PreliminaryAction;exports.PreliminaryTrigger=e.PreliminaryTrigger;Object.defineProperty(exports,"PreviewHelper",{enumerable:!0,get:()=>e.PreviewHelper});exports.PrimitiveType=e.PrimitiveType;exports.Progress=e.Progress;exports.PromiseAllWithErrors=e.PromiseAllWithErrors;exports.PromiseErrorResult=e.PromiseErrorResult;exports.RGBAColor=e.RGBAColor;exports.RapierPhysics=e.RapierPhysics;exports.RawImage=e.RawImage;exports.RaycastOptions=e.RaycastOptions;exports.Rect=e.Rect;exports.RectTransform=e.RectTransform;exports.ReflectionProbe=e.ReflectionProbe;exports.RegisteredAnimationInfo=e.RegisteredAnimationInfo;exports.RemoteSkybox=e.RemoteSkybox;exports.RenderTexture=e.RenderTexture;exports.RenderTextureSerializer=e.RenderTextureSerializer;exports.Renderer=e.Renderer;exports.RendererData=e.RendererData;exports.RendererLightmap=e.RendererLightmap;exports.Rigidbody=e.Rigidbody;exports.RigidbodyConstraints=e.RigidbodyConstraints;exports.RoomEvents=e.RoomEvents;exports.RotationBySpeedModule=e.RotationBySpeedModule;exports.RotationOverLifetimeModule=e.RotationOverLifetimeModule;exports.SceneLightSettings=e.SceneLightSettings;exports.SceneSwitcher=e.SceneSwitcher;exports.ScreenCapture=e.ScreenCapture;exports.ScreenSpaceAmbientOcclusion=e.ScreenSpaceAmbientOcclusion;exports.ScreenSpaceAmbientOcclusionN8=e.ScreenSpaceAmbientOcclusionN8;exports.SendQueue=e.SendQueue;exports.SerializationContext=e.SerializationContext;exports.SetActiveOnClick=e.SetActiveOnClick;exports.ShadowCatcher=e.ShadowCatcher;exports.ShapeModule=e.ShapeModule;exports.SharpeningEffect=e.SharpeningEffect;exports.SignalAsset=e.SignalAsset;exports.SignalReceiver=e.SignalReceiver;exports.SignalReceiverEvent=e.SignalReceiverEvent;exports.SignalTrackHandler=e.SignalTrackHandler;exports.Size=e.Size;exports.SizeBySpeedModule=e.SizeBySpeedModule;exports.SizeOverLifetimeModule=e.SizeOverLifetimeModule;exports.SkinnedMeshRenderer=e.SkinnedMeshRenderer;exports.SmoothFollow=e.SmoothFollow;exports.SpatialGrabRaycaster=e.SpatialGrabRaycaster;exports.SpatialHtml=e.SpatialHtml;exports.SpatialTrigger=e.SpatialTrigger;exports.SpatialTriggerReceiver=e.SpatialTriggerReceiver;exports.SpectatorCamera=e.SpectatorCamera;exports.SphereCollider=e.SphereCollider;exports.SphereIntersection=e.SphereIntersection;exports.SphereOverlapResult=e.SphereOverlapResult;exports.Sprite=e.Sprite;exports.SpriteData=e.SpriteData;exports.SpriteRenderer=e.SpriteRenderer;exports.SpriteSheet=e.SpriteSheet;exports.StateMachineBehaviour=e.StateMachineBehaviour;exports.StreamEndedEvent=e.StreamEndedEvent;exports.StreamReceivedEvent=e.StreamReceivedEvent;exports.SubEmitterSystem=e.SubEmitterSystem;exports.SyncedCamera=e.SyncedCamera;exports.SyncedRoom=e.SyncedRoom;exports.SyncedTransform=e.SyncedTransform;exports.TapGestureTrigger=e.TapGestureTrigger;exports.TeleportTarget=e.TeleportTarget;exports.TestRunner=e.TestRunner;exports.TestSceneUtils=e.TestSceneUtils;exports.TestSimulateUserData=e.TestSimulateUserData;exports.Text=e.Text;exports.TextBuilder=e.TextBuilder;exports.TextExtension=e.TextExtension;exports.TextureSheetAnimationModule=e.TextureSheetAnimationModule;exports.TiltShiftEffect=e.TiltShiftEffect;exports.Time=e.Time;exports.ToneMappingEffect=e.ToneMappingEffect;exports.TrackHandler=e.TrackHandler;exports.TrackType=e.TrackType;exports.TrailModule=e.TrailModule;exports.TransformData=e.TransformData;exports.TransformGizmo=e.TransformGizmo;exports.TriggerBuilder=e.TriggerBuilder;exports.TriggerModel=e.TriggerModel;exports.TypeStore=e.TypeStore;exports.UIRaycastUtils=e.UIRaycastUtils;exports.UIRootComponent=e.UIRootComponent;exports.USDDocument=e.USDDocument;exports.USDObject=e.USDObject;exports.USDWriter=e.USDWriter;exports.USDZExporter=e.USDZExporter;exports.USDZText=e.USDZText;exports.USDZUIExtension=e.USDZUIExtension;exports.UriSerializer=e.UriSerializer;exports.UsageMarker=e.UsageMarker;exports.UserJoinedOrLeftRoomModel=e.UserJoinedOrLeftRoomModel;exports.VERSION=e.VERSION;exports.VariantAction=e.VariantAction;exports.VelocityOverLifetimeModule=e.VelocityOverLifetimeModule;exports.VerticalLayoutGroup=e.VerticalLayoutGroup;exports.VideoPlayer=e.VideoPlayer;exports.ViewDevice=e.ViewDevice;exports.Vignette=e.Vignette;exports.VisibilityAction=e.VisibilityAction;exports.Voip=e.Voip;exports.Volume=e.Volume;exports.VolumeParameter=e.VolumeParameter;exports.VolumeProfile=e.VolumeProfile;exports.WaitForFrames=e.WaitForFrames;exports.WaitForPromise=e.WaitForPromise;exports.WaitForSeconds=e.WaitForSeconds;exports.Watch=e.Watch;exports.WebARCameraBackground=e.WebARCameraBackground;exports.WebARSessionRoot=e.WebARSessionRoot;exports.WebXR=e.WebXR;exports.WebXRButtonFactory=e.WebXRButtonFactory;exports.WebXRImageTracking=e.WebXRImageTracking;exports.WebXRImageTrackingModel=e.WebXRImageTrackingModel;exports.WebXRPlaneTracking=e.WebXRPlaneTracking;exports.WebXRTrackedImage=e.WebXRTrackedImage;exports.XRControllerFollow=e.XRControllerFollow;exports.XRControllerModel=e.XRControllerModel;exports.XRControllerMovement=e.XRControllerMovement;exports.XRFlag=e.XRFlag;exports.XRRig=e.XRRig;exports.XRState=e.XRState;exports.XRStateFlag=e.XRStateFlag;exports.__Ignore=e.__Ignore;exports.__internalNotifyObjectDestroyed=e.__internalNotifyObjectDestroyed;exports.activeInHierarchyFieldName=e.activeInHierarchyFieldName;exports.addAttributeChangeCallback=e.addAttributeChangeCallback;exports.addComponent=e.addComponent;exports.addCustomExtensionPlugin=e.addCustomExtensionPlugin;exports.addNewComponent=e.addNewComponent;exports.addPatch=e.addPatch;exports.apply=e.apply;exports.applyHMRChanges=e.applyHMRChanges;exports.applyPrototypeExtensions=e.applyPrototypeExtensions;exports.beginListenDestroy=e.beginListenDestroy;exports.beginListenInstantiate=e.beginListenInstantiate;exports.binaryIdentifierCasts=e.binaryIdentifierCasts;exports.build_scene_functions=e.build_scene_functions;exports.builtinComponentKeyName=e.builtinComponentKeyName;exports.calculateProgress01=e.calculateProgress01;exports.clearBalloonMessages=e.clearMessages;exports.clearOverlayMessages=e.clearMessages;exports.colorSerializer=e.colorSerializer;exports.compareAssociation=e.compareAssociation;exports.componentSerializer=e.componentSerializer;exports.copyTexture=e.copyTexture;exports.createMotion=e.createMotion;exports.debugNet=e.debugNet;exports.debugOwner=e.debugOwner;exports.decompressGpuTexture=e.decompressGpuTexture;exports.deepClone=e.deepClone;exports.delay=e.delay;exports.delayForFrames=e.delayForFrames;exports.deserializeObject=e.deserializeObject;exports.destroy=e.destroy;exports.destroyComponentInstance=e.destroyComponentInstance;exports.determineMimeTypeFromExtension=e.determineMimeTypeFromExtension;exports.disposeObjectResources=e.disposeObjectResources;exports.disposeStream=e.disposeStream;exports.editorGuidKeyName=e.editorGuidKeyName;exports.enableSpatialConsole=e.enableSpatialConsole;exports.euler=e.euler;exports.eventListSerializer=e.eventListSerializer;exports.exportAsGLTF=e.exportAsGLTF;exports.findByGuid=e.findByGuid;exports.findObjectOfType=e.findObjectOfType;exports.findObjectsOfType=e.findObjectsOfType;exports.findResourceUsers=e.findResourceUsers;exports.fitObjectIntoVolume=e.fitObjectIntoVolume;exports.foreachComponent=e.foreachComponent;exports.foreachComponentEnumerator=e.foreachComponentEnumerator;exports.forward=e.forward;exports.generateQRCode=e.generateQRCode;exports.generateSeed=e.generateSeed;exports.getBoundingBox=e.getBoundingBox;exports.getCameraController=e.getCameraController;exports.getComponent=e.getComponent;exports.getComponentInChildren=e.getComponentInChildren;exports.getComponentInParent=e.getComponentInParent;exports.getComponents=e.getComponents;exports.getComponentsInChildren=e.getComponentsInChildren;exports.getComponentsInParent=e.getComponentsInParent;exports.getFormattedDate=e.getFormattedDate;exports.getIconElement=e.getIconElement;exports.getIconTexture=e.getIconTexture;exports.getLoader=e.getLoader;exports.getOrAddComponent=e.getOrAddComponent;exports.getParam=e.getParam;exports.getParentHierarchyPath=e.getParentHierarchyPath;exports.getPath=e.getPath;exports.getPeerOptions=e.getPeerOptions;exports.getPeerjsInstance=e.getPeerjsInstance;exports.getResourceUserCount=e.getResourceUserCount;exports.getTempColor=e.getTempColor;exports.getTempQuaternion=e.getTempQuaternion;exports.getTempVector=e.getTempVector;exports.getUrlParams=e.getUrlParams;exports.getVisibleInCustomShadowRendering=e.getVisibleInCustomShadowRendering;exports.getWorldDirection=e.getWorldDirection;exports.getWorldEuler=e.getWorldEuler;exports.getWorldPosition=e.getWorldPosition;exports.getWorldQuaternion=e.getWorldQuaternion;exports.getWorldRotation=e.getWorldRotation;exports.getWorldScale=e.getWorldScale;exports.hasCommercialLicense=e.hasCommercialLicense;exports.hasIndieLicense=e.hasIndieLicense;exports.hasPointerEventComponent=e.hasPointerEventComponent;exports.hasProLicense=e.hasProLicense;exports.hideDebugConsole=e.hideDebugConsole;exports.imageToCanvas=e.imageToCanvas;exports.instantiate=e.instantiate;exports.invokeLoadedImportPluginHooks=e.invokeLoadedImportPluginHooks;exports.invokeXRSessionEnd=e.invokeXRSessionEnd;exports.invokeXRSessionStart=e.invokeXRSessionStart;exports.isActiveInHierarchy=e.isActiveInHierarchy;exports.isActiveSelf=e.isActiveSelf;exports.isAndroidDevice=e.isAndroidDevice;exports.isAnimationAction=e.isAnimationAction;exports.isComponent=e.isComponent;exports.isDebugMode=e.isDebugMode;exports.isDesktop=e.isDesktop;exports.isDestroyed=e.isDestroyed;exports.isDevEnvironment=e.isDevEnvironment;exports.isDisposed=e.isDisposed;exports.isExporting=e.isExporting;exports.isGLTFModel=e.isGLTFModel;exports.isHostedOnGlitch=e.isHostedOnGlitch;exports.isHotReloadEnabled=e.isHotReloadEnabled;exports.isHotReloading=e.isHotReloading;exports.isIPad=e.isIPad;exports.isIconElement=e.isIconElement;exports.isLocalNetwork=e.isLocalNetwork;exports.isMacOS=e.isMacOS;exports.isMobileDevice=e.isMobileDevice;exports.isMozillaXR=e.isMozillaXR;exports.isQuest=e.isQuest;exports.isResourceTrackingEnabled=e.isResourceTrackingEnabled;exports.isSafari=e.isSafari;exports.isUsingInstancing=e.isUsingInstancing;exports.isiOS=e.isiOS;exports.isiPad=e.isiPad;exports.loadAsset=e.loadAsset;exports.loadSync=e.loadSync;exports.logHierarchy=e.logHierarchy;exports.lookAtInverse=e.lookAtInverse;exports.lookAtObject=e.lookAtObject;exports.lookAtScreenPoint=e.lookAtScreenPoint;exports.makeId=e.makeId;exports.makeIdFromRandomWords=e.makeIdFromRandomWords;exports.makeNameSafeForUSD=e.makeNameSafe;exports.markAsInstancedRendered=e.markAsInstancedRendered;exports.microphonePermissionsGranted=e.microphonePermissionsGranted;exports.nameof=e.nameof;exports.nameofFactory=e.nameofFactory;exports.objectSerializer=e.objectSerializer;exports.offXRSessionEnd=e.offXRSessionEnd;exports.offXRSessionStart=e.offXRSessionStart;exports.onAfterRender=e.onAfterRender;exports.onBeforeRender=e.onBeforeRender;exports.onClear=e.onClear;exports.onDestroy=e.onDestroy;exports.onInitialized=e.onInitialized;exports.onStart=e.onStart;exports.onUpdate=e.onUpdate;exports.onXRSessionEnd=e.onXRSessionEnd;exports.onXRSessionStart=e.onXRSessionStart;exports.parseSync=e.parseSync;exports.placeOnSurface=e.placeOnSurface;exports.postprocessFBXMaterials=e.postprocessFBXMaterials;exports.prefix=e.prefix;exports.pushState=e.pushState;exports.randomNumber=e.randomNumber;exports.registerBinaryType=e.registerBinaryType;exports.registerComponent=e.registerComponent;exports.registerComponentExtension=e.registerComponentExtension;exports.registerCustomEffectType=e.registerCustomEffectType;exports.registerExportExtensions=e.registerExportExtensions;exports.registerExtensions=e.registerExtensions;exports.registerHotReloadType=e.registerHotReloadType;exports.registerLoader=e.registerLoader;exports.registerPrefabProvider=e.registerPrefabProvider;exports.registerPrototypeExtensions=e.registerPrototypeExtensions;exports.registerType=e.registerType;exports.relativePathPrefix=e.relativePathPrefix;exports.removeAttributeChangeCallback=e.removeAttributeChangeCallback;exports.removeComponent=e.removeComponent;exports.removeCustomImportExtensionType=e.removeCustomImportExtensionType;exports.removePatch=e.removePatch;exports.resolveUrl=e.resolveUrl;exports.sanitizeString=e.sanitizeString;exports.saveImage=e.saveImage;exports.screenshot=e.screenshot;exports.screenshot2=e.screenshot2;exports.sendDestroyed=e.sendDestroyed;exports.serializable=e.serializable;exports.serializeObject=e.serializeObject;exports.serializeable=e.serializeable;exports.setActive=e.setActive;exports.setAllowBalloonMessages=e.setAllowBalloonMessages;exports.setAllowOverlayMessages=e.setAllowOverlayMessages;exports.setAutoFitEnabled=e.setAutoFitEnabled;exports.setCameraController=e.setCameraController;exports.setDestroyed=e.setDestroyed;exports.setDevEnvironment=e.setDevEnvironment;exports.setDisposable=e.setDisposable;exports.setDontDestroy=e.setDontDestroy;exports.setOrAddParamsToUrl=e.setOrAddParamsToUrl;exports.setParam=e.setParam;exports.setParamWithoutReload=e.setParamWithoutReload;exports.setPeerOptions=e.setPeerOptions;exports.setResourceTrackingEnabled=e.setResourceTrackingEnabled;exports.setState=e.setState;exports.setVisibleInCustomShadowRendering=e.setVisibleInCustomShadowRendering;exports.setWorldEuler=e.setWorldEuler;exports.setWorldPosition=e.setWorldPosition;exports.setWorldPositionXYZ=e.setWorldPositionXYZ;exports.setWorldQuaternion=e.setWorldQuaternion;exports.setWorldQuaternionXYZW=e.setWorldQuaternionXYZW;exports.setWorldRotation=e.setWorldRotation;exports.setWorldRotationXYZ=e.setWorldRotationXYZ;exports.setWorldScale=e.setWorldScale;exports.showBalloonError=e.showBalloonError;exports.showBalloonMessage=e.showBalloonMessage;exports.showBalloonWarning=e.showBalloonWarning;exports.showDebugConsole=e.showDebugConsole;exports.slerp=e.slerp;exports.syncDestroy=e.syncDestroy;exports.syncField=e.syncField;exports.syncInstantiate=e.syncInstantiate;exports.textureToCanvas=e.textureToCanvas;exports.tryCastBinary=e.tryCastBinary;exports.tryDetermineMimetypeFromBinary=e.tryDetermineMimetypeFromBinary;exports.tryDetermineMimetypeFromURL=e.tryDetermineMimetypeFromURL;exports.tryFindObject=e.tryFindObject;exports.tryGetGuid=e.tryGetGuid;exports.unregisterHotReloadType=e.unregisterHotReloadType;exports.unwatchWrite=e.unwatchWrite;exports.useForAutoFit=e.useForAutoFit;exports.validate=e.validate;exports.watchWrite=e.watchWrite;exports.NEEDLE_progressive=a.NEEDLE_progressive;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./needle-engine.bundle-DqD4rb6x.umd.cjs"),a=require("./gltf-progressive-Ccf3INjK.umd.cjs"),s=require("./three-f-JuZtOs.umd.cjs"),o={VERSION:e.VERSION,Context:e.Context,NeedleXRSession:e.NeedleXRSession,assets:{loadFromURL:e.loadAsset},onStart:e.onStart,onUpdate:e.onUpdate,onBeforeRender:e.onBeforeRender,onAfterRender:e.onAfterRender,onInitializedContext:e.onInitialized,onDestroyContext:e.onDestroy,onClearContext:e.onClear};var n;((n=globalThis.Needle)==null?void 0:n.VERSION)!==void 0&&console.warn(`Needle Engine is already imported: ${globalThis.Needle.VERSION}`);function i(t){for(const r in t)o[r]=t[r]}i(e.Component);i(e.Components);for(const t of Object.getOwnPropertyNames(e.GameObject))switch(t){case"prototype":case"constructor":case"length":case"name":continue;default:o[t]=e.GameObject[t];break}if(!globalThis.Needle)globalThis.Needle=o;else for(const t in o)globalThis.Needle[t]=o[t];globalThis.THREE?console.warn("Three.js is already imported"):globalThis.THREE=s.THREE;exports.$physicsKey=e.$physicsKey;exports.ActionBuilder=e.ActionBuilder;exports.ActionCollection=e.ActionCollection;exports.ActionModel=e.ActionModel;exports.Addressables=e.Addressables;exports.AlignmentConstraint=e.AlignmentConstraint;exports.AmbientMode=e.AmbientMode;exports.Animation=e.Animation;exports.AnimationCurve=e.AnimationCurve;exports.AnimationExtension=e.AnimationExtension;exports.AnimationTrackHandler=e.AnimationTrackHandler;exports.AnimationUtils=e.AnimationUtils;exports.Animator=e.Animator;exports.AnimatorConditionMode=e.AnimatorConditionMode;exports.AnimatorController=e.AnimatorController;exports.AnimatorControllerParameterType=e.AnimatorControllerParameterType;exports.AnimatorStateInfo=e.AnimatorStateInfo;exports.Antialiasing=e.Antialiasing;exports.Application=e.Application;exports.AssetDatabase=e.AssetDatabase;exports.AssetReference=e.AssetReference;exports.AudioExtension=e.AudioExtension;exports.AudioListener=e.AudioListener;exports.AudioSource=e.AudioSource;exports.AudioTrackHandler=e.AudioTrackHandler;exports.Avatar=e.Avatar;exports.AvatarBlink_Simple=e.AvatarBlink_Simple;exports.AvatarEyeLook_Rotation=e.AvatarEyeLook_Rotation;exports.AvatarLoader=e.AvatarLoader;exports.AvatarMarker=e.AvatarMarker;exports.AvatarModel=e.AvatarModel;exports.Avatar_Brain_LookAt=e.Avatar_Brain_LookAt;exports.Avatar_MouthShapes=e.Avatar_MouthShapes;exports.Avatar_MustacheShake=e.Avatar_MustacheShake;exports.Avatar_POI=e.Avatar_POI;exports.Axes=e.Axes;exports.AxesHelper=e.AxesHelper;exports.BUILD_TIME=e.BUILD_TIME;exports.BaseUIComponent=e.BaseUIComponent;exports.BasicIKConstraint=e.BasicIKConstraint;exports.BehaviorExtension=e.BehaviorExtension;exports.BehaviorModel=e.BehaviorModel;exports.Behaviour=e.Component$1;Object.defineProperty(exports,"BlobStorage",{enumerable:!0,get:()=>e.BlobStorage});exports.BloomEffect=e.BloomEffect;exports.BoxCollider=e.BoxCollider;exports.BoxGizmo=e.BoxGizmo;exports.BoxHelperComponent=e.BoxHelperComponent;exports.Button=e.Button;exports.ButtonsFactory=e.ButtonsFactory;exports.CallDirection=e.CallDirection;exports.CallInfo=e.CallInfo;exports.Camera=e.Camera;exports.CameraTargetReachedEvent=e.CameraTargetReachedEvent;exports.Canvas=e.Canvas;exports.CanvasGroup=e.CanvasGroup;exports.CapsuleCollider=e.CapsuleCollider;exports.ChangeMaterialOnClick=e.ChangeMaterialOnClick;exports.ChangeTransformOnClick=e.ChangeTransformOnClick;exports.CharacterController=e.CharacterController;exports.CharacterControllerInput=e.CharacterControllerInput;exports.ChromaticAberration=e.ChromaticAberration;exports.CircularBuffer=e.CircularBuffer;exports.ClearFlags=e.ClearFlags;exports.ClipExtrapolation=e.ClipExtrapolation;exports.Collider=e.Collider;exports.Collision=e.Collision;exports.CollisionDetectionMode=e.CollisionDetectionMode;exports.ColorAdjustments=e.ColorAdjustments;exports.ColorBySpeedModule=e.ColorBySpeedModule;exports.ColorOverLifetimeModule=e.ColorOverLifetimeModule;exports.Component=e.Component$1;exports.ComponentLifecycleEvents=e.ComponentLifecycleEvents;exports.ConnectionEvents=e.ConnectionEvents;exports.ContactPoint=e.ContactPoint;exports.ContactShadows=e.ContactShadows;exports.Context=e.Context;exports.ContextArgs=e.ContextArgs;exports.ContextEvent=e.ContextEvent;exports.ContextRegistry=e.ContextRegistry;exports.ControlTrackHandler=e.ControlTrackHandler;exports.CustomBranding=e.CustomBranding;exports.CustomShader=e.CustomShader;exports.DefaultReflectionMode=e.DefaultReflectionMode;exports.Deletable=e.Deletable;exports.DeleteBox=e.DeleteBox;exports.DepthOfField=e.DepthOfField;exports.DeviceFlag=e.DeviceFlag;Object.defineProperty(exports,"DeviceUtilities",{enumerable:!0,get:()=>e.DeviceUtilities});exports.DocumentExtension=e.DocumentExtension;exports.DragControls=e.DragControls;exports.DragMode=e.DragMode;exports.DropListener=e.DropListener;exports.Duplicatable=e.Duplicatable;exports.EffectWrapper=e.EffectWrapper;exports.EmissionModule=e.EmissionModule;exports.EmphasizeOnClick=e.EmphasizeOnClick;exports.EngineLoadingView=e.EngineLoadingView;exports.EnvironmentScene=e.EnvironmentScene;exports.EventList=e.EventList;exports.EventListEvent=e.EventListEvent;exports.EventSystem=e.EventSystem;exports.EventTrigger=e.EventTrigger;exports.FieldWithDefault=e.FieldWithDefault;exports.FileReference=e.FileReference;exports.FileReferenceSerializer=e.FileReferenceSerializer;exports.FileSpawnModel=e.FileSpawnModel;exports.File_Event=e.File_Event;exports.FixedJoint=e.FixedJoint;exports.Fog=e.Fog;exports.FrameEvent=e.FrameEvent;exports.GENERATOR=e.GENERATOR;exports.GameObject=e.GameObject;exports.Gizmos=e.Gizmos;exports.GltfExport=e.GltfExport;exports.GltfExportBox=e.GltfExportBox;exports.Gradient=e.Gradient;exports.Graphic=e.Graphic;exports.GraphicRaycaster=e.GraphicRaycaster;exports.Graphics=e.Graphics;exports.GridHelper=e.GridHelper;exports.GridLayoutGroup=e.GridLayoutGroup;exports.GroundProjectedEnv=e.GroundProjectedEnv;exports.GroupActionModel=e.GroupActionModel;exports.HideFlags=e.HideFlags;exports.HideOnStart=e.HideOnStart;exports.HingeJoint=e.HingeJoint;exports.HorizontalLayoutGroup=e.HorizontalLayoutGroup;exports.HostData=e.HostData;exports.Image=e.Image;exports.ImageReference=e.ImageReference;exports.ImageReferenceSerializer=e.ImageReferenceSerializer;exports.InheritVelocityModule=e.InheritVelocityModule;exports.Input=e.Input;exports.InputEventQueue=e.InputEventQueue;exports.InputEvents=e.InputEvents;exports.InputField=e.InputField;exports.InstanceHandle=e.InstanceHandle;exports.InstancingHandler=e.InstancingHandler;exports.InstancingUtil=e.InstancingUtil;exports.InstantiateEvent=e.InstantiateEvent;exports.InstantiateIdProvider=e.InstantiateIdProvider;exports.InstantiateOptions=e.InstantiateOptions;exports.Interactable=e.Interactable;Object.defineProperty(exports,"InternalScreenshotUtils",{enumerable:!0,get:()=>e.InternalScreenshotUtils});exports.JoinedRoomResponse=e.JoinedRoomResponse;exports.KeyEventArgs=e.KeyEventArgs;exports.Keyframe=e.Keyframe;exports.LODGroup=e.LODGroup;exports.LODModel=e.LODModel;exports.LeftRoomResponse=e.LeftRoomResponse;exports.Light=e.Light;exports.LightData=e.LightData;exports.LimitVelocityOverLifetimeModule=e.LimitVelocityOverLifetimeModule;exports.LoadingElementOptions=e.LoadingElementOptions;exports.LogStats=e.LogStats;exports.LogType=e.LogType;exports.LookAt=e.LookAt;exports.LookAtConstraint=e.LookAtConstraint;exports.MainModule=e.MainModule;exports.MarkerType=e.MarkerType;exports.MaskableGraphic=e.MaskableGraphic;exports.Mathf=e.Mathf;exports.MeshCollider=e.MeshCollider;exports.MeshRenderer=e.MeshRenderer;exports.MinMaxCurve=e.MinMaxCurve;exports.MinMaxGradient=e.MinMaxGradient;Object.defineProperty(exports,"NEEDLE_ENGINE_MODULES",{enumerable:!0,get:()=>e.MODULES});exports.NEKeyboardEvent=e.NEKeyboardEvent;exports.NEPointerEvent=e.NEPointerEvent;exports.NeedleButtonElement=e.NeedleButtonElement;exports.NeedleEngine=e.ContextRegistry;exports.NeedleEngineHTMLElement=e.NeedleEngineHTMLElement;Object.defineProperty(exports,"NeedleEngineModelLoader",{enumerable:!0,get:()=>e.NeedleEngineModelLoader});exports.NeedleMenu=e.NeedleMenu;exports.NeedlePatchesKey=e.NeedlePatchesKey;exports.NeedleUSDZExporter=e.USDZExporter$1;exports.NeedleXRController=e.NeedleXRController;exports.NeedleXRSession=e.NeedleXRSession;exports.NeedleXRSync=e.NeedleXRSync;exports.NeedleXRUtils=e.NeedleXRUtils;exports.NestedGltf=e.NestedGltf;exports.NetworkConnection=e.NetworkConnection;exports.NetworkedStreamEvents=e.NetworkedStreamEvents;exports.NetworkedStreams=e.NetworkedStreams;exports.Networking=e.Networking;exports.NewInstanceModel=e.NewInstanceModel;exports.NoiseModule=e.NoiseModule;exports.ObjectRaycaster=e.ObjectRaycaster;exports.ObjectUtils=e.ObjectUtils;exports.OffsetConstraint=e.OffsetConstraint;exports.OneEuroFilter=e.OneEuroFilter;exports.OneEuroFilterXYZ=e.OneEuroFilterXYZ;exports.OpenURL=e.OpenURL;exports.OrbitControls=e.OrbitControls;exports.Outline=e.Outline;exports.OwnershipEvent=e.OwnershipEvent;exports.OwnershipModel=e.OwnershipModel;exports.PUBLIC_KEY=e.PUBLIC_KEY;exports.Padding=e.Padding;exports.ParticleBurst=e.ParticleBurst;exports.ParticleSubEmitter=e.ParticleSubEmitter;exports.ParticleSystem=e.ParticleSystem;exports.ParticleSystemBaseBehaviour=e.ParticleSystemBaseBehaviour;exports.ParticleSystemRenderer=e.ParticleSystemRenderer;exports.ParticleSystemShapeType=e.ParticleSystemShapeType;exports.PeerHandle=e.PeerHandle;exports.PeerNetworking=e.PeerNetworking;exports.Physics=e.Physics;exports.PhysicsExtension=e.PhysicsExtension;exports.PhysicsMaterialCombine=e.PhysicsMaterialCombine;exports.PixelationEffect=e.PixelationEffect;exports.PlayAnimationOnClick=e.PlayAnimationOnClick;exports.PlayAudioOnClick=e.PlayAudioOnClick;exports.PlayableDirector=e.PlayableDirector;exports.PlayerColor=e.PlayerColor;exports.PlayerState=e.PlayerState;exports.PlayerStateEvent=e.PlayerStateEvent;exports.PlayerSync=e.PlayerSync;exports.PlayerView=e.PlayerView;exports.PlayerViewManager=e.PlayerViewManager;exports.PointerEventData=e.PointerEventData;exports.PointerType=e.PointerType;exports.PostProcessingEffect=e.PostProcessingEffect;exports.PostProcessingHandler=e.PostProcessingHandler;exports.PostProcessingManager=e.Volume;exports.PreliminaryAction=e.PreliminaryAction;exports.PreliminaryTrigger=e.PreliminaryTrigger;Object.defineProperty(exports,"PreviewHelper",{enumerable:!0,get:()=>e.PreviewHelper});exports.PrimitiveType=e.PrimitiveType;exports.Progress=e.Progress;exports.PromiseAllWithErrors=e.PromiseAllWithErrors;exports.PromiseErrorResult=e.PromiseErrorResult;exports.RGBAColor=e.RGBAColor;exports.RapierPhysics=e.RapierPhysics;exports.RawImage=e.RawImage;exports.RaycastOptions=e.RaycastOptions;exports.Rect=e.Rect;exports.RectTransform=e.RectTransform;exports.ReflectionProbe=e.ReflectionProbe;exports.RegisteredAnimationInfo=e.RegisteredAnimationInfo;exports.RemoteSkybox=e.RemoteSkybox;exports.RenderTexture=e.RenderTexture;exports.RenderTextureSerializer=e.RenderTextureSerializer;exports.Renderer=e.Renderer;exports.RendererData=e.RendererData;exports.RendererLightmap=e.RendererLightmap;exports.Rigidbody=e.Rigidbody;exports.RigidbodyConstraints=e.RigidbodyConstraints;exports.RoomEvents=e.RoomEvents;exports.RotationBySpeedModule=e.RotationBySpeedModule;exports.RotationOverLifetimeModule=e.RotationOverLifetimeModule;exports.SceneLightSettings=e.SceneLightSettings;exports.SceneSwitcher=e.SceneSwitcher;exports.ScreenCapture=e.ScreenCapture;exports.ScreenSpaceAmbientOcclusion=e.ScreenSpaceAmbientOcclusion;exports.ScreenSpaceAmbientOcclusionN8=e.ScreenSpaceAmbientOcclusionN8;exports.SendQueue=e.SendQueue;exports.SerializationContext=e.SerializationContext;exports.SetActiveOnClick=e.SetActiveOnClick;exports.ShadowCatcher=e.ShadowCatcher;exports.ShapeModule=e.ShapeModule;exports.SharpeningEffect=e.SharpeningEffect;exports.SignalAsset=e.SignalAsset;exports.SignalReceiver=e.SignalReceiver;exports.SignalReceiverEvent=e.SignalReceiverEvent;exports.SignalTrackHandler=e.SignalTrackHandler;exports.Size=e.Size;exports.SizeBySpeedModule=e.SizeBySpeedModule;exports.SizeOverLifetimeModule=e.SizeOverLifetimeModule;exports.SkinnedMeshRenderer=e.SkinnedMeshRenderer;exports.SmoothFollow=e.SmoothFollow;exports.SpatialGrabRaycaster=e.SpatialGrabRaycaster;exports.SpatialHtml=e.SpatialHtml;exports.SpatialTrigger=e.SpatialTrigger;exports.SpatialTriggerReceiver=e.SpatialTriggerReceiver;exports.SpectatorCamera=e.SpectatorCamera;exports.SphereCollider=e.SphereCollider;exports.SphereIntersection=e.SphereIntersection;exports.SphereOverlapResult=e.SphereOverlapResult;exports.Sprite=e.Sprite;exports.SpriteData=e.SpriteData;exports.SpriteRenderer=e.SpriteRenderer;exports.SpriteSheet=e.SpriteSheet;exports.StateMachineBehaviour=e.StateMachineBehaviour;exports.StreamEndedEvent=e.StreamEndedEvent;exports.StreamReceivedEvent=e.StreamReceivedEvent;exports.SubEmitterSystem=e.SubEmitterSystem;exports.SyncedCamera=e.SyncedCamera;exports.SyncedRoom=e.SyncedRoom;exports.SyncedTransform=e.SyncedTransform;exports.TapGestureTrigger=e.TapGestureTrigger;exports.TeleportTarget=e.TeleportTarget;exports.TestRunner=e.TestRunner;exports.TestSceneUtils=e.TestSceneUtils;exports.TestSimulateUserData=e.TestSimulateUserData;exports.Text=e.Text;exports.TextBuilder=e.TextBuilder;exports.TextExtension=e.TextExtension;exports.TextureSheetAnimationModule=e.TextureSheetAnimationModule;exports.TiltShiftEffect=e.TiltShiftEffect;exports.Time=e.Time;exports.ToneMappingEffect=e.ToneMappingEffect;exports.TrackHandler=e.TrackHandler;exports.TrackType=e.TrackType;exports.TrailModule=e.TrailModule;exports.TransformData=e.TransformData;exports.TransformGizmo=e.TransformGizmo;exports.TriggerBuilder=e.TriggerBuilder;exports.TriggerModel=e.TriggerModel;exports.TypeStore=e.TypeStore;exports.UIRaycastUtils=e.UIRaycastUtils;exports.UIRootComponent=e.UIRootComponent;exports.USDDocument=e.USDDocument;exports.USDObject=e.USDObject;exports.USDWriter=e.USDWriter;exports.USDZExporter=e.USDZExporter;exports.USDZText=e.USDZText;exports.USDZUIExtension=e.USDZUIExtension;exports.UriSerializer=e.UriSerializer;exports.UsageMarker=e.UsageMarker;exports.UserJoinedOrLeftRoomModel=e.UserJoinedOrLeftRoomModel;exports.VERSION=e.VERSION;exports.VariantAction=e.VariantAction;exports.VelocityOverLifetimeModule=e.VelocityOverLifetimeModule;exports.VerticalLayoutGroup=e.VerticalLayoutGroup;exports.VideoPlayer=e.VideoPlayer;exports.ViewDevice=e.ViewDevice;exports.Vignette=e.Vignette;exports.VisibilityAction=e.VisibilityAction;exports.Voip=e.Voip;exports.Volume=e.Volume;exports.VolumeParameter=e.VolumeParameter;exports.VolumeProfile=e.VolumeProfile;exports.WaitForFrames=e.WaitForFrames;exports.WaitForPromise=e.WaitForPromise;exports.WaitForSeconds=e.WaitForSeconds;exports.Watch=e.Watch;exports.WebARCameraBackground=e.WebARCameraBackground;exports.WebARSessionRoot=e.WebARSessionRoot;exports.WebXR=e.WebXR;exports.WebXRButtonFactory=e.WebXRButtonFactory;exports.WebXRImageTracking=e.WebXRImageTracking;exports.WebXRImageTrackingModel=e.WebXRImageTrackingModel;exports.WebXRPlaneTracking=e.WebXRPlaneTracking;exports.WebXRTrackedImage=e.WebXRTrackedImage;exports.XRControllerFollow=e.XRControllerFollow;exports.XRControllerModel=e.XRControllerModel;exports.XRControllerMovement=e.XRControllerMovement;exports.XRFlag=e.XRFlag;exports.XRRig=e.XRRig;exports.XRState=e.XRState;exports.XRStateFlag=e.XRStateFlag;exports.__Ignore=e.__Ignore;exports.__internalNotifyObjectDestroyed=e.__internalNotifyObjectDestroyed;exports.activeInHierarchyFieldName=e.activeInHierarchyFieldName;exports.addAttributeChangeCallback=e.addAttributeChangeCallback;exports.addComponent=e.addComponent;exports.addCustomExtensionPlugin=e.addCustomExtensionPlugin;exports.addNewComponent=e.addNewComponent;exports.addPatch=e.addPatch;exports.apply=e.apply;exports.applyHMRChanges=e.applyHMRChanges;exports.applyPrototypeExtensions=e.applyPrototypeExtensions;exports.beginListenDestroy=e.beginListenDestroy;exports.beginListenInstantiate=e.beginListenInstantiate;exports.binaryIdentifierCasts=e.binaryIdentifierCasts;exports.build_scene_functions=e.build_scene_functions;exports.builtinComponentKeyName=e.builtinComponentKeyName;exports.calculateProgress01=e.calculateProgress01;exports.clearBalloonMessages=e.clearMessages;exports.clearOverlayMessages=e.clearMessages;exports.colorSerializer=e.colorSerializer;exports.compareAssociation=e.compareAssociation;exports.componentSerializer=e.componentSerializer;exports.copyTexture=e.copyTexture;exports.createMotion=e.createMotion;exports.debugNet=e.debugNet;exports.debugOwner=e.debugOwner;exports.decompressGpuTexture=e.decompressGpuTexture;exports.deepClone=e.deepClone;exports.delay=e.delay;exports.delayForFrames=e.delayForFrames;exports.deserializeObject=e.deserializeObject;exports.destroy=e.destroy;exports.destroyComponentInstance=e.destroyComponentInstance;exports.determineMimeTypeFromExtension=e.determineMimeTypeFromExtension;exports.disposeObjectResources=e.disposeObjectResources;exports.disposeStream=e.disposeStream;exports.editorGuidKeyName=e.editorGuidKeyName;exports.enableSpatialConsole=e.enableSpatialConsole;exports.euler=e.euler;exports.eventListSerializer=e.eventListSerializer;exports.exportAsGLTF=e.exportAsGLTF;exports.findByGuid=e.findByGuid;exports.findObjectOfType=e.findObjectOfType;exports.findObjectsOfType=e.findObjectsOfType;exports.findResourceUsers=e.findResourceUsers;exports.fitObjectIntoVolume=e.fitObjectIntoVolume;exports.foreachComponent=e.foreachComponent;exports.foreachComponentEnumerator=e.foreachComponentEnumerator;exports.forward=e.forward;exports.generateQRCode=e.generateQRCode;exports.generateSeed=e.generateSeed;exports.getBoundingBox=e.getBoundingBox;exports.getCameraController=e.getCameraController;exports.getComponent=e.getComponent;exports.getComponentInChildren=e.getComponentInChildren;exports.getComponentInParent=e.getComponentInParent;exports.getComponents=e.getComponents;exports.getComponentsInChildren=e.getComponentsInChildren;exports.getComponentsInParent=e.getComponentsInParent;exports.getFormattedDate=e.getFormattedDate;exports.getIconElement=e.getIconElement;exports.getIconTexture=e.getIconTexture;exports.getLoader=e.getLoader;exports.getOrAddComponent=e.getOrAddComponent;exports.getParam=e.getParam;exports.getParentHierarchyPath=e.getParentHierarchyPath;exports.getPath=e.getPath;exports.getPeerOptions=e.getPeerOptions;exports.getPeerjsInstance=e.getPeerjsInstance;exports.getResourceUserCount=e.getResourceUserCount;exports.getTempColor=e.getTempColor;exports.getTempQuaternion=e.getTempQuaternion;exports.getTempVector=e.getTempVector;exports.getUrlParams=e.getUrlParams;exports.getVisibleInCustomShadowRendering=e.getVisibleInCustomShadowRendering;exports.getWorldDirection=e.getWorldDirection;exports.getWorldEuler=e.getWorldEuler;exports.getWorldPosition=e.getWorldPosition;exports.getWorldQuaternion=e.getWorldQuaternion;exports.getWorldRotation=e.getWorldRotation;exports.getWorldScale=e.getWorldScale;exports.hasCommercialLicense=e.hasCommercialLicense;exports.hasIndieLicense=e.hasIndieLicense;exports.hasPointerEventComponent=e.hasPointerEventComponent;exports.hasProLicense=e.hasProLicense;exports.hideDebugConsole=e.hideDebugConsole;exports.imageToCanvas=e.imageToCanvas;exports.instantiate=e.instantiate;exports.invokeLoadedImportPluginHooks=e.invokeLoadedImportPluginHooks;exports.invokeXRSessionEnd=e.invokeXRSessionEnd;exports.invokeXRSessionStart=e.invokeXRSessionStart;exports.isActiveInHierarchy=e.isActiveInHierarchy;exports.isActiveSelf=e.isActiveSelf;exports.isAndroidDevice=e.isAndroidDevice;exports.isAnimationAction=e.isAnimationAction;exports.isComponent=e.isComponent;exports.isDebugMode=e.isDebugMode;exports.isDesktop=e.isDesktop;exports.isDestroyed=e.isDestroyed;exports.isDevEnvironment=e.isDevEnvironment;exports.isDisposed=e.isDisposed;exports.isExporting=e.isExporting;exports.isGLTFModel=e.isGLTFModel;exports.isHostedOnGlitch=e.isHostedOnGlitch;exports.isHotReloadEnabled=e.isHotReloadEnabled;exports.isHotReloading=e.isHotReloading;exports.isIPad=e.isIPad;exports.isIconElement=e.isIconElement;exports.isLocalNetwork=e.isLocalNetwork;exports.isMacOS=e.isMacOS;exports.isMobileDevice=e.isMobileDevice;exports.isMozillaXR=e.isMozillaXR;exports.isQuest=e.isQuest;exports.isResourceTrackingEnabled=e.isResourceTrackingEnabled;exports.isSafari=e.isSafari;exports.isUsingInstancing=e.isUsingInstancing;exports.isiOS=e.isiOS;exports.isiPad=e.isiPad;exports.loadAsset=e.loadAsset;exports.loadSync=e.loadSync;exports.logHierarchy=e.logHierarchy;exports.lookAtInverse=e.lookAtInverse;exports.lookAtObject=e.lookAtObject;exports.lookAtScreenPoint=e.lookAtScreenPoint;exports.makeId=e.makeId;exports.makeIdFromRandomWords=e.makeIdFromRandomWords;exports.makeNameSafeForUSD=e.makeNameSafe;exports.markAsInstancedRendered=e.markAsInstancedRendered;exports.microphonePermissionsGranted=e.microphonePermissionsGranted;exports.nameof=e.nameof;exports.nameofFactory=e.nameofFactory;exports.objectSerializer=e.objectSerializer;exports.offXRSessionEnd=e.offXRSessionEnd;exports.offXRSessionStart=e.offXRSessionStart;exports.onAfterRender=e.onAfterRender;exports.onBeforeRender=e.onBeforeRender;exports.onClear=e.onClear;exports.onDestroy=e.onDestroy;exports.onInitialized=e.onInitialized;exports.onStart=e.onStart;exports.onUpdate=e.onUpdate;exports.onXRSessionEnd=e.onXRSessionEnd;exports.onXRSessionStart=e.onXRSessionStart;exports.parseSync=e.parseSync;exports.placeOnSurface=e.placeOnSurface;exports.postprocessFBXMaterials=e.postprocessFBXMaterials;exports.prefix=e.prefix;exports.pushState=e.pushState;exports.randomNumber=e.randomNumber;exports.registerBinaryType=e.registerBinaryType;exports.registerComponent=e.registerComponent;exports.registerComponentExtension=e.registerComponentExtension;exports.registerCustomEffectType=e.registerCustomEffectType;exports.registerExportExtensions=e.registerExportExtensions;exports.registerExtensions=e.registerExtensions;exports.registerHotReloadType=e.registerHotReloadType;exports.registerLoader=e.registerLoader;exports.registerPrefabProvider=e.registerPrefabProvider;exports.registerPrototypeExtensions=e.registerPrototypeExtensions;exports.registerType=e.registerType;exports.relativePathPrefix=e.relativePathPrefix;exports.removeAttributeChangeCallback=e.removeAttributeChangeCallback;exports.removeComponent=e.removeComponent;exports.removeCustomImportExtensionType=e.removeCustomImportExtensionType;exports.removePatch=e.removePatch;exports.resolveUrl=e.resolveUrl;exports.sanitizeString=e.sanitizeString;exports.saveImage=e.saveImage;exports.screenshot=e.screenshot;exports.screenshot2=e.screenshot2;exports.sendDestroyed=e.sendDestroyed;exports.serializable=e.serializable;exports.serializeObject=e.serializeObject;exports.serializeable=e.serializeable;exports.setActive=e.setActive;exports.setAllowBalloonMessages=e.setAllowBalloonMessages;exports.setAllowOverlayMessages=e.setAllowOverlayMessages;exports.setAutoFitEnabled=e.setAutoFitEnabled;exports.setCameraController=e.setCameraController;exports.setDestroyed=e.setDestroyed;exports.setDevEnvironment=e.setDevEnvironment;exports.setDisposable=e.setDisposable;exports.setDontDestroy=e.setDontDestroy;exports.setOrAddParamsToUrl=e.setOrAddParamsToUrl;exports.setParam=e.setParam;exports.setParamWithoutReload=e.setParamWithoutReload;exports.setPeerOptions=e.setPeerOptions;exports.setResourceTrackingEnabled=e.setResourceTrackingEnabled;exports.setState=e.setState;exports.setVisibleInCustomShadowRendering=e.setVisibleInCustomShadowRendering;exports.setWorldEuler=e.setWorldEuler;exports.setWorldPosition=e.setWorldPosition;exports.setWorldPositionXYZ=e.setWorldPositionXYZ;exports.setWorldQuaternion=e.setWorldQuaternion;exports.setWorldQuaternionXYZW=e.setWorldQuaternionXYZW;exports.setWorldRotation=e.setWorldRotation;exports.setWorldRotationXYZ=e.setWorldRotationXYZ;exports.setWorldScale=e.setWorldScale;exports.showBalloonError=e.showBalloonError;exports.showBalloonMessage=e.showBalloonMessage;exports.showBalloonWarning=e.showBalloonWarning;exports.showDebugConsole=e.showDebugConsole;exports.slerp=e.slerp;exports.syncDestroy=e.syncDestroy;exports.syncField=e.syncField;exports.syncInstantiate=e.syncInstantiate;exports.textureToCanvas=e.textureToCanvas;exports.tryCastBinary=e.tryCastBinary;exports.tryDetermineMimetypeFromBinary=e.tryDetermineMimetypeFromBinary;exports.tryDetermineMimetypeFromURL=e.tryDetermineMimetypeFromURL;exports.tryFindObject=e.tryFindObject;exports.tryGetGuid=e.tryGetGuid;exports.unregisterHotReloadType=e.unregisterHotReloadType;exports.unwatchWrite=e.unwatchWrite;exports.useForAutoFit=e.useForAutoFit;exports.validate=e.validate;exports.watchWrite=e.watchWrite;exports.NEEDLE_progressive=a.NEEDLE_progressive;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@needle-tools/engine",
|
|
3
|
-
"version": "4.5.
|
|
3
|
+
"version": "4.5.6-next.1d4dc79",
|
|
4
4
|
"description": "Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development with great integrations into editors like Unity or Blender - and can be deployed onto any device! It is flexible, extensible and networking and XR are built-in.",
|
|
5
5
|
"main": "dist/needle-engine.min.js",
|
|
6
6
|
"exports": {
|
|
@@ -40,9 +40,8 @@
|
|
|
40
40
|
"readme": "README.md",
|
|
41
41
|
"scripts": {
|
|
42
42
|
"dev": "npm-watch",
|
|
43
|
-
"build": "npm run build:src && npm run build:dist
|
|
43
|
+
"build": "npm run build:src && npm run build:dist",
|
|
44
44
|
"build:dist": "vite build",
|
|
45
|
-
"build:dist:light": "vite build -- --light --noclear",
|
|
46
45
|
"build:src": "tsc --rootDir ./src --outDir ./lib --noEmit false --declaration",
|
|
47
46
|
"build:license": "node plugins/publish/create-license.mjs",
|
|
48
47
|
"build:components-data": "node plugins/publish/create-component-types.now.mjs",
|
|
@@ -339,7 +339,7 @@ async function waitForLicenseServer(opts) {
|
|
|
339
339
|
}
|
|
340
340
|
if (typeof err?.stack === "string" && err.stack?.includes("staticblitz.com")) {
|
|
341
341
|
if (opts?.loglevel === "verbose") console.log("[needle] INFO: Running in Stackblitz environment, skipping license server check.");
|
|
342
|
-
return
|
|
342
|
+
return { abort: true, error: err }; // Stackblitz does not support the license server
|
|
343
343
|
}
|
|
344
344
|
if (err.cause?.code === "ECONNREFUSED" || err?.message?.includes("ECONNREFUSED")) {
|
|
345
345
|
if (!licenseServerStarted) {
|
|
@@ -356,6 +356,11 @@ async function waitForLicenseServer(opts) {
|
|
|
356
356
|
}
|
|
357
357
|
}
|
|
358
358
|
});
|
|
359
|
+
if (typeof response === "object") {
|
|
360
|
+
if ("abort" in response) {
|
|
361
|
+
return false; // Abort signal was triggered, e.g. in Stackblitz
|
|
362
|
+
}
|
|
363
|
+
}
|
|
359
364
|
if (response) {
|
|
360
365
|
if (opts?.loglevel === "verbose") console.log(`[needle] INFO: License server is running and reachable at ${localServerUrl}`);
|
|
361
366
|
return true;
|
|
@@ -397,7 +402,12 @@ function canRunCLI(opts) {
|
|
|
397
402
|
*/
|
|
398
403
|
async function runCommand(processName, args, opts) {
|
|
399
404
|
if (opts?.loglevel === "verbose") console.log(`[needle-license] INFO: Running command: ${processName} ${args.join(" ")}`);
|
|
400
|
-
const process = spawn(processName, [...args], {
|
|
405
|
+
const process = spawn(processName, [...args], {
|
|
406
|
+
shell: true,
|
|
407
|
+
timeout: 30_000,
|
|
408
|
+
stdio: opts?.loglevel === "verbose" ? "inherit" : "ignore",
|
|
409
|
+
// detached: true,
|
|
410
|
+
});
|
|
401
411
|
return new Promise((resolve, _reject) => {
|
|
402
412
|
process.on('close', (code) => {
|
|
403
413
|
if (opts?.loglevel === "verbose")
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
var Ve=Object.defineProperty,Te=r=>{throw TypeError(r)},qe=(r,e,t)=>e in r?Ve(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,d=(r,e,t)=>qe(r,typeof e!="symbol"?e+"":e,t),Ee=(r,e,t)=>e.has(r)||Te("Cannot "+t),L=(r,e,t)=>(Ee(r,e,"read from private field"),t?t.call(r):e.get(r)),Y=(r,e,t)=>e.has(r)?Te("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(r):e.set(r,t),N=(r,e,t,n)=>(Ee(r,e,"write to private field"),n?n.call(r,t):e.set(r,t),t);import{BufferGeometry as ue,Mesh as J,Texture as re,TextureLoader as Xe,Matrix4 as Ae,Clock as Ke,MeshStandardMaterial as He,Sphere as Ye,Box3 as Pe,Vector3 as U}from"./three-CFtLGNtV.light.min.js";import{DRACOLoader as Je,KTX2Loader as Qe,MeshoptDecoder as Ze,GLTFLoader as pe}from"./three-examples-BnHP6TJv.light.min.js";const et="";globalThis.GLTF_PROGRESSIVE_VERSION=et,console.debug("[gltf-progressive] version -");let W="https://www.gstatic.com/draco/versioned/decoders/1.5.7/",Z="https://www.gstatic.com/basis-universal/versioned/2021-04-15-ba1c3e4/";const tt=W,rt=Z,Be=new URL(W+"draco_decoder.js");Be.searchParams.append("range","true"),fetch(Be,{method:"GET",headers:{Range:"bytes=0-1"}}).catch(r=>{console.debug(`Failed to fetch remote Draco decoder from ${W} (offline: ${typeof navigator<"u"?navigator.onLine:"unknown"})`),W===tt&&Ie("./include/draco/"),Z===rt&&ke("./include/ktx2/")}).finally(()=>{Ce()});function Ie(r){W=r,A&&A[ve]!=W?(console.debug("Updating Draco decoder path to "+r),A[ve]=W,A.setDecoderPath(W),A.preload()):console.debug("Setting Draco decoder path to "+r)}function ke(r){Z=r,k&&k.transcoderPath!=Z?(console.debug("Updating KTX2 transcoder path to "+r),k.setTranscoderPath(Z),k.init()):console.debug("Setting KTX2 transcoder path to "+r)}const ve=Symbol("dracoDecoderPath");let A,ce,k;function Ce(){A||(A=new Je,A[ve]=W,A.setDecoderPath(W),A.setDecoderConfig({type:"js"}),A.preload()),k||(k=new Qe,k.setTranscoderPath(Z),k.init()),ce||(ce=Ze)}function ye(r){return Ce(),r?k.detectSupport(r):r!==null&&console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures might fail"),{dracoLoader:A,ktx2Loader:k,meshoptDecoder:ce}}function xe(r){r.dracoLoader||r.setDRACOLoader(A),r.ktx2Loader||r.setKTX2Loader(k),r.meshoptDecoder||r.setMeshoptDecoder(ce)}const Le=new WeakMap;function De(r,e){let t=Le.get(r);t?t=Object.assign(t,e):t=e,Le.set(r,t)}const Re=pe.prototype.load;function st(...r){const e=Le.get(this);let t=r[0];const n=new URL(t,window.location.href);if(n.hostname.endsWith("needle.tools")){const s=e?.progressive!==void 0?e.progressive:!0,i=e!=null&&e.usecase?e.usecase:"default";s?this.requestHeader.Accept=`*/*;progressive=allowed;usecase=${i}`:this.requestHeader.Accept=`*/*;usecase=${i}`,t=n.toString()}return r[0]=t,Re?.call(this,...r)}pe.prototype.load=st,se("debugprogressive");function se(r){if(typeof window>"u")return!1;const e=new URL(window.location.href).searchParams.get(r);return e==null||e==="0"||e==="false"?!1:e===""?!0:e}function nt(r,e){if(e===void 0||e.startsWith("./")||e.startsWith("http")||r===void 0)return e;const t=r.lastIndexOf("/");if(t>=0){const n=r.substring(0,t+1);for(;n.endsWith("/")&&e.startsWith("/");)e=e.substring(1);return n+e}return e}let de;function ot(){return de!==void 0||(de=/iPhone|iPad|iPod|Android|IEMobile/i.test(navigator.userAgent),se("debugprogressive")&&console.log("[glTF Progressive]: isMobileDevice",de)),de}const it=typeof window>"u"&&typeof document>"u",Me=Symbol("needle:raycast-mesh");function ee(r){return r?.[Me]instanceof ue?r[Me]:null}function at(r,e){if((r.type==="Mesh"||r.type==="SkinnedMesh")&&!ee(r)){const t=ut(e);t.userData={isRaycastMesh:!0},r[Me]=t}}function lt(r=!0){if(r){if(ne)return;const e=ne=J.prototype.raycast;J.prototype.raycast=function(t,n){const s=this,i=ee(s);let o;i&&s.isMesh&&(o=s.geometry,s.geometry=i),e.call(this,t,n),o&&(s.geometry=o)}}else{if(!ne)return;J.prototype.raycast=ne,ne=null}}let ne=null;function ut(r){const e=new ue;for(const t in r.attributes)e.setAttribute(t,r.getAttribute(t));return e.setIndex(r.getIndex()),e}const V=new Array,F="NEEDLE_progressive",y=se("debugprogressive"),we=Symbol("needle-progressive-texture"),oe=new Map,be=new Set;if(y){let r=function(){e+=1,console.log("Toggle LOD level",e,oe),oe.forEach((s,i)=>{for(const o of s.keys){const a=i[o];if(a!=null)if(a.isBufferGeometry===!0){const l=z.getMeshLODInformation(a),u=l?Math.min(e,l.lods.length):0;i["DEBUG:LOD"]=u,l&&(t=Math.max(t,l.lods.length-1))}else i.isMaterial===!0&&(i["DEBUG:LOD"]=e)}}),e>=t&&(e=-1)},e=-1,t=2,n=!1;window.addEventListener("keyup",s=>{s.key==="p"&&r(),s.key==="w"&&(n=!n,be&&be.forEach(i=>{i.name!="BackgroundCubeMaterial"&&i.glyphMap==null&&"wireframe"in i&&(i.wireframe=n)}))})}function je(r,e,t){var n;if(!y)return;oe.has(r)||oe.set(r,{keys:[],sourceId:t});const s=oe.get(r);((n=s?.keys)==null?void 0:n.includes(e))==!1&&s.keys.push(e)}const P=class j{constructor(e,t){d(this,"parser"),d(this,"url"),d(this,"_isLoadingMesh"),d(this,"loadMesh",n=>{var s,i;if(this._isLoadingMesh)return null;const o=(i=(s=this.parser.json.meshes[n])==null?void 0:s.extensions)==null?void 0:i[F];return o?(this._isLoadingMesh=!0,this.parser.getDependency("mesh",n).then(a=>{var l;return this._isLoadingMesh=!1,a&&j.registerMesh(this.url,o.guid,a,(l=o.lods)==null?void 0:l.length,void 0,o),a})):null}),y&&console.log("Progressive extension registered for",t),this.parser=e,this.url=t}get name(){return F}static getMeshLODInformation(e){const t=this.getAssignedLODInformation(e);return t!=null&&t.key?this.lodInfos.get(t.key):null}static getMaterialMinMaxLODsCount(e,t){const n=this,s="LODS:minmax",i=e[s];if(i!=null)return i;if(t||(t={min_count:1/0,max_count:0,lods:[]}),Array.isArray(e)){for(const a of e)this.getMaterialMinMaxLODsCount(a,t);return e[s]=t,t}if(y==="verbose"&&console.log("getMaterialMinMaxLODsCount",e),e.type==="ShaderMaterial"||e.type==="RawShaderMaterial"){const a=e;for(const l of Object.keys(a.uniforms)){const u=a.uniforms[l].value;u?.isTexture===!0&&o(u,t)}}else if(e.isMaterial)for(const a of Object.keys(e)){const l=e[a];l?.isTexture===!0&&o(l,t)}return e[s]=t,t;function o(a,l){const u=n.getAssignedLODInformation(a);if(u){const c=n.lodInfos.get(u.key);if(c&&c.lods){l.min_count=Math.min(l.min_count,c.lods.length),l.max_count=Math.max(l.max_count,c.lods.length);for(let f=0;f<c.lods.length;f++){const x=c.lods[f];x.width&&(l.lods[f]=l.lods[f]||{min_height:1/0,max_height:0},l.lods[f].min_height=Math.min(l.lods[f].min_height,x.height),l.lods[f].max_height=Math.max(l.lods[f].max_height,x.height))}}}}}static hasLODLevelAvailable(e,t){var n;if(Array.isArray(e)){for(const o of e)if(this.hasLODLevelAvailable(o,t))return!0;return!1}if(e.isMaterial===!0){for(const o of Object.keys(e)){const a=e[o];if(a&&a.isTexture&&this.hasLODLevelAvailable(a,t))return!0}return!1}else if(e.isGroup===!0){for(const o of e.children)if(o.isMesh===!0&&this.hasLODLevelAvailable(o,t))return!0}let s,i;if(e.isMesh?s=e.geometry:(e.isBufferGeometry||e.isTexture)&&(s=e),s&&(n=s?.userData)!=null&&n.LODS){const o=s.userData.LODS;if(i=this.lodInfos.get(o.key),t===void 0)return i!=null;if(i)return Array.isArray(i.lods)?t<i.lods.length:t===0}return!1}static assignMeshLOD(e,t){var n;if(!e)return Promise.resolve(null);if(e instanceof J||e.isMesh===!0){const s=e.geometry,i=this.getAssignedLODInformation(s);if(!i)return Promise.resolve(null);for(const o of V)(n=o.onBeforeGetLODMesh)==null||n.call(o,e,t);return e["LOD:requested level"]=t,j.getOrLoadLOD(s,t).then(o=>{if(Array.isArray(o)){const a=i.index||0;o=o[a]}return e["LOD:requested level"]===t&&(delete e["LOD:requested level"],o&&s!=o&&(o?.isBufferGeometry?(e.geometry=o,y&&je(e,"geometry",i.url)):y&&console.error("Invalid LOD geometry",o))),o}).catch(o=>(console.error("Error loading mesh LOD",e,o),null))}else y&&console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh",e);return Promise.resolve(null)}static assignTextureLOD(e,t=0){if(!e)return Promise.resolve(null);if(e.isMesh===!0){const n=e;if(Array.isArray(n.material)){const s=new Array;for(const i of n.material){const o=this.assignTextureLOD(i,t);s.push(o)}return Promise.all(s).then(i=>{const o=new Array;for(const a of i)Array.isArray(a)&&o.push(...a);return o})}else return this.assignTextureLOD(n.material,t)}if(e.isMaterial===!0){const n=e,s=[],i=new Array;if(y&&be.add(n),n.uniforms&&(n.isRawShaderMaterial||n.isShaderMaterial===!0)){const o=n;for(const a of Object.keys(o.uniforms)){const l=o.uniforms[a].value;if(l?.isTexture===!0){const u=this.assignTextureLODForSlot(l,t,n,a).then(c=>(c&&o.uniforms[a].value!=c&&(o.uniforms[a].value=c,o.uniformsNeedUpdate=!0),c));s.push(u),i.push(a)}}}else for(const o of Object.keys(n)){const a=n[o];if(a?.isTexture===!0){const l=this.assignTextureLODForSlot(a,t,n,o);s.push(l),i.push(o)}}return Promise.all(s).then(o=>{const a=new Array;for(let l=0;l<o.length;l++){const u=o[l],c=i[l];u&&u.isTexture===!0?a.push({material:n,slot:c,texture:u,level:t}):a.push({material:n,slot:c,texture:null,level:t})}return a})}if(e instanceof re||e.isTexture===!0){const n=e;return this.assignTextureLODForSlot(n,t,null,null)}return Promise.resolve(null)}static assignTextureLODForSlot(e,t,n,s){return e?.isTexture!==!0?Promise.resolve(null):s==="glyphMap"?Promise.resolve(e):j.getOrLoadLOD(e,t).then(i=>{if(Array.isArray(i))return null;if(i?.isTexture===!0){if(i!=e){if(n&&s){const o=n[s];if(o&&!y){const a=this.getAssignedLODInformation(o);if(a&&a?.level<t)return y==="verbose"&&console.warn("Assigned texture level is already higher: ",a.level,t,n,o,i),null}n[s]=i}if(y&&s&&n){const o=this.getAssignedLODInformation(e);o?je(n,s,o.url):console.warn("No LOD info for texture",e)}}return i}else y=="verbose"&&console.warn("No LOD found for",e,t);return null}).catch(i=>(console.error("Error loading LOD",e,i),null))}afterRoot(e){var t,n;return y&&console.log("AFTER",this.url,e),(t=this.parser.json.textures)==null||t.forEach((s,i)=>{var o;if(s!=null&&s.extensions){const a=s?.extensions[F];if(a){if(!a.lods){y&&console.warn("Texture has no LODs",a);return}let l=!1;for(const u of this.parser.associations.keys())if(u.isTexture===!0){const c=this.parser.associations.get(u);c?.textures===i&&(l=!0,j.registerTexture(this.url,u,(o=a.lods)==null?void 0:o.length,i,a))}l||this.parser.getDependency("texture",i).then(u=>{var c;u&&j.registerTexture(this.url,u,(c=a.lods)==null?void 0:c.length,i,a)})}}}),(n=this.parser.json.meshes)==null||n.forEach((s,i)=>{if(s!=null&&s.extensions){const o=s?.extensions[F];if(o&&o.lods){for(const a of this.parser.associations.keys())if(a.isMesh){const l=this.parser.associations.get(a);l?.meshes===i&&j.registerMesh(this.url,o.guid,a,o.lods.length,l.primitives,o)}}}}),null}static async getOrLoadLOD(e,t){var n,s,i,o;const a=y=="verbose",l=e.userData.LODS;if(!l)return null;const u=l?.key;let c;if(e.isTexture===!0){const f=e;f.source&&f.source[we]&&(c=f.source[we])}if(c||(c=j.lodInfos.get(u)),c){if(t>0){let m=!1;const B=Array.isArray(c.lods);if(B&&t>=c.lods.length?m=!0:B||(m=!0),m)return this.lowresCache.get(u)}const f=Array.isArray(c.lods)?(n=c.lods[t])==null?void 0:n.path:c.lods;if(!f)return y&&!c["missing:uri"]&&(c["missing:uri"]=!0,console.warn("Missing uri for progressive asset for LOD "+t,c)),null;const x=nt(l.url,f);if(x.endsWith(".glb")||x.endsWith(".gltf")){if(!c.guid)return console.warn("missing pointer for glb/gltf texture",c),null;const m=x+"_"+c.guid,B=this.previouslyLoaded.get(m);if(B!==void 0){a&&console.log(`LOD ${t} was already loading/loaded: ${m}`);let v=await B.catch(E=>(console.error(`Error loading LOD ${t} from ${x}
|
|
2
|
-
`,E),null)),S=!1;if(v==null||(v instanceof re&&e instanceof re?(s=v.image)!=null&&s.data||(i=v.source)!=null&&i.data?v=this.copySettings(e,v):(S=!0,this.previouslyLoaded.delete(m)):v instanceof ue&&e instanceof ue&&((o=v.attributes.position)!=null&&o.array||(S=!0,this.previouslyLoaded.delete(m)))),!S)return v}const g=c,p=new Promise(async(v,S)=>{const E=new pe;xe(E),y&&(await new Promise(w=>setTimeout(w,1e3)),a&&console.warn("Start loading (delayed) "+x,g.guid));let G=x;if(g&&Array.isArray(g.lods)){const w=g.lods[t];w.hash&&(G+="?v="+w.hash)}const _=await E.loadAsync(G).catch(w=>(console.error(`Error loading LOD ${t} from ${x}
|
|
3
|
-
`,w),null));if(!_)return null;const D=_.parser;a&&console.log("Loading finished "+x,g.guid);let M=0;if(_.parser.json.textures){let w=!1;for(const h of _.parser.json.textures){if(h!=null&&h.extensions){const b=h?.extensions[F];if(b!=null&&b.guid&&b.guid===g.guid){w=!0;break}}M++}if(w){let h=await D.getDependency("texture",M);return h&&j.assignLODInformation(l.url,h,u,t,void 0,void 0),a&&console.log('change "'+e.name+'" \u2192 "'+h.name+'"',x,M,h,m),e instanceof re&&(h=this.copySettings(e,h)),h&&(h.guid=g.guid),v(h)}else y&&console.warn("Could not find texture with guid",g.guid,_.parser.json)}if(M=0,_.parser.json.meshes){let w=!1;for(const h of _.parser.json.meshes){if(h!=null&&h.extensions){const b=h?.extensions[F];if(b!=null&&b.guid&&b.guid===g.guid){w=!0;break}}M++}if(w){const h=await D.getDependency("mesh",M),b=g;if(a&&console.log(`Loaded Mesh "${h.name}"`,x,M,h,m),h.isMesh===!0){const I=h.geometry;return j.assignLODInformation(l.url,I,u,t,void 0,b.density),v(I)}else{const I=new Array;for(let $=0;$<h.children.length;$++){const Q=h.children[$];if(Q.isMesh===!0){const H=Q.geometry;j.assignLODInformation(l.url,H,u,t,$,b.density),I.push(H)}}return v(I)}}else y&&console.warn("Could not find mesh with guid",g.guid,_.parser.json)}return v(null)});return this.previouslyLoaded.set(m,p),await p}else if(e instanceof re){a&&console.log("Load texture from uri: "+x);const m=await new Xe().loadAsync(x);return m?(m.guid=c.guid,m.flipY=!1,m.needsUpdate=!0,m.colorSpace=e.colorSpace,a&&console.log(c,m)):y&&console.warn("failed loading",x),m}}else y&&console.warn(`Can not load LOD ${t}: no LOD info found for "${u}" ${e.name}`,e.type);return null}static assignLODInformation(e,t,n,s,i,o){if(!t)return;t.userData||(t.userData={});const a=new ct(e,n,s,i,o);t.userData.LODS=a}static getAssignedLODInformation(e){var t;return((t=e?.userData)==null?void 0:t.LODS)||null}static copySettings(e,t){return t?(y&&console.warn(`Copy texture settings
|
|
4
|
-
`,e.uuid,`
|
|
5
|
-
`,t.uuid),t=t.clone(),t.offset=e.offset,t.repeat=e.repeat,t.colorSpace=e.colorSpace,t.magFilter=e.magFilter,t.minFilter=e.minFilter,t.wrapS=e.wrapS,t.wrapT=e.wrapT,t.flipY=e.flipY,t.anisotropy=e.anisotropy,t.mipmaps||(t.generateMipmaps=e.generateMipmaps),t):e}};d(P,"registerTexture",(r,e,t,n,s)=>{if(y&&console.log("> Progressive: register texture",n,e.name,e.uuid,e,s),!e){y&&console.error("gltf-progressive: Register texture without texture");return}e.source&&(e.source[we]=s);const i=s.guid;P.assignLODInformation(r,e,i,t,n,void 0),P.lodInfos.set(i,s),P.lowresCache.set(i,e)}),d(P,"registerMesh",(r,e,t,n,s,i)=>{var o;y&&console.log("> Progressive: register mesh",s,t.name,i,t.uuid,t);const a=t.geometry;if(!a){y&&console.warn("gltf-progressive: Register mesh without geometry");return}a.userData||(a.userData={}),P.assignLODInformation(r,a,e,n,s,i.density),P.lodInfos.set(e,i);let l=P.lowresCache.get(e);l?l.push(t.geometry):l=[t.geometry],P.lowresCache.set(e,l),n>0&&!ee(t)&&at(t,a);for(const u of V)(o=u.onRegisteredNewMesh)==null||o.call(u,t,i)}),d(P,"lodInfos",new Map),d(P,"previouslyLoaded",new Map),d(P,"lowresCache",new Map);let z=P;class ct{constructor(e,t,n,s,i){d(this,"url"),d(this,"key"),d(this,"level"),d(this,"index"),d(this,"density"),this.url=e,this.key=t,this.level=n,s!=null&&(this.index=s),i!=null&&(this.density=i)}}const C=se("debugprogressive"),dt=se("noprogressive"),Oe=Symbol("Needle:LODSManager"),_e=Symbol("Needle:LODState"),q=Symbol("Needle:CurrentLOD"),R={mesh_lod:-1,texture_lod:-1};var O,T,X,Se,te,ie,he,K;let ae=(O=class{constructor(r,e){d(this,"context"),d(this,"renderer"),d(this,"projectionScreenMatrix",new Ae),d(this,"targetTriangleDensity",2e5),d(this,"updateInterval","auto"),Y(this,T,1),d(this,"pause",!1),d(this,"manual",!1),d(this,"_lodchangedlisteners",[]),Y(this,X),Y(this,Se,new Ke),Y(this,te,0),Y(this,ie,0),Y(this,he,0),Y(this,K,0),d(this,"_fpsBuffer",[60,60,60,60,60]),d(this,"_sphere",new Ye),d(this,"_tempBox",new Pe),d(this,"_tempBox2",new Pe),d(this,"tempMatrix",new Ae),d(this,"_tempWorldPosition",new U),d(this,"_tempBoxSize",new U),d(this,"_tempBox2Size",new U),this.renderer=r,this.context={...e}}static getObjectLODState(r){return r[_e]}static addPlugin(r){V.push(r)}static removePlugin(r){const e=V.indexOf(r);e>=0&&V.splice(e,1)}static get(r,e){if(r[Oe])return console.debug("[gltf-progressive] LODsManager already exists for this renderer"),r[Oe];const t=new O(r,{engine:"unknown",...e});return r[Oe]=t,t}get plugins(){return V}addEventListener(r,e){r==="changed"&&this._lodchangedlisteners.push(e)}removeEventListener(r,e){if(r==="changed"){const t=this._lodchangedlisteners.indexOf(e);t>=0&&this._lodchangedlisteners.splice(t,1)}}enable(){if(L(this,X))return;console.debug("[gltf-progressive] Enabling LODsManager for renderer");let r=0;N(this,X,this.renderer.render);const e=this;ye(this.renderer),this.renderer.render=function(t,n){const s=e.renderer.getRenderTarget();(s==null||"isXRRenderTarget"in s&&s.isXRRenderTarget)&&(r=0,N(e,te,L(e,te)+1),N(e,ie,L(e,Se).getDelta()),N(e,he,L(e,he)+L(e,ie)),e._fpsBuffer.shift(),e._fpsBuffer.push(1/L(e,ie)),N(e,K,e._fpsBuffer.reduce((o,a)=>o+a)/e._fpsBuffer.length),C&&L(e,te)%200===0&&console.log("FPS",Math.round(L(e,K)),"Interval:",L(e,T)));const i=r++;L(e,X).call(this,t,n),e.onAfterRender(t,n,i)}}disable(){L(this,X)&&(console.debug("[gltf-progressive] Disabling LODsManager for renderer"),this.renderer.render=L(this,X),N(this,X,void 0))}update(r,e){this.internalUpdate(r,e)}onAfterRender(r,e,t){if(this.pause)return;const n=this.renderer.renderLists.get(r,0).opaque;let s=!0;if(n.length===1){const i=n[0].material;(i.name==="EffectMaterial"||i.name==="CopyShader")&&(s=!1)}if((e.parent&&e.parent.type==="CubeCamera"||t>=1&&e.type==="OrthographicCamera")&&(s=!1),s){if(dt||(this.updateInterval==="auto"?L(this,K)<40&&L(this,T)<10?(N(this,T,L(this,T)+1),C&&console.warn("\u2193 Reducing LOD updates",L(this,T),L(this,K).toFixed(0))):L(this,K)>=60&&L(this,T)>1&&(N(this,T,L(this,T)-1),C&&console.warn("\u2191 Increasing LOD updates",L(this,T),L(this,K).toFixed(0))):N(this,T,this.updateInterval),L(this,T)>0&&L(this,te)%L(this,T)!=0))return;this.internalUpdate(r,e)}}internalUpdate(r,e){var t,n;const s=this.renderer.renderLists.get(r,0),i=s.opaque;this.projectionScreenMatrix.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse);const o=this.targetTriangleDensity;for(const u of i){if(u.material&&(((t=u.geometry)==null?void 0:t.type)==="BoxGeometry"||((n=u.geometry)==null?void 0:n.type)==="BufferGeometry")&&(u.material.name==="SphericalGaussianBlur"||u.material.name=="BackgroundCubeMaterial"||u.material.name==="CubemapFromEquirect"||u.material.name==="EquirectangularToCubeUV")){C&&(u.material["NEEDLE_PROGRESSIVE:IGNORE-WARNING"]||(u.material["NEEDLE_PROGRESSIVE:IGNORE-WARNING"]=!0,console.warn("Ignoring skybox or BLIT object",u,u.material.name,u.material.type)));continue}switch(u.material.type){case"LineBasicMaterial":case"LineDashedMaterial":case"PointsMaterial":case"ShadowMaterial":case"MeshDistanceMaterial":case"MeshDepthMaterial":continue}if(C==="color"&&u.material&&!u.object.progressive_debug_color){u.object.progressive_debug_color=!0;const f=Math.random()*16777215,x=new He({color:f});u.object.material=x}const c=u.object;(c instanceof J||c.isMesh)&&this.updateLODs(r,e,c,o)}const a=s.transparent;for(const u of a){const c=u.object;(c instanceof J||c.isMesh)&&this.updateLODs(r,e,c,o)}const l=s.transmissive;for(const u of l){const c=u.object;(c instanceof J||c.isMesh)&&this.updateLODs(r,e,c,o)}}updateLODs(r,e,t,n){var s,i;t.userData||(t.userData={});let o=t[_e];if(o||(o=new ht,t[_e]=o),o.frames++<2)return;for(const l of V)(s=l.onBeforeUpdateLOD)==null||s.call(l,this.renderer,r,e,t);this.calculateLodLevel(e,t,o,n,R),R.mesh_lod=Math.round(R.mesh_lod),R.texture_lod=Math.round(R.texture_lod),R.mesh_lod>=0&&this.loadProgressiveMeshes(t,R.mesh_lod);let a=R.texture_lod;t.material&&a>=0&&this.loadProgressiveTextures(t.material,a);for(const l of V)(i=l.onAfterUpdatedLOD)==null||i.call(l,this.renderer,r,e,t,R);o.lastLodLevel_Mesh=R.mesh_lod,o.lastLodLevel_Texture=R.texture_lod}loadProgressiveTextures(r,e){if(!r)return;if(Array.isArray(r)){for(const s of r)this.loadProgressiveTextures(s,e);return}let t=!1;(r[q]===void 0||e<r[q])&&(t=!0);const n=r["DEBUG:LOD"];n!=null&&(t=r[q]!=n,e=n),t&&(r[q]=e,z.assignTextureLOD(r,e).then(s=>{this._lodchangedlisteners.forEach(i=>i({type:"texture",level:e,object:r}))}))}loadProgressiveMeshes(r,e){if(!r)return Promise.resolve(null);let t=r[q]!==e;const n=r["DEBUG:LOD"];if(n!=null&&(t=r[q]!=n,e=n),t){r[q]=e;const s=r.geometry;return z.assignMeshLOD(r,e).then(i=>(i&&r[q]==e&&s!=r.geometry&&this._lodchangedlisteners.forEach(o=>o({type:"mesh",level:e,object:r})),i))}return Promise.resolve(null)}static isInside(r,e){const t=r.min,n=r.max,s=(t.x+n.x)*.5,i=(t.y+n.y)*.5;return this._tempPtInside.set(s,i,t.z).applyMatrix4(e).z<0}calculateLodLevel(r,e,t,n,s){var i;if(!e){s.mesh_lod=-1,s.texture_lod=-1;return}if(!r){s.mesh_lod=-1,s.texture_lod=-1;return}let o=10+1,a=!1;if(C&&e["DEBUG:LOD"]!=null)return e["DEBUG:LOD"];const l=z.getMeshLODInformation(e.geometry),u=l?.lods,c=u&&u.length>0,f=z.getMaterialMinMaxLODsCount(e.material),x=f?.min_count!=1/0&&f.min_count>0&&f.max_count>0;if(!c&&!x){s.mesh_lod=0,s.texture_lod=0;return}c||(a=!0,o=0);const m=this.renderer.domElement.clientHeight||this.renderer.domElement.height;let B=e.geometry.boundingBox;if(e.type==="SkinnedMesh"){const g=e;if(!g.boundingBox)g.computeBoundingBox();else if(t.frames%30===0){const p=ee(g),v=g.geometry;p&&(g.geometry=p),g.computeBoundingBox(),g.geometry=v}B=g.boundingBox}if(B){const g=r;if(e.geometry.attributes.color&&e.geometry.attributes.color.count<100&&e.geometry.boundingSphere){this._sphere.copy(e.geometry.boundingSphere),this._sphere.applyMatrix4(e.matrixWorld);const D=r.getWorldPosition(this._tempWorldPosition);if(this._sphere.containsPoint(D)){s.mesh_lod=0,s.texture_lod=0;return}}if(this._tempBox.copy(B),this._tempBox.applyMatrix4(e.matrixWorld),g.isPerspectiveCamera&&O.isInside(this._tempBox,this.projectionScreenMatrix)){s.mesh_lod=0,s.texture_lod=0;return}if(this._tempBox.applyMatrix4(this.projectionScreenMatrix),this.renderer.xr.enabled&&g.isPerspectiveCamera&&g.fov>70){const D=this._tempBox.min,M=this._tempBox.max;let w=D.x,h=D.y,b=M.x,I=M.y;const $=2,Q=1.5,H=(D.x+M.x)*.5,le=(D.y+M.y)*.5;w=(w-H)*$+H,h=(h-le)*$+le,b=(b-H)*$+H,I=(I-le)*$+le;const Fe=w<0&&b>0?0:Math.min(Math.abs(D.x),Math.abs(M.x)),ze=h<0&&I>0?0:Math.min(Math.abs(D.y),Math.abs(M.y)),me=Math.max(Fe,ze);t.lastCentrality=(Q-me)*(Q-me)*(Q-me)}else t.lastCentrality=1;const p=this._tempBox.getSize(this._tempBoxSize);p.multiplyScalar(.5),screen.availHeight>0&&m>0&&p.multiplyScalar(m/screen.availHeight),r.isPerspectiveCamera?p.x*=r.aspect:r.isOrthographicCamera;const v=r.matrixWorldInverse,S=this._tempBox2;S.copy(B),S.applyMatrix4(e.matrixWorld),S.applyMatrix4(v);const E=S.getSize(this._tempBox2Size),G=Math.max(E.x,E.y);if(Math.max(p.x,p.y)!=0&&G!=0&&(p.z=E.z/Math.max(E.x,E.y)*Math.max(p.x,p.y)),t.lastScreenCoverage=Math.max(p.x,p.y,p.z),t.lastScreenspaceVolume.copy(p),t.lastScreenCoverage*=t.lastCentrality,C&&O.debugDrawLine){const D=this.tempMatrix.copy(this.projectionScreenMatrix);D.invert();const M=O.corner0,w=O.corner1,h=O.corner2,b=O.corner3;M.copy(this._tempBox.min),w.copy(this._tempBox.max),w.x=M.x,h.copy(this._tempBox.max),h.y=M.y,b.copy(this._tempBox.max);const I=(M.z+b.z)*.5;M.z=w.z=h.z=b.z=I,M.applyMatrix4(D),w.applyMatrix4(D),h.applyMatrix4(D),b.applyMatrix4(D),O.debugDrawLine(M,w,255),O.debugDrawLine(M,h,255),O.debugDrawLine(w,b,255),O.debugDrawLine(h,b,255)}let _=999;if(u&&t.lastScreenCoverage>0){for(let D=0;D<u.length;D++)if(u[D].density/t.lastScreenCoverage<n){_=D;break}}_<o&&(o=_,a=!0)}if(a?s.mesh_lod=o:s.mesh_lod=t.lastLodLevel_Mesh,C&&s.mesh_lod!=t.lastLodLevel_Mesh){const g=u?.[s.mesh_lod];g&&console.log(`Mesh LOD changed: ${t.lastLodLevel_Mesh} \u2192 ${s.mesh_lod} (${g.density.toFixed(0)}) - ${e.name}`)}if(x){const g="saveData"in globalThis.navigator&&globalThis.navigator.saveData===!0;if(t.lastLodLevel_Texture<0){if(s.texture_lod=f.max_count-1,C){const p=f.lods[f.max_count-1];C&&console.log(`First Texture LOD ${s.texture_lod} (${p.max_height}px) - ${e.name}`)}}else{const p=t.lastScreenspaceVolume.x+t.lastScreenspaceVolume.y+t.lastScreenspaceVolume.z;let v=t.lastScreenCoverage*4;((i=this.context)==null?void 0:i.engine)==="model-viewer"&&(v*=1.5);const S=m/window.devicePixelRatio*v;let E=!1;for(let G=f.lods.length-1;G>=0;G--){let _=f.lods[G];if(!(g&&_.max_height>=2048)&&!(ot()&&_.max_height>4096)&&(_.max_height>S||!E&&G===0)){if(E=!0,s.texture_lod=G,s.texture_lod<t.lastLodLevel_Texture){const D=_.max_height;C&&console.log(`Texture LOD changed: ${t.lastLodLevel_Texture} \u2192 ${s.texture_lod} = ${D}px
|
|
6
|
-
Screensize: ${S.toFixed(0)}px, Coverage: ${(100*t.lastScreenCoverage).toFixed(2)}%, Volume ${p.toFixed(1)}
|
|
7
|
-
${e.name}`)}break}}}}else s.texture_lod=0}},T=new WeakMap,X=new WeakMap,Se=new WeakMap,te=new WeakMap,ie=new WeakMap,he=new WeakMap,K=new WeakMap,d(O,"debugDrawLine"),d(O,"corner0",new U),d(O,"corner1",new U),d(O,"corner2",new U),d(O,"corner3",new U),d(O,"_tempPtInside",new U),O);class ht{constructor(){d(this,"frames",0),d(this,"lastLodLevel_Mesh",-1),d(this,"lastLodLevel_Texture",-1),d(this,"lastScreenCoverage",0),d(this,"lastScreenspaceVolume",new U),d(this,"lastCentrality",0)}}const Ge=Symbol("NEEDLE_mesh_lod"),ge=Symbol("NEEDLE_texture_lod");let fe=null;function We(){const r=gt();r&&(r.mapURLs(function(e){return $e(),e}),$e(),fe?.disconnect(),fe=new MutationObserver(e=>{e.forEach(t=>{t.addedNodes.forEach(n=>{n instanceof HTMLElement&&n.tagName.toLowerCase()==="model-viewer"&&Ue(n)})})}),fe.observe(document,{childList:!0,subtree:!0}))}function gt(){return typeof customElements>"u"?null:customElements.get("model-viewer")||(customElements.whenDefined("model-viewer").then(()=>{console.debug("[gltf-progressive] model-viewer defined"),We()}),null)}function $e(){typeof document>"u"||document.querySelectorAll("model-viewer").forEach(r=>{Ue(r)})}const Ne=new WeakSet;let ft=0;function Ue(r){if(!r||Ne.has(r))return null;Ne.add(r),console.debug("[gltf-progressive] found new model-viewer..."+ ++ft+`
|
|
8
|
-
`,r.getAttribute("src"));let e=null,t=null,n=null;for(let s=r;s!=null;s=Object.getPrototypeOf(s)){const i=Object.getOwnPropertySymbols(s),o=i.find(u=>u.toString()=="Symbol(renderer)"),a=i.find(u=>u.toString()=="Symbol(scene)"),l=i.find(u=>u.toString()=="Symbol(needsRender)");!e&&o!=null&&(e=r[o].threeRenderer),!t&&a!=null&&(t=r[a]),!n&&l!=null&&(n=r[l])}if(e&&t){let s=function(){if(n){let o=0,a=setInterval(()=>{if(o++>5){clearInterval(a);return}n?.call(r)},300)}};console.debug("[gltf-progressive] setup model-viewer");const i=ae.get(e,{engine:"model-viewer"});return ae.addPlugin(new mt),i.enable(),i.addEventListener("changed",()=>{n?.call(r)}),r.addEventListener("model-visibility",o=>{o.detail.visible&&n?.call(r)}),r.addEventListener("load",()=>{s()}),()=>{i.disable()}}return null}class mt{constructor(){d(this,"_didWarnAboutMissingUrl",!1)}onBeforeUpdateLOD(e,t,n,s){this.tryParseMeshLOD(t,s),this.tryParseTextureLOD(t,s)}getUrl(e){if(!e)return null;let t=e.getAttribute("src");return t||(t=e.src),t||(this._didWarnAboutMissingUrl||console.warn("No url found in modelviewer",e),this._didWarnAboutMissingUrl=!0),t}tryGetCurrentGLTF(e){return e._currentGLTF}tryGetCurrentModelViewer(e){return e.element}tryParseTextureLOD(e,t){if(t[ge]==!0)return;t[ge]=!0;const n=this.tryGetCurrentGLTF(e),s=this.tryGetCurrentModelViewer(e),i=this.getUrl(s);if(i&&n&&t.material){let o=function(l){var u,c,f;if(l[ge]==!0)return;l[ge]=!0,l.userData&&(l.userData.LOD=-1);const x=Object.keys(l);for(let m=0;m<x.length;m++){const B=x[m],g=l[B];if(g?.isTexture===!0){const p=(c=(u=g.userData)==null?void 0:u.associations)==null?void 0:c.textures;if(p==null)continue;const v=n.parser.json.textures[p];if(!v){console.warn("Texture data not found for texture index "+p);continue}if((f=v?.extensions)!=null&&f[F]){const S=v.extensions[F];S&&i&&z.registerTexture(i,g,S.lods.length,p,S)}}}};const a=t.material;if(Array.isArray(a))for(const l of a)o(l);else o(a)}}tryParseMeshLOD(e,t){var n,s;if(t[Ge]==!0)return;t[Ge]=!0;const i=this.tryGetCurrentModelViewer(e),o=this.getUrl(i);if(!o)return;const a=(s=(n=t.userData)==null?void 0:n.gltfExtensions)==null?void 0:s[F];if(a&&o){const l=t.uuid;z.registerMesh(o,l,t,0,a.lods.length,a)}}}function pt(r,e,t,n){ye(e),xe(t),De(t,{progressive:!0,...n?.hints}),t.register(i=>new z(i,r));const s=ae.get(e);return n?.enableLODsManager!==!1&&s.enable(),s}if(We(),!it){const r={gltfProgressive:{useNeedleProgressive:pt,LODsManager:ae,configureLoader:De,getRaycastMesh:ee,useRaycastMeshes:lt}};if(!globalThis.Needle)globalThis.Needle=r;else for(const e in r)globalThis.Needle[e]=r[e]}export{ae as LODsManager,z as NEEDLE_progressive,xe as addDracoAndKTX2Loaders,De as configureLoader,ye as createLoaders,ee as getRaycastMesh,Ie as setDracoDecoderLocation,ke as setKTX2TranscoderLocation};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
"use strict";var ze=Object.defineProperty;var Ae=i=>{throw TypeError(i)};var We=(i,e,t)=>e in i?ze(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var d=(i,e,t)=>We(i,typeof e!="symbol"?e+"":e,t),Pe=(i,e,t)=>e.has(i)||Ae("Cannot "+t);var m=(i,e,t)=>(Pe(i,e,"read from private field"),t?t.call(i):e.get(i)),H=(i,e,t)=>e.has(i)?Ae("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(i):e.set(i,t),N=(i,e,t,r)=>(Pe(i,e,"write to private field"),r?r.call(i,t):e.set(i,t),t);const y=require("./three-Cn7l9Zcu.light.umd.cjs"),Z=require("./three-examples-BEj-FSbn.light.umd.cjs"),Xe="";globalThis.GLTF_PROGRESSIVE_VERSION=Xe;console.debug("[gltf-progressive] version -");let z="https://www.gstatic.com/draco/versioned/decoders/1.5.7/",j="https://www.gstatic.com/basis-universal/versioned/2021-04-15-ba1c3e4/";const qe=z,Ke=j,ke=new URL(z+"draco_decoder.js");ke.searchParams.append("range","true");fetch(ke,{method:"GET",headers:{Range:"bytes=0-1"}}).catch(i=>{console.debug(`Failed to fetch remote Draco decoder from ${z} (offline: ${typeof navigator<"u"?navigator.onLine:"unknown"})`),z===qe&&Ge("./include/draco/"),j===Ke&&Ie("./include/ktx2/")}).finally(()=>{$e()});function Ge(i){z=i,B&&B[we]!=z?(console.debug("Updating Draco decoder path to "+i),B[we]=z,B.setDecoderPath(z),B.preload()):console.debug("Setting Draco decoder path to "+i)}function Ie(i){j=i,$&&$.transcoderPath!=j?(console.debug("Updating KTX2 transcoder path to "+i),$.setTranscoderPath(j),$.init()):console.debug("Setting KTX2 transcoder path to "+i)}const we=Symbol("dracoDecoderPath");let B,he,$;function $e(){B||(B=new Z.DRACOLoader,B[we]=z,B.setDecoderPath(z),B.setDecoderConfig({type:"js"}),B.preload()),$||($=new Z.KTX2Loader,$.setTranscoderPath(j),$.init()),he||(he=Z.MeshoptDecoder)}function be(i){return $e(),i?$.detectSupport(i):i!==null&&console.warn("No renderer provided to detect ktx2 support - loading KTX2 textures might fail"),{dracoLoader:B,ktx2Loader:$,meshoptDecoder:he}}function Se(i){i.dracoLoader||i.setDRACOLoader(B),i.ktx2Loader||i.setKTX2Loader($),i.meshoptDecoder||i.setMeshoptDecoder(he)}const ve=new WeakMap;function Te(i,e){let t=ve.get(i);t?t=Object.assign(t,e):t=e,ve.set(i,t)}const me=Z.GLTFLoader.prototype.load;function Ye(...i){const e=ve.get(this);let t=i[0];const r=new URL(t,window.location.href);if(r.hostname.endsWith("needle.tools")){const s=(e==null?void 0:e.progressive)!==void 0?e.progressive:!0,o=e!=null&&e.usecase?e.usecase:"default";s?this.requestHeader.Accept=`*/*;progressive=allowed;usecase=${o}`:this.requestHeader.Accept=`*/*;usecase=${o}`,t=r.toString()}return i[0]=t,me==null?void 0:me.call(this,...i)}Z.GLTFLoader.prototype.load=Ye;le("debugprogressive");function le(i){if(typeof window>"u")return!1;const t=new URL(window.location.href).searchParams.get(i);return t==null||t==="0"||t==="false"?!1:t===""?!0:t}function He(i,e){if(e===void 0||e.startsWith("./")||e.startsWith("http")||i===void 0)return e;const t=i.lastIndexOf("/");if(t>=0){const r=i.substring(0,t+1);for(;r.endsWith("/")&&e.startsWith("/");)e=e.substring(1);return r+e}return e}let se;function Je(){return se!==void 0||(se=/iPhone|iPad|iPod|Android|IEMobile/i.test(navigator.userAgent),le("debugprogressive")&&console.log("[glTF Progressive]: isMobileDevice",se)),se}const Qe=typeof window>"u"&&typeof document>"u",Oe=Symbol("needle:raycast-mesh");function re(i){return(i==null?void 0:i[Oe])instanceof y.BufferGeometry?i[Oe]:null}function Ze(i,e){if((i.type==="Mesh"||i.type==="SkinnedMesh")&&!re(i)){const r=et(e);r.userData={isRaycastMesh:!0},i[Oe]=r}}function je(i=!0){if(i){if(oe)return;const e=oe=y.Mesh.prototype.raycast;y.Mesh.prototype.raycast=function(t,r){const n=this,s=re(n);let o;s&&n.isMesh&&(o=n.geometry,n.geometry=s),e.call(this,t,r),o&&(n.geometry=o)}}else{if(!oe)return;y.Mesh.prototype.raycast=oe,oe=null}}let oe=null;function et(i){const e=new y.BufferGeometry;for(const t in i.attributes)e.setAttribute(t,i.getAttribute(t));return e.setIndex(i.getIndex()),e}const Q=new Array,X="NEEDLE_progressive",x=le("debugprogressive"),xe=Symbol("needle-progressive-texture"),ie=new Map,_e=new Set;if(x){let i=function(){e+=1,console.log("Toggle LOD level",e,ie),ie.forEach((n,s)=>{for(const o of n.keys){const a=s[o];if(a!=null)if(a.isBufferGeometry===!0){const l=F.getMeshLODInformation(a),u=l?Math.min(e,l.lods.length):0;s["DEBUG:LOD"]=u,l&&(t=Math.max(t,l.lods.length-1))}else s.isMaterial===!0&&(s["DEBUG:LOD"]=e)}}),e>=t&&(e=-1)},e=-1,t=2,r=!1;window.addEventListener("keyup",n=>{n.key==="p"&&i(),n.key==="w"&&(r=!r,_e&&_e.forEach(s=>{s.name!="BackgroundCubeMaterial"&&s.glyphMap==null&&"wireframe"in s&&(s.wireframe=r)}))})}function Ee(i,e,t){var n;if(!x)return;ie.has(i)||ie.set(i,{keys:[],sourceId:t});const r=ie.get(i);((n=r==null?void 0:r.keys)==null?void 0:n.includes(e))==!1&&r.keys.push(e)}const D=class D{constructor(e,t){d(this,"parser");d(this,"url");d(this,"_isLoadingMesh");d(this,"loadMesh",e=>{var r,n;if(this._isLoadingMesh)return null;const t=(n=(r=this.parser.json.meshes[e])==null?void 0:r.extensions)==null?void 0:n[X];return t?(this._isLoadingMesh=!0,this.parser.getDependency("mesh",e).then(s=>{var o;return this._isLoadingMesh=!1,s&&D.registerMesh(this.url,t.guid,s,(o=t.lods)==null?void 0:o.length,void 0,t),s})):null});x&&console.log("Progressive extension registered for",t),this.parser=e,this.url=t}get name(){return X}static getMeshLODInformation(e){const t=this.getAssignedLODInformation(e);return t!=null&&t.key?this.lodInfos.get(t.key):null}static getMaterialMinMaxLODsCount(e,t){const r=this,n="LODS:minmax",s=e[n];if(s!=null)return s;if(t||(t={min_count:1/0,max_count:0,lods:[]}),Array.isArray(e)){for(const a of e)this.getMaterialMinMaxLODsCount(a,t);return e[n]=t,t}if(x==="verbose"&&console.log("getMaterialMinMaxLODsCount",e),e.type==="ShaderMaterial"||e.type==="RawShaderMaterial"){const a=e;for(const l of Object.keys(a.uniforms)){const u=a.uniforms[l].value;(u==null?void 0:u.isTexture)===!0&&o(u,t)}}else if(e.isMaterial)for(const a of Object.keys(e)){const l=e[a];(l==null?void 0:l.isTexture)===!0&&o(l,t)}return e[n]=t,t;function o(a,l){const u=r.getAssignedLODInformation(a);if(u){const c=r.lodInfos.get(u.key);if(c&&c.lods){l.min_count=Math.min(l.min_count,c.lods.length),l.max_count=Math.max(l.max_count,c.lods.length);for(let g=0;g<c.lods.length;g++){const p=c.lods[g];p.width&&(l.lods[g]=l.lods[g]||{min_height:1/0,max_height:0},l.lods[g].min_height=Math.min(l.lods[g].min_height,p.height),l.lods[g].max_height=Math.max(l.lods[g].max_height,p.height))}}}}}static hasLODLevelAvailable(e,t){var s;if(Array.isArray(e)){for(const o of e)if(this.hasLODLevelAvailable(o,t))return!0;return!1}if(e.isMaterial===!0){for(const o of Object.keys(e)){const a=e[o];if(a&&a.isTexture&&this.hasLODLevelAvailable(a,t))return!0}return!1}else if(e.isGroup===!0){for(const o of e.children)if(o.isMesh===!0&&this.hasLODLevelAvailable(o,t))return!0}let r,n;if(e.isMesh?r=e.geometry:(e.isBufferGeometry||e.isTexture)&&(r=e),r&&(s=r==null?void 0:r.userData)!=null&&s.LODS){const o=r.userData.LODS;if(n=this.lodInfos.get(o.key),t===void 0)return n!=null;if(n)return Array.isArray(n.lods)?t<n.lods.length:t===0}return!1}static assignMeshLOD(e,t){var r;if(!e)return Promise.resolve(null);if(e instanceof y.Mesh||e.isMesh===!0){const n=e.geometry,s=this.getAssignedLODInformation(n);if(!s)return Promise.resolve(null);for(const o of Q)(r=o.onBeforeGetLODMesh)==null||r.call(o,e,t);return e["LOD:requested level"]=t,D.getOrLoadLOD(n,t).then(o=>{if(Array.isArray(o)){const a=s.index||0;o=o[a]}return e["LOD:requested level"]===t&&(delete e["LOD:requested level"],o&&n!=o&&((o==null?void 0:o.isBufferGeometry)?(e.geometry=o,x&&Ee(e,"geometry",s.url)):x&&console.error("Invalid LOD geometry",o))),o}).catch(o=>(console.error("Error loading mesh LOD",e,o),null))}else x&&console.error("Invalid call to assignMeshLOD: Request mesh LOD but the object is not a mesh",e);return Promise.resolve(null)}static assignTextureLOD(e,t=0){if(!e)return Promise.resolve(null);if(e.isMesh===!0){const r=e;if(Array.isArray(r.material)){const n=new Array;for(const s of r.material){const o=this.assignTextureLOD(s,t);n.push(o)}return Promise.all(n).then(s=>{const o=new Array;for(const a of s)Array.isArray(a)&&o.push(...a);return o})}else return this.assignTextureLOD(r.material,t)}if(e.isMaterial===!0){const r=e,n=[],s=new Array;if(x&&_e.add(r),r.uniforms&&(r.isRawShaderMaterial||r.isShaderMaterial===!0)){const o=r;for(const a of Object.keys(o.uniforms)){const l=o.uniforms[a].value;if((l==null?void 0:l.isTexture)===!0){const u=this.assignTextureLODForSlot(l,t,r,a).then(c=>(c&&o.uniforms[a].value!=c&&(o.uniforms[a].value=c,o.uniformsNeedUpdate=!0),c));n.push(u),s.push(a)}}}else for(const o of Object.keys(r)){const a=r[o];if((a==null?void 0:a.isTexture)===!0){const l=this.assignTextureLODForSlot(a,t,r,o);n.push(l),s.push(o)}}return Promise.all(n).then(o=>{const a=new Array;for(let l=0;l<o.length;l++){const u=o[l],c=s[l];u&&u.isTexture===!0?a.push({material:r,slot:c,texture:u,level:t}):a.push({material:r,slot:c,texture:null,level:t})}return a})}if(e instanceof y.Texture||e.isTexture===!0){const r=e;return this.assignTextureLODForSlot(r,t,null,null)}return Promise.resolve(null)}static assignTextureLODForSlot(e,t,r,n){return(e==null?void 0:e.isTexture)!==!0?Promise.resolve(null):n==="glyphMap"?Promise.resolve(e):D.getOrLoadLOD(e,t).then(s=>{if(Array.isArray(s))return null;if((s==null?void 0:s.isTexture)===!0){if(s!=e){if(r&&n){const o=r[n];if(o&&!x){const a=this.getAssignedLODInformation(o);if(a&&(a==null?void 0:a.level)<t)return x==="verbose"&&console.warn("Assigned texture level is already higher: ",a.level,t,r,o,s),null}r[n]=s}if(x&&n&&r){const o=this.getAssignedLODInformation(e);o?Ee(r,n,o.url):console.warn("No LOD info for texture",e)}}return s}else x=="verbose"&&console.warn("No LOD found for",e,t);return null}).catch(s=>(console.error("Error loading LOD",e,s),null))}afterRoot(e){var t,r;return x&&console.log("AFTER",this.url,e),(t=this.parser.json.textures)==null||t.forEach((n,s)=>{var o;if(n!=null&&n.extensions){const a=n==null?void 0:n.extensions[X];if(a){if(!a.lods){x&&console.warn("Texture has no LODs",a);return}let l=!1;for(const u of this.parser.associations.keys())if(u.isTexture===!0){const c=this.parser.associations.get(u);(c==null?void 0:c.textures)===s&&(l=!0,D.registerTexture(this.url,u,(o=a.lods)==null?void 0:o.length,s,a))}l||this.parser.getDependency("texture",s).then(u=>{var c;u&&D.registerTexture(this.url,u,(c=a.lods)==null?void 0:c.length,s,a)})}}}),(r=this.parser.json.meshes)==null||r.forEach((n,s)=>{if(n!=null&&n.extensions){const o=n==null?void 0:n.extensions[X];if(o&&o.lods){for(const a of this.parser.associations.keys())if(a.isMesh){const l=this.parser.associations.get(a);(l==null?void 0:l.meshes)===s&&D.registerMesh(this.url,o.guid,a,o.lods.length,l.primitives,o)}}}}),null}static async getOrLoadLOD(e,t){var a,l,u,c;const r=x=="verbose",n=e.userData.LODS;if(!n)return null;const s=n==null?void 0:n.key;let o;if(e.isTexture===!0){const g=e;g.source&&g.source[xe]&&(o=g.source[xe])}if(o||(o=D.lodInfos.get(s)),o){if(t>0){let O=!1;const _=Array.isArray(o.lods);if(_&&t>=o.lods.length?O=!0:_||(O=!0),O)return this.lowresCache.get(s)}const g=Array.isArray(o.lods)?(a=o.lods[t])==null?void 0:a.path:o.lods;if(!g)return x&&!o["missing:uri"]&&(o["missing:uri"]=!0,console.warn("Missing uri for progressive asset for LOD "+t,o)),null;const p=He(n.url,g);if(p.endsWith(".glb")||p.endsWith(".gltf")){if(!o.guid)return console.warn("missing pointer for glb/gltf texture",o),null;const O=p+"_"+o.guid,_=this.previouslyLoaded.get(O);if(_!==void 0){r&&console.log(`LOD ${t} was already loading/loaded: ${O}`);let h=await _.catch(V=>(console.error(`Error loading LOD ${t} from ${p}
|
|
2
|
-
`,V),null)),R=!1;if(h==null||(h instanceof y.Texture&&e instanceof y.Texture?(l=h.image)!=null&&l.data||(u=h.source)!=null&&u.data?h=this.copySettings(e,h):(R=!0,this.previouslyLoaded.delete(O)):h instanceof y.BufferGeometry&&e instanceof y.BufferGeometry&&((c=h.attributes.position)!=null&&c.array||(R=!0,this.previouslyLoaded.delete(O)))),!R)return h}const M=o,U=new Promise(async(h,R)=>{const V=new Z.GLTFLoader;Se(V),x&&(await new Promise(T=>setTimeout(T,1e3)),r&&console.warn("Start loading (delayed) "+p,M.guid));let k=p;if(M&&Array.isArray(M.lods)){const T=M.lods[t];T.hash&&(k+="?v="+T.hash)}const P=await V.loadAsync(k).catch(T=>(console.error(`Error loading LOD ${t} from ${p}
|
|
3
|
-
`,T),null));if(!P)return null;const W=P.parser;r&&console.log("Loading finished "+p,M.guid);let S=0;if(P.parser.json.textures){let T=!1;for(const f of P.parser.json.textures){if(f!=null&&f.extensions){const L=f==null?void 0:f.extensions[X];if(L!=null&&L.guid&&L.guid===M.guid){T=!0;break}}S++}if(T){let f=await W.getDependency("texture",S);return f&&D.assignLODInformation(n.url,f,s,t,void 0,void 0),r&&console.log('change "'+e.name+'" → "'+f.name+'"',p,S,f,O),e instanceof y.Texture&&(f=this.copySettings(e,f)),f&&(f.guid=M.guid),h(f)}else x&&console.warn("Could not find texture with guid",M.guid,P.parser.json)}if(S=0,P.parser.json.meshes){let T=!1;for(const f of P.parser.json.meshes){if(f!=null&&f.extensions){const L=f==null?void 0:f.extensions[X];if(L!=null&&L.guid&&L.guid===M.guid){T=!0;break}}S++}if(T){const f=await W.getDependency("mesh",S),L=M;if(r&&console.log(`Loaded Mesh "${f.name}"`,p,S,f,O),f.isMesh===!0){const b=f.geometry;return D.assignLODInformation(n.url,b,s,t,void 0,L.density),h(b)}else{const b=new Array;for(let A=0;A<f.children.length;A++){const E=f.children[A];if(E.isMesh===!0){const Y=E.geometry;D.assignLODInformation(n.url,Y,s,t,A,L.density),b.push(Y)}}return h(b)}}else x&&console.warn("Could not find mesh with guid",M.guid,P.parser.json)}return h(null)});return this.previouslyLoaded.set(O,U),await U}else if(e instanceof y.Texture){r&&console.log("Load texture from uri: "+p);const _=await new y.TextureLoader().loadAsync(p);return _?(_.guid=o.guid,_.flipY=!1,_.needsUpdate=!0,_.colorSpace=e.colorSpace,r&&console.log(o,_)):x&&console.warn("failed loading",p),_}}else x&&console.warn(`Can not load LOD ${t}: no LOD info found for "${s}" ${e.name}`,e.type);return null}static assignLODInformation(e,t,r,n,s,o){if(!t)return;t.userData||(t.userData={});const a=new tt(e,r,n,s,o);t.userData.LODS=a}static getAssignedLODInformation(e){var t;return((t=e==null?void 0:e.userData)==null?void 0:t.LODS)||null}static copySettings(e,t){return t?(x&&console.warn(`Copy texture settings
|
|
4
|
-
`,e.uuid,`
|
|
5
|
-
`,t.uuid),t=t.clone(),t.offset=e.offset,t.repeat=e.repeat,t.colorSpace=e.colorSpace,t.magFilter=e.magFilter,t.minFilter=e.minFilter,t.wrapS=e.wrapS,t.wrapT=e.wrapT,t.flipY=e.flipY,t.anisotropy=e.anisotropy,t.mipmaps||(t.generateMipmaps=e.generateMipmaps),t):e}};d(D,"registerTexture",(e,t,r,n,s)=>{if(x&&console.log("> Progressive: register texture",n,t.name,t.uuid,t,s),!t){x&&console.error("gltf-progressive: Register texture without texture");return}t.source&&(t.source[xe]=s);const o=s.guid;D.assignLODInformation(e,t,o,r,n,void 0),D.lodInfos.set(o,s),D.lowresCache.set(o,t)}),d(D,"registerMesh",(e,t,r,n,s,o)=>{var u;x&&console.log("> Progressive: register mesh",s,r.name,o,r.uuid,r);const a=r.geometry;if(!a){x&&console.warn("gltf-progressive: Register mesh without geometry");return}a.userData||(a.userData={}),D.assignLODInformation(e,a,t,n,s,o.density),D.lodInfos.set(t,o);let l=D.lowresCache.get(t);l?l.push(r.geometry):l=[r.geometry],D.lowresCache.set(t,l),n>0&&!re(r)&&Ze(r,a);for(const c of Q)(u=c.onRegisteredNewMesh)==null||u.call(c,r,o)}),d(D,"lodInfos",new Map),d(D,"previouslyLoaded",new Map),d(D,"lowresCache",new Map);let F=D;class tt{constructor(e,t,r,n,s){d(this,"url");d(this,"key");d(this,"level");d(this,"index");d(this,"density");this.url=e,this.key=t,this.level=r,n!=null&&(this.index=n),s!=null&&(this.density=s)}}const G=le("debugprogressive"),rt=le("noprogressive"),De=Symbol("Needle:LODSManager"),Me=Symbol("Needle:LODState"),J=Symbol("Needle:CurrentLOD"),I={mesh_lod:-1,texture_lod:-1};var v,C,q,ge,ee,te,pe,K;let ae=(v=class{constructor(e,t){d(this,"context");d(this,"renderer");d(this,"projectionScreenMatrix",new y.Matrix4);d(this,"targetTriangleDensity",2e5);d(this,"updateInterval","auto");H(this,C,1);d(this,"pause",!1);d(this,"manual",!1);d(this,"_lodchangedlisteners",[]);H(this,q);H(this,ge,new y.Clock);H(this,ee,0);H(this,te,0);H(this,pe,0);H(this,K,0);d(this,"_fpsBuffer",[60,60,60,60,60]);d(this,"_sphere",new y.Sphere);d(this,"_tempBox",new y.Box3);d(this,"_tempBox2",new y.Box3);d(this,"tempMatrix",new y.Matrix4);d(this,"_tempWorldPosition",new y.Vector3);d(this,"_tempBoxSize",new y.Vector3);d(this,"_tempBox2Size",new y.Vector3);this.renderer=e,this.context={...t}}static getObjectLODState(e){return e[Me]}static addPlugin(e){Q.push(e)}static removePlugin(e){const t=Q.indexOf(e);t>=0&&Q.splice(t,1)}static get(e,t){if(e[De])return console.debug("[gltf-progressive] LODsManager already exists for this renderer"),e[De];const r=new v(e,{engine:"unknown",...t});return e[De]=r,r}get plugins(){return Q}addEventListener(e,t){e==="changed"&&this._lodchangedlisteners.push(t)}removeEventListener(e,t){if(e==="changed"){const r=this._lodchangedlisteners.indexOf(t);r>=0&&this._lodchangedlisteners.splice(r,1)}}enable(){if(m(this,q))return;console.debug("[gltf-progressive] Enabling LODsManager for renderer");let e=0;N(this,q,this.renderer.render);const t=this;be(this.renderer),this.renderer.render=function(r,n){const s=t.renderer.getRenderTarget();(s==null||"isXRRenderTarget"in s&&s.isXRRenderTarget)&&(e=0,N(t,ee,m(t,ee)+1),N(t,te,m(t,ge).getDelta()),N(t,pe,m(t,pe)+m(t,te)),t._fpsBuffer.shift(),t._fpsBuffer.push(1/m(t,te)),N(t,K,t._fpsBuffer.reduce((a,l)=>a+l)/t._fpsBuffer.length),G&&m(t,ee)%200===0&&console.log("FPS",Math.round(m(t,K)),"Interval:",m(t,C)));const o=e++;m(t,q).call(this,r,n),t.onAfterRender(r,n,o)}}disable(){m(this,q)&&(console.debug("[gltf-progressive] Disabling LODsManager for renderer"),this.renderer.render=m(this,q),N(this,q,void 0))}update(e,t){this.internalUpdate(e,t)}onAfterRender(e,t,r){if(this.pause)return;const s=this.renderer.renderLists.get(e,0).opaque;let o=!0;if(s.length===1){const a=s[0].material;(a.name==="EffectMaterial"||a.name==="CopyShader")&&(o=!1)}if((t.parent&&t.parent.type==="CubeCamera"||r>=1&&t.type==="OrthographicCamera")&&(o=!1),o){if(rt||(this.updateInterval==="auto"?m(this,K)<40&&m(this,C)<10?(N(this,C,m(this,C)+1),G&&console.warn("↓ Reducing LOD updates",m(this,C),m(this,K).toFixed(0))):m(this,K)>=60&&m(this,C)>1&&(N(this,C,m(this,C)-1),G&&console.warn("↑ Increasing LOD updates",m(this,C),m(this,K).toFixed(0))):N(this,C,this.updateInterval),m(this,C)>0&&m(this,ee)%m(this,C)!=0))return;this.internalUpdate(e,t)}}internalUpdate(e,t){var l,u;const r=this.renderer.renderLists.get(e,0),n=r.opaque;this.projectionScreenMatrix.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse);const s=this.targetTriangleDensity;for(const c of n){if(c.material&&(((l=c.geometry)==null?void 0:l.type)==="BoxGeometry"||((u=c.geometry)==null?void 0:u.type)==="BufferGeometry")&&(c.material.name==="SphericalGaussianBlur"||c.material.name=="BackgroundCubeMaterial"||c.material.name==="CubemapFromEquirect"||c.material.name==="EquirectangularToCubeUV")){G&&(c.material["NEEDLE_PROGRESSIVE:IGNORE-WARNING"]||(c.material["NEEDLE_PROGRESSIVE:IGNORE-WARNING"]=!0,console.warn("Ignoring skybox or BLIT object",c,c.material.name,c.material.type)));continue}switch(c.material.type){case"LineBasicMaterial":case"LineDashedMaterial":case"PointsMaterial":case"ShadowMaterial":case"MeshDistanceMaterial":case"MeshDepthMaterial":continue}if(G==="color"&&c.material&&!c.object.progressive_debug_color){c.object.progressive_debug_color=!0;const p=Math.random()*16777215,O=new y.MeshStandardMaterial({color:p});c.object.material=O}const g=c.object;(g instanceof y.Mesh||g.isMesh)&&this.updateLODs(e,t,g,s)}const o=r.transparent;for(const c of o){const g=c.object;(g instanceof y.Mesh||g.isMesh)&&this.updateLODs(e,t,g,s)}const a=r.transmissive;for(const c of a){const g=c.object;(g instanceof y.Mesh||g.isMesh)&&this.updateLODs(e,t,g,s)}}updateLODs(e,t,r,n){var a,l;r.userData||(r.userData={});let s=r[Me];if(s||(s=new st,r[Me]=s),s.frames++<2)return;for(const u of Q)(a=u.onBeforeUpdateLOD)==null||a.call(u,this.renderer,e,t,r);this.calculateLodLevel(t,r,s,n,I),I.mesh_lod=Math.round(I.mesh_lod),I.texture_lod=Math.round(I.texture_lod),I.mesh_lod>=0&&this.loadProgressiveMeshes(r,I.mesh_lod);let o=I.texture_lod;r.material&&o>=0&&this.loadProgressiveTextures(r.material,o);for(const u of Q)(l=u.onAfterUpdatedLOD)==null||l.call(u,this.renderer,e,t,r,I);s.lastLodLevel_Mesh=I.mesh_lod,s.lastLodLevel_Texture=I.texture_lod}loadProgressiveTextures(e,t){if(!e)return;if(Array.isArray(e)){for(const s of e)this.loadProgressiveTextures(s,t);return}let r=!1;(e[J]===void 0||t<e[J])&&(r=!0);const n=e["DEBUG:LOD"];n!=null&&(r=e[J]!=n,t=n),r&&(e[J]=t,F.assignTextureLOD(e,t).then(s=>{this._lodchangedlisteners.forEach(o=>o({type:"texture",level:t,object:e}))}))}loadProgressiveMeshes(e,t){if(!e)return Promise.resolve(null);let r=e[J]!==t;const n=e["DEBUG:LOD"];if(n!=null&&(r=e[J]!=n,t=n),r){e[J]=t;const s=e.geometry;return F.assignMeshLOD(e,t).then(o=>(o&&e[J]==t&&s!=e.geometry&&this._lodchangedlisteners.forEach(a=>a({type:"mesh",level:t,object:e})),o))}return Promise.resolve(null)}static isInside(e,t){const r=e.min,n=e.max,s=(r.x+n.x)*.5,o=(r.y+n.y)*.5;return this._tempPtInside.set(s,o,r.z).applyMatrix4(t).z<0}calculateLodLevel(e,t,r,n,s){var U;if(!t){s.mesh_lod=-1,s.texture_lod=-1;return}if(!e){s.mesh_lod=-1,s.texture_lod=-1;return}let a=10+1,l=!1;if(G&&t["DEBUG:LOD"]!=null)return t["DEBUG:LOD"];const u=F.getMeshLODInformation(t.geometry),c=u==null?void 0:u.lods,g=c&&c.length>0,p=F.getMaterialMinMaxLODsCount(t.material),O=(p==null?void 0:p.min_count)!=1/0&&p.min_count>0&&p.max_count>0;if(!g&&!O){s.mesh_lod=0,s.texture_lod=0;return}g||(l=!0,a=0);const _=this.renderer.domElement.clientHeight||this.renderer.domElement.height;let M=t.geometry.boundingBox;if(t.type==="SkinnedMesh"){const w=t;if(!w.boundingBox)w.computeBoundingBox();else if(r.frames%30===0){const h=re(w),R=w.geometry;h&&(w.geometry=h),w.computeBoundingBox(),w.geometry=R}M=w.boundingBox}if(M){const w=e;if(t.geometry.attributes.color&&t.geometry.attributes.color.count<100&&t.geometry.boundingSphere){this._sphere.copy(t.geometry.boundingSphere),this._sphere.applyMatrix4(t.matrixWorld);const f=e.getWorldPosition(this._tempWorldPosition);if(this._sphere.containsPoint(f)){s.mesh_lod=0,s.texture_lod=0;return}}if(this._tempBox.copy(M),this._tempBox.applyMatrix4(t.matrixWorld),w.isPerspectiveCamera&&v.isInside(this._tempBox,this.projectionScreenMatrix)){s.mesh_lod=0,s.texture_lod=0;return}if(this._tempBox.applyMatrix4(this.projectionScreenMatrix),this.renderer.xr.enabled&&w.isPerspectiveCamera&&w.fov>70){const f=this._tempBox.min,L=this._tempBox.max;let b=f.x,A=f.y,E=L.x,Y=L.y;const ce=2,ye=1.5,ue=(f.x+L.x)*.5,fe=(f.y+L.y)*.5;b=(b-ue)*ce+ue,A=(A-fe)*ce+fe,E=(E-ue)*ce+ue,Y=(Y-fe)*ce+fe;const Ve=b<0&&E>0?0:Math.min(Math.abs(f.x),Math.abs(L.x)),Ne=A<0&&Y>0?0:Math.min(Math.abs(f.y),Math.abs(L.y)),Le=Math.max(Ve,Ne);r.lastCentrality=(ye-Le)*(ye-Le)*(ye-Le)}else r.lastCentrality=1;const h=this._tempBox.getSize(this._tempBoxSize);h.multiplyScalar(.5),screen.availHeight>0&&_>0&&h.multiplyScalar(_/screen.availHeight),e.isPerspectiveCamera?h.x*=e.aspect:e.isOrthographicCamera;const R=e.matrixWorldInverse,V=this._tempBox2;V.copy(M),V.applyMatrix4(t.matrixWorld),V.applyMatrix4(R);const k=V.getSize(this._tempBox2Size),P=Math.max(k.x,k.y);if(Math.max(h.x,h.y)!=0&&P!=0&&(h.z=k.z/Math.max(k.x,k.y)*Math.max(h.x,h.y)),r.lastScreenCoverage=Math.max(h.x,h.y,h.z),r.lastScreenspaceVolume.copy(h),r.lastScreenCoverage*=r.lastCentrality,G&&v.debugDrawLine){const f=this.tempMatrix.copy(this.projectionScreenMatrix);f.invert();const L=v.corner0,b=v.corner1,A=v.corner2,E=v.corner3;L.copy(this._tempBox.min),b.copy(this._tempBox.max),b.x=L.x,A.copy(this._tempBox.max),A.y=L.y,E.copy(this._tempBox.max);const Y=(L.z+E.z)*.5;L.z=b.z=A.z=E.z=Y,L.applyMatrix4(f),b.applyMatrix4(f),A.applyMatrix4(f),E.applyMatrix4(f),v.debugDrawLine(L,b,255),v.debugDrawLine(L,A,255),v.debugDrawLine(b,E,255),v.debugDrawLine(A,E,255)}let S=999;if(c&&r.lastScreenCoverage>0){for(let f=0;f<c.length;f++)if(c[f].density/r.lastScreenCoverage<n){S=f;break}}S<a&&(a=S,l=!0)}if(l?s.mesh_lod=a:s.mesh_lod=r.lastLodLevel_Mesh,G&&s.mesh_lod!=r.lastLodLevel_Mesh){const h=c==null?void 0:c[s.mesh_lod];h&&console.log(`Mesh LOD changed: ${r.lastLodLevel_Mesh} → ${s.mesh_lod} (${h.density.toFixed(0)}) - ${t.name}`)}if(O){const w="saveData"in globalThis.navigator&&globalThis.navigator.saveData===!0;if(r.lastLodLevel_Texture<0){if(s.texture_lod=p.max_count-1,G){const h=p.lods[p.max_count-1];G&&console.log(`First Texture LOD ${s.texture_lod} (${h.max_height}px) - ${t.name}`)}}else{const h=r.lastScreenspaceVolume.x+r.lastScreenspaceVolume.y+r.lastScreenspaceVolume.z;let R=r.lastScreenCoverage*4;((U=this.context)==null?void 0:U.engine)==="model-viewer"&&(R*=1.5);const k=_/window.devicePixelRatio*R;let P=!1;for(let W=p.lods.length-1;W>=0;W--){let S=p.lods[W];if(!(w&&S.max_height>=2048)&&!(Je()&&S.max_height>4096)&&(S.max_height>k||!P&&W===0)){if(P=!0,s.texture_lod=W,s.texture_lod<r.lastLodLevel_Texture){const T=S.max_height;G&&console.log(`Texture LOD changed: ${r.lastLodLevel_Texture} → ${s.texture_lod} = ${T}px
|
|
6
|
-
Screensize: ${k.toFixed(0)}px, Coverage: ${(100*r.lastScreenCoverage).toFixed(2)}%, Volume ${h.toFixed(1)}
|
|
7
|
-
${t.name}`)}break}}}}else s.texture_lod=0}},C=new WeakMap,q=new WeakMap,ge=new WeakMap,ee=new WeakMap,te=new WeakMap,pe=new WeakMap,K=new WeakMap,d(v,"debugDrawLine"),d(v,"corner0",new y.Vector3),d(v,"corner1",new y.Vector3),d(v,"corner2",new y.Vector3),d(v,"corner3",new y.Vector3),d(v,"_tempPtInside",new y.Vector3),v);class st{constructor(){d(this,"frames",0);d(this,"lastLodLevel_Mesh",-1);d(this,"lastLodLevel_Texture",-1);d(this,"lastScreenCoverage",0);d(this,"lastScreenspaceVolume",new y.Vector3);d(this,"lastCentrality",0)}}const Ce=Symbol("NEEDLE_mesh_lod"),de=Symbol("NEEDLE_texture_lod");let ne=null;function Fe(){const i=ot();i&&(i.mapURLs(function(e){return Be(),e}),Be(),ne==null||ne.disconnect(),ne=new MutationObserver(e=>{e.forEach(t=>{t.addedNodes.forEach(r=>{r instanceof HTMLElement&&r.tagName.toLowerCase()==="model-viewer"&&Ue(r)})})}),ne.observe(document,{childList:!0,subtree:!0}))}function ot(){if(typeof customElements>"u")return null;const i=customElements.get("model-viewer");return i||(customElements.whenDefined("model-viewer").then(()=>{console.debug("[gltf-progressive] model-viewer defined"),Fe()}),null)}function Be(){if(typeof document>"u")return;document.querySelectorAll("model-viewer").forEach(e=>{Ue(e)})}const Re=new WeakSet;let nt=0;function Ue(i){if(!i||Re.has(i))return null;Re.add(i),console.debug("[gltf-progressive] found new model-viewer..."+ ++nt+`
|
|
8
|
-
`,i.getAttribute("src"));let e=null,t=null,r=null;for(let n=i;n!=null;n=Object.getPrototypeOf(n)){const s=Object.getOwnPropertySymbols(n),o=s.find(u=>u.toString()=="Symbol(renderer)"),a=s.find(u=>u.toString()=="Symbol(scene)"),l=s.find(u=>u.toString()=="Symbol(needsRender)");!e&&o!=null&&(e=i[o].threeRenderer),!t&&a!=null&&(t=i[a]),!r&&l!=null&&(r=i[l])}if(e&&t){let n=function(){if(r){let o=0,a=setInterval(()=>{if(o++>5){clearInterval(a);return}r==null||r.call(i)},300)}};console.debug("[gltf-progressive] setup model-viewer");const s=ae.get(e,{engine:"model-viewer"});return ae.addPlugin(new it),s.enable(),s.addEventListener("changed",()=>{r==null||r.call(i)}),i.addEventListener("model-visibility",o=>{o.detail.visible&&(r==null||r.call(i))}),i.addEventListener("load",()=>{n()}),()=>{s.disable()}}return null}class it{constructor(){d(this,"_didWarnAboutMissingUrl",!1)}onBeforeUpdateLOD(e,t,r,n){this.tryParseMeshLOD(t,n),this.tryParseTextureLOD(t,n)}getUrl(e){if(!e)return null;let t=e.getAttribute("src");return t||(t=e.src),t||(this._didWarnAboutMissingUrl||console.warn("No url found in modelviewer",e),this._didWarnAboutMissingUrl=!0),t}tryGetCurrentGLTF(e){return e._currentGLTF}tryGetCurrentModelViewer(e){return e.element}tryParseTextureLOD(e,t){if(t[de]==!0)return;t[de]=!0;const r=this.tryGetCurrentGLTF(e),n=this.tryGetCurrentModelViewer(e),s=this.getUrl(n);if(s&&r&&t.material){let o=function(l){var c,g,p;if(l[de]==!0)return;l[de]=!0,l.userData&&(l.userData.LOD=-1);const u=Object.keys(l);for(let O=0;O<u.length;O++){const _=u[O],M=l[_];if((M==null?void 0:M.isTexture)===!0){const U=(g=(c=M.userData)==null?void 0:c.associations)==null?void 0:g.textures;if(U==null)continue;const w=r.parser.json.textures[U];if(!w){console.warn("Texture data not found for texture index "+U);continue}if((p=w==null?void 0:w.extensions)!=null&&p[X]){const h=w.extensions[X];h&&s&&F.registerTexture(s,M,h.lods.length,U,h)}}}};const a=t.material;if(Array.isArray(a))for(const l of a)o(l);else o(a)}}tryParseMeshLOD(e,t){var o,a;if(t[Ce]==!0)return;t[Ce]=!0;const r=this.tryGetCurrentModelViewer(e),n=this.getUrl(r);if(!n)return;const s=(a=(o=t.userData)==null?void 0:o.gltfExtensions)==null?void 0:a[X];if(s&&n){const l=t.uuid;F.registerMesh(n,l,t,0,s.lods.length,s)}}}function at(i,e,t,r){be(e),Se(t),Te(t,{progressive:!0,...r==null?void 0:r.hints}),t.register(s=>new F(s,i));const n=ae.get(e);return(r==null?void 0:r.enableLODsManager)!==!1&&n.enable(),n}Fe();if(!Qe){const i={gltfProgressive:{useNeedleProgressive:at,LODsManager:ae,configureLoader:Te,getRaycastMesh:re,useRaycastMeshes:je}};if(!globalThis.Needle)globalThis.Needle=i;else for(const e in i)globalThis.Needle[e]=i[e]}exports.LODsManager=ae;exports.NEEDLE_progressive=F;exports.addDracoAndKTX2Loaders=Se;exports.configureLoader=Te;exports.createLoaders=be;exports.getRaycastMesh=re;exports.setDracoDecoderLocation=Ge;exports.setKTX2TranscoderLocation=Ie;
|