@onerjs/core 8.56.4 → 9.0.1
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/Animations/animatable.core.js +36 -0
- package/Animations/animatable.core.js.map +1 -1
- package/Animations/animationGroup.pure.d.ts +61 -1
- package/Animations/animationGroup.pure.js +191 -2
- package/Animations/animationGroup.pure.js.map +1 -1
- package/Animations/index.d.ts +1 -0
- package/Animations/index.js +1 -0
- package/Animations/index.js.map +1 -1
- package/Animations/pure.d.ts +1 -0
- package/Animations/pure.js +1 -0
- package/Animations/pure.js.map +1 -1
- package/Animations/rootMotion.d.ts +560 -0
- package/Animations/rootMotion.js +1709 -0
- package/Animations/rootMotion.js.map +1 -0
- package/Animations/runtimeAnimation.d.ts +57 -0
- package/Animations/runtimeAnimation.js +127 -3
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Cameras/arcRotateCamera.pure.d.ts +2 -0
- package/Cameras/arcRotateCamera.pure.js +2 -0
- package/Cameras/arcRotateCamera.pure.js.map +1 -1
- package/Cameras/targetCamera.pure.d.ts +2 -0
- package/Cameras/targetCamera.pure.js +13 -2
- package/Cameras/targetCamera.pure.js.map +1 -1
- package/Collisions/gpuPicker.js +5 -5
- package/Collisions/gpuPicker.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.query.pure.js +4 -2
- package/Engines/AbstractEngine/abstractEngine.query.pure.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.query.types.d.ts +11 -2
- package/Engines/AbstractEngine/abstractEngine.query.types.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js +1 -0
- package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.pure.js +63 -0
- package/Engines/Extensions/engine.multiRender.pure.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.types.d.ts +13 -0
- package/Engines/Extensions/engine.multiRender.types.js.map +1 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js +2 -2
- package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js.map +1 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.types.d.ts +2 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.types.js.map +1 -1
- package/Engines/Extensions/index.d.ts +1 -0
- package/Engines/Extensions/index.js +1 -0
- package/Engines/Extensions/index.js.map +1 -1
- package/Engines/Extensions/pure.d.ts +1 -1
- package/Engines/Extensions/pure.js +1 -1
- package/Engines/Extensions/pure.js.map +1 -1
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js +88 -39
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js.map +1 -1
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.d.ts +20 -2
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.js.map +1 -1
- package/Engines/Native/nativeHardwareTexture.d.ts +8 -1
- package/Engines/Native/nativeHardwareTexture.js +7 -0
- package/Engines/Native/nativeHardwareTexture.js.map +1 -1
- package/Engines/Native/nativeHelpers.js +56 -1
- package/Engines/Native/nativeHelpers.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +37 -8
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/Native/nativeRenderTargetWrapper.d.ts +40 -0
- package/Engines/Native/nativeRenderTargetWrapper.js +265 -5
- package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
- package/Engines/Processors/shaderCodeCursor.d.ts +1 -0
- package/Engines/Processors/shaderCodeCursor.js +40 -3
- package/Engines/Processors/shaderCodeCursor.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.pure.js +4 -0
- package/Engines/WebGPU/Extensions/engine.multiRender.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.types.d.ts +13 -0
- package/Engines/WebGPU/Extensions/engine.multiRender.types.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.query.pure.js +11 -3
- package/Engines/WebGPU/Extensions/engine.query.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.pure.js +1 -0
- package/Engines/WebGPU/Extensions/engine.renderTarget.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/index.d.ts +1 -0
- package/Engines/WebGPU/Extensions/index.js +1 -0
- package/Engines/WebGPU/Extensions/index.js.map +1 -1
- package/Engines/WebGPU/Extensions/pure.d.ts +1 -1
- package/Engines/WebGPU/Extensions/pure.js +1 -1
- package/Engines/WebGPU/Extensions/pure.js.map +1 -1
- package/Engines/WebGPU/webgpuBundleList.d.ts +2 -0
- package/Engines/WebGPU/webgpuBundleList.js +4 -0
- package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -2
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +3 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +4 -0
- package/Engines/WebGPU/webgpuSnapshotRendering.js +40 -7
- package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +2 -2
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.d.ts +2 -0
- package/Engines/WebGPU/webgpuTextureManager.js +286 -13
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/abstractEngine.pure.d.ts +17 -1
- package/Engines/abstractEngine.pure.js +17 -5
- 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 -1
- package/Engines/engine.pure.js +0 -7
- package/Engines/engine.pure.js.map +1 -1
- package/Engines/nativeEngine.pure.js +1 -1
- package/Engines/nativeEngine.pure.js.map +1 -1
- package/Engines/thinEngine.pure.d.ts +15 -0
- package/Engines/thinEngine.pure.js +61 -14
- package/Engines/thinEngine.pure.js.map +1 -1
- package/Engines/thinNativeEngine.pure.d.ts +218 -17
- package/Engines/thinNativeEngine.pure.js +1438 -165
- package/Engines/thinNativeEngine.pure.js.map +1 -1
- package/Engines/thinWebGPUEngine.d.ts +4 -0
- package/Engines/thinWebGPUEngine.js +16 -2
- package/Engines/thinWebGPUEngine.js.map +1 -1
- package/Engines/webgpuEngine.pure.d.ts +17 -3
- package/Engines/webgpuEngine.pure.js +56 -13
- package/Engines/webgpuEngine.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js +2 -2
- package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.pure.d.ts +10 -0
- package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.pure.js +24 -12
- package/FlowGraph/Blocks/Data/Transformers/flowGraphJsonPointerParserBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.d.ts +11 -2
- package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js +1 -1
- package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.pure.d.ts +7 -0
- package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.pure.js +43 -0
- package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.d.ts +9 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js +6 -8
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js +5 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js +5 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.d.ts +9 -0
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js +34 -9
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js +4 -0
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.d.ts +18 -4
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js +24 -6
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js +19 -7
- package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js.map +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/Animation/flowGraphPlayAnimationBlock.pure.d.ts +20 -2
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js +85 -25
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.d.ts +16 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js +64 -14
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.d.ts +12 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js +8 -0
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.pure.js +4 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.pure.d.ts +12 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.pure.js +5 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js +64 -16
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.pure.js +14 -2
- package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.pure.d.ts +5 -1
- package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.pure.js +23 -8
- package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.pure.js.map +1 -1
- package/FlowGraph/CustomTypes/flowGraphInteger.pure.d.ts +5 -0
- package/FlowGraph/CustomTypes/flowGraphInteger.pure.js +7 -0
- package/FlowGraph/CustomTypes/flowGraphInteger.pure.js.map +1 -1
- package/FlowGraph/CustomTypes/flowGraphMatrix.d.ts +10 -0
- package/FlowGraph/CustomTypes/flowGraphMatrix.js +14 -0
- package/FlowGraph/CustomTypes/flowGraphMatrix.js.map +1 -1
- package/FlowGraph/flowGraph.d.ts +6 -1
- package/FlowGraph/flowGraph.js +41 -9
- package/FlowGraph/flowGraph.js.map +1 -1
- package/FlowGraph/flowGraphAnimationHelpers.d.ts +24 -0
- package/FlowGraph/flowGraphAnimationHelpers.js +21 -0
- package/FlowGraph/flowGraphAnimationHelpers.js.map +1 -0
- package/FlowGraph/flowGraphBlock.js +3 -0
- package/FlowGraph/flowGraphBlock.js.map +1 -1
- package/FlowGraph/flowGraphConnection.d.ts +7 -0
- package/FlowGraph/flowGraphConnection.js +7 -0
- package/FlowGraph/flowGraphConnection.js.map +1 -1
- package/FlowGraph/flowGraphContext.d.ts +2 -1
- package/FlowGraph/flowGraphContext.js +5 -3
- package/FlowGraph/flowGraphContext.js.map +1 -1
- package/FlowGraph/flowGraphCoordinator.d.ts +15 -1
- package/FlowGraph/flowGraphCoordinator.js +47 -16
- package/FlowGraph/flowGraphCoordinator.js.map +1 -1
- package/FlowGraph/flowGraphEventBlock.d.ts +5 -0
- package/FlowGraph/flowGraphEventBlock.js +7 -0
- package/FlowGraph/flowGraphEventBlock.js.map +1 -1
- package/FlowGraph/flowGraphHostResolver.d.ts +2 -1
- package/FlowGraph/flowGraphHostResolver.js.map +1 -1
- package/FlowGraph/flowGraphParser.js +60 -2
- package/FlowGraph/flowGraphParser.js.map +1 -1
- package/FlowGraph/flowGraphValidator.js +0 -4
- package/FlowGraph/flowGraphValidator.js.map +1 -1
- package/FlowGraph/index.d.ts +2 -0
- package/FlowGraph/index.js +2 -0
- package/FlowGraph/index.js.map +1 -1
- package/FlowGraph/pure.d.ts +2 -0
- package/FlowGraph/pure.js +2 -0
- package/FlowGraph/pure.js.map +1 -1
- package/FlowGraph/serialization.d.ts +4 -2
- package/FlowGraph/serialization.js +12 -24
- package/FlowGraph/serialization.js.map +1 -1
- package/FlowGraph/typeDefinitions.d.ts +9 -1
- package/FlowGraph/typeDefinitions.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.d.ts +5 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js +8 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.d.ts +87 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js +295 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js.map +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/pure.d.ts +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/pure.js +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +4 -4
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.d.ts +5 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +13 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.d.ts +1 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.js +4 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.pure.d.ts +54 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.pure.js +155 -0
- package/FrameGraph/Node/Blocks/Textures/minMaxReducerBlock.pure.js.map +1 -0
- package/FrameGraph/Node/Blocks/Textures/pure.d.ts +1 -0
- package/FrameGraph/Node/Blocks/Textures/pure.js +1 -0
- package/FrameGraph/Node/Blocks/Textures/pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/allBlocks.pure.js +4 -0
- package/FrameGraph/Node/Blocks/allBlocks.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/index.d.ts +2 -0
- package/FrameGraph/Node/Blocks/index.js +2 -0
- package/FrameGraph/Node/Blocks/index.js.map +1 -1
- package/FrameGraph/Node/Blocks/inputBlock.pure.js +20 -1
- package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/pure.d.ts +2 -0
- package/FrameGraph/Node/Blocks/pure.js +2 -0
- package/FrameGraph/Node/Blocks/pure.js.map +1 -1
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +4 -2
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +4 -2
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Tasks/Layers/selectionOutlineTask.js +1 -0
- package/FrameGraph/Tasks/Layers/selectionOutlineTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js +5 -1
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +1 -0
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/minMaxReducerTask.d.ts +62 -0
- package/FrameGraph/Tasks/Misc/minMaxReducerTask.js +159 -0
- package/FrameGraph/Tasks/Misc/minMaxReducerTask.js.map +1 -0
- package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.d.ts +69 -0
- package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js +223 -0
- package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js.map +1 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +25 -3
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +72 -34
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +3 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/frameGraph.d.ts +4 -0
- package/FrameGraph/frameGraph.js +14 -0
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphObjectList.d.ts +6 -1
- package/FrameGraph/frameGraphObjectList.js.map +1 -1
- package/FrameGraph/frameGraphRenderContext.d.ts +3 -1
- package/FrameGraph/frameGraphRenderContext.js +5 -5
- package/FrameGraph/frameGraphRenderContext.js.map +1 -1
- package/FrameGraph/index.d.ts +2 -0
- package/FrameGraph/index.js +2 -0
- package/FrameGraph/index.js.map +1 -1
- package/FrameGraph/pure.d.ts +2 -0
- package/FrameGraph/pure.js +2 -0
- package/FrameGraph/pure.js.map +1 -1
- package/Inputs/scene.inputManager.d.ts +4 -0
- package/Inputs/scene.inputManager.js +50 -8
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Lights/Clustered/clusteredLightingSceneComponent.pure.d.ts +5 -0
- package/Lights/Clustered/clusteredLightingSceneComponent.pure.js +22 -1
- package/Lights/Clustered/clusteredLightingSceneComponent.pure.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.pure.js +7 -3
- package/Lights/Shadows/cascadedShadowGenerator.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.d.ts +7 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.js +8 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.pure.d.ts +54 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.pure.js +81 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingBlitMaterial.pure.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.d.ts +7 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.js +8 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.pure.d.ts +60 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.pure.js +90 -0
- package/Materials/GaussianSplatting/gaussianPointSplattingDepthBlitMaterial.pure.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.d.ts +31 -0
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js +103 -5
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +6 -6
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.d.ts +26 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +153 -49
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.d.ts +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.js +4 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.pure.d.ts +83 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.pure.js +191 -0
- package/Materials/GaussianSplatting/gaussianSplattingOverdrawMaterialPlugin.pure.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.d.ts +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.js +4 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.pure.d.ts +62 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.pure.js +125 -0
- package/Materials/GaussianSplatting/gaussianSplattingSizeMaterialPlugin.pure.js.map +1 -0
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js +5 -5
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js.map +1 -1
- package/Materials/GaussianSplatting/pure.d.ts +4 -0
- package/Materials/GaussianSplatting/pure.js +4 -0
- package/Materials/GaussianSplatting/pure.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.d.ts +1 -0
- package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.js +12 -0
- package/Materials/Node/Blocks/Dual/imageSourceBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +11 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +17 -2
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +2 -2
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
- package/Materials/Node/nodeMaterial.pure.d.ts +4 -0
- package/Materials/Node/nodeMaterial.pure.js +4 -0
- package/Materials/Node/nodeMaterial.pure.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +1 -1
- package/Materials/Node/nodeMaterialBuildState.js +25 -3
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.pure.d.ts +2 -0
- package/Materials/PBR/pbrBaseMaterial.pure.d.ts +2 -0
- package/Materials/Textures/Procedurals/proceduralTexture.pure.d.ts +14 -14
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js +37 -13
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
- package/Materials/Textures/baseTexture.pure.js +3 -0
- package/Materials/Textures/baseTexture.pure.js.map +1 -1
- package/Materials/Textures/cubeTexture.pure.js +1 -1
- package/Materials/Textures/cubeTexture.pure.js.map +1 -1
- package/Materials/Textures/internalTexture.d.ts +8 -1
- package/Materials/Textures/internalTexture.js +9 -2
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.pure.js +3 -1
- package/Materials/Textures/mirrorTexture.pure.js.map +1 -1
- package/Materials/Textures/rawTexture2DArray.functions.d.ts +3 -3
- package/Materials/Textures/rawTexture2DArray.functions.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/texture.pure.js +1 -1
- package/Materials/Textures/texture.pure.js.map +1 -1
- package/Materials/Textures/textureHelper.functions.d.ts +14 -0
- package/Materials/Textures/textureHelper.functions.js +24 -0
- package/Materials/Textures/textureHelper.functions.js.map +1 -1
- package/Materials/ditheredTileFadeMaterialPlugin.d.ts +210 -0
- package/Materials/ditheredTileFadeMaterialPlugin.js +509 -0
- package/Materials/ditheredTileFadeMaterialPlugin.js.map +1 -0
- package/Materials/effectRenderer.pure.d.ts +4 -0
- package/Materials/effectRenderer.pure.js +3 -2
- package/Materials/effectRenderer.pure.js.map +1 -1
- package/Materials/index.d.ts +5 -0
- package/Materials/index.js +5 -0
- package/Materials/index.js.map +1 -1
- package/Materials/material.pure.js +25 -12
- package/Materials/material.pure.js.map +1 -1
- package/Materials/materialHelper.geometryrendering.d.ts +46 -1
- package/Materials/materialHelper.geometryrendering.js +105 -8
- package/Materials/materialHelper.geometryrendering.js.map +1 -1
- package/Materials/prepass.defines.d.ts +2 -0
- package/Materials/prepass.defines.js +2 -0
- package/Materials/prepass.defines.js.map +1 -1
- package/Materials/pure.d.ts +5 -0
- package/Materials/pure.js +5 -0
- package/Materials/pure.js.map +1 -1
- package/Materials/standardMaterial.pure.d.ts +10 -0
- package/Materials/standardMaterial.pure.js +30 -5
- package/Materials/standardMaterial.pure.js.map +1 -1
- package/Meshes/Builders/polygonBuilder.pure.d.ts +4 -0
- package/Meshes/Builders/polygonBuilder.pure.js +3 -0
- package/Meshes/Builders/polygonBuilder.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.d.ts +8 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.js +11 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.pure.d.ts +231 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.pure.js +1212 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingController.pure.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.d.ts +14 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.js +15 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.pure.d.ts +285 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.pure.js +812 -0
- package/Meshes/GaussianSplatting/gaussianPointSplattingRenderer.pure.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianSplatting.functions.d.ts +19 -0
- package/Meshes/GaussianSplatting/gaussianSplatting.functions.js +23 -0
- package/Meshes/GaussianSplatting/gaussianSplatting.functions.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +1 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +2 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +163 -14
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +239 -24
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +34 -4
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +125 -25
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/pure.d.ts +2 -0
- package/Meshes/GaussianSplatting/pure.js +2 -0
- package/Meshes/GaussianSplatting/pure.js.map +1 -1
- package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js +25 -11
- package/Meshes/Node/Blocks/booleanGeometryBlock.pure.js.map +1 -1
- package/Meshes/abstractMesh.pure.d.ts +30 -0
- package/Meshes/abstractMesh.pure.js +54 -0
- package/Meshes/abstractMesh.pure.js.map +1 -1
- package/Meshes/index.d.ts +2 -0
- package/Meshes/index.js +2 -0
- package/Meshes/index.js.map +1 -1
- package/Meshes/instancedMesh.pure.d.ts +5 -0
- package/Meshes/instancedMesh.pure.js +12 -0
- package/Meshes/instancedMesh.pure.js.map +1 -1
- package/Meshes/mesh.pure.js +23 -8
- package/Meshes/mesh.pure.js.map +1 -1
- package/Meshes/meshBlendingTag.d.ts +47 -0
- package/Meshes/meshBlendingTag.js +64 -0
- package/Meshes/meshBlendingTag.js.map +1 -0
- package/Meshes/polygonMesh.js +2 -2
- package/Meshes/polygonMesh.js.map +1 -1
- package/Meshes/pure.d.ts +2 -0
- package/Meshes/pure.js +2 -0
- package/Meshes/pure.js.map +1 -1
- package/Meshes/subMesh.pure.d.ts +11 -2
- package/Meshes/subMesh.pure.js +20 -5
- package/Meshes/subMesh.pure.js.map +1 -1
- package/Meshes/thinInstanceMesh.pure.js +1 -0
- package/Meshes/thinInstanceMesh.pure.js.map +1 -1
- package/Misc/andOrNotEvaluator.js +4 -0
- package/Misc/andOrNotEvaluator.js.map +1 -1
- package/Misc/fileTools.pure.js +21 -0
- package/Misc/fileTools.pure.js.map +1 -1
- package/Misc/minMaxReducer.pure.d.ts +6 -0
- package/Misc/minMaxReducer.pure.js +10 -0
- package/Misc/minMaxReducer.pure.js.map +1 -1
- package/Misc/snapshotRenderingHelper.js +2 -2
- package/Misc/snapshotRenderingHelper.js.map +1 -1
- package/Misc/thinMinMaxReducer.d.ts +19 -2
- package/Misc/thinMinMaxReducer.js +74 -21
- package/Misc/thinMinMaxReducer.js.map +1 -1
- package/Misc/tools.pure.js +1 -1
- package/Misc/tools.pure.js.map +1 -1
- package/Particles/Node/Blocks/Update/updateNoiseBlock.pure.js +19 -7
- package/Particles/Node/Blocks/Update/updateNoiseBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleSourceTextureBlock.pure.js +3 -2
- package/Particles/Node/Blocks/particleSourceTextureBlock.pure.js.map +1 -1
- package/Particles/gpuParticleSystem.pure.d.ts +4 -0
- package/Particles/gpuParticleSystem.pure.js +101 -32
- package/Particles/gpuParticleSystem.pure.js.map +1 -1
- package/Particles/particle.js +3 -2
- package/Particles/particle.js.map +1 -1
- package/Particles/solidParticleSystem.js +7 -1
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.function.d.ts +6 -0
- package/Particles/thinParticleSystem.function.js +144 -88
- package/Particles/thinParticleSystem.function.js.map +1 -1
- package/Particles/thinParticleSystem.pure.d.ts +8 -0
- package/Particles/thinParticleSystem.pure.js +154 -28
- package/Particles/thinParticleSystem.pure.js.map +1 -1
- package/Particles/webgl2ParticleSystem.pure.d.ts +1 -0
- package/Particles/webgl2ParticleSystem.pure.js +12 -4
- package/Particles/webgl2ParticleSystem.pure.js.map +1 -1
- package/Physics/v2/ragdoll.d.ts +2 -4
- package/Physics/v2/ragdoll.js +11 -4
- package/Physics/v2/ragdoll.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js +7 -0
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/index.d.ts +2 -0
- package/PostProcesses/index.js +2 -0
- package/PostProcesses/index.js.map +1 -1
- package/PostProcesses/meshBlendingBlueNoise.d.ts +15 -0
- package/PostProcesses/meshBlendingBlueNoise.js +77 -0
- package/PostProcesses/meshBlendingBlueNoise.js.map +1 -0
- package/PostProcesses/meshBlendingPostProcess.d.ts +131 -0
- package/PostProcesses/meshBlendingPostProcess.js +315 -0
- package/PostProcesses/meshBlendingPostProcess.js.map +1 -0
- package/PostProcesses/pure.d.ts +2 -0
- package/PostProcesses/pure.js +2 -0
- package/PostProcesses/pure.js.map +1 -1
- package/PostProcesses/thinMeshBlendingPostProcess.d.ts +339 -0
- package/PostProcesses/thinMeshBlendingPostProcess.js +771 -0
- package/PostProcesses/thinMeshBlendingPostProcess.js.map +1 -0
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +6 -6
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.d.ts +12 -0
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +50 -25
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
- package/Rendering/boundingBoxRenderer.pure.js +2 -1
- package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
- package/Rendering/depthRenderer.pure.d.ts +9 -0
- package/Rendering/depthRenderer.pure.js +15 -4
- package/Rendering/depthRenderer.pure.js.map +1 -1
- package/Rendering/edgesRenderer.pure.d.ts +4 -2
- package/Rendering/edgesRenderer.pure.js +11 -2
- package/Rendering/edgesRenderer.pure.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +14 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.js +26 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +13 -3
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +22 -9
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +3 -0
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.pure.d.ts +38 -4
- package/Rendering/geometryBufferRenderer.pure.js +130 -18
- package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
- package/Rendering/objectRenderer.d.ts +7 -1
- package/Rendering/objectRenderer.js +45 -7
- package/Rendering/objectRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.pure.js +6 -2
- package/Rendering/outlineRenderer.pure.js.map +1 -1
- package/Rendering/prePassRenderer.pure.js +3 -3
- package/Rendering/prePassRenderer.pure.js.map +1 -1
- package/Rendering/renderingManager.d.ts +1 -1
- package/Rendering/renderingManager.js +5 -4
- package/Rendering/renderingManager.js.map +1 -1
- package/Shaders/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
- package/Shaders/ShadersInclude/defaultFragmentAlpha.js +34 -0
- package/Shaders/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
- package/Shaders/ShadersInclude/gaussianSplatting.js +3 -1
- package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +5 -1
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/geometryRenderingFragment.d.ts +5 -0
- package/Shaders/ShadersInclude/geometryRenderingFragment.js +74 -0
- package/Shaders/ShadersInclude/geometryRenderingFragment.js.map +1 -0
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js +27 -3
- package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/mrtFragmentDeclaration.js +89 -0
- package/Shaders/ShadersInclude/mrtFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/oitDeclaration.js +1 -1
- package/Shaders/ShadersInclude/oitDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js +24 -17
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockPrePass.js +27 -20
- package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDebug.js +6 -2
- package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
- package/Shaders/ShadersInclude/prePassDeclaration.js +95 -2
- package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/Shaders/default.fragment.js +31 -40
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/depthOfField.fragment.js +13 -9
- package/Shaders/depthOfField.fragment.js.map +1 -1
- package/Shaders/fluidRenderingParticleDepth.vertex.js +16 -1
- package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -1
- package/Shaders/fluidRenderingParticleThickness.vertex.js +16 -1
- package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -1
- package/Shaders/gaussianSplatting.fragment.js +63 -3
- package/Shaders/gaussianSplatting.fragment.js.map +1 -1
- package/Shaders/gaussianSplatting.vertex.js +80 -0
- package/Shaders/gaussianSplatting.vertex.js.map +1 -1
- package/Shaders/geometry.fragment.js +17 -11
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Shaders/gpuRenderParticles.fragment.js +43 -1
- package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
- package/Shaders/gpuRenderParticles.vertex.js +96 -16
- package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
- package/Shaders/meshBlending.fragment.d.ts +5 -0
- package/Shaders/meshBlending.fragment.js +519 -0
- package/Shaders/meshBlending.fragment.js.map +1 -0
- package/Shaders/minmaxRedux.fragment.js +6 -1
- package/Shaders/minmaxRedux.fragment.js.map +1 -1
- package/Shaders/particles.fragment.js +43 -1
- package/Shaders/particles.fragment.js.map +1 -1
- package/Shaders/particles.vertex.js +84 -3
- package/Shaders/particles.vertex.js.map +1 -1
- package/Shaders/sprites.fragment.js +52 -2
- package/Shaders/sprites.fragment.js.map +1 -1
- package/Shaders/sprites.vertex.js +62 -1
- package/Shaders/sprites.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js +33 -0
- package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplatting.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplatting.js +65 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplatting.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplattingScan.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplattingScan.js +17 -0
- package/ShadersWGSL/ShadersInclude/gaussianPointSplattingScan.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +6 -78
- package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplattingFragmentDeclaration.js +2 -2
- package/ShadersWGSL/ShadersInclude/gaussianSplattingFragmentDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/gaussianSplattingShared.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplattingShared.js +79 -0
- package/ShadersWGSL/ShadersInclude/gaussianSplattingShared.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.d.ts +6 -0
- package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js +76 -0
- package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js +27 -3
- package/ShadersWGSL/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js +18 -0
- package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +11 -25
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +11 -25
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDebug.js +5 -1
- package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +6 -1
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/ShadersWGSL/default.fragment.js +17 -48
- package/ShadersWGSL/default.fragment.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +15 -2
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +15 -2
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianPointSplattingBlit.fragment.d.ts +5 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.fragment.js +22 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.fragment.js.map +1 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.vertex.d.ts +5 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.vertex.js +19 -0
- package/ShadersWGSL/gaussianPointSplattingBlit.vertex.js.map +1 -0
- package/ShadersWGSL/gaussianPointSplattingDepthBlit.fragment.d.ts +5 -0
- package/ShadersWGSL/gaussianPointSplattingDepthBlit.fragment.js +21 -0
- package/ShadersWGSL/gaussianPointSplattingDepthBlit.fragment.js.map +1 -0
- package/ShadersWGSL/gaussianSplatting.fragment.js +63 -2
- package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js +82 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js +2 -1
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplattingVoxel.vertex.js +2 -1
- package/ShadersWGSL/gaussianSplattingVoxel.vertex.js.map +1 -1
- package/ShadersWGSL/geometry.fragment.js +37 -2
- package/ShadersWGSL/geometry.fragment.js.map +1 -1
- package/ShadersWGSL/gpsHiZBuild.compute.d.ts +5 -0
- package/ShadersWGSL/gpsHiZBuild.compute.js +16 -0
- package/ShadersWGSL/gpsHiZBuild.compute.js.map +1 -0
- package/ShadersWGSL/gpsPartition.compute.d.ts +5 -0
- package/ShadersWGSL/gpsPartition.compute.js +27 -0
- package/ShadersWGSL/gpsPartition.compute.js.map +1 -0
- package/ShadersWGSL/gpsPreprocess.compute.d.ts +5 -0
- package/ShadersWGSL/gpsPreprocess.compute.js +86 -0
- package/ShadersWGSL/gpsPreprocess.compute.js.map +1 -0
- package/ShadersWGSL/gpsResolve.compute.d.ts +5 -0
- package/ShadersWGSL/gpsResolve.compute.js +41 -0
- package/ShadersWGSL/gpsResolve.compute.js.map +1 -0
- package/ShadersWGSL/gpsScanAdd.compute.d.ts +5 -0
- package/ShadersWGSL/gpsScanAdd.compute.js +22 -0
- package/ShadersWGSL/gpsScanAdd.compute.js.map +1 -0
- package/ShadersWGSL/gpsScanBlocks.compute.d.ts +5 -0
- package/ShadersWGSL/gpsScanBlocks.compute.js +23 -0
- package/ShadersWGSL/gpsScanBlocks.compute.js.map +1 -0
- package/ShadersWGSL/gpsScanSums.compute.d.ts +5 -0
- package/ShadersWGSL/gpsScanSums.compute.js +30 -0
- package/ShadersWGSL/gpsScanSums.compute.js.map +1 -0
- package/ShadersWGSL/gpsSplat.compute.d.ts +5 -0
- package/ShadersWGSL/gpsSplat.compute.js +37 -0
- package/ShadersWGSL/gpsSplat.compute.js.map +1 -0
- package/ShadersWGSL/gpuRenderParticles.fragment.js +47 -2
- package/ShadersWGSL/gpuRenderParticles.fragment.js.map +1 -1
- package/ShadersWGSL/gpuRenderParticles.vertex.js +110 -7
- package/ShadersWGSL/gpuRenderParticles.vertex.js.map +1 -1
- package/ShadersWGSL/meshBlending.fragment.d.ts +5 -0
- package/ShadersWGSL/meshBlending.fragment.js +576 -0
- package/ShadersWGSL/meshBlending.fragment.js.map +1 -0
- package/ShadersWGSL/minmaxRedux.fragment.js +20 -3
- package/ShadersWGSL/minmaxRedux.fragment.js.map +1 -1
- package/ShadersWGSL/openpbr.fragment.js +2 -1
- package/ShadersWGSL/openpbr.fragment.js.map +1 -1
- package/ShadersWGSL/particles.fragment.js +45 -1
- package/ShadersWGSL/particles.fragment.js.map +1 -1
- package/ShadersWGSL/particles.vertex.js +86 -4
- package/ShadersWGSL/particles.vertex.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +2 -1
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/sprites.fragment.js +56 -2
- package/ShadersWGSL/sprites.fragment.js.map +1 -1
- package/ShadersWGSL/sprites.vertex.js +62 -1
- package/ShadersWGSL/sprites.vertex.js.map +1 -1
- package/Sprites/spriteManager.d.ts +13 -0
- package/Sprites/spriteManager.js +15 -0
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.d.ts +24 -1
- package/Sprites/spriteRenderer.js +368 -50
- package/Sprites/spriteRenderer.js.map +1 -1
- package/Sprites/thinSprite.d.ts +4 -0
- package/Sprites/thinSprite.js +4 -0
- package/Sprites/thinSprite.js.map +1 -1
- package/States/alphaCullingState.d.ts +3 -1
- package/States/alphaCullingState.js +18 -3
- package/States/alphaCullingState.js.map +1 -1
- package/XR/features/WebXRSpaceWarp.pure.js +2 -1
- package/XR/features/WebXRSpaceWarp.pure.js.map +1 -1
- package/XR/webXRDefaultExperience.d.ts +5 -1
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXREnterExitUI.d.ts +2 -1
- package/XR/webXREnterExitUI.js.map +1 -1
- package/assetContainer.d.ts +1 -0
- package/assetContainer.js +5 -1
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
- package/scene.pure.d.ts +36 -2
- package/scene.pure.js +63 -4
- package/scene.pure.js.map +1 -1
|
@@ -14,6 +14,7 @@ export declare class WebGL2ParticleSystem implements IGPUParticleSystemPlatform
|
|
|
14
14
|
private _updateEffect;
|
|
15
15
|
private _updateEffectOptions;
|
|
16
16
|
private _renderVAO;
|
|
17
|
+
private _renderVAOEffects;
|
|
17
18
|
private _updateVAO;
|
|
18
19
|
private _renderVertexBuffers;
|
|
19
20
|
private _baseUniformsNamesLength;
|
|
@@ -9,7 +9,9 @@ export class WebGL2ParticleSystem {
|
|
|
9
9
|
/** @internal */
|
|
10
10
|
constructor(parent, engine) {
|
|
11
11
|
this._renderVAO = [];
|
|
12
|
+
this._renderVAOEffects = [];
|
|
12
13
|
this._updateVAO = [];
|
|
14
|
+
this._renderVertexBuffers = [];
|
|
13
15
|
/** @internal */
|
|
14
16
|
this.alignDataInBuffer = false;
|
|
15
17
|
RegisterEngineTransformFeedback();
|
|
@@ -90,7 +92,9 @@ export class WebGL2ParticleSystem {
|
|
|
90
92
|
contextLost() {
|
|
91
93
|
this._updateEffect = undefined;
|
|
92
94
|
this._renderVAO.length = 0;
|
|
95
|
+
this._renderVAOEffects.length = 0;
|
|
93
96
|
this._updateVAO.length = 0;
|
|
97
|
+
this._renderVertexBuffers.length = 0;
|
|
94
98
|
}
|
|
95
99
|
/** @internal */
|
|
96
100
|
isUpdateBufferCreated() {
|
|
@@ -154,9 +158,11 @@ export class WebGL2ParticleSystem {
|
|
|
154
158
|
/** @internal */
|
|
155
159
|
createVertexBuffers(updateBuffer, renderVertexBuffers) {
|
|
156
160
|
this._updateVAO.push(this._createUpdateVAO(updateBuffer));
|
|
157
|
-
|
|
161
|
+
const renderEffect = this._parent._getWrapper(this._parent.blendMode).effect;
|
|
162
|
+
this._renderVAO.push(this._engine.recordVertexArrayObject(renderVertexBuffers, null, renderEffect));
|
|
163
|
+
this._renderVAOEffects.push(renderEffect);
|
|
158
164
|
this._engine.bindArrayBuffer(null);
|
|
159
|
-
this._renderVertexBuffers
|
|
165
|
+
this._renderVertexBuffers.push(renderVertexBuffers);
|
|
160
166
|
}
|
|
161
167
|
/** @internal */
|
|
162
168
|
createParticleBuffer(data) {
|
|
@@ -164,8 +170,8 @@ export class WebGL2ParticleSystem {
|
|
|
164
170
|
}
|
|
165
171
|
/** @internal */
|
|
166
172
|
bindDrawBuffers(index, effect, indexBuffer) {
|
|
167
|
-
if (indexBuffer) {
|
|
168
|
-
this._engine.bindBuffers(this._renderVertexBuffers, indexBuffer, effect);
|
|
173
|
+
if (indexBuffer || this._renderVAOEffects[index] !== effect) {
|
|
174
|
+
this._engine.bindBuffers(this._renderVertexBuffers[index], indexBuffer, effect);
|
|
169
175
|
}
|
|
170
176
|
else {
|
|
171
177
|
this._engine.bindVertexArrayObject(this._renderVAO[index], null);
|
|
@@ -234,6 +240,8 @@ export class WebGL2ParticleSystem {
|
|
|
234
240
|
this._engine.releaseVertexArrayObject(this._renderVAO[index]);
|
|
235
241
|
}
|
|
236
242
|
this._renderVAO.length = 0;
|
|
243
|
+
this._renderVAOEffects.length = 0;
|
|
244
|
+
this._renderVertexBuffers.length = 0;
|
|
237
245
|
}
|
|
238
246
|
_createUpdateVAO(source) {
|
|
239
247
|
const updateVertexBuffers = {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webgl2ParticleSystem.pure.js","sourceRoot":"","sources":["../../../../dev/core/src/Particles/webgl2ParticleSystem.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type VertexBuffer, type Buffer } from \"../Buffers/buffer.pure\";\r\nimport { type ThinEngine } from \"../Engines/thinEngine.pure\";\r\nimport { type Effect, type IEffectCreationOptions } from \"../Materials/effect.pure\";\r\nimport { type IGPUParticleSystemPlatform } from \"./IGPUParticleSystemPlatform\";\r\nimport { CustomParticleEmitter } from \"./EmitterTypes/customParticleEmitter\";\r\nimport { type GPUParticleSystem } from \"./gpuParticleSystem.pure\";\r\nimport { type DataArray, type Nullable } from \"../types\";\r\nimport { type DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { UniformBufferEffectCommonAccessor } from \"../Materials/uniformBufferEffectCommonAccessor\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { type Engine } from \"../Engines/engine.pure\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\nimport { RegisterEngineTransformFeedback } from \"../Engines/Extensions/engine.transformFeedback.pure\";\r\n\r\n/** @internal */\r\nexport class WebGL2ParticleSystem implements IGPUParticleSystemPlatform {\r\n private _parent: GPUParticleSystem;\r\n private _engine: ThinEngine;\r\n private _updateEffect: Effect;\r\n private _updateEffectOptions: IEffectCreationOptions;\r\n private _renderVAO: WebGLVertexArrayObject[] = [];\r\n private _updateVAO: WebGLVertexArrayObject[] = [];\r\n private _renderVertexBuffers: { [key: string]: VertexBuffer };\r\n private _baseUniformsNamesLength: number;\r\n\r\n /** @internal */\r\n public readonly alignDataInBuffer = false;\r\n\r\n /** @internal */\r\n constructor(parent: GPUParticleSystem, engine: ThinEngine) {\r\n RegisterEngineTransformFeedback();\r\n\r\n this._parent = parent;\r\n this._engine = engine;\r\n\r\n this._updateEffectOptions = {\r\n attributes: [\r\n \"position\",\r\n \"initialPosition\",\r\n \"age\",\r\n \"life\",\r\n \"seed\",\r\n \"size\",\r\n \"color\",\r\n \"direction\",\r\n \"initialDirection\",\r\n \"angle\",\r\n \"cellIndex\",\r\n \"cellStartOffset\",\r\n \"noiseCoordinates1\",\r\n \"noiseCoordinates2\",\r\n ],\r\n uniformsNames: [\r\n \"currentCount\",\r\n \"timeDelta\",\r\n \"emitterWM\",\r\n \"lifeTime\",\r\n \"color1\",\r\n \"color2\",\r\n \"sizeRange\",\r\n \"scaleRange\",\r\n \"gravity\",\r\n \"emitPower\",\r\n \"direction1\",\r\n \"direction2\",\r\n \"minEmitBox\",\r\n \"maxEmitBox\",\r\n \"radius\",\r\n \"directionRandomizer\",\r\n \"height\",\r\n \"coneAngle\",\r\n \"stopFactor\",\r\n \"emitIndex\",\r\n \"emitCount\",\r\n \"angleRange\",\r\n \"radiusRange\",\r\n \"cellInfos\",\r\n \"noiseStrength\",\r\n \"limitVelocityDamping\",\r\n \"flowMapProjection\",\r\n \"flowMapStrength\",\r\n ],\r\n uniformBuffersNames: [],\r\n samplers: [\r\n \"randomSampler\",\r\n \"randomSampler2\",\r\n \"sizeGradientSampler\",\r\n \"angularSpeedGradientSampler\",\r\n \"velocityGradientSampler\",\r\n \"limitVelocityGradientSampler\",\r\n \"noiseSampler\",\r\n \"dragGradientSampler\",\r\n \"flowMapSampler\",\r\n \"meshPositionSampler\",\r\n \"meshNormalSampler\",\r\n ],\r\n defines: \"\",\r\n fallbacks: null,\r\n onCompiled: null,\r\n onError: null,\r\n indexParameters: null,\r\n maxSimultaneousLights: 0,\r\n transformFeedbackVaryings: [],\r\n };\r\n this._baseUniformsNamesLength = this._updateEffectOptions.uniformsNames.length;\r\n }\r\n\r\n /** @internal */\r\n public contextLost(): void {\r\n this._updateEffect = undefined as any;\r\n this._renderVAO.length = 0;\r\n this._updateVAO.length = 0;\r\n }\r\n\r\n /** @internal */\r\n public isUpdateBufferCreated(): boolean {\r\n return !!this._updateEffect;\r\n }\r\n\r\n /** @internal */\r\n public isUpdateBufferReady(): boolean {\r\n return this._updateEffect?.isReady() ?? false;\r\n }\r\n\r\n /** @internal */\r\n public createUpdateBuffer(defines: string): UniformBufferEffectCommonAccessor {\r\n // Reset dynamic uniforms to avoid accumulating duplicates on rebuild\r\n this._updateEffectOptions.uniformsNames.length = this._baseUniformsNamesLength;\r\n\r\n this._updateEffectOptions.transformFeedbackVaryings = [\"outPosition\"];\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outAge\");\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outSize\");\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outLife\");\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outSeed\");\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outDirection\");\r\n\r\n if (this._parent.particleEmitterType instanceof CustomParticleEmitter) {\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outInitialPosition\");\r\n }\r\n\r\n if (!this._parent._colorGradientsTexture) {\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outColor\");\r\n }\r\n\r\n if (this._parent._needsInitialDirection) {\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outInitialDirection\");\r\n }\r\n\r\n if (this._parent.noiseTexture) {\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outNoiseCoordinates1\");\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outNoiseCoordinates2\");\r\n }\r\n\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outAngle\");\r\n\r\n if (this._parent.isAnimationSheetEnabled) {\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outCellIndex\");\r\n if (this._parent.spriteRandomStartCell) {\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outCellStartOffset\");\r\n }\r\n }\r\n\r\n this._updateEffectOptions.defines = defines;\r\n\r\n // Add attractor uniform names dynamically based on maxAttractors\r\n if (defines.indexOf(\"ATTRACTORS\") !== -1) {\r\n this._updateEffectOptions.uniformsNames.push(\"attractorCount\");\r\n for (let i = 0; i < this._parent.maxAttractors; i++) {\r\n this._updateEffectOptions.uniformsNames.push(\"attractorPositionAndStrength[\" + i + \"]\");\r\n }\r\n }\r\n\r\n if (defines.indexOf(\"STARTSIZEGRADIENTS\") !== -1) {\r\n this._updateEffectOptions.uniformsNames.push(\"startSizeGradientFactor\");\r\n }\r\n\r\n if (defines.indexOf(\"LIFETIMEGRADIENTS\") !== -1) {\r\n this._updateEffectOptions.uniformsNames.push(\"lifeTimeGradientRange\");\r\n }\r\n\r\n if (defines.indexOf(\"MESHEMITTER\") !== -1) {\r\n this._updateEffectOptions.uniformsNames.push(\"meshTriangleCount\");\r\n this._updateEffectOptions.uniformsNames.push(\"meshTextureWidth\");\r\n }\r\n\r\n this._updateEffect = this._engine.createEffect(\"gpuUpdateParticles\", this._updateEffectOptions, this._engine);\r\n\r\n return new UniformBufferEffectCommonAccessor(this._updateEffect);\r\n }\r\n\r\n /** @internal */\r\n public createVertexBuffers(updateBuffer: Buffer, renderVertexBuffers: { [key: string]: VertexBuffer }): void {\r\n this._updateVAO.push(this._createUpdateVAO(updateBuffer));\r\n\r\n this._renderVAO.push(this._engine.recordVertexArrayObject(renderVertexBuffers, null, this._parent._getWrapper(this._parent.blendMode).effect!));\r\n this._engine.bindArrayBuffer(null);\r\n\r\n this._renderVertexBuffers = renderVertexBuffers;\r\n }\r\n\r\n /** @internal */\r\n public createParticleBuffer(data: number[]): DataArray | DataBuffer {\r\n return data;\r\n }\r\n\r\n /** @internal */\r\n public bindDrawBuffers(index: number, effect: Effect, indexBuffer: Nullable<DataBuffer>): void {\r\n if (indexBuffer) {\r\n this._engine.bindBuffers(this._renderVertexBuffers, indexBuffer, effect);\r\n } else {\r\n this._engine.bindVertexArrayObject(this._renderVAO[index], null);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public preUpdateParticleBuffer(): void {\r\n const engine = this._engine as Engine;\r\n\r\n this._engine.enableEffect(this._updateEffect);\r\n\r\n if (!engine.setState) {\r\n throw new Error(\"GPU particles cannot work without a full Engine. ThinEngine is not supported\");\r\n }\r\n }\r\n\r\n /** @internal */\r\n public updateParticleBuffer(index: number, targetBuffer: Buffer, currentActiveCount: number): void {\r\n this._updateEffect.setTexture(\"randomSampler\", this._parent._randomTexture);\r\n this._updateEffect.setTexture(\"randomSampler2\", this._parent._randomTexture2);\r\n\r\n if (this._parent._flowMap) {\r\n this._updateEffect.setTexture(\"flowMapSampler\", this._parent._flowMap);\r\n }\r\n\r\n if (this._parent._sizeGradientsTexture) {\r\n this._updateEffect.setTexture(\"sizeGradientSampler\", this._parent._sizeGradientsTexture);\r\n }\r\n\r\n if (this._parent._angularSpeedGradientsTexture) {\r\n this._updateEffect.setTexture(\"angularSpeedGradientSampler\", this._parent._angularSpeedGradientsTexture);\r\n }\r\n\r\n if (this._parent._velocityGradientsTexture) {\r\n this._updateEffect.setTexture(\"velocityGradientSampler\", this._parent._velocityGradientsTexture);\r\n }\r\n\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n this._updateEffect.setTexture(\"limitVelocityGradientSampler\", this._parent._limitVelocityGradientsTexture);\r\n }\r\n\r\n if (this._parent._dragGradientsTexture) {\r\n this._updateEffect.setTexture(\"dragGradientSampler\", this._parent._dragGradientsTexture);\r\n }\r\n\r\n if (this._parent.noiseTexture) {\r\n this._updateEffect.setTexture(\"noiseSampler\", this._parent.noiseTexture);\r\n }\r\n\r\n if (this._parent._meshPositionTexture) {\r\n this._updateEffect.setTexture(\"meshPositionSampler\", this._parent._meshPositionTexture);\r\n }\r\n\r\n if (this._parent._meshNormalTexture) {\r\n this._updateEffect.setTexture(\"meshNormalSampler\", this._parent._meshNormalTexture);\r\n }\r\n\r\n // Bind source VAO\r\n this._engine.bindVertexArrayObject(this._updateVAO[index], null);\r\n\r\n // Update\r\n const engine = this._engine as Engine;\r\n\r\n engine.bindTransformFeedbackBuffer(targetBuffer.getBuffer());\r\n engine.setRasterizerState(false);\r\n engine.beginTransformFeedback(true);\r\n engine.drawArraysType(Constants.MATERIAL_PointListDrawMode, 0, currentActiveCount);\r\n engine.endTransformFeedback();\r\n engine.setRasterizerState(true);\r\n engine.bindTransformFeedbackBuffer(null);\r\n }\r\n\r\n /** @internal */\r\n public releaseBuffers(): void {}\r\n\r\n /** @internal */\r\n public releaseVertexBuffers(): void {\r\n for (let index = 0; index < this._updateVAO.length; index++) {\r\n this._engine.releaseVertexArrayObject(this._updateVAO[index]);\r\n }\r\n this._updateVAO.length = 0;\r\n\r\n for (let index = 0; index < this._renderVAO.length; index++) {\r\n this._engine.releaseVertexArrayObject(this._renderVAO[index]);\r\n }\r\n this._renderVAO.length = 0;\r\n }\r\n\r\n private _createUpdateVAO(source: Buffer): WebGLVertexArrayObject {\r\n const updateVertexBuffers: { [key: string]: VertexBuffer } = {};\r\n updateVertexBuffers[\"position\"] = source.createVertexBuffer(\"position\", 0, 3);\r\n\r\n let offset = 3;\r\n updateVertexBuffers[\"age\"] = source.createVertexBuffer(\"age\", offset, 1);\r\n offset += 1;\r\n updateVertexBuffers[\"size\"] = source.createVertexBuffer(\"size\", offset, 3);\r\n offset += 3;\r\n updateVertexBuffers[\"life\"] = source.createVertexBuffer(\"life\", offset, 1);\r\n offset += 1;\r\n updateVertexBuffers[\"seed\"] = source.createVertexBuffer(\"seed\", offset, 4);\r\n offset += 4;\r\n updateVertexBuffers[\"direction\"] = source.createVertexBuffer(\"direction\", offset, 3);\r\n offset += 3;\r\n\r\n if (this._parent.particleEmitterType instanceof CustomParticleEmitter) {\r\n updateVertexBuffers[\"initialPosition\"] = source.createVertexBuffer(\"initialPosition\", offset, 3);\r\n offset += 3;\r\n }\r\n\r\n if (!this._parent._colorGradientsTexture) {\r\n updateVertexBuffers[\"color\"] = source.createVertexBuffer(\"color\", offset, 4);\r\n offset += 4;\r\n }\r\n\r\n if (this._parent._needsInitialDirection) {\r\n updateVertexBuffers[\"initialDirection\"] = source.createVertexBuffer(\"initialDirection\", offset, 3);\r\n offset += 3;\r\n }\r\n\r\n if (this._parent.noiseTexture) {\r\n updateVertexBuffers[\"noiseCoordinates1\"] = source.createVertexBuffer(\"noiseCoordinates1\", offset, 3);\r\n offset += 3;\r\n updateVertexBuffers[\"noiseCoordinates2\"] = source.createVertexBuffer(\"noiseCoordinates2\", offset, 3);\r\n offset += 3;\r\n }\r\n\r\n if (this._parent._angularSpeedGradientsTexture) {\r\n updateVertexBuffers[\"angle\"] = source.createVertexBuffer(\"angle\", offset, 1);\r\n offset += 1;\r\n } else {\r\n updateVertexBuffers[\"angle\"] = source.createVertexBuffer(\"angle\", offset, 2);\r\n offset += 2;\r\n }\r\n\r\n if (this._parent._isAnimationSheetEnabled) {\r\n updateVertexBuffers[\"cellIndex\"] = source.createVertexBuffer(\"cellIndex\", offset, 1);\r\n offset += 1;\r\n if (this._parent.spriteRandomStartCell) {\r\n updateVertexBuffers[\"cellStartOffset\"] = source.createVertexBuffer(\"cellStartOffset\", offset, 1);\r\n }\r\n }\r\n\r\n const vao = this._engine.recordVertexArrayObject(updateVertexBuffers, null, this._updateEffect);\r\n this._engine.bindArrayBuffer(null);\r\n\r\n return vao;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for webgl2ParticleSystem.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterWebgl2ParticleSystem(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.WebGL2ParticleSystem\", WebGL2ParticleSystem);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"webgl2ParticleSystem.pure.js","sourceRoot":"","sources":["../../../../dev/core/src/Particles/webgl2ParticleSystem.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type VertexBuffer, type Buffer } from \"../Buffers/buffer.pure\";\r\nimport { type ThinEngine } from \"../Engines/thinEngine.pure\";\r\nimport { type Effect, type IEffectCreationOptions } from \"../Materials/effect.pure\";\r\nimport { type IGPUParticleSystemPlatform } from \"./IGPUParticleSystemPlatform\";\r\nimport { CustomParticleEmitter } from \"./EmitterTypes/customParticleEmitter\";\r\nimport { type GPUParticleSystem } from \"./gpuParticleSystem.pure\";\r\nimport { type DataArray, type Nullable } from \"../types\";\r\nimport { type DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { UniformBufferEffectCommonAccessor } from \"../Materials/uniformBufferEffectCommonAccessor\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { type Engine } from \"../Engines/engine.pure\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\nimport { RegisterEngineTransformFeedback } from \"../Engines/Extensions/engine.transformFeedback.pure\";\r\n\r\n/** @internal */\r\nexport class WebGL2ParticleSystem implements IGPUParticleSystemPlatform {\r\n private _parent: GPUParticleSystem;\r\n private _engine: ThinEngine;\r\n private _updateEffect: Effect;\r\n private _updateEffectOptions: IEffectCreationOptions;\r\n private _renderVAO: WebGLVertexArrayObject[] = [];\r\n private _renderVAOEffects: Effect[] = [];\r\n private _updateVAO: WebGLVertexArrayObject[] = [];\r\n private _renderVertexBuffers: Array<{ [key: string]: VertexBuffer }> = [];\r\n private _baseUniformsNamesLength: number;\r\n\r\n /** @internal */\r\n public readonly alignDataInBuffer = false;\r\n\r\n /** @internal */\r\n constructor(parent: GPUParticleSystem, engine: ThinEngine) {\r\n RegisterEngineTransformFeedback();\r\n\r\n this._parent = parent;\r\n this._engine = engine;\r\n\r\n this._updateEffectOptions = {\r\n attributes: [\r\n \"position\",\r\n \"initialPosition\",\r\n \"age\",\r\n \"life\",\r\n \"seed\",\r\n \"size\",\r\n \"color\",\r\n \"direction\",\r\n \"initialDirection\",\r\n \"angle\",\r\n \"cellIndex\",\r\n \"cellStartOffset\",\r\n \"noiseCoordinates1\",\r\n \"noiseCoordinates2\",\r\n ],\r\n uniformsNames: [\r\n \"currentCount\",\r\n \"timeDelta\",\r\n \"emitterWM\",\r\n \"lifeTime\",\r\n \"color1\",\r\n \"color2\",\r\n \"sizeRange\",\r\n \"scaleRange\",\r\n \"gravity\",\r\n \"emitPower\",\r\n \"direction1\",\r\n \"direction2\",\r\n \"minEmitBox\",\r\n \"maxEmitBox\",\r\n \"radius\",\r\n \"directionRandomizer\",\r\n \"height\",\r\n \"coneAngle\",\r\n \"stopFactor\",\r\n \"emitIndex\",\r\n \"emitCount\",\r\n \"angleRange\",\r\n \"radiusRange\",\r\n \"cellInfos\",\r\n \"noiseStrength\",\r\n \"limitVelocityDamping\",\r\n \"flowMapProjection\",\r\n \"flowMapStrength\",\r\n ],\r\n uniformBuffersNames: [],\r\n samplers: [\r\n \"randomSampler\",\r\n \"randomSampler2\",\r\n \"sizeGradientSampler\",\r\n \"angularSpeedGradientSampler\",\r\n \"velocityGradientSampler\",\r\n \"limitVelocityGradientSampler\",\r\n \"noiseSampler\",\r\n \"dragGradientSampler\",\r\n \"flowMapSampler\",\r\n \"meshPositionSampler\",\r\n \"meshNormalSampler\",\r\n ],\r\n defines: \"\",\r\n fallbacks: null,\r\n onCompiled: null,\r\n onError: null,\r\n indexParameters: null,\r\n maxSimultaneousLights: 0,\r\n transformFeedbackVaryings: [],\r\n };\r\n this._baseUniformsNamesLength = this._updateEffectOptions.uniformsNames.length;\r\n }\r\n\r\n /** @internal */\r\n public contextLost(): void {\r\n this._updateEffect = undefined as any;\r\n this._renderVAO.length = 0;\r\n this._renderVAOEffects.length = 0;\r\n this._updateVAO.length = 0;\r\n this._renderVertexBuffers.length = 0;\r\n }\r\n\r\n /** @internal */\r\n public isUpdateBufferCreated(): boolean {\r\n return !!this._updateEffect;\r\n }\r\n\r\n /** @internal */\r\n public isUpdateBufferReady(): boolean {\r\n return this._updateEffect?.isReady() ?? false;\r\n }\r\n\r\n /** @internal */\r\n public createUpdateBuffer(defines: string): UniformBufferEffectCommonAccessor {\r\n // Reset dynamic uniforms to avoid accumulating duplicates on rebuild\r\n this._updateEffectOptions.uniformsNames.length = this._baseUniformsNamesLength;\r\n\r\n this._updateEffectOptions.transformFeedbackVaryings = [\"outPosition\"];\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outAge\");\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outSize\");\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outLife\");\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outSeed\");\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outDirection\");\r\n\r\n if (this._parent.particleEmitterType instanceof CustomParticleEmitter) {\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outInitialPosition\");\r\n }\r\n\r\n if (!this._parent._colorGradientsTexture) {\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outColor\");\r\n }\r\n\r\n if (this._parent._needsInitialDirection) {\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outInitialDirection\");\r\n }\r\n\r\n if (this._parent.noiseTexture) {\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outNoiseCoordinates1\");\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outNoiseCoordinates2\");\r\n }\r\n\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outAngle\");\r\n\r\n if (this._parent.isAnimationSheetEnabled) {\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outCellIndex\");\r\n if (this._parent.spriteRandomStartCell) {\r\n this._updateEffectOptions.transformFeedbackVaryings.push(\"outCellStartOffset\");\r\n }\r\n }\r\n\r\n this._updateEffectOptions.defines = defines;\r\n\r\n // Add attractor uniform names dynamically based on maxAttractors\r\n if (defines.indexOf(\"ATTRACTORS\") !== -1) {\r\n this._updateEffectOptions.uniformsNames.push(\"attractorCount\");\r\n for (let i = 0; i < this._parent.maxAttractors; i++) {\r\n this._updateEffectOptions.uniformsNames.push(\"attractorPositionAndStrength[\" + i + \"]\");\r\n }\r\n }\r\n\r\n if (defines.indexOf(\"STARTSIZEGRADIENTS\") !== -1) {\r\n this._updateEffectOptions.uniformsNames.push(\"startSizeGradientFactor\");\r\n }\r\n\r\n if (defines.indexOf(\"LIFETIMEGRADIENTS\") !== -1) {\r\n this._updateEffectOptions.uniformsNames.push(\"lifeTimeGradientRange\");\r\n }\r\n\r\n if (defines.indexOf(\"MESHEMITTER\") !== -1) {\r\n this._updateEffectOptions.uniformsNames.push(\"meshTriangleCount\");\r\n this._updateEffectOptions.uniformsNames.push(\"meshTextureWidth\");\r\n }\r\n\r\n this._updateEffect = this._engine.createEffect(\"gpuUpdateParticles\", this._updateEffectOptions, this._engine);\r\n\r\n return new UniformBufferEffectCommonAccessor(this._updateEffect);\r\n }\r\n\r\n /** @internal */\r\n public createVertexBuffers(updateBuffer: Buffer, renderVertexBuffers: { [key: string]: VertexBuffer }): void {\r\n this._updateVAO.push(this._createUpdateVAO(updateBuffer));\r\n\r\n const renderEffect = this._parent._getWrapper(this._parent.blendMode).effect!;\r\n this._renderVAO.push(this._engine.recordVertexArrayObject(renderVertexBuffers, null, renderEffect));\r\n this._renderVAOEffects.push(renderEffect);\r\n this._engine.bindArrayBuffer(null);\r\n\r\n this._renderVertexBuffers.push(renderVertexBuffers);\r\n }\r\n\r\n /** @internal */\r\n public createParticleBuffer(data: number[]): DataArray | DataBuffer {\r\n return data;\r\n }\r\n\r\n /** @internal */\r\n public bindDrawBuffers(index: number, effect: Effect, indexBuffer: Nullable<DataBuffer>): void {\r\n if (indexBuffer || this._renderVAOEffects[index] !== effect) {\r\n this._engine.bindBuffers(this._renderVertexBuffers[index], indexBuffer, effect);\r\n } else {\r\n this._engine.bindVertexArrayObject(this._renderVAO[index], null);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public preUpdateParticleBuffer(): void {\r\n const engine = this._engine as Engine;\r\n\r\n this._engine.enableEffect(this._updateEffect);\r\n\r\n if (!engine.setState) {\r\n throw new Error(\"GPU particles cannot work without a full Engine. ThinEngine is not supported\");\r\n }\r\n }\r\n\r\n /** @internal */\r\n public updateParticleBuffer(index: number, targetBuffer: Buffer, currentActiveCount: number): void {\r\n this._updateEffect.setTexture(\"randomSampler\", this._parent._randomTexture);\r\n this._updateEffect.setTexture(\"randomSampler2\", this._parent._randomTexture2);\r\n\r\n if (this._parent._flowMap) {\r\n this._updateEffect.setTexture(\"flowMapSampler\", this._parent._flowMap);\r\n }\r\n\r\n if (this._parent._sizeGradientsTexture) {\r\n this._updateEffect.setTexture(\"sizeGradientSampler\", this._parent._sizeGradientsTexture);\r\n }\r\n\r\n if (this._parent._angularSpeedGradientsTexture) {\r\n this._updateEffect.setTexture(\"angularSpeedGradientSampler\", this._parent._angularSpeedGradientsTexture);\r\n }\r\n\r\n if (this._parent._velocityGradientsTexture) {\r\n this._updateEffect.setTexture(\"velocityGradientSampler\", this._parent._velocityGradientsTexture);\r\n }\r\n\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n this._updateEffect.setTexture(\"limitVelocityGradientSampler\", this._parent._limitVelocityGradientsTexture);\r\n }\r\n\r\n if (this._parent._dragGradientsTexture) {\r\n this._updateEffect.setTexture(\"dragGradientSampler\", this._parent._dragGradientsTexture);\r\n }\r\n\r\n if (this._parent.noiseTexture) {\r\n this._updateEffect.setTexture(\"noiseSampler\", this._parent.noiseTexture);\r\n }\r\n\r\n if (this._parent._meshPositionTexture) {\r\n this._updateEffect.setTexture(\"meshPositionSampler\", this._parent._meshPositionTexture);\r\n }\r\n\r\n if (this._parent._meshNormalTexture) {\r\n this._updateEffect.setTexture(\"meshNormalSampler\", this._parent._meshNormalTexture);\r\n }\r\n\r\n // Bind source VAO\r\n this._engine.bindVertexArrayObject(this._updateVAO[index], null);\r\n\r\n // Update\r\n const engine = this._engine as Engine;\r\n\r\n engine.bindTransformFeedbackBuffer(targetBuffer.getBuffer());\r\n engine.setRasterizerState(false);\r\n engine.beginTransformFeedback(true);\r\n engine.drawArraysType(Constants.MATERIAL_PointListDrawMode, 0, currentActiveCount);\r\n engine.endTransformFeedback();\r\n engine.setRasterizerState(true);\r\n engine.bindTransformFeedbackBuffer(null);\r\n }\r\n\r\n /** @internal */\r\n public releaseBuffers(): void {}\r\n\r\n /** @internal */\r\n public releaseVertexBuffers(): void {\r\n for (let index = 0; index < this._updateVAO.length; index++) {\r\n this._engine.releaseVertexArrayObject(this._updateVAO[index]);\r\n }\r\n this._updateVAO.length = 0;\r\n\r\n for (let index = 0; index < this._renderVAO.length; index++) {\r\n this._engine.releaseVertexArrayObject(this._renderVAO[index]);\r\n }\r\n this._renderVAO.length = 0;\r\n this._renderVAOEffects.length = 0;\r\n this._renderVertexBuffers.length = 0;\r\n }\r\n\r\n private _createUpdateVAO(source: Buffer): WebGLVertexArrayObject {\r\n const updateVertexBuffers: { [key: string]: VertexBuffer } = {};\r\n updateVertexBuffers[\"position\"] = source.createVertexBuffer(\"position\", 0, 3);\r\n\r\n let offset = 3;\r\n updateVertexBuffers[\"age\"] = source.createVertexBuffer(\"age\", offset, 1);\r\n offset += 1;\r\n updateVertexBuffers[\"size\"] = source.createVertexBuffer(\"size\", offset, 3);\r\n offset += 3;\r\n updateVertexBuffers[\"life\"] = source.createVertexBuffer(\"life\", offset, 1);\r\n offset += 1;\r\n updateVertexBuffers[\"seed\"] = source.createVertexBuffer(\"seed\", offset, 4);\r\n offset += 4;\r\n updateVertexBuffers[\"direction\"] = source.createVertexBuffer(\"direction\", offset, 3);\r\n offset += 3;\r\n\r\n if (this._parent.particleEmitterType instanceof CustomParticleEmitter) {\r\n updateVertexBuffers[\"initialPosition\"] = source.createVertexBuffer(\"initialPosition\", offset, 3);\r\n offset += 3;\r\n }\r\n\r\n if (!this._parent._colorGradientsTexture) {\r\n updateVertexBuffers[\"color\"] = source.createVertexBuffer(\"color\", offset, 4);\r\n offset += 4;\r\n }\r\n\r\n if (this._parent._needsInitialDirection) {\r\n updateVertexBuffers[\"initialDirection\"] = source.createVertexBuffer(\"initialDirection\", offset, 3);\r\n offset += 3;\r\n }\r\n\r\n if (this._parent.noiseTexture) {\r\n updateVertexBuffers[\"noiseCoordinates1\"] = source.createVertexBuffer(\"noiseCoordinates1\", offset, 3);\r\n offset += 3;\r\n updateVertexBuffers[\"noiseCoordinates2\"] = source.createVertexBuffer(\"noiseCoordinates2\", offset, 3);\r\n offset += 3;\r\n }\r\n\r\n if (this._parent._angularSpeedGradientsTexture) {\r\n updateVertexBuffers[\"angle\"] = source.createVertexBuffer(\"angle\", offset, 1);\r\n offset += 1;\r\n } else {\r\n updateVertexBuffers[\"angle\"] = source.createVertexBuffer(\"angle\", offset, 2);\r\n offset += 2;\r\n }\r\n\r\n if (this._parent._isAnimationSheetEnabled) {\r\n updateVertexBuffers[\"cellIndex\"] = source.createVertexBuffer(\"cellIndex\", offset, 1);\r\n offset += 1;\r\n if (this._parent.spriteRandomStartCell) {\r\n updateVertexBuffers[\"cellStartOffset\"] = source.createVertexBuffer(\"cellStartOffset\", offset, 1);\r\n }\r\n }\r\n\r\n const vao = this._engine.recordVertexArrayObject(updateVertexBuffers, null, this._updateEffect);\r\n this._engine.bindArrayBuffer(null);\r\n\r\n return vao;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for webgl2ParticleSystem.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterWebgl2ParticleSystem(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.WebGL2ParticleSystem\", WebGL2ParticleSystem);\r\n}\r\n"]}
|
package/Physics/v2/ragdoll.d.ts
CHANGED
|
@@ -35,11 +35,11 @@ export declare class RagdollBoneProperties {
|
|
|
35
35
|
*/
|
|
36
36
|
rotationAxis?: Vector3;
|
|
37
37
|
/**
|
|
38
|
-
* Minimum rotation angle
|
|
38
|
+
* Minimum rotation angle around `rotationAxis`, in radians. Used by hinge and ball and socket joints.
|
|
39
39
|
*/
|
|
40
40
|
min?: number;
|
|
41
41
|
/**
|
|
42
|
-
* Maximum rotation angle
|
|
42
|
+
* Maximum rotation angle around `rotationAxis`, in radians. Used by hinge and ball and socket joints.
|
|
43
43
|
*/
|
|
44
44
|
max?: number;
|
|
45
45
|
/**
|
|
@@ -80,8 +80,6 @@ export declare class Ragdoll {
|
|
|
80
80
|
pauseSync: boolean;
|
|
81
81
|
private _putBoxesInBoneCenter;
|
|
82
82
|
private _defaultJoint;
|
|
83
|
-
private _defaultJointMin;
|
|
84
|
-
private _defaultJointMax;
|
|
85
83
|
/**
|
|
86
84
|
* Construct a new Ragdoll object. Once ready, it can be made dynamic by calling `Ragdoll` method
|
|
87
85
|
* @param skeleton The skeleton containing bones to be physicalized
|
package/Physics/v2/ragdoll.js
CHANGED
|
@@ -42,8 +42,6 @@ export class Ragdoll {
|
|
|
42
42
|
*/
|
|
43
43
|
this.pauseSync = false;
|
|
44
44
|
this._defaultJoint = 3 /* PhysicsConstraintType.HINGE */;
|
|
45
|
-
this._defaultJointMin = -90;
|
|
46
|
-
this._defaultJointMax = 90;
|
|
47
45
|
this._skeleton = skeleton;
|
|
48
46
|
this._scene = skeleton.getScene();
|
|
49
47
|
this._rootTransformNode = rootTransformNode;
|
|
@@ -97,8 +95,8 @@ export class Ragdoll {
|
|
|
97
95
|
// Define the rest of the box properties.
|
|
98
96
|
currentRagdollBoneProperties.joint = config[i].joint !== undefined ? config[i].joint : this._defaultJoint;
|
|
99
97
|
currentRagdollBoneProperties.rotationAxis = config[i].rotationAxis !== undefined ? config[i].rotationAxis : Axis.X;
|
|
100
|
-
currentRagdollBoneProperties.min = config[i].min
|
|
101
|
-
currentRagdollBoneProperties.max = config[i].max
|
|
98
|
+
currentRagdollBoneProperties.min = config[i].min;
|
|
99
|
+
currentRagdollBoneProperties.max = config[i].max;
|
|
102
100
|
// Offset value.
|
|
103
101
|
let boxOffset = 0;
|
|
104
102
|
if ((config[i].putBoxInBoneCenter !== undefined && config[i].putBoxInBoneCenter) || this._putBoxesInBoneCenter) {
|
|
@@ -165,6 +163,15 @@ export class Ragdoll {
|
|
|
165
163
|
collision: false,
|
|
166
164
|
}, this._scene);
|
|
167
165
|
this._aggregates[boneParentIndex].body.addConstraint(this._aggregates[i].body, constraint);
|
|
166
|
+
// min and max limit the rotation around rotationAxis, which is the constraint X axis.
|
|
167
|
+
const { min, max } = this._boxConfigs[i];
|
|
168
|
+
const isLimitable = constraintType === 3 /* PhysicsConstraintType.HINGE */ || constraintType === 1 /* PhysicsConstraintType.BALL_AND_SOCKET */;
|
|
169
|
+
if (isLimitable && (min !== undefined || max !== undefined)) {
|
|
170
|
+
const plugin = this._scene.getPhysicsEngine().getPhysicsPlugin();
|
|
171
|
+
plugin.setAxisMode(constraint, 3 /* PhysicsConstraintAxis.ANGULAR_X */, 1 /* PhysicsConstraintAxisLimitMode.LIMITED */);
|
|
172
|
+
plugin.setAxisMinLimit(constraint, 3 /* PhysicsConstraintAxis.ANGULAR_X */, min ?? -Math.PI);
|
|
173
|
+
plugin.setAxisMaxLimit(constraint, 3 /* PhysicsConstraintAxis.ANGULAR_X */, max ?? Math.PI);
|
|
174
|
+
}
|
|
168
175
|
constraint.isEnabled = false;
|
|
169
176
|
this._constraints.push(constraint);
|
|
170
177
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ragdoll.js","sourceRoot":"","sources":["../../../../../dev/core/src/Physics/v2/ragdoll.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAEvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,IAAI,EAAS,MAAM,uBAAuB,CAAC;AAIpD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAGhE;;;GAGG;AACH,MAAM,OAAO,qBAAqB;CAyCjC;AAED;;;GAGG;AACH,MAAM,OAAO,OAAO;IA+BhB;;;;;OAKG;IACH,YAAY,QAAkB,EAAE,iBAAuC,EAAE,MAA+B;QAhChG,gBAAW,GAAiC,IAAI,KAAK,EAAyB,CAAC;QAC/E,iBAAY,GAA6B,IAAI,KAAK,EAAqB,CAAC;QACxE,WAAM,GAAgB,IAAI,KAAK,EAAQ,CAAC;QACxC,qBAAgB,GAAsB,IAAI,KAAK,EAAc,CAAC;QACtE,8CAA8C;QACtC,sBAAiB,GAAsB,IAAI,KAAK,EAAc,CAAC;QAC/D,eAAU,GAAa,EAAE,CAAC;QAC1B,gBAAW,GAAyB,IAAI,KAAK,EAAiB,CAAC;QAC/D,gBAAW,GAA4B,IAAI,KAAK,EAAoB,CAAC;QACrE,iBAAY,GAAY,KAAK,CAAC;QAC9B,kBAAa,GAAW,EAAE,CAAC;QAC3B,mBAAc,GAAW,CAAC,CAAC,CAAC;QAC5B,UAAK,GAAW,EAAE,CAAC;QACnB,iBAAY,GAAW,CAAC,CAAC;QACzB,0BAAqB,GAA8B,IAAI,CAAC;QAEhE;;WAEG;QACI,cAAS,GAAY,KAAK,CAAC;QAG1B,kBAAa,uCAAuC;QACpD,qBAAgB,GAAW,CAAC,EAAE,CAAC;QAC/B,qBAAgB,GAAW,EAAE,CAAC;QASlC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;QAC5C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,uFAAuF;QAC9G,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC,wHAAwH;QAC/I,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;QACnC,IAAI,CAAC,aAAa,sCAA8B,CAAC;QAEjD,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAED;;;OAGG;IACI,cAAc;QACjB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,KAAa;QAC7B,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAEO,gBAAgB;QACpB,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAE7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAEpF,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;gBAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3F,IAAI,WAAW,IAAI,SAAS,EAAE,CAAC;oBAC3B,OAAO;gBACX,CAAC;gBAED,qFAAqF;gBACrF,MAAM,4BAA4B,GAA0B;oBACxD,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;oBAC5B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK;oBAC5B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM;oBAC9B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;iBAC7B,CAAC;gBAEF,4BAA4B,CAAC,KAAK,GAAG,4BAA4B,CAAC,KAAK,IAAI,4BAA4B,CAAC,IAAI,CAAC;gBAC7G,4BAA4B,CAAC,KAAK,GAAG,4BAA4B,CAAC,KAAK,IAAI,4BAA4B,CAAC,IAAI,CAAC;gBAC7G,4BAA4B,CAAC,MAAM,GAAG,4BAA4B,CAAC,MAAM,IAAI,4BAA4B,CAAC,IAAI,CAAC;gBAC/G,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAE/E,yCAAyC;gBACzC,4BAA4B,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;gBAC1G,4BAA4B,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACnH,4BAA4B,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;gBACvG,4BAA4B,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;gBAEvG,gBAAgB;gBAChB,IAAI,SAAS,GAAG,CAAC,CAAC;gBAClB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,kBAAkB,KAAK,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBAC7G,IAAI,WAAW,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;wBACnC,MAAM,CAAC,GAAG,CAAC,8CAA8C,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;oBAClF,CAAC;oBACD,SAAS,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;gBACvC,CAAC;qBAAM,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC3C,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACpC,CAAC;gBACD,4BAA4B,CAAC,SAAS,GAAG,SAAS,CAAC;gBAEnD,eAAe;gBACf,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClG,MAAM,OAAO,GAAG,WAAW,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAClF,4BAA4B,CAAC,cAAc,GAAG,cAAc,CAAC;gBAE7D,SAAS,CAAC,QAAQ,GAAG,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;gBAE5G,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;gBACxE,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;gBACpG,MAAM,SAAS,GAAG,IAAI,gBAAgB,CAClC,SAAS,gCAET;oBACI,IAAI,EAAE,IAAI;oBACV,WAAW,EAAE,WAAW;oBACxB,QAAQ,EAAE,GAAG;oBACb,OAAO,EAAE,IAAI,OAAO,CAAC,4BAA4B,CAAC,KAAK,EAAE,4BAA4B,CAAC,MAAM,EAAE,4BAA4B,CAAC,KAAK,CAAC;iBACpI,EACD,IAAI,CAAC,MAAM,CACd,CAAC;gBACF,SAAS,CAAC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;gBACjD,SAAS,CAAC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;gBACtC,SAAS,CAAC,IAAI,CAAC,aAAa,oCAA4B,CAAC;gBACzD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACjC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;gBACpD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,qBAAqB,sBAAc,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBACpG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,qBAAqB,qBAAa,CAAC,CAAC;YAChF,CAAC;QACL,CAAC;IACL,CAAC;IAEO,WAAW;QACf,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,CAAC;QAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,+BAA+B;YAC/B,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC3B,SAAS;YACb,CAAC;YAED,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;YAEjD,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;gBACxB,MAAM,CAAC,IAAI,CAAC,qEAAqE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxG,OAAO;YACX,CAAC;YAED,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAEpE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,kBAAkB,EAAE,CAAC;YACpE,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC/E,MAAM,2BAA2B,GAAG,OAAO,CAAC,oBAAoB,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;YAC/F,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACvD,MAAM,gBAAgB,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAExD,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC;YACvE,MAAM,UAAU,GAAG,IAAI,iBAAiB,CACpC,cAAc,EACd;gBACI,MAAM,EAAE,2BAA2B;gBACnC,MAAM,EAAE,gBAAgB;gBACxB,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,YAAa;gBACxC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,YAAa;gBACxC,SAAS,EAAE,KAAK;aACnB,EACD,IAAI,CAAC,MAAM,CACd,CAAC;YAEF,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC3F,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;IACL,CAAC;IAED,mDAAmD;IAC3C,mBAAmB;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,CAAC;QAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,WAAW;YACX,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YACpD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC;YACrD,OAAO,CAAC,yBAAyB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;YAE3E,eAAe;YACf,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,cAAe,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACtH,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;YACvE,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAErD,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;IACL,CAAC;IAEO,yBAAyB,CAAC,SAAiB;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,0BAA0B,sBAAc,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAChG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,kBAAmB,CAAC,CAAC;QAChG,SAAS,CAAC,kBAAmB,CAAC,SAAS,EAAE,CAAC;IAC9C,CAAC;IAEO,kBAAkB;QACtB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO;QACX,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAEpD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;YAClF,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAE3E,OAAO,CAAC,yBAAyB,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACxF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;oBAC3B,SAAS;gBACb,CAAC;gBACD,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;YACtC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC/B,CAAC;IACL,CAAC;IAEO,yBAAyB,CAAC,SAAiB;QAC/C,MAAM,KAAK,GACP,IAAI,CAAC,kBAAkB,CAAC,kBAAkB;YAC1C,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC3I,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,kBAAkB,CAAC;QAElF,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,uBAAe,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACjH,CAAC;IAED,gFAAgF;IACxE,eAAe;QACnB,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QACnD,IAAI,aAAa,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;YACnF,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClE,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC,EAAE,CAAC;YAC5B,2GAA2G;YAC3G,MAAM,CAAC,GAAG,CAAC,4FAA4F,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;YACxI,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,kBAAkB,CAAC,SAAiB;QACxC,IAAI,aAAa,GAA+B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,CAAC;QACnF,GAAG,CAAC;YACA,IAAI,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxE,MAAM;YACV,CAAC;YAED,aAAa,GAAG,aAAa,EAAE,SAAS,EAAE,CAAC;QAC/C,CAAC,QAAQ,aAAa,IAAI,IAAI,EAAE;QAEhC,OAAO,aAAa,CAAC;IACzB,CAAC;IAEO,KAAK;QACT,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,+DAA+D;QAC/D,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC1B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAAG,EAAE;YACvE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,+DAA+D;QAC/D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACtC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1C,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,mCAA2B,CAAC;QACtE,CAAC;IACL,CAAC;IAED;;OAEG;IACH,OAAO;QACH,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACvC,SAAS,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACvC,SAAS,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5B,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACzC,UAAU,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAE7B,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACxE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACtC,CAAC;IACL,CAAC;CACJ","sourcesContent":["import { type Skeleton } from \"../../Bones/skeleton\";\r\nimport { Vector3, Matrix, TmpVectors, Quaternion } from \"../../Maths/math.vector.pure\";\r\nimport { type Scene } from \"../../scene\";\r\nimport { PhysicsAggregate } from \"./physicsAggregate\";\r\nimport { PhysicsConstraint } from \"./physicsConstraint\";\r\nimport { type Mesh } from \"../../Meshes/mesh\";\r\nimport { Axis, Space } from \"../../Maths/math.axis\";\r\nimport { PhysicsShapeType, PhysicsConstraintType, PhysicsMotionType } from \"./IPhysicsEnginePlugin\";\r\nimport { type Nullable } from \"../../types\";\r\nimport { type Bone } from \"../../Bones/bone\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { TransformNode } from \"../../Meshes/transformNode.pure\";\r\nimport { type Observer } from \"../../Misc/observable\";\r\n\r\n/**\r\n * Ragdoll bone properties\r\n * @experimental\r\n */\r\nexport class RagdollBoneProperties {\r\n /**\r\n * Width of the box shape\r\n */\r\n width?: number;\r\n /**\r\n * depth of the box shape\r\n */\r\n depth?: number;\r\n /**\r\n * height of the box shape\r\n */\r\n height?: number;\r\n /**\r\n * size that will be used of width, depth and height of the shape box\r\n */\r\n size?: number;\r\n /**\r\n * Type of Physics Constraint used between bones\r\n */\r\n joint?: number | undefined | PhysicsConstraintType;\r\n /**\r\n * Main rotation axis used by the constraint, in local space\r\n */\r\n rotationAxis?: Vector3;\r\n /**\r\n * Minimum rotation angle value\r\n */\r\n min?: number;\r\n /**\r\n * Maximum rotation angle value\r\n */\r\n max?: number;\r\n /**\r\n * Offset along local axis\r\n */\r\n boxOffset?: number;\r\n /**\r\n * Axis that need an offset\r\n */\r\n boneOffsetAxis?: Vector3;\r\n}\r\n\r\n/**\r\n * Ragdoll for Physics V2\r\n * @experimental\r\n */\r\nexport class Ragdoll {\r\n private _skeleton: Skeleton;\r\n private _scene: Scene;\r\n private _rootTransformNode: Mesh | TransformNode;\r\n private _config: any;\r\n private _boxConfigs: Array<RagdollBoneProperties> = new Array<RagdollBoneProperties>();\r\n private _constraints: Array<PhysicsConstraint> = new Array<PhysicsConstraint>();\r\n private _bones: Array<Bone> = new Array<Bone>();\r\n private _initialRotation: Array<Quaternion> = new Array<Quaternion>();\r\n // without mesh transform, to figure out later\r\n private _initialRotation2: Array<Quaternion> = new Array<Quaternion>();\r\n private _boneNames: string[] = [];\r\n private _transforms: Array<TransformNode> = new Array<TransformNode>();\r\n private _aggregates: Array<PhysicsAggregate> = new Array<PhysicsAggregate>();\r\n private _ragdollMode: boolean = false;\r\n private _rootBoneName: string = \"\";\r\n private _rootBoneIndex: number = -1;\r\n private _mass: number = 10;\r\n private _restitution: number = 0;\r\n private _beforeRenderObserver: Nullable<Observer<Scene>> = null;\r\n\r\n /**\r\n * Pause synchronization between physics and bone position/orientation\r\n */\r\n public pauseSync: boolean = false;\r\n\r\n private _putBoxesInBoneCenter: boolean;\r\n private _defaultJoint: number = PhysicsConstraintType.HINGE;\r\n private _defaultJointMin: number = -90;\r\n private _defaultJointMax: number = 90;\r\n\r\n /**\r\n * Construct a new Ragdoll object. Once ready, it can be made dynamic by calling `Ragdoll` method\r\n * @param skeleton The skeleton containing bones to be physicalized\r\n * @param rootTransformNode The mesh or its transform used by the skeleton\r\n * @param config an array of `RagdollBoneProperties` corresponding to bones and their properties used to instanciate physics bodies\r\n */\r\n constructor(skeleton: Skeleton, rootTransformNode: Mesh | TransformNode, config: RagdollBoneProperties[]) {\r\n this._skeleton = skeleton;\r\n this._scene = skeleton.getScene();\r\n this._rootTransformNode = rootTransformNode;\r\n this._config = config; // initial, user defined box configs. May have several box configs jammed into 1 index.\r\n this._boxConfigs = []; // final box configs. Every element is a separate box config (this.config may have several configs jammed into 1 index).\r\n this._putBoxesInBoneCenter = false;\r\n this._defaultJoint = PhysicsConstraintType.HINGE;\r\n\r\n this._init();\r\n }\r\n\r\n /**\r\n * returns an array of created constraints\r\n * @returns array of created constraints\r\n */\r\n public getConstraints(): Array<PhysicsConstraint> {\r\n return this._constraints;\r\n }\r\n\r\n /**\r\n * Returns the aggregate corresponding to the ragdoll bone index\r\n * @param index ragdoll bone aggregate index\r\n * @returns the aggregate for the bone index for the root aggregate if index is invalid\r\n */\r\n public getAggregate(index: number): PhysicsAggregate {\r\n if (index < 0 || index >= this._aggregates.length) {\r\n return this._aggregates[this._rootBoneIndex];\r\n }\r\n return this._aggregates[index];\r\n }\r\n\r\n private _createColliders(): void {\r\n this._rootTransformNode.computeWorldMatrix();\r\n this._skeleton.computeAbsoluteMatrices(true);\r\n this._skeleton.prepare(true);\r\n\r\n const config = this._config;\r\n for (let i = 0; i < config.length; i++) {\r\n const boneNames = config[i].bone !== undefined ? [config[i].bone] : config[i].bones;\r\n\r\n for (let ii = 0; ii < boneNames.length; ii++) {\r\n const currentBone = this._skeleton.bones[this._skeleton.getBoneIndexByName(boneNames[ii])];\r\n if (currentBone == undefined) {\r\n return;\r\n }\r\n\r\n // First define the box dimensions, so we can then use them when calling CreateBox().\r\n const currentRagdollBoneProperties: RagdollBoneProperties = {\r\n width: this._config[i].width,\r\n depth: this._config[i].depth,\r\n height: this._config[i].height,\r\n size: this._config[i].size,\r\n };\r\n\r\n currentRagdollBoneProperties.width = currentRagdollBoneProperties.width ?? currentRagdollBoneProperties.size;\r\n currentRagdollBoneProperties.depth = currentRagdollBoneProperties.depth ?? currentRagdollBoneProperties.size;\r\n currentRagdollBoneProperties.height = currentRagdollBoneProperties.height ?? currentRagdollBoneProperties.size;\r\n const transform = new TransformNode(boneNames[ii] + \"_transform\", this._scene);\r\n\r\n // Define the rest of the box properties.\r\n currentRagdollBoneProperties.joint = config[i].joint !== undefined ? config[i].joint : this._defaultJoint;\r\n currentRagdollBoneProperties.rotationAxis = config[i].rotationAxis !== undefined ? config[i].rotationAxis : Axis.X;\r\n currentRagdollBoneProperties.min = config[i].min !== undefined ? config[i].min : this._defaultJointMin;\r\n currentRagdollBoneProperties.max = config[i].max !== undefined ? config[i].max : this._defaultJointMax;\r\n\r\n // Offset value.\r\n let boxOffset = 0;\r\n if ((config[i].putBoxInBoneCenter !== undefined && config[i].putBoxInBoneCenter) || this._putBoxesInBoneCenter) {\r\n if (currentBone.length === undefined) {\r\n Logger.Log(\"The length property is not defined for bone \" + currentBone.name);\r\n }\r\n boxOffset = currentBone.length / 2;\r\n } else if (config[i].boxOffset !== undefined) {\r\n boxOffset = config[i].boxOffset;\r\n }\r\n currentRagdollBoneProperties.boxOffset = boxOffset;\r\n\r\n // Offset axis.\r\n const boneOffsetAxis = config[i].boneOffsetAxis !== undefined ? config[i].boneOffsetAxis : Axis.Y;\r\n const boneDir = currentBone.getDirection(boneOffsetAxis, this._rootTransformNode);\r\n currentRagdollBoneProperties.boneOffsetAxis = boneOffsetAxis;\r\n\r\n transform.position = currentBone.getAbsolutePosition(this._rootTransformNode).add(boneDir.scale(boxOffset));\r\n\r\n const mass = config[i].mass !== undefined ? config[i].mass : this._mass;\r\n const restitution = config[i].restitution !== undefined ? config[i].restitution : this._restitution;\r\n const aggregate = new PhysicsAggregate(\r\n transform,\r\n PhysicsShapeType.BOX,\r\n {\r\n mass: mass,\r\n restitution: restitution,\r\n friction: 0.6,\r\n extents: new Vector3(currentRagdollBoneProperties.width, currentRagdollBoneProperties.height, currentRagdollBoneProperties.depth),\r\n },\r\n this._scene\r\n );\r\n aggregate.body.setCollisionCallbackEnabled(true);\r\n aggregate.body.disablePreStep = false;\r\n aggregate.body.setMotionType(PhysicsMotionType.ANIMATED);\r\n this._aggregates.push(aggregate);\r\n this._bones.push(currentBone);\r\n this._boneNames.push(currentBone.name);\r\n this._transforms.push(transform);\r\n this._boxConfigs.push(currentRagdollBoneProperties);\r\n this._initialRotation.push(currentBone.getRotationQuaternion(Space.WORLD, this._rootTransformNode));\r\n this._initialRotation2.push(currentBone.getRotationQuaternion(Space.WORLD));\r\n }\r\n }\r\n }\r\n\r\n private _initJoints(): void {\r\n this._rootTransformNode.computeWorldMatrix();\r\n for (let i = 0; i < this._bones.length; i++) {\r\n // The root bone has no joints.\r\n if (i == this._rootBoneIndex) {\r\n continue;\r\n }\r\n\r\n const nearestParent = this._findNearestParent(i);\r\n\r\n if (nearestParent == null) {\r\n Logger.Warn(\"Couldn't find a nearest parent bone in the configs for bone called \" + this._boneNames[i]);\r\n return;\r\n }\r\n\r\n const boneParentIndex = this._boneNames.indexOf(nearestParent.name);\r\n\r\n const wmat = this._transforms[boneParentIndex].computeWorldMatrix();\r\n const invertedWorldMat = Matrix.Invert(wmat);\r\n const boneAbsPos = this._bones[i].getAbsolutePosition(this._rootTransformNode);\r\n const distanceFromParentBoxToBone = Vector3.TransformCoordinates(boneAbsPos, invertedWorldMat);\r\n const boxAbsPos = this._transforms[i].position.clone();\r\n const myConnectedPivot = boneAbsPos.subtract(boxAbsPos);\r\n\r\n const constraintType = this._boxConfigs[i].joint ?? this._defaultJoint;\r\n const constraint = new PhysicsConstraint(\r\n constraintType,\r\n {\r\n pivotA: distanceFromParentBoxToBone,\r\n pivotB: myConnectedPivot,\r\n axisA: this._boxConfigs[i].rotationAxis!,\r\n axisB: this._boxConfigs[i].rotationAxis!,\r\n collision: false,\r\n },\r\n this._scene\r\n );\r\n\r\n this._aggregates[boneParentIndex].body.addConstraint(this._aggregates[i].body, constraint);\r\n constraint.isEnabled = false;\r\n this._constraints.push(constraint);\r\n }\r\n }\r\n\r\n // set physics body orientation/position from bones\r\n private _syncBonesToPhysics(): void {\r\n const rootMatrix = this._rootTransformNode.getWorldMatrix();\r\n for (let i = 0; i < this._bones.length; i++) {\r\n // position\r\n const transform = this._aggregates[i].transformNode;\r\n const rootPos = this._bones[i].getAbsolutePosition();\r\n Vector3.TransformCoordinatesToRef(rootPos, rootMatrix, transform.position);\r\n\r\n // added offset\r\n this._bones[i].getDirectionToRef(this._boxConfigs[i].boneOffsetAxis!, this._rootTransformNode, TmpVectors.Vector3[0]);\r\n TmpVectors.Vector3[0].scaleInPlace(this._boxConfigs[i].boxOffset ?? 0);\r\n transform.position.addInPlace(TmpVectors.Vector3[0]);\r\n\r\n this._setBoneOrientationToBody(i);\r\n }\r\n }\r\n\r\n private _setBoneOrientationToBody(boneIndex: number): void {\r\n const transform = this._aggregates[boneIndex].transformNode;\r\n const bone = this._bones[boneIndex];\r\n this._initialRotation[boneIndex].conjugateToRef(TmpVectors.Quaternion[0]);\r\n bone.getRotationQuaternionToRef(Space.WORLD, this._rootTransformNode, TmpVectors.Quaternion[1]);\r\n TmpVectors.Quaternion[1].multiplyToRef(TmpVectors.Quaternion[0], transform.rotationQuaternion!);\r\n transform.rotationQuaternion!.normalize();\r\n }\r\n\r\n private _syncBonesAndBoxes(): void {\r\n if (this.pauseSync) {\r\n return;\r\n }\r\n\r\n if (this._ragdollMode) {\r\n this._setBodyOrientationToBone(this._rootBoneIndex);\r\n\r\n const rootPos = this._aggregates[this._rootBoneIndex].body.transformNode.position;\r\n this._rootTransformNode.getWorldMatrix().invertToRef(TmpVectors.Matrix[0]);\r\n\r\n Vector3.TransformCoordinatesToRef(rootPos, TmpVectors.Matrix[0], TmpVectors.Vector3[0]);\r\n this._bones[this._rootBoneIndex].setAbsolutePosition(TmpVectors.Vector3[0]);\r\n\r\n for (let i = 0; i < this._bones.length; i++) {\r\n if (i == this._rootBoneIndex) {\r\n continue;\r\n }\r\n this._setBodyOrientationToBone(i);\r\n }\r\n } else {\r\n this._syncBonesToPhysics();\r\n }\r\n }\r\n\r\n private _setBodyOrientationToBone(boneIndex: number): void {\r\n const qmesh =\r\n this._rootTransformNode.rotationQuaternion ??\r\n Quaternion.FromEulerAngles(this._rootTransformNode.rotation.x, this._rootTransformNode.rotation.y, this._rootTransformNode.rotation.z);\r\n const qbind = this._initialRotation2[boneIndex];\r\n const qphys = this._aggregates[boneIndex].body?.transformNode?.rotationQuaternion;\r\n\r\n qmesh.multiplyToRef(qbind, TmpVectors.Quaternion[1]);\r\n qphys?.multiplyToRef(TmpVectors.Quaternion[1], TmpVectors.Quaternion[0]);\r\n\r\n this._bones[boneIndex].setRotationQuaternion(TmpVectors.Quaternion[0], Space.WORLD, this._rootTransformNode);\r\n }\r\n\r\n // Return true if root bone is valid/exists in this.bonesNames. false otherwise.\r\n private _defineRootBone(): boolean {\r\n const skeletonRoots = this._skeleton.getChildren();\r\n if (skeletonRoots.length != 1) {\r\n Logger.Log(\"Ragdoll creation failed: there can only be one root in the skeleton.\");\r\n return false;\r\n }\r\n\r\n this._rootBoneName = skeletonRoots[0].name;\r\n this._rootBoneIndex = this._boneNames.indexOf(this._rootBoneName);\r\n if (this._rootBoneIndex == -1) {\r\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands, @typescript-eslint/no-base-to-string\r\n Logger.Log(\"Ragdoll creation failed: the array boneNames doesn't have the root bone. The root bone is \" + this._skeleton.getChildren());\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private _findNearestParent(boneIndex: number): any {\r\n let nearestParent: Nullable<Bone> | undefined = this._bones[boneIndex].getParent();\r\n do {\r\n if (nearestParent != null && this._boneNames.includes(nearestParent.name)) {\r\n break;\r\n }\r\n\r\n nearestParent = nearestParent?.getParent();\r\n } while (nearestParent != null);\r\n\r\n return nearestParent;\r\n }\r\n\r\n private _init() {\r\n this._createColliders();\r\n\r\n // If this.defineRootBone() returns ... there is not root bone.\r\n if (!this._defineRootBone()) {\r\n return;\r\n }\r\n\r\n this._initJoints();\r\n this._beforeRenderObserver = this._scene.onBeforeRenderObservable.add(() => {\r\n this._syncBonesAndBoxes();\r\n });\r\n this._syncBonesToPhysics();\r\n }\r\n\r\n /**\r\n * Enable ragdoll mode. Create physics objects and make them dynamic.\r\n */\r\n public ragdoll(): void {\r\n this._ragdollMode = true;\r\n // detach bones with link transform to let physics have control\r\n for (const bone of this._skeleton.bones) {\r\n bone.linkTransformNode(null);\r\n }\r\n for (let i = 0; i < this._constraints.length; i++) {\r\n this._constraints[i].isEnabled = true;\r\n }\r\n for (let i = 0; i < this._aggregates.length; i++) {\r\n this._aggregates[i].body.setMotionType(PhysicsMotionType.DYNAMIC);\r\n }\r\n }\r\n\r\n /**\r\n * Dispose resources and remove physics objects\r\n */\r\n dispose(): void {\r\n for (const aggregate of this._aggregates) {\r\n aggregate.dispose();\r\n }\r\n this._aggregates.length = 0;\r\n for (const transform of this._transforms) {\r\n transform.dispose();\r\n }\r\n this._transforms.length = 0;\r\n for (const constraint of this._constraints) {\r\n constraint.dispose();\r\n }\r\n this._constraints.length = 0;\r\n\r\n if (this._beforeRenderObserver) {\r\n this._scene.onBeforeRenderObservable.remove(this._beforeRenderObserver);\r\n this._beforeRenderObserver = null;\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ragdoll.js","sourceRoot":"","sources":["../../../../../dev/core/src/Physics/v2/ragdoll.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Skeleton } from \"../../Bones/skeleton\";\r\nimport { Vector3, Matrix, TmpVectors, Quaternion } from \"../../Maths/math.vector.pure\";\r\nimport { type Scene } from \"../../scene\";\r\nimport { PhysicsAggregate } from \"./physicsAggregate\";\r\nimport { PhysicsConstraint } from \"./physicsConstraint\";\r\nimport { type Mesh } from \"../../Meshes/mesh\";\r\nimport { Axis, Space } from \"../../Maths/math.axis\";\r\nimport {\r\n PhysicsShapeType,\r\n PhysicsConstraintType,\r\n PhysicsMotionType,\r\n PhysicsConstraintAxis,\r\n PhysicsConstraintAxisLimitMode,\r\n type IPhysicsEnginePluginV2,\r\n} from \"./IPhysicsEnginePlugin\";\r\nimport { type Nullable } from \"../../types\";\r\nimport { type Bone } from \"../../Bones/bone\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { TransformNode } from \"../../Meshes/transformNode.pure\";\r\nimport { type Observer } from \"../../Misc/observable\";\r\n\r\n/**\r\n * Ragdoll bone properties\r\n * @experimental\r\n */\r\nexport class RagdollBoneProperties {\r\n /**\r\n * Width of the box shape\r\n */\r\n width?: number;\r\n /**\r\n * depth of the box shape\r\n */\r\n depth?: number;\r\n /**\r\n * height of the box shape\r\n */\r\n height?: number;\r\n /**\r\n * size that will be used of width, depth and height of the shape box\r\n */\r\n size?: number;\r\n /**\r\n * Type of Physics Constraint used between bones\r\n */\r\n joint?: number | undefined | PhysicsConstraintType;\r\n /**\r\n * Main rotation axis used by the constraint, in local space\r\n */\r\n rotationAxis?: Vector3;\r\n /**\r\n * Minimum rotation angle around `rotationAxis`, in radians. Used by hinge and ball and socket joints.\r\n */\r\n min?: number;\r\n /**\r\n * Maximum rotation angle around `rotationAxis`, in radians. Used by hinge and ball and socket joints.\r\n */\r\n max?: number;\r\n /**\r\n * Offset along local axis\r\n */\r\n boxOffset?: number;\r\n /**\r\n * Axis that need an offset\r\n */\r\n boneOffsetAxis?: Vector3;\r\n}\r\n\r\n/**\r\n * Ragdoll for Physics V2\r\n * @experimental\r\n */\r\nexport class Ragdoll {\r\n private _skeleton: Skeleton;\r\n private _scene: Scene;\r\n private _rootTransformNode: Mesh | TransformNode;\r\n private _config: any;\r\n private _boxConfigs: Array<RagdollBoneProperties> = new Array<RagdollBoneProperties>();\r\n private _constraints: Array<PhysicsConstraint> = new Array<PhysicsConstraint>();\r\n private _bones: Array<Bone> = new Array<Bone>();\r\n private _initialRotation: Array<Quaternion> = new Array<Quaternion>();\r\n // without mesh transform, to figure out later\r\n private _initialRotation2: Array<Quaternion> = new Array<Quaternion>();\r\n private _boneNames: string[] = [];\r\n private _transforms: Array<TransformNode> = new Array<TransformNode>();\r\n private _aggregates: Array<PhysicsAggregate> = new Array<PhysicsAggregate>();\r\n private _ragdollMode: boolean = false;\r\n private _rootBoneName: string = \"\";\r\n private _rootBoneIndex: number = -1;\r\n private _mass: number = 10;\r\n private _restitution: number = 0;\r\n private _beforeRenderObserver: Nullable<Observer<Scene>> = null;\r\n\r\n /**\r\n * Pause synchronization between physics and bone position/orientation\r\n */\r\n public pauseSync: boolean = false;\r\n\r\n private _putBoxesInBoneCenter: boolean;\r\n private _defaultJoint: number = PhysicsConstraintType.HINGE;\r\n\r\n /**\r\n * Construct a new Ragdoll object. Once ready, it can be made dynamic by calling `Ragdoll` method\r\n * @param skeleton The skeleton containing bones to be physicalized\r\n * @param rootTransformNode The mesh or its transform used by the skeleton\r\n * @param config an array of `RagdollBoneProperties` corresponding to bones and their properties used to instanciate physics bodies\r\n */\r\n constructor(skeleton: Skeleton, rootTransformNode: Mesh | TransformNode, config: RagdollBoneProperties[]) {\r\n this._skeleton = skeleton;\r\n this._scene = skeleton.getScene();\r\n this._rootTransformNode = rootTransformNode;\r\n this._config = config; // initial, user defined box configs. May have several box configs jammed into 1 index.\r\n this._boxConfigs = []; // final box configs. Every element is a separate box config (this.config may have several configs jammed into 1 index).\r\n this._putBoxesInBoneCenter = false;\r\n this._defaultJoint = PhysicsConstraintType.HINGE;\r\n\r\n this._init();\r\n }\r\n\r\n /**\r\n * returns an array of created constraints\r\n * @returns array of created constraints\r\n */\r\n public getConstraints(): Array<PhysicsConstraint> {\r\n return this._constraints;\r\n }\r\n\r\n /**\r\n * Returns the aggregate corresponding to the ragdoll bone index\r\n * @param index ragdoll bone aggregate index\r\n * @returns the aggregate for the bone index for the root aggregate if index is invalid\r\n */\r\n public getAggregate(index: number): PhysicsAggregate {\r\n if (index < 0 || index >= this._aggregates.length) {\r\n return this._aggregates[this._rootBoneIndex];\r\n }\r\n return this._aggregates[index];\r\n }\r\n\r\n private _createColliders(): void {\r\n this._rootTransformNode.computeWorldMatrix();\r\n this._skeleton.computeAbsoluteMatrices(true);\r\n this._skeleton.prepare(true);\r\n\r\n const config = this._config;\r\n for (let i = 0; i < config.length; i++) {\r\n const boneNames = config[i].bone !== undefined ? [config[i].bone] : config[i].bones;\r\n\r\n for (let ii = 0; ii < boneNames.length; ii++) {\r\n const currentBone = this._skeleton.bones[this._skeleton.getBoneIndexByName(boneNames[ii])];\r\n if (currentBone == undefined) {\r\n return;\r\n }\r\n\r\n // First define the box dimensions, so we can then use them when calling CreateBox().\r\n const currentRagdollBoneProperties: RagdollBoneProperties = {\r\n width: this._config[i].width,\r\n depth: this._config[i].depth,\r\n height: this._config[i].height,\r\n size: this._config[i].size,\r\n };\r\n\r\n currentRagdollBoneProperties.width = currentRagdollBoneProperties.width ?? currentRagdollBoneProperties.size;\r\n currentRagdollBoneProperties.depth = currentRagdollBoneProperties.depth ?? currentRagdollBoneProperties.size;\r\n currentRagdollBoneProperties.height = currentRagdollBoneProperties.height ?? currentRagdollBoneProperties.size;\r\n const transform = new TransformNode(boneNames[ii] + \"_transform\", this._scene);\r\n\r\n // Define the rest of the box properties.\r\n currentRagdollBoneProperties.joint = config[i].joint !== undefined ? config[i].joint : this._defaultJoint;\r\n currentRagdollBoneProperties.rotationAxis = config[i].rotationAxis !== undefined ? config[i].rotationAxis : Axis.X;\r\n currentRagdollBoneProperties.min = config[i].min;\r\n currentRagdollBoneProperties.max = config[i].max;\r\n\r\n // Offset value.\r\n let boxOffset = 0;\r\n if ((config[i].putBoxInBoneCenter !== undefined && config[i].putBoxInBoneCenter) || this._putBoxesInBoneCenter) {\r\n if (currentBone.length === undefined) {\r\n Logger.Log(\"The length property is not defined for bone \" + currentBone.name);\r\n }\r\n boxOffset = currentBone.length / 2;\r\n } else if (config[i].boxOffset !== undefined) {\r\n boxOffset = config[i].boxOffset;\r\n }\r\n currentRagdollBoneProperties.boxOffset = boxOffset;\r\n\r\n // Offset axis.\r\n const boneOffsetAxis = config[i].boneOffsetAxis !== undefined ? config[i].boneOffsetAxis : Axis.Y;\r\n const boneDir = currentBone.getDirection(boneOffsetAxis, this._rootTransformNode);\r\n currentRagdollBoneProperties.boneOffsetAxis = boneOffsetAxis;\r\n\r\n transform.position = currentBone.getAbsolutePosition(this._rootTransformNode).add(boneDir.scale(boxOffset));\r\n\r\n const mass = config[i].mass !== undefined ? config[i].mass : this._mass;\r\n const restitution = config[i].restitution !== undefined ? config[i].restitution : this._restitution;\r\n const aggregate = new PhysicsAggregate(\r\n transform,\r\n PhysicsShapeType.BOX,\r\n {\r\n mass: mass,\r\n restitution: restitution,\r\n friction: 0.6,\r\n extents: new Vector3(currentRagdollBoneProperties.width, currentRagdollBoneProperties.height, currentRagdollBoneProperties.depth),\r\n },\r\n this._scene\r\n );\r\n aggregate.body.setCollisionCallbackEnabled(true);\r\n aggregate.body.disablePreStep = false;\r\n aggregate.body.setMotionType(PhysicsMotionType.ANIMATED);\r\n this._aggregates.push(aggregate);\r\n this._bones.push(currentBone);\r\n this._boneNames.push(currentBone.name);\r\n this._transforms.push(transform);\r\n this._boxConfigs.push(currentRagdollBoneProperties);\r\n this._initialRotation.push(currentBone.getRotationQuaternion(Space.WORLD, this._rootTransformNode));\r\n this._initialRotation2.push(currentBone.getRotationQuaternion(Space.WORLD));\r\n }\r\n }\r\n }\r\n\r\n private _initJoints(): void {\r\n this._rootTransformNode.computeWorldMatrix();\r\n for (let i = 0; i < this._bones.length; i++) {\r\n // The root bone has no joints.\r\n if (i == this._rootBoneIndex) {\r\n continue;\r\n }\r\n\r\n const nearestParent = this._findNearestParent(i);\r\n\r\n if (nearestParent == null) {\r\n Logger.Warn(\"Couldn't find a nearest parent bone in the configs for bone called \" + this._boneNames[i]);\r\n return;\r\n }\r\n\r\n const boneParentIndex = this._boneNames.indexOf(nearestParent.name);\r\n\r\n const wmat = this._transforms[boneParentIndex].computeWorldMatrix();\r\n const invertedWorldMat = Matrix.Invert(wmat);\r\n const boneAbsPos = this._bones[i].getAbsolutePosition(this._rootTransformNode);\r\n const distanceFromParentBoxToBone = Vector3.TransformCoordinates(boneAbsPos, invertedWorldMat);\r\n const boxAbsPos = this._transforms[i].position.clone();\r\n const myConnectedPivot = boneAbsPos.subtract(boxAbsPos);\r\n\r\n const constraintType = this._boxConfigs[i].joint ?? this._defaultJoint;\r\n const constraint = new PhysicsConstraint(\r\n constraintType,\r\n {\r\n pivotA: distanceFromParentBoxToBone,\r\n pivotB: myConnectedPivot,\r\n axisA: this._boxConfigs[i].rotationAxis!,\r\n axisB: this._boxConfigs[i].rotationAxis!,\r\n collision: false,\r\n },\r\n this._scene\r\n );\r\n\r\n this._aggregates[boneParentIndex].body.addConstraint(this._aggregates[i].body, constraint);\r\n\r\n // min and max limit the rotation around rotationAxis, which is the constraint X axis.\r\n const { min, max } = this._boxConfigs[i];\r\n const isLimitable = constraintType === PhysicsConstraintType.HINGE || constraintType === PhysicsConstraintType.BALL_AND_SOCKET;\r\n if (isLimitable && (min !== undefined || max !== undefined)) {\r\n const plugin = this._scene.getPhysicsEngine()!.getPhysicsPlugin() as IPhysicsEnginePluginV2;\r\n plugin.setAxisMode(constraint, PhysicsConstraintAxis.ANGULAR_X, PhysicsConstraintAxisLimitMode.LIMITED);\r\n plugin.setAxisMinLimit(constraint, PhysicsConstraintAxis.ANGULAR_X, min ?? -Math.PI);\r\n plugin.setAxisMaxLimit(constraint, PhysicsConstraintAxis.ANGULAR_X, max ?? Math.PI);\r\n }\r\n constraint.isEnabled = false;\r\n this._constraints.push(constraint);\r\n }\r\n }\r\n\r\n // set physics body orientation/position from bones\r\n private _syncBonesToPhysics(): void {\r\n const rootMatrix = this._rootTransformNode.getWorldMatrix();\r\n for (let i = 0; i < this._bones.length; i++) {\r\n // position\r\n const transform = this._aggregates[i].transformNode;\r\n const rootPos = this._bones[i].getAbsolutePosition();\r\n Vector3.TransformCoordinatesToRef(rootPos, rootMatrix, transform.position);\r\n\r\n // added offset\r\n this._bones[i].getDirectionToRef(this._boxConfigs[i].boneOffsetAxis!, this._rootTransformNode, TmpVectors.Vector3[0]);\r\n TmpVectors.Vector3[0].scaleInPlace(this._boxConfigs[i].boxOffset ?? 0);\r\n transform.position.addInPlace(TmpVectors.Vector3[0]);\r\n\r\n this._setBoneOrientationToBody(i);\r\n }\r\n }\r\n\r\n private _setBoneOrientationToBody(boneIndex: number): void {\r\n const transform = this._aggregates[boneIndex].transformNode;\r\n const bone = this._bones[boneIndex];\r\n this._initialRotation[boneIndex].conjugateToRef(TmpVectors.Quaternion[0]);\r\n bone.getRotationQuaternionToRef(Space.WORLD, this._rootTransformNode, TmpVectors.Quaternion[1]);\r\n TmpVectors.Quaternion[1].multiplyToRef(TmpVectors.Quaternion[0], transform.rotationQuaternion!);\r\n transform.rotationQuaternion!.normalize();\r\n }\r\n\r\n private _syncBonesAndBoxes(): void {\r\n if (this.pauseSync) {\r\n return;\r\n }\r\n\r\n if (this._ragdollMode) {\r\n this._setBodyOrientationToBone(this._rootBoneIndex);\r\n\r\n const rootPos = this._aggregates[this._rootBoneIndex].body.transformNode.position;\r\n this._rootTransformNode.getWorldMatrix().invertToRef(TmpVectors.Matrix[0]);\r\n\r\n Vector3.TransformCoordinatesToRef(rootPos, TmpVectors.Matrix[0], TmpVectors.Vector3[0]);\r\n this._bones[this._rootBoneIndex].setAbsolutePosition(TmpVectors.Vector3[0]);\r\n\r\n for (let i = 0; i < this._bones.length; i++) {\r\n if (i == this._rootBoneIndex) {\r\n continue;\r\n }\r\n this._setBodyOrientationToBone(i);\r\n }\r\n } else {\r\n this._syncBonesToPhysics();\r\n }\r\n }\r\n\r\n private _setBodyOrientationToBone(boneIndex: number): void {\r\n const qmesh =\r\n this._rootTransformNode.rotationQuaternion ??\r\n Quaternion.FromEulerAngles(this._rootTransformNode.rotation.x, this._rootTransformNode.rotation.y, this._rootTransformNode.rotation.z);\r\n const qbind = this._initialRotation2[boneIndex];\r\n const qphys = this._aggregates[boneIndex].body?.transformNode?.rotationQuaternion;\r\n\r\n qmesh.multiplyToRef(qbind, TmpVectors.Quaternion[1]);\r\n qphys?.multiplyToRef(TmpVectors.Quaternion[1], TmpVectors.Quaternion[0]);\r\n\r\n this._bones[boneIndex].setRotationQuaternion(TmpVectors.Quaternion[0], Space.WORLD, this._rootTransformNode);\r\n }\r\n\r\n // Return true if root bone is valid/exists in this.bonesNames. false otherwise.\r\n private _defineRootBone(): boolean {\r\n const skeletonRoots = this._skeleton.getChildren();\r\n if (skeletonRoots.length != 1) {\r\n Logger.Log(\"Ragdoll creation failed: there can only be one root in the skeleton.\");\r\n return false;\r\n }\r\n\r\n this._rootBoneName = skeletonRoots[0].name;\r\n this._rootBoneIndex = this._boneNames.indexOf(this._rootBoneName);\r\n if (this._rootBoneIndex == -1) {\r\n // eslint-disable-next-line @typescript-eslint/restrict-plus-operands, @typescript-eslint/no-base-to-string\r\n Logger.Log(\"Ragdoll creation failed: the array boneNames doesn't have the root bone. The root bone is \" + this._skeleton.getChildren());\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private _findNearestParent(boneIndex: number): any {\r\n let nearestParent: Nullable<Bone> | undefined = this._bones[boneIndex].getParent();\r\n do {\r\n if (nearestParent != null && this._boneNames.includes(nearestParent.name)) {\r\n break;\r\n }\r\n\r\n nearestParent = nearestParent?.getParent();\r\n } while (nearestParent != null);\r\n\r\n return nearestParent;\r\n }\r\n\r\n private _init() {\r\n this._createColliders();\r\n\r\n // If this.defineRootBone() returns ... there is not root bone.\r\n if (!this._defineRootBone()) {\r\n return;\r\n }\r\n\r\n this._initJoints();\r\n this._beforeRenderObserver = this._scene.onBeforeRenderObservable.add(() => {\r\n this._syncBonesAndBoxes();\r\n });\r\n this._syncBonesToPhysics();\r\n }\r\n\r\n /**\r\n * Enable ragdoll mode. Create physics objects and make them dynamic.\r\n */\r\n public ragdoll(): void {\r\n this._ragdollMode = true;\r\n // detach bones with link transform to let physics have control\r\n for (const bone of this._skeleton.bones) {\r\n bone.linkTransformNode(null);\r\n }\r\n for (let i = 0; i < this._constraints.length; i++) {\r\n this._constraints[i].isEnabled = true;\r\n }\r\n for (let i = 0; i < this._aggregates.length; i++) {\r\n this._aggregates[i].body.setMotionType(PhysicsMotionType.DYNAMIC);\r\n }\r\n }\r\n\r\n /**\r\n * Dispose resources and remove physics objects\r\n */\r\n dispose(): void {\r\n for (const aggregate of this._aggregates) {\r\n aggregate.dispose();\r\n }\r\n this._aggregates.length = 0;\r\n for (const transform of this._transforms) {\r\n transform.dispose();\r\n }\r\n this._transforms.length = 0;\r\n for (const constraint of this._constraints) {\r\n constraint.dispose();\r\n }\r\n this._constraints.length = 0;\r\n\r\n if (this._beforeRenderObserver) {\r\n this._scene.onBeforeRenderObservable.remove(this._beforeRenderObserver);\r\n this._beforeRenderObserver = null;\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -418,6 +418,7 @@ export class LensRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
418
418
|
"darken",
|
|
419
419
|
"edge_blur",
|
|
420
420
|
"highlights",
|
|
421
|
+
"blur_lod",
|
|
421
422
|
"near",
|
|
422
423
|
"far",
|
|
423
424
|
], ["depthSampler", "grainSampler", "highlightsSampler"], ratio, null, Texture.TRILINEAR_SAMPLINGMODE, this._scene.getEngine(), false);
|
|
@@ -427,6 +428,12 @@ export class LensRenderingPipeline extends PostProcessRenderPipeline {
|
|
|
427
428
|
effect.setTexture("grainSampler", this._grainTexture);
|
|
428
429
|
effect.setTextureFromPostProcess("textureSampler", this._highlightsPostProcess);
|
|
429
430
|
effect.setTextureFromPostProcess("highlightsSampler", this._depthOfFieldPostProcess);
|
|
431
|
+
// Explicit LOD for the blur samples of textureSampler: this pass runs at a lower resolution than its
|
|
432
|
+
// source (textureSampler = highlights pass), so reproduce the minification an implicit lookup would
|
|
433
|
+
// have selected instead of forcing mip 0. Derived from the actual render-target sizes.
|
|
434
|
+
const sourceWidth = this._highlightsPostProcess.width;
|
|
435
|
+
const outputWidth = this._depthOfFieldPostProcess.width;
|
|
436
|
+
effect.setFloat("blur_lod", sourceWidth > 0 && outputWidth > 0 ? Math.max(0, Math.log2(sourceWidth / outputWidth)) : 0);
|
|
430
437
|
effect.setFloat("grain_amount", this._grainAmount);
|
|
431
438
|
effect.setBool("blur_noise", this._blurNoise);
|
|
432
439
|
effect.setFloat("screen_width", this._scene.getEngine().getRenderWidth());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lensRenderingPipeline.pure.js","sourceRoot":"","sources":["../../../../../../dev/core/src/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAK7D,OAAO,EAAE,OAAO,EAAE,MAAM,0CAA0C,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iEAAiE,CAAC;AAC5G,OAAO,EAAE,uBAAuB,EAAE,MAAM,+DAA+D,CAAC;AAExG,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,mCAAmC,EAAE,MAAM,qDAAqD,CAAC;AAC1G,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,OAAO,qBAAsB,SAAQ,yBAAyB;IAiDhE;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,YAAY,IAAY,EAAE,UAAe,EAAE,KAAY,EAAE,QAAgB,GAAG,EAAE,OAAkB;QAC5F,mCAAmC,CAAC,aAAa,CAAC,CAAC;QACnD,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;QA5EnC,wCAAwC;QACxC,sDAAsD;QACtD,iCAAiC;QACjC,oBAAoB;QACpB,+CAA+C;QAC/C,sEAAsE;QACtE,2CAA2C;QAE3C,8CAA8C;QAC9C,mCAAmC;QACnC,kBAAkB;QAElB;;;WAGG;QACI,kCAA6B,GAAW,+BAA+B,CAAC;QAC/E;;;WAGG;QACI,8BAAyB,GAAW,2BAA2B,CAAC;QACvE;;;WAGG;QACI,2BAAsB,GAAW,wBAAwB,CAAC;QA0VzD,4BAAuB,GAAG,KAAK,CAAC;QAtSpC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,yBAAyB;QACzB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,mBAAmB,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,4BAA4B;QAC5F,IAAI,UAAU,CAAC,aAAa,EAAE,CAAC;YAC3B,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;QAClD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC/B,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,oBAAoB,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;QAClG,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,oBAAoB,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrG,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3F,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;QAErF,iBAAiB;QACjB,IAAI,CAAC,qCAAqC,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,8BAA8B,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAE/C,kBAAkB;QAClB,IAAI,CAAC,SAAS,CACV,IAAI,uBAAuB,CACvB,KAAK,CAAC,SAAS,EAAE,EACjB,IAAI,CAAC,6BAA6B,EAClC,GAAG,EAAE;YACD,OAAO,IAAI,CAAC,+BAA+B,CAAC;QAChD,CAAC,EACD,IAAI,CACP,CACJ,CAAC;QACF,IAAI,CAAC,SAAS,CACV,IAAI,uBAAuB,CACvB,KAAK,CAAC,SAAS,EAAE,EACjB,IAAI,CAAC,yBAAyB,EAC9B,GAAG,EAAE;YACD,OAAO,IAAI,CAAC,sBAAsB,CAAC;QACvC,CAAC,EACD,IAAI,CACP,CACJ,CAAC;QACF,IAAI,CAAC,SAAS,CACV,IAAI,uBAAuB,CACvB,KAAK,CAAC,SAAS,EAAE,EACjB,IAAI,CAAC,sBAAsB,EAC3B,GAAG,EAAE;YACD,OAAO,IAAI,CAAC,wBAAwB,CAAC;QACzC,CAAC,EACD,IAAI,CACP,CACJ,CAAC;QAEF,IAAI,IAAI,CAAC,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;QAC9D,CAAC;QAED,SAAS;QACT,KAAK,CAAC,gCAAgC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,OAAO,EAAE,CAAC;YACV,KAAK,CAAC,gCAAgC,CAAC,6BAA6B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACxF,CAAC;IACL,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,uBAAuB,CAAC;IACnC,CAAC;IAED,aAAa;IAEb;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAW,QAAQ,CAAC,KAAa;QAC7B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,IAAW,WAAW,CAAC,KAAa;QAChC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED,IAAW,mBAAmB,CAAC,KAAa;QACxC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,IAAW,WAAW,CAAC,KAAa;QAChC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,cAAc,CAAC,KAAa;QACnC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,IAAW,aAAa,CAAC,KAAa;QAClC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,IAAW,gBAAgB,CAAC,KAAa;QACrC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,IAAW,SAAS,CAAC,KAAc;QAC/B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,uBAAuB,CAAC;IACxC,CAAC;IAED,IAAW,aAAa,CAAC,KAAc;QACnC,IAAI,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC/B,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAChC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,IAAW,cAAc,CAAC,KAAa;QACnC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED,IAAW,mBAAmB,CAAC,KAAa;QACxC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,oCAAoC;IACpC;;;OAGG;IACI,WAAW,CAAC,MAAc;QAC7B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;IAC5B,CAAC;IACD;;OAEG;IACI,eAAe;QAClB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACvB,CAAC;IACD;;;OAGG;IACI,cAAc,CAAC,MAAc;QAChC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;IAC/B,CAAC;IACD;;OAEG;IACI,YAAY;QACf,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD;;;OAGG;IACI,sBAAsB,CAAC,MAAc;QACxC,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC;IACvC,CAAC;IACD;;OAEG;IACI,0BAA0B;QAC7B,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;IAClC,CAAC;IACD;;;OAGG;IACI,iBAAiB,CAAC,MAAc;QACnC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;IAC9B,CAAC;IACD;;OAEG;IACI,qBAAqB;QACxB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IACzB,CAAC;IACD;;;OAGG;IACI,gBAAgB,CAAC,MAAc;QAClC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;IAC/B,CAAC;IACD;;OAEG;IACI,mBAAmB;QACtB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD;;;OAGG;IACI,WAAW,CAAC,MAAc;QAC7B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;IAC/B,CAAC;IACD;;;OAGG;IACI,mBAAmB,CAAC,MAAc;QACrC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;IAC7B,CAAC;IAGD;;OAEG;IACI,mBAAmB;QACtB,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;QAC/D,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;IACxC,CAAC;IACD;;OAEG;IACI,oBAAoB;QACvB,IAAI,CAAC,uBAAuB,GAAG,KAAK,CAAC;QACrC,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,CAAC;IAC/C,CAAC;IACD;;OAEG;IACI,eAAe;QAClB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IAC3B,CAAC;IACD;;OAEG;IACI,gBAAgB;QACnB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC5B,CAAC;IACD;;;OAGG;IACI,iBAAiB,CAAC,MAAc;QACnC,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC;IAClC,CAAC;IACD;;;OAGG;IACI,sBAAsB,CAAC,MAAc;QACxC,IAAI,IAAI,CAAC,eAAe,KAAK,CAAC,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC;IACvC,CAAC;IACD;;OAEG;IACI,iBAAiB;QACpB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACa,OAAO,CAAC,qBAA8B,KAAK;QACvD,IAAI,CAAC,MAAM,CAAC,gCAAgC,CAAC,+BAA+B,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE9G,IAAI,CAAC,MAAM,CAAC,gCAAgC,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAElE,IAAI,CAAC,+BAAgC,GAAG,IAAI,CAAC;QAC7C,IAAI,CAAC,sBAAuB,GAAG,IAAI,CAAC;QACpC,IAAI,CAAC,wBAAyB,GAAG,IAAI,CAAC;QAE5C,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAE7B,IAAI,kBAAkB,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;QACvC,CAAC;IACL,CAAC;IAED,iCAAiC;IACzB,qCAAqC,CAAC,KAAa;QACvD,IAAI,CAAC,+BAA+B,GAAG,IAAI,WAAW,CAClD,yBAAyB,EACzB,qBAAqB,EACrB,CAAC,sBAAsB,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,EAAE,WAAW;QACxH,EAAE,EAAE,WAAW;QACf,KAAK,EACL,IAAI,EACJ,OAAO,CAAC,sBAAsB,EAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EACvB,KAAK,CACR,CAAC;QAEF,IAAI,CAAC,+BAA+B,CAAC,OAAO,GAAG,CAAC,MAAc,EAAE,EAAE;YAC9D,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACnE,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;YAC1E,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;YAC5E,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACtC,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC,CAAC;IACN,CAAC;IAED,uBAAuB;IACf,4BAA4B,CAAC,KAAa;QAC9C,IAAI,CAAC,sBAAsB,GAAG,IAAI,WAAW,CACzC,gBAAgB,EAChB,gBAAgB,EAChB,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,CAAC,EAAE,WAAW;QACnE,EAAE,EAAE,WAAW;QACf,KAAK,EACL,IAAI,EACJ,OAAO,CAAC,sBAAsB,EAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EACvB,KAAK,EACL,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAChD,CAAC;QAEF,IAAI,CAAC,sBAAsB,CAAC,6BAA6B,GAAG,IAAI,CAAC;QACjE,IAAI,CAAC,sBAAsB,CAAC,OAAO,GAAG,CAAC,MAAc,EAAE,EAAE;YACrD,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YAC9C,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACxD,MAAM,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,IAAI,CAAC,+BAA+B,CAAC,CAAC;YACzF,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;YAC1E,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;QAChF,CAAC,CAAC;IACN,CAAC;IAED,iCAAiC;IACzB,8BAA8B,CAAC,KAAa;QAChD,IAAI,CAAC,wBAAwB,GAAG,IAAI,WAAW,CAC3C,kBAAkB,EAClB,cAAc,EACd;YACI,cAAc;YACd,YAAY;YACZ,cAAc;YACd,eAAe;YACf,YAAY;YACZ,aAAa;YACb,iBAAiB;YACjB,UAAU;YACV,QAAQ;YACR,WAAW;YACX,YAAY;YACZ,MAAM;YACN,KAAK;SACR,EACD,CAAC,cAAc,EAAE,cAAc,EAAE,mBAAmB,CAAC,EACrD,KAAK,EACL,IAAI,EACJ,OAAO,CAAC,sBAAsB,EAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EACvB,KAAK,CACR,CAAC;QAEF,IAAI,CAAC,wBAAwB,CAAC,6BAA6B,GAAG,IAAI,CAAC;QACnE,IAAI,CAAC,wBAAwB,CAAC,OAAO,GAAG,CAAC,MAAc,EAAE,EAAE;YACvD,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACtD,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACtD,MAAM,CAAC,yBAAyB,CAAC,gBAAgB,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAChF,MAAM,CAAC,yBAAyB,CAAC,mBAAmB,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAErF,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACnD,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAE9C,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;YAC1E,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC;YAE5E,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAEhD,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC;YACxD,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAC1E,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAC/C,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAE3C,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAE7C,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,KAAK,CAAC,CAAC,CAAC,CAAC;YAE1D,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;gBAC3B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACvD,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC1D,CAAC;QACL,CAAC,CAAC;IACN,CAAC;IAED,0DAA0D;IAClD,mBAAmB;QACvB,MAAM,IAAI,GAAG,GAAG,CAAC;QAEjB,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;QAC7C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YACxD,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC;QACxB,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,6BAA6B,CAAC,CAAC;QACnI,OAAO,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAClC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACzC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;IACjC,CAAC;CACJ","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type Camera } from \"../../../Cameras/camera.pure\";\r\nimport { type Effect } from \"../../../Materials/effect.pure\";\r\nimport { Texture } from \"../../../Materials/Textures/texture.pure\";\r\nimport { type RenderTargetTexture } from \"../../../Materials/Textures/renderTargetTexture.pure\";\r\nimport { PostProcess } from \"../../../PostProcesses/postProcess.pure\";\r\nimport { PostProcessRenderPipeline } from \"../../../PostProcesses/RenderPipeline/postProcessRenderPipeline\";\r\nimport { PostProcessRenderEffect } from \"../../../PostProcesses/RenderPipeline/postProcessRenderEffect\";\r\nimport { type Scene } from \"../../../scene.pure\";\r\nimport { RawTexture } from \"../../../Materials/Textures/rawTexture\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\nimport { RegisterDepthRendererSceneComponent } from \"../../../Rendering/depthRendererSceneComponent.pure\";\r\nimport { DepthRenderer } from \"../../../Rendering/depthRenderer.pure\";\r\n\r\nimport { RandomRange } from \"../../../Maths/math.scalar.functions\";\r\n\r\n/**\r\n * BABYLON.JS Chromatic Aberration GLSL Shader\r\n * Author: Olivier Guyot\r\n * Separates very slightly R, G and B colors on the edges of the screen\r\n * Inspired by Francois Tarlier & Martins Upitis\r\n */\r\nexport class LensRenderingPipeline extends PostProcessRenderPipeline {\r\n // Lens effects can be of the following:\r\n // - chromatic aberration (slight shift of RGB colors)\r\n // - blur on the edge of the lens\r\n // - lens distortion\r\n // - depth-of-field blur & highlights enhancing\r\n // - depth-of-field 'bokeh' effect (shapes appearing in blurred areas)\r\n // - grain effect (noise or custom texture)\r\n\r\n // Two additional texture samplers are needed:\r\n // - depth map (for depth-of-field)\r\n // - grain texture\r\n\r\n /**\r\n * @ignore\r\n * The chromatic aberration PostProcess id in the pipeline\r\n */\r\n public LensChromaticAberrationEffect: string = \"LensChromaticAberrationEffect\";\r\n /**\r\n * @ignore\r\n * The highlights enhancing PostProcess id in the pipeline\r\n */\r\n public HighlightsEnhancingEffect: string = \"HighlightsEnhancingEffect\";\r\n /**\r\n * @ignore\r\n * The depth-of-field PostProcess id in the pipeline\r\n */\r\n public LensDepthOfFieldEffect: string = \"LensDepthOfFieldEffect\";\r\n\r\n private _scene: Scene;\r\n private _depthTexture: RenderTargetTexture;\r\n private _grainTexture: Texture;\r\n\r\n private _chromaticAberrationPostProcess: PostProcess;\r\n private _highlightsPostProcess: PostProcess;\r\n private _depthOfFieldPostProcess: PostProcess;\r\n\r\n private _edgeBlur: number;\r\n private _grainAmount: number;\r\n private _chromaticAberration: number;\r\n private _distortion: number;\r\n private _highlightsGain: number;\r\n private _highlightsThreshold: number;\r\n private _dofDistance: number;\r\n private _dofAperture: number;\r\n private _dofDarken: number;\r\n private _dofPentagon: boolean;\r\n private _blurNoise: boolean;\r\n\r\n /**\r\n * @constructor\r\n *\r\n * Effect parameters are as follow:\r\n * {\r\n * chromatic_aberration: number; // from 0 to x (1 for realism)\r\n * edge_blur: number; // from 0 to x (1 for realism)\r\n * distortion: number; // from 0 to x (1 for realism), note that this will effect the pointer position precision\r\n * grain_amount: number; // from 0 to 1\r\n * grain_texture: BABYLON.Texture; // texture to use for grain effect; if unset, use random B&W noise\r\n * dof_focus_distance: number; // depth-of-field: focus distance; unset to disable (disabled by default)\r\n * dof_aperture: number; // depth-of-field: focus blur bias (default: 1)\r\n * dof_darken: number; // depth-of-field: darken that which is out of focus (from 0 to 1, disabled by default)\r\n * dof_pentagon: boolean; // depth-of-field: makes a pentagon-like \"bokeh\" effect\r\n * dof_gain: number; // depth-of-field: highlights gain; unset to disable (disabled by default)\r\n * dof_threshold: number; // depth-of-field: highlights threshold (default: 1)\r\n * blur_noise: boolean; // add a little bit of noise to the blur (default: true)\r\n * }\r\n * Note: if an effect parameter is unset, effect is disabled\r\n *\r\n * @param name The rendering pipeline name\r\n * @param parameters - An object containing all parameters (see above)\r\n * @param scene The scene linked to this pipeline\r\n * @param ratio The size of the postprocesses (0.5 means that your postprocess will have a width = canvas.width 0.5 and a height = canvas.height 0.5)\r\n * @param cameras The array of cameras that the rendering pipeline will be attached to\r\n */\r\n constructor(name: string, parameters: any, scene: Scene, ratio: number = 1.0, cameras?: Camera[]) {\r\n RegisterDepthRendererSceneComponent(DepthRenderer);\r\n super(scene.getEngine(), name);\r\n\r\n this._scene = scene;\r\n\r\n // Fetch texture samplers\r\n this._depthTexture = scene.enableDepthRenderer().getDepthMap(); // Force depth renderer \"on\"\r\n if (parameters.grain_texture) {\r\n this._grainTexture = parameters.grain_texture;\r\n } else {\r\n this._createGrainTexture();\r\n }\r\n\r\n // save parameters\r\n this._edgeBlur = parameters.edge_blur ? parameters.edge_blur : 0;\r\n this._grainAmount = parameters.grain_amount ? parameters.grain_amount : 0;\r\n this._chromaticAberration = parameters.chromatic_aberration ? parameters.chromatic_aberration : 0;\r\n this._distortion = parameters.distortion ? parameters.distortion : 0;\r\n this._highlightsGain = parameters.dof_gain !== undefined ? parameters.dof_gain : -1;\r\n this._highlightsThreshold = parameters.dof_threshold ? parameters.dof_threshold : 1;\r\n this._dofDistance = parameters.dof_focus_distance !== undefined ? parameters.dof_focus_distance : -1;\r\n this._dofAperture = parameters.dof_aperture ? parameters.dof_aperture : 1;\r\n this._dofDarken = parameters.dof_darken ? parameters.dof_darken : 0;\r\n this._dofPentagon = parameters.dof_pentagon !== undefined ? parameters.dof_pentagon : true;\r\n this._blurNoise = parameters.blur_noise !== undefined ? parameters.blur_noise : true;\r\n\r\n // Create effects\r\n this._createChromaticAberrationPostProcess(ratio);\r\n this._createHighlightsPostProcess(ratio);\r\n this._createDepthOfFieldPostProcess(ratio / 4);\r\n\r\n // Set up pipeline\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n scene.getEngine(),\r\n this.LensChromaticAberrationEffect,\r\n () => {\r\n return this._chromaticAberrationPostProcess;\r\n },\r\n true\r\n )\r\n );\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n scene.getEngine(),\r\n this.HighlightsEnhancingEffect,\r\n () => {\r\n return this._highlightsPostProcess;\r\n },\r\n true\r\n )\r\n );\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n scene.getEngine(),\r\n this.LensDepthOfFieldEffect,\r\n () => {\r\n return this._depthOfFieldPostProcess;\r\n },\r\n true\r\n )\r\n );\r\n\r\n if (this._highlightsGain === -1) {\r\n this._disableEffect(this.HighlightsEnhancingEffect, null);\r\n }\r\n\r\n // Finish\r\n scene.postProcessRenderPipelineManager.addPipeline(this);\r\n if (cameras) {\r\n scene.postProcessRenderPipelineManager.attachCamerasToRenderPipeline(name, cameras);\r\n }\r\n }\r\n\r\n /**\r\n * Get the class name\r\n * @returns \"LensRenderingPipeline\"\r\n */\r\n public override getClassName(): string {\r\n return \"LensRenderingPipeline\";\r\n }\r\n\r\n // Properties\r\n\r\n /**\r\n * Gets associated scene\r\n */\r\n public get scene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Gets or sets the edge blur\r\n */\r\n public get edgeBlur(): number {\r\n return this._edgeBlur;\r\n }\r\n\r\n public set edgeBlur(value: number) {\r\n this.setEdgeBlur(value);\r\n }\r\n\r\n /**\r\n * Gets or sets the grain amount\r\n */\r\n public get grainAmount(): number {\r\n return this._grainAmount;\r\n }\r\n\r\n public set grainAmount(value: number) {\r\n this.setGrainAmount(value);\r\n }\r\n\r\n /**\r\n * Gets or sets the chromatic aberration amount\r\n */\r\n public get chromaticAberration(): number {\r\n return this._chromaticAberration;\r\n }\r\n\r\n public set chromaticAberration(value: number) {\r\n this.setChromaticAberration(value);\r\n }\r\n\r\n /**\r\n * Gets or sets the depth of field aperture\r\n */\r\n public get dofAperture(): number {\r\n return this._dofAperture;\r\n }\r\n\r\n public set dofAperture(value: number) {\r\n this.setAperture(value);\r\n }\r\n\r\n /**\r\n * Gets or sets the edge distortion\r\n */\r\n public get edgeDistortion(): number {\r\n return this._distortion;\r\n }\r\n\r\n public set edgeDistortion(value: number) {\r\n this.setEdgeDistortion(value);\r\n }\r\n\r\n /**\r\n * Gets or sets the depth of field distortion\r\n */\r\n public get dofDistortion(): number {\r\n return this._dofDistance;\r\n }\r\n\r\n public set dofDistortion(value: number) {\r\n this.setFocusDistance(value);\r\n }\r\n\r\n /**\r\n * Gets or sets the darken out of focus amount\r\n */\r\n public get darkenOutOfFocus(): number {\r\n return this._dofDarken;\r\n }\r\n\r\n public set darkenOutOfFocus(value: number) {\r\n this.setDarkenOutOfFocus(value);\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if blur noise is enabled\r\n */\r\n public get blurNoise(): boolean {\r\n return this._blurNoise;\r\n }\r\n\r\n public set blurNoise(value: boolean) {\r\n this._blurNoise = value;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if pentagon bokeh is enabled\r\n */\r\n public get pentagonBokeh(): boolean {\r\n return this._pentagonBokehIsEnabled;\r\n }\r\n\r\n public set pentagonBokeh(value: boolean) {\r\n if (value) {\r\n this.enablePentagonBokeh();\r\n } else {\r\n this.disablePentagonBokeh();\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets the highlight grain amount\r\n */\r\n public get highlightsGain(): number {\r\n return this._highlightsGain;\r\n }\r\n\r\n public set highlightsGain(value: number) {\r\n this.setHighlightsGain(value);\r\n }\r\n\r\n /**\r\n * Gets or sets the highlight threshold\r\n */\r\n public get highlightsThreshold(): number {\r\n return this._highlightsThreshold;\r\n }\r\n\r\n public set highlightsThreshold(value: number) {\r\n this.setHighlightsThreshold(value);\r\n }\r\n\r\n // public methods (self explanatory)\r\n /**\r\n * Sets the amount of blur at the edges\r\n * @param amount blur amount\r\n */\r\n public setEdgeBlur(amount: number) {\r\n this._edgeBlur = amount;\r\n }\r\n /**\r\n * Sets edge blur to 0\r\n */\r\n public disableEdgeBlur() {\r\n this._edgeBlur = 0;\r\n }\r\n /**\r\n * Sets the amount of grain\r\n * @param amount Amount of grain\r\n */\r\n public setGrainAmount(amount: number) {\r\n this._grainAmount = amount;\r\n }\r\n /**\r\n * Set grain amount to 0\r\n */\r\n public disableGrain() {\r\n this._grainAmount = 0;\r\n }\r\n /**\r\n * Sets the chromatic aberration amount\r\n * @param amount amount of chromatic aberration\r\n */\r\n public setChromaticAberration(amount: number) {\r\n this._chromaticAberration = amount;\r\n }\r\n /**\r\n * Sets chromatic aberration amount to 0\r\n */\r\n public disableChromaticAberration() {\r\n this._chromaticAberration = 0;\r\n }\r\n /**\r\n * Sets the EdgeDistortion amount\r\n * @param amount amount of EdgeDistortion\r\n */\r\n public setEdgeDistortion(amount: number) {\r\n this._distortion = amount;\r\n }\r\n /**\r\n * Sets edge distortion to 0\r\n */\r\n public disableEdgeDistortion() {\r\n this._distortion = 0;\r\n }\r\n /**\r\n * Sets the FocusDistance amount\r\n * @param amount amount of FocusDistance\r\n */\r\n public setFocusDistance(amount: number) {\r\n this._dofDistance = amount;\r\n }\r\n /**\r\n * Disables depth of field\r\n */\r\n public disableDepthOfField() {\r\n this._dofDistance = -1;\r\n }\r\n /**\r\n * Sets the Aperture amount\r\n * @param amount amount of Aperture\r\n */\r\n public setAperture(amount: number) {\r\n this._dofAperture = amount;\r\n }\r\n /**\r\n * Sets the DarkenOutOfFocus amount\r\n * @param amount amount of DarkenOutOfFocus\r\n */\r\n public setDarkenOutOfFocus(amount: number) {\r\n this._dofDarken = amount;\r\n }\r\n\r\n private _pentagonBokehIsEnabled = false;\r\n /**\r\n * Creates a pentagon bokeh effect\r\n */\r\n public enablePentagonBokeh() {\r\n this._highlightsPostProcess.updateEffect(\"#define PENTAGON\\n\");\r\n this._pentagonBokehIsEnabled = true;\r\n }\r\n /**\r\n * Disables the pentagon bokeh effect\r\n */\r\n public disablePentagonBokeh() {\r\n this._pentagonBokehIsEnabled = false;\r\n this._highlightsPostProcess.updateEffect();\r\n }\r\n /**\r\n * Enables noise blur\r\n */\r\n public enableNoiseBlur() {\r\n this._blurNoise = true;\r\n }\r\n /**\r\n * Disables noise blur\r\n */\r\n public disableNoiseBlur() {\r\n this._blurNoise = false;\r\n }\r\n /**\r\n * Sets the HighlightsGain amount\r\n * @param amount amount of HighlightsGain\r\n */\r\n public setHighlightsGain(amount: number) {\r\n this._highlightsGain = amount;\r\n }\r\n /**\r\n * Sets the HighlightsThreshold amount\r\n * @param amount amount of HighlightsThreshold\r\n */\r\n public setHighlightsThreshold(amount: number) {\r\n if (this._highlightsGain === -1) {\r\n this._highlightsGain = 1.0;\r\n }\r\n this._highlightsThreshold = amount;\r\n }\r\n /**\r\n * Disables highlights\r\n */\r\n public disableHighlights() {\r\n this._highlightsGain = -1;\r\n }\r\n\r\n /**\r\n * Removes the internal pipeline assets and detaches the pipeline from the scene cameras\r\n * @param disableDepthRender If the scene's depth rendering should be disabled (default: false)\r\n */\r\n public override dispose(disableDepthRender: boolean = false): void {\r\n this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._scene.cameras);\r\n\r\n this._scene.postProcessRenderPipelineManager.removePipeline(this._name);\r\n\r\n (<any>this._chromaticAberrationPostProcess) = null;\r\n (<any>this._highlightsPostProcess) = null;\r\n (<any>this._depthOfFieldPostProcess) = null;\r\n\r\n this._grainTexture.dispose();\r\n\r\n if (disableDepthRender) {\r\n this._scene.disableDepthRenderer();\r\n }\r\n }\r\n\r\n // colors shifting and distortion\r\n private _createChromaticAberrationPostProcess(ratio: number): void {\r\n this._chromaticAberrationPostProcess = new PostProcess(\r\n \"LensChromaticAberration\",\r\n \"chromaticAberration\",\r\n [\"chromatic_aberration\", \"screen_width\", \"screen_height\", \"direction\", \"radialIntensity\", \"centerPosition\"], // uniforms\r\n [], // samplers\r\n ratio,\r\n null,\r\n Texture.TRILINEAR_SAMPLINGMODE,\r\n this._scene.getEngine(),\r\n false\r\n );\r\n\r\n this._chromaticAberrationPostProcess.onApply = (effect: Effect) => {\r\n effect.setFloat(\"chromatic_aberration\", this._chromaticAberration);\r\n effect.setFloat(\"screen_width\", this._scene.getEngine().getRenderWidth());\r\n effect.setFloat(\"screen_height\", this._scene.getEngine().getRenderHeight());\r\n effect.setFloat(\"radialIntensity\", 1);\r\n effect.setFloat2(\"direction\", 17, 17);\r\n effect.setFloat2(\"centerPosition\", 0.5, 0.5);\r\n };\r\n }\r\n\r\n // highlights enhancing\r\n private _createHighlightsPostProcess(ratio: number): void {\r\n this._highlightsPostProcess = new PostProcess(\r\n \"LensHighlights\",\r\n \"lensHighlights\",\r\n [\"gain\", \"threshold\", \"screen_width\", \"screen_height\"], // uniforms\r\n [], // samplers\r\n ratio,\r\n null,\r\n Texture.TRILINEAR_SAMPLINGMODE,\r\n this._scene.getEngine(),\r\n false,\r\n this._dofPentagon ? \"#define PENTAGON\\n\" : \"\"\r\n );\r\n\r\n this._highlightsPostProcess.externalTextureSamplerBinding = true;\r\n this._highlightsPostProcess.onApply = (effect: Effect) => {\r\n effect.setFloat(\"gain\", this._highlightsGain);\r\n effect.setFloat(\"threshold\", this._highlightsThreshold);\r\n effect.setTextureFromPostProcess(\"textureSampler\", this._chromaticAberrationPostProcess);\r\n effect.setFloat(\"screen_width\", this._scene.getEngine().getRenderWidth());\r\n effect.setFloat(\"screen_height\", this._scene.getEngine().getRenderHeight());\r\n };\r\n }\r\n\r\n // colors shifting and distortion\r\n private _createDepthOfFieldPostProcess(ratio: number): void {\r\n this._depthOfFieldPostProcess = new PostProcess(\r\n \"LensDepthOfField\",\r\n \"depthOfField\",\r\n [\r\n \"grain_amount\",\r\n \"blur_noise\",\r\n \"screen_width\",\r\n \"screen_height\",\r\n \"distortion\",\r\n \"dof_enabled\",\r\n \"screen_distance\",\r\n \"aperture\",\r\n \"darken\",\r\n \"edge_blur\",\r\n \"highlights\",\r\n \"near\",\r\n \"far\",\r\n ],\r\n [\"depthSampler\", \"grainSampler\", \"highlightsSampler\"],\r\n ratio,\r\n null,\r\n Texture.TRILINEAR_SAMPLINGMODE,\r\n this._scene.getEngine(),\r\n false\r\n );\r\n\r\n this._depthOfFieldPostProcess.externalTextureSamplerBinding = true;\r\n this._depthOfFieldPostProcess.onApply = (effect: Effect) => {\r\n effect.setTexture(\"depthSampler\", this._depthTexture);\r\n effect.setTexture(\"grainSampler\", this._grainTexture);\r\n effect.setTextureFromPostProcess(\"textureSampler\", this._highlightsPostProcess);\r\n effect.setTextureFromPostProcess(\"highlightsSampler\", this._depthOfFieldPostProcess);\r\n\r\n effect.setFloat(\"grain_amount\", this._grainAmount);\r\n effect.setBool(\"blur_noise\", this._blurNoise);\r\n\r\n effect.setFloat(\"screen_width\", this._scene.getEngine().getRenderWidth());\r\n effect.setFloat(\"screen_height\", this._scene.getEngine().getRenderHeight());\r\n\r\n effect.setFloat(\"distortion\", this._distortion);\r\n\r\n effect.setBool(\"dof_enabled\", this._dofDistance !== -1);\r\n effect.setFloat(\"screen_distance\", 1.0 / (0.1 - 1.0 / this._dofDistance));\r\n effect.setFloat(\"aperture\", this._dofAperture);\r\n effect.setFloat(\"darken\", this._dofDarken);\r\n\r\n effect.setFloat(\"edge_blur\", this._edgeBlur);\r\n\r\n effect.setBool(\"highlights\", this._highlightsGain !== -1);\r\n\r\n if (this._scene.activeCamera) {\r\n effect.setFloat(\"near\", this._scene.activeCamera.minZ);\r\n effect.setFloat(\"far\", this._scene.activeCamera.maxZ);\r\n }\r\n };\r\n }\r\n\r\n // creates a black and white random noise texture, 512x512\r\n private _createGrainTexture(): void {\r\n const size = 512;\r\n\r\n const data = new Uint8Array(size * size * 4);\r\n for (let index = 0; index < data.length;) {\r\n const value = Math.floor(RandomRange(0.42, 0.58) * 255);\r\n data[index++] = value;\r\n data[index++] = value;\r\n data[index++] = value;\r\n data[index++] = 255;\r\n }\r\n\r\n const texture = RawTexture.CreateRGBATexture(data, size, size, this._scene, false, false, Constants.TEXTURE_BILINEAR_SAMPLINGMODE);\r\n texture.name = \"LensNoiseTexture\";\r\n texture.wrapU = Texture.WRAP_ADDRESSMODE;\r\n texture.wrapV = Texture.WRAP_ADDRESSMODE;\r\n this._grainTexture = texture;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"lensRenderingPipeline.pure.js","sourceRoot":"","sources":["../../../../../../dev/core/src/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type Camera } from \"../../../Cameras/camera.pure\";\r\nimport { type Effect } from \"../../../Materials/effect.pure\";\r\nimport { Texture } from \"../../../Materials/Textures/texture.pure\";\r\nimport { type RenderTargetTexture } from \"../../../Materials/Textures/renderTargetTexture.pure\";\r\nimport { PostProcess } from \"../../../PostProcesses/postProcess.pure\";\r\nimport { PostProcessRenderPipeline } from \"../../../PostProcesses/RenderPipeline/postProcessRenderPipeline\";\r\nimport { PostProcessRenderEffect } from \"../../../PostProcesses/RenderPipeline/postProcessRenderEffect\";\r\nimport { type Scene } from \"../../../scene.pure\";\r\nimport { RawTexture } from \"../../../Materials/Textures/rawTexture\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\nimport { RegisterDepthRendererSceneComponent } from \"../../../Rendering/depthRendererSceneComponent.pure\";\r\nimport { DepthRenderer } from \"../../../Rendering/depthRenderer.pure\";\r\n\r\nimport { RandomRange } from \"../../../Maths/math.scalar.functions\";\r\n\r\n/**\r\n * BABYLON.JS Chromatic Aberration GLSL Shader\r\n * Author: Olivier Guyot\r\n * Separates very slightly R, G and B colors on the edges of the screen\r\n * Inspired by Francois Tarlier & Martins Upitis\r\n */\r\nexport class LensRenderingPipeline extends PostProcessRenderPipeline {\r\n // Lens effects can be of the following:\r\n // - chromatic aberration (slight shift of RGB colors)\r\n // - blur on the edge of the lens\r\n // - lens distortion\r\n // - depth-of-field blur & highlights enhancing\r\n // - depth-of-field 'bokeh' effect (shapes appearing in blurred areas)\r\n // - grain effect (noise or custom texture)\r\n\r\n // Two additional texture samplers are needed:\r\n // - depth map (for depth-of-field)\r\n // - grain texture\r\n\r\n /**\r\n * @ignore\r\n * The chromatic aberration PostProcess id in the pipeline\r\n */\r\n public LensChromaticAberrationEffect: string = \"LensChromaticAberrationEffect\";\r\n /**\r\n * @ignore\r\n * The highlights enhancing PostProcess id in the pipeline\r\n */\r\n public HighlightsEnhancingEffect: string = \"HighlightsEnhancingEffect\";\r\n /**\r\n * @ignore\r\n * The depth-of-field PostProcess id in the pipeline\r\n */\r\n public LensDepthOfFieldEffect: string = \"LensDepthOfFieldEffect\";\r\n\r\n private _scene: Scene;\r\n private _depthTexture: RenderTargetTexture;\r\n private _grainTexture: Texture;\r\n\r\n private _chromaticAberrationPostProcess: PostProcess;\r\n private _highlightsPostProcess: PostProcess;\r\n private _depthOfFieldPostProcess: PostProcess;\r\n\r\n private _edgeBlur: number;\r\n private _grainAmount: number;\r\n private _chromaticAberration: number;\r\n private _distortion: number;\r\n private _highlightsGain: number;\r\n private _highlightsThreshold: number;\r\n private _dofDistance: number;\r\n private _dofAperture: number;\r\n private _dofDarken: number;\r\n private _dofPentagon: boolean;\r\n private _blurNoise: boolean;\r\n\r\n /**\r\n * @constructor\r\n *\r\n * Effect parameters are as follow:\r\n * {\r\n * chromatic_aberration: number; // from 0 to x (1 for realism)\r\n * edge_blur: number; // from 0 to x (1 for realism)\r\n * distortion: number; // from 0 to x (1 for realism), note that this will effect the pointer position precision\r\n * grain_amount: number; // from 0 to 1\r\n * grain_texture: BABYLON.Texture; // texture to use for grain effect; if unset, use random B&W noise\r\n * dof_focus_distance: number; // depth-of-field: focus distance; unset to disable (disabled by default)\r\n * dof_aperture: number; // depth-of-field: focus blur bias (default: 1)\r\n * dof_darken: number; // depth-of-field: darken that which is out of focus (from 0 to 1, disabled by default)\r\n * dof_pentagon: boolean; // depth-of-field: makes a pentagon-like \"bokeh\" effect\r\n * dof_gain: number; // depth-of-field: highlights gain; unset to disable (disabled by default)\r\n * dof_threshold: number; // depth-of-field: highlights threshold (default: 1)\r\n * blur_noise: boolean; // add a little bit of noise to the blur (default: true)\r\n * }\r\n * Note: if an effect parameter is unset, effect is disabled\r\n *\r\n * @param name The rendering pipeline name\r\n * @param parameters - An object containing all parameters (see above)\r\n * @param scene The scene linked to this pipeline\r\n * @param ratio The size of the postprocesses (0.5 means that your postprocess will have a width = canvas.width 0.5 and a height = canvas.height 0.5)\r\n * @param cameras The array of cameras that the rendering pipeline will be attached to\r\n */\r\n constructor(name: string, parameters: any, scene: Scene, ratio: number = 1.0, cameras?: Camera[]) {\r\n RegisterDepthRendererSceneComponent(DepthRenderer);\r\n super(scene.getEngine(), name);\r\n\r\n this._scene = scene;\r\n\r\n // Fetch texture samplers\r\n this._depthTexture = scene.enableDepthRenderer().getDepthMap(); // Force depth renderer \"on\"\r\n if (parameters.grain_texture) {\r\n this._grainTexture = parameters.grain_texture;\r\n } else {\r\n this._createGrainTexture();\r\n }\r\n\r\n // save parameters\r\n this._edgeBlur = parameters.edge_blur ? parameters.edge_blur : 0;\r\n this._grainAmount = parameters.grain_amount ? parameters.grain_amount : 0;\r\n this._chromaticAberration = parameters.chromatic_aberration ? parameters.chromatic_aberration : 0;\r\n this._distortion = parameters.distortion ? parameters.distortion : 0;\r\n this._highlightsGain = parameters.dof_gain !== undefined ? parameters.dof_gain : -1;\r\n this._highlightsThreshold = parameters.dof_threshold ? parameters.dof_threshold : 1;\r\n this._dofDistance = parameters.dof_focus_distance !== undefined ? parameters.dof_focus_distance : -1;\r\n this._dofAperture = parameters.dof_aperture ? parameters.dof_aperture : 1;\r\n this._dofDarken = parameters.dof_darken ? parameters.dof_darken : 0;\r\n this._dofPentagon = parameters.dof_pentagon !== undefined ? parameters.dof_pentagon : true;\r\n this._blurNoise = parameters.blur_noise !== undefined ? parameters.blur_noise : true;\r\n\r\n // Create effects\r\n this._createChromaticAberrationPostProcess(ratio);\r\n this._createHighlightsPostProcess(ratio);\r\n this._createDepthOfFieldPostProcess(ratio / 4);\r\n\r\n // Set up pipeline\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n scene.getEngine(),\r\n this.LensChromaticAberrationEffect,\r\n () => {\r\n return this._chromaticAberrationPostProcess;\r\n },\r\n true\r\n )\r\n );\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n scene.getEngine(),\r\n this.HighlightsEnhancingEffect,\r\n () => {\r\n return this._highlightsPostProcess;\r\n },\r\n true\r\n )\r\n );\r\n this.addEffect(\r\n new PostProcessRenderEffect(\r\n scene.getEngine(),\r\n this.LensDepthOfFieldEffect,\r\n () => {\r\n return this._depthOfFieldPostProcess;\r\n },\r\n true\r\n )\r\n );\r\n\r\n if (this._highlightsGain === -1) {\r\n this._disableEffect(this.HighlightsEnhancingEffect, null);\r\n }\r\n\r\n // Finish\r\n scene.postProcessRenderPipelineManager.addPipeline(this);\r\n if (cameras) {\r\n scene.postProcessRenderPipelineManager.attachCamerasToRenderPipeline(name, cameras);\r\n }\r\n }\r\n\r\n /**\r\n * Get the class name\r\n * @returns \"LensRenderingPipeline\"\r\n */\r\n public override getClassName(): string {\r\n return \"LensRenderingPipeline\";\r\n }\r\n\r\n // Properties\r\n\r\n /**\r\n * Gets associated scene\r\n */\r\n public get scene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Gets or sets the edge blur\r\n */\r\n public get edgeBlur(): number {\r\n return this._edgeBlur;\r\n }\r\n\r\n public set edgeBlur(value: number) {\r\n this.setEdgeBlur(value);\r\n }\r\n\r\n /**\r\n * Gets or sets the grain amount\r\n */\r\n public get grainAmount(): number {\r\n return this._grainAmount;\r\n }\r\n\r\n public set grainAmount(value: number) {\r\n this.setGrainAmount(value);\r\n }\r\n\r\n /**\r\n * Gets or sets the chromatic aberration amount\r\n */\r\n public get chromaticAberration(): number {\r\n return this._chromaticAberration;\r\n }\r\n\r\n public set chromaticAberration(value: number) {\r\n this.setChromaticAberration(value);\r\n }\r\n\r\n /**\r\n * Gets or sets the depth of field aperture\r\n */\r\n public get dofAperture(): number {\r\n return this._dofAperture;\r\n }\r\n\r\n public set dofAperture(value: number) {\r\n this.setAperture(value);\r\n }\r\n\r\n /**\r\n * Gets or sets the edge distortion\r\n */\r\n public get edgeDistortion(): number {\r\n return this._distortion;\r\n }\r\n\r\n public set edgeDistortion(value: number) {\r\n this.setEdgeDistortion(value);\r\n }\r\n\r\n /**\r\n * Gets or sets the depth of field distortion\r\n */\r\n public get dofDistortion(): number {\r\n return this._dofDistance;\r\n }\r\n\r\n public set dofDistortion(value: number) {\r\n this.setFocusDistance(value);\r\n }\r\n\r\n /**\r\n * Gets or sets the darken out of focus amount\r\n */\r\n public get darkenOutOfFocus(): number {\r\n return this._dofDarken;\r\n }\r\n\r\n public set darkenOutOfFocus(value: number) {\r\n this.setDarkenOutOfFocus(value);\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if blur noise is enabled\r\n */\r\n public get blurNoise(): boolean {\r\n return this._blurNoise;\r\n }\r\n\r\n public set blurNoise(value: boolean) {\r\n this._blurNoise = value;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if pentagon bokeh is enabled\r\n */\r\n public get pentagonBokeh(): boolean {\r\n return this._pentagonBokehIsEnabled;\r\n }\r\n\r\n public set pentagonBokeh(value: boolean) {\r\n if (value) {\r\n this.enablePentagonBokeh();\r\n } else {\r\n this.disablePentagonBokeh();\r\n }\r\n }\r\n\r\n /**\r\n * Gets or sets the highlight grain amount\r\n */\r\n public get highlightsGain(): number {\r\n return this._highlightsGain;\r\n }\r\n\r\n public set highlightsGain(value: number) {\r\n this.setHighlightsGain(value);\r\n }\r\n\r\n /**\r\n * Gets or sets the highlight threshold\r\n */\r\n public get highlightsThreshold(): number {\r\n return this._highlightsThreshold;\r\n }\r\n\r\n public set highlightsThreshold(value: number) {\r\n this.setHighlightsThreshold(value);\r\n }\r\n\r\n // public methods (self explanatory)\r\n /**\r\n * Sets the amount of blur at the edges\r\n * @param amount blur amount\r\n */\r\n public setEdgeBlur(amount: number) {\r\n this._edgeBlur = amount;\r\n }\r\n /**\r\n * Sets edge blur to 0\r\n */\r\n public disableEdgeBlur() {\r\n this._edgeBlur = 0;\r\n }\r\n /**\r\n * Sets the amount of grain\r\n * @param amount Amount of grain\r\n */\r\n public setGrainAmount(amount: number) {\r\n this._grainAmount = amount;\r\n }\r\n /**\r\n * Set grain amount to 0\r\n */\r\n public disableGrain() {\r\n this._grainAmount = 0;\r\n }\r\n /**\r\n * Sets the chromatic aberration amount\r\n * @param amount amount of chromatic aberration\r\n */\r\n public setChromaticAberration(amount: number) {\r\n this._chromaticAberration = amount;\r\n }\r\n /**\r\n * Sets chromatic aberration amount to 0\r\n */\r\n public disableChromaticAberration() {\r\n this._chromaticAberration = 0;\r\n }\r\n /**\r\n * Sets the EdgeDistortion amount\r\n * @param amount amount of EdgeDistortion\r\n */\r\n public setEdgeDistortion(amount: number) {\r\n this._distortion = amount;\r\n }\r\n /**\r\n * Sets edge distortion to 0\r\n */\r\n public disableEdgeDistortion() {\r\n this._distortion = 0;\r\n }\r\n /**\r\n * Sets the FocusDistance amount\r\n * @param amount amount of FocusDistance\r\n */\r\n public setFocusDistance(amount: number) {\r\n this._dofDistance = amount;\r\n }\r\n /**\r\n * Disables depth of field\r\n */\r\n public disableDepthOfField() {\r\n this._dofDistance = -1;\r\n }\r\n /**\r\n * Sets the Aperture amount\r\n * @param amount amount of Aperture\r\n */\r\n public setAperture(amount: number) {\r\n this._dofAperture = amount;\r\n }\r\n /**\r\n * Sets the DarkenOutOfFocus amount\r\n * @param amount amount of DarkenOutOfFocus\r\n */\r\n public setDarkenOutOfFocus(amount: number) {\r\n this._dofDarken = amount;\r\n }\r\n\r\n private _pentagonBokehIsEnabled = false;\r\n /**\r\n * Creates a pentagon bokeh effect\r\n */\r\n public enablePentagonBokeh() {\r\n this._highlightsPostProcess.updateEffect(\"#define PENTAGON\\n\");\r\n this._pentagonBokehIsEnabled = true;\r\n }\r\n /**\r\n * Disables the pentagon bokeh effect\r\n */\r\n public disablePentagonBokeh() {\r\n this._pentagonBokehIsEnabled = false;\r\n this._highlightsPostProcess.updateEffect();\r\n }\r\n /**\r\n * Enables noise blur\r\n */\r\n public enableNoiseBlur() {\r\n this._blurNoise = true;\r\n }\r\n /**\r\n * Disables noise blur\r\n */\r\n public disableNoiseBlur() {\r\n this._blurNoise = false;\r\n }\r\n /**\r\n * Sets the HighlightsGain amount\r\n * @param amount amount of HighlightsGain\r\n */\r\n public setHighlightsGain(amount: number) {\r\n this._highlightsGain = amount;\r\n }\r\n /**\r\n * Sets the HighlightsThreshold amount\r\n * @param amount amount of HighlightsThreshold\r\n */\r\n public setHighlightsThreshold(amount: number) {\r\n if (this._highlightsGain === -1) {\r\n this._highlightsGain = 1.0;\r\n }\r\n this._highlightsThreshold = amount;\r\n }\r\n /**\r\n * Disables highlights\r\n */\r\n public disableHighlights() {\r\n this._highlightsGain = -1;\r\n }\r\n\r\n /**\r\n * Removes the internal pipeline assets and detaches the pipeline from the scene cameras\r\n * @param disableDepthRender If the scene's depth rendering should be disabled (default: false)\r\n */\r\n public override dispose(disableDepthRender: boolean = false): void {\r\n this._scene.postProcessRenderPipelineManager.detachCamerasFromRenderPipeline(this._name, this._scene.cameras);\r\n\r\n this._scene.postProcessRenderPipelineManager.removePipeline(this._name);\r\n\r\n (<any>this._chromaticAberrationPostProcess) = null;\r\n (<any>this._highlightsPostProcess) = null;\r\n (<any>this._depthOfFieldPostProcess) = null;\r\n\r\n this._grainTexture.dispose();\r\n\r\n if (disableDepthRender) {\r\n this._scene.disableDepthRenderer();\r\n }\r\n }\r\n\r\n // colors shifting and distortion\r\n private _createChromaticAberrationPostProcess(ratio: number): void {\r\n this._chromaticAberrationPostProcess = new PostProcess(\r\n \"LensChromaticAberration\",\r\n \"chromaticAberration\",\r\n [\"chromatic_aberration\", \"screen_width\", \"screen_height\", \"direction\", \"radialIntensity\", \"centerPosition\"], // uniforms\r\n [], // samplers\r\n ratio,\r\n null,\r\n Texture.TRILINEAR_SAMPLINGMODE,\r\n this._scene.getEngine(),\r\n false\r\n );\r\n\r\n this._chromaticAberrationPostProcess.onApply = (effect: Effect) => {\r\n effect.setFloat(\"chromatic_aberration\", this._chromaticAberration);\r\n effect.setFloat(\"screen_width\", this._scene.getEngine().getRenderWidth());\r\n effect.setFloat(\"screen_height\", this._scene.getEngine().getRenderHeight());\r\n effect.setFloat(\"radialIntensity\", 1);\r\n effect.setFloat2(\"direction\", 17, 17);\r\n effect.setFloat2(\"centerPosition\", 0.5, 0.5);\r\n };\r\n }\r\n\r\n // highlights enhancing\r\n private _createHighlightsPostProcess(ratio: number): void {\r\n this._highlightsPostProcess = new PostProcess(\r\n \"LensHighlights\",\r\n \"lensHighlights\",\r\n [\"gain\", \"threshold\", \"screen_width\", \"screen_height\"], // uniforms\r\n [], // samplers\r\n ratio,\r\n null,\r\n Texture.TRILINEAR_SAMPLINGMODE,\r\n this._scene.getEngine(),\r\n false,\r\n this._dofPentagon ? \"#define PENTAGON\\n\" : \"\"\r\n );\r\n\r\n this._highlightsPostProcess.externalTextureSamplerBinding = true;\r\n this._highlightsPostProcess.onApply = (effect: Effect) => {\r\n effect.setFloat(\"gain\", this._highlightsGain);\r\n effect.setFloat(\"threshold\", this._highlightsThreshold);\r\n effect.setTextureFromPostProcess(\"textureSampler\", this._chromaticAberrationPostProcess);\r\n effect.setFloat(\"screen_width\", this._scene.getEngine().getRenderWidth());\r\n effect.setFloat(\"screen_height\", this._scene.getEngine().getRenderHeight());\r\n };\r\n }\r\n\r\n // colors shifting and distortion\r\n private _createDepthOfFieldPostProcess(ratio: number): void {\r\n this._depthOfFieldPostProcess = new PostProcess(\r\n \"LensDepthOfField\",\r\n \"depthOfField\",\r\n [\r\n \"grain_amount\",\r\n \"blur_noise\",\r\n \"screen_width\",\r\n \"screen_height\",\r\n \"distortion\",\r\n \"dof_enabled\",\r\n \"screen_distance\",\r\n \"aperture\",\r\n \"darken\",\r\n \"edge_blur\",\r\n \"highlights\",\r\n \"blur_lod\",\r\n \"near\",\r\n \"far\",\r\n ],\r\n [\"depthSampler\", \"grainSampler\", \"highlightsSampler\"],\r\n ratio,\r\n null,\r\n Texture.TRILINEAR_SAMPLINGMODE,\r\n this._scene.getEngine(),\r\n false\r\n );\r\n\r\n this._depthOfFieldPostProcess.externalTextureSamplerBinding = true;\r\n this._depthOfFieldPostProcess.onApply = (effect: Effect) => {\r\n effect.setTexture(\"depthSampler\", this._depthTexture);\r\n effect.setTexture(\"grainSampler\", this._grainTexture);\r\n effect.setTextureFromPostProcess(\"textureSampler\", this._highlightsPostProcess);\r\n effect.setTextureFromPostProcess(\"highlightsSampler\", this._depthOfFieldPostProcess);\r\n\r\n // Explicit LOD for the blur samples of textureSampler: this pass runs at a lower resolution than its\r\n // source (textureSampler = highlights pass), so reproduce the minification an implicit lookup would\r\n // have selected instead of forcing mip 0. Derived from the actual render-target sizes.\r\n const sourceWidth = this._highlightsPostProcess.width;\r\n const outputWidth = this._depthOfFieldPostProcess.width;\r\n effect.setFloat(\"blur_lod\", sourceWidth > 0 && outputWidth > 0 ? Math.max(0, Math.log2(sourceWidth / outputWidth)) : 0);\r\n\r\n effect.setFloat(\"grain_amount\", this._grainAmount);\r\n effect.setBool(\"blur_noise\", this._blurNoise);\r\n\r\n effect.setFloat(\"screen_width\", this._scene.getEngine().getRenderWidth());\r\n effect.setFloat(\"screen_height\", this._scene.getEngine().getRenderHeight());\r\n\r\n effect.setFloat(\"distortion\", this._distortion);\r\n\r\n effect.setBool(\"dof_enabled\", this._dofDistance !== -1);\r\n effect.setFloat(\"screen_distance\", 1.0 / (0.1 - 1.0 / this._dofDistance));\r\n effect.setFloat(\"aperture\", this._dofAperture);\r\n effect.setFloat(\"darken\", this._dofDarken);\r\n\r\n effect.setFloat(\"edge_blur\", this._edgeBlur);\r\n\r\n effect.setBool(\"highlights\", this._highlightsGain !== -1);\r\n\r\n if (this._scene.activeCamera) {\r\n effect.setFloat(\"near\", this._scene.activeCamera.minZ);\r\n effect.setFloat(\"far\", this._scene.activeCamera.maxZ);\r\n }\r\n };\r\n }\r\n\r\n // creates a black and white random noise texture, 512x512\r\n private _createGrainTexture(): void {\r\n const size = 512;\r\n\r\n const data = new Uint8Array(size * size * 4);\r\n for (let index = 0; index < data.length;) {\r\n const value = Math.floor(RandomRange(0.42, 0.58) * 255);\r\n data[index++] = value;\r\n data[index++] = value;\r\n data[index++] = value;\r\n data[index++] = 255;\r\n }\r\n\r\n const texture = RawTexture.CreateRGBATexture(data, size, size, this._scene, false, false, Constants.TEXTURE_BILINEAR_SAMPLINGMODE);\r\n texture.name = \"LensNoiseTexture\";\r\n texture.wrapU = Texture.WRAP_ADDRESSMODE;\r\n texture.wrapV = Texture.WRAP_ADDRESSMODE;\r\n this._grainTexture = texture;\r\n }\r\n}\r\n"]}
|