@onerjs/core 9.0.2 → 9.0.3
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/Buffers/buffer.pure.js +4 -0
- package/Buffers/buffer.pure.js.map +1 -1
- package/Cameras/camera.pure.d.ts +14 -0
- package/Cameras/camera.pure.js +15 -0
- package/Cameras/camera.pure.js.map +1 -1
- package/Compute/computeShader.pure.d.ts +2 -1
- package/Compute/computeShader.pure.js +29 -10
- package/Compute/computeShader.pure.js.map +1 -1
- package/Culling/ray.core.js +22 -9
- package/Culling/ray.core.js.map +1 -1
- package/Engines/IDrawContext.d.ts +2 -0
- package/Engines/IDrawContext.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +55 -4
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/Native/nativeRenderTargetWrapper.d.ts +1 -0
- package/Engines/Native/nativeRenderTargetWrapper.js +5 -1
- package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
- package/Engines/Processors/shaderCodeInliner.d.ts +2 -0
- package/Engines/Processors/shaderCodeInliner.js +251 -6
- package/Engines/Processors/shaderCodeInliner.js.map +1 -1
- package/Engines/Processors/shaderProcessor.js +10 -1
- package/Engines/Processors/shaderProcessor.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.debugging.pure.js +12 -0
- package/Engines/WebGPU/Extensions/engine.debugging.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.pure.js +0 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.query.pure.js +5 -0
- package/Engines/WebGPU/Extensions/engine.query.pure.js.map +1 -1
- package/Engines/WebGPU/webgpuBufferManager.js +7 -0
- package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheTextureView.d.ts +1 -1
- package/Engines/WebGPU/webgpuCacheTextureView.js +20 -8
- package/Engines/WebGPU/webgpuCacheTextureView.js.map +1 -1
- package/Engines/WebGPU/webgpuDrawContext.d.ts +2 -0
- package/Engines/WebGPU/webgpuDrawContext.js +6 -0
- package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
- package/Engines/WebGPU/webgpuQuerySet.d.ts +3 -3
- package/Engines/WebGPU/webgpuQuerySet.js +23 -9
- package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
- package/Engines/WebGPU/webgpuRenderPassCommandStream.d.ts +156 -0
- package/Engines/WebGPU/webgpuRenderPassCommandStream.js +323 -0
- package/Engines/WebGPU/webgpuRenderPassCommandStream.js.map +1 -0
- package/Engines/WebGPU/webgpuTextureManager.d.ts +1 -1
- package/Engines/WebGPU/webgpuTextureManager.js +4 -3
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/WebGPU/webgpuTimestampQuery.d.ts +3 -1
- package/Engines/WebGPU/webgpuTimestampQuery.js +9 -6
- package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
- package/Engines/abstractEngine.pure.d.ts +2 -0
- package/Engines/abstractEngine.pure.js +14 -5
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/constants.d.ts +6 -0
- package/Engines/constants.js +6 -0
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.d.ts +198 -24
- package/Engines/pure.d.ts +1 -0
- package/Engines/pure.js +1 -0
- package/Engines/pure.js.map +1 -1
- package/Engines/renderCommandBatcher.pure.d.ts +16 -0
- package/Engines/renderCommandBatcher.pure.js +24 -0
- package/Engines/renderCommandBatcher.pure.js.map +1 -0
- package/Engines/thinEngine.functions.js +3 -2
- package/Engines/thinEngine.functions.js.map +1 -1
- package/Engines/thinEngine.pure.js +18 -2
- package/Engines/thinEngine.pure.js.map +1 -1
- package/Engines/thinNativeEngine.pure.d.ts +10 -7
- package/Engines/thinNativeEngine.pure.js +117 -46
- package/Engines/thinNativeEngine.pure.js.map +1 -1
- package/Engines/thinWebGPUEngine.d.ts +8 -0
- package/Engines/thinWebGPUEngine.js +11 -0
- package/Engines/thinWebGPUEngine.js.map +1 -1
- package/Engines/webgpuEngine.pure.d.ts +60 -1
- package/Engines/webgpuEngine.pure.js +238 -42
- package/Engines/webgpuEngine.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Audio/flowGraphGetSoundVolumeBlock.pure.d.ts +3 -3
- package/FlowGraph/Blocks/Data/Audio/flowGraphGetSoundVolumeBlock.pure.js +2 -1
- package/FlowGraph/Blocks/Data/Audio/flowGraphGetSoundVolumeBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Audio/flowGraphIsSoundPlayingBlock.pure.d.ts +3 -3
- package/FlowGraph/Blocks/Data/Audio/flowGraphIsSoundPlayingBlock.pure.js +2 -1
- package/FlowGraph/Blocks/Data/Audio/flowGraphIsSoundPlayingBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.d.ts +5 -0
- package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.js +8 -0
- package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.js.map +1 -0
- package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.pure.d.ts +77 -0
- package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.pure.js +141 -0
- package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.pure.js.map +1 -0
- package/FlowGraph/Blocks/Event/flowGraphSoundEndedEventBlock.pure.d.ts +5 -3
- package/FlowGraph/Blocks/Event/flowGraphSoundEndedEventBlock.pure.js +38 -7
- package/FlowGraph/Blocks/Event/flowGraphSoundEndedEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/index.d.ts +1 -0
- package/FlowGraph/Blocks/Event/index.js +1 -0
- package/FlowGraph/Blocks/Event/index.js.map +1 -1
- package/FlowGraph/Blocks/Event/pure.d.ts +1 -0
- package/FlowGraph/Blocks/Event/pure.js +1 -0
- package/FlowGraph/Blocks/Event/pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphPauseSoundBlock.pure.d.ts +3 -3
- package/FlowGraph/Blocks/Execution/Audio/flowGraphPauseSoundBlock.pure.js +2 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphPauseSoundBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphPlaySoundBlock.pure.d.ts +3 -3
- package/FlowGraph/Blocks/Execution/Audio/flowGraphPlaySoundBlock.pure.js +2 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphPlaySoundBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphSetSoundVolumeBlock.pure.d.ts +3 -3
- package/FlowGraph/Blocks/Execution/Audio/flowGraphSetSoundVolumeBlock.pure.js +2 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphSetSoundVolumeBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphStopSoundBlock.pure.d.ts +3 -3
- package/FlowGraph/Blocks/Execution/Audio/flowGraphStopSoundBlock.pure.js +2 -1
- package/FlowGraph/Blocks/Execution/Audio/flowGraphStopSoundBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/allBlocks.pure.js +2 -0
- package/FlowGraph/Blocks/allBlocks.pure.js.map +1 -1
- package/FlowGraph/Blocks/flowGraphBlockFactory.js +2 -0
- package/FlowGraph/Blocks/flowGraphBlockFactory.js.map +1 -1
- package/FlowGraph/Blocks/flowGraphBlockNames.d.ts +1 -0
- package/FlowGraph/Blocks/flowGraphBlockNames.js +1 -0
- package/FlowGraph/Blocks/flowGraphBlockNames.js.map +1 -1
- package/FlowGraph/flowGraph.d.ts +12 -1
- package/FlowGraph/flowGraph.js +38 -0
- package/FlowGraph/flowGraph.js.map +1 -1
- package/FlowGraph/flowGraphCoordinator.d.ts +44 -0
- package/FlowGraph/flowGraphCoordinator.js +141 -0
- package/FlowGraph/flowGraphCoordinator.js.map +1 -1
- package/FlowGraph/flowGraphDataConnection.pure.js +41 -14
- package/FlowGraph/flowGraphDataConnection.pure.js.map +1 -1
- package/FlowGraph/flowGraphParser.js +105 -5
- package/FlowGraph/flowGraphParser.js.map +1 -1
- package/FlowGraph/flowGraphSoundAssets.d.ts +40 -0
- package/FlowGraph/flowGraphSoundAssets.js +33 -0
- package/FlowGraph/flowGraphSoundAssets.js.map +1 -0
- package/FlowGraph/index.d.ts +1 -0
- package/FlowGraph/index.js +1 -0
- package/FlowGraph/index.js.map +1 -1
- package/FlowGraph/pure.d.ts +1 -0
- package/FlowGraph/pure.js +1 -0
- package/FlowGraph/pure.js.map +1 -1
- package/FlowGraph/serialization.d.ts +8 -0
- package/FlowGraph/serialization.js +31 -12
- package/FlowGraph/serialization.js.map +1 -1
- package/FlowGraph/typeDefinitions.d.ts +25 -0
- package/FlowGraph/typeDefinitions.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/taaTask.js +2 -0
- package/FrameGraph/Tasks/PostProcesses/taaTask.js.map +1 -1
- package/Instrumentation/engineInstrumentation.d.ts +1 -0
- package/Instrumentation/engineInstrumentation.js +25 -6
- package/Instrumentation/engineInstrumentation.js.map +1 -1
- package/Lights/Clustered/clusteredLightContainer.pure.js +2 -0
- package/Lights/Clustered/clusteredLightContainer.pure.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.pure.d.ts +36 -1
- package/Lights/Shadows/cascadedShadowGenerator.pure.js +202 -27
- package/Lights/Shadows/cascadedShadowGenerator.pure.js.map +1 -1
- package/Lights/directionalLight.pure.d.ts +24 -10
- package/Lights/directionalLight.pure.js +29 -11
- package/Lights/directionalLight.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +4 -4
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.pure.js +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Input/inputBlock.pure.js +4 -0
- package/Materials/Node/Blocks/Input/inputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.d.ts +9 -0
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js +23 -3
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.pure.js +1 -1
- package/Materials/PBR/openpbrMaterial.pure.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.pure.d.ts +9 -0
- package/Materials/PBR/pbrBaseMaterial.pure.js +60 -1
- package/Materials/PBR/pbrBaseMaterial.pure.js.map +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +11 -0
- package/Materials/PBR/pbrBaseSimpleMaterial.js +21 -2
- package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
- package/Materials/PBR/pbrMaterial.pure.d.ts +12 -0
- package/Materials/PBR/pbrMaterial.pure.js +23 -3
- package/Materials/PBR/pbrMaterial.pure.js.map +1 -1
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.d.ts +1 -0
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.js +10 -0
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.js.map +1 -1
- package/Materials/Textures/HTML/htmlInCanvasPolyfill.d.ts +5 -0
- package/Materials/Textures/HTML/htmlInCanvasPolyfill.js +7 -0
- package/Materials/Textures/HTML/htmlInCanvasPolyfill.js.map +1 -1
- package/Materials/Textures/HTML/htmlInteractionManager.d.ts +9 -3
- package/Materials/Textures/HTML/htmlInteractionManager.js +64 -5
- package/Materials/Textures/HTML/htmlInteractionManager.js.map +1 -1
- package/Materials/Textures/HTML/htmlTexture.d.ts +11 -11
- package/Materials/Textures/HTML/htmlTexture.js +106 -65
- package/Materials/Textures/HTML/htmlTexture.js.map +1 -1
- package/Materials/Textures/Loaders/internalTextureLoader.d.ts +2 -1
- package/Materials/Textures/Loaders/internalTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.d.ts +2 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js +4 -50
- package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js +10 -0
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
- package/Materials/Textures/dynamicTexture.pure.js +6 -0
- package/Materials/Textures/dynamicTexture.pure.js.map +1 -1
- package/Materials/Textures/ktx2encoderTypes.d.ts +51 -0
- package/Materials/Textures/ktx2encoderTypes.js +2 -0
- package/Materials/Textures/ktx2encoderTypes.js.map +1 -0
- package/Materials/Textures/renderTargetTexture.pure.js +10 -2
- package/Materials/Textures/renderTargetTexture.pure.js.map +1 -1
- package/Materials/Textures/textureMerger.d.ts +11 -0
- package/Materials/Textures/textureMerger.js +34 -19
- package/Materials/Textures/textureMerger.js.map +1 -1
- package/Materials/Textures/textureProcessor.d.ts +145 -0
- package/Materials/Textures/textureProcessor.js +445 -45
- package/Materials/Textures/textureProcessor.js.map +1 -1
- package/Materials/Textures/textureSampling.functions.d.ts +41 -0
- package/Materials/Textures/textureSampling.functions.js +82 -0
- package/Materials/Textures/textureSampling.functions.js.map +1 -0
- package/Materials/drawWrapper.d.ts +8 -0
- package/Materials/drawWrapper.js +19 -0
- package/Materials/drawWrapper.js.map +1 -1
- package/Materials/effect.pure.d.ts +6 -0
- package/Materials/effect.pure.js +28 -6
- package/Materials/effect.pure.js.map +1 -1
- package/Materials/effect.webgl.functions.pure.js +1 -1
- package/Materials/effect.webgl.functions.pure.js.map +1 -1
- package/Materials/material.pure.d.ts +5 -0
- package/Materials/material.pure.js +9 -2
- package/Materials/material.pure.js.map +1 -1
- package/Materials/materialFlags.d.ts +6 -0
- package/Materials/materialFlags.js +14 -0
- package/Materials/materialFlags.js.map +1 -1
- package/Materials/materialHelper.functions.d.ts +2 -1
- package/Materials/materialHelper.functions.js +36 -2
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/materialHelper.geometryrendering.js +19 -16
- package/Materials/materialHelper.geometryrendering.js.map +1 -1
- package/Materials/materialPluginManager.pure.js +12 -8
- package/Materials/materialPluginManager.pure.js.map +1 -1
- package/Materials/prePassConfiguration.js +19 -16
- package/Materials/prePassConfiguration.js.map +1 -1
- package/Materials/shaderMaterial.pure.js +19 -6
- package/Materials/shaderMaterial.pure.js.map +1 -1
- package/Materials/shadowDepthWrapper.d.ts +6 -0
- package/Materials/shadowDepthWrapper.js +17 -0
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Meshes/Compression/dracoCodec.d.ts +14 -0
- package/Meshes/Compression/dracoCodec.js +22 -0
- package/Meshes/Compression/dracoCodec.js.map +1 -1
- package/Meshes/Compression/dracoDecoder.d.ts +1 -0
- package/Meshes/Compression/dracoDecoder.js +27 -0
- package/Meshes/Compression/dracoDecoder.js.map +1 -1
- package/Meshes/Compression/dracoEncoder.d.ts +1 -0
- package/Meshes/Compression/dracoEncoder.js +8 -0
- package/Meshes/Compression/dracoEncoder.js.map +1 -1
- package/Meshes/Compression/meshoptCompression.d.ts +1 -0
- package/Meshes/Compression/meshoptCompression.js +9 -0
- package/Meshes/Compression/meshoptCompression.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingGpuSorter.d.ts +415 -0
- package/Meshes/GaussianSplatting/gaussianSplattingGpuSorter.js +912 -0
- package/Meshes/GaussianSplatting/gaussianSplattingGpuSorter.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +3 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +40 -9
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +112 -8
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +696 -74
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
- package/Meshes/abstractMesh.pure.js +12 -4
- package/Meshes/abstractMesh.pure.js.map +1 -1
- package/Meshes/geometry.d.ts +5 -0
- package/Meshes/geometry.js +25 -0
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/index.d.ts +1 -0
- package/Meshes/index.js +1 -0
- package/Meshes/index.js.map +1 -1
- package/Meshes/mesh.pure.d.ts +7 -0
- package/Meshes/mesh.pure.js +18 -13
- package/Meshes/mesh.pure.js.map +1 -1
- package/Meshes/pure.d.ts +1 -0
- package/Meshes/pure.js +1 -0
- package/Meshes/pure.js.map +1 -1
- package/Meshes/subMesh.pure.d.ts +3 -0
- package/Meshes/subMesh.pure.js +26 -0
- package/Meshes/subMesh.pure.js.map +1 -1
- package/Meshes/thinInstanceMesh.pure.js +5 -3
- package/Meshes/thinInstanceMesh.pure.js.map +1 -1
- package/Misc/index.d.ts +1 -0
- package/Misc/index.js +1 -0
- package/Misc/index.js.map +1 -1
- package/Misc/khronosTextureContainer2.d.ts +3 -2
- package/Misc/khronosTextureContainer2.js +24 -6
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/khronosTextureContainer2Encoder.d.ts +166 -0
- package/Misc/khronosTextureContainer2Encoder.js +556 -0
- package/Misc/khronosTextureContainer2Encoder.js.map +1 -0
- package/Misc/khronosTextureContainer2EncoderWorker.d.ts +61 -0
- package/Misc/khronosTextureContainer2EncoderWorker.js +55 -0
- package/Misc/khronosTextureContainer2EncoderWorker.js.map +1 -0
- package/Misc/pure.d.ts +1 -0
- package/Misc/pure.js +1 -0
- package/Misc/pure.js.map +1 -1
- package/Misc/textureFormat.functions.d.ts +6 -0
- package/Misc/textureFormat.functions.js +54 -0
- package/Misc/textureFormat.functions.js.map +1 -0
- package/Misc/textureTools.d.ts +6 -2
- package/Misc/textureTools.js +100 -42
- package/Misc/textureTools.js.map +1 -1
- package/Misc/tools.pure.js +1 -1
- package/Misc/tools.pure.js.map +1 -1
- package/Particles/Node/Blocks/systemBlock.pure.d.ts +1 -1
- package/Particles/Node/Blocks/systemBlock.pure.js +6 -3
- package/Particles/Node/Blocks/systemBlock.pure.js.map +1 -1
- package/Particles/computeShaderParticleSystem.pure.js +5 -0
- package/Particles/computeShaderParticleSystem.pure.js.map +1 -1
- package/Particles/gpuParticleSystem.pure.d.ts +2 -0
- package/Particles/gpuParticleSystem.pure.js +25 -1
- package/Particles/gpuParticleSystem.pure.js.map +1 -1
- package/Particles/solidParticle.d.ts +5 -0
- package/Particles/solidParticle.js +5 -0
- package/Particles/solidParticle.js.map +1 -1
- package/Particles/solidParticleSystem.d.ts +10 -0
- package/Particles/solidParticleSystem.js +72 -13
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.pure.js +4 -0
- package/Particles/thinParticleSystem.pure.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.pure.d.ts +27 -6
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.pure.js +60 -5
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.pure.js.map +1 -1
- package/PostProcesses/thinTAAPostProcess.d.ts +1 -0
- package/PostProcesses/thinTAAPostProcess.js +17 -1
- package/PostProcesses/thinTAAPostProcess.js.map +1 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.pure.d.ts +2 -1
- package/PostProcesses/volumetricLightScatteringPostProcess.pure.js +6 -5
- package/PostProcesses/volumetricLightScatteringPostProcess.pure.js.map +1 -1
- package/Rendering/boundingBoxRenderer.pure.js +2 -3
- package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
- package/Rendering/geometryBufferRenderer.pure.js +8 -2
- package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
- package/Rendering/objectRenderer.d.ts +1 -0
- package/Rendering/objectRenderer.js +14 -0
- package/Rendering/objectRenderer.js.map +1 -1
- package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js +2 -2
- package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/bumpVertex.js +1 -1
- package/Shaders/ShadersInclude/bumpVertex.js.map +1 -1
- package/Shaders/ShadersInclude/bumpVertexDeclaration.js +1 -1
- package/Shaders/ShadersInclude/bumpVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js +5 -1
- package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/helperFunctions.js +2 -2
- package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrBackgroundTransmission.js +1 -1
- package/Shaders/ShadersInclude/openpbrBackgroundTransmission.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrVertexDeclaration.js +6 -0
- package/Shaders/ShadersInclude/openpbrVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js +11 -1
- package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockNormalFinal.js +9 -0
- package/Shaders/ShadersInclude/pbrBlockNormalFinal.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance.js +1 -1
- package/Shaders/ShadersInclude/pbrBlockReflectance.js.map +1 -1
- package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js +1 -1
- package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +7 -1
- package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +1 -0
- package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrIBLFunctions.js +12 -0
- package/Shaders/ShadersInclude/pbrIBLFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrVertexDeclaration.js +3 -0
- package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
- package/Shaders/geometry.vertex.js +6 -6
- package/Shaders/geometry.vertex.js.map +1 -1
- package/Shaders/gpuUpdateParticles.vertex.js +1 -1
- package/Shaders/gpuUpdateParticles.vertex.js.map +1 -1
- package/Shaders/lod.fragment.js +15 -2
- package/Shaders/lod.fragment.js.map +1 -1
- package/Shaders/lod3D.fragment.js +15 -2
- package/Shaders/lod3D.fragment.js.map +1 -1
- package/Shaders/lodCube.fragment.js +15 -2
- package/Shaders/lodCube.fragment.js.map +1 -1
- package/Shaders/openpbr.vertex.js +2 -0
- package/Shaders/openpbr.vertex.js.map +1 -1
- package/Shaders/pbr.fragment.js +12 -1
- package/Shaders/pbr.fragment.js.map +1 -1
- package/Shaders/pbr.vertex.js +2 -0
- package/Shaders/pbr.vertex.js.map +1 -1
- package/Shaders/textureMerger.fragment.js +28 -0
- package/Shaders/textureMerger.fragment.js.map +1 -1
- package/Shaders/textureProcessor.fragment.js +26 -4
- package/Shaders/textureProcessor.fragment.js.map +1 -1
- package/Shaders/volumetricLightScattering.fragment.js +1 -1
- package/Shaders/volumetricLightScattering.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js +2 -2
- package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bumpVertex.js +1 -1
- package/ShadersWGSL/ShadersInclude/bumpVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/bumpVertexDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/bumpVertexDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +1 -1
- package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/helperFunctions.js +2 -2
- package/ShadersWGSL/ShadersInclude/helperFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js +44 -2
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js +17 -3
- package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js +12 -1
- package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js +1 -1
- package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js +11 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js +9 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrClusteredLightingFunctions.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrClusteredLightingFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js +1 -0
- package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.js +8 -0
- package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/prePassVertex.js +2 -2
- package/ShadersWGSL/ShadersInclude/prePassVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/prePassVertexDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/prePassVertexDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js +3 -1
- package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/shadowsVertex.js +16 -0
- package/ShadersWGSL/ShadersInclude/shadowsVertex.js.map +1 -1
- package/ShadersWGSL/default.fragment.js +4 -4
- package/ShadersWGSL/default.fragment.js.map +1 -1
- package/ShadersWGSL/default.vertex.js +1 -1
- package/ShadersWGSL/default.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js +3 -3
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
- package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
- package/ShadersWGSL/gsSortCount.compute.d.ts +5 -0
- package/ShadersWGSL/gsSortCount.compute.js +19 -0
- package/ShadersWGSL/gsSortCount.compute.js.map +1 -0
- package/ShadersWGSL/gsSortKeys.compute.d.ts +5 -0
- package/ShadersWGSL/gsSortKeys.compute.js +49 -0
- package/ShadersWGSL/gsSortKeys.compute.js.map +1 -0
- package/ShadersWGSL/gsSortOutput.compute.d.ts +5 -0
- package/ShadersWGSL/gsSortOutput.compute.js +28 -0
- package/ShadersWGSL/gsSortOutput.compute.js.map +1 -0
- package/ShadersWGSL/gsSortScanLocal.compute.d.ts +5 -0
- package/ShadersWGSL/gsSortScanLocal.compute.js +23 -0
- package/ShadersWGSL/gsSortScanLocal.compute.js.map +1 -0
- package/ShadersWGSL/gsSortScanSums.compute.d.ts +5 -0
- package/ShadersWGSL/gsSortScanSums.compute.js +19 -0
- package/ShadersWGSL/gsSortScanSums.compute.js.map +1 -0
- package/ShadersWGSL/gsSortScatter.compute.d.ts +5 -0
- package/ShadersWGSL/gsSortScatter.compute.js +33 -0
- package/ShadersWGSL/gsSortScatter.compute.js.map +1 -0
- package/ShadersWGSL/lod.fragment.js +14 -2
- package/ShadersWGSL/lod.fragment.js.map +1 -1
- package/ShadersWGSL/lod3D.fragment.js +14 -2
- package/ShadersWGSL/lod3D.fragment.js.map +1 -1
- package/ShadersWGSL/lodCube.fragment.js +14 -2
- package/ShadersWGSL/lodCube.fragment.js.map +1 -1
- package/ShadersWGSL/openpbr.vertex.js +3 -1
- package/ShadersWGSL/openpbr.vertex.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +11 -0
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/pbr.vertex.js +3 -1
- package/ShadersWGSL/pbr.vertex.js.map +1 -1
- package/ShadersWGSL/textureMerger.fragment.js +40 -4
- package/ShadersWGSL/textureMerger.fragment.js.map +1 -1
- package/ShadersWGSL/textureProcessor.fragment.js +26 -4
- package/ShadersWGSL/textureProcessor.fragment.js.map +1 -1
- package/Sprites/spriteRenderer.js +15 -5
- package/Sprites/spriteRenderer.js.map +1 -1
- package/package.json +1 -1
- package/scene.pure.d.ts +23 -1
- package/scene.pure.js +83 -1
- package/scene.pure.js.map +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/** This file must only contain pure code and pure imports */
|
|
2
|
+
import { type Camera } from "../../../Cameras/camera.pure.js";
|
|
2
3
|
import { type Material } from "../../../Materials/material.pure.js";
|
|
3
4
|
import { MaterialDefines } from "../../../Materials/materialDefines.js";
|
|
4
5
|
import { MaterialPluginBase } from "../../../Materials/materialPluginBase.pure.js";
|
|
@@ -6,7 +7,7 @@ import { ShaderLanguage } from "../../../Materials/shaderLanguage.js";
|
|
|
6
7
|
import { type UniformBuffer } from "../../../Materials/uniformBuffer.js";
|
|
7
8
|
import { Vector2 } from "../../../Maths/math.vector.pure.js";
|
|
8
9
|
import { type Scene } from "../../../scene.pure.js";
|
|
9
|
-
import { type Nullable } from "../../../types.js";
|
|
10
|
+
import { type DeepImmutable, type Nullable } from "../../../types.js";
|
|
10
11
|
declare class TAAJitterMaterialDefines extends MaterialDefines {
|
|
11
12
|
TAA_JITTER: boolean;
|
|
12
13
|
}
|
|
@@ -30,11 +31,7 @@ declare class TAAJitterMaterialPlugin extends MaterialPluginBase {
|
|
|
30
31
|
}[];
|
|
31
32
|
vertex: string;
|
|
32
33
|
} | {
|
|
33
|
-
ubo
|
|
34
|
-
name: string;
|
|
35
|
-
size: number;
|
|
36
|
-
type: string;
|
|
37
|
-
}[];
|
|
34
|
+
ubo?: undefined;
|
|
38
35
|
vertex?: undefined;
|
|
39
36
|
};
|
|
40
37
|
hardBindForSubMesh(uniformBuffer: UniformBuffer): void;
|
|
@@ -57,8 +54,32 @@ export declare class TAAMaterialManager {
|
|
|
57
54
|
* The current jitter offset to apply to all materials.
|
|
58
55
|
*/
|
|
59
56
|
readonly jitter: Vector2;
|
|
57
|
+
/**
|
|
58
|
+
* @internal The jitter a TAA post-process computed for each of its cameras, and the frame it computed it in. In WGSL, the views of a camera
|
|
59
|
+
* (each eye of its rig) get that camera's jitter, until the end of the next frame. With none, every camera's view gets the manager's jitter.
|
|
60
|
+
*/
|
|
61
|
+
readonly _cameraJitters: Map<Camera, {
|
|
62
|
+
jitter: Vector2;
|
|
63
|
+
frameId: number;
|
|
64
|
+
}>;
|
|
65
|
+
/**
|
|
66
|
+
* @internal Keeps the manager's jitter as the one a TAA post-process computed for its camera in this frame. The records of cameras that
|
|
67
|
+
* stopped rendering are dropped: they would give no jitter anymore.
|
|
68
|
+
* @param camera the camera the jitter was computed for (the parent of a rig)
|
|
69
|
+
* @param frameId the engine's frame id
|
|
70
|
+
*/
|
|
71
|
+
_setCameraJitter(camera: Camera, frameId: number): void;
|
|
72
|
+
/**
|
|
73
|
+
* @internal Gets the jitter of a camera's view (WGSL): the jitter computed for that camera, or for the rig it is an eye of, in this frame or
|
|
74
|
+
* the previous one. A manager used on its own, with no TAA post-process, gives its jitter to every camera's view.
|
|
75
|
+
* @param camera the camera whose view is being rendered
|
|
76
|
+
* @param frameId the engine's frame id
|
|
77
|
+
* @returns the jitter, in clip space
|
|
78
|
+
*/
|
|
79
|
+
_getCameraJitter(camera: Camera, frameId: number): DeepImmutable<Vector2>;
|
|
60
80
|
/** @internal */
|
|
61
81
|
readonly _materialPlugins: TAAJitterMaterialPlugin[];
|
|
82
|
+
private readonly _scene;
|
|
62
83
|
/**
|
|
63
84
|
* @param scene All materials in this scene will have a jitter offset applied to them.
|
|
64
85
|
*/
|
|
@@ -46,10 +46,9 @@ class TAAJitterMaterialPlugin extends MaterialPluginBase {
|
|
|
46
46
|
defines.TAA_JITTER = this.isEnabled;
|
|
47
47
|
}
|
|
48
48
|
getUniforms(shaderLanguage = 0 /* ShaderLanguage.GLSL */) {
|
|
49
|
-
const ubo = [{ name: "taa_jitter", size: 2, type: "vec2" }];
|
|
50
49
|
if (shaderLanguage === 0 /* ShaderLanguage.GLSL */) {
|
|
51
50
|
return {
|
|
52
|
-
ubo,
|
|
51
|
+
ubo: [{ name: "taa_jitter", size: 2, type: "vec2" }],
|
|
53
52
|
vertex: `
|
|
54
53
|
#ifdef TAA_JITTER
|
|
55
54
|
uniform vec2 taa_jitter;
|
|
@@ -58,11 +57,12 @@ class TAAJitterMaterialPlugin extends MaterialPluginBase {
|
|
|
58
57
|
};
|
|
59
58
|
}
|
|
60
59
|
else {
|
|
61
|
-
|
|
60
|
+
// WGSL reads the jitter from the scene uniform buffer of the pass (Scene.finalizeSceneUbo)
|
|
61
|
+
return {};
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
hardBindForSubMesh(uniformBuffer) {
|
|
65
|
-
if (this.isEnabled) {
|
|
65
|
+
if (this.isEnabled && this._material.shaderLanguage !== 1 /* ShaderLanguage.WGSL */) {
|
|
66
66
|
const jitter = this._manager.jitter;
|
|
67
67
|
uniformBuffer.updateFloat2("taa_jitter", jitter.x, jitter.y);
|
|
68
68
|
}
|
|
@@ -77,7 +77,7 @@ class TAAJitterMaterialPlugin extends MaterialPluginBase {
|
|
|
77
77
|
return {
|
|
78
78
|
CUSTOM_VERTEX_MAIN_END: `
|
|
79
79
|
#ifdef TAA_JITTER
|
|
80
|
-
vertexOutputs.position += vec4f(
|
|
80
|
+
vertexOutputs.position += vec4f(scene.taaJitter * vertexOutputs.position.w, 0.0, 0.0);
|
|
81
81
|
#endif
|
|
82
82
|
`,
|
|
83
83
|
};
|
|
@@ -121,6 +121,49 @@ export class TAAMaterialManager {
|
|
|
121
121
|
plugin._updateMaterial();
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* @internal Keeps the manager's jitter as the one a TAA post-process computed for its camera in this frame. The records of cameras that
|
|
126
|
+
* stopped rendering are dropped: they would give no jitter anymore.
|
|
127
|
+
* @param camera the camera the jitter was computed for (the parent of a rig)
|
|
128
|
+
* @param frameId the engine's frame id
|
|
129
|
+
*/
|
|
130
|
+
_setCameraJitter(camera, frameId) {
|
|
131
|
+
for (const [other, record] of this._cameraJitters) {
|
|
132
|
+
if (record.frameId < frameId - 1) {
|
|
133
|
+
this._cameraJitters.delete(other);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
let record = this._cameraJitters.get(camera);
|
|
137
|
+
if (!record) {
|
|
138
|
+
record = { jitter: new Vector2(), frameId };
|
|
139
|
+
this._cameraJitters.set(camera, record);
|
|
140
|
+
}
|
|
141
|
+
record.jitter.copyFrom(this.jitter);
|
|
142
|
+
record.frameId = frameId;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* @internal Gets the jitter of a camera's view (WGSL): the jitter computed for that camera, or for the rig it is an eye of, in this frame or
|
|
146
|
+
* the previous one. A manager used on its own, with no TAA post-process, gives its jitter to every camera's view.
|
|
147
|
+
* @param camera the camera whose view is being rendered
|
|
148
|
+
* @param frameId the engine's frame id
|
|
149
|
+
* @returns the jitter, in clip space
|
|
150
|
+
*/
|
|
151
|
+
_getCameraJitter(camera, frameId) {
|
|
152
|
+
if (this._cameraJitters.size === 0) {
|
|
153
|
+
return this.jitter;
|
|
154
|
+
}
|
|
155
|
+
let record = this._cameraJitters.get(camera);
|
|
156
|
+
if (!record) {
|
|
157
|
+
// the eyes are found in the rig of the TAA's camera: the frame graph unsets their rigParent while they render
|
|
158
|
+
for (const [taaCamera, taaRecord] of this._cameraJitters) {
|
|
159
|
+
if (taaCamera._rigCameras.includes(camera)) {
|
|
160
|
+
record = taaRecord;
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return record && record.frameId >= frameId - 1 ? record.jitter : Vector2.ZeroReadOnly;
|
|
166
|
+
}
|
|
124
167
|
/**
|
|
125
168
|
* @param scene All materials in this scene will have a jitter offset applied to them.
|
|
126
169
|
*/
|
|
@@ -130,8 +173,16 @@ export class TAAMaterialManager {
|
|
|
130
173
|
* The current jitter offset to apply to all materials.
|
|
131
174
|
*/
|
|
132
175
|
this.jitter = new Vector2();
|
|
176
|
+
/**
|
|
177
|
+
* @internal The jitter a TAA post-process computed for each of its cameras, and the frame it computed it in. In WGSL, the views of a camera
|
|
178
|
+
* (each eye of its rig) get that camera's jitter, until the end of the next frame. With none, every camera's view gets the manager's jitter.
|
|
179
|
+
*/
|
|
180
|
+
this._cameraJitters = new Map();
|
|
133
181
|
/** @internal */
|
|
134
182
|
this._materialPlugins = [];
|
|
183
|
+
this._scene = scene;
|
|
184
|
+
// WGSL materials read the jitter of the scene's manager from its uniform buffer (Scene.finalizeSceneUbo)
|
|
185
|
+
scene._taaMaterialManager = this;
|
|
135
186
|
for (const material of scene.materials) {
|
|
136
187
|
this._getPlugin(material);
|
|
137
188
|
}
|
|
@@ -141,7 +192,11 @@ export class TAAMaterialManager {
|
|
|
141
192
|
* Disposes of the material manager.
|
|
142
193
|
*/
|
|
143
194
|
dispose() {
|
|
195
|
+
if (this._scene._taaMaterialManager === this) {
|
|
196
|
+
this._scene._taaMaterialManager = null;
|
|
197
|
+
}
|
|
144
198
|
UnregisterMaterialPlugin(TAAJitterMaterialPlugin.Name);
|
|
199
|
+
this._cameraJitters.clear();
|
|
145
200
|
const plugins = this._materialPlugins.splice(0, this._materialPlugins.length);
|
|
146
201
|
for (const plugin of plugins) {
|
|
147
202
|
plugin.manager = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taaMaterialManager.pure.js","sourceRoot":"","sources":["../../../../../../dev/core/src/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\n\nimport { type Material } from \"core/Materials/material.pure\";\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\nimport { MaterialPluginBase } from \"core/Materials/materialPluginBase.pure\";\nimport { RegisterMaterialPlugin, UnregisterMaterialPlugin } from \"core/Materials/materialPluginManager.pure\";\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\nimport { type UniformBuffer } from \"core/Materials/uniformBuffer\";\nimport { Vector2 } from \"core/Maths/math.vector.pure\";\nimport { type Scene } from \"core/scene.pure\";\nimport { type Nullable } from \"core/types\";\nimport { RegisterClass } from \"../../../Misc/typeStore\";\n\nclass TAAJitterMaterialDefines extends MaterialDefines {\n TAA_JITTER = false;\n}\n\nclass TAAJitterMaterialPlugin extends MaterialPluginBase {\n public static readonly Name = \"TAAJitter\";\n\n private _manager: Nullable<TAAMaterialManager>;\n public get manager(): Nullable<TAAMaterialManager> {\n return this._manager;\n }\n\n public set manager(manager: Nullable<TAAMaterialManager>) {\n if (this._manager === manager) {\n return;\n }\n this.dispose();\n this._manager = manager;\n manager?._materialPlugins.push(this);\n this._updateMaterial();\n }\n\n public get isEnabled(): boolean {\n return this._manager?.isEnabled ?? false;\n }\n\n constructor(material: Material) {\n super(material, TAAJitterMaterialPlugin.Name, 300, new TAAJitterMaterialDefines());\n this.registerForExtraEvents = true;\n this.doNotSerialize = true;\n }\n\n /** @internal */\n public _updateMaterial(): void {\n this._enable(this.isEnabled);\n this.markAllDefinesAsDirty();\n }\n\n public override isCompatible(): boolean {\n return true;\n }\n\n public override getClassName(): string {\n return \"TAAJitterMaterialPlugin\";\n }\n\n public override prepareDefines(defines: TAAJitterMaterialDefines): void {\n defines.TAA_JITTER = this.isEnabled;\n }\n\n public override getUniforms(shaderLanguage = ShaderLanguage.GLSL) {\n const ubo = [{ name: \"taa_jitter\", size: 2, type: \"vec2\" }];\n if (shaderLanguage === ShaderLanguage.GLSL) {\n return {\n ubo,\n vertex: `\n #ifdef TAA_JITTER\n uniform vec2 taa_jitter;\n #endif\n `,\n };\n } else {\n return { ubo };\n }\n }\n\n public override hardBindForSubMesh(uniformBuffer: UniformBuffer): void {\n if (this.isEnabled) {\n const jitter = this._manager!.jitter;\n uniformBuffer.updateFloat2(\"taa_jitter\", jitter.x, jitter.y);\n }\n }\n\n public override getCustomCode(shaderType: string, shaderLanguage = ShaderLanguage.GLSL) {\n // We jitter instead of modifying the camera so the velocity buffer stays unaffected\n // More info: https://sugulee.wordpress.com/2021/06/21/temporal-anti-aliasingtaa-tutorial/\n if (shaderType !== \"vertex\") {\n return null;\n } else if (shaderLanguage === ShaderLanguage.WGSL) {\n return {\n CUSTOM_VERTEX_MAIN_END: `\n #ifdef TAA_JITTER\n vertexOutputs.position += vec4f(uniforms.taa_jitter * vertexOutputs.position.w, 0.0, 0.0);\n #endif\n `,\n };\n } else {\n return {\n CUSTOM_VERTEX_MAIN_END: `\n #ifdef TAA_JITTER\n gl_Position.xy += taa_jitter * gl_Position.w;\n #endif\n `,\n };\n }\n }\n\n public override dispose(): void {\n if (this._manager) {\n const index = this._manager._materialPlugins.indexOf(this);\n if (index !== -1) {\n this._manager._materialPlugins.splice(index, 1);\n }\n }\n }\n}\n\n/**\n * Applies and manages the TAA jitter plugin on all materials.\n */\nexport class TAAMaterialManager {\n private _isEnabled = true;\n /**\n * Set to enable or disable the jitter offset on all materials.\n */\n public get isEnabled(): boolean {\n return this._isEnabled;\n }\n\n public set isEnabled(enabled: boolean) {\n if (this._isEnabled === enabled) {\n return;\n }\n this._isEnabled = enabled;\n for (const plugin of this._materialPlugins) {\n plugin._updateMaterial();\n }\n }\n\n /**\n * The current jitter offset to apply to all materials.\n */\n public readonly jitter = new Vector2();\n\n /** @internal */\n public readonly _materialPlugins: TAAJitterMaterialPlugin[] = [];\n\n /**\n * @param scene All materials in this scene will have a jitter offset applied to them.\n */\n constructor(scene: Scene) {\n for (const material of scene.materials) {\n this._getPlugin(material);\n }\n RegisterMaterialPlugin(TAAJitterMaterialPlugin.Name, (material) => this._getPlugin(material));\n }\n\n /**\n * Disposes of the material manager.\n */\n public dispose(): void {\n UnregisterMaterialPlugin(TAAJitterMaterialPlugin.Name);\n const plugins = this._materialPlugins.splice(0, this._materialPlugins.length);\n for (const plugin of plugins) {\n plugin.manager = null;\n }\n }\n\n private _getPlugin(material: Material): Nullable<TAAJitterMaterialPlugin> {\n if (!material.pluginManager) {\n return null;\n }\n let plugin = material.pluginManager.getPlugin<TAAJitterMaterialPlugin>(TAAJitterMaterialPlugin.Name);\n if (!plugin) {\n plugin = new TAAJitterMaterialPlugin(material);\n }\n plugin.manager = this;\n return plugin;\n }\n}\n\nlet _Registered = false;\n/**\n * Register side effects for taaMaterialManager.\n * Safe to call multiple times; only the first call has an effect.\n */\nexport function RegisterTaaMaterialManager(): void {\n if (_Registered) {\n return;\n }\n _Registered = true;\n\n RegisterClass(`BABYLON.TAAJitterMaterialPlugin`, TAAJitterMaterialPlugin);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"taaMaterialManager.pure.js","sourceRoot":"","sources":["../../../../../../dev/core/src/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\n\nimport { type Camera } from \"core/Cameras/camera.pure\";\nimport { type Material } from \"core/Materials/material.pure\";\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\nimport { MaterialPluginBase } from \"core/Materials/materialPluginBase.pure\";\nimport { RegisterMaterialPlugin, UnregisterMaterialPlugin } from \"core/Materials/materialPluginManager.pure\";\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\nimport { type UniformBuffer } from \"core/Materials/uniformBuffer\";\nimport { Vector2 } from \"core/Maths/math.vector.pure\";\nimport { type Scene } from \"core/scene.pure\";\nimport { type DeepImmutable, type Nullable } from \"core/types\";\nimport { RegisterClass } from \"../../../Misc/typeStore\";\n\nclass TAAJitterMaterialDefines extends MaterialDefines {\n TAA_JITTER = false;\n}\n\nclass TAAJitterMaterialPlugin extends MaterialPluginBase {\n public static readonly Name = \"TAAJitter\";\n\n private _manager: Nullable<TAAMaterialManager>;\n public get manager(): Nullable<TAAMaterialManager> {\n return this._manager;\n }\n\n public set manager(manager: Nullable<TAAMaterialManager>) {\n if (this._manager === manager) {\n return;\n }\n this.dispose();\n this._manager = manager;\n manager?._materialPlugins.push(this);\n this._updateMaterial();\n }\n\n public get isEnabled(): boolean {\n return this._manager?.isEnabled ?? false;\n }\n\n constructor(material: Material) {\n super(material, TAAJitterMaterialPlugin.Name, 300, new TAAJitterMaterialDefines());\n this.registerForExtraEvents = true;\n this.doNotSerialize = true;\n }\n\n /** @internal */\n public _updateMaterial(): void {\n this._enable(this.isEnabled);\n this.markAllDefinesAsDirty();\n }\n\n public override isCompatible(): boolean {\n return true;\n }\n\n public override getClassName(): string {\n return \"TAAJitterMaterialPlugin\";\n }\n\n public override prepareDefines(defines: TAAJitterMaterialDefines): void {\n defines.TAA_JITTER = this.isEnabled;\n }\n\n public override getUniforms(shaderLanguage = ShaderLanguage.GLSL) {\n if (shaderLanguage === ShaderLanguage.GLSL) {\n return {\n ubo: [{ name: \"taa_jitter\", size: 2, type: \"vec2\" }],\n vertex: `\n #ifdef TAA_JITTER\n uniform vec2 taa_jitter;\n #endif\n `,\n };\n } else {\n // WGSL reads the jitter from the scene uniform buffer of the pass (Scene.finalizeSceneUbo)\n return {};\n }\n }\n\n public override hardBindForSubMesh(uniformBuffer: UniformBuffer): void {\n if (this.isEnabled && this._material.shaderLanguage !== ShaderLanguage.WGSL) {\n const jitter = this._manager!.jitter;\n uniformBuffer.updateFloat2(\"taa_jitter\", jitter.x, jitter.y);\n }\n }\n\n public override getCustomCode(shaderType: string, shaderLanguage = ShaderLanguage.GLSL) {\n // We jitter instead of modifying the camera so the velocity buffer stays unaffected\n // More info: https://sugulee.wordpress.com/2021/06/21/temporal-anti-aliasingtaa-tutorial/\n if (shaderType !== \"vertex\") {\n return null;\n } else if (shaderLanguage === ShaderLanguage.WGSL) {\n return {\n CUSTOM_VERTEX_MAIN_END: `\n #ifdef TAA_JITTER\n vertexOutputs.position += vec4f(scene.taaJitter * vertexOutputs.position.w, 0.0, 0.0);\n #endif\n `,\n };\n } else {\n return {\n CUSTOM_VERTEX_MAIN_END: `\n #ifdef TAA_JITTER\n gl_Position.xy += taa_jitter * gl_Position.w;\n #endif\n `,\n };\n }\n }\n\n public override dispose(): void {\n if (this._manager) {\n const index = this._manager._materialPlugins.indexOf(this);\n if (index !== -1) {\n this._manager._materialPlugins.splice(index, 1);\n }\n }\n }\n}\n\n/**\n * Applies and manages the TAA jitter plugin on all materials.\n */\nexport class TAAMaterialManager {\n private _isEnabled = true;\n /**\n * Set to enable or disable the jitter offset on all materials.\n */\n public get isEnabled(): boolean {\n return this._isEnabled;\n }\n\n public set isEnabled(enabled: boolean) {\n if (this._isEnabled === enabled) {\n return;\n }\n this._isEnabled = enabled;\n for (const plugin of this._materialPlugins) {\n plugin._updateMaterial();\n }\n }\n\n /**\n * The current jitter offset to apply to all materials.\n */\n public readonly jitter = new Vector2();\n\n /**\n * @internal The jitter a TAA post-process computed for each of its cameras, and the frame it computed it in. In WGSL, the views of a camera\n * (each eye of its rig) get that camera's jitter, until the end of the next frame. With none, every camera's view gets the manager's jitter.\n */\n public readonly _cameraJitters = new Map<Camera, { jitter: Vector2; frameId: number }>();\n\n /**\n * @internal Keeps the manager's jitter as the one a TAA post-process computed for its camera in this frame. The records of cameras that\n * stopped rendering are dropped: they would give no jitter anymore.\n * @param camera the camera the jitter was computed for (the parent of a rig)\n * @param frameId the engine's frame id\n */\n public _setCameraJitter(camera: Camera, frameId: number): void {\n for (const [other, record] of this._cameraJitters) {\n if (record.frameId < frameId - 1) {\n this._cameraJitters.delete(other);\n }\n }\n let record = this._cameraJitters.get(camera);\n if (!record) {\n record = { jitter: new Vector2(), frameId };\n this._cameraJitters.set(camera, record);\n }\n record.jitter.copyFrom(this.jitter);\n record.frameId = frameId;\n }\n\n /**\n * @internal Gets the jitter of a camera's view (WGSL): the jitter computed for that camera, or for the rig it is an eye of, in this frame or\n * the previous one. A manager used on its own, with no TAA post-process, gives its jitter to every camera's view.\n * @param camera the camera whose view is being rendered\n * @param frameId the engine's frame id\n * @returns the jitter, in clip space\n */\n public _getCameraJitter(camera: Camera, frameId: number): DeepImmutable<Vector2> {\n if (this._cameraJitters.size === 0) {\n return this.jitter;\n }\n let record = this._cameraJitters.get(camera);\n if (!record) {\n // the eyes are found in the rig of the TAA's camera: the frame graph unsets their rigParent while they render\n for (const [taaCamera, taaRecord] of this._cameraJitters) {\n if (taaCamera._rigCameras.includes(camera)) {\n record = taaRecord;\n break;\n }\n }\n }\n return record && record.frameId >= frameId - 1 ? record.jitter : Vector2.ZeroReadOnly;\n }\n\n /** @internal */\n public readonly _materialPlugins: TAAJitterMaterialPlugin[] = [];\n\n private readonly _scene: Scene;\n\n /**\n * @param scene All materials in this scene will have a jitter offset applied to them.\n */\n constructor(scene: Scene) {\n this._scene = scene;\n // WGSL materials read the jitter of the scene's manager from its uniform buffer (Scene.finalizeSceneUbo)\n scene._taaMaterialManager = this;\n for (const material of scene.materials) {\n this._getPlugin(material);\n }\n RegisterMaterialPlugin(TAAJitterMaterialPlugin.Name, (material) => this._getPlugin(material));\n }\n\n /**\n * Disposes of the material manager.\n */\n public dispose(): void {\n if (this._scene._taaMaterialManager === this) {\n this._scene._taaMaterialManager = null;\n }\n UnregisterMaterialPlugin(TAAJitterMaterialPlugin.Name);\n this._cameraJitters.clear();\n const plugins = this._materialPlugins.splice(0, this._materialPlugins.length);\n for (const plugin of plugins) {\n plugin.manager = null;\n }\n }\n\n private _getPlugin(material: Material): Nullable<TAAJitterMaterialPlugin> {\n if (!material.pluginManager) {\n return null;\n }\n let plugin = material.pluginManager.getPlugin<TAAJitterMaterialPlugin>(TAAJitterMaterialPlugin.Name);\n if (!plugin) {\n plugin = new TAAJitterMaterialPlugin(material);\n }\n plugin.manager = this;\n return plugin;\n }\n}\n\nlet _Registered = false;\n/**\n * Register side effects for taaMaterialManager.\n * Safe to call multiple times; only the first call has an effect.\n */\nexport function RegisterTaaMaterialManager(): void {\n if (_Registered) {\n return;\n }\n _Registered = true;\n\n RegisterClass(`BABYLON.TAAJitterMaterialPlugin`, TAAJitterMaterialPlugin);\n}\n"]}
|
|
@@ -143,6 +143,7 @@ export class ThinTAAPostProcess extends EffectWrapper {
|
|
|
143
143
|
this._reprojectHistory = false;
|
|
144
144
|
this._clampHistory = false;
|
|
145
145
|
this._firstUpdate = true;
|
|
146
|
+
this._viewHistoryResetIds = new WeakMap();
|
|
146
147
|
this._scene = scene;
|
|
147
148
|
this._hs = new Halton2DSequence(this.samples);
|
|
148
149
|
}
|
|
@@ -158,6 +159,12 @@ export class ThinTAAPostProcess extends EffectWrapper {
|
|
|
158
159
|
// Applying jitter to the projection matrix messes with the velocity buffer,
|
|
159
160
|
// so we do it as a final vertex step in a material plugin instead
|
|
160
161
|
this._nextJitterOffset(this._taaMaterialManager.jitter);
|
|
162
|
+
// in WGSL, the jitter is for the views of this camera only, with each eye of its rig (Scene.finalizeSceneUbo); a TAA shared by
|
|
163
|
+
// several cameras computes each camera's jitter in turn
|
|
164
|
+
const camera = this.camera;
|
|
165
|
+
if (camera) {
|
|
166
|
+
this._taaMaterialManager._setCameraJitter(camera.rigParent ?? camera, this._scene.getEngine().frameId);
|
|
167
|
+
}
|
|
161
168
|
}
|
|
162
169
|
else {
|
|
163
170
|
// Use the projection matrix by default since it supports most materials
|
|
@@ -194,7 +201,16 @@ export class ThinTAAPostProcess extends EffectWrapper {
|
|
|
194
201
|
return;
|
|
195
202
|
}
|
|
196
203
|
const effect = this._drawWrapper.effect;
|
|
197
|
-
|
|
204
|
+
// camera.resetViewHistory (a cut): drop the history in the same frame. The resets are tracked per camera, so that the reset of a
|
|
205
|
+
// camera the TAA switches to, or of one of the eyes it alternates between, is not lost
|
|
206
|
+
const camera = this.camera;
|
|
207
|
+
let viewHistoryReset = false;
|
|
208
|
+
if (camera) {
|
|
209
|
+
const resetId = camera._viewHistoryResetId;
|
|
210
|
+
viewHistoryReset = resetId !== (this._viewHistoryResetIds.get(camera) ?? 0);
|
|
211
|
+
this._viewHistoryResetIds.set(camera, resetId);
|
|
212
|
+
}
|
|
213
|
+
effect.setFloat("factor", (camera?.hasMoved && this.disableOnCameraMove) || this._firstUpdate || viewHistoryReset ? 1 : this.factor);
|
|
198
214
|
this._firstUpdate = false;
|
|
199
215
|
}
|
|
200
216
|
dispose() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thinTAAPostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/thinTAAPostProcess.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable, type EffectWrapperCreationOptions, type Scene } from \"core/index\";\r\nimport { Camera } from \"../Cameras/camera.pure\";\r\nimport { Halton2DSequence } from \"core/Maths/halton2DSequence\";\r\nimport { Vector2 } from \"core/Maths/math.vector.pure\";\r\nimport { EffectWrapper } from \"core/Materials/effectRenderer.pure\";\r\nimport { TAAMaterialManager } from \"./RenderPipeline/Pipelines/taaMaterialManager.pure\";\r\n\r\n/**\r\n * Simple implementation of Temporal Anti-Aliasing (TAA).\r\n * This can be used to improve image quality for still pictures (screenshots for e.g.).\r\n */\r\nexport class ThinTAAPostProcess extends EffectWrapper {\r\n /**\r\n * The fragment shader url\r\n */\r\n public static readonly FragmentUrl = \"taa\";\r\n\r\n /**\r\n * The list of uniforms used by the effect\r\n */\r\n public static readonly Uniforms = [\"factor\"];\r\n\r\n /**\r\n * The list of samplers used by the effect\r\n */\r\n public static readonly Samplers = [\"historySampler\"];\r\n\r\n protected override _gatherImports(useWebGPU: boolean, list: Promise<any>[]) {\r\n if (useWebGPU) {\r\n this._webGPUReady = true;\r\n list.push(import(\"../ShadersWGSL/taa.fragment\"));\r\n } else {\r\n list.push(import(\"../Shaders/taa.fragment\"));\r\n }\r\n }\r\n\r\n private _samples = 8;\r\n /**\r\n * Number of accumulated samples (default: 8)\r\n */\r\n public set samples(samples: number) {\r\n if (this._samples === samples) {\r\n return;\r\n }\r\n\r\n this._samples = samples;\r\n this._hs.regenerate(samples);\r\n }\r\n\r\n public get samples(): number {\r\n return this._samples;\r\n }\r\n\r\n /**\r\n * The factor used to blend the history frame with current frame (default: 0.05)\r\n */\r\n public factor = 0.05;\r\n\r\n /**\r\n * The camera to use for the post process\r\n */\r\n public camera: Nullable<Camera>;\r\n\r\n private _disabled = false;\r\n /**\r\n * Whether the TAA is disabled\r\n */\r\n public get disabled() {\r\n return this._disabled;\r\n }\r\n\r\n public set disabled(value: boolean) {\r\n if (this._disabled === value) {\r\n return;\r\n }\r\n this._disabled = value;\r\n if (this._taaMaterialManager) {\r\n this._taaMaterialManager.isEnabled = !value && this.reprojectHistory;\r\n }\r\n this._reset();\r\n }\r\n\r\n private _textureWidth = 0;\r\n /**\r\n * The width of the texture in which to render\r\n */\r\n public get textureWidth() {\r\n return this._textureWidth;\r\n }\r\n\r\n public set textureWidth(width: number) {\r\n if (this._textureWidth === width) {\r\n return;\r\n }\r\n this._textureWidth = width;\r\n this._reset();\r\n }\r\n\r\n private _textureHeight = 0;\r\n /**\r\n * The height of the texture in which to render\r\n */\r\n public get textureHeight() {\r\n return this._textureHeight;\r\n }\r\n\r\n public set textureHeight(height: number) {\r\n if (this._textureHeight === height) {\r\n return;\r\n }\r\n this._textureHeight = height;\r\n this._reset();\r\n }\r\n\r\n /**\r\n * Disable TAA on camera move (default: true).\r\n * You generally want to keep this enabled, otherwise you will get a ghost effect when the camera moves (but if it's what you want, go for it!)\r\n */\r\n public disableOnCameraMove = true;\r\n\r\n private _reprojectHistory = false;\r\n /**\r\n * Enables reprojecting the history texture with a per-pixel velocity.\r\n * If set the \"velocitySampler\" has to be provided.\r\n */\r\n public get reprojectHistory(): boolean {\r\n return this._reprojectHistory;\r\n }\r\n\r\n public set reprojectHistory(reproject: boolean) {\r\n if (this._reprojectHistory === reproject) {\r\n return;\r\n }\r\n this._reprojectHistory = reproject;\r\n\r\n if (reproject) {\r\n if (!this._taaMaterialManager) {\r\n this._taaMaterialManager = new TAAMaterialManager(this._scene);\r\n }\r\n // The velocity buffer may be old so reset for one frame\r\n this._reset();\r\n }\r\n\r\n if (this._taaMaterialManager) {\r\n this._taaMaterialManager.isEnabled = reproject && !this._disabled;\r\n }\r\n\r\n this._updateEffect();\r\n }\r\n\r\n private _clampHistory = false;\r\n /**\r\n * Clamps the history pixel to the min and max of the 3x3 pixels surrounding the target pixel.\r\n * This can help further reduce ghosting and artifacts.\r\n */\r\n public get clampHistory(): boolean {\r\n return this._clampHistory;\r\n }\r\n\r\n public set clampHistory(clamp: boolean) {\r\n if (this._clampHistory === clamp) {\r\n return;\r\n }\r\n this._clampHistory = clamp;\r\n this._updateEffect();\r\n }\r\n\r\n private _scene: Scene;\r\n private _hs: Halton2DSequence;\r\n private _firstUpdate = true;\r\n private _taaMaterialManager: Nullable<TAAMaterialManager>;\r\n\r\n /**\r\n * Constructs a new TAA post process\r\n * @param name Name of the effect\r\n * @param scene The scene the post process belongs to\r\n * @param options Options to configure the effect\r\n */\r\n constructor(name: string, scene: Scene, options?: EffectWrapperCreationOptions) {\r\n super({\r\n ...options,\r\n name,\r\n engine: scene.getEngine(),\r\n useShaderStore: true,\r\n useAsPostProcess: true,\r\n fragmentShader: ThinTAAPostProcess.FragmentUrl,\r\n uniforms: ThinTAAPostProcess.Uniforms,\r\n samplers: ThinTAAPostProcess.Samplers,\r\n });\r\n\r\n this._scene = scene;\r\n this._hs = new Halton2DSequence(this.samples);\r\n }\r\n\r\n /** @internal */\r\n public _reset(): void {\r\n this._hs.setDimensions(this._textureWidth / 2, this._textureHeight / 2);\r\n this._hs.next();\r\n this._firstUpdate = true;\r\n }\r\n\r\n /** @internal */\r\n public _updateJitter() {\r\n if (this.reprojectHistory && this._taaMaterialManager) {\r\n // Applying jitter to the projection matrix messes with the velocity buffer,\r\n // so we do it as a final vertex step in a material plugin instead\r\n this._nextJitterOffset(this._taaMaterialManager.jitter);\r\n } else {\r\n // Use the projection matrix by default since it supports most materials\r\n this._updateProjectionMatrix();\r\n }\r\n }\r\n\r\n protected _nextJitterOffset(output = new Vector2()): Vector2 {\r\n if (!this.camera || !this.camera.hasMoved || !this.disableOnCameraMove) {\r\n this._hs.next();\r\n }\r\n output.set(this._hs.x, this._hs.y);\r\n return output;\r\n }\r\n\r\n protected _updateProjectionMatrix(): void {\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n if (this.camera && !this.camera.hasMoved) {\r\n if (this.camera.mode === Camera.PERSPECTIVE_CAMERA) {\r\n const projMat = this.camera.getProjectionMatrix();\r\n projMat.setRowFromFloats(2, this._hs.x, this._hs.y, projMat.m[10], projMat.m[11]);\r\n } else {\r\n // We must force the update of the projection matrix so that m[12] and m[13] are recomputed, as we modified them the previous frame\r\n const projMat = this.camera.getProjectionMatrix(true);\r\n projMat.setRowFromFloats(3, this._hs.x + projMat.m[12], this._hs.y + projMat.m[13], projMat.m[14], projMat.m[15]);\r\n }\r\n }\r\n\r\n this._hs.next();\r\n }\r\n\r\n public override bind(noDefaultBindings = false) {\r\n super.bind(noDefaultBindings);\r\n\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n const effect = this._drawWrapper.effect!;\r\n\r\n effect.setFloat(\"factor\", (this.camera?.hasMoved && this.disableOnCameraMove) || this._firstUpdate ? 1 : this.factor);\r\n\r\n this._firstUpdate = false;\r\n }\r\n\r\n public override dispose() {\r\n this._taaMaterialManager?.dispose();\r\n super.dispose();\r\n }\r\n\r\n private _updateEffect(): void {\r\n const defines: string[] = [];\r\n // There seems to be an issue where `updateEffect` sometimes doesn't include the initial samplers\r\n const samplers = [\"textureSampler\", \"historySampler\"];\r\n if (this._reprojectHistory) {\r\n defines.push(\"#define TAA_REPROJECT_HISTORY\");\r\n samplers.push(\"velocitySampler\");\r\n }\r\n if (this._clampHistory) {\r\n defines.push(\"#define TAA_CLAMP_HISTORY\");\r\n }\r\n this.updateEffect(defines.join(\"\\n\"), null, samplers);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"thinTAAPostProcess.js","sourceRoot":"","sources":["../../../../dev/core/src/PostProcesses/thinTAAPostProcess.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable, type EffectWrapperCreationOptions, type Scene } from \"core/index\";\r\nimport { Camera } from \"../Cameras/camera.pure\";\r\nimport { Halton2DSequence } from \"core/Maths/halton2DSequence\";\r\nimport { Vector2 } from \"core/Maths/math.vector.pure\";\r\nimport { EffectWrapper } from \"core/Materials/effectRenderer.pure\";\r\nimport { TAAMaterialManager } from \"./RenderPipeline/Pipelines/taaMaterialManager.pure\";\r\n\r\n/**\r\n * Simple implementation of Temporal Anti-Aliasing (TAA).\r\n * This can be used to improve image quality for still pictures (screenshots for e.g.).\r\n */\r\nexport class ThinTAAPostProcess extends EffectWrapper {\r\n /**\r\n * The fragment shader url\r\n */\r\n public static readonly FragmentUrl = \"taa\";\r\n\r\n /**\r\n * The list of uniforms used by the effect\r\n */\r\n public static readonly Uniforms = [\"factor\"];\r\n\r\n /**\r\n * The list of samplers used by the effect\r\n */\r\n public static readonly Samplers = [\"historySampler\"];\r\n\r\n protected override _gatherImports(useWebGPU: boolean, list: Promise<any>[]) {\r\n if (useWebGPU) {\r\n this._webGPUReady = true;\r\n list.push(import(\"../ShadersWGSL/taa.fragment\"));\r\n } else {\r\n list.push(import(\"../Shaders/taa.fragment\"));\r\n }\r\n }\r\n\r\n private _samples = 8;\r\n /**\r\n * Number of accumulated samples (default: 8)\r\n */\r\n public set samples(samples: number) {\r\n if (this._samples === samples) {\r\n return;\r\n }\r\n\r\n this._samples = samples;\r\n this._hs.regenerate(samples);\r\n }\r\n\r\n public get samples(): number {\r\n return this._samples;\r\n }\r\n\r\n /**\r\n * The factor used to blend the history frame with current frame (default: 0.05)\r\n */\r\n public factor = 0.05;\r\n\r\n /**\r\n * The camera to use for the post process\r\n */\r\n public camera: Nullable<Camera>;\r\n\r\n private _disabled = false;\r\n /**\r\n * Whether the TAA is disabled\r\n */\r\n public get disabled() {\r\n return this._disabled;\r\n }\r\n\r\n public set disabled(value: boolean) {\r\n if (this._disabled === value) {\r\n return;\r\n }\r\n this._disabled = value;\r\n if (this._taaMaterialManager) {\r\n this._taaMaterialManager.isEnabled = !value && this.reprojectHistory;\r\n }\r\n this._reset();\r\n }\r\n\r\n private _textureWidth = 0;\r\n /**\r\n * The width of the texture in which to render\r\n */\r\n public get textureWidth() {\r\n return this._textureWidth;\r\n }\r\n\r\n public set textureWidth(width: number) {\r\n if (this._textureWidth === width) {\r\n return;\r\n }\r\n this._textureWidth = width;\r\n this._reset();\r\n }\r\n\r\n private _textureHeight = 0;\r\n /**\r\n * The height of the texture in which to render\r\n */\r\n public get textureHeight() {\r\n return this._textureHeight;\r\n }\r\n\r\n public set textureHeight(height: number) {\r\n if (this._textureHeight === height) {\r\n return;\r\n }\r\n this._textureHeight = height;\r\n this._reset();\r\n }\r\n\r\n /**\r\n * Disable TAA on camera move (default: true).\r\n * You generally want to keep this enabled, otherwise you will get a ghost effect when the camera moves (but if it's what you want, go for it!)\r\n */\r\n public disableOnCameraMove = true;\r\n\r\n private _reprojectHistory = false;\r\n /**\r\n * Enables reprojecting the history texture with a per-pixel velocity.\r\n * If set the \"velocitySampler\" has to be provided.\r\n */\r\n public get reprojectHistory(): boolean {\r\n return this._reprojectHistory;\r\n }\r\n\r\n public set reprojectHistory(reproject: boolean) {\r\n if (this._reprojectHistory === reproject) {\r\n return;\r\n }\r\n this._reprojectHistory = reproject;\r\n\r\n if (reproject) {\r\n if (!this._taaMaterialManager) {\r\n this._taaMaterialManager = new TAAMaterialManager(this._scene);\r\n }\r\n // The velocity buffer may be old so reset for one frame\r\n this._reset();\r\n }\r\n\r\n if (this._taaMaterialManager) {\r\n this._taaMaterialManager.isEnabled = reproject && !this._disabled;\r\n }\r\n\r\n this._updateEffect();\r\n }\r\n\r\n private _clampHistory = false;\r\n /**\r\n * Clamps the history pixel to the min and max of the 3x3 pixels surrounding the target pixel.\r\n * This can help further reduce ghosting and artifacts.\r\n */\r\n public get clampHistory(): boolean {\r\n return this._clampHistory;\r\n }\r\n\r\n public set clampHistory(clamp: boolean) {\r\n if (this._clampHistory === clamp) {\r\n return;\r\n }\r\n this._clampHistory = clamp;\r\n this._updateEffect();\r\n }\r\n\r\n private _scene: Scene;\r\n private _hs: Halton2DSequence;\r\n private _firstUpdate = true;\r\n private _taaMaterialManager: Nullable<TAAMaterialManager>;\r\n private _viewHistoryResetIds = new WeakMap<Camera, number>();\r\n\r\n /**\r\n * Constructs a new TAA post process\r\n * @param name Name of the effect\r\n * @param scene The scene the post process belongs to\r\n * @param options Options to configure the effect\r\n */\r\n constructor(name: string, scene: Scene, options?: EffectWrapperCreationOptions) {\r\n super({\r\n ...options,\r\n name,\r\n engine: scene.getEngine(),\r\n useShaderStore: true,\r\n useAsPostProcess: true,\r\n fragmentShader: ThinTAAPostProcess.FragmentUrl,\r\n uniforms: ThinTAAPostProcess.Uniforms,\r\n samplers: ThinTAAPostProcess.Samplers,\r\n });\r\n\r\n this._scene = scene;\r\n this._hs = new Halton2DSequence(this.samples);\r\n }\r\n\r\n /** @internal */\r\n public _reset(): void {\r\n this._hs.setDimensions(this._textureWidth / 2, this._textureHeight / 2);\r\n this._hs.next();\r\n this._firstUpdate = true;\r\n }\r\n\r\n /** @internal */\r\n public _updateJitter() {\r\n if (this.reprojectHistory && this._taaMaterialManager) {\r\n // Applying jitter to the projection matrix messes with the velocity buffer,\r\n // so we do it as a final vertex step in a material plugin instead\r\n this._nextJitterOffset(this._taaMaterialManager.jitter);\r\n // in WGSL, the jitter is for the views of this camera only, with each eye of its rig (Scene.finalizeSceneUbo); a TAA shared by\r\n // several cameras computes each camera's jitter in turn\r\n const camera = this.camera;\r\n if (camera) {\r\n this._taaMaterialManager._setCameraJitter(camera.rigParent ?? camera, this._scene.getEngine().frameId);\r\n }\r\n } else {\r\n // Use the projection matrix by default since it supports most materials\r\n this._updateProjectionMatrix();\r\n }\r\n }\r\n\r\n protected _nextJitterOffset(output = new Vector2()): Vector2 {\r\n if (!this.camera || !this.camera.hasMoved || !this.disableOnCameraMove) {\r\n this._hs.next();\r\n }\r\n output.set(this._hs.x, this._hs.y);\r\n return output;\r\n }\r\n\r\n protected _updateProjectionMatrix(): void {\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n if (this.camera && !this.camera.hasMoved) {\r\n if (this.camera.mode === Camera.PERSPECTIVE_CAMERA) {\r\n const projMat = this.camera.getProjectionMatrix();\r\n projMat.setRowFromFloats(2, this._hs.x, this._hs.y, projMat.m[10], projMat.m[11]);\r\n } else {\r\n // We must force the update of the projection matrix so that m[12] and m[13] are recomputed, as we modified them the previous frame\r\n const projMat = this.camera.getProjectionMatrix(true);\r\n projMat.setRowFromFloats(3, this._hs.x + projMat.m[12], this._hs.y + projMat.m[13], projMat.m[14], projMat.m[15]);\r\n }\r\n }\r\n\r\n this._hs.next();\r\n }\r\n\r\n public override bind(noDefaultBindings = false) {\r\n super.bind(noDefaultBindings);\r\n\r\n if (this.disabled) {\r\n return;\r\n }\r\n\r\n const effect = this._drawWrapper.effect!;\r\n\r\n // camera.resetViewHistory (a cut): drop the history in the same frame. The resets are tracked per camera, so that the reset of a\r\n // camera the TAA switches to, or of one of the eyes it alternates between, is not lost\r\n const camera = this.camera;\r\n let viewHistoryReset = false;\r\n if (camera) {\r\n const resetId = camera._viewHistoryResetId;\r\n viewHistoryReset = resetId !== (this._viewHistoryResetIds.get(camera) ?? 0);\r\n this._viewHistoryResetIds.set(camera, resetId);\r\n }\r\n\r\n effect.setFloat(\"factor\", (camera?.hasMoved && this.disableOnCameraMove) || this._firstUpdate || viewHistoryReset ? 1 : this.factor);\r\n\r\n this._firstUpdate = false;\r\n }\r\n\r\n public override dispose() {\r\n this._taaMaterialManager?.dispose();\r\n super.dispose();\r\n }\r\n\r\n private _updateEffect(): void {\r\n const defines: string[] = [];\r\n // There seems to be an issue where `updateEffect` sometimes doesn't include the initial samplers\r\n const samplers = [\"textureSampler\", \"historySampler\"];\r\n if (this._reprojectHistory) {\r\n defines.push(\"#define TAA_REPROJECT_HISTORY\");\r\n samplers.push(\"velocitySampler\");\r\n }\r\n if (this._clampHistory) {\r\n defines.push(\"#define TAA_CLAMP_HISTORY\");\r\n }\r\n this.updateEffect(defines.join(\"\\n\"), null, samplers);\r\n }\r\n}\r\n"]}
|
|
@@ -79,8 +79,9 @@ export declare class VolumetricLightScatteringPostProcess extends PostProcess {
|
|
|
79
79
|
* @param engine The babylon engine
|
|
80
80
|
* @param reusable If the post-process is reusable
|
|
81
81
|
* @param scene The constructor needs a scene reference to initialize internal components. If "camera" is null a "scene" must be provided
|
|
82
|
+
* @param textureType Texture type for the post-process input and internal scattering pass. Defaults to Constants.TEXTURETYPE_UNSIGNED_BYTE.
|
|
82
83
|
*/
|
|
83
|
-
constructor(name: string, ratio: any, camera: Nullable<Camera>, mesh?: Mesh, samples?: number, samplingMode?: number, engine?: AbstractEngine, reusable?: boolean, scene?: Scene);
|
|
84
|
+
constructor(name: string, ratio: any, camera: Nullable<Camera>, mesh?: Mesh, samples?: number, samplingMode?: number, engine?: AbstractEngine, reusable?: boolean, scene?: Scene, textureType?: number);
|
|
84
85
|
protected _gatherImports(useWebGPU: boolean, list: Promise<any>[]): void;
|
|
85
86
|
/**
|
|
86
87
|
* Returns the string "VolumetricLightScatteringPostProcess"
|
|
@@ -76,11 +76,12 @@ let VolumetricLightScatteringPostProcess = (() => {
|
|
|
76
76
|
* @param engine The babylon engine
|
|
77
77
|
* @param reusable If the post-process is reusable
|
|
78
78
|
* @param scene The constructor needs a scene reference to initialize internal components. If "camera" is null a "scene" must be provided
|
|
79
|
+
* @param textureType Texture type for the post-process input and internal scattering pass. Defaults to 0.
|
|
79
80
|
*/
|
|
80
|
-
constructor(name, ratio, camera, mesh, samples = 100, samplingMode = Texture.BILINEAR_SAMPLINGMODE, engine, reusable, scene) {
|
|
81
|
+
constructor(name, ratio, camera, mesh, samples = 100, samplingMode = Texture.BILINEAR_SAMPLINGMODE, engine, reusable, scene, textureType = 0) {
|
|
81
82
|
const selectedEngine = engine ?? camera?.getScene().getEngine() ?? scene?.getEngine();
|
|
82
83
|
const shaderLanguage = selectedEngine?.isWebGPU && !PostProcess.ForceGLSL ? 1 /* ShaderLanguage.WGSL */ : 0 /* ShaderLanguage.GLSL */;
|
|
83
|
-
super(name, "volumetricLightScattering", ["decay", "exposure", "weight", "meshPositionOnScreen", "density"], ["lightScatteringSampler"], ratio.postProcessRatio || ratio, camera, samplingMode, selectedEngine, reusable, "#define NUM_SAMPLES " + samples,
|
|
84
|
+
super(name, "volumetricLightScattering", ["decay", "exposure", "weight", "meshPositionOnScreen", "density"], ["lightScatteringSampler"], ratio.postProcessRatio || ratio, camera, samplingMode, selectedEngine, reusable, "#define NUM_SAMPLES " + samples, textureType, undefined, undefined, undefined, undefined, shaderLanguage);
|
|
84
85
|
this._screenCoordinates = Vector2.Zero();
|
|
85
86
|
/**
|
|
86
87
|
* Custom position of the mesh. Used if "useCustomMeshPosition" is set to "true"
|
|
@@ -130,7 +131,7 @@ let VolumetricLightScatteringPostProcess = (() => {
|
|
|
130
131
|
// Configure mesh
|
|
131
132
|
this.mesh = mesh ?? _a.CreateDefaultMesh("VolumetricLightScatteringMesh", scene);
|
|
132
133
|
// Configure
|
|
133
|
-
this._createPass(scene, ratio.passRatio || ratio);
|
|
134
|
+
this._createPass(scene, ratio.passRatio || ratio, textureType);
|
|
134
135
|
this.onActivate = (camera) => {
|
|
135
136
|
if (!this.isSupported) {
|
|
136
137
|
this.dispose(camera);
|
|
@@ -332,9 +333,9 @@ let VolumetricLightScatteringPostProcess = (() => {
|
|
|
332
333
|
}
|
|
333
334
|
return false;
|
|
334
335
|
}
|
|
335
|
-
_createPass(scene, ratio) {
|
|
336
|
+
_createPass(scene, ratio, textureType) {
|
|
336
337
|
const engine = scene.getEngine();
|
|
337
|
-
this._volumetricLightScatteringRTT = new RenderTargetTexture("volumetricLightScatteringMap", { width: engine.getRenderWidth() * ratio, height: engine.getRenderHeight() * ratio }, scene, false, true,
|
|
338
|
+
this._volumetricLightScatteringRTT = new RenderTargetTexture("volumetricLightScatteringMap", { width: engine.getRenderWidth() * ratio, height: engine.getRenderHeight() * ratio }, scene, false, true, textureType);
|
|
338
339
|
this._volumetricLightScatteringRTT.wrapU = Texture.CLAMP_ADDRESSMODE;
|
|
339
340
|
this._volumetricLightScatteringRTT.wrapV = Texture.CLAMP_ADDRESSMODE;
|
|
340
341
|
this._volumetricLightScatteringRTT.renderList = null;
|