@onerjs/core 8.42.6 → 8.42.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Animations/animatable.core.js +1 -1
- package/Animations/animatable.core.js.map +1 -1
- package/Animations/animatorAvatar.d.ts +5 -2
- package/Animations/animatorAvatar.js +42 -29
- package/Animations/animatorAvatar.js.map +1 -1
- package/Animations/runtimeAnimation.js +1 -1
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Audio/audioSceneComponent.js +1 -2
- package/Audio/audioSceneComponent.js.map +1 -1
- package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js +3 -3
- package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js.map +1 -1
- package/AudioV2/webAudio/webAudioEngine.js +1 -1
- package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
- package/Behaviors/Meshes/followBehavior.js +1 -1
- package/Behaviors/Meshes/followBehavior.js.map +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.js +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
- package/Bones/boneLookController.js +1 -1
- package/Bones/boneLookController.js.map +1 -1
- package/Buffers/buffer.js +1 -1
- package/Buffers/buffer.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +2 -2
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/geospatialCameraMouseWheelInput.d.ts +1 -2
- package/Cameras/Inputs/geospatialCameraMouseWheelInput.js +1 -2
- package/Cameras/Inputs/geospatialCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +0 -4
- package/Cameras/Inputs/geospatialCameraPointersInput.js +1 -5
- package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
- package/Cameras/camera.js +2 -2
- package/Cameras/camera.js.map +1 -1
- package/Cameras/cameraMovement.d.ts +1 -4
- package/Cameras/cameraMovement.js +1 -4
- package/Cameras/cameraMovement.js.map +1 -1
- package/Cameras/geospatialCamera.d.ts +22 -4
- package/Cameras/geospatialCamera.js +27 -9
- package/Cameras/geospatialCamera.js.map +1 -1
- package/Cameras/geospatialCameraMovement.d.ts +3 -3
- package/Cameras/geospatialCameraMovement.js +18 -18
- package/Cameras/geospatialCameraMovement.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.renderPass.js +1 -0
- package/Engines/AbstractEngine/abstractEngine.renderPass.js.map +1 -1
- package/Engines/Extensions/engine.query.js +1 -1
- package/Engines/Extensions/engine.query.js.map +1 -1
- package/Engines/Processors/shaderProcessor.js +2 -3
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGL/webGLRenderTargetWrapper.js +1 -1
- package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.debugging.d.ts +87 -0
- package/Engines/WebGPU/Extensions/engine.debugging.js +135 -21
- package/Engines/WebGPU/Extensions/engine.debugging.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js +1 -1
- package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.js +10 -5
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/engine.common.js +2 -2
- package/Engines/engine.common.js.map +1 -1
- package/Engines/engine.js +0 -1
- package/Engines/engine.js.map +1 -1
- package/Engines/engineFeatures.d.ts +0 -2
- package/Engines/engineFeatures.js.map +1 -1
- package/Engines/nullEngine.js +0 -1
- package/Engines/nullEngine.js.map +1 -1
- package/Engines/thinEngine.functions.js +1 -1
- package/Engines/thinEngine.functions.js.map +1 -1
- package/Engines/thinEngine.js +4 -6
- package/Engines/thinEngine.js.map +1 -1
- package/Engines/thinNativeEngine.js +2 -6
- package/Engines/thinNativeEngine.js.map +1 -1
- package/Engines/thinWebGPUEngine.d.ts +11 -4
- package/Engines/thinWebGPUEngine.js +58 -34
- package/Engines/thinWebGPUEngine.js.map +1 -1
- package/Engines/webgpuEngine.d.ts +3 -1
- package/Engines/webgpuEngine.js +30 -169
- package/Engines/webgpuEngine.js.map +1 -1
- package/FlowGraph/flowGraph.d.ts +1 -0
- package/FlowGraph/flowGraph.js.map +1 -1
- package/FlowGraph/flowGraphBlock.d.ts +1 -0
- package/FlowGraph/flowGraphBlock.js.map +1 -1
- package/FlowGraph/flowGraphContext.d.ts +1 -0
- package/FlowGraph/flowGraphContext.js.map +1 -1
- package/FlowGraph/flowGraphCoordinator.d.ts +1 -0
- package/FlowGraph/flowGraphCoordinator.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.d.ts +12 -1
- package/FrameGraph/Node/nodeRenderGraph.js +36 -2
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Passes/renderPass.js +0 -3
- package/FrameGraph/Passes/renderPass.js.map +1 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.js +1 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js +3 -0
- package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.d.ts +3 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js +14 -0
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +2 -2
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +20 -14
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +2 -3
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +5 -29
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.d.ts +3 -2
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +38 -14
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
- package/FrameGraph/frameGraph.js +3 -0
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphContext.js +1 -1
- package/FrameGraph/frameGraphContext.js.map +1 -1
- package/FrameGraph/frameGraphTask.d.ts +0 -2
- package/FrameGraph/frameGraphTask.js +15 -17
- package/FrameGraph/frameGraphTask.js.map +1 -1
- package/FrameGraph/frameGraphTextureManager.js +1 -1
- package/FrameGraph/frameGraphTextureManager.js.map +1 -1
- package/Gizmos/axisScaleGizmo.js +2 -2
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/cameraGizmo.d.ts +1 -1
- package/Gizmos/cameraGizmo.js +1 -1
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/gizmo.d.ts +4 -4
- package/Gizmos/gizmo.js +5 -5
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.d.ts +2 -2
- package/Gizmos/gizmoManager.js +1 -1
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/planeRotationGizmo.d.ts +2 -2
- package/Gizmos/planeRotationGizmo.js +2 -3
- package/Gizmos/planeRotationGizmo.js.map +1 -1
- package/Gizmos/positionGizmo.d.ts +1 -1
- package/Gizmos/positionGizmo.js +2 -2
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.d.ts +1 -1
- package/Gizmos/rotationGizmo.js +3 -3
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Gizmos/scaleGizmo.d.ts +1 -1
- package/Gizmos/scaleGizmo.js +1 -1
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Layers/glowLayer.js +1 -1
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/highlightLayer.js +1 -1
- package/Layers/highlightLayer.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.js +0 -1
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.d.ts +28 -1
- package/Lights/Shadows/shadowGenerator.js +77 -11
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/lightingVolume.d.ts +1 -0
- package/Lights/lightingVolume.js +10 -2
- package/Lights/lightingVolume.js.map +1 -1
- package/Loading/Plugins/babylonFileLoader.js +44 -14
- package/Loading/Plugins/babylonFileLoader.js.map +1 -1
- package/Loading/sceneLoader.js +1 -1
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.d.ts +12 -3
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.js +33 -8
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.js.map +1 -1
- package/Materials/Node/Blocks/Dual/fogBlock.js +1 -1
- package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js +1 -1
- package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/sheenBlock.js +1 -2
- package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
- package/Materials/Node/Blocks/cloudBlock.js +1 -1
- package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
- package/Materials/Node/Blocks/curveBlock.js +2 -3
- package/Materials/Node/Blocks/curveBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +1 -2
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.js +3 -5
- package/Materials/PBR/openpbrMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +2 -3
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js +0 -1
- package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
- package/Materials/Textures/cubeTexture.js +1 -1
- package/Materials/Textures/cubeTexture.js.map +1 -1
- package/Materials/Textures/htmlElementTexture.js +2 -2
- package/Materials/Textures/htmlElementTexture.js.map +1 -1
- package/Materials/Textures/multiRenderTarget.js +1 -1
- package/Materials/Textures/multiRenderTarget.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.js +13 -2
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/effect.js +2 -1
- package/Materials/effect.js.map +1 -1
- package/Materials/materialHelper.functions.js +1 -1
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/multiMaterial.js +1 -1
- package/Materials/multiMaterial.js.map +1 -1
- package/Materials/standardMaterial.js +1 -2
- package/Materials/standardMaterial.js.map +1 -1
- package/Materials/uniformBuffer.d.ts +0 -4
- package/Materials/uniformBuffer.js +0 -8
- package/Materials/uniformBuffer.js.map +1 -1
- package/Maths/index.d.ts +2 -0
- package/Maths/index.js +2 -0
- package/Maths/index.js.map +1 -1
- package/Maths/math.geospatial.d.ts +27 -0
- package/Maths/math.geospatial.functions.d.ts +33 -0
- package/Maths/math.geospatial.functions.js +60 -0
- package/Maths/math.geospatial.functions.js.map +1 -0
- package/Maths/math.geospatial.js +2 -0
- package/Maths/math.geospatial.js.map +1 -0
- package/Maths/math.path.js +1 -1
- package/Maths/math.path.js.map +1 -1
- package/Maths/math.scalar.functions.js +3 -3
- package/Maths/math.scalar.functions.js.map +1 -1
- package/Maths/math.vector.js +1 -1
- package/Maths/math.vector.js.map +1 -1
- package/Meshes/Builders/boxBuilder.js +1 -2
- package/Meshes/Builders/boxBuilder.js.map +1 -1
- package/Meshes/Builders/cylinderBuilder.js +2 -2
- package/Meshes/Builders/cylinderBuilder.js.map +1 -1
- package/Meshes/Builders/decalBuilder.js +1 -2
- package/Meshes/Builders/decalBuilder.js.map +1 -1
- package/Meshes/Builders/latheBuilder.js +2 -2
- package/Meshes/Builders/latheBuilder.js.map +1 -1
- package/Meshes/Builders/linesBuilder.js +11 -15
- package/Meshes/Builders/linesBuilder.js.map +1 -1
- package/Meshes/Builders/polygonBuilder.js +6 -6
- package/Meshes/Builders/polygonBuilder.js.map +1 -1
- package/Meshes/Builders/polyhedronBuilder.js +2 -2
- package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
- package/Meshes/Builders/ribbonBuilder.js +6 -6
- package/Meshes/Builders/ribbonBuilder.js.map +1 -1
- package/Meshes/Builders/shapeBuilder.js +2 -3
- package/Meshes/Builders/shapeBuilder.js.map +1 -1
- package/Meshes/Builders/tiledBoxBuilder.js +1 -1
- package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
- package/Meshes/Builders/tiledPlaneBuilder.js +1 -1
- package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineMesh.js +1 -2
- package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js +1 -1
- package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js.map +1 -1
- package/Meshes/Node/Blocks/mappingBlock.js +1 -1
- package/Meshes/Node/Blocks/mappingBlock.js.map +1 -1
- package/Meshes/abstractMesh.d.ts +4 -0
- package/Meshes/abstractMesh.js +14 -10
- package/Meshes/abstractMesh.js.map +1 -1
- package/Meshes/csg.js +1 -1
- package/Meshes/csg.js.map +1 -1
- package/Meshes/csg2.js +1 -1
- package/Meshes/csg2.js.map +1 -1
- package/Meshes/geodesicMesh.js +11 -13
- package/Meshes/geodesicMesh.js.map +1 -1
- package/Meshes/geometry.js +2 -2
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/groundMesh.js +7 -7
- package/Meshes/groundMesh.js.map +1 -1
- package/Meshes/mesh.d.ts +2 -0
- package/Meshes/mesh.js +22 -8
- package/Meshes/mesh.js.map +1 -1
- package/Meshes/mesh.vertexData.js +22 -22
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/meshSimplification.js +1 -1
- package/Meshes/meshSimplification.js.map +1 -1
- package/Meshes/polygonMesh.js +1 -1
- package/Meshes/polygonMesh.js.map +1 -1
- package/Meshes/trailMesh.js +1 -1
- package/Meshes/trailMesh.js.map +1 -1
- package/Misc/HighDynamicRange/hdr.js +4 -6
- package/Misc/HighDynamicRange/hdr.js.map +1 -1
- package/Misc/HighDynamicRange/panoramaToCubemap.js +1 -1
- package/Misc/HighDynamicRange/panoramaToCubemap.js.map +1 -1
- package/Misc/basisWorker.js +1 -1
- package/Misc/basisWorker.js.map +1 -1
- package/Misc/environmentTextureTools.js +1 -1
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/meshExploder.js +1 -2
- package/Misc/meshExploder.js.map +1 -1
- package/Misc/tga.js +2 -2
- package/Misc/tga.js.map +1 -1
- package/Misc/timer.js +4 -2
- package/Misc/timer.js.map +1 -1
- package/Misc/tools.d.ts +7 -0
- package/Misc/tools.js +20 -6
- package/Misc/tools.js.map +1 -1
- package/Morph/morphTargetManager.js +1 -1
- package/Morph/morphTargetManager.js.map +1 -1
- package/Navigation/INavigationEngine.d.ts +2 -2
- package/Navigation/INavigationEngine.js.map +1 -1
- package/Navigation/Plugins/recastJSPlugin.d.ts +2 -2
- package/Navigation/Plugins/recastJSPlugin.js +14 -5
- package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
- package/Particles/Node/Blocks/Update/updateNoiseBlock.js +1 -1
- package/Particles/Node/Blocks/Update/updateNoiseBlock.js.map +1 -1
- package/Particles/Node/Blocks/particleSourceTextureBlock.d.ts +11 -1
- package/Particles/Node/Blocks/particleSourceTextureBlock.js +25 -11
- package/Particles/Node/Blocks/particleSourceTextureBlock.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.helper.js +3 -3
- package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.js +1 -1
- package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
- package/Particles/computeShaderParticleSystem.js +2 -0
- package/Particles/computeShaderParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +14 -0
- package/Particles/gpuParticleSystem.js +94 -12
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/particleSystem.js +4 -1
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/pointsCloudSystem.js +46 -47
- package/Particles/pointsCloudSystem.js.map +1 -1
- package/Particles/solidParticleSystem.js +5 -6
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.js +3 -4
- package/Particles/thinParticleSystem.js.map +1 -1
- package/Particles/webgl2ParticleSystem.js +2 -1
- package/Particles/webgl2ParticleSystem.js.map +1 -1
- package/Physics/castingResult.d.ts +4 -1
- package/Physics/castingResult.js +1 -1
- package/Physics/castingResult.js.map +1 -1
- package/Physics/joinedPhysicsEngineComponent.js +1 -1
- package/Physics/joinedPhysicsEngineComponent.js.map +1 -1
- package/Physics/physicsHelper.d.ts +8 -8
- package/Physics/physicsHelper.js +7 -7
- package/Physics/physicsHelper.js.map +1 -1
- package/Physics/shapeCastResult.d.ts +4 -0
- package/Physics/shapeCastResult.js +7 -0
- package/Physics/shapeCastResult.js.map +1 -1
- package/Physics/v1/Plugins/ammoJSPlugin.js +0 -8
- package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
- package/Physics/v2/IPhysicsEnginePlugin.d.ts +51 -4
- package/Physics/v2/IPhysicsEnginePlugin.js +12 -12
- package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
- package/Physics/v2/characterController.js +4 -8
- package/Physics/v2/characterController.js.map +1 -1
- package/Physics/v2/physicsBody.js.map +1 -1
- package/Physics/v2/physicsConstraint.d.ts +1 -1
- package/Physics/v2/physicsConstraint.js +1 -1
- package/Physics/v2/physicsConstraint.js.map +1 -1
- package/Physics/v2/physicsEngine.d.ts +0 -5
- package/Physics/v2/physicsEngine.js +0 -5
- package/Physics/v2/physicsEngine.js.map +1 -1
- package/Physics/v2/physicsEngineComponent.d.ts +1 -1
- package/Physics/v2/physicsEngineComponent.js.map +1 -1
- package/Physics/v2/physicsMaterial.d.ts +6 -0
- package/Physics/v2/physicsMaterial.js +2 -2
- package/Physics/v2/physicsMaterial.js.map +1 -1
- package/Physics/v2/ragdoll.js +1 -2
- package/Physics/v2/ragdoll.js.map +1 -1
- package/PostProcesses/postProcess.js +3 -3
- package/PostProcesses/postProcess.js.map +1 -1
- package/PostProcesses/thinDepthOfFieldEffect.js +2 -2
- package/PostProcesses/thinDepthOfFieldEffect.js.map +1 -1
- package/Probes/reflectionProbe.js +0 -1
- package/Probes/reflectionProbe.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +0 -5
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +4 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
- package/Rendering/depthRenderer.js +0 -11
- package/Rendering/depthRenderer.js.map +1 -1
- package/Rendering/depthRendererSceneComponent.js +1 -1
- package/Rendering/depthRendererSceneComponent.js.map +1 -1
- package/Rendering/edgesRenderer.js +1 -0
- package/Rendering/edgesRenderer.js.map +1 -1
- package/Rendering/geometryBufferRenderer.js +0 -1
- package/Rendering/geometryBufferRenderer.js.map +1 -1
- package/Rendering/objectRenderer.js +15 -9
- package/Rendering/objectRenderer.js.map +1 -1
- package/Rendering/renderingGroup.d.ts +1 -1
- package/Rendering/renderingGroup.js +1 -1
- package/Rendering/renderingGroup.js.map +1 -1
- package/Rendering/renderingManager.d.ts +1 -1
- package/Rendering/renderingManager.js.map +1 -1
- package/Rendering/thinDepthPeelingRenderer.js +1 -1
- package/Rendering/thinDepthPeelingRenderer.js.map +1 -1
- package/Rendering/utilityLayerRenderer.js +1 -1
- package/Rendering/utilityLayerRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/screenSpaceRayTrace.js +18 -8
- package/Shaders/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
- package/Shaders/gpuRenderParticles.vertex.js +4 -0
- package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
- package/Shaders/gpuUpdateParticles.vertex.js +15 -3
- package/Shaders/gpuUpdateParticles.vertex.js.map +1 -1
- package/Shaders/iblVoxelGrid.fragment.js +4 -1
- package/Shaders/iblVoxelGrid.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/screenSpaceRayTrace.js +18 -7
- package/ShadersWGSL/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
- package/ShadersWGSL/background.vertex.js +8 -8
- package/ShadersWGSL/background.vertex.js.map +1 -1
- package/ShadersWGSL/boundingBoxRenderer.vertex.js +2 -2
- package/ShadersWGSL/boundingBoxRenderer.vertex.js.map +1 -1
- package/ShadersWGSL/clearQuad.vertex.js +1 -1
- package/ShadersWGSL/clearQuad.vertex.js.map +1 -1
- package/ShadersWGSL/color.vertex.js +1 -1
- package/ShadersWGSL/color.vertex.js.map +1 -1
- package/ShadersWGSL/depth.vertex.js +3 -3
- package/ShadersWGSL/depth.vertex.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +2 -2
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js +2 -2
- package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +2 -2
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
- package/ShadersWGSL/fxaa.vertex.js +1 -1
- package/ShadersWGSL/fxaa.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js +3 -3
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js +3 -3
- package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -1
- package/ShadersWGSL/geometry.vertex.js +4 -4
- package/ShadersWGSL/geometry.vertex.js.map +1 -1
- package/ShadersWGSL/glowMapGeneration.vertex.js +4 -4
- package/ShadersWGSL/glowMapGeneration.vertex.js.map +1 -1
- package/ShadersWGSL/glowMapMerge.vertex.js +1 -1
- package/ShadersWGSL/glowMapMerge.vertex.js.map +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js +16 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
- package/ShadersWGSL/greasedLine.vertex.js +10 -4
- package/ShadersWGSL/greasedLine.vertex.js.map +1 -1
- package/ShadersWGSL/hdrFiltering.vertex.js +1 -1
- package/ShadersWGSL/hdrFiltering.vertex.js.map +1 -1
- package/ShadersWGSL/hdrIrradianceFiltering.vertex.js +1 -1
- package/ShadersWGSL/hdrIrradianceFiltering.vertex.js.map +1 -1
- package/ShadersWGSL/iblVoxelGrid.vertex.js +2 -2
- package/ShadersWGSL/iblVoxelGrid.vertex.js.map +1 -1
- package/ShadersWGSL/iblVoxelSlabDebug.vertex.js +1 -1
- package/ShadersWGSL/iblVoxelSlabDebug.vertex.js.map +1 -1
- package/ShadersWGSL/kernelBlur.vertex.js +2 -2
- package/ShadersWGSL/kernelBlur.vertex.js.map +1 -1
- package/ShadersWGSL/layer.vertex.js +1 -1
- package/ShadersWGSL/layer.vertex.js.map +1 -1
- package/ShadersWGSL/lensFlare.vertex.js +1 -1
- package/ShadersWGSL/lensFlare.vertex.js.map +1 -1
- package/ShadersWGSL/line.vertex.js +2 -2
- package/ShadersWGSL/line.vertex.js.map +1 -1
- package/ShadersWGSL/meshUVSpaceRenderer.vertex.js +2 -2
- package/ShadersWGSL/meshUVSpaceRenderer.vertex.js.map +1 -1
- package/ShadersWGSL/meshUVSpaceRendererFinaliser.vertex.js +1 -1
- package/ShadersWGSL/meshUVSpaceRendererFinaliser.vertex.js.map +1 -1
- package/ShadersWGSL/meshUVSpaceRendererMasker.vertex.js +1 -1
- package/ShadersWGSL/meshUVSpaceRendererMasker.vertex.js.map +1 -1
- package/ShadersWGSL/particles.vertex.js +9 -9
- package/ShadersWGSL/particles.vertex.js.map +1 -1
- package/ShadersWGSL/picking.vertex.js +2 -2
- package/ShadersWGSL/picking.vertex.js.map +1 -1
- package/ShadersWGSL/procedural.vertex.js +1 -1
- package/ShadersWGSL/procedural.vertex.js.map +1 -1
- package/ShadersWGSL/shadowMap.vertex.js +4 -4
- package/ShadersWGSL/shadowMap.vertex.js.map +1 -1
- package/ShadersWGSL/sprites.vertex.js +3 -3
- package/ShadersWGSL/sprites.vertex.js.map +1 -1
- package/Sprites/spriteManager.js +4 -4
- package/Sprites/spriteManager.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.js +2 -2
- package/XR/features/WebXRAnchorSystem.js.map +1 -1
- package/XR/features/WebXRControllerPhysics.js +0 -2
- package/XR/features/WebXRControllerPhysics.js.map +1 -1
- package/XR/features/WebXRHandTracking.js +4 -7
- package/XR/features/WebXRHandTracking.js.map +1 -1
- package/XR/features/WebXRNearInteraction.js +1 -1
- package/XR/features/WebXRNearInteraction.js.map +1 -1
- package/XR/motionController/webXRMicrosoftMixedRealityController.js +1 -1
- package/XR/motionController/webXRMicrosoftMixedRealityController.js.map +1 -1
- package/XR/motionController/webXROculusTouchMotionController.js +1 -1
- package/XR/motionController/webXROculusTouchMotionController.js.map +1 -1
- package/XR/webXRFeaturesManager.js +1 -1
- package/XR/webXRFeaturesManager.js.map +1 -1
- package/assetContainer.js +1 -1
- package/assetContainer.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +16 -0
- package/scene.js +30 -1
- package/scene.js.map +1 -1
- package/sceneComponent.js +1 -1
- package/sceneComponent.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssao2RenderingPipelineTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraph, FrameGraphTextureHandle, Camera, FrameGraphTextureCreationOptions } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ThinSSAO2RenderingPipeline } from \"core/PostProcesses/RenderPipeline/Pipelines/thinSSAO2RenderingPipeline\";\r\nimport { FrameGraphSSAO2Task } from \"./ssao2Task\";\r\nimport { FrameGraphSSAO2BlurTask } from \"./ssao2BlurTask\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\n\r\n/**\r\n * Task which applies a SSAO2 post process.\r\n */\r\nexport class FrameGraphSSAO2RenderingPipelineTask extends FrameGraphTask {\r\n /**\r\n * The source texture to apply the SSAO2 effect on.\r\n */\r\n public sourceTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The sampling mode to use for the source texture.\r\n */\r\n public sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n /**\r\n * The alpha mode to use when applying the SSAO2 effect.\r\n */\r\n public get alphaMode() {\r\n return this._ssaoCombine.alphaMode;\r\n }\r\n\r\n public set alphaMode(mode: number) {\r\n this._ssaoCombine.alphaMode = mode;\r\n }\r\n\r\n /**\r\n * The depth texture used by the SSAO2 effect (Z coordinate in camera view space).\r\n */\r\n public depthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The normal texture used by the SSAO2 effect (normal vector in camera view space).\r\n */\r\n public normalTexture: FrameGraphTextureHandle;\r\n\r\n private _camera: Camera;\r\n\r\n /**\r\n * The camera used to render the scene.\r\n */\r\n public get camera() {\r\n return this._camera;\r\n }\r\n\r\n public set camera(camera: Camera) {\r\n if (camera === this._camera) {\r\n return;\r\n }\r\n\r\n this._camera = camera;\r\n\r\n this.ssao.camera = camera;\r\n }\r\n\r\n /**\r\n * The target texture to render the SSAO2 effect to.\r\n */\r\n public targetTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output texture of the SSAO2 effect.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The SSAO2 Rendering pipeline.\r\n */\r\n public readonly ssao: ThinSSAO2RenderingPipeline;\r\n\r\n /**\r\n * The name of the task.\r\n */\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(name: string) {\r\n this._name = name;\r\n if (this._ssao) {\r\n this._ssao.name = `${name} SSAO2 main`;\r\n }\r\n if (this._ssaoBlurX) {\r\n this._ssaoBlurX.name = `${name} SSAO2 Blur X`;\r\n }\r\n if (this._ssaoBlurY) {\r\n this._ssaoBlurY.name = `${name} SSAO2 Blur Y`;\r\n }\r\n if (this._ssaoCombine) {\r\n this._ssaoCombine.name = `${name} SSAO2 Combine`;\r\n }\r\n }\r\n\r\n /**\r\n * The ratio between the SSAO texture size and the source texture size\r\n */\r\n public readonly ratioSSAO: number;\r\n\r\n /**\r\n * The ratio between the SSAO blur texture size and the source texture size\r\n */\r\n public readonly ratioBlur: number;\r\n\r\n /**\r\n * The texture type used by the different post processes created by SSAO2.\r\n * It's a read-only property. If you want to change it, you must recreate the task and pass the appropriate texture type to the constructor.\r\n */\r\n public readonly textureType: number;\r\n\r\n private readonly _ssao: FrameGraphSSAO2Task;\r\n private readonly _ssaoBlurX: FrameGraphSSAO2BlurTask;\r\n private readonly _ssaoBlurY: FrameGraphSSAO2BlurTask;\r\n private readonly _ssaoCombine: FrameGraphPostProcessTask;\r\n\r\n /**\r\n * Constructs a SSAO2 rendering pipeline task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph this task belongs to.\r\n * @param ratioSSAO The ratio between the SSAO texture size and the source texture size\r\n * @param ratioBlur The ratio between the SSAO blur texture size and the source texture size\r\n * @param textureType The texture type used by the different post processes created by SSAO2 (default: Constants.TEXTURETYPE_UNSIGNED_BYTE)\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, ratioSSAO: number, ratioBlur: number, textureType = Constants.TEXTURETYPE_UNSIGNED_BYTE) {\r\n super(name, frameGraph);\r\n\r\n this.ratioSSAO = ratioSSAO;\r\n this.ratioBlur = ratioBlur;\r\n this.textureType = textureType;\r\n\r\n this.ssao = new ThinSSAO2RenderingPipeline(name, frameGraph.scene);\r\n\r\n this._ssao = new FrameGraphSSAO2Task(`${name} SSAO2 main`, this._frameGraph, this.ssao._ssaoPostProcess);\r\n this._ssaoBlurX = new FrameGraphSSAO2BlurTask(`${name} SSAO2 Blur X`, this._frameGraph, true, this.ssao._ssaoBlurXPostProcess);\r\n this._ssaoBlurY = new FrameGraphSSAO2BlurTask(`${name} SSAO2 Blur Y`, this._frameGraph, false, this.ssao._ssaoBlurYPostProcess);\r\n this._ssaoCombine = new FrameGraphPostProcessTask(`${name} SSAO2 Combine`, this._frameGraph, this.ssao._ssaoCombinePostProcess);\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override isReady() {\r\n return this.ssao.isReady();\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphSSAO2RenderingPipelineTask\";\r\n }\r\n\r\n public record(): void {\r\n if (this.sourceTexture === undefined || this.depthTexture === undefined || this.normalTexture === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphSSAO2RenderingPipelineTask \"${this.name}\": sourceTexture, depthTexture, normalTexture and camera are required`);\r\n }\r\n\r\n const sourceTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.sourceTexture);\r\n\r\n this._ssao.sourceTexture = this.sourceTexture;\r\n this._ssao.sourceSamplingMode = this.sourceSamplingMode;\r\n this._ssao.camera = this.camera;\r\n this._ssao.depthTexture = this.depthTexture;\r\n this._ssao.normalTexture = this.normalTexture;\r\n\r\n const textureSize = {\r\n width: Math.floor(sourceTextureDescription.size.width * this.ratioSSAO) || 1,\r\n height: Math.floor(sourceTextureDescription.size.height * this.ratioSSAO) || 1,\r\n };\r\n const textureCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: textureSize,\r\n options: {\r\n createMipMaps: false,\r\n types: [this.textureType],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n samples: 1,\r\n useSRGBBuffers: [false],\r\n labels: [\"\"],\r\n },\r\n sizeIsPercentage: false,\r\n };\r\n\r\n const ssaoTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._ssao.name, textureCreationOptions);\r\n\r\n // SSAO main post process\r\n this._ssao.targetTexture = ssaoTextureHandle;\r\n this._ssao.record(true);\r\n\r\n // SSAO Blur X & Y\r\n textureSize.width = Math.floor(sourceTextureDescription.size.width * this.ratioBlur) || 1;\r\n textureSize.height = Math.floor(sourceTextureDescription.size.height * this.ratioBlur) || 1;\r\n\r\n const sourceTextureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.sourceTexture);\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture, this.name + \" Output\", sourceTextureCreationOptions);\r\n\r\n const blurXTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._ssaoBlurX.name, textureCreationOptions);\r\n\r\n this._ssaoBlurX.sourceTexture = ssaoTextureHandle!;\r\n this._ssaoBlurX.depthTexture = this.depthTexture;\r\n this._ssaoBlurX.sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._ssaoBlurX.targetTexture = blurXTextureHandle;\r\n this._ssaoBlurX.record(true);\r\n\r\n const blurYTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._ssaoBlurY.name, textureCreationOptions);\r\n\r\n this._ssaoBlurY.sourceTexture = blurXTextureHandle;\r\n this._ssaoBlurY.depthTexture = this.depthTexture;\r\n this._ssaoBlurY.sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._ssaoBlurY.targetTexture = blurYTextureHandle;\r\n this._ssaoBlurY.record(true);\r\n\r\n // SSAO Combine\r\n this._ssaoCombine.sourceTexture = this.sourceTexture;\r\n this._ssaoCombine.sourceSamplingMode = this.sourceSamplingMode;\r\n this._ssaoCombine.targetTexture = this.outputTexture;\r\n const combinerPass = this._ssaoCombine.record(\r\n true,\r\n (context) => {\r\n context.setTextureSamplingMode(this.sourceTexture, this.sourceSamplingMode);\r\n context.setTextureSamplingMode(blurYTextureHandle, Constants.TEXTURE_BILINEAR_SAMPLINGMODE);\r\n },\r\n (context) => {\r\n context.bindTextureHandle(this._ssaoCombine.drawWrapper.effect!, \"textureSampler\", blurYTextureHandle);\r\n context.bindTextureHandle(this._ssaoCombine.drawWrapper.effect!, \"originalColor\", this.sourceTexture);\r\n }\r\n );\r\n\r\n combinerPass.addDependencies(blurYTextureHandle);\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.addDependencies(this.sourceTexture);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n passDisabled.setExecuteFunc((context) => {\r\n if (this.alphaMode === Constants.ALPHA_DISABLE) {\r\n context.copyTexture(this.sourceTexture);\r\n }\r\n });\r\n }\r\n\r\n public override dispose(): void {\r\n this._ssao.dispose();\r\n this._ssaoBlurX.dispose();\r\n this._ssaoBlurY.dispose();\r\n this._ssaoCombine.dispose();\r\n this.ssao.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ssao2RenderingPipelineTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraph, FrameGraphTextureHandle, Camera, FrameGraphTextureCreationOptions } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ThinSSAO2RenderingPipeline } from \"core/PostProcesses/RenderPipeline/Pipelines/thinSSAO2RenderingPipeline\";\r\nimport { FrameGraphSSAO2Task } from \"./ssao2Task\";\r\nimport { FrameGraphSSAO2BlurTask } from \"./ssao2BlurTask\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\n\r\n/**\r\n * Task which applies a SSAO2 post process.\r\n */\r\nexport class FrameGraphSSAO2RenderingPipelineTask extends FrameGraphTask {\r\n /**\r\n * The source texture to apply the SSAO2 effect on.\r\n */\r\n public sourceTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The sampling mode to use for the source texture.\r\n */\r\n public sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n /**\r\n * The alpha mode to use when applying the SSAO2 effect.\r\n */\r\n public get alphaMode() {\r\n return this._ssaoCombine.alphaMode;\r\n }\r\n\r\n public set alphaMode(mode: number) {\r\n this._ssaoCombine.alphaMode = mode;\r\n }\r\n\r\n /**\r\n * The depth texture used by the SSAO2 effect (Z coordinate in camera view space).\r\n */\r\n public depthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The normal texture used by the SSAO2 effect (normal vector in camera view space).\r\n */\r\n public normalTexture: FrameGraphTextureHandle;\r\n\r\n private _camera: Camera;\r\n\r\n /**\r\n * The camera used to render the scene.\r\n */\r\n public get camera() {\r\n return this._camera;\r\n }\r\n\r\n public set camera(camera: Camera) {\r\n if (camera === this._camera) {\r\n return;\r\n }\r\n\r\n this._camera = camera;\r\n\r\n this.ssao.camera = camera;\r\n if (this._ssao) {\r\n this._ssao.camera = camera;\r\n }\r\n }\r\n\r\n /**\r\n * The target texture to render the SSAO2 effect to.\r\n */\r\n public targetTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output texture of the SSAO2 effect.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The SSAO2 Rendering pipeline.\r\n */\r\n public readonly ssao: ThinSSAO2RenderingPipeline;\r\n\r\n /**\r\n * The name of the task.\r\n */\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(name: string) {\r\n this._name = name;\r\n if (this._ssao) {\r\n this._ssao.name = `${name} SSAO2 main`;\r\n }\r\n if (this._ssaoBlurX) {\r\n this._ssaoBlurX.name = `${name} SSAO2 Blur X`;\r\n }\r\n if (this._ssaoBlurY) {\r\n this._ssaoBlurY.name = `${name} SSAO2 Blur Y`;\r\n }\r\n if (this._ssaoCombine) {\r\n this._ssaoCombine.name = `${name} SSAO2 Combine`;\r\n }\r\n }\r\n\r\n /**\r\n * The ratio between the SSAO texture size and the source texture size\r\n */\r\n public readonly ratioSSAO: number;\r\n\r\n /**\r\n * The ratio between the SSAO blur texture size and the source texture size\r\n */\r\n public readonly ratioBlur: number;\r\n\r\n /**\r\n * The texture type used by the different post processes created by SSAO2.\r\n * It's a read-only property. If you want to change it, you must recreate the task and pass the appropriate texture type to the constructor.\r\n */\r\n public readonly textureType: number;\r\n\r\n private readonly _ssao: FrameGraphSSAO2Task;\r\n private readonly _ssaoBlurX: FrameGraphSSAO2BlurTask;\r\n private readonly _ssaoBlurY: FrameGraphSSAO2BlurTask;\r\n private readonly _ssaoCombine: FrameGraphPostProcessTask;\r\n\r\n /**\r\n * Constructs a SSAO2 rendering pipeline task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph this task belongs to.\r\n * @param ratioSSAO The ratio between the SSAO texture size and the source texture size\r\n * @param ratioBlur The ratio between the SSAO blur texture size and the source texture size\r\n * @param textureType The texture type used by the different post processes created by SSAO2 (default: Constants.TEXTURETYPE_UNSIGNED_BYTE)\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, ratioSSAO: number, ratioBlur: number, textureType = Constants.TEXTURETYPE_UNSIGNED_BYTE) {\r\n super(name, frameGraph);\r\n\r\n this.ratioSSAO = ratioSSAO;\r\n this.ratioBlur = ratioBlur;\r\n this.textureType = textureType;\r\n\r\n this.ssao = new ThinSSAO2RenderingPipeline(name, frameGraph.scene);\r\n\r\n this._ssao = new FrameGraphSSAO2Task(`${name} SSAO2 main`, this._frameGraph, this.ssao._ssaoPostProcess);\r\n this._ssaoBlurX = new FrameGraphSSAO2BlurTask(`${name} SSAO2 Blur X`, this._frameGraph, true, this.ssao._ssaoBlurXPostProcess);\r\n this._ssaoBlurY = new FrameGraphSSAO2BlurTask(`${name} SSAO2 Blur Y`, this._frameGraph, false, this.ssao._ssaoBlurYPostProcess);\r\n this._ssaoCombine = new FrameGraphPostProcessTask(`${name} SSAO2 Combine`, this._frameGraph, this.ssao._ssaoCombinePostProcess);\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override isReady() {\r\n return this.ssao.isReady();\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphSSAO2RenderingPipelineTask\";\r\n }\r\n\r\n public record(): void {\r\n if (this.sourceTexture === undefined || this.depthTexture === undefined || this.normalTexture === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphSSAO2RenderingPipelineTask \"${this.name}\": sourceTexture, depthTexture, normalTexture and camera are required`);\r\n }\r\n\r\n const sourceTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.sourceTexture);\r\n\r\n this._ssao.sourceTexture = this.sourceTexture;\r\n this._ssao.sourceSamplingMode = this.sourceSamplingMode;\r\n this._ssao.camera = this.camera;\r\n this._ssao.depthTexture = this.depthTexture;\r\n this._ssao.normalTexture = this.normalTexture;\r\n\r\n const textureSize = {\r\n width: Math.floor(sourceTextureDescription.size.width * this.ratioSSAO) || 1,\r\n height: Math.floor(sourceTextureDescription.size.height * this.ratioSSAO) || 1,\r\n };\r\n const textureCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: textureSize,\r\n options: {\r\n createMipMaps: false,\r\n types: [this.textureType],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n samples: 1,\r\n useSRGBBuffers: [false],\r\n labels: [\"\"],\r\n },\r\n sizeIsPercentage: false,\r\n };\r\n\r\n const ssaoTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._ssao.name, textureCreationOptions);\r\n\r\n // SSAO main post process\r\n this._ssao.targetTexture = ssaoTextureHandle;\r\n this._ssao.record(true);\r\n\r\n // SSAO Blur X & Y\r\n textureSize.width = Math.floor(sourceTextureDescription.size.width * this.ratioBlur) || 1;\r\n textureSize.height = Math.floor(sourceTextureDescription.size.height * this.ratioBlur) || 1;\r\n\r\n const sourceTextureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.sourceTexture);\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture, this.name + \" Output\", sourceTextureCreationOptions);\r\n\r\n const blurXTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._ssaoBlurX.name, textureCreationOptions);\r\n\r\n this._ssaoBlurX.sourceTexture = ssaoTextureHandle!;\r\n this._ssaoBlurX.depthTexture = this.depthTexture;\r\n this._ssaoBlurX.sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._ssaoBlurX.targetTexture = blurXTextureHandle;\r\n this._ssaoBlurX.record(true);\r\n\r\n const blurYTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._ssaoBlurY.name, textureCreationOptions);\r\n\r\n this._ssaoBlurY.sourceTexture = blurXTextureHandle;\r\n this._ssaoBlurY.depthTexture = this.depthTexture;\r\n this._ssaoBlurY.sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._ssaoBlurY.targetTexture = blurYTextureHandle;\r\n this._ssaoBlurY.record(true);\r\n\r\n // SSAO Combine\r\n this._ssaoCombine.sourceTexture = this.sourceTexture;\r\n this._ssaoCombine.sourceSamplingMode = this.sourceSamplingMode;\r\n this._ssaoCombine.targetTexture = this.outputTexture;\r\n const combinerPass = this._ssaoCombine.record(\r\n true,\r\n (context) => {\r\n context.setTextureSamplingMode(this.sourceTexture, this.sourceSamplingMode);\r\n context.setTextureSamplingMode(blurYTextureHandle, Constants.TEXTURE_BILINEAR_SAMPLINGMODE);\r\n },\r\n (context) => {\r\n context.bindTextureHandle(this._ssaoCombine.drawWrapper.effect!, \"textureSampler\", blurYTextureHandle);\r\n context.bindTextureHandle(this._ssaoCombine.drawWrapper.effect!, \"originalColor\", this.sourceTexture);\r\n }\r\n );\r\n\r\n combinerPass.addDependencies(blurYTextureHandle);\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.addDependencies(this.sourceTexture);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n passDisabled.setExecuteFunc((context) => {\r\n if (this.alphaMode === Constants.ALPHA_DISABLE) {\r\n context.copyTexture(this.sourceTexture);\r\n }\r\n });\r\n }\r\n\r\n public override dispose(): void {\r\n this._ssao.dispose();\r\n this._ssaoBlurX.dispose();\r\n this._ssaoBlurY.dispose();\r\n this._ssaoCombine.dispose();\r\n this.ssao.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssrRenderingPipelineTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraph, FrameGraphTextureHandle, Camera, FrameGraphTextureCreationOptions } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ThinSSRRenderingPipeline } from \"core/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline\";\r\nimport { FrameGraphSSRTask } from \"./ssrTask\";\r\nimport { FrameGraphSSRBlurTask } from \"./ssrBlurTask\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\n\r\n/**\r\n * Task which applies a SSR post process.\r\n */\r\nexport class FrameGraphSSRRenderingPipelineTask extends FrameGraphTask {\r\n /**\r\n * The source texture to apply the SSR effect on.\r\n */\r\n public sourceTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The sampling mode to use for the source texture.\r\n */\r\n public sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n /**\r\n * The alpha mode to use when applying the SSR effect.\r\n */\r\n public get alphaMode() {\r\n return this._ssrBlurCombiner.alphaMode;\r\n }\r\n\r\n public set alphaMode(mode: number) {\r\n this._ssrBlurCombiner.alphaMode = mode;\r\n }\r\n\r\n /**\r\n * The normal texture used by the SSR effect.\r\n */\r\n public normalTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The depth texture used by the SSR effect.\r\n */\r\n public depthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The back depth texture used by the SSR effect (optional).\r\n * This is used when automatic thickness computation is enabled.\r\n * The back depth texture is the depth texture of the scene rendered for the back side of the objects (that is, front faces are culled).\r\n */\r\n public backDepthTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The reflectivity texture used by the SSR effect\r\n */\r\n public reflectivityTexture: FrameGraphTextureHandle;\r\n\r\n private _camera: Camera;\r\n\r\n /**\r\n * The camera used to render the scene.\r\n */\r\n public get camera() {\r\n return this._camera;\r\n }\r\n\r\n public set camera(camera: Camera) {\r\n if (camera === this._camera) {\r\n return;\r\n }\r\n\r\n this._camera = camera;\r\n\r\n this.ssr.camera = camera;\r\n }\r\n\r\n /**\r\n * The target texture to render the SSR effect to.\r\n */\r\n public targetTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output texture of the SSR effect.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The SSR Rendering pipeline.\r\n */\r\n public readonly ssr: ThinSSRRenderingPipeline;\r\n\r\n /**\r\n * The name of the task.\r\n */\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(name: string) {\r\n this._name = name;\r\n if (this._ssr) {\r\n this._ssr.name = `${name} SSR main`;\r\n }\r\n if (this._ssrBlurX) {\r\n this._ssrBlurX.name = `${name} SSR Blur X`;\r\n }\r\n if (this._ssrBlurY) {\r\n this._ssrBlurY.name = `${name} SSR Blur Y`;\r\n }\r\n if (this._ssrBlurCombiner) {\r\n this._ssrBlurCombiner.name = `${name} SSR Blur Combiner`;\r\n }\r\n }\r\n\r\n /**\r\n * The texture type used by the different post processes created by SSR.\r\n * It's a read-only property. If you want to change it, you must recreate the task and pass the appropriate texture type to the constructor.\r\n */\r\n public readonly textureType: number;\r\n\r\n private readonly _ssr: FrameGraphSSRTask;\r\n private readonly _ssrBlurX: FrameGraphSSRBlurTask;\r\n private readonly _ssrBlurY: FrameGraphSSRBlurTask;\r\n private readonly _ssrBlurCombiner: FrameGraphPostProcessTask;\r\n\r\n /**\r\n * Constructs a SSR rendering pipeline task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph this task belongs to.\r\n * @param textureType The texture type used by the different post processes created by SSR (default: Constants.TEXTURETYPE_UNSIGNED_BYTE)\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, textureType = Constants.TEXTURETYPE_UNSIGNED_BYTE) {\r\n super(name, frameGraph);\r\n\r\n this.textureType = textureType;\r\n\r\n this.ssr = new ThinSSRRenderingPipeline(name, frameGraph.scene);\r\n\r\n this._ssr = new FrameGraphSSRTask(`${name} SSR main`, this._frameGraph, this.ssr._ssrPostProcess);\r\n this._ssrBlurX = new FrameGraphSSRBlurTask(`${name} SSR Blur X`, this._frameGraph, this.ssr._ssrBlurXPostProcess);\r\n this._ssrBlurY = new FrameGraphSSRBlurTask(`${name} SSR Blur Y`, this._frameGraph, this.ssr._ssrBlurYPostProcess);\r\n this._ssrBlurCombiner = new FrameGraphPostProcessTask(`${name} SSR Blur Combiner`, this._frameGraph, this.ssr._ssrBlurCombinerPostProcess);\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override isReady() {\r\n return this.ssr.isReady();\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphSSRRenderingPipelineTask\";\r\n }\r\n\r\n public record(): void {\r\n if (\r\n this.sourceTexture === undefined ||\r\n this.normalTexture === undefined ||\r\n this.depthTexture === undefined ||\r\n this.reflectivityTexture === undefined ||\r\n this.camera === undefined\r\n ) {\r\n throw new Error(`FrameGraphSSRRenderingPipelineTask \"${this.name}\": sourceTexture, normalTexture, depthTexture, reflectivityTexture and camera are required`);\r\n }\r\n\r\n const sourceTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.sourceTexture);\r\n\r\n this._ssr.sourceTexture = this.sourceTexture;\r\n this._ssr.sourceSamplingMode = this.sourceSamplingMode;\r\n this._ssr.camera = this.camera;\r\n this._ssr.normalTexture = this.normalTexture;\r\n this._ssr.depthTexture = this.depthTexture;\r\n this._ssr.backDepthTexture = this.backDepthTexture;\r\n this._ssr.reflectivityTexture = this.reflectivityTexture;\r\n\r\n let ssrTextureHandle: FrameGraphTextureHandle | undefined;\r\n\r\n const textureSize = {\r\n width: Math.floor(sourceTextureDescription.size.width / (this.ssr.ssrDownsample + 1)) || 1,\r\n height: Math.floor(sourceTextureDescription.size.height / (this.ssr.ssrDownsample + 1)) || 1,\r\n };\r\n const textureCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: textureSize,\r\n options: {\r\n createMipMaps: false,\r\n types: [this.textureType],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n samples: 1,\r\n useSRGBBuffers: [false],\r\n labels: [\"\"],\r\n },\r\n sizeIsPercentage: false,\r\n };\r\n\r\n if (this.ssr.blurDispersionStrength > 0 || !this.targetTexture) {\r\n ssrTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._ssr.name, textureCreationOptions);\r\n }\r\n\r\n if (this.ssr.blurDispersionStrength === 0) {\r\n this._ssr.targetTexture = this.outputTexture;\r\n\r\n if (ssrTextureHandle !== undefined) {\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, ssrTextureHandle);\r\n } else {\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture);\r\n }\r\n\r\n this._ssr.record(true);\r\n } else {\r\n this._ssr.targetTexture = ssrTextureHandle;\r\n this._ssr.record(true);\r\n\r\n textureSize.width = Math.floor(sourceTextureDescription.size.width / (this.ssr.blurDownsample + 1)) || 1;\r\n textureSize.height = Math.floor(sourceTextureDescription.size.height / (this.ssr.blurDownsample + 1)) || 1;\r\n\r\n const sourceTextureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.sourceTexture);\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture, this.name + \" Output\", sourceTextureCreationOptions);\r\n\r\n const blurXTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._ssrBlurX.name, textureCreationOptions);\r\n\r\n this._ssrBlurX.sourceTexture = ssrTextureHandle!;\r\n this._ssrBlurX.sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._ssrBlurX.targetTexture = blurXTextureHandle;\r\n this._ssrBlurX.record(true);\r\n\r\n const blurYTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._ssrBlurY.name, textureCreationOptions);\r\n\r\n this._ssrBlurY.sourceTexture = blurXTextureHandle;\r\n this._ssrBlurY.sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._ssrBlurY.targetTexture = blurYTextureHandle;\r\n this._ssrBlurY.record(true);\r\n\r\n this._ssrBlurCombiner.sourceTexture = this.sourceTexture;\r\n this._ssrBlurCombiner.sourceSamplingMode = this.sourceSamplingMode;\r\n this._ssrBlurCombiner.targetTexture = this.outputTexture;\r\n const combinerPass = this._ssrBlurCombiner.record(true, undefined, (context) => {\r\n context.bindTextureHandle(this._ssrBlurCombiner.drawWrapper.effect!, \"mainSampler\", this.sourceTexture);\r\n context.bindTextureHandle(this._ssrBlurCombiner.drawWrapper.effect!, \"textureSampler\", blurYTextureHandle);\r\n context.bindTextureHandle(this._ssrBlurCombiner.drawWrapper.effect!, \"reflectivitySampler\", this.reflectivityTexture);\r\n if (this.ssr.useFresnel) {\r\n context.bindTextureHandle(this._ssrBlurCombiner.drawWrapper.effect!, \"normalSampler\", this.normalTexture);\r\n context.bindTextureHandle(this._ssrBlurCombiner.drawWrapper.effect!, \"depthSampler\", this.depthTexture);\r\n }\r\n });\r\n\r\n combinerPass.addDependencies(blurYTextureHandle);\r\n }\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.addDependencies(this.sourceTexture);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n passDisabled.setExecuteFunc((context) => {\r\n if (this.alphaMode === Constants.ALPHA_DISABLE) {\r\n context.copyTexture(this.sourceTexture);\r\n }\r\n });\r\n }\r\n\r\n public override dispose(): void {\r\n this._ssr.dispose();\r\n this._ssrBlurX.dispose();\r\n this._ssrBlurY.dispose();\r\n this._ssrBlurCombiner.dispose();\r\n this.ssr.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ssrRenderingPipelineTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraph, FrameGraphTextureHandle, Camera, FrameGraphTextureCreationOptions } from \"core/index\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { ThinSSRRenderingPipeline } from \"core/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline\";\r\nimport { FrameGraphSSRTask } from \"./ssrTask\";\r\nimport { FrameGraphSSRBlurTask } from \"./ssrBlurTask\";\r\nimport { FrameGraphPostProcessTask } from \"./postProcessTask\";\r\n\r\n/**\r\n * Task which applies a SSR post process.\r\n */\r\nexport class FrameGraphSSRRenderingPipelineTask extends FrameGraphTask {\r\n /**\r\n * The source texture to apply the SSR effect on.\r\n */\r\n public sourceTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The sampling mode to use for the source texture.\r\n */\r\n public sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n /**\r\n * The alpha mode to use when applying the SSR effect.\r\n */\r\n public get alphaMode() {\r\n return this._ssrBlurCombiner.alphaMode;\r\n }\r\n\r\n public set alphaMode(mode: number) {\r\n this._ssrBlurCombiner.alphaMode = mode;\r\n }\r\n\r\n /**\r\n * The normal texture used by the SSR effect.\r\n */\r\n public normalTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The depth texture used by the SSR effect.\r\n */\r\n public depthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The back depth texture used by the SSR effect (optional).\r\n * This is used when automatic thickness computation is enabled.\r\n * The back depth texture is the depth texture of the scene rendered for the back side of the objects (that is, front faces are culled).\r\n */\r\n public backDepthTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The reflectivity texture used by the SSR effect\r\n */\r\n public reflectivityTexture: FrameGraphTextureHandle;\r\n\r\n private _camera: Camera;\r\n\r\n /**\r\n * The camera used to render the scene.\r\n */\r\n public get camera() {\r\n return this._camera;\r\n }\r\n\r\n public set camera(camera: Camera) {\r\n if (camera === this._camera) {\r\n return;\r\n }\r\n\r\n this._camera = camera;\r\n\r\n this.ssr.camera = camera;\r\n if (this._ssr) {\r\n this._ssr.camera = camera;\r\n }\r\n }\r\n\r\n /**\r\n * The target texture to render the SSR effect to.\r\n */\r\n public targetTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The output texture of the SSR effect.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The SSR Rendering pipeline.\r\n */\r\n public readonly ssr: ThinSSRRenderingPipeline;\r\n\r\n /**\r\n * The name of the task.\r\n */\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(name: string) {\r\n this._name = name;\r\n if (this._ssr) {\r\n this._ssr.name = `${name} SSR main`;\r\n }\r\n if (this._ssrBlurX) {\r\n this._ssrBlurX.name = `${name} SSR Blur X`;\r\n }\r\n if (this._ssrBlurY) {\r\n this._ssrBlurY.name = `${name} SSR Blur Y`;\r\n }\r\n if (this._ssrBlurCombiner) {\r\n this._ssrBlurCombiner.name = `${name} SSR Blur Combiner`;\r\n }\r\n }\r\n\r\n /**\r\n * The texture type used by the different post processes created by SSR.\r\n * It's a read-only property. If you want to change it, you must recreate the task and pass the appropriate texture type to the constructor.\r\n */\r\n public readonly textureType: number;\r\n\r\n private readonly _ssr: FrameGraphSSRTask;\r\n private readonly _ssrBlurX: FrameGraphSSRBlurTask;\r\n private readonly _ssrBlurY: FrameGraphSSRBlurTask;\r\n private readonly _ssrBlurCombiner: FrameGraphPostProcessTask;\r\n\r\n /**\r\n * Constructs a SSR rendering pipeline task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph this task belongs to.\r\n * @param textureType The texture type used by the different post processes created by SSR (default: Constants.TEXTURETYPE_UNSIGNED_BYTE)\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, textureType = Constants.TEXTURETYPE_UNSIGNED_BYTE) {\r\n super(name, frameGraph);\r\n\r\n this.textureType = textureType;\r\n\r\n this.ssr = new ThinSSRRenderingPipeline(name, frameGraph.scene);\r\n\r\n this._ssr = new FrameGraphSSRTask(`${name} SSR main`, this._frameGraph, this.ssr._ssrPostProcess);\r\n this._ssrBlurX = new FrameGraphSSRBlurTask(`${name} SSR Blur X`, this._frameGraph, this.ssr._ssrBlurXPostProcess);\r\n this._ssrBlurY = new FrameGraphSSRBlurTask(`${name} SSR Blur Y`, this._frameGraph, this.ssr._ssrBlurYPostProcess);\r\n this._ssrBlurCombiner = new FrameGraphPostProcessTask(`${name} SSR Blur Combiner`, this._frameGraph, this.ssr._ssrBlurCombinerPostProcess);\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n }\r\n\r\n public override isReady() {\r\n return this.ssr.isReady();\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphSSRRenderingPipelineTask\";\r\n }\r\n\r\n public record(): void {\r\n if (\r\n this.sourceTexture === undefined ||\r\n this.normalTexture === undefined ||\r\n this.depthTexture === undefined ||\r\n this.reflectivityTexture === undefined ||\r\n this.camera === undefined\r\n ) {\r\n throw new Error(`FrameGraphSSRRenderingPipelineTask \"${this.name}\": sourceTexture, normalTexture, depthTexture, reflectivityTexture and camera are required`);\r\n }\r\n\r\n const sourceTextureDescription = this._frameGraph.textureManager.getTextureDescription(this.sourceTexture);\r\n\r\n this._ssr.sourceTexture = this.sourceTexture;\r\n this._ssr.sourceSamplingMode = this.sourceSamplingMode;\r\n this._ssr.camera = this.camera;\r\n this._ssr.normalTexture = this.normalTexture;\r\n this._ssr.depthTexture = this.depthTexture;\r\n this._ssr.backDepthTexture = this.backDepthTexture;\r\n this._ssr.reflectivityTexture = this.reflectivityTexture;\r\n\r\n let ssrTextureHandle: FrameGraphTextureHandle | undefined;\r\n\r\n const textureSize = {\r\n width: Math.floor(sourceTextureDescription.size.width / (this.ssr.ssrDownsample + 1)) || 1,\r\n height: Math.floor(sourceTextureDescription.size.height / (this.ssr.ssrDownsample + 1)) || 1,\r\n };\r\n const textureCreationOptions: FrameGraphTextureCreationOptions = {\r\n size: textureSize,\r\n options: {\r\n createMipMaps: false,\r\n types: [this.textureType],\r\n formats: [Constants.TEXTUREFORMAT_RGBA],\r\n samples: 1,\r\n useSRGBBuffers: [false],\r\n labels: [\"\"],\r\n },\r\n sizeIsPercentage: false,\r\n };\r\n\r\n if (this.ssr.blurDispersionStrength > 0 || !this.targetTexture) {\r\n ssrTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._ssr.name, textureCreationOptions);\r\n }\r\n\r\n if (this.ssr.blurDispersionStrength === 0) {\r\n this._ssr.targetTexture = this.outputTexture;\r\n\r\n if (ssrTextureHandle !== undefined) {\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, ssrTextureHandle);\r\n } else {\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture);\r\n }\r\n\r\n this._ssr.record(true);\r\n } else {\r\n this._ssr.targetTexture = ssrTextureHandle;\r\n this._ssr.record(true);\r\n\r\n textureSize.width = Math.floor(sourceTextureDescription.size.width / (this.ssr.blurDownsample + 1)) || 1;\r\n textureSize.height = Math.floor(sourceTextureDescription.size.height / (this.ssr.blurDownsample + 1)) || 1;\r\n\r\n const sourceTextureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.sourceTexture);\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture, this.name + \" Output\", sourceTextureCreationOptions);\r\n\r\n const blurXTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._ssrBlurX.name, textureCreationOptions);\r\n\r\n this._ssrBlurX.sourceTexture = ssrTextureHandle!;\r\n this._ssrBlurX.sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._ssrBlurX.targetTexture = blurXTextureHandle;\r\n this._ssrBlurX.record(true);\r\n\r\n const blurYTextureHandle = this._frameGraph.textureManager.createRenderTargetTexture(this._ssrBlurY.name, textureCreationOptions);\r\n\r\n this._ssrBlurY.sourceTexture = blurXTextureHandle;\r\n this._ssrBlurY.sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n this._ssrBlurY.targetTexture = blurYTextureHandle;\r\n this._ssrBlurY.record(true);\r\n\r\n this._ssrBlurCombiner.sourceTexture = this.sourceTexture;\r\n this._ssrBlurCombiner.sourceSamplingMode = this.sourceSamplingMode;\r\n this._ssrBlurCombiner.targetTexture = this.outputTexture;\r\n const combinerPass = this._ssrBlurCombiner.record(true, undefined, (context) => {\r\n context.bindTextureHandle(this._ssrBlurCombiner.drawWrapper.effect!, \"mainSampler\", this.sourceTexture);\r\n context.bindTextureHandle(this._ssrBlurCombiner.drawWrapper.effect!, \"textureSampler\", blurYTextureHandle);\r\n context.bindTextureHandle(this._ssrBlurCombiner.drawWrapper.effect!, \"reflectivitySampler\", this.reflectivityTexture);\r\n if (this.ssr.useFresnel) {\r\n context.bindTextureHandle(this._ssrBlurCombiner.drawWrapper.effect!, \"normalSampler\", this.normalTexture);\r\n context.bindTextureHandle(this._ssrBlurCombiner.drawWrapper.effect!, \"depthSampler\", this.depthTexture);\r\n }\r\n });\r\n\r\n combinerPass.addDependencies(blurYTextureHandle);\r\n }\r\n\r\n const passDisabled = this._frameGraph.addRenderPass(this.name + \"_disabled\", true);\r\n\r\n passDisabled.addDependencies(this.sourceTexture);\r\n\r\n passDisabled.setRenderTarget(this.outputTexture);\r\n passDisabled.setExecuteFunc((context) => {\r\n if (this.alphaMode === Constants.ALPHA_DISABLE) {\r\n context.copyTexture(this.sourceTexture);\r\n }\r\n });\r\n }\r\n\r\n public override dispose(): void {\r\n this._ssr.dispose();\r\n this._ssrBlurX.dispose();\r\n this._ssrBlurY.dispose();\r\n this._ssrBlurCombiner.dispose();\r\n this.ssr.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
|
|
@@ -19,10 +19,12 @@ export declare class FrameGraphVolumetricLightingTask extends FrameGraphTask {
|
|
|
19
19
|
* It must be the depth texture used to generate targetTexture.
|
|
20
20
|
*/
|
|
21
21
|
depthTexture: FrameGraphTextureHandle;
|
|
22
|
+
private _camera;
|
|
22
23
|
/**
|
|
23
24
|
* The camera used for volumetric lighting calculations.
|
|
24
25
|
*/
|
|
25
|
-
camera: Camera;
|
|
26
|
+
get camera(): Camera;
|
|
27
|
+
set camera(value: Camera);
|
|
26
28
|
/**
|
|
27
29
|
* The mesh representing the lighting volume.
|
|
28
30
|
* This is the mesh that will be rendered to create the volumetric lighting effect.
|
|
@@ -11,6 +11,20 @@ const InvViewProjectionMatrix = new Matrix();
|
|
|
11
11
|
* A frame graph task that performs volumetric lighting.
|
|
12
12
|
*/
|
|
13
13
|
export class FrameGraphVolumetricLightingTask extends FrameGraphTask {
|
|
14
|
+
/**
|
|
15
|
+
* The camera used for volumetric lighting calculations.
|
|
16
|
+
*/
|
|
17
|
+
get camera() {
|
|
18
|
+
return this._camera;
|
|
19
|
+
}
|
|
20
|
+
set camera(value) {
|
|
21
|
+
if (this._camera === value) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
this._camera = value;
|
|
25
|
+
this._renderLightingVolumeTask.camera = value;
|
|
26
|
+
this._blendLightingVolumeTask.camera = value;
|
|
27
|
+
}
|
|
14
28
|
/**
|
|
15
29
|
* The phase G parameter for the volumetric lighting effect (default: 0).
|
|
16
30
|
* This parameter controls the anisotropy of the scattering.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"volumetricLightingTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Camera, DirectionalLight, FrameGraph, FrameGraphObjectList, FrameGraphTextureHandle } from \"core/index\";\r\nimport { FrameGraphVolumetricLightingBlendVolumeTask } from \"./volumetricLightingBlendVolumeTask\";\r\nimport { Matrix, TmpVectors, Vector2, Vector3, Vector4 } from \"core/Maths/math.vector\";\r\nimport { Color3, Color4 } from \"core/Maths/math.color\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphClearTextureTask } from \"../Texture/clearTextureTask\";\r\nimport { FrameGraphObjectRendererTask } from \"../Rendering/objectRendererTask\";\r\nimport { ShaderMaterial } from \"core/Materials/shaderMaterial\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\nconst InvViewProjectionMatrix = new Matrix();\r\n\r\n/**\r\n * A frame graph task that performs volumetric lighting.\r\n */\r\nexport class FrameGraphVolumetricLightingTask extends FrameGraphTask {\r\n /**\r\n * The target texture to which the volumetric lighting will be applied.\r\n */\r\n public targetTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The sampling mode to use when blending the volumetric lighting texture with targetTexture.\r\n */\r\n public sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n /**\r\n * The depth texture used for volumetric lighting calculations.\r\n * It must be the depth texture used to generate targetTexture.\r\n */\r\n public depthTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The camera used for volumetric lighting calculations.\r\n */\r\n public camera: Camera;\r\n\r\n /**\r\n * The mesh representing the lighting volume.\r\n * This is the mesh that will be rendered to create the volumetric lighting effect.\r\n */\r\n public lightingVolumeMesh: FrameGraphObjectList;\r\n\r\n /**\r\n * The directional light used for volumetric lighting.\r\n */\r\n public light: DirectionalLight;\r\n\r\n /**\r\n * The lighting volume texture (optional).\r\n * If not provided, a new texture will be created, with the same size, format and type as targetTexture.\r\n * This is the texture that will store the volumetric lighting information, before being blended to targetTexture.\r\n */\r\n public lightingVolumeTexture?: FrameGraphTextureHandle;\r\n\r\n private _extinctionPhaseG = new Vector4(0, 0, 0, 0);\r\n\r\n /**\r\n * The phase G parameter for the volumetric lighting effect (default: 0).\r\n * This parameter controls the anisotropy of the scattering.\r\n * A value of 0 means isotropic scattering, while a value of 1 means forward scattering and -1 means backward scattering.\r\n */\r\n public get phaseG() {\r\n return this._extinctionPhaseG.w;\r\n }\r\n\r\n public set phaseG(value: number) {\r\n this._extinctionPhaseG.w = value;\r\n this._renderLightingVolumeMaterial.setVector4(\"extinctionPhaseG\", this._extinctionPhaseG);\r\n }\r\n\r\n /**\r\n * Whether to enable extinction in the volumetric lighting effect (default: false).\r\n * Read-only property set in the constructor.\r\n */\r\n public readonly enableExtinction: boolean;\r\n\r\n /**\r\n * The extinction coefficient for the volumetric lighting effect (default: (0, 0, 0) - no extinction).\r\n * This parameter controls how much light is absorbed and scattered as it travels through the medium.\r\n * Will only have an effect if enableExtinction is set to true in the constructor!\r\n */\r\n public get extinction() {\r\n return this._blendLightingVolumeTask.postProcess.extinction;\r\n }\r\n\r\n public set extinction(value: Vector3) {\r\n this._extinctionPhaseG.x = Math.max(value.x, 1e-6);\r\n this._extinctionPhaseG.y = Math.max(value.y, 1e-6);\r\n this._extinctionPhaseG.z = Math.max(value.z, 1e-6);\r\n this._renderLightingVolumeMaterial.setVector4(\"extinctionPhaseG\", this._extinctionPhaseG);\r\n this._blendLightingVolumeTask.postProcess.extinction.copyFromFloats(this._extinctionPhaseG.x, this._extinctionPhaseG.y, this._extinctionPhaseG.z);\r\n }\r\n\r\n private _lightPower = new Color3(1, 1, 1);\r\n\r\n /**\r\n * The light power/color for the volumetric lighting effect (default: (1, 1, 1)).\r\n * This parameter controls the intensity and color of the light used for volumetric lighting.\r\n */\r\n public get lightPower() {\r\n return this._lightPower;\r\n }\r\n\r\n public set lightPower(value: Color3) {\r\n this._lightPower.copyFrom(value);\r\n this._renderLightingVolumeMaterial.setColor3(\"lightPower\", this._lightPower);\r\n }\r\n\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(name: string) {\r\n this._name = name;\r\n if (this._renderLightingVolumeMaterial) {\r\n this._renderLightingVolumeMaterial.name = `${name} - render lighting volume`;\r\n }\r\n if (this._clearLightingVolumeTextureTask) {\r\n this._clearLightingVolumeTextureTask.name = `${name} - clear lighting volume texture`;\r\n }\r\n if (this._renderLightingVolumeTask) {\r\n this._renderLightingVolumeTask.name = `${name} - render lighting volume`;\r\n }\r\n if (this._blendLightingVolumeTask) {\r\n this._blendLightingVolumeTask.name = `${name} - blend lighting volume`;\r\n }\r\n }\r\n\r\n /**\r\n * The output texture of the task. It will be the same as targetTexture.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n private readonly _clearLightingVolumeTextureTask: FrameGraphClearTextureTask;\r\n private readonly _renderLightingVolumeTask: FrameGraphObjectRendererTask;\r\n private readonly _blendLightingVolumeTask: FrameGraphVolumetricLightingBlendVolumeTask;\r\n private _renderLightingVolumeMaterial: ShaderMaterial;\r\n\r\n /**\r\n * Creates a new FrameGraphVolumetricLightingTask.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph to which the task belongs.\r\n * @param enableExtinction Whether to enable extinction in the volumetric lighting effect (default: false). If you don't plan to set extinction to something different than (0, 0, 0), you can disable this to save some performance.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, enableExtinction = false) {\r\n super(name, frameGraph);\r\n\r\n this.enableExtinction = enableExtinction;\r\n\r\n const isWebGPU = this._frameGraph.engine.isWebGPU;\r\n\r\n this._renderLightingVolumeMaterial = new ShaderMaterial(`${name} - render lighting volume`, this._frameGraph.scene, \"volumetricLightingRenderVolume\", {\r\n attributes: [\"position\"],\r\n uniformBuffers: [\"Scene\", \"Mesh\"],\r\n uniforms: [\"world\", \"viewProjection\", \"vEyePosition\", \"lightDir\", \"invViewProjection\", \"outputTextureSize\", \"extinctionPhaseG\", \"lightPower\", \"textureRatio\"],\r\n samplers: [\"depthTexture\"],\r\n defines: enableExtinction ? [\"USE_EXTINCTION\"] : [],\r\n shaderLanguage: isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n needAlphaBlending: true,\r\n });\r\n this._renderLightingVolumeMaterial.backFaceCulling = false;\r\n this._renderLightingVolumeMaterial.alphaMode = Constants.ALPHA_ADD;\r\n this._renderLightingVolumeMaterial.onBindObservable.add(() => {\r\n this._renderLightingVolumeMaterial.bindEyePosition(this._renderLightingVolumeMaterial.getEffect());\r\n });\r\n\r\n this._clearLightingVolumeTextureTask = new FrameGraphClearTextureTask(`clear lighting volume texture`, frameGraph);\r\n this._renderLightingVolumeTask = new FrameGraphObjectRendererTask(`render lighting volume`, frameGraph, frameGraph.scene);\r\n this._blendLightingVolumeTask = new FrameGraphVolumetricLightingBlendVolumeTask(`blend lighting volume texture`, frameGraph, enableExtinction);\r\n\r\n this.onTexturesAllocatedObservable.add(() => {\r\n this._renderLightingVolumeMaterial.setInternalTexture(\"depthTexture\", frameGraph.textureManager.getTextureFromHandle(this.depthTexture)!);\r\n });\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n\r\n // Triggers the setters to set the uniforms\r\n this.phaseG = this._extinctionPhaseG.w;\r\n this.extinction = new Vector3(this.extinction.x, this.extinction.y, this.extinction.z);\r\n this.lightPower = this._lightPower;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public override initAsync(): Promise<unknown> {\r\n if (this._frameGraph.engine.isWebGPU) {\r\n return Promise.all([import(\"../../../ShadersWGSL/volumetricLightingRenderVolume.vertex\"), import(\"../../../ShadersWGSL/volumetricLightingRenderVolume.fragment\")]);\r\n }\r\n\r\n return Promise.all([import(\"../../../Shaders/volumetricLightingRenderVolume.vertex\"), import(\"../../../Shaders/volumetricLightingRenderVolume.fragment\")]);\r\n }\r\n\r\n public override isReady() {\r\n return (\r\n this._renderLightingVolumeMaterial.isReady() &&\r\n this._clearLightingVolumeTextureTask.isReady() &&\r\n this._renderLightingVolumeMaterial.isReady() &&\r\n this._blendLightingVolumeTask.isReady()\r\n );\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphVolumetricLightingTask\";\r\n }\r\n\r\n public record(skipCreationOfDisabledPasses = false) {\r\n if (this.targetTexture === undefined || this.depthTexture === undefined || this.camera === undefined || this.lightingVolumeMesh === undefined || this.light === undefined) {\r\n throw new Error(`FrameGraphVolumetricLightingTask \"${this.name}\": targetTexture, depthTexture, camera, lightingVolumeMesh and light are required`);\r\n }\r\n if (!this.lightingVolumeMesh.meshes || this.lightingVolumeMesh.meshes.length === 0) {\r\n throw new Error(`FrameGraphVolumetricLightingTask \"${this.name}\": lightingVolumeMesh is empty`);\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture);\r\n\r\n const textureManager = this._frameGraph.textureManager;\r\n\r\n let lightingVolumeTexture = this.lightingVolumeTexture;\r\n if (!lightingVolumeTexture) {\r\n const targetTextureCreationOptions = textureManager.getTextureCreationOptions(this.targetTexture);\r\n\r\n targetTextureCreationOptions.options.labels = [\"InScattering\"];\r\n targetTextureCreationOptions.options.samples = 1;\r\n\r\n lightingVolumeTexture = textureManager.createRenderTargetTexture(`${this.name} - lighting volume texture`, targetTextureCreationOptions);\r\n }\r\n\r\n this.lightingVolumeMesh.meshes[0].material = this._renderLightingVolumeMaterial;\r\n\r\n const targetTextureSize = textureManager.getTextureAbsoluteDimensions(this.targetTexture);\r\n const volumeTextureSize = textureManager.getTextureAbsoluteDimensions(lightingVolumeTexture);\r\n\r\n this._renderLightingVolumeMaterial.setVector2(\r\n \"textureRatio\",\r\n new Vector2(targetTextureSize.width / volumeTextureSize.width, targetTextureSize.height / volumeTextureSize.height)\r\n );\r\n this._renderLightingVolumeMaterial.setVector2(\"outputTextureSize\", new Vector2(volumeTextureSize.width, volumeTextureSize.height));\r\n\r\n const passUpdateMaterial = this._frameGraph.addPass(this.name);\r\n\r\n passUpdateMaterial.setExecuteFunc(() => {\r\n this.camera.getTransformationMatrix().invertToRef(InvViewProjectionMatrix);\r\n\r\n this._renderLightingVolumeMaterial.setMatrix(\"invViewProjection\", InvViewProjectionMatrix);\r\n this._renderLightingVolumeMaterial.setVector3(\"lightDir\", this.light.direction.normalizeToRef(TmpVectors.Vector3[0]));\r\n });\r\n\r\n this._clearLightingVolumeTextureTask.clearColor = true;\r\n this._clearLightingVolumeTextureTask.clearStencil = this.enableExtinction;\r\n this._clearLightingVolumeTextureTask.color = new Color4(0, 0, 0, 1);\r\n this._clearLightingVolumeTextureTask.stencilValue = 0;\r\n this._clearLightingVolumeTextureTask.targetTexture = lightingVolumeTexture;\r\n this._clearLightingVolumeTextureTask.record(true);\r\n\r\n this._renderLightingVolumeTask.targetTexture = this._clearLightingVolumeTextureTask.outputTexture;\r\n this._renderLightingVolumeTask.objectList = this.lightingVolumeMesh;\r\n this._renderLightingVolumeTask.camera = this.camera;\r\n this._renderLightingVolumeTask.disableImageProcessing = true;\r\n this._renderLightingVolumeTask.depthTest = false;\r\n this._renderLightingVolumeTask.record(true);\r\n\r\n this._blendLightingVolumeTask.sourceTexture = this._renderLightingVolumeTask.outputTexture;\r\n this._blendLightingVolumeTask.sourceSamplingMode = this.sourceSamplingMode;\r\n this._blendLightingVolumeTask.targetTexture = this.targetTexture;\r\n this._blendLightingVolumeTask.depthTexture = this.depthTexture;\r\n this._blendLightingVolumeTask.camera = this.camera;\r\n this._blendLightingVolumeTask.record(true);\r\n\r\n if (!skipCreationOfDisabledPasses) {\r\n const disabledPass = this._frameGraph.addPass(this.name + \"_disabled\", true);\r\n\r\n disabledPass.setExecuteFunc(() => {});\r\n }\r\n }\r\n\r\n public override dispose() {\r\n this._renderLightingVolumeMaterial?.dispose();\r\n this._clearLightingVolumeTextureTask.dispose();\r\n this._renderLightingVolumeTask.dispose();\r\n this._blendLightingVolumeTask.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"volumetricLightingTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Camera, DirectionalLight, FrameGraph, FrameGraphObjectList, FrameGraphTextureHandle } from \"core/index\";\r\nimport { FrameGraphVolumetricLightingBlendVolumeTask } from \"./volumetricLightingBlendVolumeTask\";\r\nimport { Matrix, TmpVectors, Vector2, Vector3, Vector4 } from \"core/Maths/math.vector\";\r\nimport { Color3, Color4 } from \"core/Maths/math.color\";\r\nimport { FrameGraphTask } from \"../../frameGraphTask\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { FrameGraphClearTextureTask } from \"../Texture/clearTextureTask\";\r\nimport { FrameGraphObjectRendererTask } from \"../Rendering/objectRendererTask\";\r\nimport { ShaderMaterial } from \"core/Materials/shaderMaterial\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\nconst InvViewProjectionMatrix = new Matrix();\r\n\r\n/**\r\n * A frame graph task that performs volumetric lighting.\r\n */\r\nexport class FrameGraphVolumetricLightingTask extends FrameGraphTask {\r\n /**\r\n * The target texture to which the volumetric lighting will be applied.\r\n */\r\n public targetTexture: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The sampling mode to use when blending the volumetric lighting texture with targetTexture.\r\n */\r\n public sourceSamplingMode = Constants.TEXTURE_BILINEAR_SAMPLINGMODE;\r\n\r\n /**\r\n * The depth texture used for volumetric lighting calculations.\r\n * It must be the depth texture used to generate targetTexture.\r\n */\r\n public depthTexture: FrameGraphTextureHandle;\r\n\r\n private _camera: Camera;\r\n /**\r\n * The camera used for volumetric lighting calculations.\r\n */\r\n public get camera() {\r\n return this._camera;\r\n }\r\n\r\n public set camera(value: Camera) {\r\n if (this._camera === value) {\r\n return;\r\n }\r\n this._camera = value;\r\n this._renderLightingVolumeTask.camera = value;\r\n this._blendLightingVolumeTask.camera = value;\r\n }\r\n\r\n /**\r\n * The mesh representing the lighting volume.\r\n * This is the mesh that will be rendered to create the volumetric lighting effect.\r\n */\r\n public lightingVolumeMesh: FrameGraphObjectList;\r\n\r\n /**\r\n * The directional light used for volumetric lighting.\r\n */\r\n public light: DirectionalLight;\r\n\r\n /**\r\n * The lighting volume texture (optional).\r\n * If not provided, a new texture will be created, with the same size, format and type as targetTexture.\r\n * This is the texture that will store the volumetric lighting information, before being blended to targetTexture.\r\n */\r\n public lightingVolumeTexture?: FrameGraphTextureHandle;\r\n\r\n private _extinctionPhaseG = new Vector4(0, 0, 0, 0);\r\n\r\n /**\r\n * The phase G parameter for the volumetric lighting effect (default: 0).\r\n * This parameter controls the anisotropy of the scattering.\r\n * A value of 0 means isotropic scattering, while a value of 1 means forward scattering and -1 means backward scattering.\r\n */\r\n public get phaseG() {\r\n return this._extinctionPhaseG.w;\r\n }\r\n\r\n public set phaseG(value: number) {\r\n this._extinctionPhaseG.w = value;\r\n this._renderLightingVolumeMaterial.setVector4(\"extinctionPhaseG\", this._extinctionPhaseG);\r\n }\r\n\r\n /**\r\n * Whether to enable extinction in the volumetric lighting effect (default: false).\r\n * Read-only property set in the constructor.\r\n */\r\n public readonly enableExtinction: boolean;\r\n\r\n /**\r\n * The extinction coefficient for the volumetric lighting effect (default: (0, 0, 0) - no extinction).\r\n * This parameter controls how much light is absorbed and scattered as it travels through the medium.\r\n * Will only have an effect if enableExtinction is set to true in the constructor!\r\n */\r\n public get extinction() {\r\n return this._blendLightingVolumeTask.postProcess.extinction;\r\n }\r\n\r\n public set extinction(value: Vector3) {\r\n this._extinctionPhaseG.x = Math.max(value.x, 1e-6);\r\n this._extinctionPhaseG.y = Math.max(value.y, 1e-6);\r\n this._extinctionPhaseG.z = Math.max(value.z, 1e-6);\r\n this._renderLightingVolumeMaterial.setVector4(\"extinctionPhaseG\", this._extinctionPhaseG);\r\n this._blendLightingVolumeTask.postProcess.extinction.copyFromFloats(this._extinctionPhaseG.x, this._extinctionPhaseG.y, this._extinctionPhaseG.z);\r\n }\r\n\r\n private _lightPower = new Color3(1, 1, 1);\r\n\r\n /**\r\n * The light power/color for the volumetric lighting effect (default: (1, 1, 1)).\r\n * This parameter controls the intensity and color of the light used for volumetric lighting.\r\n */\r\n public get lightPower() {\r\n return this._lightPower;\r\n }\r\n\r\n public set lightPower(value: Color3) {\r\n this._lightPower.copyFrom(value);\r\n this._renderLightingVolumeMaterial.setColor3(\"lightPower\", this._lightPower);\r\n }\r\n\r\n public override get name() {\r\n return this._name;\r\n }\r\n\r\n public override set name(name: string) {\r\n this._name = name;\r\n if (this._renderLightingVolumeMaterial) {\r\n this._renderLightingVolumeMaterial.name = `${name} - render lighting volume`;\r\n }\r\n if (this._clearLightingVolumeTextureTask) {\r\n this._clearLightingVolumeTextureTask.name = `${name} - clear lighting volume texture`;\r\n }\r\n if (this._renderLightingVolumeTask) {\r\n this._renderLightingVolumeTask.name = `${name} - render lighting volume`;\r\n }\r\n if (this._blendLightingVolumeTask) {\r\n this._blendLightingVolumeTask.name = `${name} - blend lighting volume`;\r\n }\r\n }\r\n\r\n /**\r\n * The output texture of the task. It will be the same as targetTexture.\r\n */\r\n public readonly outputTexture: FrameGraphTextureHandle;\r\n\r\n private readonly _clearLightingVolumeTextureTask: FrameGraphClearTextureTask;\r\n private readonly _renderLightingVolumeTask: FrameGraphObjectRendererTask;\r\n private readonly _blendLightingVolumeTask: FrameGraphVolumetricLightingBlendVolumeTask;\r\n private _renderLightingVolumeMaterial: ShaderMaterial;\r\n\r\n /**\r\n * Creates a new FrameGraphVolumetricLightingTask.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph to which the task belongs.\r\n * @param enableExtinction Whether to enable extinction in the volumetric lighting effect (default: false). If you don't plan to set extinction to something different than (0, 0, 0), you can disable this to save some performance.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph, enableExtinction = false) {\r\n super(name, frameGraph);\r\n\r\n this.enableExtinction = enableExtinction;\r\n\r\n const isWebGPU = this._frameGraph.engine.isWebGPU;\r\n\r\n this._renderLightingVolumeMaterial = new ShaderMaterial(`${name} - render lighting volume`, this._frameGraph.scene, \"volumetricLightingRenderVolume\", {\r\n attributes: [\"position\"],\r\n uniformBuffers: [\"Scene\", \"Mesh\"],\r\n uniforms: [\"world\", \"viewProjection\", \"vEyePosition\", \"lightDir\", \"invViewProjection\", \"outputTextureSize\", \"extinctionPhaseG\", \"lightPower\", \"textureRatio\"],\r\n samplers: [\"depthTexture\"],\r\n defines: enableExtinction ? [\"USE_EXTINCTION\"] : [],\r\n shaderLanguage: isWebGPU ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n needAlphaBlending: true,\r\n });\r\n this._renderLightingVolumeMaterial.backFaceCulling = false;\r\n this._renderLightingVolumeMaterial.alphaMode = Constants.ALPHA_ADD;\r\n this._renderLightingVolumeMaterial.onBindObservable.add(() => {\r\n this._renderLightingVolumeMaterial.bindEyePosition(this._renderLightingVolumeMaterial.getEffect());\r\n });\r\n\r\n this._clearLightingVolumeTextureTask = new FrameGraphClearTextureTask(`clear lighting volume texture`, frameGraph);\r\n this._renderLightingVolumeTask = new FrameGraphObjectRendererTask(`render lighting volume`, frameGraph, frameGraph.scene);\r\n this._blendLightingVolumeTask = new FrameGraphVolumetricLightingBlendVolumeTask(`blend lighting volume texture`, frameGraph, enableExtinction);\r\n\r\n this.onTexturesAllocatedObservable.add(() => {\r\n this._renderLightingVolumeMaterial.setInternalTexture(\"depthTexture\", frameGraph.textureManager.getTextureFromHandle(this.depthTexture)!);\r\n });\r\n\r\n this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();\r\n\r\n // Triggers the setters to set the uniforms\r\n this.phaseG = this._extinctionPhaseG.w;\r\n this.extinction = new Vector3(this.extinction.x, this.extinction.y, this.extinction.z);\r\n this.lightPower = this._lightPower;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public override initAsync(): Promise<unknown> {\r\n if (this._frameGraph.engine.isWebGPU) {\r\n return Promise.all([import(\"../../../ShadersWGSL/volumetricLightingRenderVolume.vertex\"), import(\"../../../ShadersWGSL/volumetricLightingRenderVolume.fragment\")]);\r\n }\r\n\r\n return Promise.all([import(\"../../../Shaders/volumetricLightingRenderVolume.vertex\"), import(\"../../../Shaders/volumetricLightingRenderVolume.fragment\")]);\r\n }\r\n\r\n public override isReady() {\r\n return (\r\n this._renderLightingVolumeMaterial.isReady() &&\r\n this._clearLightingVolumeTextureTask.isReady() &&\r\n this._renderLightingVolumeMaterial.isReady() &&\r\n this._blendLightingVolumeTask.isReady()\r\n );\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphVolumetricLightingTask\";\r\n }\r\n\r\n public record(skipCreationOfDisabledPasses = false) {\r\n if (this.targetTexture === undefined || this.depthTexture === undefined || this.camera === undefined || this.lightingVolumeMesh === undefined || this.light === undefined) {\r\n throw new Error(`FrameGraphVolumetricLightingTask \"${this.name}\": targetTexture, depthTexture, camera, lightingVolumeMesh and light are required`);\r\n }\r\n if (!this.lightingVolumeMesh.meshes || this.lightingVolumeMesh.meshes.length === 0) {\r\n throw new Error(`FrameGraphVolumetricLightingTask \"${this.name}\": lightingVolumeMesh is empty`);\r\n }\r\n\r\n this._frameGraph.textureManager.resolveDanglingHandle(this.outputTexture, this.targetTexture);\r\n\r\n const textureManager = this._frameGraph.textureManager;\r\n\r\n let lightingVolumeTexture = this.lightingVolumeTexture;\r\n if (!lightingVolumeTexture) {\r\n const targetTextureCreationOptions = textureManager.getTextureCreationOptions(this.targetTexture);\r\n\r\n targetTextureCreationOptions.options.labels = [\"InScattering\"];\r\n targetTextureCreationOptions.options.samples = 1;\r\n\r\n lightingVolumeTexture = textureManager.createRenderTargetTexture(`${this.name} - lighting volume texture`, targetTextureCreationOptions);\r\n }\r\n\r\n this.lightingVolumeMesh.meshes[0].material = this._renderLightingVolumeMaterial;\r\n\r\n const targetTextureSize = textureManager.getTextureAbsoluteDimensions(this.targetTexture);\r\n const volumeTextureSize = textureManager.getTextureAbsoluteDimensions(lightingVolumeTexture);\r\n\r\n this._renderLightingVolumeMaterial.setVector2(\r\n \"textureRatio\",\r\n new Vector2(targetTextureSize.width / volumeTextureSize.width, targetTextureSize.height / volumeTextureSize.height)\r\n );\r\n this._renderLightingVolumeMaterial.setVector2(\"outputTextureSize\", new Vector2(volumeTextureSize.width, volumeTextureSize.height));\r\n\r\n const passUpdateMaterial = this._frameGraph.addPass(this.name);\r\n\r\n passUpdateMaterial.setExecuteFunc(() => {\r\n this.camera.getTransformationMatrix().invertToRef(InvViewProjectionMatrix);\r\n\r\n this._renderLightingVolumeMaterial.setMatrix(\"invViewProjection\", InvViewProjectionMatrix);\r\n this._renderLightingVolumeMaterial.setVector3(\"lightDir\", this.light.direction.normalizeToRef(TmpVectors.Vector3[0]));\r\n });\r\n\r\n this._clearLightingVolumeTextureTask.clearColor = true;\r\n this._clearLightingVolumeTextureTask.clearStencil = this.enableExtinction;\r\n this._clearLightingVolumeTextureTask.color = new Color4(0, 0, 0, 1);\r\n this._clearLightingVolumeTextureTask.stencilValue = 0;\r\n this._clearLightingVolumeTextureTask.targetTexture = lightingVolumeTexture;\r\n this._clearLightingVolumeTextureTask.record(true);\r\n\r\n this._renderLightingVolumeTask.targetTexture = this._clearLightingVolumeTextureTask.outputTexture;\r\n this._renderLightingVolumeTask.objectList = this.lightingVolumeMesh;\r\n this._renderLightingVolumeTask.camera = this.camera;\r\n this._renderLightingVolumeTask.disableImageProcessing = true;\r\n this._renderLightingVolumeTask.depthTest = false;\r\n this._renderLightingVolumeTask.record(true);\r\n\r\n this._blendLightingVolumeTask.sourceTexture = this._renderLightingVolumeTask.outputTexture;\r\n this._blendLightingVolumeTask.sourceSamplingMode = this.sourceSamplingMode;\r\n this._blendLightingVolumeTask.targetTexture = this.targetTexture;\r\n this._blendLightingVolumeTask.depthTexture = this.depthTexture;\r\n this._blendLightingVolumeTask.camera = this.camera;\r\n this._blendLightingVolumeTask.record(true);\r\n\r\n if (!skipCreationOfDisabledPasses) {\r\n const disabledPass = this._frameGraph.addPass(this.name + \"_disabled\", true);\r\n\r\n disabledPass.setExecuteFunc(() => {});\r\n }\r\n }\r\n\r\n public override dispose() {\r\n this._renderLightingVolumeMaterial?.dispose();\r\n this._clearLightingVolumeTextureTask.dispose();\r\n this._renderLightingVolumeTask.dispose();\r\n this._blendLightingVolumeTask.dispose();\r\n super.dispose();\r\n }\r\n}\r\n"]}
|
|
@@ -87,8 +87,8 @@ export declare class FrameGraphCascadedShadowGeneratorTask extends FrameGraphSha
|
|
|
87
87
|
* @param frameGraph The frame graph the task belongs to.
|
|
88
88
|
*/
|
|
89
89
|
constructor(name: string, frameGraph: FrameGraph);
|
|
90
|
-
protected
|
|
91
|
-
protected
|
|
90
|
+
protected _createShadowGeneratorInstance(): void;
|
|
91
|
+
protected _createShadowGenerator(): boolean | undefined;
|
|
92
92
|
getClassName(): string;
|
|
93
93
|
record(): void;
|
|
94
94
|
dispose(): void;
|
|
@@ -28,7 +28,10 @@ export class FrameGraphCascadedShadowGeneratorTask extends FrameGraphShadowGener
|
|
|
28
28
|
return;
|
|
29
29
|
}
|
|
30
30
|
this._numCascades = value;
|
|
31
|
-
this.
|
|
31
|
+
if (this._shadowGenerator) {
|
|
32
|
+
this._shadowGenerator.numCascades = value;
|
|
33
|
+
this._updateShadowMap();
|
|
34
|
+
}
|
|
32
35
|
}
|
|
33
36
|
/**
|
|
34
37
|
* Gets or sets a value indicating whether the shadow generator should display the cascades.
|
|
@@ -210,25 +213,28 @@ export class FrameGraphCascadedShadowGeneratorTask extends FrameGraphShadowGener
|
|
|
210
213
|
}
|
|
211
214
|
});
|
|
212
215
|
}
|
|
213
|
-
|
|
216
|
+
_createShadowGeneratorInstance() {
|
|
214
217
|
if (!(this.light instanceof DirectionalLight)) {
|
|
215
218
|
throw new Error(`FrameGraphCascadedShadowGeneratorTask ${this.name}: the CSM shadow generator only supports directional lights.`);
|
|
216
219
|
}
|
|
217
220
|
this._shadowGenerator = new CascadedShadowGenerator(this.mapSize, this.light, this.useFloat32TextureType, this.camera, this.useRedTextureFormat);
|
|
218
|
-
this._shadowGenerator.numCascades = this._numCascades;
|
|
219
221
|
}
|
|
220
|
-
|
|
221
|
-
super.
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
222
|
+
_createShadowGenerator() {
|
|
223
|
+
if (super._createShadowGenerator()) {
|
|
224
|
+
const shadowGenerator = this._shadowGenerator;
|
|
225
|
+
if (shadowGenerator === undefined) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
shadowGenerator.numCascades = this._numCascades;
|
|
229
|
+
shadowGenerator.debug = this._debug;
|
|
230
|
+
shadowGenerator.stabilizeCascades = this._stabilizeCascades;
|
|
231
|
+
shadowGenerator.lambda = this._lambda;
|
|
232
|
+
shadowGenerator.cascadeBlendPercentage = this._cascadeBlendPercentage;
|
|
233
|
+
shadowGenerator.depthClamp = this._depthClamp;
|
|
234
|
+
shadowGenerator.shadowMaxZ = this._shadowMaxZ;
|
|
235
|
+
return true;
|
|
225
236
|
}
|
|
226
|
-
|
|
227
|
-
shadowGenerator.stabilizeCascades = this._stabilizeCascades;
|
|
228
|
-
shadowGenerator.lambda = this._lambda;
|
|
229
|
-
shadowGenerator.cascadeBlendPercentage = this._cascadeBlendPercentage;
|
|
230
|
-
shadowGenerator.depthClamp = this._depthClamp;
|
|
231
|
-
shadowGenerator.shadowMaxZ = this._shadowMaxZ;
|
|
237
|
+
return false;
|
|
232
238
|
}
|
|
233
239
|
getClassName() {
|
|
234
240
|
return "FrameGraphCascadedShadowGeneratorTask";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csmShadowGeneratorTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraphTextureHandle, FrameGraph } from \"core/index\";\r\nimport { CascadedShadowGenerator } from \"../../../Lights/Shadows/cascadedShadowGenerator\";\r\nimport { FrameGraphShadowGeneratorTask } from \"./shadowGeneratorTask\";\r\nimport { DirectionalLight } from \"../../../Lights/directionalLight\";\r\nimport { DepthTextureType, ThinMinMaxReducer } from \"../../../Misc/thinMinMaxReducer\";\r\nimport { FrameGraphPostProcessTask } from \"../PostProcesses/postProcessTask\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\nimport { textureSizeIsObject } from \"../../../Materials/Textures/textureCreationOptions\";\r\n\r\n/**\r\n * Task used to generate a cascaded shadow map from a list of objects.\r\n */\r\nexport class FrameGraphCascadedShadowGeneratorTask extends FrameGraphShadowGeneratorTask {\r\n protected override _shadowGenerator: CascadedShadowGenerator | undefined;\r\n\r\n /**\r\n * Checks if a shadow generator task is a cascaded shadow generator task.\r\n * @param task The task to check.\r\n * @returns True if the task is a cascaded shadow generator task, else false.\r\n */\r\n public static IsCascadedShadowGenerator(task: FrameGraphShadowGeneratorTask): task is FrameGraphCascadedShadowGeneratorTask {\r\n return (task as FrameGraphCascadedShadowGeneratorTask).numCascades !== undefined;\r\n }\r\n\r\n /**\r\n * The depth texture used by the autoCalcDepthBounds feature (optional if autoCalcDepthBounds is set to false).\r\n * This texture is used to compute the min/max depth bounds of the scene to setup the cascaded shadow generator.\r\n * The texture should contain either “view,” “normalized view,” or “screen” depth values - if possible, connect “normalized view,” or “screen” for best performance.\r\n * Warning: Do not set a texture if you are not using the autoCalcDepthBounds feature, to avoid generating a depth texture that will not be used.\r\n */\r\n public depthTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The type of the depth texture used by the autoCalcDepthBounds feature.\r\n */\r\n public depthTextureType: DepthTextureType = DepthTextureType.NormalizedViewDepth;\r\n\r\n private _numCascades = CascadedShadowGenerator.DEFAULT_CASCADES_COUNT;\r\n /**\r\n * The number of cascades.\r\n */\r\n public get numCascades() {\r\n return this._numCascades;\r\n }\r\n\r\n public set numCascades(value: number) {\r\n if (value === this._numCascades) {\r\n return;\r\n }\r\n\r\n this._numCascades = value;\r\n this._setupShadowGenerator();\r\n }\r\n\r\n private _debug = false;\r\n /**\r\n * Gets or sets a value indicating whether the shadow generator should display the cascades.\r\n */\r\n public get debug() {\r\n return this._debug;\r\n }\r\n\r\n public set debug(value: boolean) {\r\n if (value === this._debug) {\r\n return;\r\n }\r\n\r\n this._debug = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.debug = value;\r\n }\r\n }\r\n\r\n private _stabilizeCascades = false;\r\n /**\r\n * Gets or sets a value indicating whether the shadow generator should stabilize the cascades.\r\n */\r\n public get stabilizeCascades() {\r\n return this._stabilizeCascades;\r\n }\r\n\r\n public set stabilizeCascades(value: boolean) {\r\n if (value === this._stabilizeCascades) {\r\n return;\r\n }\r\n\r\n this._stabilizeCascades = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.stabilizeCascades = value;\r\n }\r\n }\r\n\r\n private _lambda = 0.5;\r\n /**\r\n * Gets or sets the lambda parameter of the shadow generator.\r\n */\r\n public get lambda() {\r\n return this._lambda;\r\n }\r\n\r\n public set lambda(value: number) {\r\n if (value === this._lambda) {\r\n return;\r\n }\r\n\r\n this._lambda = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.lambda = value;\r\n }\r\n }\r\n\r\n private _cascadeBlendPercentage = 0.1;\r\n /**\r\n * Gets or sets the cascade blend percentage.\r\n */\r\n public get cascadeBlendPercentage() {\r\n return this._cascadeBlendPercentage;\r\n }\r\n\r\n public set cascadeBlendPercentage(value: number) {\r\n if (value === this._cascadeBlendPercentage) {\r\n return;\r\n }\r\n\r\n this._cascadeBlendPercentage = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.cascadeBlendPercentage = value;\r\n }\r\n }\r\n\r\n private _depthClamp = true;\r\n /**\r\n * Gets or sets a value indicating whether the shadow generator should use depth clamping.\r\n */\r\n public get depthClamp() {\r\n return this._depthClamp;\r\n }\r\n\r\n public set depthClamp(value: boolean) {\r\n if (value === this._depthClamp) {\r\n return;\r\n }\r\n\r\n this._depthClamp = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.depthClamp = value;\r\n }\r\n }\r\n\r\n private _autoCalcDepthBounds = false;\r\n /**\r\n * Gets or sets a value indicating whether the shadow generator should automatically calculate the depth bounds.\r\n */\r\n public get autoCalcDepthBounds() {\r\n return this._autoCalcDepthBounds;\r\n }\r\n\r\n public set autoCalcDepthBounds(value: boolean) {\r\n if (value === this._autoCalcDepthBounds) {\r\n return;\r\n }\r\n\r\n this._autoCalcDepthBounds = value;\r\n this._currentAutoCalcDepthBoundsCounter = this._autoCalcDepthBoundsRefreshRate;\r\n\r\n if (!value) {\r\n this._shadowGenerator?.setMinMaxDistance(0, 1);\r\n }\r\n\r\n // All passes but the last one are related to min/max reduction and should be enabled/disabled depending on autoCalcDepthBounds value\r\n const passes = this.passes;\r\n for (let i = 0; i < passes.length - 1; ++i) {\r\n passes[i].disabled = !value;\r\n }\r\n }\r\n\r\n private _currentAutoCalcDepthBoundsCounter = 0;\r\n private _autoCalcDepthBoundsRefreshRate = 1;\r\n /**\r\n * Defines the refresh rate of the min/max computation used when autoCalcDepthBounds is set to true\r\n * Use 0 to compute just once, 1 to compute on every frame, 2 to compute every two frames and so on...\r\n */\r\n public get autoCalcDepthBoundsRefreshRate() {\r\n return this._autoCalcDepthBoundsRefreshRate;\r\n }\r\n\r\n public set autoCalcDepthBoundsRefreshRate(value: number) {\r\n this._autoCalcDepthBoundsRefreshRate = value;\r\n this._currentAutoCalcDepthBoundsCounter = this._autoCalcDepthBoundsRefreshRate;\r\n }\r\n\r\n private _shadowMaxZ = 10000;\r\n /**\r\n * Gets or sets the maximum shadow Z value.\r\n */\r\n public get shadowMaxZ() {\r\n return this._shadowMaxZ;\r\n }\r\n\r\n public set shadowMaxZ(value: number) {\r\n if (value === this._shadowMaxZ) {\r\n return;\r\n }\r\n\r\n this._shadowMaxZ = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.shadowMaxZ = value;\r\n }\r\n }\r\n\r\n protected readonly _thinMinMaxReducer: ThinMinMaxReducer;\r\n\r\n /**\r\n * Creates a new shadow generator task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n super(name, frameGraph);\r\n\r\n this._thinMinMaxReducer = new ThinMinMaxReducer(frameGraph.scene);\r\n\r\n this._thinMinMaxReducer.onAfterReductionPerformed.add((minmax: { min: number; max: number }) => {\r\n if (!this._shadowGenerator) {\r\n return;\r\n }\r\n\r\n const camera = this.camera;\r\n\r\n let min = minmax.min,\r\n max = minmax.max;\r\n\r\n if (min >= max) {\r\n min = 0;\r\n max = 1;\r\n } else if (camera && this.depthTextureType !== DepthTextureType.NormalizedViewDepth) {\r\n if (this.depthTextureType === DepthTextureType.ScreenDepth) {\r\n const engine = this._frameGraph.engine;\r\n const projectionMatrix = camera.getProjectionMatrix();\r\n const p2z = projectionMatrix.m[10];\r\n const p3z = projectionMatrix.m[14];\r\n\r\n if (!engine.isNDCHalfZRange) {\r\n // Convert to NDC depth\r\n min = min * 2 - 1;\r\n max = max * 2 - 1;\r\n }\r\n\r\n // Convert to view depth\r\n min = p3z / (min - p2z);\r\n max = p3z / (max - p2z);\r\n }\r\n\r\n // Convert to normalized view depth\r\n const zNear = camera.minZ;\r\n const zFar = camera.maxZ;\r\n\r\n min = (min - zNear) / (zFar - zNear);\r\n max = (max - zNear) / (zFar - zNear);\r\n }\r\n\r\n if (min !== this._shadowGenerator.minDistance || max !== this._shadowGenerator.maxDistance) {\r\n this._shadowGenerator.setMinMaxDistance(min, max);\r\n }\r\n });\r\n }\r\n\r\n protected override _createShadowGenerator() {\r\n if (!(this.light instanceof DirectionalLight)) {\r\n throw new Error(`FrameGraphCascadedShadowGeneratorTask ${this.name}: the CSM shadow generator only supports directional lights.`);\r\n }\r\n this._shadowGenerator = new CascadedShadowGenerator(this.mapSize, this.light, this.useFloat32TextureType, this.camera, this.useRedTextureFormat);\r\n this._shadowGenerator.numCascades = this._numCascades;\r\n }\r\n\r\n protected override _setupShadowGenerator() {\r\n super._setupShadowGenerator();\r\n\r\n const shadowGenerator = this._shadowGenerator;\r\n if (shadowGenerator === undefined) {\r\n return;\r\n }\r\n\r\n shadowGenerator.debug = this._debug;\r\n shadowGenerator.stabilizeCascades = this._stabilizeCascades;\r\n shadowGenerator.lambda = this._lambda;\r\n shadowGenerator.cascadeBlendPercentage = this._cascadeBlendPercentage;\r\n shadowGenerator.depthClamp = this._depthClamp;\r\n shadowGenerator.shadowMaxZ = this._shadowMaxZ;\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphCascadedShadowGeneratorTask\";\r\n }\r\n\r\n public override record() {\r\n if (this.light === undefined || this.objectList === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphCascadedShadowGeneratorTask ${this.name}: light, objectList and camera are required`);\r\n }\r\n\r\n if (this.depthTexture !== undefined) {\r\n const depthTextureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.depthTexture);\r\n\r\n const size = !depthTextureCreationOptions.sizeIsPercentage\r\n ? textureSizeIsObject(depthTextureCreationOptions.size)\r\n ? depthTextureCreationOptions.size\r\n : { width: depthTextureCreationOptions.size, height: depthTextureCreationOptions.size }\r\n : this._frameGraph.textureManager.getAbsoluteDimensions(depthTextureCreationOptions.size);\r\n\r\n const width = size.width;\r\n const height = size.height;\r\n\r\n depthTextureCreationOptions.sizeIsPercentage = false;\r\n depthTextureCreationOptions.options.formats = [Constants.TEXTUREFORMAT_RG];\r\n depthTextureCreationOptions.options.samples = 1;\r\n\r\n this._thinMinMaxReducer.setTextureDimensions(width, height, this.depthTextureType);\r\n\r\n const reductionSteps = this._thinMinMaxReducer.reductionSteps;\r\n\r\n let targetTexture: FrameGraphTextureHandle;\r\n\r\n this._frameGraph.addPass(`${this.name} Before Min Max Reduction`).setExecuteFunc((context) => {\r\n context.pushDebugGroup(`Min Max Reduction`);\r\n });\r\n\r\n for (let i = 0; i < reductionSteps.length - 1; ++i) {\r\n const reductionStep = reductionSteps[i];\r\n\r\n depthTextureCreationOptions.size = { width: reductionSteps[i + 1].textureWidth, height: reductionSteps[i + 1].textureHeight };\r\n\r\n const postProcess = new FrameGraphPostProcessTask(reductionStep.name, this._frameGraph, reductionStep);\r\n\r\n postProcess.sourceTexture = i == 0 ? this.depthTexture : targetTexture!;\r\n postProcess.sourceSamplingMode = Constants.TEXTURE_NEAREST_NEAREST;\r\n postProcess.targetTexture = this._frameGraph.textureManager.createRenderTargetTexture(`${this.name} ${reductionStep.name}`, depthTextureCreationOptions);\r\n\r\n postProcess.record(true);\r\n\r\n targetTexture = postProcess.outputTexture;\r\n }\r\n\r\n this._frameGraph.addPass(`${this.name} After Min Max Reduction`).setExecuteFunc((context) => {\r\n context.popDebugGroup();\r\n if (this._autoCalcDepthBounds && this._currentAutoCalcDepthBoundsCounter >= 0) {\r\n if (++this._currentAutoCalcDepthBoundsCounter >= this._autoCalcDepthBoundsRefreshRate) {\r\n const minMaxTexture = context.getTextureFromHandle(targetTexture!);\r\n if (minMaxTexture) {\r\n this._thinMinMaxReducer.readMinMax(minMaxTexture);\r\n }\r\n }\r\n this._currentAutoCalcDepthBoundsCounter %= this._autoCalcDepthBoundsRefreshRate;\r\n if (this._autoCalcDepthBoundsRefreshRate === 0) {\r\n this._currentAutoCalcDepthBoundsCounter = -1;\r\n }\r\n }\r\n });\r\n }\r\n\r\n super.record();\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n this._thinMinMaxReducer.dispose();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"csmShadowGeneratorTask.js","sourceRoot":"","sources":["../../../../../../dev/core/src/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { FrameGraphTextureHandle, FrameGraph } from \"core/index\";\r\nimport { CascadedShadowGenerator } from \"../../../Lights/Shadows/cascadedShadowGenerator\";\r\nimport { FrameGraphShadowGeneratorTask } from \"./shadowGeneratorTask\";\r\nimport { DirectionalLight } from \"../../../Lights/directionalLight\";\r\nimport { DepthTextureType, ThinMinMaxReducer } from \"../../../Misc/thinMinMaxReducer\";\r\nimport { FrameGraphPostProcessTask } from \"../PostProcesses/postProcessTask\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\nimport { textureSizeIsObject } from \"../../../Materials/Textures/textureCreationOptions\";\r\n\r\n/**\r\n * Task used to generate a cascaded shadow map from a list of objects.\r\n */\r\nexport class FrameGraphCascadedShadowGeneratorTask extends FrameGraphShadowGeneratorTask {\r\n protected override _shadowGenerator: CascadedShadowGenerator | undefined;\r\n\r\n /**\r\n * Checks if a shadow generator task is a cascaded shadow generator task.\r\n * @param task The task to check.\r\n * @returns True if the task is a cascaded shadow generator task, else false.\r\n */\r\n public static IsCascadedShadowGenerator(task: FrameGraphShadowGeneratorTask): task is FrameGraphCascadedShadowGeneratorTask {\r\n return (task as FrameGraphCascadedShadowGeneratorTask).numCascades !== undefined;\r\n }\r\n\r\n /**\r\n * The depth texture used by the autoCalcDepthBounds feature (optional if autoCalcDepthBounds is set to false).\r\n * This texture is used to compute the min/max depth bounds of the scene to setup the cascaded shadow generator.\r\n * The texture should contain either “view,” “normalized view,” or “screen” depth values - if possible, connect “normalized view,” or “screen” for best performance.\r\n * Warning: Do not set a texture if you are not using the autoCalcDepthBounds feature, to avoid generating a depth texture that will not be used.\r\n */\r\n public depthTexture?: FrameGraphTextureHandle;\r\n\r\n /**\r\n * The type of the depth texture used by the autoCalcDepthBounds feature.\r\n */\r\n public depthTextureType: DepthTextureType = DepthTextureType.NormalizedViewDepth;\r\n\r\n private _numCascades = CascadedShadowGenerator.DEFAULT_CASCADES_COUNT;\r\n /**\r\n * The number of cascades.\r\n */\r\n public get numCascades() {\r\n return this._numCascades;\r\n }\r\n\r\n public set numCascades(value: number) {\r\n if (value === this._numCascades) {\r\n return;\r\n }\r\n\r\n this._numCascades = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.numCascades = value;\r\n this._updateShadowMap();\r\n }\r\n }\r\n\r\n private _debug = false;\r\n /**\r\n * Gets or sets a value indicating whether the shadow generator should display the cascades.\r\n */\r\n public get debug() {\r\n return this._debug;\r\n }\r\n\r\n public set debug(value: boolean) {\r\n if (value === this._debug) {\r\n return;\r\n }\r\n\r\n this._debug = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.debug = value;\r\n }\r\n }\r\n\r\n private _stabilizeCascades = false;\r\n /**\r\n * Gets or sets a value indicating whether the shadow generator should stabilize the cascades.\r\n */\r\n public get stabilizeCascades() {\r\n return this._stabilizeCascades;\r\n }\r\n\r\n public set stabilizeCascades(value: boolean) {\r\n if (value === this._stabilizeCascades) {\r\n return;\r\n }\r\n\r\n this._stabilizeCascades = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.stabilizeCascades = value;\r\n }\r\n }\r\n\r\n private _lambda = 0.5;\r\n /**\r\n * Gets or sets the lambda parameter of the shadow generator.\r\n */\r\n public get lambda() {\r\n return this._lambda;\r\n }\r\n\r\n public set lambda(value: number) {\r\n if (value === this._lambda) {\r\n return;\r\n }\r\n\r\n this._lambda = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.lambda = value;\r\n }\r\n }\r\n\r\n private _cascadeBlendPercentage = 0.1;\r\n /**\r\n * Gets or sets the cascade blend percentage.\r\n */\r\n public get cascadeBlendPercentage() {\r\n return this._cascadeBlendPercentage;\r\n }\r\n\r\n public set cascadeBlendPercentage(value: number) {\r\n if (value === this._cascadeBlendPercentage) {\r\n return;\r\n }\r\n\r\n this._cascadeBlendPercentage = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.cascadeBlendPercentage = value;\r\n }\r\n }\r\n\r\n private _depthClamp = true;\r\n /**\r\n * Gets or sets a value indicating whether the shadow generator should use depth clamping.\r\n */\r\n public get depthClamp() {\r\n return this._depthClamp;\r\n }\r\n\r\n public set depthClamp(value: boolean) {\r\n if (value === this._depthClamp) {\r\n return;\r\n }\r\n\r\n this._depthClamp = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.depthClamp = value;\r\n }\r\n }\r\n\r\n private _autoCalcDepthBounds = false;\r\n /**\r\n * Gets or sets a value indicating whether the shadow generator should automatically calculate the depth bounds.\r\n */\r\n public get autoCalcDepthBounds() {\r\n return this._autoCalcDepthBounds;\r\n }\r\n\r\n public set autoCalcDepthBounds(value: boolean) {\r\n if (value === this._autoCalcDepthBounds) {\r\n return;\r\n }\r\n\r\n this._autoCalcDepthBounds = value;\r\n this._currentAutoCalcDepthBoundsCounter = this._autoCalcDepthBoundsRefreshRate;\r\n\r\n if (!value) {\r\n this._shadowGenerator?.setMinMaxDistance(0, 1);\r\n }\r\n\r\n // All passes but the last one are related to min/max reduction and should be enabled/disabled depending on autoCalcDepthBounds value\r\n const passes = this.passes;\r\n for (let i = 0; i < passes.length - 1; ++i) {\r\n passes[i].disabled = !value;\r\n }\r\n }\r\n\r\n private _currentAutoCalcDepthBoundsCounter = 0;\r\n private _autoCalcDepthBoundsRefreshRate = 1;\r\n /**\r\n * Defines the refresh rate of the min/max computation used when autoCalcDepthBounds is set to true\r\n * Use 0 to compute just once, 1 to compute on every frame, 2 to compute every two frames and so on...\r\n */\r\n public get autoCalcDepthBoundsRefreshRate() {\r\n return this._autoCalcDepthBoundsRefreshRate;\r\n }\r\n\r\n public set autoCalcDepthBoundsRefreshRate(value: number) {\r\n this._autoCalcDepthBoundsRefreshRate = value;\r\n this._currentAutoCalcDepthBoundsCounter = this._autoCalcDepthBoundsRefreshRate;\r\n }\r\n\r\n private _shadowMaxZ = 10000;\r\n /**\r\n * Gets or sets the maximum shadow Z value.\r\n */\r\n public get shadowMaxZ() {\r\n return this._shadowMaxZ;\r\n }\r\n\r\n public set shadowMaxZ(value: number) {\r\n if (value === this._shadowMaxZ) {\r\n return;\r\n }\r\n\r\n this._shadowMaxZ = value;\r\n if (this._shadowGenerator) {\r\n this._shadowGenerator.shadowMaxZ = value;\r\n }\r\n }\r\n\r\n protected readonly _thinMinMaxReducer: ThinMinMaxReducer;\r\n\r\n /**\r\n * Creates a new shadow generator task.\r\n * @param name The name of the task.\r\n * @param frameGraph The frame graph the task belongs to.\r\n */\r\n constructor(name: string, frameGraph: FrameGraph) {\r\n super(name, frameGraph);\r\n\r\n this._thinMinMaxReducer = new ThinMinMaxReducer(frameGraph.scene);\r\n\r\n this._thinMinMaxReducer.onAfterReductionPerformed.add((minmax: { min: number; max: number }) => {\r\n if (!this._shadowGenerator) {\r\n return;\r\n }\r\n\r\n const camera = this.camera;\r\n\r\n let min = minmax.min,\r\n max = minmax.max;\r\n\r\n if (min >= max) {\r\n min = 0;\r\n max = 1;\r\n } else if (camera && this.depthTextureType !== DepthTextureType.NormalizedViewDepth) {\r\n if (this.depthTextureType === DepthTextureType.ScreenDepth) {\r\n const engine = this._frameGraph.engine;\r\n const projectionMatrix = camera.getProjectionMatrix();\r\n const p2z = projectionMatrix.m[10];\r\n const p3z = projectionMatrix.m[14];\r\n\r\n if (!engine.isNDCHalfZRange) {\r\n // Convert to NDC depth\r\n min = min * 2 - 1;\r\n max = max * 2 - 1;\r\n }\r\n\r\n // Convert to view depth\r\n min = p3z / (min - p2z);\r\n max = p3z / (max - p2z);\r\n }\r\n\r\n // Convert to normalized view depth\r\n const zNear = camera.minZ;\r\n const zFar = camera.maxZ;\r\n\r\n min = (min - zNear) / (zFar - zNear);\r\n max = (max - zNear) / (zFar - zNear);\r\n }\r\n\r\n if (min !== this._shadowGenerator.minDistance || max !== this._shadowGenerator.maxDistance) {\r\n this._shadowGenerator.setMinMaxDistance(min, max);\r\n }\r\n });\r\n }\r\n\r\n protected override _createShadowGeneratorInstance() {\r\n if (!(this.light instanceof DirectionalLight)) {\r\n throw new Error(`FrameGraphCascadedShadowGeneratorTask ${this.name}: the CSM shadow generator only supports directional lights.`);\r\n }\r\n this._shadowGenerator = new CascadedShadowGenerator(this.mapSize, this.light, this.useFloat32TextureType, this.camera, this.useRedTextureFormat);\r\n }\r\n\r\n protected override _createShadowGenerator() {\r\n if (super._createShadowGenerator()) {\r\n const shadowGenerator = this._shadowGenerator;\r\n if (shadowGenerator === undefined) {\r\n return;\r\n }\r\n\r\n shadowGenerator.numCascades = this._numCascades;\r\n shadowGenerator.debug = this._debug;\r\n shadowGenerator.stabilizeCascades = this._stabilizeCascades;\r\n shadowGenerator.lambda = this._lambda;\r\n shadowGenerator.cascadeBlendPercentage = this._cascadeBlendPercentage;\r\n shadowGenerator.depthClamp = this._depthClamp;\r\n shadowGenerator.shadowMaxZ = this._shadowMaxZ;\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public override getClassName(): string {\r\n return \"FrameGraphCascadedShadowGeneratorTask\";\r\n }\r\n\r\n public override record() {\r\n if (this.light === undefined || this.objectList === undefined || this.camera === undefined) {\r\n throw new Error(`FrameGraphCascadedShadowGeneratorTask ${this.name}: light, objectList and camera are required`);\r\n }\r\n\r\n if (this.depthTexture !== undefined) {\r\n const depthTextureCreationOptions = this._frameGraph.textureManager.getTextureCreationOptions(this.depthTexture);\r\n\r\n const size = !depthTextureCreationOptions.sizeIsPercentage\r\n ? textureSizeIsObject(depthTextureCreationOptions.size)\r\n ? depthTextureCreationOptions.size\r\n : { width: depthTextureCreationOptions.size, height: depthTextureCreationOptions.size }\r\n : this._frameGraph.textureManager.getAbsoluteDimensions(depthTextureCreationOptions.size);\r\n\r\n const width = size.width;\r\n const height = size.height;\r\n\r\n depthTextureCreationOptions.sizeIsPercentage = false;\r\n depthTextureCreationOptions.options.formats = [Constants.TEXTUREFORMAT_RG];\r\n depthTextureCreationOptions.options.samples = 1;\r\n\r\n this._thinMinMaxReducer.setTextureDimensions(width, height, this.depthTextureType);\r\n\r\n const reductionSteps = this._thinMinMaxReducer.reductionSteps;\r\n\r\n let targetTexture: FrameGraphTextureHandle;\r\n\r\n this._frameGraph.addPass(`${this.name} Before Min Max Reduction`).setExecuteFunc((context) => {\r\n context.pushDebugGroup(`Min Max Reduction`);\r\n });\r\n\r\n for (let i = 0; i < reductionSteps.length - 1; ++i) {\r\n const reductionStep = reductionSteps[i];\r\n\r\n depthTextureCreationOptions.size = { width: reductionSteps[i + 1].textureWidth, height: reductionSteps[i + 1].textureHeight };\r\n\r\n const postProcess = new FrameGraphPostProcessTask(reductionStep.name, this._frameGraph, reductionStep);\r\n\r\n postProcess.sourceTexture = i == 0 ? this.depthTexture : targetTexture!;\r\n postProcess.sourceSamplingMode = Constants.TEXTURE_NEAREST_NEAREST;\r\n postProcess.targetTexture = this._frameGraph.textureManager.createRenderTargetTexture(`${this.name} ${reductionStep.name}`, depthTextureCreationOptions);\r\n\r\n postProcess.record(true);\r\n\r\n targetTexture = postProcess.outputTexture;\r\n }\r\n\r\n this._frameGraph.addPass(`${this.name} After Min Max Reduction`).setExecuteFunc((context) => {\r\n context.popDebugGroup();\r\n if (this._autoCalcDepthBounds && this._currentAutoCalcDepthBoundsCounter >= 0) {\r\n if (++this._currentAutoCalcDepthBoundsCounter >= this._autoCalcDepthBoundsRefreshRate) {\r\n const minMaxTexture = context.getTextureFromHandle(targetTexture!);\r\n if (minMaxTexture) {\r\n this._thinMinMaxReducer.readMinMax(minMaxTexture);\r\n }\r\n }\r\n this._currentAutoCalcDepthBoundsCounter %= this._autoCalcDepthBoundsRefreshRate;\r\n if (this._autoCalcDepthBoundsRefreshRate === 0) {\r\n this._currentAutoCalcDepthBoundsCounter = -1;\r\n }\r\n }\r\n });\r\n }\r\n\r\n super.record();\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n this._thinMinMaxReducer.dispose();\r\n }\r\n}\r\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FrameGraph, FrameGraphTextureHandle, Scene, Camera, FrameGraphObjectList, FrameGraphRenderContext, ObjectRendererOptions, Nullable, Observer, FrameGraphShadowGeneratorTask, FrameGraphRenderPass, AbstractEngine, SmartArray, SubMesh } from "../../../index.js";
|
|
1
|
+
import type { FrameGraph, FrameGraphTextureHandle, Scene, Camera, FrameGraphObjectList, FrameGraphRenderContext, ObjectRendererOptions, Nullable, Observer, FrameGraphShadowGeneratorTask, FrameGraphRenderPass, AbstractEngine, SmartArray, SubMesh, RenderingGroup } from "../../../index.js";
|
|
2
2
|
import { FrameGraphTaskMultiRenderTarget } from "../../frameGraphTaskMultiRenderTarget.js";
|
|
3
3
|
import { ObjectRenderer } from "../../../Rendering/objectRenderer.js";
|
|
4
4
|
import { ThinDepthPeelingRenderer } from "../../../Rendering/thinDepthPeelingRenderer.js";
|
|
@@ -181,6 +181,5 @@ export declare class FrameGraphObjectRendererTask extends FrameGraphTaskMultiRen
|
|
|
181
181
|
protected _getTargetHandles(): FrameGraphTextureHandle[];
|
|
182
182
|
protected _prepareRendering(context: FrameGraphRenderContext, depthEnabled: boolean): Nullable<number[]>;
|
|
183
183
|
protected _setLightsForShadow(): void;
|
|
184
|
-
protected _renderTransparentMeshesWithOIT(transparentSubMeshes: SmartArray<SubMesh
|
|
185
|
-
protected _sceneHasClusteredLights(): boolean;
|
|
184
|
+
protected _renderTransparentMeshesWithOIT(transparentSubMeshes: SmartArray<SubMesh>, renderingGroup: RenderingGroup): void;
|
|
186
185
|
}
|
|
@@ -3,9 +3,7 @@ import { FrameGraphTaskMultiRenderTarget } from "../../frameGraphTaskMultiRender
|
|
|
3
3
|
import { ObjectRenderer } from "../../../Rendering/objectRenderer.js";
|
|
4
4
|
|
|
5
5
|
import { ThinDepthPeelingRenderer } from "../../../Rendering/thinDepthPeelingRenderer.js";
|
|
6
|
-
import { RenderingManager } from "../../../Rendering/renderingManager.js";
|
|
7
6
|
import { FrameGraphRenderTarget } from "../../frameGraphRenderTarget.js";
|
|
8
|
-
import { LightConstants } from "../../../Lights/lightConstants.js";
|
|
9
7
|
/**
|
|
10
8
|
* Task used to render objects to a texture.
|
|
11
9
|
*/
|
|
@@ -285,13 +283,6 @@ export class FrameGraphObjectRendererTask extends FrameGraphTaskMultiRenderTarge
|
|
|
285
283
|
this._oitRenderer.useRenderPasses = true;
|
|
286
284
|
this.outputTexture = this._frameGraph.textureManager.createDanglingHandle();
|
|
287
285
|
this.outputDepthTexture = this._frameGraph.textureManager.createDanglingHandle();
|
|
288
|
-
this.onBeforeTaskExecute.add(() => {
|
|
289
|
-
/**
|
|
290
|
-
* When clustered lights are used, we need to disable the debug markers because there's a flushFramebuffer call
|
|
291
|
-
* done by the clustered light container during the frame rendering that breaks the debug groups.
|
|
292
|
-
*/
|
|
293
|
-
this._disableDebugMarkers = this._engine._enableGPUDebugMarkers && this._sceneHasClusteredLights();
|
|
294
|
-
});
|
|
295
286
|
}
|
|
296
287
|
isReady() {
|
|
297
288
|
this._renderer.renderList = this.objectList.meshes;
|
|
@@ -468,30 +459,15 @@ export class FrameGraphObjectRendererTask extends FrameGraphTaskMultiRenderTarge
|
|
|
468
459
|
});
|
|
469
460
|
}
|
|
470
461
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
471
|
-
_renderTransparentMeshesWithOIT(transparentSubMeshes) {
|
|
472
|
-
const renderingGroups = this._renderer.renderingManager.renderingGroups;
|
|
462
|
+
_renderTransparentMeshesWithOIT(transparentSubMeshes, renderingGroup) {
|
|
473
463
|
const saveOIT = this._scene._useOrderIndependentTransparency;
|
|
474
464
|
this._scene._useOrderIndependentTransparency = true;
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
}
|
|
480
|
-
const excludedMeshes = this._oitRenderer.render(transparentSubMeshes);
|
|
481
|
-
if (excludedMeshes.length) {
|
|
482
|
-
// Render leftover meshes that could not be processed by depth peeling
|
|
483
|
-
renderingGroup._renderTransparent(excludedMeshes);
|
|
484
|
-
}
|
|
465
|
+
const excludedMeshes = this._oitRenderer.render(transparentSubMeshes);
|
|
466
|
+
if (excludedMeshes.length) {
|
|
467
|
+
// Render leftover meshes that could not be processed by depth peeling
|
|
468
|
+
renderingGroup._renderTransparent(excludedMeshes);
|
|
485
469
|
}
|
|
486
470
|
this._scene._useOrderIndependentTransparency = saveOIT;
|
|
487
471
|
}
|
|
488
|
-
_sceneHasClusteredLights() {
|
|
489
|
-
for (const light of this._scene.lights) {
|
|
490
|
-
if (light.getTypeID() === LightConstants.LIGHTTYPEID_CLUSTERED_CONTAINER && light.isSupported) {
|
|
491
|
-
return true;
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
return false;
|
|
495
|
-
}
|
|
496
472
|
}
|
|
497
473
|
//# sourceMappingURL=objectRendererTask.js.map
|