@babylonjs/core 5.26.1 → 5.27.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.js +2 -1
- package/Animations/animatable.js.map +1 -1
- package/Animations/runtimeAnimation.js +1 -1
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Audio/audioSceneComponent.js +2 -1
- package/Audio/audioSceneComponent.js.map +1 -1
- package/Audio/sound.js +70 -45
- package/Audio/sound.js.map +1 -1
- package/Audio/soundTrack.js +12 -6
- package/Audio/soundTrack.js.map +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js +2 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.js +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.js.map +1 -1
- package/Behaviors/Meshes/followBehavior.js +2 -1
- package/Behaviors/Meshes/followBehavior.js.map +1 -1
- package/Behaviors/Meshes/handConstraintBehavior.js +2 -2
- package/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
- package/Bones/bone.js +2 -1
- package/Bones/bone.js.map +1 -1
- package/Bones/skeleton.js +3 -2
- package/Bones/skeleton.js.map +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js +2 -2
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +5 -3
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraMouseInput.js +2 -2
- package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.js +2 -2
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/arcRotateCamera.js +2 -1
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/camera.js +6 -4
- package/Cameras/camera.js.map +1 -1
- package/Compute/computeEffect.js +8 -5
- package/Compute/computeEffect.js.map +1 -1
- package/Compute/computeShader.js +12 -11
- package/Compute/computeShader.js.map +1 -1
- package/Culling/Octrees/octreeSceneComponent.js +2 -1
- package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
- package/Culling/boundingBox.js +3 -2
- package/Culling/boundingBox.js.map +1 -1
- package/Culling/ray.js +2 -1
- package/Culling/ray.js.map +1 -1
- package/Debug/debugLayer.d.ts +3 -3
- package/Debug/debugLayer.js +2 -2
- package/Debug/debugLayer.js.map +1 -1
- package/Debug/directionalLightFrustumViewer.js +9 -7
- package/Debug/directionalLightFrustumViewer.js.map +1 -1
- package/Debug/rayHelper.js +2 -1
- package/Debug/rayHelper.js.map +1 -1
- package/Debug/skeletonViewer.js +29 -24
- package/Debug/skeletonViewer.js.map +1 -1
- package/DeviceInput/InputDevices/deviceSourceManager.js +5 -3
- package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
- package/DeviceInput/internalDeviceSourceManager.js +2 -1
- package/DeviceInput/internalDeviceSourceManager.js.map +1 -1
- package/DeviceInput/webDeviceInputSystem.js +12 -9
- package/DeviceInput/webDeviceInputSystem.js.map +1 -1
- package/Engines/Extensions/engine.rawTexture.js +4 -4
- package/Engines/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/Extensions/engine.readTexture.js +3 -2
- package/Engines/Extensions/engine.readTexture.js.map +1 -1
- package/Engines/Extensions/engine.views.js +2 -1
- package/Engines/Extensions/engine.views.js.map +1 -1
- package/Engines/Processors/shaderProcessor.js +11 -6
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js +1 -1
- package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +2 -1
- package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js +2 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.query.js +4 -2
- package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.rawTexture.js +4 -4
- package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js +2 -1
- package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js +3 -2
- package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.textureSampler.js +2 -1
- package/Engines/WebGPU/Extensions/engine.textureSampler.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.videoTexture.js +2 -1
- package/Engines/WebGPU/Extensions/engine.videoTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheBindGroups.js +7 -6
- package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +18 -14
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheSampler.js +4 -3
- package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
- package/Engines/WebGPU/webgpuClearQuad.js +3 -2
- package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
- package/Engines/WebGPU/webgpuComputePipelineContext.js +2 -1
- package/Engines/WebGPU/webgpuComputePipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuDepthCullingState.js +2 -2
- package/Engines/WebGPU/webgpuDepthCullingState.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.js +2 -1
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +4 -3
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuMaterialContext.js +5 -4
- package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +5 -3
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuPipelineContext.js +4 -2
- package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessingContext.js +4 -2
- package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +2 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuSnapshotRendering.js +3 -2
- package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
- package/Engines/WebGPU/webgpuStencilStateComposer.js +2 -1
- package/Engines/WebGPU/webgpuStencilStateComposer.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +40 -38
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/engine.js +5 -3
- package/Engines/engine.js.map +1 -1
- package/Engines/nativeEngine.js +7 -5
- package/Engines/nativeEngine.js.map +1 -1
- package/Engines/renderTargetWrapper.js +14 -9
- package/Engines/renderTargetWrapper.js.map +1 -1
- package/Engines/thinEngine.js +29 -20
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/webgpuEngine.js +87 -61
- package/Engines/webgpuEngine.js.map +1 -1
- package/Gamepads/gamepadManager.js +1 -1
- package/Gamepads/gamepadManager.js.map +1 -1
- package/Gizmos/axisDragGizmo.js +4 -2
- package/Gizmos/axisDragGizmo.js.map +1 -1
- package/Gizmos/axisScaleGizmo.js +6 -4
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/gizmo.js +21 -6
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.js +3 -2
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/planeDragGizmo.js +4 -2
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Gizmos/planeRotationGizmo.js +4 -2
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Helpers/videoDome.js +2 -1
- package/Helpers/videoDome.js.map +1 -1
- package/Inputs/scene.inputManager.js +1 -1
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Layers/effectLayer.js +5 -3
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/glowLayer.d.ts +5 -0
- package/Layers/glowLayer.js +25 -11
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +2 -1
- package/Layers/highlightLayer.js.map +1 -1
- package/LensFlares/lensFlareSystem.js +2 -1
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.js +25 -21
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +13 -8
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +5 -4
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Loading/sceneLoader.js +1 -1
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +2 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +2 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.js +10 -6
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/TBNBlock.js +3 -2
- package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +2 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +2 -1
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.js +2 -1
- package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js +26 -24
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/iridescenceBlock.js +3 -3
- package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +48 -44
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +2 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/refractionBlock.js +2 -1
- package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/sheenBlock.js +13 -13
- package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +27 -26
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/instancesBlock.js +2 -2
- package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +6 -6
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.js +3 -2
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
- package/Materials/Node/Blocks/colorMergerBlock.js +5 -4
- package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
- package/Materials/Node/Blocks/customBlock.js +4 -3
- package/Materials/Node/Blocks/customBlock.js.map +1 -1
- package/Materials/Node/Blocks/vectorMergerBlock.js +5 -4
- package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +7 -6
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.js +4 -3
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialDecorator.js +1 -1
- package/Materials/Node/nodeMaterialDecorator.js.map +1 -1
- package/Materials/PBR/pbrAnisotropicConfiguration.js +2 -0
- package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +25 -19
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.js +16 -6
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrIridescenceConfiguration.js +9 -4
- package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.js +10 -4
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +22 -0
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/Loaders/envTextureLoader.js +2 -2
- package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
- package/Materials/Textures/Packer/packer.js +14 -13
- package/Materials/Textures/Packer/packer.js.map +1 -1
- package/Materials/Textures/Procedurals/customProceduralTexture.d.ts +2 -1
- package/Materials/Textures/Procedurals/customProceduralTexture.js.map +1 -1
- package/Materials/Textures/Procedurals/noiseProceduralTexture.js +2 -1
- package/Materials/Textures/Procedurals/noiseProceduralTexture.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js +7 -4
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/cubeTexture.js +8 -4
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/hdrCubeTexture.js +4 -2
- package/Materials/Textures/hdrCubeTexture.js.map +1 -1
- package/Materials/Textures/internalTexture.js +4 -2
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/mirrorTexture.js +6 -3
- package/Materials/Textures/mirrorTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.js +6 -4
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/rawTexture.js +1 -1
- package/Materials/Textures/rawTexture.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +26 -15
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/Textures/texture.d.ts +7 -2
- package/Materials/Textures/texture.js +49 -41
- package/Materials/Textures/texture.js.map +1 -1
- package/Materials/Textures/thinRenderTargetTexture.js +4 -2
- package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
- package/Materials/Textures/videoTexture.js +3 -3
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/drawWrapper.js +4 -2
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/effect.js +15 -10
- package/Materials/effect.js.map +1 -1
- package/Materials/material.d.ts +14 -0
- package/Materials/material.detailMapConfiguration.js +2 -1
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/material.js +35 -3
- package/Materials/material.js.map +1 -1
- package/Materials/materialDefines.js +6 -5
- package/Materials/materialDefines.js.map +1 -1
- package/Materials/materialHelper.js +1 -1
- package/Materials/materialHelper.js.map +1 -1
- package/Materials/materialPluginManager.js +3 -2
- package/Materials/materialPluginManager.js.map +1 -1
- package/Materials/multiMaterial.js +2 -1
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/shaderMaterial.js +12 -9
- package/Materials/shaderMaterial.js.map +1 -1
- package/Materials/shadowDepthWrapper.js +13 -8
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.js +12 -10
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.js +1 -1
- package/Materials/uniformBuffer.js.map +1 -1
- package/Maths/math.polar.d.ts +2 -2
- package/Maths/math.polar.js +4 -4
- package/Maths/math.polar.js.map +1 -1
- package/Maths/math.vector.d.ts +69 -7
- package/Maths/math.vector.js +72 -9
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/groundBuilder.js +1 -1
- package/Meshes/Builders/groundBuilder.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +8 -0
- package/Meshes/abstractMesh.js +20 -5
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/csg.js +2 -1
- package/Meshes/csg.js.map +1 -1
- package/Meshes/instancedMesh.js +2 -1
- package/Meshes/instancedMesh.js.map +1 -1
- package/Meshes/mesh.js +25 -13
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.js +4 -3
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/subMesh.js +14 -8
- package/Meshes/subMesh.js.map +1 -1
- package/Meshes/thinInstanceMesh.js +18 -12
- package/Meshes/thinInstanceMesh.js.map +1 -1
- package/Meshes/transformNode.js +4 -3
- package/Meshes/transformNode.js.map +1 -1
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +2 -1
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +12 -8
- package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js +3 -2
- package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
- package/Misc/arrayTools.js +1 -1
- package/Misc/arrayTools.js.map +1 -1
- package/Misc/computePressure.js +9 -6
- package/Misc/computePressure.js.map +1 -1
- package/Misc/dataStorage.js +1 -1
- package/Misc/dataStorage.js.map +1 -1
- package/Misc/environmentTextureTools.js +2 -1
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/fileTools.js +31 -8
- package/Misc/fileTools.js.map +1 -1
- package/Misc/logger.js +2 -1
- package/Misc/logger.js.map +1 -1
- package/Misc/minMaxReducer.js +3 -2
- package/Misc/minMaxReducer.js.map +1 -1
- package/Misc/sceneRecorder.js +1 -1
- package/Misc/sceneRecorder.js.map +1 -1
- package/Misc/screenshotTools.js +2 -12
- package/Misc/screenshotTools.js.map +1 -1
- package/Misc/textureTools.js +3 -3
- package/Misc/textureTools.js.map +1 -1
- package/Misc/timer.js +5 -3
- package/Misc/timer.js.map +1 -1
- package/Misc/tools.d.ts +2 -8
- package/Misc/tools.js +6 -6
- package/Misc/tools.js.map +1 -1
- package/Misc/trajectoryClassifier.js +3 -3
- package/Misc/trajectoryClassifier.js.map +1 -1
- package/Particles/EmitterTypes/meshParticleEmitter.js +2 -1
- package/Particles/EmitterTypes/meshParticleEmitter.js.map +1 -1
- package/Particles/computeShaderParticleSystem.js +6 -3
- package/Particles/computeShaderParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.js +13 -8
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.js +22 -14
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/particleSystemComponent.js +2 -1
- package/Particles/particleSystemComponent.js.map +1 -1
- package/Particles/pointsCloudSystem.js +7 -4
- package/Particles/pointsCloudSystem.js.map +1 -1
- package/Particles/solidParticleSystem.js +2 -2
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/webgl2ParticleSystem.js +2 -1
- package/Particles/webgl2ParticleSystem.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +5 -4
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/blackAndWhitePostProcess.d.ts +1 -1
- package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
- package/PostProcesses/colorCorrectionPostProcess.d.ts +1 -1
- package/PostProcesses/colorCorrectionPostProcess.js +2 -1
- package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
- package/PostProcesses/postProcess.js +8 -5
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/postProcessManager.js +6 -4
- package/PostProcesses/postProcessManager.js.map +1 -1
- package/PostProcesses/refractionPostProcess.d.ts +2 -1
- package/PostProcesses/refractionPostProcess.js.map +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js +1 -1
- package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
- package/PostProcesses/tonemapPostProcess.d.ts +2 -1
- package/PostProcesses/tonemapPostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.d.ts +2 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.js +7 -4
- package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
- package/PostProcesses/vrDistortionCorrectionPostProcess.d.ts +2 -1
- package/PostProcesses/vrDistortionCorrectionPostProcess.js.map +1 -1
- package/PostProcesses/vrMultiviewToSingleviewPostProcess.d.ts +2 -1
- package/PostProcesses/vrMultiviewToSingleviewPostProcess.js +3 -2
- package/PostProcesses/vrMultiviewToSingleviewPostProcess.js.map +1 -1
- package/Probes/reflectionProbe.js +4 -2
- package/Probes/reflectionProbe.js.map +1 -1
- package/Rendering/boundingBoxRenderer.js +3 -2
- package/Rendering/boundingBoxRenderer.js.map +1 -1
- package/Rendering/depthPeelingRenderer.d.ts +12 -0
- package/Rendering/depthPeelingRenderer.js +30 -6
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/depthPeelingSceneComponent.js +4 -2
- package/Rendering/depthPeelingSceneComponent.js.map +1 -1
- package/Rendering/depthRenderer.js +10 -6
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/edgesRenderer.js +11 -8
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.js +2 -2
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Rendering/prePassRenderer.js +4 -2
- package/Rendering/prePassRenderer.js.map +1 -1
- package/Shaders/pbr.fragment.js +4 -1
- package/Shaders/pbr.fragment.js.map +1 -1
- package/Sprites/spriteManager.js +2 -1
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.js +2 -1
- package/Sprites/spriteRenderer.js.map +1 -1
- package/States/stencilStateComposer.js +4 -2
- package/States/stencilStateComposer.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.js +2 -1
- package/XR/features/WebXRAnchorSystem.js.map +1 -1
- package/XR/features/WebXRControllerMovement.js +7 -6
- package/XR/features/WebXRControllerMovement.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.js +6 -4
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRControllerPointerSelection.js +2 -1
- package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
- package/XR/features/WebXRHandTracking.js +26 -18
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRLayers.js +1 -1
- package/XR/features/WebXRLayers.js.map +1 -1
- package/XR/features/WebXRLightEstimation.js +6 -3
- package/XR/features/WebXRLightEstimation.js.map +1 -1
- package/XR/features/WebXRMeshDetector.js +2 -1
- package/XR/features/WebXRMeshDetector.js.map +1 -1
- package/XR/features/WebXRNearInteraction.js +7 -4
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/XR/features/WebXRPlaneDetector.js +2 -1
- package/XR/features/WebXRPlaneDetector.js.map +1 -1
- package/XR/native/nativeXRFrame.js +2 -1
- package/XR/native/nativeXRFrame.js.map +1 -1
- package/XR/webXRCamera.js +2 -1
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRExperienceHelper.js +7 -5
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRInputSource.js +2 -1
- package/XR/webXRInputSource.js.map +1 -1
- package/XR/webXRSessionManager.js +27 -14
- package/XR/webXRSessionManager.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +17 -11
- package/scene.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tonemapPostProcess.js","sourceRoot":"","sources":["../../../../../lts/core/generated/PostProcesses/tonemapPostProcess.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"tonemapPostProcess.js","sourceRoot":"","sources":["../../../../../lts/core/generated/PostProcesses/tonemapPostProcess.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,6BAA6B,CAAC;AAKrC,4CAA4C;AAC5C,MAAM,CAAN,IAAY,mBASX;AATD,WAAY,mBAAmB;IAC3B,YAAY;IACZ,+DAAS,CAAA;IACT,eAAe;IACf,qEAAY,CAAA;IACZ,iBAAiB;IACjB,yEAAc,CAAA;IACd,mBAAmB;IACnB,6EAAgB,CAAA;AACpB,CAAC,EATW,mBAAmB,KAAnB,mBAAmB,QAS9B;AAED;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,WAAW;IAS/C;;;;;;;;;;OAUG;IACH,YACI,IAAY,EACJ,SAA8B;IACtC,+CAA+C;IACxC,kBAA0B,EACjC,MAAwB,EACxB,eAAuB,SAAS,CAAC,6BAA6B,EAC9D,MAAe,EACf,aAAa,GAAG,SAAS,CAAC,wBAAwB,EAClD,QAAkB;QAElB,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QAThH,cAAS,GAAT,SAAS,CAAqB;QAE/B,uBAAkB,GAAlB,kBAAkB,CAAQ;QASjC,IAAI,OAAO,GAAG,UAAU,CAAC;QAEzB,IAAI,IAAI,CAAC,SAAS,KAAK,mBAAmB,CAAC,KAAK,EAAE;YAC9C,OAAO,IAAI,mBAAmB,CAAC;SAClC;aAAM,IAAI,IAAI,CAAC,SAAS,KAAK,mBAAmB,CAAC,QAAQ,EAAE;YACxD,OAAO,IAAI,sBAAsB,CAAC;SACrC;aAAM,IAAI,IAAI,CAAC,SAAS,KAAK,mBAAmB,CAAC,UAAU,EAAE;YAC1D,OAAO,IAAI,kCAAkC,CAAC;SACjD;aAAM,IAAI,IAAI,CAAC,SAAS,KAAK,mBAAmB,CAAC,YAAY,EAAE;YAC5D,OAAO,IAAI,0BAA0B,CAAC;SACzC;QAED,2CAA2C;QAC3C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAE3B,IAAI,CAAC,OAAO,GAAG,CAAC,MAAc,EAAE,EAAE;YAC9B,MAAM,CAAC,QAAQ,CAAC,qBAAqB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACpE,CAAC,CAAC;IACN,CAAC;IAlDD;;;OAGG;IACI,YAAY;QACf,OAAO,oBAAoB,CAAC;IAChC,CAAC;CA6CJ","sourcesContent":["import type { Camera } from \"../Cameras/camera\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { PostProcess } from \"./postProcess\";\r\nimport { Constants } from \"../Engines/constants\";\r\n\r\nimport \"../Shaders/tonemap.fragment\";\r\nimport type { Nullable } from \"../types\";\r\n\r\ndeclare type Engine = import(\"../Engines/engine\").Engine;\r\n\r\n/** Defines operator used for tonemapping */\r\nexport enum TonemappingOperator {\r\n /** Hable */\r\n Hable = 0,\r\n /** Reinhard */\r\n Reinhard = 1,\r\n /** HejiDawson */\r\n HejiDawson = 2,\r\n /** Photographic */\r\n Photographic = 3,\r\n}\r\n\r\n/**\r\n * Defines a post process to apply tone mapping\r\n */\r\nexport class TonemapPostProcess extends PostProcess {\r\n /**\r\n * Gets a string identifying the name of the class\r\n * @returns \"TonemapPostProcess\" string\r\n */\r\n public getClassName(): string {\r\n return \"TonemapPostProcess\";\r\n }\r\n\r\n /**\r\n * Creates a new TonemapPostProcess\r\n * @param name defines the name of the postprocess\r\n * @param _operator defines the operator to use\r\n * @param exposureAdjustment defines the required exposure adjustment\r\n * @param camera defines the camera to use (can be null)\r\n * @param samplingMode defines the required sampling mode (BABYLON.Texture.BILINEAR_SAMPLINGMODE by default)\r\n * @param engine defines the hosting engine (can be ignore if camera is set)\r\n * @param textureFormat defines the texture format to use (BABYLON.Engine.TEXTURETYPE_UNSIGNED_INT by default)\r\n * @param reusable If the post process can be reused on the same frame. (default: false)\r\n */\r\n constructor(\r\n name: string,\r\n private _operator: TonemappingOperator,\r\n /** Defines the required exposure adjustment */\r\n public exposureAdjustment: number,\r\n camera: Nullable<Camera>,\r\n samplingMode: number = Constants.TEXTURE_BILINEAR_SAMPLINGMODE,\r\n engine?: Engine,\r\n textureFormat = Constants.TEXTURETYPE_UNSIGNED_INT,\r\n reusable?: boolean\r\n ) {\r\n super(name, \"tonemap\", [\"_ExposureAdjustment\"], null, 1.0, camera, samplingMode, engine, reusable, null, textureFormat);\r\n\r\n let defines = \"#define \";\r\n\r\n if (this._operator === TonemappingOperator.Hable) {\r\n defines += \"HABLE_TONEMAPPING\";\r\n } else if (this._operator === TonemappingOperator.Reinhard) {\r\n defines += \"REINHARD_TONEMAPPING\";\r\n } else if (this._operator === TonemappingOperator.HejiDawson) {\r\n defines += \"OPTIMIZED_HEJIDAWSON_TONEMAPPING\";\r\n } else if (this._operator === TonemappingOperator.Photographic) {\r\n defines += \"PHOTOGRAPHIC_TONEMAPPING\";\r\n }\r\n\r\n //sadly a second call to create the effect.\r\n this.updateEffect(defines);\r\n\r\n this.onApply = (effect: Effect) => {\r\n effect.setFloat(\"_ExposureAdjustment\", this.exposureAdjustment);\r\n };\r\n }\r\n}\r\n"]}
|
|
@@ -9,6 +9,7 @@ import "../Shaders/depth.vertex";
|
|
|
9
9
|
import "../Shaders/volumetricLightScattering.fragment";
|
|
10
10
|
import "../Shaders/volumetricLightScatteringPass.vertex";
|
|
11
11
|
import "../Shaders/volumetricLightScatteringPass.fragment";
|
|
12
|
+
import type { Nullable } from "../types";
|
|
12
13
|
declare type Engine = import("../Engines/engine").Engine;
|
|
13
14
|
/**
|
|
14
15
|
* Inspired by https://developer.nvidia.com/gpugems/gpugems3/part-ii-light-and-shadows/chapter-13-volumetric-light-scattering-post-process
|
|
@@ -77,7 +78,7 @@ export declare class VolumetricLightScatteringPostProcess extends PostProcess {
|
|
|
77
78
|
* @param reusable If the post-process is reusable
|
|
78
79
|
* @param scene The constructor needs a scene reference to initialize internal components. If "camera" is null a "scene" must be provided
|
|
79
80
|
*/
|
|
80
|
-
constructor(name: string, ratio: any, camera: Camera
|
|
81
|
+
constructor(name: string, ratio: any, camera: Nullable<Camera>, mesh?: Mesh, samples?: number, samplingMode?: number, engine?: Engine, reusable?: boolean, scene?: Scene);
|
|
81
82
|
/**
|
|
82
83
|
* Returns the string "VolumetricLightScatteringPostProcess"
|
|
83
84
|
* @returns "VolumetricLightScatteringPostProcess"
|
|
@@ -36,6 +36,7 @@ export class VolumetricLightScatteringPostProcess extends PostProcess {
|
|
|
36
36
|
* @param scene The constructor needs a scene reference to initialize internal components. If "camera" is null a "scene" must be provided
|
|
37
37
|
*/
|
|
38
38
|
constructor(name, ratio, camera, mesh, samples = 100, samplingMode = Texture.BILINEAR_SAMPLINGMODE, engine, reusable, scene) {
|
|
39
|
+
var _a, _b;
|
|
39
40
|
super(name, "volumetricLightScattering", ["decay", "exposure", "weight", "meshPositionOnScreen", "density"], ["lightScatteringSampler"], ratio.postProcessRatio || ratio, camera, samplingMode, engine, reusable, "#define NUM_SAMPLES " + samples);
|
|
40
41
|
this._screenCoordinates = Vector2.Zero();
|
|
41
42
|
/**
|
|
@@ -70,11 +71,11 @@ export class VolumetricLightScatteringPostProcess extends PostProcess {
|
|
|
70
71
|
* Controls the density of each sample
|
|
71
72
|
*/
|
|
72
73
|
this.density = 0.926;
|
|
73
|
-
scene = camera
|
|
74
|
+
scene = (_b = (_a = camera === null || camera === void 0 ? void 0 : camera.getScene()) !== null && _a !== void 0 ? _a : scene) !== null && _b !== void 0 ? _b : this._scene; // parameter "scene" can be null.
|
|
74
75
|
engine = scene.getEngine();
|
|
75
76
|
this._viewPort = new Viewport(0, 0, 1, 1).toGlobal(engine.getRenderWidth(), engine.getRenderHeight());
|
|
76
77
|
// Configure mesh
|
|
77
|
-
this.mesh = mesh
|
|
78
|
+
this.mesh = mesh !== null && mesh !== void 0 ? mesh : VolumetricLightScatteringPostProcess.CreateDefaultMesh("VolumetricLightScatteringMesh", scene);
|
|
78
79
|
// Configure
|
|
79
80
|
this._createPass(scene, ratio.passRatio || ratio);
|
|
80
81
|
this.onActivate = (camera) => {
|
|
@@ -112,12 +113,13 @@ export class VolumetricLightScatteringPostProcess extends PostProcess {
|
|
|
112
113
|
return "VolumetricLightScatteringPostProcess";
|
|
113
114
|
}
|
|
114
115
|
_isReady(subMesh, useInstances) {
|
|
116
|
+
var _a;
|
|
115
117
|
const mesh = subMesh.getMesh();
|
|
116
118
|
// Render this.mesh as default
|
|
117
119
|
if (mesh === this.mesh && mesh.material) {
|
|
118
120
|
return mesh.material.isReady(mesh);
|
|
119
121
|
}
|
|
120
|
-
const renderingMaterial = mesh._internalAbstractMeshDataInfo._materialForRenderPass
|
|
122
|
+
const renderingMaterial = (_a = mesh._internalAbstractMeshDataInfo._materialForRenderPass) === null || _a === void 0 ? void 0 : _a[this._scene.getEngine().currentRenderPassId];
|
|
121
123
|
if (renderingMaterial) {
|
|
122
124
|
return renderingMaterial.isReadyForSubMesh(mesh, subMesh, useInstances);
|
|
123
125
|
}
|
|
@@ -225,6 +227,7 @@ export class VolumetricLightScatteringPostProcess extends PostProcess {
|
|
|
225
227
|
}
|
|
226
228
|
// Custom render function for submeshes
|
|
227
229
|
const renderSubMesh = (subMesh) => {
|
|
230
|
+
var _a;
|
|
228
231
|
const renderingMesh = subMesh.getRenderingMesh();
|
|
229
232
|
const effectiveMesh = subMesh.getEffectiveMesh();
|
|
230
233
|
if (this._meshExcluded(renderingMesh)) {
|
|
@@ -246,7 +249,7 @@ export class VolumetricLightScatteringPostProcess extends PostProcess {
|
|
|
246
249
|
}
|
|
247
250
|
const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);
|
|
248
251
|
if (this._isReady(subMesh, hardwareInstancedRendering)) {
|
|
249
|
-
const renderingMaterial = effectiveMesh._internalAbstractMeshDataInfo._materialForRenderPass
|
|
252
|
+
const renderingMaterial = (_a = effectiveMesh._internalAbstractMeshDataInfo._materialForRenderPass) === null || _a === void 0 ? void 0 : _a[engine.currentRenderPassId];
|
|
250
253
|
let drawWrapper = subMesh._getDrawWrapper();
|
|
251
254
|
if (renderingMesh === this.mesh && !drawWrapper) {
|
|
252
255
|
drawWrapper = material._getDrawWrapper();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"volumetricLightScatteringPostProcess.js","sourceRoot":"","sources":["../../../../../lts/core/generated/PostProcesses/volumetricLightScatteringPostProcess.ts"],"names":[],"mappings":"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","sourcesContent":["import { serializeAsVector3, serialize, serializeAsMeshReference } from \"../Misc/decorators\";\r\nimport type { SmartArray } from \"../Misc/smartArray\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { Vector2, Vector3, Matrix } from \"../Maths/math.vector\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { MaterialHelper } from \"../Materials/materialHelper\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport { PostProcess } from \"./postProcess\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Scene } from \"../scene\";\r\n\r\nimport { CreatePlane } from \"../Meshes/Builders/planeBuilder\";\r\n\r\nimport \"../Shaders/depth.vertex\";\r\nimport \"../Shaders/volumetricLightScattering.fragment\";\r\nimport \"../Shaders/volumetricLightScatteringPass.vertex\";\r\nimport \"../Shaders/volumetricLightScatteringPass.fragment\";\r\nimport { Color4, Color3 } from \"../Maths/math.color\";\r\nimport { Viewport } from \"../Maths/math.viewport\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\n\r\ndeclare type Engine = import(\"../Engines/engine\").Engine;\r\n\r\n/**\r\n * Inspired by https://developer.nvidia.com/gpugems/gpugems3/part-ii-light-and-shadows/chapter-13-volumetric-light-scattering-post-process\r\n */\r\nexport class VolumetricLightScatteringPostProcess extends PostProcess {\r\n // Members\r\n private _volumetricLightScatteringRTT: RenderTargetTexture;\r\n private _viewPort: Viewport;\r\n private _screenCoordinates: Vector2 = Vector2.Zero();\r\n\r\n /**\r\n * If not undefined, the mesh position is computed from the attached node position\r\n */\r\n public attachedNode: { position: Vector3 };\r\n\r\n /**\r\n * Custom position of the mesh. Used if \"useCustomMeshPosition\" is set to \"true\"\r\n */\r\n @serializeAsVector3()\r\n public customMeshPosition: Vector3 = Vector3.Zero();\r\n\r\n /**\r\n * Set if the post-process should use a custom position for the light source (true) or the internal mesh position (false)\r\n */\r\n @serialize()\r\n public useCustomMeshPosition: boolean = false;\r\n\r\n /**\r\n * If the post-process should inverse the light scattering direction\r\n */\r\n @serialize()\r\n public invert: boolean = true;\r\n\r\n /**\r\n * The internal mesh used by the post-process\r\n */\r\n @serializeAsMeshReference()\r\n public mesh: Mesh;\r\n\r\n /**\r\n * @internal\r\n * VolumetricLightScatteringPostProcess.useDiffuseColor is no longer used, use the mesh material directly instead\r\n */\r\n public get useDiffuseColor(): boolean {\r\n Logger.Warn(\"VolumetricLightScatteringPostProcess.useDiffuseColor is no longer used, use the mesh material directly instead\");\r\n return false;\r\n }\r\n\r\n public set useDiffuseColor(useDiffuseColor: boolean) {\r\n Logger.Warn(\"VolumetricLightScatteringPostProcess.useDiffuseColor is no longer used, use the mesh material directly instead\");\r\n }\r\n\r\n /**\r\n * Array containing the excluded meshes not rendered in the internal pass\r\n */\r\n @serialize()\r\n public excludedMeshes = new Array<AbstractMesh>();\r\n\r\n /**\r\n * Controls the overall intensity of the post-process\r\n */\r\n @serialize()\r\n public exposure = 0.3;\r\n\r\n /**\r\n * Dissipates each sample's contribution in range [0, 1]\r\n */\r\n @serialize()\r\n public decay = 0.96815;\r\n\r\n /**\r\n * Controls the overall intensity of each sample\r\n */\r\n @serialize()\r\n public weight = 0.58767;\r\n\r\n /**\r\n * Controls the density of each sample\r\n */\r\n @serialize()\r\n public density = 0.926;\r\n\r\n /**\r\n * @constructor\r\n * @param name The post-process name\r\n * @param ratio The size of the post-process and/or internal pass (0.5 means that your postprocess will have a width = canvas.width 0.5 and a height = canvas.height 0.5)\r\n * @param camera The camera that the post-process will be attached to\r\n * @param mesh The mesh used to create the light scattering\r\n * @param samples The post-process quality, default 100\r\n * @param samplingMode The post-process filtering mode\r\n * @param engine The babylon engine\r\n * @param reusable If the post-process is reusable\r\n * @param scene The constructor needs a scene reference to initialize internal components. If \"camera\" is null a \"scene\" must be provided\r\n */\r\n constructor(\r\n name: string,\r\n ratio: any,\r\n camera: Camera,\r\n mesh?: Mesh,\r\n samples: number = 100,\r\n samplingMode: number = Texture.BILINEAR_SAMPLINGMODE,\r\n engine?: Engine,\r\n reusable?: boolean,\r\n scene?: Scene\r\n ) {\r\n super(\r\n name,\r\n \"volumetricLightScattering\",\r\n [\"decay\", \"exposure\", \"weight\", \"meshPositionOnScreen\", \"density\"],\r\n [\"lightScatteringSampler\"],\r\n ratio.postProcessRatio || ratio,\r\n camera,\r\n samplingMode,\r\n engine,\r\n reusable,\r\n \"#define NUM_SAMPLES \" + samples\r\n );\r\n scene = camera?.getScene() ?? scene; // parameter \"scene\" can be null.\r\n\r\n engine = scene.getEngine();\r\n this._viewPort = new Viewport(0, 0, 1, 1).toGlobal(engine.getRenderWidth(), engine.getRenderHeight());\r\n\r\n // Configure mesh\r\n this.mesh = mesh ?? VolumetricLightScatteringPostProcess.CreateDefaultMesh(\"VolumetricLightScatteringMesh\", scene);\r\n\r\n // Configure\r\n this._createPass(scene, ratio.passRatio || ratio);\r\n\r\n this.onActivate = (camera: Camera) => {\r\n if (!this.isSupported) {\r\n this.dispose(camera);\r\n }\r\n\r\n this.onActivate = null;\r\n };\r\n\r\n this.onApplyObservable.add((effect: Effect) => {\r\n this._updateMeshScreenCoordinates(<Scene>scene);\r\n\r\n effect.setTexture(\"lightScatteringSampler\", this._volumetricLightScatteringRTT);\r\n effect.setFloat(\"exposure\", this.exposure);\r\n effect.setFloat(\"decay\", this.decay);\r\n effect.setFloat(\"weight\", this.weight);\r\n effect.setFloat(\"density\", this.density);\r\n effect.setVector2(\"meshPositionOnScreen\", this._screenCoordinates);\r\n });\r\n }\r\n\r\n /**\r\n * Returns the string \"VolumetricLightScatteringPostProcess\"\r\n * @returns \"VolumetricLightScatteringPostProcess\"\r\n */\r\n public getClassName(): string {\r\n return \"VolumetricLightScatteringPostProcess\";\r\n }\r\n\r\n private _isReady(subMesh: SubMesh, useInstances: boolean): boolean {\r\n const mesh = subMesh.getMesh();\r\n\r\n // Render this.mesh as default\r\n if (mesh === this.mesh && mesh.material) {\r\n return mesh.material.isReady(mesh);\r\n }\r\n\r\n const renderingMaterial = mesh._internalAbstractMeshDataInfo._materialForRenderPass?.[this._scene.getEngine().currentRenderPassId];\r\n\r\n if (renderingMaterial) {\r\n return renderingMaterial.isReadyForSubMesh(mesh, subMesh, useInstances);\r\n }\r\n\r\n const defines = [];\r\n const attribs = [VertexBuffer.PositionKind];\r\n const material: any = subMesh.getMaterial();\r\n\r\n // Alpha test\r\n if (material) {\r\n if (material.needAlphaTesting()) {\r\n defines.push(\"#define ALPHATEST\");\r\n }\r\n\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n attribs.push(VertexBuffer.UVKind);\r\n defines.push(\"#define UV1\");\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n defines.push(\"#define UV2\");\r\n }\r\n }\r\n\r\n // Bones\r\n if (mesh.useBones && mesh.computeBonesUsingShaders) {\r\n attribs.push(VertexBuffer.MatricesIndicesKind);\r\n attribs.push(VertexBuffer.MatricesWeightsKind);\r\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\r\n defines.push(\"#define BonesPerMesh \" + (mesh.skeleton ? mesh.skeleton.bones.length + 1 : 0));\r\n } else {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\r\n }\r\n\r\n // Instances\r\n if (useInstances) {\r\n defines.push(\"#define INSTANCES\");\r\n MaterialHelper.PushAttributesForInstances(attribs);\r\n if (subMesh.getRenderingMesh().hasThinInstances) {\r\n defines.push(\"#define THIN_INSTANCES\");\r\n }\r\n }\r\n\r\n // Get correct effect\r\n const drawWrapper = subMesh._getDrawWrapper(undefined, true)!;\r\n const cachedDefines = drawWrapper.defines;\r\n const join = defines.join(\"\\n\");\r\n if (cachedDefines !== join) {\r\n drawWrapper.setEffect(\r\n mesh\r\n .getScene()\r\n .getEngine()\r\n .createEffect(\r\n \"volumetricLightScatteringPass\",\r\n attribs,\r\n [\"world\", \"mBones\", \"viewProjection\", \"diffuseMatrix\"],\r\n [\"diffuseSampler\"],\r\n join,\r\n undefined,\r\n undefined,\r\n undefined,\r\n { maxSimultaneousMorphTargets: mesh.numBoneInfluencers }\r\n ),\r\n join\r\n );\r\n }\r\n\r\n return drawWrapper.effect!.isReady();\r\n }\r\n\r\n /**\r\n * Sets the new light position for light scattering effect\r\n * @param position The new custom light position\r\n */\r\n public setCustomMeshPosition(position: Vector3): void {\r\n this.customMeshPosition = position;\r\n }\r\n\r\n /**\r\n * Returns the light position for light scattering effect\r\n * @returns Vector3 The custom light position\r\n */\r\n public getCustomMeshPosition(): Vector3 {\r\n return this.customMeshPosition;\r\n }\r\n\r\n /**\r\n * Disposes the internal assets and detaches the post-process from the camera\r\n * @param camera\r\n */\r\n public dispose(camera: Camera): void {\r\n const rttIndex = camera.getScene().customRenderTargets.indexOf(this._volumetricLightScatteringRTT);\r\n if (rttIndex !== -1) {\r\n camera.getScene().customRenderTargets.splice(rttIndex, 1);\r\n }\r\n\r\n this._volumetricLightScatteringRTT.dispose();\r\n super.dispose(camera);\r\n }\r\n\r\n /**\r\n * Returns the render target texture used by the post-process\r\n * @returns the render target texture used by the post-process\r\n */\r\n public getPass(): RenderTargetTexture {\r\n return this._volumetricLightScatteringRTT;\r\n }\r\n\r\n // Private methods\r\n private _meshExcluded(mesh: AbstractMesh) {\r\n if (this.excludedMeshes.length > 0 && this.excludedMeshes.indexOf(mesh) !== -1) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _createPass(scene: Scene, ratio: number): void {\r\n const engine = scene.getEngine();\r\n\r\n this._volumetricLightScatteringRTT = new RenderTargetTexture(\r\n \"volumetricLightScatteringMap\",\r\n { width: engine.getRenderWidth() * ratio, height: engine.getRenderHeight() * ratio },\r\n scene,\r\n false,\r\n true,\r\n Constants.TEXTURETYPE_UNSIGNED_INT\r\n );\r\n this._volumetricLightScatteringRTT.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this._volumetricLightScatteringRTT.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n this._volumetricLightScatteringRTT.renderList = null;\r\n this._volumetricLightScatteringRTT.renderParticles = false;\r\n this._volumetricLightScatteringRTT.ignoreCameraViewport = true;\r\n\r\n const camera = this.getCamera();\r\n if (camera) {\r\n camera.customRenderTargets.push(this._volumetricLightScatteringRTT);\r\n } else {\r\n scene.customRenderTargets.push(this._volumetricLightScatteringRTT);\r\n }\r\n\r\n // Custom render function for submeshes\r\n const renderSubMesh = (subMesh: SubMesh): void => {\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n const effectiveMesh = subMesh.getEffectiveMesh();\r\n if (this._meshExcluded(renderingMesh)) {\r\n return;\r\n }\r\n\r\n effectiveMesh._internalAbstractMeshDataInfo._isActiveIntermediate = false;\r\n\r\n const material = subMesh.getMaterial();\r\n\r\n if (!material) {\r\n return;\r\n }\r\n\r\n const scene = renderingMesh.getScene();\r\n const engine = scene.getEngine();\r\n\r\n // Culling\r\n engine.setState(material.backFaceCulling, undefined, undefined, undefined, material.cullBackFaces);\r\n\r\n // Managing instances\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n\r\n if (batch.mustReturn) {\r\n return;\r\n }\r\n\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n\r\n if (this._isReady(subMesh, hardwareInstancedRendering)) {\r\n const renderingMaterial = effectiveMesh._internalAbstractMeshDataInfo._materialForRenderPass?.[engine.currentRenderPassId];\r\n\r\n let drawWrapper = subMesh._getDrawWrapper();\r\n if (renderingMesh === this.mesh && !drawWrapper) {\r\n drawWrapper = material._getDrawWrapper();\r\n }\r\n\r\n if (!drawWrapper) {\r\n return;\r\n }\r\n\r\n const effect = drawWrapper.effect!;\r\n\r\n engine.enableEffect(drawWrapper);\r\n if (!hardwareInstancedRendering) {\r\n renderingMesh._bind(subMesh, effect, material.fillMode);\r\n }\r\n\r\n if (renderingMesh === this.mesh) {\r\n material.bind(effectiveMesh.getWorldMatrix(), renderingMesh);\r\n } else if (renderingMaterial) {\r\n renderingMaterial.bindForSubMesh(effectiveMesh.getWorldMatrix(), effectiveMesh as Mesh, subMesh);\r\n } else {\r\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n\r\n // Alpha test\r\n if (material && material.needAlphaTesting()) {\r\n const alphaTexture = material.getAlphaTestTexture();\r\n\r\n effect.setTexture(\"diffuseSampler\", alphaTexture);\r\n\r\n if (alphaTexture) {\r\n effect.setMatrix(\"diffuseMatrix\", alphaTexture.getTextureMatrix());\r\n }\r\n }\r\n\r\n // Bones\r\n if (renderingMesh.useBones && renderingMesh.computeBonesUsingShaders && renderingMesh.skeleton) {\r\n effect.setMatrices(\"mBones\", renderingMesh.skeleton.getTransformMatrices(renderingMesh));\r\n }\r\n }\r\n\r\n if (hardwareInstancedRendering && renderingMesh.hasThinInstances) {\r\n effect.setMatrix(\"world\", effectiveMesh.getWorldMatrix());\r\n }\r\n\r\n // Draw\r\n renderingMesh._processRendering(effectiveMesh, subMesh, effect, Material.TriangleFillMode, batch, hardwareInstancedRendering, (isInstance, world) => {\r\n if (!isInstance) {\r\n effect.setMatrix(\"world\", world);\r\n }\r\n });\r\n }\r\n };\r\n\r\n // Render target texture callbacks\r\n let savedSceneClearColor: Color4;\r\n const sceneClearColor = new Color4(0.0, 0.0, 0.0, 1.0);\r\n\r\n this._volumetricLightScatteringRTT.onBeforeRenderObservable.add((): void => {\r\n savedSceneClearColor = scene.clearColor;\r\n scene.clearColor = sceneClearColor;\r\n });\r\n\r\n this._volumetricLightScatteringRTT.onAfterRenderObservable.add((): void => {\r\n scene.clearColor = savedSceneClearColor;\r\n });\r\n\r\n this._volumetricLightScatteringRTT.customIsReadyFunction = (mesh: AbstractMesh, refreshRate: number) => {\r\n if (!mesh.isReady(false)) {\r\n return false;\r\n }\r\n if (refreshRate === 0 && mesh.subMeshes) {\r\n // full check: check that the effects are ready\r\n for (let i = 0; i < mesh.subMeshes.length; ++i) {\r\n const subMesh = mesh.subMeshes[i];\r\n const material = subMesh.getMaterial();\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n\r\n if (!material) {\r\n continue;\r\n }\r\n\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n\r\n if (!this._isReady(subMesh, hardwareInstancedRendering)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n this._volumetricLightScatteringRTT.customRenderFunction = (\r\n opaqueSubMeshes: SmartArray<SubMesh>,\r\n alphaTestSubMeshes: SmartArray<SubMesh>,\r\n transparentSubMeshes: SmartArray<SubMesh>,\r\n depthOnlySubMeshes: SmartArray<SubMesh>\r\n ): void => {\r\n const engine = scene.getEngine();\r\n let index: number;\r\n\r\n if (depthOnlySubMeshes.length) {\r\n engine.setColorWrite(false);\r\n for (index = 0; index < depthOnlySubMeshes.length; index++) {\r\n renderSubMesh(depthOnlySubMeshes.data[index]);\r\n }\r\n engine.setColorWrite(true);\r\n }\r\n\r\n for (index = 0; index < opaqueSubMeshes.length; index++) {\r\n renderSubMesh(opaqueSubMeshes.data[index]);\r\n }\r\n\r\n for (index = 0; index < alphaTestSubMeshes.length; index++) {\r\n renderSubMesh(alphaTestSubMeshes.data[index]);\r\n }\r\n\r\n if (transparentSubMeshes.length) {\r\n // Sort sub meshes\r\n for (index = 0; index < transparentSubMeshes.length; index++) {\r\n const submesh = transparentSubMeshes.data[index];\r\n const boundingInfo = submesh.getBoundingInfo();\r\n\r\n if (boundingInfo && scene.activeCamera) {\r\n submesh._alphaIndex = submesh.getMesh().alphaIndex;\r\n submesh._distanceToCamera = boundingInfo.boundingSphere.centerWorld.subtract(scene.activeCamera.position).length();\r\n }\r\n }\r\n\r\n const sortedArray = transparentSubMeshes.data.slice(0, transparentSubMeshes.length);\r\n sortedArray.sort((a, b) => {\r\n // Alpha index first\r\n if (a._alphaIndex > b._alphaIndex) {\r\n return 1;\r\n }\r\n if (a._alphaIndex < b._alphaIndex) {\r\n return -1;\r\n }\r\n\r\n // Then distance to camera\r\n if (a._distanceToCamera < b._distanceToCamera) {\r\n return 1;\r\n }\r\n if (a._distanceToCamera > b._distanceToCamera) {\r\n return -1;\r\n }\r\n\r\n return 0;\r\n });\r\n\r\n // Render sub meshes\r\n engine.setAlphaMode(Constants.ALPHA_COMBINE);\r\n for (index = 0; index < sortedArray.length; index++) {\r\n renderSubMesh(sortedArray[index]);\r\n }\r\n engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n }\r\n };\r\n }\r\n\r\n private _updateMeshScreenCoordinates(scene: Scene): void {\r\n const transform = scene.getTransformMatrix();\r\n let meshPosition: Vector3;\r\n\r\n if (this.useCustomMeshPosition) {\r\n meshPosition = this.customMeshPosition;\r\n } else if (this.attachedNode) {\r\n meshPosition = this.attachedNode.position;\r\n } else {\r\n meshPosition = this.mesh.parent ? this.mesh.getAbsolutePosition() : this.mesh.position;\r\n }\r\n\r\n const pos = Vector3.Project(meshPosition, Matrix.Identity(), transform, this._viewPort);\r\n\r\n this._screenCoordinates.x = pos.x / this._viewPort.width;\r\n this._screenCoordinates.y = pos.y / this._viewPort.height;\r\n\r\n if (this.invert) {\r\n this._screenCoordinates.y = 1.0 - this._screenCoordinates.y;\r\n }\r\n }\r\n\r\n // Static methods\r\n /**\r\n * Creates a default mesh for the Volumeric Light Scattering post-process\r\n * @param name The mesh name\r\n * @param scene The scene where to create the mesh\r\n * @returns the default mesh\r\n */\r\n public static CreateDefaultMesh(name: string, scene: Scene): Mesh {\r\n const mesh = CreatePlane(name, { size: 1 }, scene);\r\n mesh.billboardMode = AbstractMesh.BILLBOARDMODE_ALL;\r\n\r\n const material = new StandardMaterial(name + \"Material\", scene);\r\n material.emissiveColor = new Color3(1, 1, 1);\r\n\r\n mesh.material = material;\r\n\r\n return mesh;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.VolumetricLightScatteringPostProcess\", VolumetricLightScatteringPostProcess);\r\n"]}
|
|
1
|
+
{"version":3,"file":"volumetricLightScatteringPostProcess.js","sourceRoot":"","sources":["../../../../../lts/core/generated/PostProcesses/volumetricLightScatteringPostProcess.ts"],"names":[],"mappings":"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","sourcesContent":["import { serializeAsVector3, serialize, serializeAsMeshReference } from \"../Misc/decorators\";\r\nimport type { SmartArray } from \"../Misc/smartArray\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { Vector2, Vector3, Matrix } from \"../Maths/math.vector\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { Material } from \"../Materials/material\";\r\nimport { MaterialHelper } from \"../Materials/materialHelper\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport { PostProcess } from \"./postProcess\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { Scene } from \"../scene\";\r\n\r\nimport { CreatePlane } from \"../Meshes/Builders/planeBuilder\";\r\n\r\nimport \"../Shaders/depth.vertex\";\r\nimport \"../Shaders/volumetricLightScattering.fragment\";\r\nimport \"../Shaders/volumetricLightScatteringPass.vertex\";\r\nimport \"../Shaders/volumetricLightScatteringPass.fragment\";\r\nimport { Color4, Color3 } from \"../Maths/math.color\";\r\nimport { Viewport } from \"../Maths/math.viewport\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\nimport type { Nullable } from \"../types\";\r\n\r\ndeclare type Engine = import(\"../Engines/engine\").Engine;\r\n\r\n/**\r\n * Inspired by https://developer.nvidia.com/gpugems/gpugems3/part-ii-light-and-shadows/chapter-13-volumetric-light-scattering-post-process\r\n */\r\nexport class VolumetricLightScatteringPostProcess extends PostProcess {\r\n // Members\r\n private _volumetricLightScatteringRTT: RenderTargetTexture;\r\n private _viewPort: Viewport;\r\n private _screenCoordinates: Vector2 = Vector2.Zero();\r\n\r\n /**\r\n * If not undefined, the mesh position is computed from the attached node position\r\n */\r\n public attachedNode: { position: Vector3 };\r\n\r\n /**\r\n * Custom position of the mesh. Used if \"useCustomMeshPosition\" is set to \"true\"\r\n */\r\n @serializeAsVector3()\r\n public customMeshPosition: Vector3 = Vector3.Zero();\r\n\r\n /**\r\n * Set if the post-process should use a custom position for the light source (true) or the internal mesh position (false)\r\n */\r\n @serialize()\r\n public useCustomMeshPosition: boolean = false;\r\n\r\n /**\r\n * If the post-process should inverse the light scattering direction\r\n */\r\n @serialize()\r\n public invert: boolean = true;\r\n\r\n /**\r\n * The internal mesh used by the post-process\r\n */\r\n @serializeAsMeshReference()\r\n public mesh: Mesh;\r\n\r\n /**\r\n * @internal\r\n * VolumetricLightScatteringPostProcess.useDiffuseColor is no longer used, use the mesh material directly instead\r\n */\r\n public get useDiffuseColor(): boolean {\r\n Logger.Warn(\"VolumetricLightScatteringPostProcess.useDiffuseColor is no longer used, use the mesh material directly instead\");\r\n return false;\r\n }\r\n\r\n public set useDiffuseColor(useDiffuseColor: boolean) {\r\n Logger.Warn(\"VolumetricLightScatteringPostProcess.useDiffuseColor is no longer used, use the mesh material directly instead\");\r\n }\r\n\r\n /**\r\n * Array containing the excluded meshes not rendered in the internal pass\r\n */\r\n @serialize()\r\n public excludedMeshes = new Array<AbstractMesh>();\r\n\r\n /**\r\n * Controls the overall intensity of the post-process\r\n */\r\n @serialize()\r\n public exposure = 0.3;\r\n\r\n /**\r\n * Dissipates each sample's contribution in range [0, 1]\r\n */\r\n @serialize()\r\n public decay = 0.96815;\r\n\r\n /**\r\n * Controls the overall intensity of each sample\r\n */\r\n @serialize()\r\n public weight = 0.58767;\r\n\r\n /**\r\n * Controls the density of each sample\r\n */\r\n @serialize()\r\n public density = 0.926;\r\n\r\n /**\r\n * @constructor\r\n * @param name The post-process name\r\n * @param ratio The size of the post-process and/or internal pass (0.5 means that your postprocess will have a width = canvas.width 0.5 and a height = canvas.height 0.5)\r\n * @param camera The camera that the post-process will be attached to\r\n * @param mesh The mesh used to create the light scattering\r\n * @param samples The post-process quality, default 100\r\n * @param samplingMode The post-process filtering mode\r\n * @param engine The babylon engine\r\n * @param reusable If the post-process is reusable\r\n * @param scene The constructor needs a scene reference to initialize internal components. If \"camera\" is null a \"scene\" must be provided\r\n */\r\n constructor(\r\n name: string,\r\n ratio: any,\r\n camera: Nullable<Camera>,\r\n mesh?: Mesh,\r\n samples: number = 100,\r\n samplingMode: number = Texture.BILINEAR_SAMPLINGMODE,\r\n engine?: Engine,\r\n reusable?: boolean,\r\n scene?: Scene\r\n ) {\r\n super(\r\n name,\r\n \"volumetricLightScattering\",\r\n [\"decay\", \"exposure\", \"weight\", \"meshPositionOnScreen\", \"density\"],\r\n [\"lightScatteringSampler\"],\r\n ratio.postProcessRatio || ratio,\r\n camera,\r\n samplingMode,\r\n engine,\r\n reusable,\r\n \"#define NUM_SAMPLES \" + samples\r\n );\r\n scene = camera?.getScene() ?? scene ?? this._scene; // parameter \"scene\" can be null.\r\n\r\n engine = scene.getEngine();\r\n this._viewPort = new Viewport(0, 0, 1, 1).toGlobal(engine.getRenderWidth(), engine.getRenderHeight());\r\n\r\n // Configure mesh\r\n this.mesh = mesh ?? VolumetricLightScatteringPostProcess.CreateDefaultMesh(\"VolumetricLightScatteringMesh\", scene);\r\n\r\n // Configure\r\n this._createPass(scene, ratio.passRatio || ratio);\r\n\r\n this.onActivate = (camera: Camera) => {\r\n if (!this.isSupported) {\r\n this.dispose(camera);\r\n }\r\n\r\n this.onActivate = null;\r\n };\r\n\r\n this.onApplyObservable.add((effect: Effect) => {\r\n this._updateMeshScreenCoordinates(<Scene>scene);\r\n\r\n effect.setTexture(\"lightScatteringSampler\", this._volumetricLightScatteringRTT);\r\n effect.setFloat(\"exposure\", this.exposure);\r\n effect.setFloat(\"decay\", this.decay);\r\n effect.setFloat(\"weight\", this.weight);\r\n effect.setFloat(\"density\", this.density);\r\n effect.setVector2(\"meshPositionOnScreen\", this._screenCoordinates);\r\n });\r\n }\r\n\r\n /**\r\n * Returns the string \"VolumetricLightScatteringPostProcess\"\r\n * @returns \"VolumetricLightScatteringPostProcess\"\r\n */\r\n public getClassName(): string {\r\n return \"VolumetricLightScatteringPostProcess\";\r\n }\r\n\r\n private _isReady(subMesh: SubMesh, useInstances: boolean): boolean {\r\n const mesh = subMesh.getMesh();\r\n\r\n // Render this.mesh as default\r\n if (mesh === this.mesh && mesh.material) {\r\n return mesh.material.isReady(mesh);\r\n }\r\n\r\n const renderingMaterial = mesh._internalAbstractMeshDataInfo._materialForRenderPass?.[this._scene.getEngine().currentRenderPassId];\r\n\r\n if (renderingMaterial) {\r\n return renderingMaterial.isReadyForSubMesh(mesh, subMesh, useInstances);\r\n }\r\n\r\n const defines = [];\r\n const attribs = [VertexBuffer.PositionKind];\r\n const material: any = subMesh.getMaterial();\r\n\r\n // Alpha test\r\n if (material) {\r\n if (material.needAlphaTesting()) {\r\n defines.push(\"#define ALPHATEST\");\r\n }\r\n\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n attribs.push(VertexBuffer.UVKind);\r\n defines.push(\"#define UV1\");\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n defines.push(\"#define UV2\");\r\n }\r\n }\r\n\r\n // Bones\r\n if (mesh.useBones && mesh.computeBonesUsingShaders) {\r\n attribs.push(VertexBuffer.MatricesIndicesKind);\r\n attribs.push(VertexBuffer.MatricesWeightsKind);\r\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\r\n defines.push(\"#define BonesPerMesh \" + (mesh.skeleton ? mesh.skeleton.bones.length + 1 : 0));\r\n } else {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\r\n }\r\n\r\n // Instances\r\n if (useInstances) {\r\n defines.push(\"#define INSTANCES\");\r\n MaterialHelper.PushAttributesForInstances(attribs);\r\n if (subMesh.getRenderingMesh().hasThinInstances) {\r\n defines.push(\"#define THIN_INSTANCES\");\r\n }\r\n }\r\n\r\n // Get correct effect\r\n const drawWrapper = subMesh._getDrawWrapper(undefined, true)!;\r\n const cachedDefines = drawWrapper.defines;\r\n const join = defines.join(\"\\n\");\r\n if (cachedDefines !== join) {\r\n drawWrapper.setEffect(\r\n mesh\r\n .getScene()\r\n .getEngine()\r\n .createEffect(\r\n \"volumetricLightScatteringPass\",\r\n attribs,\r\n [\"world\", \"mBones\", \"viewProjection\", \"diffuseMatrix\"],\r\n [\"diffuseSampler\"],\r\n join,\r\n undefined,\r\n undefined,\r\n undefined,\r\n { maxSimultaneousMorphTargets: mesh.numBoneInfluencers }\r\n ),\r\n join\r\n );\r\n }\r\n\r\n return drawWrapper.effect!.isReady();\r\n }\r\n\r\n /**\r\n * Sets the new light position for light scattering effect\r\n * @param position The new custom light position\r\n */\r\n public setCustomMeshPosition(position: Vector3): void {\r\n this.customMeshPosition = position;\r\n }\r\n\r\n /**\r\n * Returns the light position for light scattering effect\r\n * @returns Vector3 The custom light position\r\n */\r\n public getCustomMeshPosition(): Vector3 {\r\n return this.customMeshPosition;\r\n }\r\n\r\n /**\r\n * Disposes the internal assets and detaches the post-process from the camera\r\n * @param camera\r\n */\r\n public dispose(camera: Camera): void {\r\n const rttIndex = camera.getScene().customRenderTargets.indexOf(this._volumetricLightScatteringRTT);\r\n if (rttIndex !== -1) {\r\n camera.getScene().customRenderTargets.splice(rttIndex, 1);\r\n }\r\n\r\n this._volumetricLightScatteringRTT.dispose();\r\n super.dispose(camera);\r\n }\r\n\r\n /**\r\n * Returns the render target texture used by the post-process\r\n * @returns the render target texture used by the post-process\r\n */\r\n public getPass(): RenderTargetTexture {\r\n return this._volumetricLightScatteringRTT;\r\n }\r\n\r\n // Private methods\r\n private _meshExcluded(mesh: AbstractMesh) {\r\n if (this.excludedMeshes.length > 0 && this.excludedMeshes.indexOf(mesh) !== -1) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _createPass(scene: Scene, ratio: number): void {\r\n const engine = scene.getEngine();\r\n\r\n this._volumetricLightScatteringRTT = new RenderTargetTexture(\r\n \"volumetricLightScatteringMap\",\r\n { width: engine.getRenderWidth() * ratio, height: engine.getRenderHeight() * ratio },\r\n scene,\r\n false,\r\n true,\r\n Constants.TEXTURETYPE_UNSIGNED_INT\r\n );\r\n this._volumetricLightScatteringRTT.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this._volumetricLightScatteringRTT.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n this._volumetricLightScatteringRTT.renderList = null;\r\n this._volumetricLightScatteringRTT.renderParticles = false;\r\n this._volumetricLightScatteringRTT.ignoreCameraViewport = true;\r\n\r\n const camera = this.getCamera();\r\n if (camera) {\r\n camera.customRenderTargets.push(this._volumetricLightScatteringRTT);\r\n } else {\r\n scene.customRenderTargets.push(this._volumetricLightScatteringRTT);\r\n }\r\n\r\n // Custom render function for submeshes\r\n const renderSubMesh = (subMesh: SubMesh): void => {\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n const effectiveMesh = subMesh.getEffectiveMesh();\r\n if (this._meshExcluded(renderingMesh)) {\r\n return;\r\n }\r\n\r\n effectiveMesh._internalAbstractMeshDataInfo._isActiveIntermediate = false;\r\n\r\n const material = subMesh.getMaterial();\r\n\r\n if (!material) {\r\n return;\r\n }\r\n\r\n const scene = renderingMesh.getScene();\r\n const engine = scene.getEngine();\r\n\r\n // Culling\r\n engine.setState(material.backFaceCulling, undefined, undefined, undefined, material.cullBackFaces);\r\n\r\n // Managing instances\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n\r\n if (batch.mustReturn) {\r\n return;\r\n }\r\n\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n\r\n if (this._isReady(subMesh, hardwareInstancedRendering)) {\r\n const renderingMaterial = effectiveMesh._internalAbstractMeshDataInfo._materialForRenderPass?.[engine.currentRenderPassId];\r\n\r\n let drawWrapper = subMesh._getDrawWrapper();\r\n if (renderingMesh === this.mesh && !drawWrapper) {\r\n drawWrapper = material._getDrawWrapper();\r\n }\r\n\r\n if (!drawWrapper) {\r\n return;\r\n }\r\n\r\n const effect = drawWrapper.effect!;\r\n\r\n engine.enableEffect(drawWrapper);\r\n if (!hardwareInstancedRendering) {\r\n renderingMesh._bind(subMesh, effect, material.fillMode);\r\n }\r\n\r\n if (renderingMesh === this.mesh) {\r\n material.bind(effectiveMesh.getWorldMatrix(), renderingMesh);\r\n } else if (renderingMaterial) {\r\n renderingMaterial.bindForSubMesh(effectiveMesh.getWorldMatrix(), effectiveMesh as Mesh, subMesh);\r\n } else {\r\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n\r\n // Alpha test\r\n if (material && material.needAlphaTesting()) {\r\n const alphaTexture = material.getAlphaTestTexture();\r\n\r\n effect.setTexture(\"diffuseSampler\", alphaTexture);\r\n\r\n if (alphaTexture) {\r\n effect.setMatrix(\"diffuseMatrix\", alphaTexture.getTextureMatrix());\r\n }\r\n }\r\n\r\n // Bones\r\n if (renderingMesh.useBones && renderingMesh.computeBonesUsingShaders && renderingMesh.skeleton) {\r\n effect.setMatrices(\"mBones\", renderingMesh.skeleton.getTransformMatrices(renderingMesh));\r\n }\r\n }\r\n\r\n if (hardwareInstancedRendering && renderingMesh.hasThinInstances) {\r\n effect.setMatrix(\"world\", effectiveMesh.getWorldMatrix());\r\n }\r\n\r\n // Draw\r\n renderingMesh._processRendering(effectiveMesh, subMesh, effect, Material.TriangleFillMode, batch, hardwareInstancedRendering, (isInstance, world) => {\r\n if (!isInstance) {\r\n effect.setMatrix(\"world\", world);\r\n }\r\n });\r\n }\r\n };\r\n\r\n // Render target texture callbacks\r\n let savedSceneClearColor: Color4;\r\n const sceneClearColor = new Color4(0.0, 0.0, 0.0, 1.0);\r\n\r\n this._volumetricLightScatteringRTT.onBeforeRenderObservable.add((): void => {\r\n savedSceneClearColor = scene.clearColor;\r\n scene.clearColor = sceneClearColor;\r\n });\r\n\r\n this._volumetricLightScatteringRTT.onAfterRenderObservable.add((): void => {\r\n scene.clearColor = savedSceneClearColor;\r\n });\r\n\r\n this._volumetricLightScatteringRTT.customIsReadyFunction = (mesh: AbstractMesh, refreshRate: number) => {\r\n if (!mesh.isReady(false)) {\r\n return false;\r\n }\r\n if (refreshRate === 0 && mesh.subMeshes) {\r\n // full check: check that the effects are ready\r\n for (let i = 0; i < mesh.subMeshes.length; ++i) {\r\n const subMesh = mesh.subMeshes[i];\r\n const material = subMesh.getMaterial();\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n\r\n if (!material) {\r\n continue;\r\n }\r\n\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n\r\n if (!this._isReady(subMesh, hardwareInstancedRendering)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n this._volumetricLightScatteringRTT.customRenderFunction = (\r\n opaqueSubMeshes: SmartArray<SubMesh>,\r\n alphaTestSubMeshes: SmartArray<SubMesh>,\r\n transparentSubMeshes: SmartArray<SubMesh>,\r\n depthOnlySubMeshes: SmartArray<SubMesh>\r\n ): void => {\r\n const engine = scene.getEngine();\r\n let index: number;\r\n\r\n if (depthOnlySubMeshes.length) {\r\n engine.setColorWrite(false);\r\n for (index = 0; index < depthOnlySubMeshes.length; index++) {\r\n renderSubMesh(depthOnlySubMeshes.data[index]);\r\n }\r\n engine.setColorWrite(true);\r\n }\r\n\r\n for (index = 0; index < opaqueSubMeshes.length; index++) {\r\n renderSubMesh(opaqueSubMeshes.data[index]);\r\n }\r\n\r\n for (index = 0; index < alphaTestSubMeshes.length; index++) {\r\n renderSubMesh(alphaTestSubMeshes.data[index]);\r\n }\r\n\r\n if (transparentSubMeshes.length) {\r\n // Sort sub meshes\r\n for (index = 0; index < transparentSubMeshes.length; index++) {\r\n const submesh = transparentSubMeshes.data[index];\r\n const boundingInfo = submesh.getBoundingInfo();\r\n\r\n if (boundingInfo && scene.activeCamera) {\r\n submesh._alphaIndex = submesh.getMesh().alphaIndex;\r\n submesh._distanceToCamera = boundingInfo.boundingSphere.centerWorld.subtract(scene.activeCamera.position).length();\r\n }\r\n }\r\n\r\n const sortedArray = transparentSubMeshes.data.slice(0, transparentSubMeshes.length);\r\n sortedArray.sort((a, b) => {\r\n // Alpha index first\r\n if (a._alphaIndex > b._alphaIndex) {\r\n return 1;\r\n }\r\n if (a._alphaIndex < b._alphaIndex) {\r\n return -1;\r\n }\r\n\r\n // Then distance to camera\r\n if (a._distanceToCamera < b._distanceToCamera) {\r\n return 1;\r\n }\r\n if (a._distanceToCamera > b._distanceToCamera) {\r\n return -1;\r\n }\r\n\r\n return 0;\r\n });\r\n\r\n // Render sub meshes\r\n engine.setAlphaMode(Constants.ALPHA_COMBINE);\r\n for (index = 0; index < sortedArray.length; index++) {\r\n renderSubMesh(sortedArray[index]);\r\n }\r\n engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n }\r\n };\r\n }\r\n\r\n private _updateMeshScreenCoordinates(scene: Scene): void {\r\n const transform = scene.getTransformMatrix();\r\n let meshPosition: Vector3;\r\n\r\n if (this.useCustomMeshPosition) {\r\n meshPosition = this.customMeshPosition;\r\n } else if (this.attachedNode) {\r\n meshPosition = this.attachedNode.position;\r\n } else {\r\n meshPosition = this.mesh.parent ? this.mesh.getAbsolutePosition() : this.mesh.position;\r\n }\r\n\r\n const pos = Vector3.Project(meshPosition, Matrix.Identity(), transform, this._viewPort);\r\n\r\n this._screenCoordinates.x = pos.x / this._viewPort.width;\r\n this._screenCoordinates.y = pos.y / this._viewPort.height;\r\n\r\n if (this.invert) {\r\n this._screenCoordinates.y = 1.0 - this._screenCoordinates.y;\r\n }\r\n }\r\n\r\n // Static methods\r\n /**\r\n * Creates a default mesh for the Volumeric Light Scattering post-process\r\n * @param name The mesh name\r\n * @param scene The scene where to create the mesh\r\n * @returns the default mesh\r\n */\r\n public static CreateDefaultMesh(name: string, scene: Scene): Mesh {\r\n const mesh = CreatePlane(name, { size: 1 }, scene);\r\n mesh.billboardMode = AbstractMesh.BILLBOARDMODE_ALL;\r\n\r\n const material = new StandardMaterial(name + \"Material\", scene);\r\n material.emissiveColor = new Color3(1, 1, 1);\r\n\r\n mesh.material = material;\r\n\r\n return mesh;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.VolumetricLightScatteringPostProcess\", VolumetricLightScatteringPostProcess);\r\n"]}
|
|
@@ -2,6 +2,7 @@ import type { Camera } from "../Cameras/camera";
|
|
|
2
2
|
import type { VRCameraMetrics } from "../Cameras/VR/vrCameraMetrics";
|
|
3
3
|
import { PostProcess } from "./postProcess";
|
|
4
4
|
import "../Shaders/vrDistortionCorrection.fragment";
|
|
5
|
+
import type { Nullable } from "../types";
|
|
5
6
|
/**
|
|
6
7
|
* VRDistortionCorrectionPostProcess used for mobile VR
|
|
7
8
|
*/
|
|
@@ -25,5 +26,5 @@ export declare class VRDistortionCorrectionPostProcess extends PostProcess {
|
|
|
25
26
|
* @param isRightEye If this is for the right eye distortion
|
|
26
27
|
* @param vrMetrics All the required metrics for the VR camera
|
|
27
28
|
*/
|
|
28
|
-
constructor(name: string, camera: Camera
|
|
29
|
+
constructor(name: string, camera: Nullable<Camera>, isRightEye: boolean, vrMetrics: VRCameraMetrics);
|
|
29
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vrDistortionCorrectionPostProcess.js","sourceRoot":"","sources":["../../../../../lts/core/generated/PostProcesses/vrDistortionCorrectionPostProcess.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAI/C,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,4CAA4C,CAAC;
|
|
1
|
+
{"version":3,"file":"vrDistortionCorrectionPostProcess.js","sourceRoot":"","sources":["../../../../../lts/core/generated/PostProcesses/vrDistortionCorrectionPostProcess.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAI/C,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,4CAA4C,CAAC;AAGpD;;GAEG;AACH,MAAM,OAAO,iCAAkC,SAAQ,WAAW;IAiB9D;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,MAAwB,EAAE,UAAmB,EAAE,SAA0B;QAC/F,KAAK,CAAC,IAAI,EAAE,wBAAwB,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,sBAAsB,EAAE,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAEzK,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC,WAAW,CAAC;QAChD,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC,sBAAsB,CAAC;QAChE,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,gBAAgB,CAAC;QACpD,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC;QAExC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE;YAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;YACrD,IAAI,CAAC,YAAY,GAAG,IAAI,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;YACvI,IAAI,CAAC,WAAW,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,iBAAiB,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;QACpI,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAc,EAAE,EAAE;YAC1C,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACpE,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC9D,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;QACrJ,CAAC,CAAC,CAAC;IACP,CAAC;IAnCD;;;OAGG;IACI,YAAY;QACf,OAAO,mCAAmC,CAAC;IAC/C,CAAC;CA8BJ","sourcesContent":["import { Vector2 } from \"../Maths/math.vector\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport type { VRCameraMetrics } from \"../Cameras/VR/vrCameraMetrics\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { PostProcess } from \"./postProcess\";\r\n\r\nimport \"../Shaders/vrDistortionCorrection.fragment\";\r\nimport type { Nullable } from \"../types\";\r\n\r\n/**\r\n * VRDistortionCorrectionPostProcess used for mobile VR\r\n */\r\nexport class VRDistortionCorrectionPostProcess extends PostProcess {\r\n private _isRightEye: boolean;\r\n private _distortionFactors: number[];\r\n private _postProcessScaleFactor: number;\r\n private _lensCenterOffset: number;\r\n private _scaleIn: Vector2;\r\n private _scaleFactor: Vector2;\r\n private _lensCenter: Vector2;\r\n\r\n /**\r\n * Gets a string identifying the name of the class\r\n * @returns \"VRDistortionCorrectionPostProcess\" string\r\n */\r\n public getClassName(): string {\r\n return \"VRDistortionCorrectionPostProcess\";\r\n }\r\n\r\n /**\r\n * Initializes the VRDistortionCorrectionPostProcess\r\n * @param name The name of the effect.\r\n * @param camera The camera to apply the render pass to.\r\n * @param isRightEye If this is for the right eye distortion\r\n * @param vrMetrics All the required metrics for the VR camera\r\n */\r\n constructor(name: string, camera: Nullable<Camera>, isRightEye: boolean, vrMetrics: VRCameraMetrics) {\r\n super(name, \"vrDistortionCorrection\", [\"LensCenter\", \"Scale\", \"ScaleIn\", \"HmdWarpParam\"], null, vrMetrics.postProcessScaleFactor, camera, Texture.BILINEAR_SAMPLINGMODE);\r\n\r\n this._isRightEye = isRightEye;\r\n this._distortionFactors = vrMetrics.distortionK;\r\n this._postProcessScaleFactor = vrMetrics.postProcessScaleFactor;\r\n this._lensCenterOffset = vrMetrics.lensCenterOffset;\r\n this.adaptScaleToCurrentViewport = true;\r\n\r\n this.onSizeChangedObservable.add(() => {\r\n this._scaleIn = new Vector2(2, 2 / this.aspectRatio);\r\n this._scaleFactor = new Vector2(0.5 * (1 / this._postProcessScaleFactor), 0.5 * (1 / this._postProcessScaleFactor) * this.aspectRatio);\r\n this._lensCenter = new Vector2(this._isRightEye ? 0.5 - this._lensCenterOffset * 0.5 : 0.5 + this._lensCenterOffset * 0.5, 0.5);\r\n });\r\n this.onApplyObservable.add((effect: Effect) => {\r\n effect.setFloat2(\"LensCenter\", this._lensCenter.x, this._lensCenter.y);\r\n effect.setFloat2(\"Scale\", this._scaleFactor.x, this._scaleFactor.y);\r\n effect.setFloat2(\"ScaleIn\", this._scaleIn.x, this._scaleIn.y);\r\n effect.setFloat4(\"HmdWarpParam\", this._distortionFactors[0], this._distortionFactors[1], this._distortionFactors[2], this._distortionFactors[3]);\r\n });\r\n }\r\n}\r\n"]}
|
|
@@ -2,6 +2,7 @@ import type { Camera } from "../Cameras/camera";
|
|
|
2
2
|
import { PostProcess } from "./postProcess";
|
|
3
3
|
import "../Shaders/vrMultiviewToSingleview.fragment";
|
|
4
4
|
import "../Engines/Extensions/engine.multiview";
|
|
5
|
+
import type { Nullable } from "../types";
|
|
5
6
|
/**
|
|
6
7
|
* VRMultiviewToSingleview used to convert multiview texture arrays to standard textures for scenarios such as webVR
|
|
7
8
|
* This will not be used for webXR as it supports displaying texture arrays directly
|
|
@@ -18,5 +19,5 @@ export declare class VRMultiviewToSingleviewPostProcess extends PostProcess {
|
|
|
18
19
|
* @param camera camera to be applied to
|
|
19
20
|
* @param scaleFactor scaling factor to the size of the output texture
|
|
20
21
|
*/
|
|
21
|
-
constructor(name: string, camera: Camera
|
|
22
|
+
constructor(name: string, camera: Nullable<Camera>, scaleFactor: number);
|
|
22
23
|
}
|
|
@@ -22,15 +22,16 @@ export class VRMultiviewToSingleviewPostProcess extends PostProcess {
|
|
|
22
22
|
*/
|
|
23
23
|
constructor(name, camera, scaleFactor) {
|
|
24
24
|
super(name, "vrMultiviewToSingleview", ["imageIndex"], ["multiviewSampler"], scaleFactor, camera, Texture.BILINEAR_SAMPLINGMODE);
|
|
25
|
+
const cam = camera !== null && camera !== void 0 ? camera : this.getCamera();
|
|
25
26
|
this.onSizeChangedObservable.add(() => { });
|
|
26
27
|
this.onApplyObservable.add((effect) => {
|
|
27
|
-
if (
|
|
28
|
+
if (cam._scene.activeCamera && cam._scene.activeCamera.isLeftCamera) {
|
|
28
29
|
effect.setInt("imageIndex", 0);
|
|
29
30
|
}
|
|
30
31
|
else {
|
|
31
32
|
effect.setInt("imageIndex", 1);
|
|
32
33
|
}
|
|
33
|
-
effect.setTexture("multiviewSampler",
|
|
34
|
+
effect.setTexture("multiviewSampler", cam._multiviewTexture);
|
|
34
35
|
});
|
|
35
36
|
}
|
|
36
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vrMultiviewToSingleviewPostProcess.js","sourceRoot":"","sources":["../../../../../lts/core/generated/PostProcesses/vrMultiviewToSingleviewPostProcess.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,6CAA6C,CAAC;AACrD,OAAO,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"vrMultiviewToSingleviewPostProcess.js","sourceRoot":"","sources":["../../../../../lts/core/generated/PostProcesses/vrMultiviewToSingleviewPostProcess.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,6CAA6C,CAAC;AACrD,OAAO,wCAAwC,CAAC;AAGhD;;;GAGG;AACH,MAAM,OAAO,kCAAmC,SAAQ,WAAW;IAC/D;;;OAGG;IACI,YAAY;QACf,OAAO,oCAAoC,CAAC;IAChD,CAAC;IAED;;;;;OAKG;IACH,YAAY,IAAY,EAAE,MAAwB,EAAE,WAAmB;QACnE,KAAK,CAAC,IAAI,EAAE,yBAAyB,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,kBAAkB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAEjI,MAAM,GAAG,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACvC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAc,EAAE,EAAE;YAC1C,IAAI,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE;gBACjE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;aAClC;iBAAM;gBACH,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;aAClC;YACD,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACP,CAAC;CACJ","sourcesContent":["import type { Camera } from \"../Cameras/camera\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { PostProcess } from \"./postProcess\";\r\n\r\nimport \"../Shaders/vrMultiviewToSingleview.fragment\";\r\nimport \"../Engines/Extensions/engine.multiview\";\r\nimport type { Nullable } from \"../types\";\r\n\r\n/**\r\n * VRMultiviewToSingleview used to convert multiview texture arrays to standard textures for scenarios such as webVR\r\n * This will not be used for webXR as it supports displaying texture arrays directly\r\n */\r\nexport class VRMultiviewToSingleviewPostProcess extends PostProcess {\r\n /**\r\n * Gets a string identifying the name of the class\r\n * @returns \"VRMultiviewToSingleviewPostProcess\" string\r\n */\r\n public getClassName(): string {\r\n return \"VRMultiviewToSingleviewPostProcess\";\r\n }\r\n\r\n /**\r\n * Initializes a VRMultiviewToSingleview\r\n * @param name name of the post process\r\n * @param camera camera to be applied to\r\n * @param scaleFactor scaling factor to the size of the output texture\r\n */\r\n constructor(name: string, camera: Nullable<Camera>, scaleFactor: number) {\r\n super(name, \"vrMultiviewToSingleview\", [\"imageIndex\"], [\"multiviewSampler\"], scaleFactor, camera, Texture.BILINEAR_SAMPLINGMODE);\r\n\r\n const cam = camera ?? this.getCamera();\r\n this.onSizeChangedObservable.add(() => {});\r\n this.onApplyObservable.add((effect: Effect) => {\r\n if (cam._scene.activeCamera && cam._scene.activeCamera.isLeftCamera) {\r\n effect.setInt(\"imageIndex\", 0);\r\n } else {\r\n effect.setInt(\"imageIndex\", 1);\r\n }\r\n effect.setTexture(\"multiviewSampler\", cam._multiviewTexture);\r\n });\r\n }\r\n}\r\n"]}
|
|
@@ -118,21 +118,23 @@ export class ReflectionProbe {
|
|
|
118
118
|
});
|
|
119
119
|
let currentApplyByPostProcess;
|
|
120
120
|
this._renderTargetTexture.onBeforeBindObservable.add(() => {
|
|
121
|
+
var _a, _b;
|
|
121
122
|
this._currentSceneUBO = scene.getSceneUniformBuffer();
|
|
122
|
-
scene.getEngine()._debugPushGroup
|
|
123
|
+
(_b = (_a = scene.getEngine())._debugPushGroup) === null || _b === void 0 ? void 0 : _b.call(_a, `reflection probe generation for ${name}`, 1);
|
|
123
124
|
currentApplyByPostProcess = this._scene.imageProcessingConfiguration.applyByPostProcess;
|
|
124
125
|
if (linearSpace) {
|
|
125
126
|
scene.imageProcessingConfiguration.applyByPostProcess = true;
|
|
126
127
|
}
|
|
127
128
|
});
|
|
128
129
|
this._renderTargetTexture.onAfterUnbindObservable.add(() => {
|
|
130
|
+
var _a, _b;
|
|
129
131
|
scene.imageProcessingConfiguration.applyByPostProcess = currentApplyByPostProcess;
|
|
130
132
|
scene._forcedViewPosition = null;
|
|
131
133
|
if (this._sceneUBOs) {
|
|
132
134
|
scene.setSceneUniformBuffer(this._currentSceneUBO);
|
|
133
135
|
}
|
|
134
136
|
scene.updateTransformMatrix(true);
|
|
135
|
-
scene.getEngine()._debugPopGroup
|
|
137
|
+
(_b = (_a = scene.getEngine())._debugPopGroup) === null || _b === void 0 ? void 0 : _b.call(_a, 1);
|
|
136
138
|
});
|
|
137
139
|
}
|
|
138
140
|
/** Gets or sets the number of samples to use for multi-sampling (0 by default). Required WebGL2 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reflectionProbe.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Probes/reflectionProbe.ts"],"names":[],"mappings":"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","sourcesContent":["import { serializeAsMeshReference, serializeAsVector3, SerializationHelper } from \"../Misc/decorators\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport { Matrix, Vector3 } from \"../Maths/math.vector\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Nullable } from \"../types\";\r\nimport { AbstractScene } from \"../abstractScene\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { UniformBuffer } from \"../Materials/uniformBuffer\";\r\n\r\ndeclare module \"../abstractScene\" {\r\n export interface AbstractScene {\r\n /**\r\n * The list of reflection probes added to the scene\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_reflection_probes\r\n */\r\n reflectionProbes: Array<ReflectionProbe>;\r\n\r\n /**\r\n * Removes the given reflection probe from this scene.\r\n * @param toRemove The reflection probe to remove\r\n * @returns The index of the removed reflection probe\r\n */\r\n removeReflectionProbe(toRemove: ReflectionProbe): number;\r\n\r\n /**\r\n * Adds the given reflection probe to this scene.\r\n * @param newReflectionProbe The reflection probe to add\r\n */\r\n addReflectionProbe(newReflectionProbe: ReflectionProbe): void;\r\n }\r\n}\r\n\r\nAbstractScene.prototype.removeReflectionProbe = function (toRemove: ReflectionProbe): number {\r\n if (!this.reflectionProbes) {\r\n return -1;\r\n }\r\n\r\n const index = this.reflectionProbes.indexOf(toRemove);\r\n if (index !== -1) {\r\n this.reflectionProbes.splice(index, 1);\r\n }\r\n\r\n return index;\r\n};\r\n\r\nAbstractScene.prototype.addReflectionProbe = function (newReflectionProbe: ReflectionProbe): void {\r\n if (!this.reflectionProbes) {\r\n this.reflectionProbes = [];\r\n }\r\n\r\n this.reflectionProbes.push(newReflectionProbe);\r\n};\r\n\r\n/**\r\n * Class used to generate realtime reflection / refraction cube textures\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_reflection_probes\r\n */\r\nexport class ReflectionProbe {\r\n private _scene: Scene;\r\n private _renderTargetTexture: RenderTargetTexture;\r\n private _projectionMatrix: Matrix;\r\n private _viewMatrix = Matrix.Identity();\r\n private _target = Vector3.Zero();\r\n private _add = Vector3.Zero();\r\n @serializeAsMeshReference()\r\n private _attachedMesh: Nullable<AbstractMesh>;\r\n\r\n private _invertYAxis = false;\r\n private _sceneUBOs: UniformBuffer[];\r\n private _currentSceneUBO: UniformBuffer;\r\n\r\n /** Gets or sets probe position (center of the cube map) */\r\n @serializeAsVector3()\r\n public position = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets an object used to store user defined information for the reflection probe.\r\n */\r\n public metadata: any = null;\r\n\r\n /** @internal */\r\n public _parentContainer: Nullable<AbstractScene> = null;\r\n\r\n /**\r\n * Creates a new reflection probe\r\n * @param name defines the name of the probe\r\n * @param size defines the texture resolution (for each face)\r\n * @param scene defines the hosting scene\r\n * @param generateMipMaps defines if mip maps should be generated automatically (true by default)\r\n * @param useFloat defines if HDR data (float data) should be used to store colors (false by default)\r\n * @param linearSpace defines if the probe should be generated in linear space or not (false by default)\r\n */\r\n constructor(\r\n /** defines the name of the probe */\r\n public name: string,\r\n size: number,\r\n scene: Scene,\r\n generateMipMaps = true,\r\n useFloat = false,\r\n linearSpace = false\r\n ) {\r\n this._scene = scene;\r\n\r\n if (scene.getEngine().supportsUniformBuffers) {\r\n this._sceneUBOs = [];\r\n for (let i = 0; i < 6; ++i) {\r\n this._sceneUBOs.push(scene.createSceneUniformBuffer(`Scene for Reflection Probe (name \"${name}\") face #${i}`));\r\n }\r\n }\r\n\r\n // Create the scene field if not exist.\r\n if (!this._scene.reflectionProbes) {\r\n this._scene.reflectionProbes = new Array<ReflectionProbe>();\r\n }\r\n this._scene.reflectionProbes.push(this);\r\n\r\n let textureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n if (useFloat) {\r\n const caps = this._scene.getEngine().getCaps();\r\n if (caps.textureHalfFloatRender) {\r\n textureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n } else if (caps.textureFloatRender) {\r\n textureType = Constants.TEXTURETYPE_FLOAT;\r\n }\r\n }\r\n this._renderTargetTexture = new RenderTargetTexture(name, size, scene, generateMipMaps, true, textureType, true);\r\n this._renderTargetTexture.gammaSpace = !linearSpace;\r\n\r\n const useReverseDepthBuffer = scene.getEngine().useReverseDepthBuffer;\r\n\r\n this._renderTargetTexture.onBeforeRenderObservable.add((faceIndex: number) => {\r\n if (this._sceneUBOs) {\r\n scene.setSceneUniformBuffer(this._sceneUBOs[faceIndex]);\r\n scene.getSceneUniformBuffer().unbindEffect();\r\n }\r\n switch (faceIndex) {\r\n case 0:\r\n this._add.copyFromFloats(1, 0, 0);\r\n break;\r\n case 1:\r\n this._add.copyFromFloats(-1, 0, 0);\r\n break;\r\n case 2:\r\n this._add.copyFromFloats(0, this._invertYAxis ? 1 : -1, 0);\r\n break;\r\n case 3:\r\n this._add.copyFromFloats(0, this._invertYAxis ? -1 : 1, 0);\r\n break;\r\n case 4:\r\n this._add.copyFromFloats(0, 0, scene.useRightHandedSystem ? -1 : 1);\r\n break;\r\n case 5:\r\n this._add.copyFromFloats(0, 0, scene.useRightHandedSystem ? 1 : -1);\r\n break;\r\n }\r\n\r\n if (this._attachedMesh) {\r\n this.position.copyFrom(this._attachedMesh.getAbsolutePosition());\r\n }\r\n\r\n this.position.addToRef(this._add, this._target);\r\n\r\n const lookAtFunction = scene.useRightHandedSystem ? Matrix.LookAtRHToRef : Matrix.LookAtLHToRef;\r\n const perspectiveFunction = scene.useRightHandedSystem ? Matrix.PerspectiveFovRH : Matrix.PerspectiveFovLH;\r\n\r\n lookAtFunction(this.position, this._target, Vector3.Up(), this._viewMatrix);\r\n\r\n if (scene.activeCamera) {\r\n this._projectionMatrix = perspectiveFunction(\r\n Math.PI / 2,\r\n 1,\r\n useReverseDepthBuffer ? scene.activeCamera.maxZ : scene.activeCamera.minZ,\r\n useReverseDepthBuffer ? scene.activeCamera.minZ : scene.activeCamera.maxZ,\r\n this._scene.getEngine().isNDCHalfZRange\r\n );\r\n scene.setTransformMatrix(this._viewMatrix, this._projectionMatrix);\r\n if (scene.activeCamera.isRigCamera && !this._renderTargetTexture.activeCamera) {\r\n this._renderTargetTexture.activeCamera = scene.activeCamera.rigParent || null;\r\n }\r\n }\r\n scene._forcedViewPosition = this.position;\r\n });\r\n\r\n let currentApplyByPostProcess: boolean;\r\n\r\n this._renderTargetTexture.onBeforeBindObservable.add(() => {\r\n this._currentSceneUBO = scene.getSceneUniformBuffer();\r\n scene.getEngine()._debugPushGroup?.(`reflection probe generation for ${name}`, 1);\r\n currentApplyByPostProcess = this._scene.imageProcessingConfiguration.applyByPostProcess;\r\n if (linearSpace) {\r\n scene.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n });\r\n\r\n this._renderTargetTexture.onAfterUnbindObservable.add(() => {\r\n scene.imageProcessingConfiguration.applyByPostProcess = currentApplyByPostProcess;\r\n scene._forcedViewPosition = null;\r\n if (this._sceneUBOs) {\r\n scene.setSceneUniformBuffer(this._currentSceneUBO);\r\n }\r\n scene.updateTransformMatrix(true);\r\n scene.getEngine()._debugPopGroup?.(1);\r\n });\r\n }\r\n\r\n /** Gets or sets the number of samples to use for multi-sampling (0 by default). Required WebGL2 */\r\n public get samples(): number {\r\n return this._renderTargetTexture.samples;\r\n }\r\n\r\n public set samples(value: number) {\r\n this._renderTargetTexture.samples = value;\r\n }\r\n\r\n /** Gets or sets the refresh rate to use (on every frame by default) */\r\n public get refreshRate(): number {\r\n return this._renderTargetTexture.refreshRate;\r\n }\r\n\r\n public set refreshRate(value: number) {\r\n this._renderTargetTexture.refreshRate = value;\r\n }\r\n\r\n /**\r\n * Gets the hosting scene\r\n * @returns a Scene\r\n */\r\n public getScene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /** Gets the internal CubeTexture used to render to */\r\n public get cubeTexture(): RenderTargetTexture {\r\n return this._renderTargetTexture;\r\n }\r\n\r\n /** Gets the list of meshes to render */\r\n public get renderList(): Nullable<AbstractMesh[]> {\r\n return this._renderTargetTexture.renderList;\r\n }\r\n\r\n /**\r\n * Attach the probe to a specific mesh (Rendering will be done from attached mesh's position)\r\n * @param mesh defines the mesh to attach to\r\n */\r\n public attachToMesh(mesh: Nullable<AbstractMesh>): void {\r\n this._attachedMesh = mesh;\r\n }\r\n\r\n /**\r\n * Specifies whether or not the stencil and depth buffer are cleared between two rendering groups\r\n * @param renderingGroupId The rendering group id corresponding to its index\r\n * @param autoClearDepthStencil Automatically clears depth and stencil between groups if true.\r\n */\r\n public setRenderingAutoClearDepthStencil(renderingGroupId: number, autoClearDepthStencil: boolean): void {\r\n this._renderTargetTexture.setRenderingAutoClearDepthStencil(renderingGroupId, autoClearDepthStencil);\r\n }\r\n\r\n /**\r\n * Clean all associated resources\r\n */\r\n public dispose() {\r\n const index = this._scene.reflectionProbes.indexOf(this);\r\n\r\n if (index !== -1) {\r\n // Remove from the scene if found\r\n this._scene.reflectionProbes.splice(index, 1);\r\n }\r\n\r\n if (this._parentContainer) {\r\n const index = this._parentContainer.reflectionProbes.indexOf(this);\r\n if (index > -1) {\r\n this._parentContainer.reflectionProbes.splice(index, 1);\r\n }\r\n this._parentContainer = null;\r\n }\r\n\r\n if (this._renderTargetTexture) {\r\n this._renderTargetTexture.dispose();\r\n (<any>this._renderTargetTexture) = null;\r\n }\r\n\r\n if (this._sceneUBOs) {\r\n for (const ubo of this._sceneUBOs) {\r\n ubo.dispose();\r\n }\r\n this._sceneUBOs = [];\r\n }\r\n }\r\n\r\n /**\r\n * Converts the reflection probe information to a readable string for debug purpose.\r\n * @param fullDetails Supports for multiple levels of logging within scene loading\r\n * @returns the human readable reflection probe info\r\n */\r\n public toString(fullDetails?: boolean): string {\r\n let ret = \"Name: \" + this.name;\r\n\r\n if (fullDetails) {\r\n ret += \", position: \" + this.position.toString();\r\n\r\n if (this._attachedMesh) {\r\n ret += \", attached mesh: \" + this._attachedMesh.name;\r\n }\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n /**\r\n * Get the class name of the refection probe.\r\n * @returns \"ReflectionProbe\"\r\n */\r\n public getClassName(): string {\r\n return \"ReflectionProbe\";\r\n }\r\n\r\n /**\r\n * Serialize the reflection probe to a JSON representation we can easily use in the respective Parse function.\r\n * @returns The JSON representation of the texture\r\n */\r\n public serialize(): any {\r\n const serializationObject = SerializationHelper.Serialize(this, this._renderTargetTexture.serialize());\r\n serializationObject.isReflectionProbe = true;\r\n serializationObject.metadata = this.metadata;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Parse the JSON representation of a reflection probe in order to recreate the reflection probe in the given scene.\r\n * @param parsedReflectionProbe Define the JSON representation of the reflection probe\r\n * @param scene Define the scene the parsed reflection probe should be instantiated in\r\n * @param rootUrl Define the root url of the parsing sequence in the case of relative dependencies\r\n * @returns The parsed reflection probe if successful\r\n */\r\n public static Parse(parsedReflectionProbe: any, scene: Scene, rootUrl: string): Nullable<ReflectionProbe> {\r\n let reflectionProbe: Nullable<ReflectionProbe> = null;\r\n if (scene.reflectionProbes) {\r\n for (let index = 0; index < scene.reflectionProbes.length; index++) {\r\n const rp = scene.reflectionProbes[index];\r\n if (rp.name === parsedReflectionProbe.name) {\r\n reflectionProbe = rp;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n reflectionProbe = SerializationHelper.Parse(\r\n () => reflectionProbe || new ReflectionProbe(parsedReflectionProbe.name, parsedReflectionProbe.renderTargetSize, scene, parsedReflectionProbe._generateMipMaps),\r\n parsedReflectionProbe,\r\n scene,\r\n rootUrl\r\n );\r\n reflectionProbe.cubeTexture._waitingRenderList = parsedReflectionProbe.renderList;\r\n\r\n if (parsedReflectionProbe._attachedMesh) {\r\n reflectionProbe.attachToMesh(scene.getMeshById(parsedReflectionProbe._attachedMesh));\r\n }\r\n\r\n if (parsedReflectionProbe.metadata) {\r\n reflectionProbe.metadata = parsedReflectionProbe.metadata;\r\n }\r\n\r\n return reflectionProbe;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"reflectionProbe.js","sourceRoot":"","sources":["../../../../../lts/core/generated/Probes/reflectionProbe.ts"],"names":[],"mappings":"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","sourcesContent":["import { serializeAsMeshReference, serializeAsVector3, SerializationHelper } from \"../Misc/decorators\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport { Matrix, Vector3 } from \"../Maths/math.vector\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Nullable } from \"../types\";\r\nimport { AbstractScene } from \"../abstractScene\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { UniformBuffer } from \"../Materials/uniformBuffer\";\r\n\r\ndeclare module \"../abstractScene\" {\r\n export interface AbstractScene {\r\n /**\r\n * The list of reflection probes added to the scene\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_reflection_probes\r\n */\r\n reflectionProbes: Array<ReflectionProbe>;\r\n\r\n /**\r\n * Removes the given reflection probe from this scene.\r\n * @param toRemove The reflection probe to remove\r\n * @returns The index of the removed reflection probe\r\n */\r\n removeReflectionProbe(toRemove: ReflectionProbe): number;\r\n\r\n /**\r\n * Adds the given reflection probe to this scene.\r\n * @param newReflectionProbe The reflection probe to add\r\n */\r\n addReflectionProbe(newReflectionProbe: ReflectionProbe): void;\r\n }\r\n}\r\n\r\nAbstractScene.prototype.removeReflectionProbe = function (toRemove: ReflectionProbe): number {\r\n if (!this.reflectionProbes) {\r\n return -1;\r\n }\r\n\r\n const index = this.reflectionProbes.indexOf(toRemove);\r\n if (index !== -1) {\r\n this.reflectionProbes.splice(index, 1);\r\n }\r\n\r\n return index;\r\n};\r\n\r\nAbstractScene.prototype.addReflectionProbe = function (newReflectionProbe: ReflectionProbe): void {\r\n if (!this.reflectionProbes) {\r\n this.reflectionProbes = [];\r\n }\r\n\r\n this.reflectionProbes.push(newReflectionProbe);\r\n};\r\n\r\n/**\r\n * Class used to generate realtime reflection / refraction cube textures\r\n * @see https://doc.babylonjs.com/how_to/how_to_use_reflection_probes\r\n */\r\nexport class ReflectionProbe {\r\n private _scene: Scene;\r\n private _renderTargetTexture: RenderTargetTexture;\r\n private _projectionMatrix: Matrix;\r\n private _viewMatrix = Matrix.Identity();\r\n private _target = Vector3.Zero();\r\n private _add = Vector3.Zero();\r\n @serializeAsMeshReference()\r\n private _attachedMesh: Nullable<AbstractMesh>;\r\n\r\n private _invertYAxis = false;\r\n private _sceneUBOs: UniformBuffer[];\r\n private _currentSceneUBO: UniformBuffer;\r\n\r\n /** Gets or sets probe position (center of the cube map) */\r\n @serializeAsVector3()\r\n public position = Vector3.Zero();\r\n\r\n /**\r\n * Gets or sets an object used to store user defined information for the reflection probe.\r\n */\r\n public metadata: any = null;\r\n\r\n /** @internal */\r\n public _parentContainer: Nullable<AbstractScene> = null;\r\n\r\n /**\r\n * Creates a new reflection probe\r\n * @param name defines the name of the probe\r\n * @param size defines the texture resolution (for each face)\r\n * @param scene defines the hosting scene\r\n * @param generateMipMaps defines if mip maps should be generated automatically (true by default)\r\n * @param useFloat defines if HDR data (float data) should be used to store colors (false by default)\r\n * @param linearSpace defines if the probe should be generated in linear space or not (false by default)\r\n */\r\n constructor(\r\n /** defines the name of the probe */\r\n public name: string,\r\n size: number,\r\n scene: Scene,\r\n generateMipMaps = true,\r\n useFloat = false,\r\n linearSpace = false\r\n ) {\r\n this._scene = scene;\r\n\r\n if (scene.getEngine().supportsUniformBuffers) {\r\n this._sceneUBOs = [];\r\n for (let i = 0; i < 6; ++i) {\r\n this._sceneUBOs.push(scene.createSceneUniformBuffer(`Scene for Reflection Probe (name \"${name}\") face #${i}`));\r\n }\r\n }\r\n\r\n // Create the scene field if not exist.\r\n if (!this._scene.reflectionProbes) {\r\n this._scene.reflectionProbes = new Array<ReflectionProbe>();\r\n }\r\n this._scene.reflectionProbes.push(this);\r\n\r\n let textureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n if (useFloat) {\r\n const caps = this._scene.getEngine().getCaps();\r\n if (caps.textureHalfFloatRender) {\r\n textureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n } else if (caps.textureFloatRender) {\r\n textureType = Constants.TEXTURETYPE_FLOAT;\r\n }\r\n }\r\n this._renderTargetTexture = new RenderTargetTexture(name, size, scene, generateMipMaps, true, textureType, true);\r\n this._renderTargetTexture.gammaSpace = !linearSpace;\r\n\r\n const useReverseDepthBuffer = scene.getEngine().useReverseDepthBuffer;\r\n\r\n this._renderTargetTexture.onBeforeRenderObservable.add((faceIndex: number) => {\r\n if (this._sceneUBOs) {\r\n scene.setSceneUniformBuffer(this._sceneUBOs[faceIndex]);\r\n scene.getSceneUniformBuffer().unbindEffect();\r\n }\r\n switch (faceIndex) {\r\n case 0:\r\n this._add.copyFromFloats(1, 0, 0);\r\n break;\r\n case 1:\r\n this._add.copyFromFloats(-1, 0, 0);\r\n break;\r\n case 2:\r\n this._add.copyFromFloats(0, this._invertYAxis ? 1 : -1, 0);\r\n break;\r\n case 3:\r\n this._add.copyFromFloats(0, this._invertYAxis ? -1 : 1, 0);\r\n break;\r\n case 4:\r\n this._add.copyFromFloats(0, 0, scene.useRightHandedSystem ? -1 : 1);\r\n break;\r\n case 5:\r\n this._add.copyFromFloats(0, 0, scene.useRightHandedSystem ? 1 : -1);\r\n break;\r\n }\r\n\r\n if (this._attachedMesh) {\r\n this.position.copyFrom(this._attachedMesh.getAbsolutePosition());\r\n }\r\n\r\n this.position.addToRef(this._add, this._target);\r\n\r\n const lookAtFunction = scene.useRightHandedSystem ? Matrix.LookAtRHToRef : Matrix.LookAtLHToRef;\r\n const perspectiveFunction = scene.useRightHandedSystem ? Matrix.PerspectiveFovRH : Matrix.PerspectiveFovLH;\r\n\r\n lookAtFunction(this.position, this._target, Vector3.Up(), this._viewMatrix);\r\n\r\n if (scene.activeCamera) {\r\n this._projectionMatrix = perspectiveFunction(\r\n Math.PI / 2,\r\n 1,\r\n useReverseDepthBuffer ? scene.activeCamera.maxZ : scene.activeCamera.minZ,\r\n useReverseDepthBuffer ? scene.activeCamera.minZ : scene.activeCamera.maxZ,\r\n this._scene.getEngine().isNDCHalfZRange\r\n );\r\n scene.setTransformMatrix(this._viewMatrix, this._projectionMatrix);\r\n if (scene.activeCamera.isRigCamera && !this._renderTargetTexture.activeCamera) {\r\n this._renderTargetTexture.activeCamera = scene.activeCamera.rigParent || null;\r\n }\r\n }\r\n scene._forcedViewPosition = this.position;\r\n });\r\n\r\n let currentApplyByPostProcess: boolean;\r\n\r\n this._renderTargetTexture.onBeforeBindObservable.add(() => {\r\n this._currentSceneUBO = scene.getSceneUniformBuffer();\r\n scene.getEngine()._debugPushGroup?.(`reflection probe generation for ${name}`, 1);\r\n currentApplyByPostProcess = this._scene.imageProcessingConfiguration.applyByPostProcess;\r\n if (linearSpace) {\r\n scene.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n });\r\n\r\n this._renderTargetTexture.onAfterUnbindObservable.add(() => {\r\n scene.imageProcessingConfiguration.applyByPostProcess = currentApplyByPostProcess;\r\n scene._forcedViewPosition = null;\r\n if (this._sceneUBOs) {\r\n scene.setSceneUniformBuffer(this._currentSceneUBO);\r\n }\r\n scene.updateTransformMatrix(true);\r\n scene.getEngine()._debugPopGroup?.(1);\r\n });\r\n }\r\n\r\n /** Gets or sets the number of samples to use for multi-sampling (0 by default). Required WebGL2 */\r\n public get samples(): number {\r\n return this._renderTargetTexture.samples;\r\n }\r\n\r\n public set samples(value: number) {\r\n this._renderTargetTexture.samples = value;\r\n }\r\n\r\n /** Gets or sets the refresh rate to use (on every frame by default) */\r\n public get refreshRate(): number {\r\n return this._renderTargetTexture.refreshRate;\r\n }\r\n\r\n public set refreshRate(value: number) {\r\n this._renderTargetTexture.refreshRate = value;\r\n }\r\n\r\n /**\r\n * Gets the hosting scene\r\n * @returns a Scene\r\n */\r\n public getScene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /** Gets the internal CubeTexture used to render to */\r\n public get cubeTexture(): RenderTargetTexture {\r\n return this._renderTargetTexture;\r\n }\r\n\r\n /** Gets the list of meshes to render */\r\n public get renderList(): Nullable<AbstractMesh[]> {\r\n return this._renderTargetTexture.renderList;\r\n }\r\n\r\n /**\r\n * Attach the probe to a specific mesh (Rendering will be done from attached mesh's position)\r\n * @param mesh defines the mesh to attach to\r\n */\r\n public attachToMesh(mesh: Nullable<AbstractMesh>): void {\r\n this._attachedMesh = mesh;\r\n }\r\n\r\n /**\r\n * Specifies whether or not the stencil and depth buffer are cleared between two rendering groups\r\n * @param renderingGroupId The rendering group id corresponding to its index\r\n * @param autoClearDepthStencil Automatically clears depth and stencil between groups if true.\r\n */\r\n public setRenderingAutoClearDepthStencil(renderingGroupId: number, autoClearDepthStencil: boolean): void {\r\n this._renderTargetTexture.setRenderingAutoClearDepthStencil(renderingGroupId, autoClearDepthStencil);\r\n }\r\n\r\n /**\r\n * Clean all associated resources\r\n */\r\n public dispose() {\r\n const index = this._scene.reflectionProbes.indexOf(this);\r\n\r\n if (index !== -1) {\r\n // Remove from the scene if found\r\n this._scene.reflectionProbes.splice(index, 1);\r\n }\r\n\r\n if (this._parentContainer) {\r\n const index = this._parentContainer.reflectionProbes.indexOf(this);\r\n if (index > -1) {\r\n this._parentContainer.reflectionProbes.splice(index, 1);\r\n }\r\n this._parentContainer = null;\r\n }\r\n\r\n if (this._renderTargetTexture) {\r\n this._renderTargetTexture.dispose();\r\n (<any>this._renderTargetTexture) = null;\r\n }\r\n\r\n if (this._sceneUBOs) {\r\n for (const ubo of this._sceneUBOs) {\r\n ubo.dispose();\r\n }\r\n this._sceneUBOs = [];\r\n }\r\n }\r\n\r\n /**\r\n * Converts the reflection probe information to a readable string for debug purpose.\r\n * @param fullDetails Supports for multiple levels of logging within scene loading\r\n * @returns the human readable reflection probe info\r\n */\r\n public toString(fullDetails?: boolean): string {\r\n let ret = \"Name: \" + this.name;\r\n\r\n if (fullDetails) {\r\n ret += \", position: \" + this.position.toString();\r\n\r\n if (this._attachedMesh) {\r\n ret += \", attached mesh: \" + this._attachedMesh.name;\r\n }\r\n }\r\n\r\n return ret;\r\n }\r\n\r\n /**\r\n * Get the class name of the refection probe.\r\n * @returns \"ReflectionProbe\"\r\n */\r\n public getClassName(): string {\r\n return \"ReflectionProbe\";\r\n }\r\n\r\n /**\r\n * Serialize the reflection probe to a JSON representation we can easily use in the respective Parse function.\r\n * @returns The JSON representation of the texture\r\n */\r\n public serialize(): any {\r\n const serializationObject = SerializationHelper.Serialize(this, this._renderTargetTexture.serialize());\r\n serializationObject.isReflectionProbe = true;\r\n serializationObject.metadata = this.metadata;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Parse the JSON representation of a reflection probe in order to recreate the reflection probe in the given scene.\r\n * @param parsedReflectionProbe Define the JSON representation of the reflection probe\r\n * @param scene Define the scene the parsed reflection probe should be instantiated in\r\n * @param rootUrl Define the root url of the parsing sequence in the case of relative dependencies\r\n * @returns The parsed reflection probe if successful\r\n */\r\n public static Parse(parsedReflectionProbe: any, scene: Scene, rootUrl: string): Nullable<ReflectionProbe> {\r\n let reflectionProbe: Nullable<ReflectionProbe> = null;\r\n if (scene.reflectionProbes) {\r\n for (let index = 0; index < scene.reflectionProbes.length; index++) {\r\n const rp = scene.reflectionProbes[index];\r\n if (rp.name === parsedReflectionProbe.name) {\r\n reflectionProbe = rp;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n reflectionProbe = SerializationHelper.Parse(\r\n () => reflectionProbe || new ReflectionProbe(parsedReflectionProbe.name, parsedReflectionProbe.renderTargetSize, scene, parsedReflectionProbe._generateMipMaps),\r\n parsedReflectionProbe,\r\n scene,\r\n rootUrl\r\n );\r\n reflectionProbe.cubeTexture._waitingRenderList = parsedReflectionProbe.renderList;\r\n\r\n if (parsedReflectionProbe._attachedMesh) {\r\n reflectionProbe.attachToMesh(scene.getMeshById(parsedReflectionProbe._attachedMesh));\r\n }\r\n\r\n if (parsedReflectionProbe.metadata) {\r\n reflectionProbe.metadata = parsedReflectionProbe.metadata;\r\n }\r\n\r\n return reflectionProbe;\r\n }\r\n}\r\n"]}
|
|
@@ -188,6 +188,7 @@ export class BoundingBoxRenderer {
|
|
|
188
188
|
* @param renderingGroupId defines the rendering group to render
|
|
189
189
|
*/
|
|
190
190
|
render(renderingGroupId) {
|
|
191
|
+
var _a, _b;
|
|
191
192
|
if (this.renderList.length === 0 || !this.enabled) {
|
|
192
193
|
return;
|
|
193
194
|
}
|
|
@@ -214,7 +215,7 @@ export class BoundingBoxRenderer {
|
|
|
214
215
|
const worldMatrix = Matrix.Scaling(diff.x, diff.y, diff.z).multiply(Matrix.Translation(median.x, median.y, median.z)).multiply(boundingBox.getWorldMatrix());
|
|
215
216
|
const useReverseDepthBuffer = engine.useReverseDepthBuffer;
|
|
216
217
|
if (this.showBackLines) {
|
|
217
|
-
const drawWrapperBack = boundingBox._drawWrapperBack
|
|
218
|
+
const drawWrapperBack = (_a = boundingBox._drawWrapperBack) !== null && _a !== void 0 ? _a : this._colorShader._getDrawWrapper();
|
|
218
219
|
this._colorShader._preBind(drawWrapperBack);
|
|
219
220
|
engine.bindBuffers(this._vertexBuffers, this._indexBuffer, this._colorShader.getEffect());
|
|
220
221
|
// Back
|
|
@@ -232,7 +233,7 @@ export class BoundingBoxRenderer {
|
|
|
232
233
|
// Draw order
|
|
233
234
|
engine.drawElementsType(Material.LineListDrawMode, 0, 24);
|
|
234
235
|
}
|
|
235
|
-
const drawWrapperFront = boundingBox._drawWrapperFront
|
|
236
|
+
const drawWrapperFront = (_b = boundingBox._drawWrapperFront) !== null && _b !== void 0 ? _b : this._colorShader._getDrawWrapper();
|
|
236
237
|
this._colorShader._preBind(drawWrapperFront);
|
|
237
238
|
engine.bindBuffers(this._vertexBuffers, this._indexBuffer, this._colorShader.getEffect());
|
|
238
239
|
// Front
|