@babylonjs/core 9.10.1 → 9.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Actions/actionManager.d.ts +1 -1
- package/Actions/actionManager.js +8 -5
- package/Actions/actionManager.js.map +1 -1
- package/Animations/animatable.core.d.ts +1 -1
- package/Animations/animatable.core.js +2 -2
- package/Animations/animatable.core.js.map +1 -1
- package/Animations/animationPropertiesOverride.js +1 -1
- package/Animations/animationPropertiesOverride.js.map +1 -1
- package/Animations/animatorAvatar.d.ts +2 -2
- package/Animations/animatorAvatar.js +3 -3
- package/Animations/animatorAvatar.js.map +1 -1
- package/Animations/pathCursor.d.ts +1 -1
- package/Animations/pathCursor.js +1 -1
- package/Animations/pathCursor.js.map +1 -1
- package/Animations/runtimeAnimation.d.ts +1 -1
- package/Animations/runtimeAnimation.js +2 -2
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Audio/analyser.js +1 -1
- package/Audio/analyser.js.map +1 -1
- package/AudioV2/abstractAudio/components/spatialAudioAttacherComponent.js +1 -1
- package/AudioV2/abstractAudio/components/spatialAudioAttacherComponent.js.map +1 -1
- package/AudioV2/abstractAudio/subNodes/audioAnalyzerSubNode.d.ts +2 -0
- package/AudioV2/abstractAudio/subNodes/audioAnalyzerSubNode.js.map +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.d.ts +13 -3
- package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.js +16 -0
- package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.js.map +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.d.ts +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.js +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.js.map +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.d.ts +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.js +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.js.map +1 -1
- package/AudioV2/abstractAudio/subProperties/audioAnalyzer.d.ts +4 -0
- package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js +22 -0
- package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js.map +1 -1
- package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.d.ts +1 -1
- package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js +1 -1
- package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js.map +1 -1
- package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.d.ts +6 -0
- package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.js +22 -5
- package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.js.map +1 -1
- package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js +1 -1
- package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js.map +1 -1
- package/AudioV2/webAudio/webAudioStreamingSound.js +1 -1
- package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
- package/BakedVertexAnimation/vertexAnimationBaker.js +1 -1
- package/BakedVertexAnimation/vertexAnimationBaker.js.map +1 -1
- package/Behaviors/Cameras/bouncingBehavior.js +1 -1
- package/Behaviors/Cameras/bouncingBehavior.js.map +1 -1
- package/Behaviors/Cameras/framingBehavior.d.ts +1 -1
- package/Behaviors/Cameras/framingBehavior.js +2 -2
- package/Behaviors/Cameras/framingBehavior.js.map +1 -1
- package/Behaviors/Cameras/interpolatingBehavior.d.ts +13 -1
- package/Behaviors/Cameras/interpolatingBehavior.js +13 -1
- package/Behaviors/Cameras/interpolatingBehavior.js.map +1 -1
- package/Behaviors/Meshes/attachToBoxBehavior.js +1 -1
- package/Behaviors/Meshes/attachToBoxBehavior.js.map +1 -1
- package/Behaviors/Meshes/baseSixDofDragBehavior.d.ts +3 -3
- package/Behaviors/Meshes/baseSixDofDragBehavior.js +4 -4
- package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
- package/Behaviors/Meshes/followBehavior.js +1 -1
- package/Behaviors/Meshes/followBehavior.js.map +1 -1
- package/Behaviors/Meshes/handConstraintBehavior.js +2 -2
- package/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
- package/Behaviors/Meshes/multiPointerScaleBehavior.js +1 -1
- package/Behaviors/Meshes/multiPointerScaleBehavior.js.map +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.d.ts +3 -3
- package/Behaviors/Meshes/pointerDragBehavior.js +5 -5
- package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
- package/Behaviors/Meshes/sixDofDragBehavior.d.ts +1 -1
- package/Behaviors/Meshes/sixDofDragBehavior.js +2 -2
- package/Behaviors/Meshes/sixDofDragBehavior.js.map +1 -1
- package/Behaviors/Meshes/surfaceMagnetismBehavior.js +1 -1
- package/Behaviors/Meshes/surfaceMagnetismBehavior.js.map +1 -1
- package/Bones/boneIKController.d.ts +1 -1
- package/Bones/boneIKController.js +1 -1
- package/Bones/boneIKController.js.map +1 -1
- package/Bones/boneLookController.d.ts +1 -1
- package/Bones/boneLookController.js +1 -1
- package/Bones/boneLookController.js.map +1 -1
- package/Bones/skeleton.d.ts +2 -2
- package/Bones/skeleton.functions.d.ts +1 -1
- package/Bones/skeleton.functions.js +3 -3
- package/Bones/skeleton.functions.js.map +1 -1
- package/Bones/skeleton.js +3 -4
- package/Bones/skeleton.js.map +1 -1
- package/Buffers/buffer.align.pure.js +6 -0
- package/Buffers/buffer.align.pure.js.map +1 -1
- package/Buffers/buffer.nonFloatVertexBuffers.js +2 -1
- package/Buffers/buffer.nonFloatVertexBuffers.js.map +1 -1
- package/Buffers/buffer.pure.d.ts +8 -0
- package/Buffers/buffer.pure.js +31 -2
- package/Buffers/buffer.pure.js.map +1 -1
- package/Buffers/bufferUtils.js +17 -5
- package/Buffers/bufferUtils.js.map +1 -1
- package/Cameras/Inputs/BaseCameraMouseWheelInput.js +1 -1
- package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js +1 -1
- package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +2 -2
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraKeyboardInput.js +2 -2
- package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraMouseInput.js +2 -2
- package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/followCameraKeyboardMoveInput.js +1 -1
- package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/followCameraMouseWheelInput.js +1 -1
- package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraGamepadInput.js +1 -1
- package/Cameras/Inputs/freeCameraGamepadInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +2 -2
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.js +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseWheelInput.js +1 -1
- package/Cameras/Inputs/freeCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraTouchInput.js +2 -2
- package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
- package/Cameras/Inputs/geospatialCameraKeyboardInput.js +1 -1
- package/Cameras/Inputs/geospatialCameraKeyboardInput.js.map +1 -1
- package/Cameras/Limits/geospatialLimits.d.ts +1 -1
- package/Cameras/Limits/geospatialLimits.js +1 -1
- package/Cameras/Limits/geospatialLimits.js.map +1 -1
- package/Cameras/RigModes/stereoscopicAnaglyphRigMode.js +2 -2
- package/Cameras/RigModes/stereoscopicAnaglyphRigMode.js.map +1 -1
- package/Cameras/RigModes/stereoscopicRigMode.d.ts +1 -1
- package/Cameras/RigModes/stereoscopicRigMode.js +3 -3
- package/Cameras/RigModes/stereoscopicRigMode.js.map +1 -1
- package/Cameras/RigModes/vrRigMode.js +2 -2
- package/Cameras/RigModes/vrRigMode.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +3 -3
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +5 -5
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
- package/Cameras/VR/vrCameraMetrics.d.ts +1 -1
- package/Cameras/VR/vrCameraMetrics.js +1 -1
- package/Cameras/VR/vrCameraMetrics.js.map +1 -1
- package/Cameras/cameraInputsManager.d.ts +1 -1
- package/Cameras/cameraInputsManager.js +1 -1
- package/Cameras/cameraInputsManager.js.map +1 -1
- package/Collisions/collider.d.ts +1 -1
- package/Collisions/collider.js +1 -1
- package/Collisions/collider.js.map +1 -1
- package/Collisions/gpuPicker.d.ts +1 -1
- package/Collisions/gpuPicker.js +5 -5
- package/Collisions/gpuPicker.js.map +1 -1
- package/Collisions/meshCollisionData.d.ts +1 -1
- package/Collisions/meshCollisionData.js +1 -1
- package/Collisions/meshCollisionData.js.map +1 -1
- package/Collisions/pickingInfo.d.ts +1 -1
- package/Collisions/pickingInfo.js +2 -2
- package/Collisions/pickingInfo.js.map +1 -1
- package/Compute/computeEffect.d.ts +6 -0
- package/Compute/computeEffect.js +3 -0
- package/Compute/computeEffect.js.map +1 -1
- package/Compute/computeShader.pure.d.ts +4 -0
- package/Compute/computeShader.pure.js +1 -0
- package/Compute/computeShader.pure.js.map +1 -1
- package/Culling/Octrees/octreeBlock.d.ts +1 -1
- package/Culling/Octrees/octreeBlock.js +1 -1
- package/Culling/Octrees/octreeBlock.js.map +1 -1
- package/Culling/boundingBox.d.ts +1 -1
- package/Culling/boundingBox.js +1 -1
- package/Culling/boundingBox.js.map +1 -1
- package/Culling/boundingInfo.d.ts +1 -1
- package/Culling/boundingInfo.js +1 -1
- package/Culling/boundingInfo.js.map +1 -1
- package/Culling/boundingSphere.d.ts +1 -1
- package/Culling/boundingSphere.js +1 -1
- package/Culling/boundingSphere.js.map +1 -1
- package/Culling/ray.core.d.ts +1 -1
- package/Culling/ray.core.js +1 -1
- package/Culling/ray.core.js.map +1 -1
- package/Debug/axesViewer.d.ts +1 -1
- package/Debug/axesViewer.js +3 -3
- package/Debug/axesViewer.js.map +1 -1
- package/Debug/boneAxesViewer.d.ts +1 -1
- package/Debug/boneAxesViewer.js +1 -1
- package/Debug/boneAxesViewer.js.map +1 -1
- package/Debug/directionalLightFrustumViewer.d.ts +1 -1
- package/Debug/directionalLightFrustumViewer.js +6 -6
- package/Debug/directionalLightFrustumViewer.js.map +1 -1
- package/Debug/rayHelper.d.ts +1 -1
- package/Debug/rayHelper.js +2 -2
- package/Debug/rayHelper.js.map +1 -1
- package/Debug/skeletonViewer.d.ts +2 -2
- package/Debug/skeletonViewer.js +10 -10
- package/Debug/skeletonViewer.js.map +1 -1
- package/DeviceInput/internalDeviceSourceManager.d.ts +1 -1
- package/DeviceInput/internalDeviceSourceManager.js +0 -1
- package/DeviceInput/internalDeviceSourceManager.js.map +1 -1
- package/DeviceInput/webDeviceInputSystem.js +1 -1
- package/DeviceInput/webDeviceInputSystem.js.map +1 -1
- package/Engines/Extensions/engine.views.d.ts +1 -1
- package/Engines/Extensions/engine.views.js +1 -1
- package/Engines/Extensions/engine.views.js.map +1 -1
- package/Engines/Native/nativeHelpers.js +4 -1
- package/Engines/Native/nativeHelpers.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +10 -1
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.computeShader.pure.js +154 -2
- package/Engines/WebGPU/Extensions/engine.computeShader.pure.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +11 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuComputeContext.d.ts +1 -1
- package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
- package/Engines/WebGPU/webgpuTintWASM.js +1 -1
- package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
- package/Engines/abstractEngine.pure.d.ts +7 -1
- package/Engines/abstractEngine.pure.js +34 -4
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/constants.d.ts +4 -0
- package/Engines/constants.js +4 -0
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.pure.d.ts +0 -7
- package/Engines/engine.pure.js +0 -34
- package/Engines/engine.pure.js.map +1 -1
- package/Engines/engineFactory.d.ts +2 -2
- package/Engines/engineFactory.js +3 -3
- package/Engines/engineFactory.js.map +1 -1
- package/Engines/thinNativeEngine.pure.js +15 -8
- package/Engines/thinNativeEngine.pure.js.map +1 -1
- package/Events/pointerEvents.d.ts +1 -1
- package/Events/pointerEvents.js +1 -1
- package/Events/pointerEvents.js.map +1 -1
- package/FlowGraph/Blocks/Data/Utils/flowGraphCodeExecutionBlock.js +1 -1
- package/FlowGraph/Blocks/Data/Utils/flowGraphCodeExecutionBlock.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.d.ts +1 -1
- package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js +1 -1
- package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphKeyboardEventBlock.js +1 -1
- package/FlowGraph/Blocks/Event/flowGraphKeyboardEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.d.ts +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js +3 -3
- package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js.map +1 -1
- package/FlowGraph/CustomTypes/flowGraphMatrix.d.ts +1 -1
- package/FlowGraph/CustomTypes/flowGraphMatrix.js +1 -1
- package/FlowGraph/CustomTypes/flowGraphMatrix.js.map +1 -1
- package/FlowGraph/flowGraphBlock.d.ts +1 -1
- package/FlowGraph/flowGraphBlock.js +1 -1
- package/FlowGraph/flowGraphBlock.js.map +1 -1
- package/FlowGraph/flowGraphExecutionBlock.d.ts +1 -1
- package/FlowGraph/flowGraphExecutionBlock.js +1 -1
- package/FlowGraph/flowGraphExecutionBlock.js.map +1 -1
- package/FlowGraph/flowGraphMath.d.ts +1 -1
- package/FlowGraph/flowGraphMath.js +1 -1
- package/FlowGraph/flowGraphMath.js.map +1 -1
- package/FlowGraph/flowGraphParser.js +1 -1
- package/FlowGraph/flowGraphParser.js.map +1 -1
- package/FlowGraph/flowGraphPathConverterComponent.d.ts +1 -1
- package/FlowGraph/flowGraphPathConverterComponent.js +2 -2
- package/FlowGraph/flowGraphPathConverterComponent.js.map +1 -1
- package/FlowGraph/flowGraphValidator.js.map +1 -1
- package/FlowGraph/serialization.js +4 -4
- package/FlowGraph/serialization.js.map +1 -1
- package/FlowGraph/utils.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.d.ts +2 -2
- package/FrameGraph/Node/nodeRenderGraph.js +7 -7
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.d.ts +30 -0
- package/FrameGraph/Tasks/Layers/baseLayerTask.js +28 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/computeShaderTask.d.ts +2 -2
- package/FrameGraph/Tasks/Misc/computeShaderTask.js +2 -2
- package/FrameGraph/Tasks/Misc/computeShaderTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.d.ts +1 -1
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +2 -2
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/blurTask.d.ts +7 -0
- package/FrameGraph/Tasks/PostProcesses/blurTask.js +8 -1
- package/FrameGraph/Tasks/PostProcesses/blurTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js +1 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.d.ts +2 -2
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js +3 -3
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +1 -1
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +2 -2
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +6 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +14 -5
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.d.ts +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.d.ts +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.js +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.d.ts +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.js +2 -2
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.d.ts +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.js +2 -2
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +7 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +7 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +1 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.js +1 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
- package/FrameGraph/frameGraphRenderContext.js +1 -1
- package/FrameGraph/frameGraphRenderContext.js.map +1 -1
- package/FrameGraph/frameGraphTextureManager.d.ts +1 -1
- package/FrameGraph/frameGraphTextureManager.js +1 -1
- package/FrameGraph/frameGraphTextureManager.js.map +1 -1
- package/Gamepads/gamepadManager.js +1 -1
- package/Gamepads/gamepadManager.js.map +1 -1
- package/Gizmos/axisDragGizmo.d.ts +5 -5
- package/Gizmos/axisDragGizmo.js +6 -6
- package/Gizmos/axisDragGizmo.js.map +1 -1
- package/Gizmos/axisScaleGizmo.d.ts +4 -4
- package/Gizmos/axisScaleGizmo.js +6 -6
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.d.ts +5 -5
- package/Gizmos/boundingBoxGizmo.js +7 -7
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Gizmos/cameraGizmo.d.ts +3 -3
- package/Gizmos/cameraGizmo.js +7 -7
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/gizmo.d.ts +2 -2
- package/Gizmos/gizmo.js +3 -3
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.d.ts +2 -2
- package/Gizmos/gizmoManager.js +2 -2
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/lightGizmo.d.ts +4 -4
- package/Gizmos/lightGizmo.js +11 -11
- package/Gizmos/lightGizmo.js.map +1 -1
- package/Gizmos/planeDragGizmo.d.ts +4 -4
- package/Gizmos/planeDragGizmo.js +5 -5
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Gizmos/positionGizmo.d.ts +1 -1
- package/Gizmos/positionGizmo.js +2 -2
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.d.ts +3 -3
- package/Gizmos/rotationGizmo.js +3 -3
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Gizmos/scaleGizmo.d.ts +2 -2
- package/Gizmos/scaleGizmo.js +4 -4
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Gizmos/spatialAudioGizmo.d.ts +2 -2
- package/Gizmos/spatialAudioGizmo.js +6 -6
- package/Gizmos/spatialAudioGizmo.js.map +1 -1
- package/Helpers/environmentHelper.d.ts +6 -6
- package/Helpers/environmentHelper.js +12 -12
- package/Helpers/environmentHelper.js.map +1 -1
- package/Helpers/materialConversionHelper.d.ts +1 -1
- package/Helpers/materialConversionHelper.js +1 -1
- package/Helpers/materialConversionHelper.js.map +1 -1
- package/Helpers/photoDome.d.ts +1 -1
- package/Helpers/photoDome.js +1 -1
- package/Helpers/photoDome.js.map +1 -1
- package/Helpers/textureDome.d.ts +4 -4
- package/Helpers/textureDome.js +6 -6
- package/Helpers/textureDome.js.map +1 -1
- package/Helpers/videoDome.d.ts +1 -1
- package/Helpers/videoDome.js +2 -2
- package/Helpers/videoDome.js.map +1 -1
- package/Inputs/scene.inputManager.d.ts +1 -1
- package/Inputs/scene.inputManager.js +1 -1
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Instrumentation/sceneInstrumentation.js +1 -1
- package/Instrumentation/sceneInstrumentation.js.map +1 -1
- package/Layers/effectLayer.d.ts +1 -1
- package/Layers/effectLayer.js +3 -3
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/layer.d.ts +2 -2
- package/Layers/layer.js +4 -4
- package/Layers/layer.js.map +1 -1
- package/Layers/thinEffectLayer.d.ts +2 -2
- package/Layers/thinEffectLayer.js +3 -3
- package/Layers/thinEffectLayer.js.map +1 -1
- package/Layers/thinGlowLayer.d.ts +1 -1
- package/Layers/thinGlowLayer.js +3 -3
- package/Layers/thinGlowLayer.js.map +1 -1
- package/Layers/thinHighlightLayer.d.ts +1 -1
- package/Layers/thinHighlightLayer.js +3 -3
- package/Layers/thinHighlightLayer.js.map +1 -1
- package/Layers/thinSelectionOutlineLayer.d.ts +1 -1
- package/Layers/thinSelectionOutlineLayer.js +3 -3
- package/Layers/thinSelectionOutlineLayer.js.map +1 -1
- package/Legacy/legacy.js +12 -1
- package/Legacy/legacy.js.map +1 -1
- package/LensFlares/lensFlare.d.ts +2 -2
- package/LensFlares/lensFlare.js +3 -3
- package/LensFlares/lensFlare.js.map +1 -1
- package/LensFlares/lensFlareSystem.d.ts +1 -1
- package/LensFlares/lensFlareSystem.js +6 -6
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/LTC/ltcTextureTool.js +1 -1
- package/Lights/LTC/ltcTextureTool.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.d.ts +1 -285
- package/Lights/Shadows/cascadedShadowGenerator.js +3 -857
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.pure.d.ts +290 -0
- package/Lights/Shadows/cascadedShadowGenerator.pure.js +868 -0
- package/Lights/Shadows/cascadedShadowGenerator.pure.js.map +1 -0
- package/Lights/Shadows/pure.d.ts +1 -0
- package/Lights/Shadows/pure.js +1 -0
- package/Lights/Shadows/pure.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.d.ts +3 -3
- package/Lights/Shadows/shadowGenerator.js +7 -7
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/areaLight.d.ts +1 -1
- package/Lights/areaLight.js +0 -1
- package/Lights/areaLight.js.map +1 -1
- package/Lights/light.d.ts +2 -2
- package/Lights/light.js +2 -2
- package/Lights/light.js.map +1 -1
- package/Lights/shadowLight.d.ts +1 -1
- package/Lights/shadowLight.js +1 -1
- package/Lights/shadowLight.js.map +1 -1
- package/Loading/sceneLoader.d.ts +2 -2
- package/Loading/sceneLoader.js +3 -3
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/GreasedLine/greasedLineMaterialDefaults.d.ts +1 -1
- package/Materials/GreasedLine/greasedLineMaterialDefaults.js +1 -1
- package/Materials/GreasedLine/greasedLineMaterialDefaults.js.map +1 -1
- package/Materials/GreasedLine/greasedLineSimpleMaterial.d.ts +3 -3
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js +3 -3
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +6 -6
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
- package/Materials/Node/nodeMaterial.pure.d.ts +12 -0
- package/Materials/Node/nodeMaterial.pure.js +68 -13
- package/Materials/Node/nodeMaterial.pure.js.map +1 -1
- package/Materials/Node/nodeMaterialDefault.js +14 -14
- package/Materials/Node/nodeMaterialDefault.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.pure.js +19 -4
- package/Materials/PBR/openpbrMaterial.pure.js.map +1 -1
- package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +40 -2
- package/Materials/PBR/pbrAnisotropicConfiguration.js +41 -3
- package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.d.ts +5 -1
- package/Materials/PBR/pbrBRDFConfiguration.js +5 -1
- package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +2 -2
- package/Materials/PBR/pbrBaseSimpleMaterial.js +2 -2
- package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.d.ts +42 -2
- package/Materials/PBR/pbrClearCoatConfiguration.js +42 -2
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrIridescenceConfiguration.d.ts +38 -1
- package/Materials/PBR/pbrIridescenceConfiguration.js +38 -1
- package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
- package/Materials/PBR/pbrMaterial.pure.d.ts +6 -0
- package/Materials/PBR/pbrMaterial.pure.js +8 -0
- package/Materials/PBR/pbrMaterial.pure.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.d.ts +41 -2
- package/Materials/PBR/pbrSheenConfiguration.js +41 -2
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +41 -2
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +42 -3
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/Filtering/hdrFiltering.js +1 -1
- package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.d.ts +1 -1
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.js +2 -2
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.js.map +1 -1
- package/Materials/Textures/Loaders/EXR/exrLoader.core.d.ts +1 -1
- package/Materials/Textures/Loaders/EXR/exrLoader.core.js +5 -109
- package/Materials/Textures/Loaders/EXR/exrLoader.core.js.map +1 -1
- package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js +1 -1
- package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js.map +1 -1
- package/Materials/Textures/Loaders/basisTextureLoader.js +2 -2
- package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.js +1 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/envTextureLoader.js +3 -1
- package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js +11 -2
- package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
- package/Materials/Textures/MultiviewRenderTarget.d.ts +1 -1
- package/Materials/Textures/MultiviewRenderTarget.js +1 -1
- package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
- package/Materials/Textures/Packer/packer.d.ts +1 -1
- package/Materials/Textures/Packer/packer.js +6 -6
- package/Materials/Textures/Packer/packer.js.map +1 -1
- package/Materials/Textures/Procedurals/customProceduralTexture.d.ts +2 -2
- package/Materials/Textures/Procedurals/customProceduralTexture.js +4 -4
- package/Materials/Textures/Procedurals/customProceduralTexture.js.map +1 -1
- package/Materials/Textures/Procedurals/noiseProceduralTexture.pure.js +17 -5
- package/Materials/Textures/Procedurals/noiseProceduralTexture.pure.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js +4 -1
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js +1 -1
- package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js.map +1 -1
- package/Materials/Textures/prePassRenderTarget.d.ts +1 -1
- package/Materials/Textures/prePassRenderTarget.js +1 -1
- package/Materials/Textures/prePassRenderTarget.js.map +1 -1
- package/Materials/Textures/rawCubeTexture.d.ts +1 -1
- package/Materials/Textures/rawCubeTexture.js +2 -2
- package/Materials/Textures/rawCubeTexture.js.map +1 -1
- package/Materials/Textures/rawTexture.d.ts +1 -1
- package/Materials/Textures/rawTexture.js +1 -1
- package/Materials/Textures/rawTexture.js.map +1 -1
- package/Materials/Textures/rawTexture2DArray.d.ts +1 -1
- package/Materials/Textures/rawTexture2DArray.js +1 -1
- package/Materials/Textures/rawTexture2DArray.js.map +1 -1
- package/Materials/Textures/rawTexture3D.d.ts +1 -1
- package/Materials/Textures/rawTexture3D.js +1 -1
- package/Materials/Textures/rawTexture3D.js.map +1 -1
- package/Materials/Textures/refractionTexture.d.ts +1 -1
- package/Materials/Textures/refractionTexture.js +1 -1
- package/Materials/Textures/refractionTexture.js.map +1 -1
- package/Materials/Textures/textureMerger.d.ts +1 -1
- package/Materials/Textures/textureMerger.js +1 -1
- package/Materials/Textures/textureMerger.js.map +1 -1
- package/Materials/Textures/textureProcessor.d.ts +1 -1
- package/Materials/Textures/textureProcessor.js +2 -2
- package/Materials/Textures/textureProcessor.js.map +1 -1
- package/Materials/Textures/thinRenderTargetTexture.d.ts +4 -4
- package/Materials/Textures/thinRenderTargetTexture.js +2 -2
- package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
- package/Materials/clipPlaneMaterialHelper.js +1 -1
- package/Materials/clipPlaneMaterialHelper.js.map +1 -1
- package/Materials/effect.pure.d.ts +2 -2
- package/Materials/effect.pure.js +12 -6
- package/Materials/effect.pure.js.map +1 -1
- package/Materials/effectRenderer.pure.js +4 -2
- package/Materials/effectRenderer.pure.js.map +1 -1
- package/Materials/floatingOriginMatrixOverrides.d.ts +1 -1
- package/Materials/floatingOriginMatrixOverrides.js +1 -1
- package/Materials/floatingOriginMatrixOverrides.js.map +1 -1
- package/Materials/material.detailMapConfiguration.d.ts +39 -1
- package/Materials/material.detailMapConfiguration.js +39 -1
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/materialHelper.functions.js +45 -1
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/materialHelper.geometryrendering.d.ts +1 -1
- package/Materials/materialHelper.geometryrendering.js +1 -1
- package/Materials/materialHelper.geometryrendering.js.map +1 -1
- package/Materials/materialPluginFactoryExport.js +2 -2
- package/Materials/materialPluginFactoryExport.js.map +1 -1
- package/Materials/meshDebugPluginMaterial.pure.js +15 -13
- package/Materials/meshDebugPluginMaterial.pure.js.map +1 -1
- package/Materials/pushMaterial.d.ts +7 -1
- package/Materials/pushMaterial.js +7 -1
- package/Materials/pushMaterial.js.map +1 -1
- package/Materials/uniformBuffer.js +1 -1
- package/Materials/uniformBuffer.js.map +1 -1
- package/Maths/math.axis.d.ts +1 -1
- package/Maths/math.axis.js +1 -1
- package/Maths/math.axis.js.map +1 -1
- package/Maths/math.d.ts +2 -2
- package/Maths/math.functions.d.ts +1 -1
- package/Maths/math.functions.js +1 -1
- package/Maths/math.functions.js.map +1 -1
- package/Maths/math.isovector.d.ts +1 -1
- package/Maths/math.isovector.js +1 -1
- package/Maths/math.isovector.js.map +1 -1
- package/Maths/math.js +2 -2
- package/Maths/math.js.map +1 -1
- package/Maths/math.path.d.ts +1 -1
- package/Maths/math.path.js +1 -1
- package/Maths/math.path.js.map +1 -1
- package/Maths/math.plane.d.ts +1 -1
- package/Maths/math.plane.js +1 -1
- package/Maths/math.plane.js.map +1 -1
- package/Maths/math.polar.d.ts +1 -1
- package/Maths/math.polar.js +1 -1
- package/Maths/math.polar.js.map +1 -1
- package/Maths/math.vertexFormat.d.ts +1 -1
- package/Maths/math.vertexFormat.js +1 -1
- package/Maths/math.vertexFormat.js.map +1 -1
- package/Maths/pure.d.ts +1 -0
- package/Maths/pure.js +1 -0
- package/Maths/pure.js.map +1 -1
- package/Meshes/Builders/geodesicBuilder.js +1 -1
- package/Meshes/Builders/geodesicBuilder.js.map +1 -1
- package/Meshes/Builders/goldbergBuilder.d.ts +1 -1
- package/Meshes/Builders/goldbergBuilder.js +4 -4
- package/Meshes/Builders/goldbergBuilder.js.map +1 -1
- package/Meshes/Builders/greasedLineBuilder.d.ts +4 -4
- package/Meshes/Builders/greasedLineBuilder.js +5 -5
- package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
- package/Meshes/Builders/textBuilder.d.ts +2 -2
- package/Meshes/Builders/textBuilder.js +4 -4
- package/Meshes/Builders/textBuilder.js.map +1 -1
- package/Meshes/Builders/tiledBoxBuilder.d.ts +3 -3
- package/Meshes/Builders/tiledBoxBuilder.js +3 -3
- package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
- package/Meshes/Builders/tiledPlaneBuilder.d.ts +1 -1
- package/Meshes/Builders/tiledPlaneBuilder.js +1 -1
- package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
- package/Meshes/Compression/dracoCodec.js +1 -1
- package/Meshes/Compression/dracoCodec.js.map +1 -1
- package/Meshes/Compression/dracoDecoder.js +1 -1
- package/Meshes/Compression/dracoDecoder.js.map +1 -1
- package/Meshes/Compression/dracoEncoder.d.ts +1 -1
- package/Meshes/Compression/dracoEncoder.js +2 -2
- package/Meshes/Compression/dracoEncoder.js.map +1 -1
- package/Meshes/Compression/meshoptCompression.js +1 -1
- package/Meshes/Compression/meshoptCompression.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +64 -3
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineBaseMesh.d.ts +2 -2
- package/Meshes/GreasedLine/greasedLineBaseMesh.js +3 -3
- package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
- package/Meshes/Node/nodeGeometry.d.ts +2 -2
- package/Meshes/Node/nodeGeometry.js +4 -4
- package/Meshes/Node/nodeGeometry.js.map +1 -1
- package/Meshes/Node/nodeGeometryBuildState.d.ts +1 -1
- package/Meshes/Node/nodeGeometryBuildState.js +1 -1
- package/Meshes/Node/nodeGeometryBuildState.js.map +1 -1
- package/Meshes/abstractMesh.hotSpot.d.ts +1 -1
- package/Meshes/abstractMesh.hotSpot.js +2 -2
- package/Meshes/abstractMesh.hotSpot.js.map +1 -1
- package/Meshes/abstractMesh.pure.js +2 -13
- package/Meshes/abstractMesh.pure.js.map +1 -1
- package/Meshes/buffer.d.ts +1 -1
- package/Meshes/buffer.js +1 -1
- package/Meshes/buffer.js.map +1 -1
- package/Meshes/csg.d.ts +3 -3
- package/Meshes/csg.js +4 -4
- package/Meshes/csg.js.map +1 -1
- package/Meshes/csg2.d.ts +1 -1
- package/Meshes/csg2.js +38 -11
- package/Meshes/csg2.js.map +1 -1
- package/Meshes/geodesicMesh.d.ts +1 -1
- package/Meshes/geodesicMesh.js +1 -1
- package/Meshes/geodesicMesh.js.map +1 -1
- package/Meshes/geometry.d.ts +2 -2
- package/Meshes/geometry.js +4 -4
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/lattice.d.ts +1 -1
- package/Meshes/lattice.js +1 -1
- package/Meshes/lattice.js.map +1 -1
- package/Meshes/lattice.material.d.ts +1 -1
- package/Meshes/lattice.material.js +1 -1
- package/Meshes/lattice.material.js.map +1 -1
- package/Meshes/mesh.vertexData.d.ts +2 -2
- package/Meshes/mesh.vertexData.js +3 -4
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/mesh.vertexData.subdivide.js +1 -1
- package/Meshes/mesh.vertexData.subdivide.js.map +1 -1
- package/Meshes/meshBuilder.d.ts +18 -18
- package/Meshes/meshBuilder.js +18 -18
- package/Meshes/meshBuilder.js.map +1 -1
- package/Meshes/meshSimplification.d.ts +1 -1
- package/Meshes/meshSimplification.js +4 -4
- package/Meshes/meshSimplification.js.map +1 -1
- package/Meshes/meshUVSpaceRenderer.d.ts +1 -1
- package/Meshes/meshUVSpaceRenderer.js +0 -1
- package/Meshes/meshUVSpaceRenderer.js.map +1 -1
- package/Meshes/meshUtils.d.ts +1 -1
- package/Meshes/meshUtils.js +2 -2
- package/Meshes/meshUtils.js.map +1 -1
- package/Meshes/polygonMesh.d.ts +2 -2
- package/Meshes/polygonMesh.js +3 -3
- package/Meshes/polygonMesh.js.map +1 -1
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +2 -2
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
- package/Misc/HighDynamicRange/panoramaToCubemap.js +1 -1
- package/Misc/HighDynamicRange/panoramaToCubemap.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
- package/Misc/areaLightsTextureTools.d.ts +1 -1
- package/Misc/areaLightsTextureTools.js +3 -3
- package/Misc/areaLightsTextureTools.js.map +1 -1
- package/Misc/assetsManager.d.ts +4 -4
- package/Misc/assetsManager.js +5 -5
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/basisWorker.js +1 -1
- package/Misc/basisWorker.js.map +1 -1
- package/Misc/brdfTextureTools.js +1 -1
- package/Misc/brdfTextureTools.js.map +1 -1
- package/Misc/copyTextureToTexture.d.ts +1 -1
- package/Misc/copyTextureToTexture.js +1 -1
- package/Misc/copyTextureToTexture.js.map +1 -1
- package/Misc/decorators.serialization.js +2 -2
- package/Misc/decorators.serialization.js.map +1 -1
- package/Misc/depthReducer.d.ts +2 -2
- package/Misc/depthReducer.js +2 -2
- package/Misc/depthReducer.js.map +1 -1
- package/Misc/gradients.d.ts +1 -1
- package/Misc/gradients.js +1 -1
- package/Misc/gradients.js.map +1 -1
- package/Misc/greasedLineTools.d.ts +1 -1
- package/Misc/greasedLineTools.js +3 -3
- package/Misc/greasedLineTools.js.map +1 -1
- package/Misc/halfFloat.d.ts +17 -0
- package/Misc/halfFloat.js +131 -0
- package/Misc/halfFloat.js.map +1 -0
- package/Misc/khronosTextureContainer2.js +1 -1
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/meshExploder.js +1 -1
- package/Misc/meshExploder.js.map +1 -1
- package/Misc/pivotTools.js +1 -1
- package/Misc/pivotTools.js.map +1 -1
- package/Misc/rgbdTextureTools.js +1 -1
- package/Misc/rgbdTextureTools.js.map +1 -1
- package/Misc/sceneOptimizer.js +1 -1
- package/Misc/sceneOptimizer.js.map +1 -1
- package/Misc/sceneRecorder.js +7 -7
- package/Misc/sceneRecorder.js.map +1 -1
- package/Misc/sceneSerializer.js +3 -3
- package/Misc/sceneSerializer.js.map +1 -1
- package/Misc/snapshotRenderingHelper.js +1 -1
- package/Misc/snapshotRenderingHelper.js.map +1 -1
- package/Misc/textureTools.d.ts +3 -13
- package/Misc/textureTools.js +6 -64
- package/Misc/textureTools.js.map +1 -1
- package/Misc/thinMinMaxReducer.d.ts +1 -1
- package/Misc/thinMinMaxReducer.js +1 -1
- package/Misc/thinMinMaxReducer.js.map +1 -1
- package/Misc/tools.internals.js +1 -1
- package/Misc/tools.internals.js.map +1 -1
- package/Misc/tools.pure.js +11 -4
- package/Misc/tools.pure.js.map +1 -1
- package/Misc/trajectoryClassifier.d.ts +1 -1
- package/Misc/trajectoryClassifier.js +1 -1
- package/Misc/trajectoryClassifier.js.map +1 -1
- package/Misc/videoRecorder.js +1 -1
- package/Misc/videoRecorder.js.map +1 -1
- package/Misc/virtualJoystick.d.ts +1 -1
- package/Misc/virtualJoystick.js +1 -1
- package/Misc/virtualJoystick.js.map +1 -1
- package/Morph/morphTarget.js +1 -1
- package/Morph/morphTarget.js.map +1 -1
- package/Navigation/Plugins/recastJSPlugin.d.ts +1 -1
- package/Navigation/Plugins/recastJSPlugin.js +2 -2
- package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
- package/Particles/EmitterTypes/boxParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/boxParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/boxParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/coneParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/coneParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/coneParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/customParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/customParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/customParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/cylinderParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/cylinderParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/cylinderParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/hemisphericParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/hemisphericParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/hemisphericParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/meshParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/meshParticleEmitter.js +2 -2
- package/Particles/EmitterTypes/meshParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/pointParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/pointParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/pointParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/sphereParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/sphereParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/sphereParticleEmitter.js.map +1 -1
- package/Particles/Node/nodeParticleBuildState.d.ts +4 -4
- package/Particles/Node/nodeParticleBuildState.js +2 -2
- package/Particles/Node/nodeParticleBuildState.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.d.ts +2 -2
- package/Particles/Node/nodeParticleSystemSet.helper.js +31 -31
- package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.js +8 -8
- package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
- package/Particles/attractor.d.ts +1 -1
- package/Particles/attractor.js +1 -1
- package/Particles/attractor.js.map +1 -1
- package/Particles/computeShaderParticleSystem.pure.js +5 -1
- package/Particles/computeShaderParticleSystem.pure.js.map +1 -1
- package/Particles/flowMap.d.ts +7 -1
- package/Particles/flowMap.js +7 -1
- package/Particles/flowMap.js.map +1 -1
- package/Particles/gpuParticleSystem.pure.d.ts +1 -0
- package/Particles/gpuParticleSystem.pure.js +17 -1
- package/Particles/gpuParticleSystem.pure.js.map +1 -1
- package/Particles/particle.d.ts +2 -2
- package/Particles/particle.js +2 -2
- package/Particles/particle.js.map +1 -1
- package/Particles/particleHelper.js +5 -5
- package/Particles/particleHelper.js.map +1 -1
- package/Particles/particleSystem.functions.d.ts +1 -1
- package/Particles/particleSystem.functions.js +1 -1
- package/Particles/particleSystem.functions.js.map +1 -1
- package/Particles/particleSystemSet.d.ts +1 -1
- package/Particles/particleSystemSet.js +5 -5
- package/Particles/particleSystemSet.js.map +1 -1
- package/Particles/pointsCloudSystem.d.ts +1 -1
- package/Particles/pointsCloudSystem.js +6 -6
- package/Particles/pointsCloudSystem.js.map +1 -1
- package/Particles/solidParticle.d.ts +2 -2
- package/Particles/solidParticle.js +3 -3
- package/Particles/solidParticle.js.map +1 -1
- package/Particles/solidParticleSystem.d.ts +4 -4
- package/Particles/solidParticleSystem.js +7 -7
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/subEmitter.js +1 -1
- package/Particles/subEmitter.js.map +1 -1
- package/Particles/thinParticleSystem.function.js +2 -2
- package/Particles/thinParticleSystem.function.js.map +1 -1
- package/Physics/Plugins/cannonJSPlugin.d.ts +1 -1
- package/Physics/Plugins/cannonJSPlugin.js +1 -1
- package/Physics/Plugins/cannonJSPlugin.js.map +1 -1
- package/Physics/castingResult.d.ts +1 -1
- package/Physics/castingResult.js +1 -1
- package/Physics/castingResult.js.map +1 -1
- package/Physics/physicsHelper.d.ts +1 -1
- package/Physics/physicsHelper.js +4 -4
- package/Physics/physicsHelper.js.map +1 -1
- package/Physics/physicsImpostor.d.ts +1 -1
- package/Physics/physicsImpostor.js +1 -1
- package/Physics/physicsImpostor.js.map +1 -1
- package/Physics/physicsRaycastResult.d.ts +1 -1
- package/Physics/physicsRaycastResult.js +1 -1
- package/Physics/physicsRaycastResult.js.map +1 -1
- package/Physics/v1/Plugins/ammoJSPlugin.d.ts +2 -2
- package/Physics/v1/Plugins/ammoJSPlugin.js +5 -5
- package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
- package/Physics/v1/Plugins/oimoJSPlugin.d.ts +2 -2
- package/Physics/v1/Plugins/oimoJSPlugin.js +2 -2
- package/Physics/v1/Plugins/oimoJSPlugin.js.map +1 -1
- package/Physics/v1/physicsEngine.d.ts +1 -1
- package/Physics/v1/physicsEngine.js +1 -1
- package/Physics/v1/physicsEngine.js.map +1 -1
- package/Physics/v2/Plugins/havokPlugin.d.ts +14 -2
- package/Physics/v2/Plugins/havokPlugin.js +45 -7
- package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
- package/Physics/v2/characterController.d.ts +1 -1
- package/Physics/v2/characterController.js +2 -2
- package/Physics/v2/characterController.js.map +1 -1
- package/Physics/v2/physicsAggregate.d.ts +3 -3
- package/Physics/v2/physicsAggregate.js +10 -6
- package/Physics/v2/physicsAggregate.js.map +1 -1
- package/Physics/v2/physicsBody.d.ts +1 -1
- package/Physics/v2/physicsBody.js +1 -1
- package/Physics/v2/physicsBody.js.map +1 -1
- package/Physics/v2/physicsEngine.d.ts +1 -1
- package/Physics/v2/physicsEngine.js +1 -1
- package/Physics/v2/physicsEngine.js.map +1 -1
- package/Physics/v2/physicsShape.d.ts +1 -1
- package/Physics/v2/physicsShape.js +1 -1
- package/Physics/v2/physicsShape.js.map +1 -1
- package/Physics/v2/ragdoll.d.ts +2 -2
- package/Physics/v2/ragdoll.js +2 -2
- package/Physics/v2/ragdoll.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.d.ts +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js +8 -6
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline.js +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.js +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +3 -2
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
- package/PostProcesses/bloomEffect.d.ts +1 -1
- package/PostProcesses/bloomEffect.js +4 -4
- package/PostProcesses/bloomEffect.js.map +1 -1
- package/PostProcesses/depthOfFieldEffect.d.ts +1 -1
- package/PostProcesses/depthOfFieldEffect.js +3 -3
- package/PostProcesses/depthOfFieldEffect.js.map +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.d.ts +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.js +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
- package/PostProcesses/highlightsPostProcess.d.ts +1 -1
- package/PostProcesses/highlightsPostProcess.js +1 -1
- package/PostProcesses/highlightsPostProcess.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.d.ts +1 -1
- package/PostProcesses/imageProcessingPostProcess.js +1 -1
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/postProcessManager.d.ts +3 -0
- package/PostProcesses/postProcessManager.js +4 -1
- package/PostProcesses/postProcessManager.js.map +1 -1
- package/PostProcesses/subSurfaceScatteringPostProcess.pure.d.ts +1 -0
- package/PostProcesses/subSurfaceScatteringPostProcess.pure.js +10 -0
- package/PostProcesses/subSurfaceScatteringPostProcess.pure.js.map +1 -1
- package/PostProcesses/thinAnaglyphPostProcess.d.ts +1 -1
- package/PostProcesses/thinAnaglyphPostProcess.js +1 -1
- package/PostProcesses/thinAnaglyphPostProcess.js.map +1 -1
- package/PostProcesses/thinBlackAndWhitePostProcess.d.ts +1 -1
- package/PostProcesses/thinBlackAndWhitePostProcess.js +1 -1
- package/PostProcesses/thinBlackAndWhitePostProcess.js.map +1 -1
- package/PostProcesses/thinBloomEffect.js +1 -1
- package/PostProcesses/thinBloomEffect.js.map +1 -1
- package/PostProcesses/thinBloomMergePostProcess.d.ts +1 -1
- package/PostProcesses/thinBloomMergePostProcess.js +1 -1
- package/PostProcesses/thinBloomMergePostProcess.js.map +1 -1
- package/PostProcesses/thinBlurPostProcess.d.ts +1 -1
- package/PostProcesses/thinBlurPostProcess.js +1 -1
- package/PostProcesses/thinBlurPostProcess.js.map +1 -1
- package/PostProcesses/thinChromaticAberrationPostProcess.d.ts +2 -2
- package/PostProcesses/thinChromaticAberrationPostProcess.js +2 -2
- package/PostProcesses/thinChromaticAberrationPostProcess.js.map +1 -1
- package/PostProcesses/thinCircleOfConfusionPostProcess.d.ts +1 -1
- package/PostProcesses/thinCircleOfConfusionPostProcess.js +1 -1
- package/PostProcesses/thinCircleOfConfusionPostProcess.js.map +1 -1
- package/PostProcesses/thinColorCorrectionPostProcess.d.ts +1 -1
- package/PostProcesses/thinColorCorrectionPostProcess.js +2 -2
- package/PostProcesses/thinColorCorrectionPostProcess.js.map +1 -1
- package/PostProcesses/thinConvolutionPostProcess.d.ts +1 -1
- package/PostProcesses/thinConvolutionPostProcess.js +1 -1
- package/PostProcesses/thinConvolutionPostProcess.js.map +1 -1
- package/PostProcesses/thinCustomPostProcess.d.ts +1 -1
- package/PostProcesses/thinCustomPostProcess.js +1 -1
- package/PostProcesses/thinCustomPostProcess.js.map +1 -1
- package/PostProcesses/thinDepthOfFieldEffect.d.ts +3 -0
- package/PostProcesses/thinDepthOfFieldEffect.js +4 -1
- package/PostProcesses/thinDepthOfFieldEffect.js.map +1 -1
- package/PostProcesses/thinDepthOfFieldMergePostProcess.d.ts +1 -1
- package/PostProcesses/thinDepthOfFieldMergePostProcess.js +1 -1
- package/PostProcesses/thinDepthOfFieldMergePostProcess.js.map +1 -1
- package/PostProcesses/thinExtractHighlightsPostProcess.d.ts +1 -1
- package/PostProcesses/thinExtractHighlightsPostProcess.js +1 -1
- package/PostProcesses/thinExtractHighlightsPostProcess.js.map +1 -1
- package/PostProcesses/thinFXAAPostProcess.d.ts +2 -2
- package/PostProcesses/thinFXAAPostProcess.js +2 -2
- package/PostProcesses/thinFXAAPostProcess.js.map +1 -1
- package/PostProcesses/thinFilterPostProcess.d.ts +2 -2
- package/PostProcesses/thinFilterPostProcess.js +2 -2
- package/PostProcesses/thinFilterPostProcess.js.map +1 -1
- package/PostProcesses/thinGrainPostProcess.d.ts +1 -1
- package/PostProcesses/thinGrainPostProcess.js +1 -1
- package/PostProcesses/thinGrainPostProcess.js.map +1 -1
- package/PostProcesses/thinImageProcessingPostProcess.d.ts +2 -2
- package/PostProcesses/thinImageProcessingPostProcess.js +2 -2
- package/PostProcesses/thinImageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/thinMotionBlurPostProcess.d.ts +1 -1
- package/PostProcesses/thinMotionBlurPostProcess.js +2 -2
- package/PostProcesses/thinMotionBlurPostProcess.js.map +1 -1
- package/PostProcesses/thinPassPostProcess.d.ts +1 -1
- package/PostProcesses/thinPassPostProcess.js +1 -1
- package/PostProcesses/thinPassPostProcess.js.map +1 -1
- package/PostProcesses/thinSSAO2BlurPostProcess.d.ts +1 -1
- package/PostProcesses/thinSSAO2BlurPostProcess.js +1 -1
- package/PostProcesses/thinSSAO2BlurPostProcess.js.map +1 -1
- package/PostProcesses/thinSSAO2CombinePostProcess.d.ts +1 -1
- package/PostProcesses/thinSSAO2CombinePostProcess.js +2 -2
- package/PostProcesses/thinSSAO2CombinePostProcess.js.map +1 -1
- package/PostProcesses/thinSSAO2PostProcess.d.ts +7 -2
- package/PostProcesses/thinSSAO2PostProcess.js +36 -4
- package/PostProcesses/thinSSAO2PostProcess.js.map +1 -1
- package/PostProcesses/thinSSRBlurCombinerPostProcess.d.ts +1 -1
- package/PostProcesses/thinSSRBlurCombinerPostProcess.js +2 -2
- package/PostProcesses/thinSSRBlurCombinerPostProcess.js.map +1 -1
- package/PostProcesses/thinSSRBlurPostProcess.d.ts +2 -2
- package/PostProcesses/thinSSRBlurPostProcess.js +2 -2
- package/PostProcesses/thinSSRBlurPostProcess.js.map +1 -1
- package/PostProcesses/thinSSRPostProcess.d.ts +1 -1
- package/PostProcesses/thinSSRPostProcess.js +2 -2
- package/PostProcesses/thinSSRPostProcess.js.map +1 -1
- package/PostProcesses/thinScreenSpaceCurvaturePostProcess.d.ts +1 -1
- package/PostProcesses/thinScreenSpaceCurvaturePostProcess.js +1 -1
- package/PostProcesses/thinScreenSpaceCurvaturePostProcess.js.map +1 -1
- package/PostProcesses/thinSharpenPostProcess.d.ts +1 -1
- package/PostProcesses/thinSharpenPostProcess.js +1 -1
- package/PostProcesses/thinSharpenPostProcess.js.map +1 -1
- package/PostProcesses/thinTAAPostProcess.d.ts +3 -3
- package/PostProcesses/thinTAAPostProcess.js +4 -4
- package/PostProcesses/thinTAAPostProcess.js.map +1 -1
- package/PostProcesses/thinTonemapPostProcess.d.ts +1 -1
- package/PostProcesses/thinTonemapPostProcess.js +1 -1
- package/PostProcesses/thinTonemapPostProcess.js.map +1 -1
- package/PostProcesses/vrDistortionCorrectionPostProcess.d.ts +1 -1
- package/PostProcesses/vrDistortionCorrectionPostProcess.js +3 -3
- package/PostProcesses/vrDistortionCorrectionPostProcess.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.d.ts +2 -2
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +4 -4
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.d.ts +2 -2
- package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js +4 -4
- package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +3 -3
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +4 -4
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
- package/Rendering/depthPeelingRenderer.d.ts +1 -1
- package/Rendering/depthPeelingRenderer.js +2 -2
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.js +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.d.ts +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +2 -2
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +3 -3
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +3 -3
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTextures.d.ts +2 -2
- package/Rendering/fluidRenderer/fluidRenderingTextures.js +3 -3
- package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
- package/Rendering/iblCdfGenerator.d.ts +3 -3
- package/Rendering/iblCdfGenerator.js +5 -5
- package/Rendering/iblCdfGenerator.js.map +1 -1
- package/Rendering/renderingGroup.js +1 -1
- package/Rendering/renderingGroup.js.map +1 -1
- package/Rendering/subSurfaceConfiguration.d.ts +2 -2
- package/Rendering/subSurfaceConfiguration.js +2 -2
- package/Rendering/subSurfaceConfiguration.js.map +1 -1
- package/Rendering/utilityLayerRenderer.d.ts +2 -2
- package/Rendering/utilityLayerRenderer.js +4 -4
- package/Rendering/utilityLayerRenderer.js.map +1 -1
- package/Shaders/ssao2.fragment.js +10 -2
- package/Shaders/ssao2.fragment.js.map +1 -1
- package/ShadersWGSL/gpuRenderParticles.fragment.d.ts +5 -0
- package/ShadersWGSL/gpuRenderParticles.fragment.js +50 -0
- package/ShadersWGSL/gpuRenderParticles.fragment.js.map +1 -0
- package/ShadersWGSL/gpuRenderParticles.vertex.d.ts +5 -0
- package/ShadersWGSL/gpuRenderParticles.vertex.js +120 -0
- package/ShadersWGSL/gpuRenderParticles.vertex.js.map +1 -0
- package/ShadersWGSL/noise.fragment.d.ts +5 -0
- package/ShadersWGSL/noise.fragment.js +18 -0
- package/ShadersWGSL/noise.fragment.js.map +1 -0
- package/ShadersWGSL/ssao2.fragment.js +10 -2
- package/ShadersWGSL/ssao2.fragment.js.map +1 -1
- package/SmartAssets/smartAssetSerializer.js +1 -1
- package/SmartAssets/smartAssetSerializer.js.map +1 -1
- package/Sprites/sprite.d.ts +2 -2
- package/Sprites/sprite.js +2 -2
- package/Sprites/sprite.js.map +1 -1
- package/Sprites/spriteManager.d.ts +2 -2
- package/Sprites/spriteManager.js +4 -5
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spritePackedManager.js +1 -1
- package/Sprites/spritePackedManager.js.map +1 -1
- package/Sprites/spriteRenderer.js +2 -2
- package/Sprites/spriteRenderer.js.map +1 -1
- package/XR/features/WebXRHitTestLegacy.d.ts +1 -1
- package/XR/features/WebXRHitTestLegacy.js +2 -2
- package/XR/features/WebXRHitTestLegacy.js.map +1 -1
- package/XR/motionController/webXRAbstractMotionController.js +2 -2
- package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
- package/XR/motionController/webXRGenericMotionController.js +2 -2
- package/XR/motionController/webXRGenericMotionController.js.map +1 -1
- package/XR/motionController/webXRProfiledMotionController.js +4 -4
- package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
- package/XR/webXRCamera.d.ts +3 -3
- package/XR/webXRCamera.js +4 -4
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRDefaultExperience.d.ts +4 -4
- package/XR/webXRDefaultExperience.js +4 -4
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXREnterExitUI.js +1 -1
- package/XR/webXREnterExitUI.js.map +1 -1
- package/XR/webXRExperienceHelper.js +2 -2
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRFeaturesManager.d.ts +47 -0
- package/XR/webXRFeaturesManager.js +1 -1
- package/XR/webXRFeaturesManager.js.map +1 -1
- package/XR/webXRInput.js +1 -1
- package/XR/webXRInput.js.map +1 -1
- package/XR/webXRInputSource.js +4 -4
- package/XR/webXRInputSource.js.map +1 -1
- package/XR/webXRManagedOutputCanvas.js +1 -1
- package/XR/webXRManagedOutputCanvas.js.map +1 -1
- package/XR/webXRRenderTargetTextureProvider.d.ts +1 -1
- package/XR/webXRRenderTargetTextureProvider.js +1 -1
- package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
- package/assetContainer.d.ts +4 -4
- package/assetContainer.js +6 -6
- package/assetContainer.js.map +1 -1
- package/node.d.ts +1 -1
- package/node.js +6 -2
- package/node.js.map +1 -1
- package/package.json +44 -174
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polygonMesh.js","sourceRoot":"","sources":["../../../../dev/core/src/Meshes/polygonMesh.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport { type Scene } from \"../scene\";\r\nimport { Vector3, Vector2 } from \"../Maths/math.vector\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { VertexData } from \"../Meshes/mesh.vertexData\";\r\nimport { type Nullable } from \"../types\";\r\nimport { Path2 } from \"../Maths/math.path\";\r\nimport { Epsilon } from \"../Maths/math.constants\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\ndeclare let earcut: any;\r\n/**\r\n * Vector2 wth index property\r\n */\r\nclass IndexedVector2 extends Vector2 {\r\n /** @internal */\r\n constructor(\r\n original: Vector2,\r\n /** Index of the vector2 */\r\n public index: number\r\n ) {\r\n super(original.x, original.y);\r\n }\r\n}\r\n\r\n/**\r\n * Defines points to create a polygon\r\n */\r\nclass PolygonPoints {\r\n /** @internal */\r\n elements = [] as IndexedVector2[];\r\n\r\n /** @internal */\r\n add(originalPoints: Array<Vector2>): Array<IndexedVector2> {\r\n const result: IndexedVector2[] = [];\r\n for (const point of originalPoints) {\r\n const newPoint = new IndexedVector2(point, this.elements.length);\r\n result.push(newPoint);\r\n this.elements.push(newPoint);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /** @internal */\r\n computeBounds(): { min: Vector2; max: Vector2; width: number; height: number } {\r\n const lmin = new Vector2(this.elements[0].x, this.elements[0].y);\r\n const lmax = new Vector2(this.elements[0].x, this.elements[0].y);\r\n\r\n for (const point of this.elements) {\r\n // x\r\n if (point.x < lmin.x) {\r\n lmin.x = point.x;\r\n } else if (point.x > lmax.x) {\r\n lmax.x = point.x;\r\n }\r\n\r\n // y\r\n if (point.y < lmin.y) {\r\n lmin.y = point.y;\r\n } else if (point.y > lmax.y) {\r\n lmax.y = point.y;\r\n }\r\n }\r\n\r\n return {\r\n min: lmin,\r\n max: lmax,\r\n width: lmax.x - lmin.x,\r\n height: lmax.y - lmin.y,\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Polygon\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/param#non-regular-polygon\r\n */\r\nexport class Polygon {\r\n /**\r\n * Creates a rectangle\r\n * @param xmin bottom X coord\r\n * @param ymin bottom Y coord\r\n * @param xmax top X coord\r\n * @param ymax top Y coord\r\n * @returns points that make the resulting rectangle\r\n */\r\n static Rectangle(xmin: number, ymin: number, xmax: number, ymax: number): Vector2[] {\r\n return [new Vector2(xmin, ymin), new Vector2(xmax, ymin), new Vector2(xmax, ymax), new Vector2(xmin, ymax)];\r\n }\r\n\r\n /**\r\n * Creates a circle\r\n * @param radius radius of circle\r\n * @param cx scale in x\r\n * @param cy scale in y\r\n * @param numberOfSides number of sides that make up the circle\r\n * @returns points that make the resulting circle\r\n */\r\n static Circle(radius: number, cx: number = 0, cy: number = 0, numberOfSides: number = 32): Vector2[] {\r\n const result: Vector2[] = [];\r\n\r\n let angle = 0;\r\n const increment = (Math.PI * 2) / numberOfSides;\r\n\r\n for (let i = 0; i < numberOfSides; i++) {\r\n result.push(new Vector2(cx + Math.cos(angle) * radius, cy + Math.sin(angle) * radius));\r\n angle -= increment;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Creates a polygon from input string\r\n * @param input Input polygon data\r\n * @returns the parsed points\r\n */\r\n static Parse(input: string): Vector2[] {\r\n const floats = input\r\n .split(/[^-+eE.\\d]+/)\r\n .map(parseFloat)\r\n .filter((val) => !isNaN(val));\r\n let i: number;\r\n const result = [];\r\n for (i = 0; i < (floats.length & 0x7ffffffe); i += 2) {\r\n result.push(new Vector2(floats[i], floats[i + 1]));\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Starts building a polygon from x and y coordinates\r\n * @param x x coordinate\r\n * @param y y coordinate\r\n * @returns the started path2\r\n */\r\n static StartingAt(x: number, y: number): Path2 {\r\n return Path2.StartingAt(x, y);\r\n }\r\n}\r\n\r\n/**\r\n * Builds a polygon\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/param/polyMeshBuilder\r\n */\r\nexport class PolygonMeshBuilder {\r\n private _points = new PolygonPoints();\r\n private _outlinepoints = new PolygonPoints();\r\n private _holes = new Array<PolygonPoints>();\r\n\r\n private _name: string;\r\n private _scene: Nullable<Scene>;\r\n\r\n private _epoints: number[] = new Array<number>();\r\n private _eholes: number[] = new Array<number>();\r\n\r\n private _addToepoint(points: Vector2[]) {\r\n for (const p of points) {\r\n this._epoints.push(p.x, p.y);\r\n }\r\n }\r\n\r\n /**\r\n * Babylon reference to the earcut plugin.\r\n */\r\n public bjsEarcut: any;\r\n\r\n /**\r\n * Creates a PolygonMeshBuilder\r\n * @param name name of the builder\r\n * @param contours Path of the polygon\r\n * @param scene scene to add to when creating the mesh\r\n * @param earcutInjection can be used to inject your own earcut reference\r\n */\r\n constructor(name: string, contours: Path2 | Vector2[] | any, scene?: Scene, earcutInjection = earcut) {\r\n this.bjsEarcut = earcutInjection;\r\n this._name = name;\r\n this._scene = scene || EngineStore.LastCreatedScene;\r\n\r\n let points: Vector2[];\r\n if (contours instanceof Path2) {\r\n points = contours.getPoints();\r\n } else {\r\n points = <Vector2[]>contours;\r\n }\r\n\r\n this._addToepoint(points);\r\n\r\n this._points.add(points);\r\n this._outlinepoints.add(points);\r\n\r\n if (typeof this.bjsEarcut === \"undefined\") {\r\n Logger.Warn(\"Earcut was not found, the polygon will not be built.\");\r\n }\r\n }\r\n\r\n /**\r\n * Adds a hole within the polygon\r\n * @param hole Array of points defining the hole\r\n * @returns this\r\n */\r\n addHole(hole: Vector2[]): PolygonMeshBuilder {\r\n this._points.add(hole);\r\n const holepoints = new PolygonPoints();\r\n holepoints.add(hole);\r\n this._holes.push(holepoints);\r\n\r\n this._eholes.push(this._epoints.length / 2);\r\n this._addToepoint(hole);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Creates the polygon\r\n * @param updatable If the mesh should be updatable\r\n * @param depth The depth of the mesh created\r\n * @param smoothingThreshold Dot product threshold for smoothed normals\r\n * @returns the created mesh\r\n */\r\n build(updatable: boolean = false, depth: number = 0, smoothingThreshold: number = 2): Mesh {\r\n const result = new Mesh(this._name, this._scene);\r\n\r\n const vertexData = this.buildVertexData(depth, smoothingThreshold);\r\n\r\n result.setVerticesData(VertexBuffer.PositionKind, <number[]>vertexData.positions, updatable);\r\n result.setVerticesData(VertexBuffer.NormalKind, <number[]>vertexData.normals, updatable);\r\n result.setVerticesData(VertexBuffer.UVKind, <number[]>vertexData.uvs, updatable);\r\n result.setIndices(<number[]>vertexData.indices);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Creates the polygon\r\n * @param depth The depth of the mesh created\r\n * @param smoothingThreshold Dot product threshold for smoothed normals\r\n * @returns the created VertexData\r\n */\r\n buildVertexData(depth: number = 0, smoothingThreshold: number = 2): VertexData {\r\n const result = new VertexData();\r\n\r\n const normals: number[] = [];\r\n const positions: number[] = [];\r\n const uvs: number[] = [];\r\n\r\n const bounds = this._points.computeBounds();\r\n for (const p of this._points.elements) {\r\n normals.push(0, 1.0, 0);\r\n positions.push(p.x, 0, p.y);\r\n uvs.push((p.x - bounds.min.x) / bounds.width, (p.y - bounds.min.y) / bounds.height);\r\n }\r\n\r\n const indices: number[] = [];\r\n\r\n const res = this.bjsEarcut(this._epoints, this._eholes, 2);\r\n\r\n for (let i = 0; i < res.length; i++) {\r\n indices.push(res[i]);\r\n }\r\n\r\n if (depth > 0) {\r\n const positionscount = positions.length / 3; //get the current pointcount\r\n\r\n for (const p of this._points.elements) {\r\n //add the elements at the depth\r\n normals.push(0, -1.0, 0);\r\n positions.push(p.x, -depth, p.y);\r\n uvs.push(1 - (p.x - bounds.min.x) / bounds.width, 1 - (p.y - bounds.min.y) / bounds.height);\r\n }\r\n\r\n const totalCount = indices.length;\r\n for (let i = 0; i < totalCount; i += 3) {\r\n const i0 = indices[i + 0];\r\n const i1 = indices[i + 1];\r\n const i2 = indices[i + 2];\r\n\r\n indices.push(i2 + positionscount);\r\n indices.push(i1 + positionscount);\r\n indices.push(i0 + positionscount);\r\n }\r\n\r\n //Add the sides\r\n this._addSide(positions, normals, uvs, indices, bounds, this._outlinepoints, depth, false, smoothingThreshold);\r\n\r\n for (const hole of this._holes) {\r\n this._addSide(positions, normals, uvs, indices, bounds, hole, depth, true, smoothingThreshold);\r\n }\r\n }\r\n\r\n result.indices = indices;\r\n result.positions = positions;\r\n result.normals = normals;\r\n result.uvs = uvs;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Adds a side to the polygon\r\n * @param positions points that make the polygon\r\n * @param normals normals of the polygon\r\n * @param uvs uvs of the polygon\r\n * @param indices indices of the polygon\r\n * @param bounds bounds of the polygon\r\n * @param points points of the polygon\r\n * @param depth depth of the polygon\r\n * @param flip flip of the polygon\r\n * @param smoothingThreshold\r\n */\r\n private _addSide(positions: any[], normals: any[], uvs: any[], indices: any[], bounds: any, points: PolygonPoints, depth: number, flip: boolean, smoothingThreshold: number) {\r\n let startIndex: number = positions.length / 3;\r\n let ulength: number = 0;\r\n for (let i: number = 0; i < points.elements.length; i++) {\r\n const p: IndexedVector2 = points.elements[i];\r\n const p1: IndexedVector2 = points.elements[(i + 1) % points.elements.length];\r\n\r\n positions.push(p.x, 0, p.y);\r\n positions.push(p.x, -depth, p.y);\r\n positions.push(p1.x, 0, p1.y);\r\n positions.push(p1.x, -depth, p1.y);\r\n\r\n const p0: IndexedVector2 = points.elements[(i + points.elements.length - 1) % points.elements.length];\r\n const p2: IndexedVector2 = points.elements[(i + 2) % points.elements.length];\r\n\r\n let vc = new Vector3(-(p1.y - p.y), 0, p1.x - p.x);\r\n let vp = new Vector3(-(p.y - p0.y), 0, p.x - p0.x);\r\n let vn = new Vector3(-(p2.y - p1.y), 0, p2.x - p1.x);\r\n\r\n if (!flip) {\r\n vc = vc.scale(-1);\r\n vp = vp.scale(-1);\r\n vn = vn.scale(-1);\r\n }\r\n\r\n const vcNorm = vc.normalizeToNew();\r\n let vpNorm = vp.normalizeToNew();\r\n let vnNorm: Vector3;\r\n\r\n const dotp = Vector3.Dot(vpNorm, vcNorm);\r\n if (dotp > smoothingThreshold) {\r\n if (dotp < Epsilon - 1) {\r\n vpNorm = new Vector3(p.x, 0, p.y).subtract(new Vector3(p1.x, 0, p1.y)).normalize();\r\n } else {\r\n // cheap average weighed by side length\r\n vpNorm = vp.add(vc).normalize();\r\n }\r\n } else {\r\n vpNorm = vcNorm;\r\n }\r\n\r\n const dotn = Vector3.Dot(vn, vc);\r\n if (dotn > smoothingThreshold) {\r\n if (dotn < Epsilon - 1) {\r\n // back to back\r\n vnNorm = new Vector3(p1.x, 0, p1.y).subtract(new Vector3(p.x, 0, p.y)).normalize();\r\n } else {\r\n // cheap average weighed by side length\r\n vnNorm = vn.add(vc).normalize();\r\n }\r\n } else {\r\n vnNorm = vcNorm;\r\n }\r\n\r\n uvs.push(ulength / bounds.width, 0);\r\n uvs.push(ulength / bounds.width, 1);\r\n ulength += vc.length();\r\n uvs.push(ulength / bounds.width, 0);\r\n uvs.push(ulength / bounds.width, 1);\r\n\r\n normals.push(vpNorm.x, vpNorm.y, vpNorm.z);\r\n normals.push(vpNorm.x, vpNorm.y, vpNorm.z);\r\n normals.push(vnNorm.x, vnNorm.y, vnNorm.z);\r\n normals.push(vnNorm.x, vnNorm.y, vnNorm.z);\r\n\r\n if (!flip) {\r\n indices.push(startIndex);\r\n indices.push(startIndex + 1);\r\n indices.push(startIndex + 2);\r\n\r\n indices.push(startIndex + 1);\r\n indices.push(startIndex + 3);\r\n indices.push(startIndex + 2);\r\n } else {\r\n indices.push(startIndex);\r\n indices.push(startIndex + 2);\r\n indices.push(startIndex + 1);\r\n\r\n indices.push(startIndex + 1);\r\n indices.push(startIndex + 2);\r\n indices.push(startIndex + 3);\r\n }\r\n startIndex += 4;\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"polygonMesh.js","sourceRoot":"","sources":["../../../../dev/core/src/Meshes/polygonMesh.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport { type Scene } from \"../scene\";\r\nimport { Vector3, Vector2 } from \"../Maths/math.vector.pure\";\r\nimport { VertexBuffer } from \"../Buffers/buffer.pure\";\r\nimport { Mesh } from \"../Meshes/mesh.pure\";\r\nimport { VertexData } from \"../Meshes/mesh.vertexData\";\r\nimport { type Nullable } from \"../types\";\r\nimport { Path2 } from \"../Maths/math.path\";\r\nimport { Epsilon } from \"../Maths/math.constants\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\ndeclare let earcut: any;\r\n/**\r\n * Vector2 wth index property\r\n */\r\nclass IndexedVector2 extends Vector2 {\r\n /** @internal */\r\n constructor(\r\n original: Vector2,\r\n /** Index of the vector2 */\r\n public index: number\r\n ) {\r\n super(original.x, original.y);\r\n }\r\n}\r\n\r\n/**\r\n * Defines points to create a polygon\r\n */\r\nclass PolygonPoints {\r\n /** @internal */\r\n elements = [] as IndexedVector2[];\r\n\r\n /** @internal */\r\n add(originalPoints: Array<Vector2>): Array<IndexedVector2> {\r\n const result: IndexedVector2[] = [];\r\n for (const point of originalPoints) {\r\n const newPoint = new IndexedVector2(point, this.elements.length);\r\n result.push(newPoint);\r\n this.elements.push(newPoint);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /** @internal */\r\n computeBounds(): { min: Vector2; max: Vector2; width: number; height: number } {\r\n const lmin = new Vector2(this.elements[0].x, this.elements[0].y);\r\n const lmax = new Vector2(this.elements[0].x, this.elements[0].y);\r\n\r\n for (const point of this.elements) {\r\n // x\r\n if (point.x < lmin.x) {\r\n lmin.x = point.x;\r\n } else if (point.x > lmax.x) {\r\n lmax.x = point.x;\r\n }\r\n\r\n // y\r\n if (point.y < lmin.y) {\r\n lmin.y = point.y;\r\n } else if (point.y > lmax.y) {\r\n lmax.y = point.y;\r\n }\r\n }\r\n\r\n return {\r\n min: lmin,\r\n max: lmax,\r\n width: lmax.x - lmin.x,\r\n height: lmax.y - lmin.y,\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Polygon\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/param#non-regular-polygon\r\n */\r\nexport class Polygon {\r\n /**\r\n * Creates a rectangle\r\n * @param xmin bottom X coord\r\n * @param ymin bottom Y coord\r\n * @param xmax top X coord\r\n * @param ymax top Y coord\r\n * @returns points that make the resulting rectangle\r\n */\r\n static Rectangle(xmin: number, ymin: number, xmax: number, ymax: number): Vector2[] {\r\n return [new Vector2(xmin, ymin), new Vector2(xmax, ymin), new Vector2(xmax, ymax), new Vector2(xmin, ymax)];\r\n }\r\n\r\n /**\r\n * Creates a circle\r\n * @param radius radius of circle\r\n * @param cx scale in x\r\n * @param cy scale in y\r\n * @param numberOfSides number of sides that make up the circle\r\n * @returns points that make the resulting circle\r\n */\r\n static Circle(radius: number, cx: number = 0, cy: number = 0, numberOfSides: number = 32): Vector2[] {\r\n const result: Vector2[] = [];\r\n\r\n let angle = 0;\r\n const increment = (Math.PI * 2) / numberOfSides;\r\n\r\n for (let i = 0; i < numberOfSides; i++) {\r\n result.push(new Vector2(cx + Math.cos(angle) * radius, cy + Math.sin(angle) * radius));\r\n angle -= increment;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Creates a polygon from input string\r\n * @param input Input polygon data\r\n * @returns the parsed points\r\n */\r\n static Parse(input: string): Vector2[] {\r\n const floats = input\r\n .split(/[^-+eE.\\d]+/)\r\n .map(parseFloat)\r\n .filter((val) => !isNaN(val));\r\n let i: number;\r\n const result = [];\r\n for (i = 0; i < (floats.length & 0x7ffffffe); i += 2) {\r\n result.push(new Vector2(floats[i], floats[i + 1]));\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Starts building a polygon from x and y coordinates\r\n * @param x x coordinate\r\n * @param y y coordinate\r\n * @returns the started path2\r\n */\r\n static StartingAt(x: number, y: number): Path2 {\r\n return Path2.StartingAt(x, y);\r\n }\r\n}\r\n\r\n/**\r\n * Builds a polygon\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/param/polyMeshBuilder\r\n */\r\nexport class PolygonMeshBuilder {\r\n private _points = new PolygonPoints();\r\n private _outlinepoints = new PolygonPoints();\r\n private _holes = new Array<PolygonPoints>();\r\n\r\n private _name: string;\r\n private _scene: Nullable<Scene>;\r\n\r\n private _epoints: number[] = new Array<number>();\r\n private _eholes: number[] = new Array<number>();\r\n\r\n private _addToepoint(points: Vector2[]) {\r\n for (const p of points) {\r\n this._epoints.push(p.x, p.y);\r\n }\r\n }\r\n\r\n /**\r\n * Babylon reference to the earcut plugin.\r\n */\r\n public bjsEarcut: any;\r\n\r\n /**\r\n * Creates a PolygonMeshBuilder\r\n * @param name name of the builder\r\n * @param contours Path of the polygon\r\n * @param scene scene to add to when creating the mesh\r\n * @param earcutInjection can be used to inject your own earcut reference\r\n */\r\n constructor(name: string, contours: Path2 | Vector2[] | any, scene?: Scene, earcutInjection = earcut) {\r\n this.bjsEarcut = earcutInjection;\r\n this._name = name;\r\n this._scene = scene || EngineStore.LastCreatedScene;\r\n\r\n let points: Vector2[];\r\n if (contours instanceof Path2) {\r\n points = contours.getPoints();\r\n } else {\r\n points = <Vector2[]>contours;\r\n }\r\n\r\n this._addToepoint(points);\r\n\r\n this._points.add(points);\r\n this._outlinepoints.add(points);\r\n\r\n if (typeof this.bjsEarcut === \"undefined\") {\r\n Logger.Warn(\"Earcut was not found, the polygon will not be built.\");\r\n }\r\n }\r\n\r\n /**\r\n * Adds a hole within the polygon\r\n * @param hole Array of points defining the hole\r\n * @returns this\r\n */\r\n addHole(hole: Vector2[]): PolygonMeshBuilder {\r\n this._points.add(hole);\r\n const holepoints = new PolygonPoints();\r\n holepoints.add(hole);\r\n this._holes.push(holepoints);\r\n\r\n this._eholes.push(this._epoints.length / 2);\r\n this._addToepoint(hole);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Creates the polygon\r\n * @param updatable If the mesh should be updatable\r\n * @param depth The depth of the mesh created\r\n * @param smoothingThreshold Dot product threshold for smoothed normals\r\n * @returns the created mesh\r\n */\r\n build(updatable: boolean = false, depth: number = 0, smoothingThreshold: number = 2): Mesh {\r\n const result = new Mesh(this._name, this._scene);\r\n\r\n const vertexData = this.buildVertexData(depth, smoothingThreshold);\r\n\r\n result.setVerticesData(VertexBuffer.PositionKind, <number[]>vertexData.positions, updatable);\r\n result.setVerticesData(VertexBuffer.NormalKind, <number[]>vertexData.normals, updatable);\r\n result.setVerticesData(VertexBuffer.UVKind, <number[]>vertexData.uvs, updatable);\r\n result.setIndices(<number[]>vertexData.indices);\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Creates the polygon\r\n * @param depth The depth of the mesh created\r\n * @param smoothingThreshold Dot product threshold for smoothed normals\r\n * @returns the created VertexData\r\n */\r\n buildVertexData(depth: number = 0, smoothingThreshold: number = 2): VertexData {\r\n const result = new VertexData();\r\n\r\n const normals: number[] = [];\r\n const positions: number[] = [];\r\n const uvs: number[] = [];\r\n\r\n const bounds = this._points.computeBounds();\r\n for (const p of this._points.elements) {\r\n normals.push(0, 1.0, 0);\r\n positions.push(p.x, 0, p.y);\r\n uvs.push((p.x - bounds.min.x) / bounds.width, (p.y - bounds.min.y) / bounds.height);\r\n }\r\n\r\n const indices: number[] = [];\r\n\r\n const res = this.bjsEarcut(this._epoints, this._eholes, 2);\r\n\r\n for (let i = 0; i < res.length; i++) {\r\n indices.push(res[i]);\r\n }\r\n\r\n if (depth > 0) {\r\n const positionscount = positions.length / 3; //get the current pointcount\r\n\r\n for (const p of this._points.elements) {\r\n //add the elements at the depth\r\n normals.push(0, -1.0, 0);\r\n positions.push(p.x, -depth, p.y);\r\n uvs.push(1 - (p.x - bounds.min.x) / bounds.width, 1 - (p.y - bounds.min.y) / bounds.height);\r\n }\r\n\r\n const totalCount = indices.length;\r\n for (let i = 0; i < totalCount; i += 3) {\r\n const i0 = indices[i + 0];\r\n const i1 = indices[i + 1];\r\n const i2 = indices[i + 2];\r\n\r\n indices.push(i2 + positionscount);\r\n indices.push(i1 + positionscount);\r\n indices.push(i0 + positionscount);\r\n }\r\n\r\n //Add the sides\r\n this._addSide(positions, normals, uvs, indices, bounds, this._outlinepoints, depth, false, smoothingThreshold);\r\n\r\n for (const hole of this._holes) {\r\n this._addSide(positions, normals, uvs, indices, bounds, hole, depth, true, smoothingThreshold);\r\n }\r\n }\r\n\r\n result.indices = indices;\r\n result.positions = positions;\r\n result.normals = normals;\r\n result.uvs = uvs;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Adds a side to the polygon\r\n * @param positions points that make the polygon\r\n * @param normals normals of the polygon\r\n * @param uvs uvs of the polygon\r\n * @param indices indices of the polygon\r\n * @param bounds bounds of the polygon\r\n * @param points points of the polygon\r\n * @param depth depth of the polygon\r\n * @param flip flip of the polygon\r\n * @param smoothingThreshold\r\n */\r\n private _addSide(positions: any[], normals: any[], uvs: any[], indices: any[], bounds: any, points: PolygonPoints, depth: number, flip: boolean, smoothingThreshold: number) {\r\n let startIndex: number = positions.length / 3;\r\n let ulength: number = 0;\r\n for (let i: number = 0; i < points.elements.length; i++) {\r\n const p: IndexedVector2 = points.elements[i];\r\n const p1: IndexedVector2 = points.elements[(i + 1) % points.elements.length];\r\n\r\n positions.push(p.x, 0, p.y);\r\n positions.push(p.x, -depth, p.y);\r\n positions.push(p1.x, 0, p1.y);\r\n positions.push(p1.x, -depth, p1.y);\r\n\r\n const p0: IndexedVector2 = points.elements[(i + points.elements.length - 1) % points.elements.length];\r\n const p2: IndexedVector2 = points.elements[(i + 2) % points.elements.length];\r\n\r\n let vc = new Vector3(-(p1.y - p.y), 0, p1.x - p.x);\r\n let vp = new Vector3(-(p.y - p0.y), 0, p.x - p0.x);\r\n let vn = new Vector3(-(p2.y - p1.y), 0, p2.x - p1.x);\r\n\r\n if (!flip) {\r\n vc = vc.scale(-1);\r\n vp = vp.scale(-1);\r\n vn = vn.scale(-1);\r\n }\r\n\r\n const vcNorm = vc.normalizeToNew();\r\n let vpNorm = vp.normalizeToNew();\r\n let vnNorm: Vector3;\r\n\r\n const dotp = Vector3.Dot(vpNorm, vcNorm);\r\n if (dotp > smoothingThreshold) {\r\n if (dotp < Epsilon - 1) {\r\n vpNorm = new Vector3(p.x, 0, p.y).subtract(new Vector3(p1.x, 0, p1.y)).normalize();\r\n } else {\r\n // cheap average weighed by side length\r\n vpNorm = vp.add(vc).normalize();\r\n }\r\n } else {\r\n vpNorm = vcNorm;\r\n }\r\n\r\n const dotn = Vector3.Dot(vn, vc);\r\n if (dotn > smoothingThreshold) {\r\n if (dotn < Epsilon - 1) {\r\n // back to back\r\n vnNorm = new Vector3(p1.x, 0, p1.y).subtract(new Vector3(p.x, 0, p.y)).normalize();\r\n } else {\r\n // cheap average weighed by side length\r\n vnNorm = vn.add(vc).normalize();\r\n }\r\n } else {\r\n vnNorm = vcNorm;\r\n }\r\n\r\n uvs.push(ulength / bounds.width, 0);\r\n uvs.push(ulength / bounds.width, 1);\r\n ulength += vc.length();\r\n uvs.push(ulength / bounds.width, 0);\r\n uvs.push(ulength / bounds.width, 1);\r\n\r\n normals.push(vpNorm.x, vpNorm.y, vpNorm.z);\r\n normals.push(vpNorm.x, vpNorm.y, vpNorm.z);\r\n normals.push(vnNorm.x, vnNorm.y, vnNorm.z);\r\n normals.push(vnNorm.x, vnNorm.y, vnNorm.z);\r\n\r\n if (!flip) {\r\n indices.push(startIndex);\r\n indices.push(startIndex + 1);\r\n indices.push(startIndex + 2);\r\n\r\n indices.push(startIndex + 1);\r\n indices.push(startIndex + 3);\r\n indices.push(startIndex + 2);\r\n } else {\r\n indices.push(startIndex);\r\n indices.push(startIndex + 2);\r\n indices.push(startIndex + 1);\r\n\r\n indices.push(startIndex + 1);\r\n indices.push(startIndex + 2);\r\n indices.push(startIndex + 3);\r\n }\r\n startIndex += 4;\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Vector3 } from "../../Maths/math.vector.js";
|
|
1
|
+
import { Vector3 } from "../../Maths/math.vector.pure.js";
|
|
2
2
|
import { Clamp } from "../../Maths/math.scalar.functions.js";
|
|
3
3
|
import { SphericalPolynomial, SphericalHarmonics } from "../../Maths/sphericalPolynomial.js";
|
|
4
4
|
|
|
5
5
|
import { ToLinearSpace } from "../../Maths/math.constants.js";
|
|
6
|
-
import { Color3 } from "../../Maths/math.color.js";
|
|
6
|
+
import { Color3 } from "../../Maths/math.color.pure.js";
|
|
7
7
|
class FileFaceOrientation {
|
|
8
8
|
constructor(name, worldAxisForNormal, worldAxisForFileX, worldAxisForFileY) {
|
|
9
9
|
this.name = name;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cubemapToSphericalPolynomial.js","sourceRoot":"","sources":["../../../../../dev/core/src/Misc/HighDynamicRange/cubemapToSphericalPolynomial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAG1F,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,MAAM,mBAAmB;IAMrB,YAAmB,IAAY,EAAE,kBAA2B,EAAE,iBAA0B,EAAE,iBAA0B;QAChH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC/C,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAO,iCAAiC;IAe1C;;;;OAIG;IACK,MAAM,CAAC,iBAAiB,CAAC,KAAa;QAC1C,sBAAsB;QACtB,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACb,OAAO,CAAC,CAAC;QACb,CAAC;QACD,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,0CAA0C,CAAC,OAAoB;QACzE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAClB,yCAAyC;YACzC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,gBAAgB,EAAE,CAAC;QAEnD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;QACrC,MAAM,aAAa,GAAG,OAAO,CAAC,8BAA8B,CAAC;QAC7D,MAAM,UAAU,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;QACnF,MAAM,MAAM,GAAG,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,IAAI,IAAI,UAAU,CAAC;QACjE,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEtF,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACvE,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAEtE,IAAI,SAA6C,CAAC;QAClD,IAAI,WAA+C,CAAC;QACpD,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YACzB,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YAC9D,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACJ,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YAC9D,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACvE,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAEtE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACtC,uBAAuB;QACvB,MAAM,MAAM,GAAG,SAAS,CAAC,kBAAkB,CAAC;QAC5C,MAAM,kBAAkB,GAAG,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC;QAE1E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,mFAAmF;YACnF,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;gBACtI,IAAI,aAAa,GAAG,OAAO,CAAC;gBAC5B,IAAI,kBAAkB,EAAE,CAAC;oBACrB,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO;oBACzB,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;oBAC7D,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;oBAC/D,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,EAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;oBACzD,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;oBAC7D,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;oBAC/D,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;oBAC7D,aAAa,GAAG,UAAU,CAAC;gBAC/B,CAAC;gBAED,MAAM,QAAQ,GAAgB;oBAC1B,IAAI,EAAE,aAAa;oBACnB,KAAK;oBACL,IAAI;oBACJ,EAAE;oBACF,IAAI;oBACJ,KAAK;oBACL,IAAI;oBACJ,MAAM;oBACN,IAAI,EAAE,IAAI,YAAY,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,yBAAyB;oBACtG,UAAU;iBACb,CAAC;gBAEF,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;OAMG;IACK,MAAM,CAAC,YAAY,CAAC,CAAS,EAAE,CAAS;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;;;OAOG;IACK,MAAM,CAAC,eAAe,CAAC,IAAqB,EAAE,OAAe,EAAE,OAAe,EAAE,MAAc;QAClG,sEAAsE;QACtE,+EAA+E;QAC/E,MAAM,GAAG,GAAG,IAAI,YAAY,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAkB,CAAC,CAAC;QACxF,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;QACpC,MAAM,OAAO,GAAG,GAAG,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;QAE9C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;YACvC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;YAC7C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC;gBAClC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;gBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;gBAC7C,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC;gBAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9B,IAAI,GAAG,GAAG,CAAC,CAAC;oBACZ,KAAK,IAAI,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;wBAChC,KAAK,IAAI,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;4BAChC,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;wBACjD,CAAC;oBACL,CAAC;oBACD,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC;gBACpC,CAAC;YACL,CAAC;QACL,CAAC;QAED,mEAAmE;QACnE,2DAA2D;QAC3D,IAAI,IAAI,YAAY,YAAY,EAAE,CAAC;YAC/B,OAAO,GAAG,CAAC;QACf,CAAC;QACD,yDAAyD;QACzD,MAAM,IAAI,GAAI,IAAY,CAAC,WAAwD,CAAC;QACpF,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,GAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,mCAAmC,CAAC,QAAqB,EAAE,UAAU,GAAG,CAAC;QACnF,iEAAiE;QACjE,MAAM,eAAe,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChF,IAAI,eAAe,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,GAAG,eAAe,EAAE,CAAC;YACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAU,CAAC;YACxE,MAAM,WAAW,GAAoC,EAAE,CAAC;YACxD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAO,QAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;YAC5G,CAAC;YACD,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;QACtE,CAAC;QAED,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACpD,IAAI,eAAe,GAAG,GAAG,CAAC;QAE1B,4EAA4E;QAC5E,MAAM,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC/B,MAAM,EAAE,GAAG,EAAE,CAAC;QAEd,MAAM,SAAS,GAAG,GAAG,GAAG,EAAE,CAAC;QAE3B,wEAAwE;QACxE,MAAM,KAAK,GAAG,SAAS,GAAG,GAAG,CAAC;QAE9B,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAS,QAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC,GAAG,KAAK,CAAC;YAEd,sIAAsI;YACtI,+GAA+G;YAC/G,kEAAkE;YAClE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,IAAI,CAAC,GAAG,KAAK,CAAC;gBAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBACrC,mCAAmC;oBACnC,MAAM,cAAc,GAAG,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;oBACrI,cAAc,CAAC,SAAS,EAAE,CAAC;oBAE3B,MAAM,eAAe,GACjB,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC;wBAC/C,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC;wBAC/C,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC;wBAC/C,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;oBAEpD,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC/D,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC/D,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;oBAE/D,gDAAgD;oBAChD,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;wBACX,CAAC,GAAG,CAAC,CAAC;oBACV,CAAC;oBACD,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;wBACX,CAAC,GAAG,CAAC,CAAC;oBACV,CAAC;oBACD,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;wBACX,CAAC,GAAG,CAAC,CAAC;oBACV,CAAC;oBAED,wBAAwB;oBACxB,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,yBAAyB,EAAE,CAAC;wBACxD,CAAC,IAAI,GAAG,CAAC;wBACT,CAAC,IAAI,GAAG,CAAC;wBACT,CAAC,IAAI,GAAG,CAAC;oBACb,CAAC;oBAED,+BAA+B;oBAC/B,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;wBACtB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;wBACtC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;wBACtC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;oBAC1C,CAAC;oBAED,4DAA4D;oBAC5D,uDAAuD;oBACvD,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;oBAChC,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;wBAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBACrC,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;4BACnB,MAAM,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC;4BAChC,CAAC,IAAI,MAAM,CAAC;4BACZ,CAAC,IAAI,MAAM,CAAC;4BACZ,CAAC,IAAI,MAAM,CAAC;wBAChB,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACJ,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;wBACrB,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;wBACrB,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;oBACzB,CAAC;oBAED,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAElC,kBAAkB,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;oBAEpE,eAAe,IAAI,eAAe,CAAC;oBAEnC,CAAC,IAAI,EAAE,CAAC;gBACZ,CAAC;gBAED,CAAC,IAAI,EAAE,CAAC;YACZ,CAAC;QACL,CAAC;QAED,wCAAwC;QACxC,MAAM,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;QAEvC,mEAAmE;QACnE,MAAM,cAAc,GAAG,GAAG,CAAC;QAC3B,MAAM,kBAAkB,GAAG,CAAC,gBAAgB,GAAG,cAAc,CAAC,GAAG,GAAG,CAAC;QAErE,6FAA6F;QAC7F,wEAAwE;QACxE,iFAAiF;QACjF,yFAAyF;QACzF,MAAM,gBAAgB,GAAG,kBAAkB,GAAG,eAAe,CAAC;QAC9D,kBAAkB,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;QAElD,kBAAkB,CAAC,mCAAmC,EAAE,CAAC;QACzD,kBAAkB,CAAC,qCAAqC,EAAE,CAAC;QAE3D,OAAO,mBAAmB,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;IACjE,CAAC;;AA1Sc,4CAAU,GAA0B;IAC/C,IAAI,mBAAmB,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU;IAChH,IAAI,mBAAmB,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU;IAC/G,IAAI,mBAAmB,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW;IAC5G,IAAI,mBAAmB,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW;IAChH,IAAI,mBAAmB,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS;IAC9G,IAAI,mBAAmB,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY;CACrH,CAAC;AAEF,gBAAgB;AACF,gDAAc,GAAG,IAAI,CAAC;AACpC,gBAAgB;AACF,yDAAuB,GAAG,KAAK,CAAC","sourcesContent":["import { Vector3 } from \"../../Maths/math.vector\";\r\nimport { Clamp } from \"../../Maths/math.scalar.functions\";\r\nimport { SphericalPolynomial, SphericalHarmonics } from \"../../Maths/sphericalPolynomial\";\r\nimport { type BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { type Nullable } from \"../../types\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { type CubeMapInfo } from \"./panoramaToCubemap\";\r\nimport { ToLinearSpace } from \"../../Maths/math.constants\";\r\nimport { Color3 } from \"../../Maths/math.color\";\r\n\r\nclass FileFaceOrientation {\r\n public name: string;\r\n public worldAxisForNormal: Vector3; // the world axis corresponding to the normal to the face\r\n public worldAxisForFileX: Vector3; // the world axis corresponding to texture right x-axis in file\r\n public worldAxisForFileY: Vector3; // the world axis corresponding to texture down y-axis in file\r\n\r\n public constructor(name: string, worldAxisForNormal: Vector3, worldAxisForFileX: Vector3, worldAxisForFileY: Vector3) {\r\n this.name = name;\r\n this.worldAxisForNormal = worldAxisForNormal;\r\n this.worldAxisForFileX = worldAxisForFileX;\r\n this.worldAxisForFileY = worldAxisForFileY;\r\n }\r\n}\r\n\r\n/**\r\n * Helper class dealing with the extraction of spherical polynomial dataArray\r\n * from a cube map.\r\n */\r\nexport class CubeMapToSphericalPolynomialTools {\r\n private static _FileFaces: FileFaceOrientation[] = [\r\n new FileFaceOrientation(\"right\", new Vector3(1, 0, 0), new Vector3(0, 0, -1), new Vector3(0, -1, 0)), // +X east\r\n new FileFaceOrientation(\"left\", new Vector3(-1, 0, 0), new Vector3(0, 0, 1), new Vector3(0, -1, 0)), // -X west\r\n new FileFaceOrientation(\"up\", new Vector3(0, 1, 0), new Vector3(1, 0, 0), new Vector3(0, 0, 1)), // +Y north\r\n new FileFaceOrientation(\"down\", new Vector3(0, -1, 0), new Vector3(1, 0, 0), new Vector3(0, 0, -1)), // -Y south\r\n new FileFaceOrientation(\"front\", new Vector3(0, 0, 1), new Vector3(1, 0, 0), new Vector3(0, -1, 0)), // +Z top\r\n new FileFaceOrientation(\"back\", new Vector3(0, 0, -1), new Vector3(-1, 0, 0), new Vector3(0, -1, 0)), // -Z bottom\r\n ];\r\n\r\n /** @internal */\r\n public static MAX_HDRI_VALUE = 4096;\r\n /** @internal */\r\n public static PRESERVE_CLAMPED_COLORS = false;\r\n\r\n /**\r\n * Clamp a value to the nearest power of two (rounding down).\r\n * @param value The value to clamp\r\n * @returns The nearest power of two less than or equal to value\r\n */\r\n private static _NearestPow2Floor(value: number): number {\r\n // Ensure minimum of 1\r\n if (value <= 1) {\r\n return 1;\r\n }\r\n return 1 << Math.floor(Math.log2(value));\r\n }\r\n\r\n /**\r\n * Converts a texture to the according Spherical Polynomial data.\r\n * This extracts the first 3 orders only as they are the only one used in the lighting.\r\n *\r\n * @param texture The texture to extract the information from.\r\n * @returns The Spherical Polynomial data.\r\n */\r\n public static ConvertCubeMapTextureToSphericalPolynomial(texture: BaseTexture): Nullable<Promise<SphericalPolynomial>> {\r\n if (!texture.isCube) {\r\n // Only supports cube Textures currently.\r\n return null;\r\n }\r\n\r\n texture.getScene()?.getEngine().flushFramebuffer();\r\n\r\n const size = texture.getSize().width;\r\n const rawTargetSize = texture._sphericalPolynomialTargetSize;\r\n const targetSize = rawTargetSize > 0 ? this._NearestPow2Floor(rawTargetSize) : 0;\r\n const hasMipmaps = !texture.noMipmap && texture._texture?.generateMipMaps === true;\r\n const useMip = targetSize > 0 && targetSize < size && hasMipmaps;\r\n const mipLevel = useMip ? Math.max(0, Math.round(Math.log2(size / targetSize))) : 0;\r\n const mipSize = useMip ? Math.max(1, Math.floor(size / Math.pow(2, mipLevel))) : size;\r\n\r\n const rightPromise = texture.readPixels(0, mipLevel, undefined, false);\r\n const leftPromise = texture.readPixels(1, mipLevel, undefined, false);\r\n\r\n let upPromise: Nullable<Promise<ArrayBufferView>>;\r\n let downPromise: Nullable<Promise<ArrayBufferView>>;\r\n if (texture.isRenderTarget) {\r\n upPromise = texture.readPixels(3, mipLevel, undefined, false);\r\n downPromise = texture.readPixels(2, mipLevel, undefined, false);\r\n } else {\r\n upPromise = texture.readPixels(2, mipLevel, undefined, false);\r\n downPromise = texture.readPixels(3, mipLevel, undefined, false);\r\n }\r\n\r\n const frontPromise = texture.readPixels(4, mipLevel, undefined, false);\r\n const backPromise = texture.readPixels(5, mipLevel, undefined, false);\r\n\r\n const gammaSpace = texture.gammaSpace;\r\n // Always read as RGBA.\r\n const format = Constants.TEXTUREFORMAT_RGBA;\r\n const needsCpuDownsample = targetSize > 0 && targetSize < size && !useMip;\r\n\r\n return new Promise((resolve) => {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n Promise.all([leftPromise, rightPromise, upPromise, downPromise, frontPromise, backPromise]).then(([left, right, up, down, front, back]) => {\r\n let effectiveSize = mipSize;\r\n if (needsCpuDownsample) {\r\n const stride = 4; // RGBA\r\n left = this._DownsampleFace(left!, size, targetSize, stride);\r\n right = this._DownsampleFace(right!, size, targetSize, stride);\r\n up = this._DownsampleFace(up!, size, targetSize, stride);\r\n down = this._DownsampleFace(down!, size, targetSize, stride);\r\n front = this._DownsampleFace(front!, size, targetSize, stride);\r\n back = this._DownsampleFace(back!, size, targetSize, stride);\r\n effectiveSize = targetSize;\r\n }\r\n\r\n const cubeInfo: CubeMapInfo = {\r\n size: effectiveSize,\r\n right,\r\n left,\r\n up,\r\n down,\r\n front,\r\n back,\r\n format,\r\n type: left instanceof Float32Array ? Constants.TEXTURETYPE_FLOAT : Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n gammaSpace,\r\n };\r\n\r\n resolve(this.ConvertCubeMapToSphericalPolynomial(cubeInfo));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Compute the area on the unit sphere of the rectangle defined by (x,y) and the origin\r\n * See https://www.rorydriscoll.com/2012/01/15/cubemap-texel-solid-angle/\r\n * @param x\r\n * @param y\r\n * @returns the area\r\n */\r\n private static _AreaElement(x: number, y: number): number {\r\n return Math.atan2(x * y, Math.sqrt(x * x + y * y + 1));\r\n }\r\n\r\n /**\r\n * Box-filter downsample a single cubemap face.\r\n * @param data Source face data\r\n * @param srcSize Source face width/height\r\n * @param dstSize Target face width/height\r\n * @param stride Number of components per pixel\r\n * @returns Downsampled face data\r\n */\r\n private static _DownsampleFace(data: ArrayBufferView, srcSize: number, dstSize: number, stride: number): ArrayBufferView {\r\n // Build a Float32Array view over the source for uniform accumulation.\r\n // Float32Array: use directly. Any integer typed array: convert element values.\r\n const src = data instanceof Float32Array ? data : Float32Array.from(data as Uint8Array);\r\n const dstLength = dstSize * dstSize * stride;\r\n const avg = new Float32Array(dstLength);\r\n const blockSize = srcSize / dstSize;\r\n const invArea = 1.0 / (blockSize * blockSize);\r\n\r\n for (let dy = 0; dy < dstSize; dy++) {\r\n const sy0 = Math.floor(dy * blockSize);\r\n const sy1 = Math.floor((dy + 1) * blockSize);\r\n for (let dx = 0; dx < dstSize; dx++) {\r\n const sx0 = Math.floor(dx * blockSize);\r\n const sx1 = Math.floor((dx + 1) * blockSize);\r\n const dstIdx = (dy * dstSize + dx) * stride;\r\n for (let c = 0; c < stride; c++) {\r\n let sum = 0;\r\n for (let sy = sy0; sy < sy1; sy++) {\r\n for (let sx = sx0; sx < sx1; sx++) {\r\n sum += src[(sy * srcSize + sx) * stride + c];\r\n }\r\n }\r\n avg[dstIdx + c] = sum * invArea;\r\n }\r\n }\r\n }\r\n\r\n // Return the same typed-array kind as the input so downstream type\r\n // detection (Float32Array vs UNSIGNED_BYTE) keeps working.\r\n if (data instanceof Float32Array) {\r\n return avg;\r\n }\r\n // Integer path: round back into the original array type.\r\n const ctor = (data as any).constructor as { new (length: number): ArrayBufferView };\r\n const dst = new ctor(dstLength);\r\n for (let i = 0; i < dstLength; i++) {\r\n (dst as any)[i] = (avg[i] + 0.5) | 0;\r\n }\r\n return dst;\r\n }\r\n\r\n /**\r\n * Converts a cubemap to the according Spherical Polynomial data.\r\n * This extracts the first 3 orders only as they are the only one used in the lighting.\r\n *\r\n * @param cubeInfo The Cube map to extract the information from.\r\n * @param targetSize Optional target face size for downsampling before integration. 0 = no downsampling (default).\r\n * @returns The Spherical Polynomial data.\r\n */\r\n public static ConvertCubeMapToSphericalPolynomial(cubeInfo: CubeMapInfo, targetSize = 0): SphericalPolynomial {\r\n // Clamp target to power of two and downsample faces if requested\r\n const effectiveTarget = targetSize > 0 ? this._NearestPow2Floor(targetSize) : 0;\r\n if (effectiveTarget > 0 && cubeInfo.size > effectiveTarget) {\r\n const stride = cubeInfo.format === Constants.TEXTUREFORMAT_RGBA ? 4 : 3;\r\n const faces = [\"right\", \"left\", \"up\", \"down\", \"front\", \"back\"] as const;\r\n const downsampled: Record<string, ArrayBufferView> = {};\r\n for (const face of faces) {\r\n downsampled[face] = this._DownsampleFace((<any>cubeInfo)[face], cubeInfo.size, effectiveTarget, stride);\r\n }\r\n cubeInfo = { ...cubeInfo, ...downsampled, size: effectiveTarget };\r\n }\r\n\r\n const sphericalHarmonics = new SphericalHarmonics();\r\n let totalSolidAngle = 0.0;\r\n\r\n // The (u,v) range is [-1,+1], so the distance between each texel is 2/Size.\r\n const du = 2.0 / cubeInfo.size;\r\n const dv = du;\r\n\r\n const halfTexel = 0.5 * du;\r\n\r\n // The (u,v) of the first texel is half a texel from the corner (-1,-1).\r\n const minUV = halfTexel - 1.0;\r\n\r\n for (let faceIndex = 0; faceIndex < 6; faceIndex++) {\r\n const fileFace = this._FileFaces[faceIndex];\r\n const dataArray = (<any>cubeInfo)[fileFace.name];\r\n let v = minUV;\r\n\r\n // TODO: we could perform the summation directly into a SphericalPolynomial (SP), which is more efficient than SphericalHarmonic (SH).\r\n // This is possible because during the summation we do not need the SH-specific properties, e.g. orthogonality.\r\n // Because SP is still linear, so summation is fine in that basis.\r\n const stride = cubeInfo.format === Constants.TEXTUREFORMAT_RGBA ? 4 : 3;\r\n for (let y = 0; y < cubeInfo.size; y++) {\r\n let u = minUV;\r\n\r\n for (let x = 0; x < cubeInfo.size; x++) {\r\n // World direction (not normalised)\r\n const worldDirection = fileFace.worldAxisForFileX.scale(u).add(fileFace.worldAxisForFileY.scale(v)).add(fileFace.worldAxisForNormal);\r\n worldDirection.normalize();\r\n\r\n const deltaSolidAngle =\r\n this._AreaElement(u - halfTexel, v - halfTexel) -\r\n this._AreaElement(u - halfTexel, v + halfTexel) -\r\n this._AreaElement(u + halfTexel, v - halfTexel) +\r\n this._AreaElement(u + halfTexel, v + halfTexel);\r\n\r\n let r = dataArray[y * cubeInfo.size * stride + x * stride + 0];\r\n let g = dataArray[y * cubeInfo.size * stride + x * stride + 1];\r\n let b = dataArray[y * cubeInfo.size * stride + x * stride + 2];\r\n\r\n // Prevent NaN harmonics with extreme HDRI data.\r\n if (isNaN(r)) {\r\n r = 0;\r\n }\r\n if (isNaN(g)) {\r\n g = 0;\r\n }\r\n if (isNaN(b)) {\r\n b = 0;\r\n }\r\n\r\n // Handle Integer types.\r\n if (cubeInfo.type === Constants.TEXTURETYPE_UNSIGNED_BYTE) {\r\n r /= 255;\r\n g /= 255;\r\n b /= 255;\r\n }\r\n\r\n // Handle Gamma space textures.\r\n if (cubeInfo.gammaSpace) {\r\n r = Math.pow(Clamp(r), ToLinearSpace);\r\n g = Math.pow(Clamp(g), ToLinearSpace);\r\n b = Math.pow(Clamp(b), ToLinearSpace);\r\n }\r\n\r\n // Prevent to explode in case of really high dynamic ranges.\r\n // sh 3 would not be enough to accurately represent it.\r\n const max = this.MAX_HDRI_VALUE;\r\n if (this.PRESERVE_CLAMPED_COLORS) {\r\n const currentMax = Math.max(r, g, b);\r\n if (currentMax > max) {\r\n const factor = max / currentMax;\r\n r *= factor;\r\n g *= factor;\r\n b *= factor;\r\n }\r\n } else {\r\n r = Clamp(r, 0, max);\r\n g = Clamp(g, 0, max);\r\n b = Clamp(b, 0, max);\r\n }\r\n\r\n const color = new Color3(r, g, b);\r\n\r\n sphericalHarmonics.addLight(worldDirection, color, deltaSolidAngle);\r\n\r\n totalSolidAngle += deltaSolidAngle;\r\n\r\n u += du;\r\n }\r\n\r\n v += dv;\r\n }\r\n }\r\n\r\n // Solid angle for entire sphere is 4*pi\r\n const sphereSolidAngle = 4.0 * Math.PI;\r\n\r\n // Adjust the solid angle to allow for how many faces we processed.\r\n const facesProcessed = 6.0;\r\n const expectedSolidAngle = (sphereSolidAngle * facesProcessed) / 6.0;\r\n\r\n // Adjust the harmonics so that the accumulated solid angle matches the expected solid angle.\r\n // This is needed because the numerical integration over the cube uses a\r\n // small angle approximation of solid angle for each texel (see deltaSolidAngle),\r\n // and also to compensate for accumulative error due to float precision in the summation.\r\n const correctionFactor = expectedSolidAngle / totalSolidAngle;\r\n sphericalHarmonics.scaleInPlace(correctionFactor);\r\n\r\n sphericalHarmonics.convertIncidentRadianceToIrradiance();\r\n sphericalHarmonics.convertIrradianceToLambertianRadiance();\r\n\r\n return SphericalPolynomial.FromHarmonics(sphericalHarmonics);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"cubemapToSphericalPolynomial.js","sourceRoot":"","sources":["../../../../../dev/core/src/Misc/HighDynamicRange/cubemapToSphericalPolynomial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,mCAAmC,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAG1F,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAErD,MAAM,mBAAmB;IAMrB,YAAmB,IAAY,EAAE,kBAA2B,EAAE,iBAA0B,EAAE,iBAA0B;QAChH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC/C,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAO,iCAAiC;IAe1C;;;;OAIG;IACK,MAAM,CAAC,iBAAiB,CAAC,KAAa;QAC1C,sBAAsB;QACtB,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACb,OAAO,CAAC,CAAC;QACb,CAAC;QACD,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,0CAA0C,CAAC,OAAoB;QACzE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAClB,yCAAyC;YACzC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,gBAAgB,EAAE,CAAC;QAEnD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;QACrC,MAAM,aAAa,GAAG,OAAO,CAAC,8BAA8B,CAAC;QAC7D,MAAM,UAAU,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;QACnF,MAAM,MAAM,GAAG,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,IAAI,IAAI,UAAU,CAAC;QACjE,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEtF,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACvE,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAEtE,IAAI,SAA6C,CAAC;QAClD,IAAI,WAA+C,CAAC;QACpD,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YACzB,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YAC9D,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACJ,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YAC9D,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACvE,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAEtE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACtC,uBAAuB;QACvB,MAAM,MAAM,GAAG,SAAS,CAAC,kBAAkB,CAAC;QAC5C,MAAM,kBAAkB,GAAG,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC;QAE1E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,mFAAmF;YACnF,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;gBACtI,IAAI,aAAa,GAAG,OAAO,CAAC;gBAC5B,IAAI,kBAAkB,EAAE,CAAC;oBACrB,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO;oBACzB,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;oBAC7D,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;oBAC/D,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,EAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;oBACzD,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;oBAC7D,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;oBAC/D,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;oBAC7D,aAAa,GAAG,UAAU,CAAC;gBAC/B,CAAC;gBAED,MAAM,QAAQ,GAAgB;oBAC1B,IAAI,EAAE,aAAa;oBACnB,KAAK;oBACL,IAAI;oBACJ,EAAE;oBACF,IAAI;oBACJ,KAAK;oBACL,IAAI;oBACJ,MAAM;oBACN,IAAI,EAAE,IAAI,YAAY,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,yBAAyB;oBACtG,UAAU;iBACb,CAAC;gBAEF,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;;;;OAMG;IACK,MAAM,CAAC,YAAY,CAAC,CAAS,EAAE,CAAS;QAC5C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED;;;;;;;OAOG;IACK,MAAM,CAAC,eAAe,CAAC,IAAqB,EAAE,OAAe,EAAE,OAAe,EAAE,MAAc;QAClG,sEAAsE;QACtE,+EAA+E;QAC/E,MAAM,GAAG,GAAG,IAAI,YAAY,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAkB,CAAC,CAAC;QACxF,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;QAC7C,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;QACpC,MAAM,OAAO,GAAG,GAAG,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;QAE9C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;YACvC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;YAC7C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC;gBAClC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;gBACvC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;gBAC7C,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC;gBAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9B,IAAI,GAAG,GAAG,CAAC,CAAC;oBACZ,KAAK,IAAI,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;wBAChC,KAAK,IAAI,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC;4BAChC,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,OAAO,GAAG,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;wBACjD,CAAC;oBACL,CAAC;oBACD,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC;gBACpC,CAAC;YACL,CAAC;QACL,CAAC;QAED,mEAAmE;QACnE,2DAA2D;QAC3D,IAAI,IAAI,YAAY,YAAY,EAAE,CAAC;YAC/B,OAAO,GAAG,CAAC;QACf,CAAC;QACD,yDAAyD;QACzD,MAAM,IAAI,GAAI,IAAY,CAAC,WAAwD,CAAC;QACpF,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,GAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,mCAAmC,CAAC,QAAqB,EAAE,UAAU,GAAG,CAAC;QACnF,iEAAiE;QACjE,MAAM,eAAe,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChF,IAAI,eAAe,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,GAAG,eAAe,EAAE,CAAC;YACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAU,CAAC;YACxE,MAAM,WAAW,GAAoC,EAAE,CAAC;YACxD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAO,QAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;YAC5G,CAAC;YACD,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,WAAW,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;QACtE,CAAC;QAED,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACpD,IAAI,eAAe,GAAG,GAAG,CAAC;QAE1B,4EAA4E;QAC5E,MAAM,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC/B,MAAM,EAAE,GAAG,EAAE,CAAC;QAEd,MAAM,SAAS,GAAG,GAAG,GAAG,EAAE,CAAC;QAE3B,wEAAwE;QACxE,MAAM,KAAK,GAAG,SAAS,GAAG,GAAG,CAAC;QAE9B,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;YACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,SAAS,GAAS,QAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjD,IAAI,CAAC,GAAG,KAAK,CAAC;YAEd,sIAAsI;YACtI,+GAA+G;YAC/G,kEAAkE;YAClE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,IAAI,CAAC,GAAG,KAAK,CAAC;gBAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;oBACrC,mCAAmC;oBACnC,MAAM,cAAc,GAAG,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;oBACrI,cAAc,CAAC,SAAS,EAAE,CAAC;oBAE3B,MAAM,eAAe,GACjB,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC;wBAC/C,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC;wBAC/C,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC;wBAC/C,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;oBAEpD,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC/D,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC/D,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;oBAE/D,gDAAgD;oBAChD,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;wBACX,CAAC,GAAG,CAAC,CAAC;oBACV,CAAC;oBACD,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;wBACX,CAAC,GAAG,CAAC,CAAC;oBACV,CAAC;oBACD,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;wBACX,CAAC,GAAG,CAAC,CAAC;oBACV,CAAC;oBAED,wBAAwB;oBACxB,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,yBAAyB,EAAE,CAAC;wBACxD,CAAC,IAAI,GAAG,CAAC;wBACT,CAAC,IAAI,GAAG,CAAC;wBACT,CAAC,IAAI,GAAG,CAAC;oBACb,CAAC;oBAED,+BAA+B;oBAC/B,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;wBACtB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;wBACtC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;wBACtC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;oBAC1C,CAAC;oBAED,4DAA4D;oBAC5D,uDAAuD;oBACvD,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;oBAChC,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;wBAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;wBACrC,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;4BACnB,MAAM,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC;4BAChC,CAAC,IAAI,MAAM,CAAC;4BACZ,CAAC,IAAI,MAAM,CAAC;4BACZ,CAAC,IAAI,MAAM,CAAC;wBAChB,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACJ,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;wBACrB,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;wBACrB,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;oBACzB,CAAC;oBAED,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAElC,kBAAkB,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;oBAEpE,eAAe,IAAI,eAAe,CAAC;oBAEnC,CAAC,IAAI,EAAE,CAAC;gBACZ,CAAC;gBAED,CAAC,IAAI,EAAE,CAAC;YACZ,CAAC;QACL,CAAC;QAED,wCAAwC;QACxC,MAAM,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;QAEvC,mEAAmE;QACnE,MAAM,cAAc,GAAG,GAAG,CAAC;QAC3B,MAAM,kBAAkB,GAAG,CAAC,gBAAgB,GAAG,cAAc,CAAC,GAAG,GAAG,CAAC;QAErE,6FAA6F;QAC7F,wEAAwE;QACxE,iFAAiF;QACjF,yFAAyF;QACzF,MAAM,gBAAgB,GAAG,kBAAkB,GAAG,eAAe,CAAC;QAC9D,kBAAkB,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;QAElD,kBAAkB,CAAC,mCAAmC,EAAE,CAAC;QACzD,kBAAkB,CAAC,qCAAqC,EAAE,CAAC;QAE3D,OAAO,mBAAmB,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;IACjE,CAAC;;AA1Sc,4CAAU,GAA0B;IAC/C,IAAI,mBAAmB,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU;IAChH,IAAI,mBAAmB,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU;IAC/G,IAAI,mBAAmB,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW;IAC5G,IAAI,mBAAmB,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW;IAChH,IAAI,mBAAmB,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS;IAC9G,IAAI,mBAAmB,CAAC,MAAM,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY;CACrH,CAAC;AAEF,gBAAgB;AACF,gDAAc,GAAG,IAAI,CAAC;AACpC,gBAAgB;AACF,yDAAuB,GAAG,KAAK,CAAC","sourcesContent":["import { Vector3 } from \"../../Maths/math.vector.pure\";\r\nimport { Clamp } from \"../../Maths/math.scalar.functions\";\r\nimport { SphericalPolynomial, SphericalHarmonics } from \"../../Maths/sphericalPolynomial\";\r\nimport { type BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { type Nullable } from \"../../types\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { type CubeMapInfo } from \"./panoramaToCubemap\";\r\nimport { ToLinearSpace } from \"../../Maths/math.constants\";\r\nimport { Color3 } from \"../../Maths/math.color.pure\";\r\n\r\nclass FileFaceOrientation {\r\n public name: string;\r\n public worldAxisForNormal: Vector3; // the world axis corresponding to the normal to the face\r\n public worldAxisForFileX: Vector3; // the world axis corresponding to texture right x-axis in file\r\n public worldAxisForFileY: Vector3; // the world axis corresponding to texture down y-axis in file\r\n\r\n public constructor(name: string, worldAxisForNormal: Vector3, worldAxisForFileX: Vector3, worldAxisForFileY: Vector3) {\r\n this.name = name;\r\n this.worldAxisForNormal = worldAxisForNormal;\r\n this.worldAxisForFileX = worldAxisForFileX;\r\n this.worldAxisForFileY = worldAxisForFileY;\r\n }\r\n}\r\n\r\n/**\r\n * Helper class dealing with the extraction of spherical polynomial dataArray\r\n * from a cube map.\r\n */\r\nexport class CubeMapToSphericalPolynomialTools {\r\n private static _FileFaces: FileFaceOrientation[] = [\r\n new FileFaceOrientation(\"right\", new Vector3(1, 0, 0), new Vector3(0, 0, -1), new Vector3(0, -1, 0)), // +X east\r\n new FileFaceOrientation(\"left\", new Vector3(-1, 0, 0), new Vector3(0, 0, 1), new Vector3(0, -1, 0)), // -X west\r\n new FileFaceOrientation(\"up\", new Vector3(0, 1, 0), new Vector3(1, 0, 0), new Vector3(0, 0, 1)), // +Y north\r\n new FileFaceOrientation(\"down\", new Vector3(0, -1, 0), new Vector3(1, 0, 0), new Vector3(0, 0, -1)), // -Y south\r\n new FileFaceOrientation(\"front\", new Vector3(0, 0, 1), new Vector3(1, 0, 0), new Vector3(0, -1, 0)), // +Z top\r\n new FileFaceOrientation(\"back\", new Vector3(0, 0, -1), new Vector3(-1, 0, 0), new Vector3(0, -1, 0)), // -Z bottom\r\n ];\r\n\r\n /** @internal */\r\n public static MAX_HDRI_VALUE = 4096;\r\n /** @internal */\r\n public static PRESERVE_CLAMPED_COLORS = false;\r\n\r\n /**\r\n * Clamp a value to the nearest power of two (rounding down).\r\n * @param value The value to clamp\r\n * @returns The nearest power of two less than or equal to value\r\n */\r\n private static _NearestPow2Floor(value: number): number {\r\n // Ensure minimum of 1\r\n if (value <= 1) {\r\n return 1;\r\n }\r\n return 1 << Math.floor(Math.log2(value));\r\n }\r\n\r\n /**\r\n * Converts a texture to the according Spherical Polynomial data.\r\n * This extracts the first 3 orders only as they are the only one used in the lighting.\r\n *\r\n * @param texture The texture to extract the information from.\r\n * @returns The Spherical Polynomial data.\r\n */\r\n public static ConvertCubeMapTextureToSphericalPolynomial(texture: BaseTexture): Nullable<Promise<SphericalPolynomial>> {\r\n if (!texture.isCube) {\r\n // Only supports cube Textures currently.\r\n return null;\r\n }\r\n\r\n texture.getScene()?.getEngine().flushFramebuffer();\r\n\r\n const size = texture.getSize().width;\r\n const rawTargetSize = texture._sphericalPolynomialTargetSize;\r\n const targetSize = rawTargetSize > 0 ? this._NearestPow2Floor(rawTargetSize) : 0;\r\n const hasMipmaps = !texture.noMipmap && texture._texture?.generateMipMaps === true;\r\n const useMip = targetSize > 0 && targetSize < size && hasMipmaps;\r\n const mipLevel = useMip ? Math.max(0, Math.round(Math.log2(size / targetSize))) : 0;\r\n const mipSize = useMip ? Math.max(1, Math.floor(size / Math.pow(2, mipLevel))) : size;\r\n\r\n const rightPromise = texture.readPixels(0, mipLevel, undefined, false);\r\n const leftPromise = texture.readPixels(1, mipLevel, undefined, false);\r\n\r\n let upPromise: Nullable<Promise<ArrayBufferView>>;\r\n let downPromise: Nullable<Promise<ArrayBufferView>>;\r\n if (texture.isRenderTarget) {\r\n upPromise = texture.readPixels(3, mipLevel, undefined, false);\r\n downPromise = texture.readPixels(2, mipLevel, undefined, false);\r\n } else {\r\n upPromise = texture.readPixels(2, mipLevel, undefined, false);\r\n downPromise = texture.readPixels(3, mipLevel, undefined, false);\r\n }\r\n\r\n const frontPromise = texture.readPixels(4, mipLevel, undefined, false);\r\n const backPromise = texture.readPixels(5, mipLevel, undefined, false);\r\n\r\n const gammaSpace = texture.gammaSpace;\r\n // Always read as RGBA.\r\n const format = Constants.TEXTUREFORMAT_RGBA;\r\n const needsCpuDownsample = targetSize > 0 && targetSize < size && !useMip;\r\n\r\n return new Promise((resolve) => {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n Promise.all([leftPromise, rightPromise, upPromise, downPromise, frontPromise, backPromise]).then(([left, right, up, down, front, back]) => {\r\n let effectiveSize = mipSize;\r\n if (needsCpuDownsample) {\r\n const stride = 4; // RGBA\r\n left = this._DownsampleFace(left!, size, targetSize, stride);\r\n right = this._DownsampleFace(right!, size, targetSize, stride);\r\n up = this._DownsampleFace(up!, size, targetSize, stride);\r\n down = this._DownsampleFace(down!, size, targetSize, stride);\r\n front = this._DownsampleFace(front!, size, targetSize, stride);\r\n back = this._DownsampleFace(back!, size, targetSize, stride);\r\n effectiveSize = targetSize;\r\n }\r\n\r\n const cubeInfo: CubeMapInfo = {\r\n size: effectiveSize,\r\n right,\r\n left,\r\n up,\r\n down,\r\n front,\r\n back,\r\n format,\r\n type: left instanceof Float32Array ? Constants.TEXTURETYPE_FLOAT : Constants.TEXTURETYPE_UNSIGNED_BYTE,\r\n gammaSpace,\r\n };\r\n\r\n resolve(this.ConvertCubeMapToSphericalPolynomial(cubeInfo));\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Compute the area on the unit sphere of the rectangle defined by (x,y) and the origin\r\n * See https://www.rorydriscoll.com/2012/01/15/cubemap-texel-solid-angle/\r\n * @param x\r\n * @param y\r\n * @returns the area\r\n */\r\n private static _AreaElement(x: number, y: number): number {\r\n return Math.atan2(x * y, Math.sqrt(x * x + y * y + 1));\r\n }\r\n\r\n /**\r\n * Box-filter downsample a single cubemap face.\r\n * @param data Source face data\r\n * @param srcSize Source face width/height\r\n * @param dstSize Target face width/height\r\n * @param stride Number of components per pixel\r\n * @returns Downsampled face data\r\n */\r\n private static _DownsampleFace(data: ArrayBufferView, srcSize: number, dstSize: number, stride: number): ArrayBufferView {\r\n // Build a Float32Array view over the source for uniform accumulation.\r\n // Float32Array: use directly. Any integer typed array: convert element values.\r\n const src = data instanceof Float32Array ? data : Float32Array.from(data as Uint8Array);\r\n const dstLength = dstSize * dstSize * stride;\r\n const avg = new Float32Array(dstLength);\r\n const blockSize = srcSize / dstSize;\r\n const invArea = 1.0 / (blockSize * blockSize);\r\n\r\n for (let dy = 0; dy < dstSize; dy++) {\r\n const sy0 = Math.floor(dy * blockSize);\r\n const sy1 = Math.floor((dy + 1) * blockSize);\r\n for (let dx = 0; dx < dstSize; dx++) {\r\n const sx0 = Math.floor(dx * blockSize);\r\n const sx1 = Math.floor((dx + 1) * blockSize);\r\n const dstIdx = (dy * dstSize + dx) * stride;\r\n for (let c = 0; c < stride; c++) {\r\n let sum = 0;\r\n for (let sy = sy0; sy < sy1; sy++) {\r\n for (let sx = sx0; sx < sx1; sx++) {\r\n sum += src[(sy * srcSize + sx) * stride + c];\r\n }\r\n }\r\n avg[dstIdx + c] = sum * invArea;\r\n }\r\n }\r\n }\r\n\r\n // Return the same typed-array kind as the input so downstream type\r\n // detection (Float32Array vs UNSIGNED_BYTE) keeps working.\r\n if (data instanceof Float32Array) {\r\n return avg;\r\n }\r\n // Integer path: round back into the original array type.\r\n const ctor = (data as any).constructor as { new (length: number): ArrayBufferView };\r\n const dst = new ctor(dstLength);\r\n for (let i = 0; i < dstLength; i++) {\r\n (dst as any)[i] = (avg[i] + 0.5) | 0;\r\n }\r\n return dst;\r\n }\r\n\r\n /**\r\n * Converts a cubemap to the according Spherical Polynomial data.\r\n * This extracts the first 3 orders only as they are the only one used in the lighting.\r\n *\r\n * @param cubeInfo The Cube map to extract the information from.\r\n * @param targetSize Optional target face size for downsampling before integration. 0 = no downsampling (default).\r\n * @returns The Spherical Polynomial data.\r\n */\r\n public static ConvertCubeMapToSphericalPolynomial(cubeInfo: CubeMapInfo, targetSize = 0): SphericalPolynomial {\r\n // Clamp target to power of two and downsample faces if requested\r\n const effectiveTarget = targetSize > 0 ? this._NearestPow2Floor(targetSize) : 0;\r\n if (effectiveTarget > 0 && cubeInfo.size > effectiveTarget) {\r\n const stride = cubeInfo.format === Constants.TEXTUREFORMAT_RGBA ? 4 : 3;\r\n const faces = [\"right\", \"left\", \"up\", \"down\", \"front\", \"back\"] as const;\r\n const downsampled: Record<string, ArrayBufferView> = {};\r\n for (const face of faces) {\r\n downsampled[face] = this._DownsampleFace((<any>cubeInfo)[face], cubeInfo.size, effectiveTarget, stride);\r\n }\r\n cubeInfo = { ...cubeInfo, ...downsampled, size: effectiveTarget };\r\n }\r\n\r\n const sphericalHarmonics = new SphericalHarmonics();\r\n let totalSolidAngle = 0.0;\r\n\r\n // The (u,v) range is [-1,+1], so the distance between each texel is 2/Size.\r\n const du = 2.0 / cubeInfo.size;\r\n const dv = du;\r\n\r\n const halfTexel = 0.5 * du;\r\n\r\n // The (u,v) of the first texel is half a texel from the corner (-1,-1).\r\n const minUV = halfTexel - 1.0;\r\n\r\n for (let faceIndex = 0; faceIndex < 6; faceIndex++) {\r\n const fileFace = this._FileFaces[faceIndex];\r\n const dataArray = (<any>cubeInfo)[fileFace.name];\r\n let v = minUV;\r\n\r\n // TODO: we could perform the summation directly into a SphericalPolynomial (SP), which is more efficient than SphericalHarmonic (SH).\r\n // This is possible because during the summation we do not need the SH-specific properties, e.g. orthogonality.\r\n // Because SP is still linear, so summation is fine in that basis.\r\n const stride = cubeInfo.format === Constants.TEXTUREFORMAT_RGBA ? 4 : 3;\r\n for (let y = 0; y < cubeInfo.size; y++) {\r\n let u = minUV;\r\n\r\n for (let x = 0; x < cubeInfo.size; x++) {\r\n // World direction (not normalised)\r\n const worldDirection = fileFace.worldAxisForFileX.scale(u).add(fileFace.worldAxisForFileY.scale(v)).add(fileFace.worldAxisForNormal);\r\n worldDirection.normalize();\r\n\r\n const deltaSolidAngle =\r\n this._AreaElement(u - halfTexel, v - halfTexel) -\r\n this._AreaElement(u - halfTexel, v + halfTexel) -\r\n this._AreaElement(u + halfTexel, v - halfTexel) +\r\n this._AreaElement(u + halfTexel, v + halfTexel);\r\n\r\n let r = dataArray[y * cubeInfo.size * stride + x * stride + 0];\r\n let g = dataArray[y * cubeInfo.size * stride + x * stride + 1];\r\n let b = dataArray[y * cubeInfo.size * stride + x * stride + 2];\r\n\r\n // Prevent NaN harmonics with extreme HDRI data.\r\n if (isNaN(r)) {\r\n r = 0;\r\n }\r\n if (isNaN(g)) {\r\n g = 0;\r\n }\r\n if (isNaN(b)) {\r\n b = 0;\r\n }\r\n\r\n // Handle Integer types.\r\n if (cubeInfo.type === Constants.TEXTURETYPE_UNSIGNED_BYTE) {\r\n r /= 255;\r\n g /= 255;\r\n b /= 255;\r\n }\r\n\r\n // Handle Gamma space textures.\r\n if (cubeInfo.gammaSpace) {\r\n r = Math.pow(Clamp(r), ToLinearSpace);\r\n g = Math.pow(Clamp(g), ToLinearSpace);\r\n b = Math.pow(Clamp(b), ToLinearSpace);\r\n }\r\n\r\n // Prevent to explode in case of really high dynamic ranges.\r\n // sh 3 would not be enough to accurately represent it.\r\n const max = this.MAX_HDRI_VALUE;\r\n if (this.PRESERVE_CLAMPED_COLORS) {\r\n const currentMax = Math.max(r, g, b);\r\n if (currentMax > max) {\r\n const factor = max / currentMax;\r\n r *= factor;\r\n g *= factor;\r\n b *= factor;\r\n }\r\n } else {\r\n r = Clamp(r, 0, max);\r\n g = Clamp(g, 0, max);\r\n b = Clamp(b, 0, max);\r\n }\r\n\r\n const color = new Color3(r, g, b);\r\n\r\n sphericalHarmonics.addLight(worldDirection, color, deltaSolidAngle);\r\n\r\n totalSolidAngle += deltaSolidAngle;\r\n\r\n u += du;\r\n }\r\n\r\n v += dv;\r\n }\r\n }\r\n\r\n // Solid angle for entire sphere is 4*pi\r\n const sphereSolidAngle = 4.0 * Math.PI;\r\n\r\n // Adjust the solid angle to allow for how many faces we processed.\r\n const facesProcessed = 6.0;\r\n const expectedSolidAngle = (sphereSolidAngle * facesProcessed) / 6.0;\r\n\r\n // Adjust the harmonics so that the accumulated solid angle matches the expected solid angle.\r\n // This is needed because the numerical integration over the cube uses a\r\n // small angle approximation of solid angle for each texel (see deltaSolidAngle),\r\n // and also to compensate for accumulative error due to float precision in the summation.\r\n const correctionFactor = expectedSolidAngle / totalSolidAngle;\r\n sphericalHarmonics.scaleInPlace(correctionFactor);\r\n\r\n sphericalHarmonics.convertIncidentRadianceToIrradiance();\r\n sphericalHarmonics.convertIrradianceToLambertianRadiance();\r\n\r\n return SphericalPolynomial.FromHarmonics(sphericalHarmonics);\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panoramaToCubemap.js","sourceRoot":"","sources":["../../../../../dev/core/src/Misc/HighDynamicRange/panoramaToCubemap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAqEpD;;GAEG;AACH,MAAM,OAAO,sBAAsB;IAQ/B;;;;;;;;;;OAUG;IACI,MAAM,CAAC,wBAAwB,CAAC,YAA0B,EAAE,UAAkB,EAAE,WAAmB,EAAE,IAAY,EAAE,WAAW,GAAG,KAAK,EAAE,OAAO,GAAG,IAAI;QACzJ,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,4CAA4C;YAC5C,MAAM,gDAAgD,CAAC;QAC3D,CAAC;QAED,IAAI,MAAc,CAAC;QACnB,IAAI,YAAY,CAAC,MAAM,IAAI,UAAU,GAAG,WAAW,GAAG,CAAC,EAAE,CAAC;YACtD,IAAI,YAAY,CAAC,MAAM,IAAI,UAAU,GAAG,WAAW,GAAG,CAAC,EAAE,CAAC;gBACtD,4CAA4C;gBAC5C,MAAM,+CAA+C,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACJ,MAAM,GAAG,CAAC,CAAC;YACf,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,MAAM,GAAG,CAAC,CAAC;QACf,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3I,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACzI,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACzI,MAAM,YAAY,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3I,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACrI,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAEzI,OAAO;YACH,KAAK,EAAE,YAAY;YACnB,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,WAAW;YACjB,KAAK,EAAE,YAAY;YACnB,EAAE,EAAE,SAAS;YACb,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,SAAS,CAAC,iBAAiB;YACjC,MAAM,EAAE,SAAS,CAAC,iBAAiB;YACnC,UAAU,EAAE,KAAK;SACpB,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,oBAAoB,CAC/B,OAAe,EACf,QAAmB,EACnB,YAA0B,EAC1B,UAAkB,EAClB,WAAmB,EACnB,WAAoB,EACpB,OAAgB,EAChB,MAAc;QAEd,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,OAAO,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;QAE9C,6GAA6G;QAC7G,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,MAAM,YAAY,GAAG,CAAC,GAAG,OAAO,CAAC;QACjC,MAAM,eAAe,GAAG,YAAY,GAAG,YAAY,CAAC;QAEpD,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC;QAE/E,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC;QACvB,IAAI,EAAE,GAAG,CAAC,CAAC;QAEX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC;gBAClC,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC/B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC;wBAClC,MAAM,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;wBAC/C,CAAC,CAAC,SAAS,EAAE,CAAC;wBAEd,MAAM,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;wBAEtG,wBAAwB;wBACxB,YAAY,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,eAAe,CAAC;wBACvE,YAAY,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,eAAe,CAAC;wBACvE,YAAY,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,eAAe,CAAC;wBAEvE,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBACtB,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC1B,CAAC;gBACL,CAAC;gBAED,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;YAC5B,CAAC;QACL,CAAC;QAED,OAAO,YAAY,CAAC;IACxB,CAAC;IAEO,MAAM,CAAC,uBAAuB,CAAC,IAAa,EAAE,YAA0B,EAAE,UAAkB,EAAE,WAAmB,EAAE,MAAc,EAAE,OAAgB;QACvJ,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE9B,OAAO,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACtB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QACzB,CAAC;QACD,OAAO,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QACzB,CAAC;QAED,IAAI,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;QAEzB,YAAY;QACZ,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC;QAEpB,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;QACrC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACT,EAAE,GAAG,CAAC,CAAC;QACX,CAAC;aAAM,IAAI,EAAE,IAAI,UAAU,EAAE,CAAC;YAC1B,EAAE,GAAG,UAAU,GAAG,CAAC,CAAC;QACxB,CAAC;QAED,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC;QACtC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACT,EAAE,GAAG,CAAC,CAAC;QACX,CAAC;aAAM,IAAI,EAAE,IAAI,WAAW,EAAE,CAAC;YAC3B,EAAE,GAAG,WAAW,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;QACvE,MAAM,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,EAAE,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;QAEvE,OAAO;YACH,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;SACP,CAAC;IACN,CAAC;;AAvJc,gCAAS,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACrI,iCAAU,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAClI,iCAAU,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAClI,gCAAS,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACrI,gCAAS,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACjI,8BAAO,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type Nullable } from \"../../types\";\r\nimport { Vector3 } from \"../../Maths/math.vector\";\r\nimport { Constants } from \"../../Engines/constants\";\r\n\r\n/**\r\n * CubeMap information grouping all the data for each faces as well as the cubemap size.\r\n */\r\nexport interface CubeMapInfo {\r\n /**\r\n * The pixel array for the front face.\r\n * This is stored in format, left to right, up to down format.\r\n */\r\n front: Nullable<ArrayBufferView>;\r\n\r\n /**\r\n * The pixel array for the back face.\r\n * This is stored in format, left to right, up to down format.\r\n */\r\n back: Nullable<ArrayBufferView>;\r\n\r\n /**\r\n * The pixel array for the left face.\r\n * This is stored in format, left to right, up to down format.\r\n */\r\n left: Nullable<ArrayBufferView>;\r\n\r\n /**\r\n * The pixel array for the right face.\r\n * This is stored in format, left to right, up to down format.\r\n */\r\n right: Nullable<ArrayBufferView>;\r\n\r\n /**\r\n * The pixel array for the up face.\r\n * This is stored in format, left to right, up to down format.\r\n */\r\n up: Nullable<ArrayBufferView>;\r\n\r\n /**\r\n * The pixel array for the down face.\r\n * This is stored in format, left to right, up to down format.\r\n */\r\n down: Nullable<ArrayBufferView>;\r\n\r\n /**\r\n * The size of the cubemap stored.\r\n *\r\n * Each faces will be size * size pixels.\r\n */\r\n size: number;\r\n\r\n /**\r\n * The format of the texture.\r\n *\r\n * RGBA, RGB.\r\n */\r\n format: number;\r\n\r\n /**\r\n * The type of the texture data.\r\n *\r\n * UNSIGNED_INT, FLOAT.\r\n */\r\n type: number;\r\n\r\n /**\r\n * Specifies whether the texture is in gamma space.\r\n */\r\n gammaSpace: boolean;\r\n}\r\n\r\n/**\r\n * Helper class useful to convert panorama picture to their cubemap representation in 6 faces.\r\n */\r\nexport class PanoramaToCubeMapTools {\r\n private static FACE_LEFT = [new Vector3(-1.0, -1.0, -1.0), new Vector3(1.0, -1.0, -1.0), new Vector3(-1.0, 1.0, -1.0), new Vector3(1.0, 1.0, -1.0)];\r\n private static FACE_RIGHT = [new Vector3(1.0, -1.0, 1.0), new Vector3(-1.0, -1.0, 1.0), new Vector3(1.0, 1.0, 1.0), new Vector3(-1.0, 1.0, 1.0)];\r\n private static FACE_FRONT = [new Vector3(1.0, -1.0, -1.0), new Vector3(1.0, -1.0, 1.0), new Vector3(1.0, 1.0, -1.0), new Vector3(1.0, 1.0, 1.0)];\r\n private static FACE_BACK = [new Vector3(-1.0, -1.0, 1.0), new Vector3(-1.0, -1.0, -1.0), new Vector3(-1.0, 1.0, 1.0), new Vector3(-1.0, 1.0, -1.0)];\r\n private static FACE_DOWN = [new Vector3(1.0, 1.0, -1.0), new Vector3(1.0, 1.0, 1.0), new Vector3(-1.0, 1.0, -1.0), new Vector3(-1.0, 1.0, 1.0)];\r\n private static FACE_UP = [new Vector3(-1.0, -1.0, -1.0), new Vector3(-1.0, -1.0, 1.0), new Vector3(1.0, -1.0, -1.0), new Vector3(1.0, -1.0, 1.0)];\r\n\r\n /**\r\n * Converts a panorama stored in RGB right to left up to down format into a cubemap (6 faces).\r\n *\r\n * @param float32Array The source data.\r\n * @param inputWidth The width of the input panorama.\r\n * @param inputHeight The height of the input panorama.\r\n * @param size The willing size of the generated cubemap (each faces will be size * size pixels)\r\n * @param supersample enable supersampling the cubemap\r\n * @param invertY defines if the Y axis must be inverted\r\n * @returns The cubemap data\r\n */\r\n public static ConvertPanoramaToCubemap(float32Array: Float32Array, inputWidth: number, inputHeight: number, size: number, supersample = false, invertY = true): CubeMapInfo {\r\n if (!float32Array) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"ConvertPanoramaToCubemap: input cannot be null\";\r\n }\r\n\r\n let stride: number;\r\n if (float32Array.length != inputWidth * inputHeight * 3) {\r\n if (float32Array.length != inputWidth * inputHeight * 4) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"ConvertPanoramaToCubemap: input size is wrong\";\r\n } else {\r\n stride = 4;\r\n }\r\n } else {\r\n stride = 3;\r\n }\r\n\r\n const textureFront = this.CreateCubemapTexture(size, this.FACE_FRONT, float32Array, inputWidth, inputHeight, supersample, invertY, stride);\r\n const textureBack = this.CreateCubemapTexture(size, this.FACE_BACK, float32Array, inputWidth, inputHeight, supersample, invertY, stride);\r\n const textureLeft = this.CreateCubemapTexture(size, this.FACE_LEFT, float32Array, inputWidth, inputHeight, supersample, invertY, stride);\r\n const textureRight = this.CreateCubemapTexture(size, this.FACE_RIGHT, float32Array, inputWidth, inputHeight, supersample, invertY, stride);\r\n const textureUp = this.CreateCubemapTexture(size, this.FACE_UP, float32Array, inputWidth, inputHeight, supersample, invertY, stride);\r\n const textureDown = this.CreateCubemapTexture(size, this.FACE_DOWN, float32Array, inputWidth, inputHeight, supersample, invertY, stride);\r\n\r\n return {\r\n front: textureFront,\r\n back: textureBack,\r\n left: textureLeft,\r\n right: textureRight,\r\n up: textureUp,\r\n down: textureDown,\r\n size: size,\r\n type: Constants.TEXTURETYPE_FLOAT,\r\n format: Constants.TEXTUREFORMAT_RGB,\r\n gammaSpace: false,\r\n };\r\n }\r\n\r\n private static CreateCubemapTexture(\r\n texSize: number,\r\n faceData: Vector3[],\r\n float32Array: Float32Array,\r\n inputWidth: number,\r\n inputHeight: number,\r\n supersample: boolean,\r\n invertY: boolean,\r\n stride: number\r\n ): Float32Array {\r\n const buffer = new ArrayBuffer(texSize * texSize * 4 * 3);\r\n const textureArray = new Float32Array(buffer);\r\n\r\n // If supersampling, determine number of samples needed when source texture width is divided for 4 cube faces\r\n const samples = supersample ? Math.max(1, Math.round(inputWidth / 4 / texSize)) : 1;\r\n const sampleFactor = 1 / samples;\r\n const sampleFactorSqr = sampleFactor * sampleFactor;\r\n\r\n const rotDX1 = faceData[1].subtract(faceData[0]).scale(sampleFactor / texSize);\r\n const rotDX2 = faceData[3].subtract(faceData[2]).scale(sampleFactor / texSize);\r\n\r\n const dy = 1 / texSize;\r\n let fy = 0;\r\n\r\n for (let y = 0; y < texSize; y++) {\r\n for (let sy = 0; sy < samples; sy++) {\r\n let xv1 = faceData[0];\r\n let xv2 = faceData[2];\r\n\r\n for (let x = 0; x < texSize; x++) {\r\n for (let sx = 0; sx < samples; sx++) {\r\n const v = xv2.subtract(xv1).scale(fy).add(xv1);\r\n v.normalize();\r\n\r\n const color = this.CalcProjectionSpherical(v, float32Array, inputWidth, inputHeight, stride, invertY);\r\n\r\n // 3 channels per pixels\r\n textureArray[y * texSize * 3 + x * 3 + 0] += color.r * sampleFactorSqr;\r\n textureArray[y * texSize * 3 + x * 3 + 1] += color.g * sampleFactorSqr;\r\n textureArray[y * texSize * 3 + x * 3 + 2] += color.b * sampleFactorSqr;\r\n\r\n xv1 = xv1.add(rotDX1);\r\n xv2 = xv2.add(rotDX2);\r\n }\r\n }\r\n\r\n fy += dy * sampleFactor;\r\n }\r\n }\r\n\r\n return textureArray;\r\n }\r\n\r\n private static CalcProjectionSpherical(vDir: Vector3, float32Array: Float32Array, inputWidth: number, inputHeight: number, stride: number, invertY: boolean): any {\r\n let theta = Math.atan2(vDir.z, vDir.x);\r\n const phi = Math.acos(vDir.y);\r\n\r\n while (theta < -Math.PI) {\r\n theta += 2 * Math.PI;\r\n }\r\n while (theta > Math.PI) {\r\n theta -= 2 * Math.PI;\r\n }\r\n\r\n let dx = theta / Math.PI;\r\n const dy = phi / Math.PI;\r\n\r\n // recenter.\r\n dx = dx * 0.5 + 0.5;\r\n\r\n let px = Math.round(dx * inputWidth);\r\n if (px < 0) {\r\n px = 0;\r\n } else if (px >= inputWidth) {\r\n px = inputWidth - 1;\r\n }\r\n\r\n let py = Math.round(dy * inputHeight);\r\n if (py < 0) {\r\n py = 0;\r\n } else if (py >= inputHeight) {\r\n py = inputHeight - 1;\r\n }\r\n\r\n const inputY = invertY ? inputHeight - py - 1 : py;\r\n const r = float32Array[inputY * inputWidth * stride + px * stride + 0];\r\n const g = float32Array[inputY * inputWidth * stride + px * stride + 1];\r\n const b = float32Array[inputY * inputWidth * stride + px * stride + 2];\r\n\r\n return {\r\n r: r,\r\n g: g,\r\n b: b,\r\n };\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"panoramaToCubemap.js","sourceRoot":"","sources":["../../../../../dev/core/src/Misc/HighDynamicRange/panoramaToCubemap.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type Nullable } from \"../../types\";\r\nimport { Vector3 } from \"../../Maths/math.vector.pure\";\r\nimport { Constants } from \"../../Engines/constants\";\r\n\r\n/**\r\n * CubeMap information grouping all the data for each faces as well as the cubemap size.\r\n */\r\nexport interface CubeMapInfo {\r\n /**\r\n * The pixel array for the front face.\r\n * This is stored in format, left to right, up to down format.\r\n */\r\n front: Nullable<ArrayBufferView>;\r\n\r\n /**\r\n * The pixel array for the back face.\r\n * This is stored in format, left to right, up to down format.\r\n */\r\n back: Nullable<ArrayBufferView>;\r\n\r\n /**\r\n * The pixel array for the left face.\r\n * This is stored in format, left to right, up to down format.\r\n */\r\n left: Nullable<ArrayBufferView>;\r\n\r\n /**\r\n * The pixel array for the right face.\r\n * This is stored in format, left to right, up to down format.\r\n */\r\n right: Nullable<ArrayBufferView>;\r\n\r\n /**\r\n * The pixel array for the up face.\r\n * This is stored in format, left to right, up to down format.\r\n */\r\n up: Nullable<ArrayBufferView>;\r\n\r\n /**\r\n * The pixel array for the down face.\r\n * This is stored in format, left to right, up to down format.\r\n */\r\n down: Nullable<ArrayBufferView>;\r\n\r\n /**\r\n * The size of the cubemap stored.\r\n *\r\n * Each faces will be size * size pixels.\r\n */\r\n size: number;\r\n\r\n /**\r\n * The format of the texture.\r\n *\r\n * RGBA, RGB.\r\n */\r\n format: number;\r\n\r\n /**\r\n * The type of the texture data.\r\n *\r\n * UNSIGNED_INT, FLOAT.\r\n */\r\n type: number;\r\n\r\n /**\r\n * Specifies whether the texture is in gamma space.\r\n */\r\n gammaSpace: boolean;\r\n}\r\n\r\n/**\r\n * Helper class useful to convert panorama picture to their cubemap representation in 6 faces.\r\n */\r\nexport class PanoramaToCubeMapTools {\r\n private static FACE_LEFT = [new Vector3(-1.0, -1.0, -1.0), new Vector3(1.0, -1.0, -1.0), new Vector3(-1.0, 1.0, -1.0), new Vector3(1.0, 1.0, -1.0)];\r\n private static FACE_RIGHT = [new Vector3(1.0, -1.0, 1.0), new Vector3(-1.0, -1.0, 1.0), new Vector3(1.0, 1.0, 1.0), new Vector3(-1.0, 1.0, 1.0)];\r\n private static FACE_FRONT = [new Vector3(1.0, -1.0, -1.0), new Vector3(1.0, -1.0, 1.0), new Vector3(1.0, 1.0, -1.0), new Vector3(1.0, 1.0, 1.0)];\r\n private static FACE_BACK = [new Vector3(-1.0, -1.0, 1.0), new Vector3(-1.0, -1.0, -1.0), new Vector3(-1.0, 1.0, 1.0), new Vector3(-1.0, 1.0, -1.0)];\r\n private static FACE_DOWN = [new Vector3(1.0, 1.0, -1.0), new Vector3(1.0, 1.0, 1.0), new Vector3(-1.0, 1.0, -1.0), new Vector3(-1.0, 1.0, 1.0)];\r\n private static FACE_UP = [new Vector3(-1.0, -1.0, -1.0), new Vector3(-1.0, -1.0, 1.0), new Vector3(1.0, -1.0, -1.0), new Vector3(1.0, -1.0, 1.0)];\r\n\r\n /**\r\n * Converts a panorama stored in RGB right to left up to down format into a cubemap (6 faces).\r\n *\r\n * @param float32Array The source data.\r\n * @param inputWidth The width of the input panorama.\r\n * @param inputHeight The height of the input panorama.\r\n * @param size The willing size of the generated cubemap (each faces will be size * size pixels)\r\n * @param supersample enable supersampling the cubemap\r\n * @param invertY defines if the Y axis must be inverted\r\n * @returns The cubemap data\r\n */\r\n public static ConvertPanoramaToCubemap(float32Array: Float32Array, inputWidth: number, inputHeight: number, size: number, supersample = false, invertY = true): CubeMapInfo {\r\n if (!float32Array) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"ConvertPanoramaToCubemap: input cannot be null\";\r\n }\r\n\r\n let stride: number;\r\n if (float32Array.length != inputWidth * inputHeight * 3) {\r\n if (float32Array.length != inputWidth * inputHeight * 4) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"ConvertPanoramaToCubemap: input size is wrong\";\r\n } else {\r\n stride = 4;\r\n }\r\n } else {\r\n stride = 3;\r\n }\r\n\r\n const textureFront = this.CreateCubemapTexture(size, this.FACE_FRONT, float32Array, inputWidth, inputHeight, supersample, invertY, stride);\r\n const textureBack = this.CreateCubemapTexture(size, this.FACE_BACK, float32Array, inputWidth, inputHeight, supersample, invertY, stride);\r\n const textureLeft = this.CreateCubemapTexture(size, this.FACE_LEFT, float32Array, inputWidth, inputHeight, supersample, invertY, stride);\r\n const textureRight = this.CreateCubemapTexture(size, this.FACE_RIGHT, float32Array, inputWidth, inputHeight, supersample, invertY, stride);\r\n const textureUp = this.CreateCubemapTexture(size, this.FACE_UP, float32Array, inputWidth, inputHeight, supersample, invertY, stride);\r\n const textureDown = this.CreateCubemapTexture(size, this.FACE_DOWN, float32Array, inputWidth, inputHeight, supersample, invertY, stride);\r\n\r\n return {\r\n front: textureFront,\r\n back: textureBack,\r\n left: textureLeft,\r\n right: textureRight,\r\n up: textureUp,\r\n down: textureDown,\r\n size: size,\r\n type: Constants.TEXTURETYPE_FLOAT,\r\n format: Constants.TEXTUREFORMAT_RGB,\r\n gammaSpace: false,\r\n };\r\n }\r\n\r\n private static CreateCubemapTexture(\r\n texSize: number,\r\n faceData: Vector3[],\r\n float32Array: Float32Array,\r\n inputWidth: number,\r\n inputHeight: number,\r\n supersample: boolean,\r\n invertY: boolean,\r\n stride: number\r\n ): Float32Array {\r\n const buffer = new ArrayBuffer(texSize * texSize * 4 * 3);\r\n const textureArray = new Float32Array(buffer);\r\n\r\n // If supersampling, determine number of samples needed when source texture width is divided for 4 cube faces\r\n const samples = supersample ? Math.max(1, Math.round(inputWidth / 4 / texSize)) : 1;\r\n const sampleFactor = 1 / samples;\r\n const sampleFactorSqr = sampleFactor * sampleFactor;\r\n\r\n const rotDX1 = faceData[1].subtract(faceData[0]).scale(sampleFactor / texSize);\r\n const rotDX2 = faceData[3].subtract(faceData[2]).scale(sampleFactor / texSize);\r\n\r\n const dy = 1 / texSize;\r\n let fy = 0;\r\n\r\n for (let y = 0; y < texSize; y++) {\r\n for (let sy = 0; sy < samples; sy++) {\r\n let xv1 = faceData[0];\r\n let xv2 = faceData[2];\r\n\r\n for (let x = 0; x < texSize; x++) {\r\n for (let sx = 0; sx < samples; sx++) {\r\n const v = xv2.subtract(xv1).scale(fy).add(xv1);\r\n v.normalize();\r\n\r\n const color = this.CalcProjectionSpherical(v, float32Array, inputWidth, inputHeight, stride, invertY);\r\n\r\n // 3 channels per pixels\r\n textureArray[y * texSize * 3 + x * 3 + 0] += color.r * sampleFactorSqr;\r\n textureArray[y * texSize * 3 + x * 3 + 1] += color.g * sampleFactorSqr;\r\n textureArray[y * texSize * 3 + x * 3 + 2] += color.b * sampleFactorSqr;\r\n\r\n xv1 = xv1.add(rotDX1);\r\n xv2 = xv2.add(rotDX2);\r\n }\r\n }\r\n\r\n fy += dy * sampleFactor;\r\n }\r\n }\r\n\r\n return textureArray;\r\n }\r\n\r\n private static CalcProjectionSpherical(vDir: Vector3, float32Array: Float32Array, inputWidth: number, inputHeight: number, stride: number, invertY: boolean): any {\r\n let theta = Math.atan2(vDir.z, vDir.x);\r\n const phi = Math.acos(vDir.y);\r\n\r\n while (theta < -Math.PI) {\r\n theta += 2 * Math.PI;\r\n }\r\n while (theta > Math.PI) {\r\n theta -= 2 * Math.PI;\r\n }\r\n\r\n let dx = theta / Math.PI;\r\n const dy = phi / Math.PI;\r\n\r\n // recenter.\r\n dx = dx * 0.5 + 0.5;\r\n\r\n let px = Math.round(dx * inputWidth);\r\n if (px < 0) {\r\n px = 0;\r\n } else if (px >= inputWidth) {\r\n px = inputWidth - 1;\r\n }\r\n\r\n let py = Math.round(dy * inputHeight);\r\n if (py < 0) {\r\n py = 0;\r\n } else if (py >= inputHeight) {\r\n py = inputHeight - 1;\r\n }\r\n\r\n const inputY = invertY ? inputHeight - py - 1 : py;\r\n const r = float32Array[inputY * inputWidth * stride + px * stride + 0];\r\n const g = float32Array[inputY * inputWidth * stride + px * stride + 1];\r\n const b = float32Array[inputY * inputWidth * stride + px * stride + 2];\r\n\r\n return {\r\n r: r,\r\n g: g,\r\n b: b,\r\n };\r\n }\r\n}\r\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EventState, Observable } from "../observable.js";
|
|
2
2
|
import { PrecisionDate } from "../precisionDate.js";
|
|
3
|
-
import { Tools } from "../tools.js";
|
|
3
|
+
import { Tools } from "../tools.pure.js";
|
|
4
4
|
import { DynamicFloat32Array } from "./dynamicFloat32Array.js";
|
|
5
5
|
// the initial size of our array, should be a multiple of two!
|
|
6
6
|
const InitialArraySize = 1800;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"performanceViewerCollector.js","sourceRoot":"","sources":["../../../../../dev/core/src/Misc/PerformanceViewer/performanceViewerCollector.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Scene } from \"../../scene\";\r\nimport { type IPerfCustomEvent, type IPerfDatasets, type IPerfMetadata } from \"../interfaces/iPerfViewer\";\r\nimport { EventState, Observable } from \"../observable\";\r\nimport { PrecisionDate } from \"../precisionDate\";\r\nimport { Tools } from \"../tools\";\r\nimport { DynamicFloat32Array } from \"./dynamicFloat32Array\";\r\nimport { type IPerfViewerCollectionStrategy, type PerfStrategyInitialization } from \"./performanceViewerCollectionStrategies\";\r\n\r\n// the initial size of our array, should be a multiple of two!\r\nconst InitialArraySize = 1800;\r\n\r\n// three octets in a hexcode. #[AA][BB][CC], i.e. 24 bits of data.\r\nconst NumberOfBitsInHexcode = 24;\r\n\r\n// Allows single numeral hex numbers to be appended by a 0.\r\nconst HexPadding = \"0\";\r\n\r\n// header for the timestamp column\r\nconst TimestampColHeader = \"timestamp\";\r\n\r\n// header for the numPoints column\r\nconst NumPointsColHeader = \"numPoints\";\r\n\r\n// regex to capture all carriage returns in the string.\r\nconst CarriageReturnRegex = /\\r/g;\r\n\r\n// string to use as separator when exporting extra information along with the dataset id\r\nconst ExportedDataSeparator = \"@\";\r\n\r\n/**\r\n * Callback strategy and optional category for data collection\r\n */\r\ninterface IPerformanceViewerStrategyParameter {\r\n /**\r\n * The strategy for collecting data. Available strategies are located on the PerfCollectionStrategy class\r\n */\r\n strategyCallback: PerfStrategyInitialization;\r\n /**\r\n * Category for displaying this strategy on the viewer. Can be undefined or an empty string, in which case the strategy will be displayed on top\r\n */\r\n category?: string;\r\n /**\r\n * Starts hidden\r\n */\r\n hidden?: boolean;\r\n}\r\n\r\n/**\r\n * The collector class handles the collection and storage of data into the appropriate array.\r\n * The collector also handles notifying any observers of any updates.\r\n */\r\nexport class PerformanceViewerCollector {\r\n private _datasetMeta: Map<string, IPerfMetadata>;\r\n private _strategies: Map<string, IPerfViewerCollectionStrategy>;\r\n private _startingTimestamp: number;\r\n private _hasLoadedData: boolean;\r\n private _isStarted: boolean;\r\n private readonly _customEventObservable: Observable<IPerfCustomEvent>;\r\n private readonly _eventRestoreSet: Set<string>;\r\n\r\n /**\r\n * Datastructure containing the collected datasets. Warning: you should not modify the values in here, data will be of the form [timestamp, numberOfPoints, value1, value2..., timestamp, etc...]\r\n */\r\n public readonly datasets: IPerfDatasets;\r\n /**\r\n * An observable you can attach to get deltas in the dataset. Subscribing to this will increase memory consumption slightly, and may hurt performance due to increased garbage collection needed.\r\n * Updates of slices will be of the form [timestamp, numberOfPoints, value1, value2...].\r\n */\r\n public readonly datasetObservable: Observable<number[]>;\r\n /**\r\n * An observable you can attach to get the most updated map of metadatas.\r\n */\r\n public readonly metadataObservable: Observable<Map<string, IPerfMetadata>>;\r\n\r\n /**\r\n * The offset for when actual data values start appearing inside a slice.\r\n */\r\n public static get SliceDataOffset() {\r\n return 2;\r\n }\r\n\r\n /**\r\n * The offset for the value of the number of points inside a slice.\r\n */\r\n public static get NumberOfPointsOffset() {\r\n return 1;\r\n }\r\n\r\n /**\r\n * Handles the creation of a performance viewer collector.\r\n * @param _scene the scene to collect on.\r\n * @param _enabledStrategyCallbacks the list of data to collect with callbacks for initialization purposes.\r\n */\r\n constructor(\r\n private _scene: Scene,\r\n _enabledStrategyCallbacks?: IPerformanceViewerStrategyParameter[]\r\n ) {\r\n this.datasets = {\r\n ids: [],\r\n data: new DynamicFloat32Array(InitialArraySize),\r\n startingIndices: new DynamicFloat32Array(InitialArraySize),\r\n };\r\n this._strategies = new Map<string, IPerfViewerCollectionStrategy>();\r\n this._datasetMeta = new Map<string, IPerfMetadata>();\r\n this._eventRestoreSet = new Set();\r\n this._customEventObservable = new Observable();\r\n this.datasetObservable = new Observable();\r\n this.metadataObservable = new Observable((observer) => observer.callback(this._datasetMeta, new EventState(0)));\r\n if (_enabledStrategyCallbacks) {\r\n this.addCollectionStrategies(..._enabledStrategyCallbacks);\r\n }\r\n }\r\n\r\n /**\r\n * Registers a custom string event which will be callable via sendEvent. This method returns an event object which will contain the id of the event.\r\n * The user can set a value optionally, which will be used in the sendEvent method. If the value is set, we will record this value at the end of each frame,\r\n * if not we will increment our counter and record the value of the counter at the end of each frame. The value recorded is 0 if no sendEvent method is called, within a frame.\r\n * @param name The name of the event to register\r\n * @param forceUpdate if the code should force add an event, and replace the last one.\r\n * @param category the category for that event\r\n * @returns The event registered, used in sendEvent\r\n */\r\n public registerEvent(name: string, forceUpdate?: boolean, category?: string): IPerfCustomEvent | undefined {\r\n if (this._strategies.has(name) && !forceUpdate) {\r\n return;\r\n }\r\n\r\n if (this._strategies.has(name) && forceUpdate) {\r\n this._strategies.get(name)?.dispose();\r\n this._strategies.delete(name);\r\n }\r\n\r\n const strategy: PerfStrategyInitialization = (scene) => {\r\n let counter: number = 0;\r\n let value: number = 0;\r\n\r\n const afterRenderObserver = scene.onAfterRenderObservable.add(() => {\r\n value = counter;\r\n counter = 0;\r\n });\r\n\r\n const stringObserver = this._customEventObservable.add((eventVal) => {\r\n if (name !== eventVal.name) {\r\n return;\r\n }\r\n\r\n if (eventVal.value !== undefined) {\r\n counter = eventVal.value;\r\n } else {\r\n counter++;\r\n }\r\n });\r\n\r\n return {\r\n id: name,\r\n getData: () => value,\r\n dispose: () => {\r\n scene.onAfterRenderObservable.remove(afterRenderObserver);\r\n this._customEventObservable.remove(stringObserver);\r\n },\r\n };\r\n };\r\n const event: IPerfCustomEvent = {\r\n name,\r\n };\r\n\r\n this._eventRestoreSet.add(name);\r\n this.addCollectionStrategies({ strategyCallback: strategy, category });\r\n\r\n return event;\r\n }\r\n\r\n /**\r\n * Lets the perf collector handle an event, occurences or event value depending on if the event.value params is set.\r\n * @param event the event to handle an occurence for\r\n */\r\n public sendEvent(event: IPerfCustomEvent) {\r\n this._customEventObservable.notifyObservers(event);\r\n }\r\n\r\n /**\r\n * This event restores all custom string events if necessary.\r\n */\r\n private _restoreStringEvents() {\r\n if (this._eventRestoreSet.size !== this._customEventObservable.observers.length) {\r\n this._eventRestoreSet.forEach((event) => {\r\n this.registerEvent(event, true);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * This method adds additional collection strategies for data collection purposes.\r\n * @param strategyCallbacks the list of data to collect with callbacks.\r\n */\r\n public addCollectionStrategies(...strategyCallbacks: IPerformanceViewerStrategyParameter[]) {\r\n // eslint-disable-next-line prefer-const\r\n for (let { strategyCallback, category, hidden } of strategyCallbacks) {\r\n const strategy = strategyCallback(this._scene);\r\n if (this._strategies.has(strategy.id)) {\r\n strategy.dispose();\r\n continue;\r\n }\r\n\r\n this.datasets.ids.push(strategy.id);\r\n\r\n if (category) {\r\n category = category.replace(new RegExp(ExportedDataSeparator, \"g\"), \"\");\r\n }\r\n\r\n this._datasetMeta.set(strategy.id, {\r\n color: this._getHexColorFromId(strategy.id),\r\n category,\r\n hidden,\r\n });\r\n\r\n this._strategies.set(strategy.id, strategy);\r\n }\r\n\r\n this.metadataObservable.notifyObservers(this._datasetMeta);\r\n }\r\n\r\n /**\r\n * Gets a 6 character hexcode representing the colour from a passed in string.\r\n * @param id the string to get a hex code for.\r\n * @returns a hexcode hashed from the id.\r\n */\r\n private _getHexColorFromId(id: string) {\r\n // this first bit is just a known way of hashing a string.\r\n let hash = 0;\r\n for (let i = 0; i < id.length; i++) {\r\n // (hash << 5) - hash is the same as hash * 31\r\n hash = id.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n\r\n // then we build the string octet by octet.\r\n let hex = \"#\";\r\n for (let i = 0; i < NumberOfBitsInHexcode; i += 8) {\r\n const octet = (hash >> i) & 0xff;\r\n const toStr = HexPadding + octet.toString(16);\r\n hex += toStr.substring(toStr.length - 2);\r\n }\r\n\r\n return hex;\r\n }\r\n\r\n /**\r\n * Collects data for every dataset by using the appropriate strategy. This is called every frame.\r\n * This method will then notify all observers with the latest slice.\r\n */\r\n private _collectDataAtFrame = () => {\r\n const timestamp = PrecisionDate.Now - this._startingTimestamp;\r\n const numPoints = this.datasets.ids.length;\r\n\r\n // add the starting index for the slice\r\n const numberOfIndices = this.datasets.startingIndices.itemLength;\r\n let startingIndex = 0;\r\n\r\n if (numberOfIndices > 0) {\r\n const previousStartingIndex = this.datasets.startingIndices.at(numberOfIndices - 1);\r\n startingIndex =\r\n previousStartingIndex + this.datasets.data.at(previousStartingIndex + PerformanceViewerCollector.NumberOfPointsOffset) + PerformanceViewerCollector.SliceDataOffset;\r\n }\r\n\r\n this.datasets.startingIndices.push(startingIndex);\r\n\r\n // add the first 2 items in our slice.\r\n this.datasets.data.push(timestamp);\r\n this.datasets.data.push(numPoints);\r\n\r\n // add the values inside the slice.\r\n for (const id of this.datasets.ids) {\r\n const strategy = this._strategies.get(id);\r\n\r\n if (!strategy) {\r\n return;\r\n }\r\n\r\n this.datasets.data.push(strategy.getData());\r\n }\r\n\r\n if (this.datasetObservable.hasObservers()) {\r\n const slice: number[] = [timestamp, numPoints];\r\n\r\n for (let i = 0; i < numPoints; i++) {\r\n slice.push(this.datasets.data.at(startingIndex + PerformanceViewerCollector.SliceDataOffset + i));\r\n }\r\n\r\n this.datasetObservable.notifyObservers(slice);\r\n }\r\n };\r\n\r\n /**\r\n * Collects and then sends the latest slice to any observers by using the appropriate strategy when the user wants.\r\n * The slice will be of the form [timestamp, numberOfPoints, value1, value2...]\r\n * This method does not add onto the collected data accessible via the datasets variable.\r\n */\r\n public getCurrentSlice() {\r\n const timestamp = PrecisionDate.Now - this._startingTimestamp;\r\n const numPoints = this.datasets.ids.length;\r\n const slice: number[] = [timestamp, numPoints];\r\n\r\n // add the values inside the slice.\r\n for (const id of this.datasets.ids) {\r\n const strategy = this._strategies.get(id);\r\n\r\n if (!strategy) {\r\n return;\r\n }\r\n\r\n if (this.datasetObservable.hasObservers()) {\r\n slice.push(strategy.getData());\r\n }\r\n }\r\n\r\n if (this.datasetObservable.hasObservers()) {\r\n this.datasetObservable.notifyObservers(slice);\r\n }\r\n }\r\n\r\n /**\r\n * Updates a property for a dataset's metadata with the value provided.\r\n * @param id the id of the dataset which needs its metadata updated.\r\n * @param prop the property to update.\r\n * @param value the value to update the property with.\r\n */\r\n public updateMetadata<T extends keyof IPerfMetadata>(id: string, prop: T, value: IPerfMetadata[T]) {\r\n const meta = this._datasetMeta.get(id);\r\n\r\n if (!meta) {\r\n return;\r\n }\r\n\r\n meta[prop] = value;\r\n\r\n this.metadataObservable.notifyObservers(this._datasetMeta);\r\n }\r\n\r\n /**\r\n * Completely clear, data, ids, and strategies saved to this performance collector.\r\n * @param preserveStringEventsRestore if it should preserve the string events, by default will clear string events registered when called.\r\n */\r\n public clear(preserveStringEventsRestore?: boolean) {\r\n this.datasets.data = new DynamicFloat32Array(InitialArraySize);\r\n this.datasets.ids.length = 0;\r\n this.datasets.startingIndices = new DynamicFloat32Array(InitialArraySize);\r\n this._datasetMeta.clear();\r\n this._strategies.forEach((strategy) => strategy.dispose());\r\n this._strategies.clear();\r\n\r\n if (!preserveStringEventsRestore) {\r\n this._eventRestoreSet.clear();\r\n }\r\n this._hasLoadedData = false;\r\n }\r\n\r\n /**\r\n * Accessor which lets the caller know if the performance collector has data loaded from a file or not!\r\n * Call clear() to reset this value.\r\n * @returns true if the data is loaded from a file, false otherwise.\r\n */\r\n public get hasLoadedData(): boolean {\r\n return this._hasLoadedData;\r\n }\r\n\r\n /**\r\n * Given a string containing file data, this function parses the file data into the datasets object.\r\n * It returns a boolean to indicate if this object was successfully loaded with the data.\r\n * @param data string content representing the file data.\r\n * @param keepDatasetMeta if it should use reuse the existing dataset metadata\r\n * @returns true if the data was successfully loaded, false otherwise.\r\n */\r\n public loadFromFileData(data: string, keepDatasetMeta?: boolean): boolean {\r\n const lines = data\r\n .replace(CarriageReturnRegex, \"\")\r\n .split(\"\\n\")\r\n .map((line) => line.split(\",\").filter((s) => s.length > 0))\r\n .filter((line) => line.length > 0);\r\n const timestampIndex = 0;\r\n const numPointsIndex = PerformanceViewerCollector.NumberOfPointsOffset;\r\n if (lines.length < 2) {\r\n return false;\r\n }\r\n\r\n const parsedDatasets: IPerfDatasets = {\r\n ids: [],\r\n data: new DynamicFloat32Array(InitialArraySize),\r\n startingIndices: new DynamicFloat32Array(InitialArraySize),\r\n };\r\n\r\n // parse first line separately to populate ids!\r\n const [firstLine, ...dataLines] = lines;\r\n // make sure we have the correct beginning headers\r\n if (firstLine.length < 2 || firstLine[timestampIndex] !== TimestampColHeader || firstLine[numPointsIndex] !== NumPointsColHeader) {\r\n return false;\r\n }\r\n\r\n const idCategoryMap: Map<string, string> = new Map<string, string>();\r\n\r\n // populate the ids.\r\n for (let i = PerformanceViewerCollector.SliceDataOffset; i < firstLine.length; i++) {\r\n const [id, category] = firstLine[i].split(ExportedDataSeparator);\r\n parsedDatasets.ids.push(id);\r\n idCategoryMap.set(id, category);\r\n }\r\n\r\n let startingIndex = 0;\r\n for (const line of dataLines) {\r\n if (line.length < 2) {\r\n return false;\r\n }\r\n\r\n const timestamp = parseFloat(line[timestampIndex]);\r\n const numPoints = parseInt(line[numPointsIndex]);\r\n\r\n if (isNaN(numPoints) || isNaN(timestamp)) {\r\n return false;\r\n }\r\n\r\n parsedDatasets.data.push(timestamp);\r\n parsedDatasets.data.push(numPoints);\r\n\r\n if (numPoints + PerformanceViewerCollector.SliceDataOffset !== line.length) {\r\n return false;\r\n }\r\n\r\n for (let i = PerformanceViewerCollector.SliceDataOffset; i < line.length; i++) {\r\n const val = parseFloat(line[i]);\r\n if (isNaN(val)) {\r\n return false;\r\n }\r\n parsedDatasets.data.push(val);\r\n }\r\n\r\n parsedDatasets.startingIndices.push(startingIndex);\r\n startingIndex += line.length;\r\n }\r\n\r\n this.datasets.ids = parsedDatasets.ids;\r\n this.datasets.data = parsedDatasets.data;\r\n this.datasets.startingIndices = parsedDatasets.startingIndices;\r\n if (!keepDatasetMeta) {\r\n this._datasetMeta.clear();\r\n }\r\n this._strategies.forEach((strategy) => strategy.dispose());\r\n this._strategies.clear();\r\n\r\n // populate metadata.\r\n if (!keepDatasetMeta) {\r\n for (const id of this.datasets.ids) {\r\n const category = idCategoryMap.get(id);\r\n\r\n this._datasetMeta.set(id, { category, color: this._getHexColorFromId(id) });\r\n }\r\n }\r\n this.metadataObservable.notifyObservers(this._datasetMeta);\r\n this._hasLoadedData = true;\r\n return true;\r\n }\r\n\r\n /**\r\n * Exports the datasets inside of the collector to a csv.\r\n */\r\n public exportDataToCsv() {\r\n let csvContent = \"\";\r\n // create the header line.\r\n csvContent += `${TimestampColHeader},${NumPointsColHeader}`;\r\n for (let i = 0; i < this.datasets.ids.length; i++) {\r\n csvContent += `,${this.datasets.ids[i]}`;\r\n if (this._datasetMeta) {\r\n const meta = this._datasetMeta.get(this.datasets.ids[i]);\r\n if (meta?.category) {\r\n csvContent += `${ExportedDataSeparator}${meta.category}`;\r\n }\r\n }\r\n }\r\n csvContent += \"\\n\";\r\n // create the data lines\r\n for (let i = 0; i < this.datasets.startingIndices.itemLength; i++) {\r\n const startingIndex = this.datasets.startingIndices.at(i);\r\n const timestamp = this.datasets.data.at(startingIndex);\r\n const numPoints = this.datasets.data.at(startingIndex + PerformanceViewerCollector.NumberOfPointsOffset);\r\n\r\n csvContent += `${timestamp},${numPoints}`;\r\n\r\n for (let offset = 0; offset < numPoints; offset++) {\r\n csvContent += `,${this.datasets.data.at(startingIndex + PerformanceViewerCollector.SliceDataOffset + offset)}`;\r\n }\r\n\r\n // add extra commas.\r\n for (let diff = 0; diff < this.datasets.ids.length - numPoints; diff++) {\r\n csvContent += \",\";\r\n }\r\n\r\n csvContent += \"\\n\";\r\n }\r\n\r\n const fileName = `${new Date().toISOString()}-perfdata.csv`;\r\n Tools.Download(new Blob([csvContent], { type: \"text/csv\" }), fileName);\r\n }\r\n /**\r\n * Starts the realtime collection of data.\r\n * @param shouldPreserve optional boolean param, if set will preserve the dataset between calls of start.\r\n */\r\n public start(shouldPreserve?: boolean) {\r\n if (!shouldPreserve) {\r\n this.datasets.data = new DynamicFloat32Array(InitialArraySize);\r\n this.datasets.startingIndices = new DynamicFloat32Array(InitialArraySize);\r\n this._startingTimestamp = PrecisionDate.Now;\r\n } else if (this._startingTimestamp === undefined) {\r\n this._startingTimestamp = PrecisionDate.Now;\r\n }\r\n this._scene.onAfterRenderObservable.add(this._collectDataAtFrame);\r\n this._restoreStringEvents();\r\n this._isStarted = true;\r\n }\r\n\r\n /**\r\n * Stops the collection of data.\r\n */\r\n public stop() {\r\n this._scene.onAfterRenderObservable.removeCallback(this._collectDataAtFrame);\r\n this._isStarted = false;\r\n }\r\n\r\n /**\r\n * Returns if the perf collector has been started or not.\r\n */\r\n public get isStarted(): boolean {\r\n return this._isStarted;\r\n }\r\n\r\n /**\r\n * Disposes of the object\r\n */\r\n public dispose() {\r\n this._scene.onAfterRenderObservable.removeCallback(this._collectDataAtFrame);\r\n this._datasetMeta.clear();\r\n this._strategies.forEach((strategy) => {\r\n strategy.dispose();\r\n });\r\n this.datasetObservable.clear();\r\n this.metadataObservable.clear();\r\n this._isStarted = false;\r\n (<any>this.datasets) = null;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"performanceViewerCollector.js","sourceRoot":"","sources":["../../../../../dev/core/src/Misc/PerformanceViewer/performanceViewerCollector.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Scene } from \"../../scene\";\r\nimport { type IPerfCustomEvent, type IPerfDatasets, type IPerfMetadata } from \"../interfaces/iPerfViewer\";\r\nimport { EventState, Observable } from \"../observable\";\r\nimport { PrecisionDate } from \"../precisionDate\";\r\nimport { Tools } from \"../tools.pure\";\r\nimport { DynamicFloat32Array } from \"./dynamicFloat32Array\";\r\nimport { type IPerfViewerCollectionStrategy, type PerfStrategyInitialization } from \"./performanceViewerCollectionStrategies\";\r\n\r\n// the initial size of our array, should be a multiple of two!\r\nconst InitialArraySize = 1800;\r\n\r\n// three octets in a hexcode. #[AA][BB][CC], i.e. 24 bits of data.\r\nconst NumberOfBitsInHexcode = 24;\r\n\r\n// Allows single numeral hex numbers to be appended by a 0.\r\nconst HexPadding = \"0\";\r\n\r\n// header for the timestamp column\r\nconst TimestampColHeader = \"timestamp\";\r\n\r\n// header for the numPoints column\r\nconst NumPointsColHeader = \"numPoints\";\r\n\r\n// regex to capture all carriage returns in the string.\r\nconst CarriageReturnRegex = /\\r/g;\r\n\r\n// string to use as separator when exporting extra information along with the dataset id\r\nconst ExportedDataSeparator = \"@\";\r\n\r\n/**\r\n * Callback strategy and optional category for data collection\r\n */\r\ninterface IPerformanceViewerStrategyParameter {\r\n /**\r\n * The strategy for collecting data. Available strategies are located on the PerfCollectionStrategy class\r\n */\r\n strategyCallback: PerfStrategyInitialization;\r\n /**\r\n * Category for displaying this strategy on the viewer. Can be undefined or an empty string, in which case the strategy will be displayed on top\r\n */\r\n category?: string;\r\n /**\r\n * Starts hidden\r\n */\r\n hidden?: boolean;\r\n}\r\n\r\n/**\r\n * The collector class handles the collection and storage of data into the appropriate array.\r\n * The collector also handles notifying any observers of any updates.\r\n */\r\nexport class PerformanceViewerCollector {\r\n private _datasetMeta: Map<string, IPerfMetadata>;\r\n private _strategies: Map<string, IPerfViewerCollectionStrategy>;\r\n private _startingTimestamp: number;\r\n private _hasLoadedData: boolean;\r\n private _isStarted: boolean;\r\n private readonly _customEventObservable: Observable<IPerfCustomEvent>;\r\n private readonly _eventRestoreSet: Set<string>;\r\n\r\n /**\r\n * Datastructure containing the collected datasets. Warning: you should not modify the values in here, data will be of the form [timestamp, numberOfPoints, value1, value2..., timestamp, etc...]\r\n */\r\n public readonly datasets: IPerfDatasets;\r\n /**\r\n * An observable you can attach to get deltas in the dataset. Subscribing to this will increase memory consumption slightly, and may hurt performance due to increased garbage collection needed.\r\n * Updates of slices will be of the form [timestamp, numberOfPoints, value1, value2...].\r\n */\r\n public readonly datasetObservable: Observable<number[]>;\r\n /**\r\n * An observable you can attach to get the most updated map of metadatas.\r\n */\r\n public readonly metadataObservable: Observable<Map<string, IPerfMetadata>>;\r\n\r\n /**\r\n * The offset for when actual data values start appearing inside a slice.\r\n */\r\n public static get SliceDataOffset() {\r\n return 2;\r\n }\r\n\r\n /**\r\n * The offset for the value of the number of points inside a slice.\r\n */\r\n public static get NumberOfPointsOffset() {\r\n return 1;\r\n }\r\n\r\n /**\r\n * Handles the creation of a performance viewer collector.\r\n * @param _scene the scene to collect on.\r\n * @param _enabledStrategyCallbacks the list of data to collect with callbacks for initialization purposes.\r\n */\r\n constructor(\r\n private _scene: Scene,\r\n _enabledStrategyCallbacks?: IPerformanceViewerStrategyParameter[]\r\n ) {\r\n this.datasets = {\r\n ids: [],\r\n data: new DynamicFloat32Array(InitialArraySize),\r\n startingIndices: new DynamicFloat32Array(InitialArraySize),\r\n };\r\n this._strategies = new Map<string, IPerfViewerCollectionStrategy>();\r\n this._datasetMeta = new Map<string, IPerfMetadata>();\r\n this._eventRestoreSet = new Set();\r\n this._customEventObservable = new Observable();\r\n this.datasetObservable = new Observable();\r\n this.metadataObservable = new Observable((observer) => observer.callback(this._datasetMeta, new EventState(0)));\r\n if (_enabledStrategyCallbacks) {\r\n this.addCollectionStrategies(..._enabledStrategyCallbacks);\r\n }\r\n }\r\n\r\n /**\r\n * Registers a custom string event which will be callable via sendEvent. This method returns an event object which will contain the id of the event.\r\n * The user can set a value optionally, which will be used in the sendEvent method. If the value is set, we will record this value at the end of each frame,\r\n * if not we will increment our counter and record the value of the counter at the end of each frame. The value recorded is 0 if no sendEvent method is called, within a frame.\r\n * @param name The name of the event to register\r\n * @param forceUpdate if the code should force add an event, and replace the last one.\r\n * @param category the category for that event\r\n * @returns The event registered, used in sendEvent\r\n */\r\n public registerEvent(name: string, forceUpdate?: boolean, category?: string): IPerfCustomEvent | undefined {\r\n if (this._strategies.has(name) && !forceUpdate) {\r\n return;\r\n }\r\n\r\n if (this._strategies.has(name) && forceUpdate) {\r\n this._strategies.get(name)?.dispose();\r\n this._strategies.delete(name);\r\n }\r\n\r\n const strategy: PerfStrategyInitialization = (scene) => {\r\n let counter: number = 0;\r\n let value: number = 0;\r\n\r\n const afterRenderObserver = scene.onAfterRenderObservable.add(() => {\r\n value = counter;\r\n counter = 0;\r\n });\r\n\r\n const stringObserver = this._customEventObservable.add((eventVal) => {\r\n if (name !== eventVal.name) {\r\n return;\r\n }\r\n\r\n if (eventVal.value !== undefined) {\r\n counter = eventVal.value;\r\n } else {\r\n counter++;\r\n }\r\n });\r\n\r\n return {\r\n id: name,\r\n getData: () => value,\r\n dispose: () => {\r\n scene.onAfterRenderObservable.remove(afterRenderObserver);\r\n this._customEventObservable.remove(stringObserver);\r\n },\r\n };\r\n };\r\n const event: IPerfCustomEvent = {\r\n name,\r\n };\r\n\r\n this._eventRestoreSet.add(name);\r\n this.addCollectionStrategies({ strategyCallback: strategy, category });\r\n\r\n return event;\r\n }\r\n\r\n /**\r\n * Lets the perf collector handle an event, occurences or event value depending on if the event.value params is set.\r\n * @param event the event to handle an occurence for\r\n */\r\n public sendEvent(event: IPerfCustomEvent) {\r\n this._customEventObservable.notifyObservers(event);\r\n }\r\n\r\n /**\r\n * This event restores all custom string events if necessary.\r\n */\r\n private _restoreStringEvents() {\r\n if (this._eventRestoreSet.size !== this._customEventObservable.observers.length) {\r\n this._eventRestoreSet.forEach((event) => {\r\n this.registerEvent(event, true);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * This method adds additional collection strategies for data collection purposes.\r\n * @param strategyCallbacks the list of data to collect with callbacks.\r\n */\r\n public addCollectionStrategies(...strategyCallbacks: IPerformanceViewerStrategyParameter[]) {\r\n // eslint-disable-next-line prefer-const\r\n for (let { strategyCallback, category, hidden } of strategyCallbacks) {\r\n const strategy = strategyCallback(this._scene);\r\n if (this._strategies.has(strategy.id)) {\r\n strategy.dispose();\r\n continue;\r\n }\r\n\r\n this.datasets.ids.push(strategy.id);\r\n\r\n if (category) {\r\n category = category.replace(new RegExp(ExportedDataSeparator, \"g\"), \"\");\r\n }\r\n\r\n this._datasetMeta.set(strategy.id, {\r\n color: this._getHexColorFromId(strategy.id),\r\n category,\r\n hidden,\r\n });\r\n\r\n this._strategies.set(strategy.id, strategy);\r\n }\r\n\r\n this.metadataObservable.notifyObservers(this._datasetMeta);\r\n }\r\n\r\n /**\r\n * Gets a 6 character hexcode representing the colour from a passed in string.\r\n * @param id the string to get a hex code for.\r\n * @returns a hexcode hashed from the id.\r\n */\r\n private _getHexColorFromId(id: string) {\r\n // this first bit is just a known way of hashing a string.\r\n let hash = 0;\r\n for (let i = 0; i < id.length; i++) {\r\n // (hash << 5) - hash is the same as hash * 31\r\n hash = id.charCodeAt(i) + ((hash << 5) - hash);\r\n }\r\n\r\n // then we build the string octet by octet.\r\n let hex = \"#\";\r\n for (let i = 0; i < NumberOfBitsInHexcode; i += 8) {\r\n const octet = (hash >> i) & 0xff;\r\n const toStr = HexPadding + octet.toString(16);\r\n hex += toStr.substring(toStr.length - 2);\r\n }\r\n\r\n return hex;\r\n }\r\n\r\n /**\r\n * Collects data for every dataset by using the appropriate strategy. This is called every frame.\r\n * This method will then notify all observers with the latest slice.\r\n */\r\n private _collectDataAtFrame = () => {\r\n const timestamp = PrecisionDate.Now - this._startingTimestamp;\r\n const numPoints = this.datasets.ids.length;\r\n\r\n // add the starting index for the slice\r\n const numberOfIndices = this.datasets.startingIndices.itemLength;\r\n let startingIndex = 0;\r\n\r\n if (numberOfIndices > 0) {\r\n const previousStartingIndex = this.datasets.startingIndices.at(numberOfIndices - 1);\r\n startingIndex =\r\n previousStartingIndex + this.datasets.data.at(previousStartingIndex + PerformanceViewerCollector.NumberOfPointsOffset) + PerformanceViewerCollector.SliceDataOffset;\r\n }\r\n\r\n this.datasets.startingIndices.push(startingIndex);\r\n\r\n // add the first 2 items in our slice.\r\n this.datasets.data.push(timestamp);\r\n this.datasets.data.push(numPoints);\r\n\r\n // add the values inside the slice.\r\n for (const id of this.datasets.ids) {\r\n const strategy = this._strategies.get(id);\r\n\r\n if (!strategy) {\r\n return;\r\n }\r\n\r\n this.datasets.data.push(strategy.getData());\r\n }\r\n\r\n if (this.datasetObservable.hasObservers()) {\r\n const slice: number[] = [timestamp, numPoints];\r\n\r\n for (let i = 0; i < numPoints; i++) {\r\n slice.push(this.datasets.data.at(startingIndex + PerformanceViewerCollector.SliceDataOffset + i));\r\n }\r\n\r\n this.datasetObservable.notifyObservers(slice);\r\n }\r\n };\r\n\r\n /**\r\n * Collects and then sends the latest slice to any observers by using the appropriate strategy when the user wants.\r\n * The slice will be of the form [timestamp, numberOfPoints, value1, value2...]\r\n * This method does not add onto the collected data accessible via the datasets variable.\r\n */\r\n public getCurrentSlice() {\r\n const timestamp = PrecisionDate.Now - this._startingTimestamp;\r\n const numPoints = this.datasets.ids.length;\r\n const slice: number[] = [timestamp, numPoints];\r\n\r\n // add the values inside the slice.\r\n for (const id of this.datasets.ids) {\r\n const strategy = this._strategies.get(id);\r\n\r\n if (!strategy) {\r\n return;\r\n }\r\n\r\n if (this.datasetObservable.hasObservers()) {\r\n slice.push(strategy.getData());\r\n }\r\n }\r\n\r\n if (this.datasetObservable.hasObservers()) {\r\n this.datasetObservable.notifyObservers(slice);\r\n }\r\n }\r\n\r\n /**\r\n * Updates a property for a dataset's metadata with the value provided.\r\n * @param id the id of the dataset which needs its metadata updated.\r\n * @param prop the property to update.\r\n * @param value the value to update the property with.\r\n */\r\n public updateMetadata<T extends keyof IPerfMetadata>(id: string, prop: T, value: IPerfMetadata[T]) {\r\n const meta = this._datasetMeta.get(id);\r\n\r\n if (!meta) {\r\n return;\r\n }\r\n\r\n meta[prop] = value;\r\n\r\n this.metadataObservable.notifyObservers(this._datasetMeta);\r\n }\r\n\r\n /**\r\n * Completely clear, data, ids, and strategies saved to this performance collector.\r\n * @param preserveStringEventsRestore if it should preserve the string events, by default will clear string events registered when called.\r\n */\r\n public clear(preserveStringEventsRestore?: boolean) {\r\n this.datasets.data = new DynamicFloat32Array(InitialArraySize);\r\n this.datasets.ids.length = 0;\r\n this.datasets.startingIndices = new DynamicFloat32Array(InitialArraySize);\r\n this._datasetMeta.clear();\r\n this._strategies.forEach((strategy) => strategy.dispose());\r\n this._strategies.clear();\r\n\r\n if (!preserveStringEventsRestore) {\r\n this._eventRestoreSet.clear();\r\n }\r\n this._hasLoadedData = false;\r\n }\r\n\r\n /**\r\n * Accessor which lets the caller know if the performance collector has data loaded from a file or not!\r\n * Call clear() to reset this value.\r\n * @returns true if the data is loaded from a file, false otherwise.\r\n */\r\n public get hasLoadedData(): boolean {\r\n return this._hasLoadedData;\r\n }\r\n\r\n /**\r\n * Given a string containing file data, this function parses the file data into the datasets object.\r\n * It returns a boolean to indicate if this object was successfully loaded with the data.\r\n * @param data string content representing the file data.\r\n * @param keepDatasetMeta if it should use reuse the existing dataset metadata\r\n * @returns true if the data was successfully loaded, false otherwise.\r\n */\r\n public loadFromFileData(data: string, keepDatasetMeta?: boolean): boolean {\r\n const lines = data\r\n .replace(CarriageReturnRegex, \"\")\r\n .split(\"\\n\")\r\n .map((line) => line.split(\",\").filter((s) => s.length > 0))\r\n .filter((line) => line.length > 0);\r\n const timestampIndex = 0;\r\n const numPointsIndex = PerformanceViewerCollector.NumberOfPointsOffset;\r\n if (lines.length < 2) {\r\n return false;\r\n }\r\n\r\n const parsedDatasets: IPerfDatasets = {\r\n ids: [],\r\n data: new DynamicFloat32Array(InitialArraySize),\r\n startingIndices: new DynamicFloat32Array(InitialArraySize),\r\n };\r\n\r\n // parse first line separately to populate ids!\r\n const [firstLine, ...dataLines] = lines;\r\n // make sure we have the correct beginning headers\r\n if (firstLine.length < 2 || firstLine[timestampIndex] !== TimestampColHeader || firstLine[numPointsIndex] !== NumPointsColHeader) {\r\n return false;\r\n }\r\n\r\n const idCategoryMap: Map<string, string> = new Map<string, string>();\r\n\r\n // populate the ids.\r\n for (let i = PerformanceViewerCollector.SliceDataOffset; i < firstLine.length; i++) {\r\n const [id, category] = firstLine[i].split(ExportedDataSeparator);\r\n parsedDatasets.ids.push(id);\r\n idCategoryMap.set(id, category);\r\n }\r\n\r\n let startingIndex = 0;\r\n for (const line of dataLines) {\r\n if (line.length < 2) {\r\n return false;\r\n }\r\n\r\n const timestamp = parseFloat(line[timestampIndex]);\r\n const numPoints = parseInt(line[numPointsIndex]);\r\n\r\n if (isNaN(numPoints) || isNaN(timestamp)) {\r\n return false;\r\n }\r\n\r\n parsedDatasets.data.push(timestamp);\r\n parsedDatasets.data.push(numPoints);\r\n\r\n if (numPoints + PerformanceViewerCollector.SliceDataOffset !== line.length) {\r\n return false;\r\n }\r\n\r\n for (let i = PerformanceViewerCollector.SliceDataOffset; i < line.length; i++) {\r\n const val = parseFloat(line[i]);\r\n if (isNaN(val)) {\r\n return false;\r\n }\r\n parsedDatasets.data.push(val);\r\n }\r\n\r\n parsedDatasets.startingIndices.push(startingIndex);\r\n startingIndex += line.length;\r\n }\r\n\r\n this.datasets.ids = parsedDatasets.ids;\r\n this.datasets.data = parsedDatasets.data;\r\n this.datasets.startingIndices = parsedDatasets.startingIndices;\r\n if (!keepDatasetMeta) {\r\n this._datasetMeta.clear();\r\n }\r\n this._strategies.forEach((strategy) => strategy.dispose());\r\n this._strategies.clear();\r\n\r\n // populate metadata.\r\n if (!keepDatasetMeta) {\r\n for (const id of this.datasets.ids) {\r\n const category = idCategoryMap.get(id);\r\n\r\n this._datasetMeta.set(id, { category, color: this._getHexColorFromId(id) });\r\n }\r\n }\r\n this.metadataObservable.notifyObservers(this._datasetMeta);\r\n this._hasLoadedData = true;\r\n return true;\r\n }\r\n\r\n /**\r\n * Exports the datasets inside of the collector to a csv.\r\n */\r\n public exportDataToCsv() {\r\n let csvContent = \"\";\r\n // create the header line.\r\n csvContent += `${TimestampColHeader},${NumPointsColHeader}`;\r\n for (let i = 0; i < this.datasets.ids.length; i++) {\r\n csvContent += `,${this.datasets.ids[i]}`;\r\n if (this._datasetMeta) {\r\n const meta = this._datasetMeta.get(this.datasets.ids[i]);\r\n if (meta?.category) {\r\n csvContent += `${ExportedDataSeparator}${meta.category}`;\r\n }\r\n }\r\n }\r\n csvContent += \"\\n\";\r\n // create the data lines\r\n for (let i = 0; i < this.datasets.startingIndices.itemLength; i++) {\r\n const startingIndex = this.datasets.startingIndices.at(i);\r\n const timestamp = this.datasets.data.at(startingIndex);\r\n const numPoints = this.datasets.data.at(startingIndex + PerformanceViewerCollector.NumberOfPointsOffset);\r\n\r\n csvContent += `${timestamp},${numPoints}`;\r\n\r\n for (let offset = 0; offset < numPoints; offset++) {\r\n csvContent += `,${this.datasets.data.at(startingIndex + PerformanceViewerCollector.SliceDataOffset + offset)}`;\r\n }\r\n\r\n // add extra commas.\r\n for (let diff = 0; diff < this.datasets.ids.length - numPoints; diff++) {\r\n csvContent += \",\";\r\n }\r\n\r\n csvContent += \"\\n\";\r\n }\r\n\r\n const fileName = `${new Date().toISOString()}-perfdata.csv`;\r\n Tools.Download(new Blob([csvContent], { type: \"text/csv\" }), fileName);\r\n }\r\n /**\r\n * Starts the realtime collection of data.\r\n * @param shouldPreserve optional boolean param, if set will preserve the dataset between calls of start.\r\n */\r\n public start(shouldPreserve?: boolean) {\r\n if (!shouldPreserve) {\r\n this.datasets.data = new DynamicFloat32Array(InitialArraySize);\r\n this.datasets.startingIndices = new DynamicFloat32Array(InitialArraySize);\r\n this._startingTimestamp = PrecisionDate.Now;\r\n } else if (this._startingTimestamp === undefined) {\r\n this._startingTimestamp = PrecisionDate.Now;\r\n }\r\n this._scene.onAfterRenderObservable.add(this._collectDataAtFrame);\r\n this._restoreStringEvents();\r\n this._isStarted = true;\r\n }\r\n\r\n /**\r\n * Stops the collection of data.\r\n */\r\n public stop() {\r\n this._scene.onAfterRenderObservable.removeCallback(this._collectDataAtFrame);\r\n this._isStarted = false;\r\n }\r\n\r\n /**\r\n * Returns if the perf collector has been started or not.\r\n */\r\n public get isStarted(): boolean {\r\n return this._isStarted;\r\n }\r\n\r\n /**\r\n * Disposes of the object\r\n */\r\n public dispose() {\r\n this._scene.onAfterRenderObservable.removeCallback(this._collectDataAtFrame);\r\n this._datasetMeta.clear();\r\n this._strategies.forEach((strategy) => {\r\n strategy.dispose();\r\n });\r\n this.datasetObservable.clear();\r\n this.metadataObservable.clear();\r\n this._isStarted = false;\r\n (<any>this.datasets) = null;\r\n }\r\n}\r\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type AbstractEngine } from "../Engines/abstractEngine.js";
|
|
2
2
|
import { type Nullable } from "../types.js";
|
|
3
3
|
import { ShaderLanguage } from "../Materials/shaderLanguage.js";
|
|
4
|
-
import { BaseTexture } from "../Materials/Textures/baseTexture.js";
|
|
4
|
+
import { BaseTexture } from "../Materials/Textures/baseTexture.pure.js";
|
|
5
5
|
/**
|
|
6
6
|
* Class used for fast copy from one texture to another
|
|
7
7
|
*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { EffectRenderer, EffectWrapper } from "../Materials/effectRenderer.js";
|
|
2
|
-
import { Vector2 } from "../Maths/math.vector.js";
|
|
1
|
+
import { EffectRenderer, EffectWrapper } from "../Materials/effectRenderer.pure.js";
|
|
2
|
+
import { Vector2 } from "../Maths/math.vector.pure.js";
|
|
3
3
|
import { WhenTextureReadyAsync } from "./textureTools.js";
|
|
4
|
-
import { BaseTexture } from "../Materials/Textures/baseTexture.js";
|
|
4
|
+
import { BaseTexture } from "../Materials/Textures/baseTexture.pure.js";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Class used for fast copy from one texture to another
|