@onerjs/core 8.56.3 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Animations/animatable.core.js +36 -0
- package/Animations/animatable.core.js.map +1 -1
- package/Animations/animationGroup.pure.d.ts +61 -1
- package/Animations/animationGroup.pure.js +191 -2
- package/Animations/animationGroup.pure.js.map +1 -1
- package/Animations/index.d.ts +1 -0
- package/Animations/index.js +1 -0
- package/Animations/index.js.map +1 -1
- package/Animations/pure.d.ts +1 -0
- package/Animations/pure.js +1 -0
- package/Animations/pure.js.map +1 -1
- package/Animations/rootMotion.d.ts +560 -0
- package/Animations/rootMotion.js +1709 -0
- package/Animations/rootMotion.js.map +1 -0
- package/Animations/runtimeAnimation.d.ts +57 -0
- package/Animations/runtimeAnimation.js +127 -3
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Cameras/arcRotateCamera.pure.d.ts +2 -0
- package/Cameras/arcRotateCamera.pure.js +2 -0
- package/Cameras/arcRotateCamera.pure.js.map +1 -1
- package/Cameras/camera.pure.js +4 -0
- package/Cameras/camera.pure.js.map +1 -1
- package/Cameras/targetCamera.pure.d.ts +2 -0
- package/Cameras/targetCamera.pure.js +7 -1
- package/Cameras/targetCamera.pure.js.map +1 -1
- package/Collisions/gpuPicker.js +5 -5
- package/Collisions/gpuPicker.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.query.pure.js +4 -2
- package/Engines/AbstractEngine/abstractEngine.query.pure.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.query.types.d.ts +11 -2
- package/Engines/AbstractEngine/abstractEngine.query.types.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js +1 -0
- package/Engines/AbstractEngine/abstractEngine.renderPass.pure.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.pure.js +63 -0
- package/Engines/Extensions/engine.multiRender.pure.js.map +1 -1
- package/Engines/Extensions/engine.multiRender.types.d.ts +13 -0
- package/Engines/Extensions/engine.multiRender.types.js.map +1 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js +2 -2
- package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js.map +1 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.types.d.ts +2 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.types.js.map +1 -1
- package/Engines/Extensions/index.d.ts +1 -0
- package/Engines/Extensions/index.js +1 -0
- package/Engines/Extensions/index.js.map +1 -1
- package/Engines/Extensions/pure.d.ts +1 -1
- package/Engines/Extensions/pure.js +1 -1
- package/Engines/Extensions/pure.js.map +1 -1
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js +88 -39
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js.map +1 -1
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.d.ts +20 -2
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.types.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.pure.js +4 -0
- package/Engines/WebGPU/Extensions/engine.multiRender.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.multiRender.types.d.ts +13 -0
- package/Engines/WebGPU/Extensions/engine.multiRender.types.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.query.pure.js +11 -3
- package/Engines/WebGPU/Extensions/engine.query.pure.js.map +1 -1
- package/Engines/WebGPU/Extensions/index.d.ts +1 -0
- package/Engines/WebGPU/Extensions/index.js +1 -0
- package/Engines/WebGPU/Extensions/index.js.map +1 -1
- package/Engines/WebGPU/Extensions/pure.d.ts +1 -1
- package/Engines/WebGPU/Extensions/pure.js +1 -1
- package/Engines/WebGPU/Extensions/pure.js.map +1 -1
- package/Engines/WebGPU/webgpuBundleList.d.ts +2 -0
- package/Engines/WebGPU/webgpuBundleList.js +4 -0
- package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -2
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js +3 -1
- package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -1
- package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
- package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +4 -0
- package/Engines/WebGPU/webgpuSnapshotRendering.js +40 -7
- package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -1
- package/Engines/WebGPU/webgpuTextureHelper.js +2 -2
- package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
- package/Engines/WebGPU/webgpuTextureManager.d.ts +2 -0
- package/Engines/WebGPU/webgpuTextureManager.js +286 -13
- package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
- package/Engines/abstractEngine.pure.d.ts +2 -0
- package/Engines/abstractEngine.pure.js +7 -3
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/constants.d.ts +4 -0
- package/Engines/constants.js +4 -0
- package/Engines/constants.js.map +1 -1
- package/Engines/thinEngine.pure.d.ts +14 -0
- package/Engines/thinEngine.pure.js +48 -12
- package/Engines/thinEngine.pure.js.map +1 -1
- package/Engines/thinNativeEngine.pure.d.ts +1 -0
- package/Engines/thinNativeEngine.pure.js +7 -1
- package/Engines/thinNativeEngine.pure.js.map +1 -1
- package/Engines/thinWebGPUEngine.d.ts +4 -0
- package/Engines/thinWebGPUEngine.js +10 -1
- package/Engines/thinWebGPUEngine.js.map +1 -1
- package/Engines/webgpuEngine.pure.d.ts +5 -2
- package/Engines/webgpuEngine.pure.js +48 -13
- package/Engines/webgpuEngine.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js +2 -2
- package/FlowGraph/Blocks/Data/Math/flowGraphMathBlocks.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.d.ts +11 -2
- package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js +1 -1
- package/FlowGraph/Blocks/Data/Utils/flowGraphArrayIndexBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.d.ts +9 -1
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js +6 -8
- package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js +5 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOutEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js +5 -1
- package/FlowGraph/Blocks/Event/flowGraphPointerOverEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.d.ts +9 -0
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js +34 -9
- package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js +4 -0
- package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js +4 -0
- package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js +19 -7
- package/FlowGraph/Blocks/Event/flowGraphSendCustomEventBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.d.ts +20 -2
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js +53 -10
- package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.d.ts +16 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js +64 -14
- package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js +64 -16
- package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.pure.js.map +1 -1
- package/FlowGraph/flowGraph.d.ts +4 -0
- package/FlowGraph/flowGraph.js +38 -7
- package/FlowGraph/flowGraph.js.map +1 -1
- package/FlowGraph/flowGraphBlock.js +3 -0
- package/FlowGraph/flowGraphBlock.js.map +1 -1
- package/FlowGraph/flowGraphConnection.d.ts +7 -0
- package/FlowGraph/flowGraphConnection.js +7 -0
- package/FlowGraph/flowGraphConnection.js.map +1 -1
- package/FlowGraph/flowGraphContext.d.ts +2 -1
- package/FlowGraph/flowGraphContext.js +4 -3
- package/FlowGraph/flowGraphContext.js.map +1 -1
- package/FlowGraph/flowGraphCoordinator.d.ts +15 -1
- package/FlowGraph/flowGraphCoordinator.js +47 -16
- package/FlowGraph/flowGraphCoordinator.js.map +1 -1
- package/FlowGraph/flowGraphEventBlock.d.ts +5 -0
- package/FlowGraph/flowGraphEventBlock.js +7 -0
- package/FlowGraph/flowGraphEventBlock.js.map +1 -1
- package/FlowGraph/flowGraphHostResolver.d.ts +2 -1
- package/FlowGraph/flowGraphHostResolver.js.map +1 -1
- package/FlowGraph/flowGraphParser.js +60 -2
- package/FlowGraph/flowGraphParser.js.map +1 -1
- package/FlowGraph/serialization.d.ts +2 -0
- package/FlowGraph/serialization.js +10 -22
- package/FlowGraph/serialization.js.map +1 -1
- package/FlowGraph/typeDefinitions.d.ts +8 -0
- package/FlowGraph/typeDefinitions.js.map +1 -1
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.d.ts +5 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js +8 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.js.map +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.d.ts +87 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js +295 -0
- package/FrameGraph/Node/Blocks/PostProcesses/meshBlendingPostProcessBlock.pure.js.map +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/pure.d.ts +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/pure.js +1 -0
- package/FrameGraph/Node/Blocks/PostProcesses/pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +4 -4
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.d.ts +5 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +13 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/allBlocks.pure.js +2 -0
- package/FrameGraph/Node/Blocks/allBlocks.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/index.d.ts +1 -0
- package/FrameGraph/Node/Blocks/index.js +1 -0
- package/FrameGraph/Node/Blocks/index.js.map +1 -1
- package/FrameGraph/Node/Blocks/inputBlock.pure.js +20 -1
- package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
- package/FrameGraph/Node/Blocks/pure.d.ts +1 -0
- package/FrameGraph/Node/Blocks/pure.js +1 -0
- package/FrameGraph/Node/Blocks/pure.js.map +1 -1
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +4 -2
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +4 -2
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js +1 -1
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Tasks/Layers/selectionOutlineTask.js +1 -0
- package/FrameGraph/Tasks/Layers/selectionOutlineTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js +5 -1
- package/FrameGraph/Tasks/Misc/cullObjectsTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +1 -0
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.d.ts +69 -0
- package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js +223 -0
- package/FrameGraph/Tasks/PostProcesses/meshBlendingTask.js.map +1 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +25 -3
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +69 -33
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +3 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/frameGraphObjectList.d.ts +6 -1
- package/FrameGraph/frameGraphObjectList.js.map +1 -1
- package/FrameGraph/frameGraphRenderContext.d.ts +3 -1
- package/FrameGraph/frameGraphRenderContext.js +5 -5
- package/FrameGraph/frameGraphRenderContext.js.map +1 -1
- package/FrameGraph/index.d.ts +1 -0
- package/FrameGraph/index.js +1 -0
- package/FrameGraph/index.js.map +1 -1
- package/FrameGraph/pure.d.ts +1 -0
- package/FrameGraph/pure.js +1 -0
- package/FrameGraph/pure.js.map +1 -1
- package/Inputs/scene.inputManager.d.ts +4 -0
- package/Inputs/scene.inputManager.js +50 -8
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js +5 -5
- package/Materials/GaussianSplatting/gaussianSplattingDebugMaterialPlugin.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js +5 -5
- package/Materials/GaussianSplatting/gaussianSplattingGpuPickingMaterialPlugin.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.d.ts +26 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +151 -47
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js +5 -5
- package/Materials/GaussianSplatting/gaussianSplattingSolidColorMaterialPlugin.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +11 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +17 -2
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js +2 -2
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.js.map +1 -1
- package/Materials/Node/nodeMaterial.pure.d.ts +4 -0
- package/Materials/Node/nodeMaterial.pure.js +4 -0
- package/Materials/Node/nodeMaterial.pure.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +1 -1
- package/Materials/Node/nodeMaterialBuildState.js +25 -3
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.pure.d.ts +2 -0
- package/Materials/PBR/pbrBaseMaterial.pure.d.ts +2 -0
- package/Materials/Textures/Procedurals/proceduralTexture.pure.d.ts +13 -14
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js +6 -6
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
- package/Materials/Textures/baseTexture.pure.js +3 -0
- package/Materials/Textures/baseTexture.pure.js.map +1 -1
- package/Materials/Textures/cubeTexture.pure.js +1 -1
- package/Materials/Textures/cubeTexture.pure.js.map +1 -1
- package/Materials/Textures/internalTexture.d.ts +8 -1
- package/Materials/Textures/internalTexture.js +9 -2
- package/Materials/Textures/internalTexture.js.map +1 -1
- package/Materials/Textures/rawTexture2DArray.functions.d.ts +3 -3
- package/Materials/Textures/rawTexture2DArray.functions.js.map +1 -1
- package/Materials/Textures/rawTexture3D.d.ts +1 -1
- package/Materials/Textures/rawTexture3D.js +1 -1
- package/Materials/Textures/rawTexture3D.js.map +1 -1
- package/Materials/Textures/textureHelper.functions.d.ts +14 -0
- package/Materials/Textures/textureHelper.functions.js +24 -0
- package/Materials/Textures/textureHelper.functions.js.map +1 -1
- package/Materials/ditheredTileFadeMaterialPlugin.d.ts +210 -0
- package/Materials/ditheredTileFadeMaterialPlugin.js +509 -0
- package/Materials/ditheredTileFadeMaterialPlugin.js.map +1 -0
- package/Materials/index.d.ts +1 -0
- package/Materials/index.js +1 -0
- package/Materials/index.js.map +1 -1
- package/Materials/materialHelper.geometryrendering.d.ts +46 -1
- package/Materials/materialHelper.geometryrendering.js +105 -8
- package/Materials/materialHelper.geometryrendering.js.map +1 -1
- package/Materials/prepass.defines.d.ts +2 -0
- package/Materials/prepass.defines.js +2 -0
- package/Materials/prepass.defines.js.map +1 -1
- package/Materials/pure.d.ts +1 -0
- package/Materials/pure.js +1 -0
- package/Materials/pure.js.map +1 -1
- package/Materials/standardMaterial.pure.d.ts +2 -0
- package/Materials/standardMaterial.pure.js +6 -3
- package/Materials/standardMaterial.pure.js.map +1 -1
- package/Meshes/Builders/polygonBuilder.pure.d.ts +4 -0
- package/Meshes/Builders/polygonBuilder.pure.js +4 -1
- package/Meshes/Builders/polygonBuilder.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplatting.functions.d.ts +19 -0
- package/Meshes/GaussianSplatting/gaussianSplatting.functions.js +23 -0
- package/Meshes/GaussianSplatting/gaussianSplatting.functions.js.map +1 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +3 -14
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +20 -24
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +2 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +11 -4
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
- package/Meshes/abstractMesh.pure.d.ts +18 -0
- package/Meshes/abstractMesh.pure.js +22 -0
- package/Meshes/abstractMesh.pure.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/instancedMesh.pure.d.ts +5 -0
- package/Meshes/instancedMesh.pure.js +12 -0
- package/Meshes/instancedMesh.pure.js.map +1 -1
- package/Meshes/mesh.pure.js +23 -8
- package/Meshes/mesh.pure.js.map +1 -1
- package/Meshes/meshBlendingTag.d.ts +47 -0
- package/Meshes/meshBlendingTag.js +64 -0
- package/Meshes/meshBlendingTag.js.map +1 -0
- package/Meshes/polygonMesh.js +2 -2
- package/Meshes/polygonMesh.js.map +1 -1
- package/Meshes/pure.d.ts +1 -0
- package/Meshes/pure.js +1 -0
- package/Meshes/pure.js.map +1 -1
- package/Misc/fileTools.pure.js +21 -0
- package/Misc/fileTools.pure.js.map +1 -1
- package/Misc/snapshotRenderingHelper.js +2 -2
- package/Misc/snapshotRenderingHelper.js.map +1 -1
- package/Misc/tools.pure.js +1 -1
- package/Misc/tools.pure.js.map +1 -1
- package/Particles/gpuParticleSystem.pure.d.ts +2 -0
- package/Particles/gpuParticleSystem.pure.js +89 -28
- package/Particles/gpuParticleSystem.pure.js.map +1 -1
- package/Particles/thinParticleSystem.pure.d.ts +2 -0
- package/Particles/thinParticleSystem.pure.js +84 -19
- package/Particles/thinParticleSystem.pure.js.map +1 -1
- package/Particles/webgl2ParticleSystem.pure.d.ts +1 -0
- package/Particles/webgl2ParticleSystem.pure.js +12 -4
- package/Particles/webgl2ParticleSystem.pure.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js +7 -0
- package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/index.d.ts +2 -0
- package/PostProcesses/index.js +2 -0
- package/PostProcesses/index.js.map +1 -1
- package/PostProcesses/meshBlendingBlueNoise.d.ts +15 -0
- package/PostProcesses/meshBlendingBlueNoise.js +77 -0
- package/PostProcesses/meshBlendingBlueNoise.js.map +1 -0
- package/PostProcesses/meshBlendingPostProcess.d.ts +131 -0
- package/PostProcesses/meshBlendingPostProcess.js +315 -0
- package/PostProcesses/meshBlendingPostProcess.js.map +1 -0
- package/PostProcesses/pure.d.ts +2 -0
- package/PostProcesses/pure.js +2 -0
- package/PostProcesses/pure.js.map +1 -1
- package/PostProcesses/thinMeshBlendingPostProcess.d.ts +339 -0
- package/PostProcesses/thinMeshBlendingPostProcess.js +771 -0
- package/PostProcesses/thinMeshBlendingPostProcess.js.map +1 -0
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +6 -6
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +8 -8
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
- package/Rendering/boundingBoxRenderer.pure.js +2 -1
- package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
- package/Rendering/depthRenderer.pure.js +3 -4
- package/Rendering/depthRenderer.pure.js.map +1 -1
- package/Rendering/edgesRenderer.pure.d.ts +4 -2
- package/Rendering/edgesRenderer.pure.js +11 -2
- package/Rendering/edgesRenderer.pure.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +10 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.js +20 -0
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +9 -3
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +14 -9
- package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
- package/Rendering/geometryBufferRenderer.pure.d.ts +38 -4
- package/Rendering/geometryBufferRenderer.pure.js +126 -17
- package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
- package/Rendering/objectRenderer.d.ts +7 -1
- package/Rendering/objectRenderer.js +45 -7
- package/Rendering/objectRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.pure.js +6 -2
- package/Rendering/outlineRenderer.pure.js.map +1 -1
- package/Rendering/renderingManager.d.ts +1 -1
- package/Rendering/renderingManager.js +5 -4
- package/Rendering/renderingManager.js.map +1 -1
- package/Shaders/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
- package/Shaders/ShadersInclude/defaultFragmentAlpha.js +34 -0
- package/Shaders/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +5 -1
- package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/geometryRenderingFragment.d.ts +5 -0
- package/Shaders/ShadersInclude/geometryRenderingFragment.js +74 -0
- package/Shaders/ShadersInclude/geometryRenderingFragment.js.map +1 -0
- package/Shaders/ShadersInclude/mrtFragmentDeclaration.js +89 -0
- package/Shaders/ShadersInclude/mrtFragmentDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js +24 -17
- package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockPrePass.js +27 -20
- package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDebug.js +6 -2
- package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
- package/Shaders/ShadersInclude/prePassDeclaration.js +95 -2
- package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/Shaders/default.fragment.js +31 -40
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/depthOfField.fragment.js +13 -9
- package/Shaders/depthOfField.fragment.js.map +1 -1
- package/Shaders/fluidRenderingParticleDepth.vertex.js +16 -1
- package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -1
- package/Shaders/fluidRenderingParticleThickness.vertex.js +16 -1
- package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -1
- package/Shaders/gaussianSplatting.fragment.js +63 -3
- package/Shaders/gaussianSplatting.fragment.js.map +1 -1
- package/Shaders/gaussianSplatting.vertex.js +80 -0
- package/Shaders/gaussianSplatting.vertex.js.map +1 -1
- package/Shaders/geometry.fragment.js +17 -11
- package/Shaders/geometry.fragment.js.map +1 -1
- package/Shaders/gpuRenderParticles.fragment.js +43 -1
- package/Shaders/gpuRenderParticles.fragment.js.map +1 -1
- package/Shaders/gpuRenderParticles.vertex.js +96 -16
- package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
- package/Shaders/meshBlending.fragment.d.ts +5 -0
- package/Shaders/meshBlending.fragment.js +519 -0
- package/Shaders/meshBlending.fragment.js.map +1 -0
- package/Shaders/particles.fragment.js +43 -1
- package/Shaders/particles.fragment.js.map +1 -1
- package/Shaders/particles.vertex.js +84 -3
- package/Shaders/particles.vertex.js.map +1 -1
- package/Shaders/sprites.fragment.js +52 -2
- package/Shaders/sprites.fragment.js.map +1 -1
- package/Shaders/sprites.vertex.js +62 -1
- package/Shaders/sprites.vertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js +33 -0
- package/ShadersWGSL/ShadersInclude/defaultFragmentAlpha.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.d.ts +6 -0
- package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js +76 -0
- package/ShadersWGSL/ShadersInclude/geometryRenderingFragment.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js +18 -0
- package/ShadersWGSL/ShadersInclude/meshBlendTagFragmentOutput.js.map +1 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +11 -25
- package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.d.ts +1 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +11 -25
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDebug.js +5 -1
- package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +6 -1
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/ShadersWGSL/default.fragment.js +17 -48
- package/ShadersWGSL/default.fragment.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +15 -2
- package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +15 -2
- package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.fragment.js +63 -2
- package/ShadersWGSL/gaussianSplatting.fragment.js.map +1 -1
- package/ShadersWGSL/gaussianSplatting.vertex.js +80 -0
- package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
- package/ShadersWGSL/geometry.fragment.js +37 -2
- package/ShadersWGSL/geometry.fragment.js.map +1 -1
- package/ShadersWGSL/gpuRenderParticles.fragment.js +47 -2
- package/ShadersWGSL/gpuRenderParticles.fragment.js.map +1 -1
- package/ShadersWGSL/gpuRenderParticles.vertex.js +110 -7
- package/ShadersWGSL/gpuRenderParticles.vertex.js.map +1 -1
- package/ShadersWGSL/meshBlending.fragment.d.ts +5 -0
- package/ShadersWGSL/meshBlending.fragment.js +576 -0
- package/ShadersWGSL/meshBlending.fragment.js.map +1 -0
- package/ShadersWGSL/openpbr.fragment.js +2 -1
- package/ShadersWGSL/openpbr.fragment.js.map +1 -1
- package/ShadersWGSL/particles.fragment.js +45 -1
- package/ShadersWGSL/particles.fragment.js.map +1 -1
- package/ShadersWGSL/particles.vertex.js +86 -4
- package/ShadersWGSL/particles.vertex.js.map +1 -1
- package/ShadersWGSL/pbr.fragment.js +2 -1
- package/ShadersWGSL/pbr.fragment.js.map +1 -1
- package/ShadersWGSL/sprites.fragment.js +56 -2
- package/ShadersWGSL/sprites.fragment.js.map +1 -1
- package/ShadersWGSL/sprites.vertex.js +62 -1
- package/ShadersWGSL/sprites.vertex.js.map +1 -1
- package/Sprites/spriteManager.d.ts +13 -0
- package/Sprites/spriteManager.js +15 -0
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spriteRenderer.d.ts +24 -1
- package/Sprites/spriteRenderer.js +368 -50
- package/Sprites/spriteRenderer.js.map +1 -1
- package/Sprites/thinSprite.d.ts +4 -0
- package/Sprites/thinSprite.js +4 -0
- package/Sprites/thinSprite.js.map +1 -1
- package/States/alphaCullingState.d.ts +3 -1
- package/States/alphaCullingState.js +18 -3
- package/States/alphaCullingState.js.map +1 -1
- package/XR/webXRDefaultExperience.d.ts +5 -1
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXREnterExitUI.d.ts +2 -1
- package/XR/webXREnterExitUI.js.map +1 -1
- package/package.json +1 -1
- package/scene.pure.d.ts +23 -0
- package/scene.pure.js +35 -0
- package/scene.pure.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fragmentOutputBlock.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { type NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { type NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { type Scene } from \"../../../../scene.pure\";\r\nimport { type NodeMaterialDefines, type NodeMaterial } from \"../../nodeMaterial.pure\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { type Effect } from \"../../../effect.pure\";\r\nimport { type Mesh } from \"../../../../Meshes/mesh.pure\";\r\nimport { BindLogDepth } from \"../../../materialHelper.functions\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\n/**\r\n * Color spaces supported by the fragment output block\r\n */\r\nexport enum FragmentOutputBlockColorSpace {\r\n /** Unspecified */\r\n NoColorSpace,\r\n /** Gamma */\r\n Gamma,\r\n /** Linear */\r\n Linear,\r\n}\r\n\r\n/**\r\n * Block used to output the final color\r\n */\r\nexport class FragmentOutputBlock extends NodeMaterialBlock {\r\n private _linearDefineName: string;\r\n private _gammaDefineName: string;\r\n private _additionalColorDefineName: string | undefined;\r\n protected _outputString: string;\r\n\r\n /**\r\n * Create a new FragmentOutputBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment, true, true);\r\n\r\n this.registerInput(\"rgba\", NodeMaterialBlockConnectionPointTypes.Color4, true);\r\n this.registerInput(\"rgb\", NodeMaterialBlockConnectionPointTypes.Color3, true);\r\n this.registerInput(\"a\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"glow\", NodeMaterialBlockConnectionPointTypes.Color3, true);\r\n\r\n this.rgb.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.rgb.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Float);\r\n\r\n this.additionalColor.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.additionalColor.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Float);\r\n }\r\n\r\n /** Gets or sets a boolean indicating if content needs to be converted to gamma space */\r\n public convertToGammaSpace = false;\r\n\r\n /** Gets or sets a boolean indicating if content needs to be converted to linear space */\r\n public convertToLinearSpace = false;\r\n\r\n /** Gets or sets a boolean indicating if logarithmic depth should be used */\r\n @editableInPropertyPage(\"Use logarithmic depth\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true })\r\n public useLogarithmicDepth = false;\r\n\r\n /**\r\n * Gets or sets the color space used for the block\r\n */\r\n @editableInPropertyPage(\"Color space\", PropertyTypeForEdition.List, \"ADVANCED\", {\r\n notifiers: { rebuild: true },\r\n embedded: true,\r\n options: [\r\n { label: \"No color space\", value: FragmentOutputBlockColorSpace.NoColorSpace },\r\n { label: \"To Gamma\", value: FragmentOutputBlockColorSpace.Gamma },\r\n { label: \"To Linear\", value: FragmentOutputBlockColorSpace.Linear },\r\n ],\r\n })\r\n public get colorSpace() {\r\n if (this.convertToGammaSpace) {\r\n return FragmentOutputBlockColorSpace.Gamma;\r\n }\r\n if (this.convertToLinearSpace) {\r\n return FragmentOutputBlockColorSpace.Linear;\r\n }\r\n return FragmentOutputBlockColorSpace.NoColorSpace;\r\n }\r\n\r\n public set colorSpace(value: FragmentOutputBlockColorSpace) {\r\n this.convertToGammaSpace = value === FragmentOutputBlockColorSpace.Gamma;\r\n this.convertToLinearSpace = value === FragmentOutputBlockColorSpace.Linear;\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"FragmentOutputBlock\";\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"logarithmicDepthConstant\");\r\n state._excludeVariableName(\"vFragmentDepth\");\r\n state._excludeVariableName(\"objectId\");\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync(state.shaderLanguage);\r\n }\r\n\r\n private async _initShaderSourceAsync(shaderLanguage: ShaderLanguage) {\r\n this._codeIsReady = false;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([import(\"../../../../ShadersWGSL/ShadersInclude/helperFunctions\"), import(\"../../../../ShadersWGSL/ShadersInclude/objectIdFunctions\")]);\r\n } else {\r\n await Promise.all([import(\"../../../../Shaders/ShadersInclude/helperFunctions\"), import(\"../../../../Shaders/ShadersInclude/objectIdFunctions\")]);\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Gets the rgba input component\r\n */\r\n public get rgba(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the rgb input component\r\n */\r\n public get rgb(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the a input component\r\n */\r\n public get a(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the additionalColor input component (named glow in the UI for now)\r\n */\r\n public get additionalColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the glow input component\r\n */\r\n public get glow(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n protected _getOutputString(state: NodeMaterialBuildState): string {\r\n return state.shaderLanguage === ShaderLanguage.WGSL ? \"fragmentOutputsColor\" : \"gl_FragColor\";\r\n }\r\n\r\n private _writePrePassOutput(state: NodeMaterialBuildState, define: string, indexDefine: string, value: string): string {\r\n if (state.shaderLanguage !== ShaderLanguage.WGSL) {\r\n return `#ifdef ${define}\\r\\ngl_FragData[${indexDefine}] = ${value};\\r\\n#endif\\r\\n`;\r\n }\r\n\r\n let code = \"\";\r\n for (let index = 0; index < 8; index++) {\r\n code += `#if defined(${define}) && ${indexDefine} == ${index}\\r\\nfragmentOutputs.fragData${index} = ${value};\\r\\n#endif\\r\\n`;\r\n }\r\n return code;\r\n }\r\n\r\n /**\r\n * Prepare the list of defines\r\n * @param defines - the material defines\r\n * @param nodeMaterial - the node material\r\n */\r\n public override prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial) {\r\n defines.setValue(this._linearDefineName, this.convertToLinearSpace, true);\r\n defines.setValue(this._gammaDefineName, this.convertToGammaSpace, true);\r\n if (this._additionalColorDefineName !== undefined) {\r\n defines.setValue(this._additionalColorDefineName, !!this.additionalColor.connectedPoint && nodeMaterial._useAdditionalColor, true);\r\n }\r\n }\r\n\r\n /**\r\n * Bind data to effect\r\n * @param effect - the effect to bind to\r\n * @param nodeMaterial - the node material\r\n * @param mesh - the mesh to bind for\r\n */\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if ((this.useLogarithmicDepth || nodeMaterial.useLogarithmicDepth) && mesh) {\r\n BindLogDepth(undefined, effect, mesh.getScene());\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const rgba = this.rgba;\r\n const rgb = this.rgb;\r\n const a = this.a;\r\n const additionalColor = this.additionalColor;\r\n\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n state.sharedData.hints.needAlphaBlending = rgba.isConnected || a.isConnected;\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n if (this.useLogarithmicDepth || state.sharedData.nodeMaterial.useLogarithmicDepth) {\r\n state._emitUniformFromString(\"logarithmicDepthConstant\", NodeMaterialBlockConnectionPointTypes.Float);\r\n state._emitVaryingFromString(\"vFragmentDepth\", NodeMaterialBlockConnectionPointTypes.Float);\r\n state.sharedData.bindableBlocks.push(this);\r\n }\r\n\r\n if (additionalColor.connectedPoint) {\r\n state._excludeVariableName(\"useAdditionalColor\");\r\n state._emitUniformFromString(\"useAdditionalColor\", NodeMaterialBlockConnectionPointTypes.Float);\r\n this._additionalColorDefineName = state._getFreeDefineName(\"USEADDITIONALCOLOR\");\r\n }\r\n\r\n this._linearDefineName = state._getFreeDefineName(\"CONVERTTOLINEAR\");\r\n this._gammaDefineName = state._getFreeDefineName(\"CONVERTTOGAMMA\");\r\n\r\n const comments = `//${this.name}`;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n state._emitFunctionFromInclude(\"objectIdFunctions\", comments, { define: \"PREPASS_OBJECT_ID\" });\r\n state._emitUniformFromString(\"objectId\", NodeMaterialBlockConnectionPointTypes.Float, \"PREPASS_OBJECT_ID\");\r\n\r\n const outputString = this._getOutputString(state);\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n state.compilationString += `var ${outputString} : vec4<f32>;\\r\\n`;\r\n }\r\n\r\n const vec4 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n\r\n if (additionalColor.connectedPoint) {\r\n let aValue = \"1.0\";\r\n\r\n if (a.connectedPoint) {\r\n aValue = a.associatedVariableName;\r\n }\r\n state.compilationString += `#ifdef ${this._additionalColorDefineName}\\n`;\r\n if (additionalColor.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Float) {\r\n state.compilationString += `${outputString} = ${vec4}(${additionalColor.associatedVariableName}, ${additionalColor.associatedVariableName}, ${additionalColor.associatedVariableName}, ${aValue});\\n`;\r\n } else {\r\n state.compilationString += `${outputString} = ${vec4}(${additionalColor.associatedVariableName}, ${aValue});\\n`;\r\n }\r\n state.compilationString += `#else\\n`;\r\n }\r\n\r\n if (rgba.connectedPoint) {\r\n if (a.isConnected) {\r\n state.compilationString += `${outputString} = ${vec4}(${rgba.associatedVariableName}.rgb, ${a.associatedVariableName});\\n`;\r\n } else {\r\n state.compilationString += `${outputString} = ${rgba.associatedVariableName};\\n`;\r\n }\r\n } else if (rgb.connectedPoint) {\r\n let aValue = \"1.0\";\r\n\r\n if (a.connectedPoint) {\r\n aValue = a.associatedVariableName;\r\n }\r\n\r\n if (rgb.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Float) {\r\n state.compilationString += `${outputString} = ${vec4}(${rgb.associatedVariableName}, ${rgb.associatedVariableName}, ${rgb.associatedVariableName}, ${aValue});\\n`;\r\n } else {\r\n state.compilationString += `${outputString} = ${vec4}(${rgb.associatedVariableName}, ${aValue});\\n`;\r\n }\r\n } else {\r\n state.sharedData.checks.notConnectedNonOptionalInputs.push(rgba);\r\n }\r\n\r\n if (additionalColor.connectedPoint) {\r\n state.compilationString += `#endif\\n`;\r\n }\r\n\r\n state.compilationString += `#ifdef ${this._linearDefineName}\\n`;\r\n state.compilationString += `${outputString} = toLinearSpace${state.shaderLanguage === ShaderLanguage.WGSL ? \"Vec4\" : \"\"}(${outputString});\\n`;\r\n state.compilationString += `#endif\\n`;\r\n\r\n state.compilationString += `#ifdef ${this._gammaDefineName}\\n`;\r\n state.compilationString += `${outputString} = toGammaSpace(${outputString});\\n`;\r\n state.compilationString += `#endif\\n`;\r\n\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n state.compilationString += `#if !defined(PREPASS)\\r\\n`;\r\n state.compilationString += `fragmentOutputs.color = ${outputString};\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n }\r\n\r\n if (this.useLogarithmicDepth || state.sharedData.nodeMaterial.useLogarithmicDepth) {\r\n const fragDepth = isWebGPU ? \"input.vFragmentDepth\" : \"vFragmentDepth\";\r\n const uniformP = isWebGPU ? \"uniforms.\" : \"\";\r\n const output = isWebGPU ? \"fragmentOutputs.fragDepth\" : \"gl_FragDepthEXT\";\r\n\r\n state.compilationString += `${output} = log2(${fragDepth}) * ${uniformP}logarithmicDepthConstant * 0.5;\\n`;\r\n }\r\n\r\n const uniformPrefix = isWebGPU ? \"uniforms.\" : \"\";\r\n state.compilationString += `#if defined(PREPASS)\\r\\n`;\r\n state.compilationString += this._writePrePassOutput(state, \"PREPASS_COLOR\", \"PREPASS_COLOR_INDEX\", outputString);\r\n state.compilationString += this._writePrePassOutput(state, \"PREPASS_OBJECT_ID\", \"PREPASS_OBJECT_ID_INDEX\", `encodeObjectId(${uniformPrefix}objectId)`);\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n codeString += `${this._codeVariableName}.convertToGammaSpace = ${this.convertToGammaSpace};\\n`;\r\n codeString += `${this._codeVariableName}.convertToLinearSpace = ${this.convertToLinearSpace};\\n`;\r\n codeString += `${this._codeVariableName}.useLogarithmicDepth = ${this.useLogarithmicDepth};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @returns the serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.convertToGammaSpace = this.convertToGammaSpace;\r\n serializationObject.convertToLinearSpace = this.convertToLinearSpace;\r\n serializationObject.useLogarithmicDepth = this.useLogarithmicDepth;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root url\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.convertToGammaSpace = !!serializationObject.convertToGammaSpace;\r\n this.convertToLinearSpace = !!serializationObject.convertToLinearSpace;\r\n this.useLogarithmicDepth = serializationObject.useLogarithmicDepth ?? false;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for fragmentOutputBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterFragmentOutputBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.FragmentOutputBlock\", FragmentOutputBlock);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"fragmentOutputBlock.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { type NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { type NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { type Scene } from \"../../../../scene.pure\";\r\nimport { type NodeMaterialDefines, type NodeMaterial } from \"../../nodeMaterial.pure\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { type Effect } from \"../../../effect.pure\";\r\nimport { type Mesh } from \"../../../../Meshes/mesh.pure\";\r\nimport { BindLogDepth } from \"../../../materialHelper.functions\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\n/**\r\n * Color spaces supported by the fragment output block\r\n */\r\nexport enum FragmentOutputBlockColorSpace {\r\n /** Unspecified */\r\n NoColorSpace,\r\n /** Gamma */\r\n Gamma,\r\n /** Linear */\r\n Linear,\r\n}\r\n\r\n/**\r\n * Block used to output the final color\r\n */\r\nexport class FragmentOutputBlock extends NodeMaterialBlock {\r\n private _linearDefineName: string;\r\n private _gammaDefineName: string;\r\n private _additionalColorDefineName: string | undefined;\r\n protected _outputString: string;\r\n\r\n /**\r\n * Create a new FragmentOutputBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment, true, true);\r\n\r\n this.registerInput(\"rgba\", NodeMaterialBlockConnectionPointTypes.Color4, true);\r\n this.registerInput(\"rgb\", NodeMaterialBlockConnectionPointTypes.Color3, true);\r\n this.registerInput(\"a\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"glow\", NodeMaterialBlockConnectionPointTypes.Color3, true);\r\n\r\n this.rgb.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.rgb.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Float);\r\n\r\n this.additionalColor.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.additionalColor.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Float);\r\n }\r\n\r\n /** Gets or sets a boolean indicating if content needs to be converted to gamma space */\r\n public convertToGammaSpace = false;\r\n\r\n /** Gets or sets a boolean indicating if content needs to be converted to linear space */\r\n public convertToLinearSpace = false;\r\n\r\n /** Gets or sets a boolean indicating if logarithmic depth should be used */\r\n @editableInPropertyPage(\"Use logarithmic depth\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true })\r\n public useLogarithmicDepth = false;\r\n\r\n /**\r\n * Gets or sets the color space used for the block\r\n */\r\n @editableInPropertyPage(\"Color space\", PropertyTypeForEdition.List, \"ADVANCED\", {\r\n notifiers: { rebuild: true },\r\n embedded: true,\r\n options: [\r\n { label: \"No color space\", value: FragmentOutputBlockColorSpace.NoColorSpace },\r\n { label: \"To Gamma\", value: FragmentOutputBlockColorSpace.Gamma },\r\n { label: \"To Linear\", value: FragmentOutputBlockColorSpace.Linear },\r\n ],\r\n })\r\n public get colorSpace() {\r\n if (this.convertToGammaSpace) {\r\n return FragmentOutputBlockColorSpace.Gamma;\r\n }\r\n if (this.convertToLinearSpace) {\r\n return FragmentOutputBlockColorSpace.Linear;\r\n }\r\n return FragmentOutputBlockColorSpace.NoColorSpace;\r\n }\r\n\r\n public set colorSpace(value: FragmentOutputBlockColorSpace) {\r\n this.convertToGammaSpace = value === FragmentOutputBlockColorSpace.Gamma;\r\n this.convertToLinearSpace = value === FragmentOutputBlockColorSpace.Linear;\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"FragmentOutputBlock\";\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"logarithmicDepthConstant\");\r\n state._excludeVariableName(\"vFragmentDepth\");\r\n state._excludeVariableName(\"objectId\");\r\n state._excludeVariableName(\"meshBlendTag\");\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync(state.shaderLanguage);\r\n }\r\n\r\n private async _initShaderSourceAsync(shaderLanguage: ShaderLanguage) {\r\n this._codeIsReady = false;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([import(\"../../../../ShadersWGSL/ShadersInclude/helperFunctions\"), import(\"../../../../ShadersWGSL/ShadersInclude/objectIdFunctions\")]);\r\n } else {\r\n await Promise.all([import(\"../../../../Shaders/ShadersInclude/helperFunctions\"), import(\"../../../../Shaders/ShadersInclude/objectIdFunctions\")]);\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Gets the rgba input component\r\n */\r\n public get rgba(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the rgb input component\r\n */\r\n public get rgb(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the a input component\r\n */\r\n public get a(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the additionalColor input component (named glow in the UI for now)\r\n */\r\n public get additionalColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the glow input component\r\n */\r\n public get glow(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n protected _getOutputString(state: NodeMaterialBuildState): string {\r\n return state.shaderLanguage === ShaderLanguage.WGSL ? \"fragmentOutputsColor\" : \"gl_FragColor\";\r\n }\r\n\r\n private _writePrePassOutput(state: NodeMaterialBuildState, define: string, indexDefine: string, value: string): string {\r\n if (state.shaderLanguage !== ShaderLanguage.WGSL) {\r\n return `#ifdef ${define}\\r\\nWRITE_GEOMETRY_FRAGMENT_OUTPUT(${indexDefine}, ${value});\\r\\n#endif\\r\\n`;\r\n }\r\n\r\n let code = \"\";\r\n for (let index = 0; index < 8; index++) {\r\n code += `#if defined(${define}) && ${indexDefine} == ${index}\\r\\nfragmentOutputs.fragData${index} = ${value};\\r\\n#endif\\r\\n`;\r\n }\r\n return code;\r\n }\r\n\r\n /**\r\n * Prepare the list of defines\r\n * @param defines - the material defines\r\n * @param nodeMaterial - the node material\r\n */\r\n public override prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial) {\r\n defines.setValue(this._linearDefineName, this.convertToLinearSpace, true);\r\n defines.setValue(this._gammaDefineName, this.convertToGammaSpace, true);\r\n if (this._additionalColorDefineName !== undefined) {\r\n defines.setValue(this._additionalColorDefineName, !!this.additionalColor.connectedPoint && nodeMaterial._useAdditionalColor, true);\r\n }\r\n }\r\n\r\n /**\r\n * Bind data to effect\r\n * @param effect - the effect to bind to\r\n * @param nodeMaterial - the node material\r\n * @param mesh - the mesh to bind for\r\n */\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if ((this.useLogarithmicDepth || nodeMaterial.useLogarithmicDepth) && mesh) {\r\n BindLogDepth(undefined, effect, mesh.getScene());\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const rgba = this.rgba;\r\n const rgb = this.rgb;\r\n const a = this.a;\r\n const additionalColor = this.additionalColor;\r\n\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n state.sharedData.hints.needAlphaBlending = rgba.isConnected || a.isConnected;\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n if (this.useLogarithmicDepth || state.sharedData.nodeMaterial.useLogarithmicDepth) {\r\n state._emitUniformFromString(\"logarithmicDepthConstant\", NodeMaterialBlockConnectionPointTypes.Float);\r\n state._emitVaryingFromString(\"vFragmentDepth\", NodeMaterialBlockConnectionPointTypes.Float);\r\n state.sharedData.bindableBlocks.push(this);\r\n }\r\n\r\n if (additionalColor.connectedPoint) {\r\n state._excludeVariableName(\"useAdditionalColor\");\r\n state._emitUniformFromString(\"useAdditionalColor\", NodeMaterialBlockConnectionPointTypes.Float);\r\n this._additionalColorDefineName = state._getFreeDefineName(\"USEADDITIONALCOLOR\");\r\n }\r\n\r\n this._linearDefineName = state._getFreeDefineName(\"CONVERTTOLINEAR\");\r\n this._gammaDefineName = state._getFreeDefineName(\"CONVERTTOGAMMA\");\r\n\r\n const comments = `//${this.name}`;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n state._emitFunctionFromInclude(\"objectIdFunctions\", comments, { define: \"PREPASS_OBJECT_ID\" });\r\n state._emitUniformFromString(\"objectId\", NodeMaterialBlockConnectionPointTypes.Float, \"PREPASS_OBJECT_ID\");\r\n state._emitUniformFromString(\"meshBlendTag\", NodeMaterialBlockConnectionPointTypes.Int, \"PREPASS_MESH_BLEND_TAG\");\r\n\r\n const outputString = this._getOutputString(state);\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n state.compilationString += `var ${outputString} : vec4<f32>;\\r\\n`;\r\n }\r\n\r\n const vec4 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n\r\n if (additionalColor.connectedPoint) {\r\n let aValue = \"1.0\";\r\n\r\n if (a.connectedPoint) {\r\n aValue = a.associatedVariableName;\r\n }\r\n state.compilationString += `#ifdef ${this._additionalColorDefineName}\\n`;\r\n if (additionalColor.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Float) {\r\n state.compilationString += `${outputString} = ${vec4}(${additionalColor.associatedVariableName}, ${additionalColor.associatedVariableName}, ${additionalColor.associatedVariableName}, ${aValue});\\n`;\r\n } else {\r\n state.compilationString += `${outputString} = ${vec4}(${additionalColor.associatedVariableName}, ${aValue});\\n`;\r\n }\r\n state.compilationString += `#else\\n`;\r\n }\r\n\r\n if (rgba.connectedPoint) {\r\n if (a.isConnected) {\r\n state.compilationString += `${outputString} = ${vec4}(${rgba.associatedVariableName}.rgb, ${a.associatedVariableName});\\n`;\r\n } else {\r\n state.compilationString += `${outputString} = ${rgba.associatedVariableName};\\n`;\r\n }\r\n } else if (rgb.connectedPoint) {\r\n let aValue = \"1.0\";\r\n\r\n if (a.connectedPoint) {\r\n aValue = a.associatedVariableName;\r\n }\r\n\r\n if (rgb.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Float) {\r\n state.compilationString += `${outputString} = ${vec4}(${rgb.associatedVariableName}, ${rgb.associatedVariableName}, ${rgb.associatedVariableName}, ${aValue});\\n`;\r\n } else {\r\n state.compilationString += `${outputString} = ${vec4}(${rgb.associatedVariableName}, ${aValue});\\n`;\r\n }\r\n } else {\r\n state.sharedData.checks.notConnectedNonOptionalInputs.push(rgba);\r\n }\r\n\r\n if (additionalColor.connectedPoint) {\r\n state.compilationString += `#endif\\n`;\r\n }\r\n\r\n state.compilationString += `#ifdef ${this._linearDefineName}\\n`;\r\n state.compilationString += `${outputString} = toLinearSpace${state.shaderLanguage === ShaderLanguage.WGSL ? \"Vec4\" : \"\"}(${outputString});\\n`;\r\n state.compilationString += `#endif\\n`;\r\n\r\n state.compilationString += `#ifdef ${this._gammaDefineName}\\n`;\r\n state.compilationString += `${outputString} = toGammaSpace(${outputString});\\n`;\r\n state.compilationString += `#endif\\n`;\r\n\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n state.compilationString += `#if !defined(PREPASS)\\r\\n`;\r\n state.compilationString += `fragmentOutputs.color = ${outputString};\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n }\r\n\r\n if (this.useLogarithmicDepth || state.sharedData.nodeMaterial.useLogarithmicDepth) {\r\n const fragDepth = isWebGPU ? \"input.vFragmentDepth\" : \"vFragmentDepth\";\r\n const uniformP = isWebGPU ? \"uniforms.\" : \"\";\r\n const output = isWebGPU ? \"fragmentOutputs.fragDepth\" : \"gl_FragDepthEXT\";\r\n\r\n state.compilationString += `${output} = log2(${fragDepth}) * ${uniformP}logarithmicDepthConstant * 0.5;\\n`;\r\n }\r\n\r\n const uniformPrefix = isWebGPU ? \"uniforms.\" : \"\";\r\n state.compilationString += `#if defined(PREPASS)\\r\\n`;\r\n state.compilationString += this._writePrePassOutput(state, \"PREPASS_COLOR\", \"PREPASS_COLOR_INDEX\", outputString);\r\n state.compilationString += this._writePrePassOutput(state, \"PREPASS_OBJECT_ID\", \"PREPASS_OBJECT_ID_INDEX\", `encodeObjectId(${uniformPrefix}objectId)`);\r\n if (isWebGPU) {\r\n state.compilationString += this._writePrePassOutput(\r\n state,\r\n \"PREPASS_MESH_BLEND_TAG\",\r\n \"PREPASS_MESH_BLEND_TAG_INDEX\",\r\n `vec4u(u32(${uniformPrefix}meshBlendTag), 0u, 0u, 0u)`\r\n );\r\n } else {\r\n state.compilationString += `#ifdef PREPASS_MESH_BLEND_TAG\\r\\n`;\r\n state.compilationString += `meshBlendTagOutput = uvec4(uint(${uniformPrefix}meshBlendTag), 0u, 0u, 0u);\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n codeString += `${this._codeVariableName}.convertToGammaSpace = ${this.convertToGammaSpace};\\n`;\r\n codeString += `${this._codeVariableName}.convertToLinearSpace = ${this.convertToLinearSpace};\\n`;\r\n codeString += `${this._codeVariableName}.useLogarithmicDepth = ${this.useLogarithmicDepth};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @returns the serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.convertToGammaSpace = this.convertToGammaSpace;\r\n serializationObject.convertToLinearSpace = this.convertToLinearSpace;\r\n serializationObject.useLogarithmicDepth = this.useLogarithmicDepth;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root url\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.convertToGammaSpace = !!serializationObject.convertToGammaSpace;\r\n this.convertToLinearSpace = !!serializationObject.convertToLinearSpace;\r\n this.useLogarithmicDepth = serializationObject.useLogarithmicDepth ?? false;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for fragmentOutputBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterFragmentOutputBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.FragmentOutputBlock\", FragmentOutputBlock);\r\n}\r\n"]}
|
|
@@ -133,6 +133,7 @@ export class PrePassOutputBlock extends NodeMaterialBlock {
|
|
|
133
133
|
const vec4 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector4);
|
|
134
134
|
const isWebGPU = state.shaderLanguage === 1 /* ShaderLanguage.WGSL */;
|
|
135
135
|
state._emitFunctionFromInclude("helperFunctions", comments);
|
|
136
|
+
state._emitUniformFromString("meshBlendTag", NodeMaterialBlockConnectionPointTypes.Int, "PREPASS_MESH_BLEND_TAG");
|
|
136
137
|
state.compilationString += `#if defined(PREPASS)\r\n`;
|
|
137
138
|
state.compilationString += isWebGPU ? `var fragData: array<vec4<f32>, SCENE_MRT_COUNT>;\r\n` : `vec4 fragData[SCENE_MRT_COUNT];\r\n`;
|
|
138
139
|
state.compilationString += `#ifdef PREPASS_DEPTH\r\n`;
|
|
@@ -217,8 +218,22 @@ export class PrePassOutputBlock extends NodeMaterialBlock {
|
|
|
217
218
|
}
|
|
218
219
|
state.compilationString += `#endif\r\n`;
|
|
219
220
|
for (let index = 0; index < 8; index++) {
|
|
220
|
-
state.compilationString += `#if SCENE_MRT_COUNT > ${index} && (!defined(PREPASS_COLOR) || PREPASS_COLOR_INDEX != ${index}) && (!defined(PREPASS_OBJECT_ID) || PREPASS_OBJECT_ID_INDEX != ${index})\r\n`;
|
|
221
|
-
state.compilationString +=
|
|
221
|
+
state.compilationString += `#if SCENE_MRT_COUNT > ${index} && (!defined(PREPASS_COLOR) || PREPASS_COLOR_INDEX != ${index}) && (!defined(PREPASS_OBJECT_ID) || PREPASS_OBJECT_ID_INDEX != ${index}) && (!defined(PREPASS_MESH_BLEND_TAG) || PREPASS_MESH_BLEND_TAG_INDEX != ${index})\r\n`;
|
|
222
|
+
state.compilationString += isWebGPU
|
|
223
|
+
? `${this._getFragData(true, index)} = fragData[${index}];\r\n`
|
|
224
|
+
: `WRITE_GEOMETRY_FRAGMENT_OUTPUT(${index}, fragData[${index}]);\r\n`;
|
|
225
|
+
state.compilationString += `#endif\r\n`;
|
|
226
|
+
}
|
|
227
|
+
if (isWebGPU) {
|
|
228
|
+
for (let index = 0; index < 8; index++) {
|
|
229
|
+
state.compilationString += `#if defined(PREPASS_MESH_BLEND_TAG) && PREPASS_MESH_BLEND_TAG_INDEX == ${index}\r\n`;
|
|
230
|
+
state.compilationString += `fragmentOutputs.fragData${index} = vec4u(u32(uniforms.meshBlendTag), 0u, 0u, 0u);\r\n`;
|
|
231
|
+
state.compilationString += `#endif\r\n`;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
state.compilationString += `#ifdef PREPASS_MESH_BLEND_TAG\r\n`;
|
|
236
|
+
state.compilationString += `meshBlendTagOutput = uvec4(uint(meshBlendTag), 0u, 0u, 0u);\r\n`;
|
|
222
237
|
state.compilationString += `#endif\r\n`;
|
|
223
238
|
}
|
|
224
239
|
state.compilationString += `#endif\r\n`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prePassOutputBlock.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { type NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { type NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\n/**\r\n * Block used to output values on the prepass textures\r\n * @see https://playground.babylonjs.com/#WW65SN#9\r\n */\r\nexport class PrePassOutputBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new PrePassOutputBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment, true);\r\n\r\n this.registerInput(\"viewDepth\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"screenDepth\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"localPosition\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"viewNormal\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"reflectivity\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"velocity\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"velocityLinear\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n\r\n this.inputs[2].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[3].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[4].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[5].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[6].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Vector3 |\r\n NodeMaterialBlockConnectionPointTypes.Vector4 |\r\n NodeMaterialBlockConnectionPointTypes.Color3 |\r\n NodeMaterialBlockConnectionPointTypes.Color4\r\n );\r\n this.inputs[7].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[8].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync(state.shaderLanguage);\r\n }\r\n\r\n private async _initShaderSourceAsync(shaderLanguage: ShaderLanguage) {\r\n this._codeIsReady = false;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../../../../ShadersWGSL/ShadersInclude/helperFunctions\");\r\n } else {\r\n await import(\"../../../../Shaders/ShadersInclude/helperFunctions\");\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"PrePassOutputBlock\";\r\n }\r\n\r\n /**\r\n * Gets the view depth component\r\n */\r\n public get viewDepth(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the screen depth component\r\n */\r\n public get screenDepth(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the world position component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the position in local space component\r\n */\r\n public get localPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the view normal component\r\n */\r\n public get viewNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the world normal component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the reflectivity component\r\n */\r\n public get reflectivity(): NodeMaterialConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n /**\r\n * Gets the velocity component\r\n */\r\n public get velocity(): NodeMaterialConnectionPoint {\r\n return this._inputs[7];\r\n }\r\n\r\n /**\r\n * Gets the linear velocity component\r\n */\r\n public get velocityLinear(): NodeMaterialConnectionPoint {\r\n return this._inputs[8];\r\n }\r\n\r\n private _getFragData(isWebGPU: boolean, index: number) {\r\n return isWebGPU ? `fragmentOutputs.fragData${index}` : `gl_FragData[${index}]`;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const worldPosition = this.worldPosition;\r\n const localPosition = this.localPosition;\r\n const viewNormal = this.viewNormal;\r\n const worldNormal = this.worldNormal;\r\n const viewDepth = this.viewDepth;\r\n const reflectivity = this.reflectivity;\r\n const screenDepth = this.screenDepth;\r\n const velocity = this.velocity;\r\n const velocityLinear = this.velocityLinear;\r\n\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n const comments = `//${this.name}`;\r\n const vec4 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n\r\n state.compilationString += `#if defined(PREPASS)\\r\\n`;\r\n state.compilationString += isWebGPU ? `var fragData: array<vec4<f32>, SCENE_MRT_COUNT>;\\r\\n` : `vec4 fragData[SCENE_MRT_COUNT];\\r\\n`;\r\n\r\n state.compilationString += `#ifdef PREPASS_DEPTH\\r\\n`;\r\n if (viewDepth.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_DEPTH_INDEX] = ${vec4}(${viewDepth.associatedVariableName}, 0.0, 0.0, 1.0);\\r\\n`;\r\n } else {\r\n // We have to write something on the viewDepth output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_DEPTH_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_SCREENSPACE_DEPTH\\r\\n`;\r\n if (screenDepth.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_SCREENSPACE_DEPTH_INDEX] = ${vec4}(${screenDepth.associatedVariableName}, 0.0, 0.0, 1.0);\\r\\n`;\r\n } else {\r\n // We have to write something on the viewDepth output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_SCREENSPACE_DEPTH_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_POSITION\\r\\n`;\r\n if (worldPosition.connectedPoint) {\r\n state.compilationString += `fragData[PREPASS_POSITION_INDEX] = ${vec4}(${worldPosition.associatedVariableName}.rgb, ${\r\n worldPosition.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? worldPosition.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the position output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_POSITION_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_LOCAL_POSITION\\r\\n`;\r\n if (localPosition.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_LOCAL_POSITION_INDEX] = ${vec4}(${localPosition.associatedVariableName}.rgb, ${\r\n localPosition.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? localPosition.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the position output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_LOCAL_POSITION_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_NORMAL\\r\\n`;\r\n if (viewNormal.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_NORMAL_INDEX] = ${vec4}(${viewNormal.associatedVariableName}.rgb, ${\r\n viewNormal.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? viewNormal.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the normal output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_NORMAL_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_WORLD_NORMAL\\r\\n`;\r\n if (worldNormal.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_WORLD_NORMAL_INDEX] = ${vec4}(${worldNormal.associatedVariableName}.rgb, ${\r\n worldNormal.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? worldNormal.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the normal output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_WORLD_NORMAL_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_REFLECTIVITY\\r\\n`;\r\n if (reflectivity.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_REFLECTIVITY_INDEX] = ${vec4}(${reflectivity.associatedVariableName}.rgb, ${\r\n reflectivity.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? reflectivity.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the reflectivity output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_REFLECTIVITY_INDEX] = ${vec4}(0.0, 0.0, 0.0, 1.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_VELOCITY\\r\\n`;\r\n if (velocity.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_VELOCITY_INDEX] = ${vec4}(${velocity.associatedVariableName}.rgb, ${\r\n velocity.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? velocity.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the reflectivity output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_VELOCITY_INDEX] = ${vec4}(0.0, 0.0, 0.0, 1.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_VELOCITY_LINEAR\\r\\n`;\r\n if (velocityLinear.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_VELOCITY_LINEAR_INDEX] = ${vec4}(${velocityLinear.associatedVariableName}.rgb, ${\r\n velocityLinear.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? velocityLinear.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the reflectivity output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_VELOCITY_LINEAR_INDEX] = ${vec4}(0.0, 0.0, 0.0, 1.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n for (let index = 0; index < 8; index++) {\r\n state.compilationString += `#if SCENE_MRT_COUNT > ${index} && (!defined(PREPASS_COLOR) || PREPASS_COLOR_INDEX != ${index}) && (!defined(PREPASS_OBJECT_ID) || PREPASS_OBJECT_ID_INDEX != ${index})\\r\\n`;\r\n state.compilationString += `${this._getFragData(isWebGPU, index)} = fragData[${index}];\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n }\r\n\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for prePassOutputBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterPrePassOutputBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.PrePassOutputBlock\", PrePassOutputBlock);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"prePassOutputBlock.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { type NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { type NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\n/**\r\n * Block used to output values on the prepass textures\r\n * @see https://playground.babylonjs.com/#WW65SN#9\r\n */\r\nexport class PrePassOutputBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new PrePassOutputBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment, true);\r\n\r\n this.registerInput(\"viewDepth\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"screenDepth\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"localPosition\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"viewNormal\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"reflectivity\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"velocity\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"velocityLinear\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n\r\n this.inputs[2].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[3].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[4].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[5].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[6].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Vector3 |\r\n NodeMaterialBlockConnectionPointTypes.Vector4 |\r\n NodeMaterialBlockConnectionPointTypes.Color3 |\r\n NodeMaterialBlockConnectionPointTypes.Color4\r\n );\r\n this.inputs[7].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.inputs[8].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync(state.shaderLanguage);\r\n }\r\n\r\n private async _initShaderSourceAsync(shaderLanguage: ShaderLanguage) {\r\n this._codeIsReady = false;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n await import(\"../../../../ShadersWGSL/ShadersInclude/helperFunctions\");\r\n } else {\r\n await import(\"../../../../Shaders/ShadersInclude/helperFunctions\");\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"PrePassOutputBlock\";\r\n }\r\n\r\n /**\r\n * Gets the view depth component\r\n */\r\n public get viewDepth(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the screen depth component\r\n */\r\n public get screenDepth(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the world position component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the position in local space component\r\n */\r\n public get localPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the view normal component\r\n */\r\n public get viewNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the world normal component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the reflectivity component\r\n */\r\n public get reflectivity(): NodeMaterialConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n /**\r\n * Gets the velocity component\r\n */\r\n public get velocity(): NodeMaterialConnectionPoint {\r\n return this._inputs[7];\r\n }\r\n\r\n /**\r\n * Gets the linear velocity component\r\n */\r\n public get velocityLinear(): NodeMaterialConnectionPoint {\r\n return this._inputs[8];\r\n }\r\n\r\n private _getFragData(isWebGPU: boolean, index: number) {\r\n return isWebGPU ? `fragmentOutputs.fragData${index}` : `gl_FragData[${index}]`;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const worldPosition = this.worldPosition;\r\n const localPosition = this.localPosition;\r\n const viewNormal = this.viewNormal;\r\n const worldNormal = this.worldNormal;\r\n const viewDepth = this.viewDepth;\r\n const reflectivity = this.reflectivity;\r\n const screenDepth = this.screenDepth;\r\n const velocity = this.velocity;\r\n const velocityLinear = this.velocityLinear;\r\n\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n const comments = `//${this.name}`;\r\n const vec4 = state._getShaderType(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n state._emitUniformFromString(\"meshBlendTag\", NodeMaterialBlockConnectionPointTypes.Int, \"PREPASS_MESH_BLEND_TAG\");\r\n\r\n state.compilationString += `#if defined(PREPASS)\\r\\n`;\r\n state.compilationString += isWebGPU ? `var fragData: array<vec4<f32>, SCENE_MRT_COUNT>;\\r\\n` : `vec4 fragData[SCENE_MRT_COUNT];\\r\\n`;\r\n\r\n state.compilationString += `#ifdef PREPASS_DEPTH\\r\\n`;\r\n if (viewDepth.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_DEPTH_INDEX] = ${vec4}(${viewDepth.associatedVariableName}, 0.0, 0.0, 1.0);\\r\\n`;\r\n } else {\r\n // We have to write something on the viewDepth output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_DEPTH_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_SCREENSPACE_DEPTH\\r\\n`;\r\n if (screenDepth.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_SCREENSPACE_DEPTH_INDEX] = ${vec4}(${screenDepth.associatedVariableName}, 0.0, 0.0, 1.0);\\r\\n`;\r\n } else {\r\n // We have to write something on the viewDepth output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_SCREENSPACE_DEPTH_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_POSITION\\r\\n`;\r\n if (worldPosition.connectedPoint) {\r\n state.compilationString += `fragData[PREPASS_POSITION_INDEX] = ${vec4}(${worldPosition.associatedVariableName}.rgb, ${\r\n worldPosition.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? worldPosition.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the position output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_POSITION_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_LOCAL_POSITION\\r\\n`;\r\n if (localPosition.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_LOCAL_POSITION_INDEX] = ${vec4}(${localPosition.associatedVariableName}.rgb, ${\r\n localPosition.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? localPosition.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the position output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_LOCAL_POSITION_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_NORMAL\\r\\n`;\r\n if (viewNormal.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_NORMAL_INDEX] = ${vec4}(${viewNormal.associatedVariableName}.rgb, ${\r\n viewNormal.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? viewNormal.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the normal output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_NORMAL_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_WORLD_NORMAL\\r\\n`;\r\n if (worldNormal.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_WORLD_NORMAL_INDEX] = ${vec4}(${worldNormal.associatedVariableName}.rgb, ${\r\n worldNormal.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? worldNormal.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the normal output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_WORLD_NORMAL_INDEX] = ${vec4}(0.0, 0.0, 0.0, 0.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_REFLECTIVITY\\r\\n`;\r\n if (reflectivity.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_REFLECTIVITY_INDEX] = ${vec4}(${reflectivity.associatedVariableName}.rgb, ${\r\n reflectivity.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? reflectivity.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the reflectivity output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_REFLECTIVITY_INDEX] = ${vec4}(0.0, 0.0, 0.0, 1.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_VELOCITY\\r\\n`;\r\n if (velocity.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_VELOCITY_INDEX] = ${vec4}(${velocity.associatedVariableName}.rgb, ${\r\n velocity.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? velocity.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the reflectivity output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_VELOCITY_INDEX] = ${vec4}(0.0, 0.0, 0.0, 1.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef PREPASS_VELOCITY_LINEAR\\r\\n`;\r\n if (velocityLinear.connectedPoint) {\r\n state.compilationString += ` fragData[PREPASS_VELOCITY_LINEAR_INDEX] = ${vec4}(${velocityLinear.associatedVariableName}.rgb, ${\r\n velocityLinear.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4 ? velocityLinear.associatedVariableName + \".a\" : \"1.0\"\r\n });\\r\\n`;\r\n } else {\r\n // We have to write something on the reflectivity output or it will raise a gl error\r\n state.compilationString += ` fragData[PREPASS_VELOCITY_LINEAR_INDEX] = ${vec4}(0.0, 0.0, 0.0, 1.0);\\r\\n`;\r\n }\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n for (let index = 0; index < 8; index++) {\r\n state.compilationString += `#if SCENE_MRT_COUNT > ${index} && (!defined(PREPASS_COLOR) || PREPASS_COLOR_INDEX != ${index}) && (!defined(PREPASS_OBJECT_ID) || PREPASS_OBJECT_ID_INDEX != ${index}) && (!defined(PREPASS_MESH_BLEND_TAG) || PREPASS_MESH_BLEND_TAG_INDEX != ${index})\\r\\n`;\r\n state.compilationString += isWebGPU\r\n ? `${this._getFragData(true, index)} = fragData[${index}];\\r\\n`\r\n : `WRITE_GEOMETRY_FRAGMENT_OUTPUT(${index}, fragData[${index}]);\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n }\r\n\r\n if (isWebGPU) {\r\n for (let index = 0; index < 8; index++) {\r\n state.compilationString += `#if defined(PREPASS_MESH_BLEND_TAG) && PREPASS_MESH_BLEND_TAG_INDEX == ${index}\\r\\n`;\r\n state.compilationString += `fragmentOutputs.fragData${index} = vec4u(u32(uniforms.meshBlendTag), 0u, 0u, 0u);\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n }\r\n } else {\r\n state.compilationString += `#ifdef PREPASS_MESH_BLEND_TAG\\r\\n`;\r\n state.compilationString += `meshBlendTagOutput = uvec4(uint(meshBlendTag), 0u, 0u, 0u);\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n }\r\n\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for prePassOutputBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterPrePassOutputBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.PrePassOutputBlock\", PrePassOutputBlock);\r\n}\r\n"]}
|
|
@@ -3,7 +3,7 @@ import { NodeMaterialBlock } from "../../nodeMaterialBlock.js";
|
|
|
3
3
|
import { NodeMaterialBlockConnectionPointTypes } from "../../Enums/nodeMaterialBlockConnectionPointTypes.js";
|
|
4
4
|
import { NodeMaterialBlockTargets } from "../../Enums/nodeMaterialBlockTargets.js";
|
|
5
5
|
import { VertexBuffer } from "../../../../Meshes/buffer.js";
|
|
6
|
-
import {
|
|
6
|
+
import { _IsGaussianSplattingMesh } from "../../../../Meshes/GaussianSplatting/gaussianSplatting.functions.js";
|
|
7
7
|
import { RegisterClass } from "../../../../Misc/typeStore.js";
|
|
8
8
|
/**
|
|
9
9
|
* Block used for the Gaussian Splatting
|
|
@@ -115,7 +115,7 @@ export class GaussianSplattingBlock extends NodeMaterialBlock {
|
|
|
115
115
|
if (!mesh) {
|
|
116
116
|
return;
|
|
117
117
|
}
|
|
118
|
-
if (
|
|
118
|
+
if (_IsGaussianSplattingMesh(mesh)) {
|
|
119
119
|
defines.setValue("SH_DEGREE", mesh.shDegree, true);
|
|
120
120
|
}
|
|
121
121
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gaussianSplattingBlock.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { type NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { type NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { VertexBuffer } from \"core/Meshes/buffer\";\r\nimport { type GaussianSplattingMesh, IsGaussianSplattingClassName } from \"core/Meshes/GaussianSplatting/gaussianSplattingMesh.pure\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { type AbstractMesh } from \"core/Meshes/abstractMesh.pure\";\r\nimport { type NodeMaterial, type NodeMaterialDefines } from \"../../nodeMaterial.pure\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\n/**\r\n * Block used for the Gaussian Splatting\r\n */\r\nexport class GaussianSplattingBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new GaussianSplattingBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Vertex);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"splatPosition\", NodeMaterialBlockConnectionPointTypes.Vector3, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"splatScale\", NodeMaterialBlockConnectionPointTypes.Vector2, true, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"world\", NodeMaterialBlockConnectionPointTypes.Matrix, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"view\", NodeMaterialBlockConnectionPointTypes.Matrix, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"projection\", NodeMaterialBlockConnectionPointTypes.Matrix, false, NodeMaterialBlockTargets.Vertex);\r\n\r\n this.registerOutput(\"splatVertex\", NodeMaterialBlockConnectionPointTypes.Vector4, NodeMaterialBlockTargets.Vertex);\r\n this.registerOutput(\"SH\", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Vertex);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"GaussianSplattingBlock\";\r\n }\r\n\r\n /**\r\n * Gets the position input component\r\n */\r\n public get splatPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the scale input component\r\n */\r\n public get splatScale(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the View matrix input component\r\n */\r\n public get world(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the View matrix input component\r\n */\r\n public get view(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the projection matrix input component\r\n */\r\n public get projection(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the splatVertex output component\r\n */\r\n public get splatVertex(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the SH output contribution\r\n */\r\n public get SH(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"focal\");\r\n state._excludeVariableName(\"invViewport\");\r\n state._excludeVariableName(\"kernelSize\");\r\n state._excludeVariableName(\"minPixelSize\");\r\n state._excludeVariableName(\"eyePosition\");\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync(state.shaderLanguage);\r\n }\r\n\r\n private async _initShaderSourceAsync(shaderLanguage: ShaderLanguage) {\r\n this._codeIsReady = false;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([\r\n import(\"../../../../ShadersWGSL/ShadersInclude/gaussianSplattingVertexDeclaration\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/gaussianSplatting\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/helperFunctions\"),\r\n ]);\r\n } else {\r\n await Promise.all([\r\n import(\"../../../../Shaders/ShadersInclude/gaussianSplattingVertexDeclaration\"),\r\n import(\"../../../../Shaders/ShadersInclude/gaussianSplatting\"),\r\n import(\"../../../../Shaders/ShadersInclude/helperFunctions\"),\r\n ]);\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n /**\r\n * Update defines for shader compilation\r\n * @param defines defines the material defines to update\r\n * @param nodeMaterial defines the node material requesting the update\r\n * @param mesh defines the mesh to be rendered\r\n */\r\n public override prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial, mesh?: AbstractMesh) {\r\n if (!mesh) {\r\n return;\r\n }\r\n\r\n if (IsGaussianSplattingClassName(mesh.getClassName())) {\r\n defines.setValue(\"SH_DEGREE\", (<GaussianSplattingMesh>mesh).shDegree, true);\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n return;\r\n }\r\n\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n const comments = `//${this.name}`;\r\n state._emitFunctionFromInclude(\"gaussianSplattingVertexDeclaration\", comments);\r\n state._emitFunctionFromInclude(\"gaussianSplatting\", comments);\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n state._emitUniformFromString(\"focal\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n state._emitUniformFromString(\"invViewport\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n state._emitUniformFromString(\"kernelSize\", NodeMaterialBlockConnectionPointTypes.Float);\r\n state._emitUniformFromString(\"minPixelSize\", NodeMaterialBlockConnectionPointTypes.Float);\r\n state._emitUniformFromString(\"eyePosition\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n state.attributes.push(VertexBuffer.PositionKind);\r\n state.attributes.push(\"splatIndex0\");\r\n state.attributes.push(\"splatIndex1\");\r\n state.attributes.push(\"splatIndex2\");\r\n state.attributes.push(\"splatIndex3\");\r\n state.sharedData.nodeMaterial.backFaceCulling = false;\r\n\r\n const splatPosition = this.splatPosition;\r\n const splatScale = this.splatScale;\r\n const world = this.world;\r\n const view = this.view;\r\n const projection = this.projection;\r\n const output = this.splatVertex;\r\n const sh = this.SH;\r\n\r\n const addF = state.fSuffix;\r\n let splatScaleParameter = `vec2${addF}(1.,1.)`;\r\n if (splatScale.isConnected) {\r\n splatScaleParameter = splatScale.associatedVariableName;\r\n }\r\n\r\n let input = \"position\";\r\n let uniforms = \"\";\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n input = \"input.position\";\r\n uniforms = \", uniforms.focal, uniforms.invViewport, uniforms.kernelSize, uniforms.minPixelSize\";\r\n }\r\n if (this.SH.isConnected) {\r\n state.compilationString += `#if SH_DEGREE > 0\\n`;\r\n\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n state.compilationString += `let worldRot: mat3x3f = mat3x3f(${world.associatedVariableName}[0].xyz, ${world.associatedVariableName}[1].xyz, ${world.associatedVariableName}[2].xyz);`;\r\n state.compilationString += `let normWorldRot: mat3x3f = inverseMat3(worldRot);`;\r\n state.compilationString += `var eyeToSplatLocalSpace: vec3f = normalize(normWorldRot * (${splatPosition.associatedVariableName}.xyz - uniforms.eyePosition));\\n`;\r\n } else {\r\n state.compilationString += `mat3 worldRot = mat3(${world.associatedVariableName});`;\r\n state.compilationString += `mat3 normWorldRot = inverseMat3(worldRot);`;\r\n state.compilationString += `vec3 eyeToSplatLocalSpace = normalize(normWorldRot * (${splatPosition.associatedVariableName}.xyz - eyePosition));\\n`;\r\n }\r\n\r\n state.compilationString += `${state._declareOutput(sh)} = computeSH(splat, eyeToSplatLocalSpace);\\n`;\r\n state.compilationString += `#else\\n`;\r\n state.compilationString += `${state._declareOutput(sh)} = vec3${addF}(0.,0.,0.);\\n`;\r\n state.compilationString += `#endif;\\n`;\r\n } else {\r\n state.compilationString += `${state._declareOutput(sh)} = vec3${addF}(0.,0.,0.);`;\r\n }\r\n\r\n state.compilationString += `${state._declareOutput(output)} = gaussianSplatting(${input}.xy, ${splatPosition.associatedVariableName}, ${splatScaleParameter}, covA, covB, ${world.associatedVariableName}, ${view.associatedVariableName}, ${projection.associatedVariableName}${uniforms});\\n`;\r\n return this;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for gaussianSplattingBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterGaussianSplattingBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.GaussianSplattingBlock\", GaussianSplattingBlock);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"gaussianSplattingBlock.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { type NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { type NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { VertexBuffer } from \"core/Meshes/buffer\";\r\nimport { type GaussianSplattingMesh } from \"core/Meshes/GaussianSplatting/gaussianSplattingMesh.pure\";\r\nimport { _IsGaussianSplattingMesh } from \"core/Meshes/GaussianSplatting/gaussianSplatting.functions\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { type AbstractMesh } from \"core/Meshes/abstractMesh.pure\";\r\nimport { type NodeMaterial, type NodeMaterialDefines } from \"../../nodeMaterial.pure\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\n/**\r\n * Block used for the Gaussian Splatting\r\n */\r\nexport class GaussianSplattingBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new GaussianSplattingBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Vertex);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"splatPosition\", NodeMaterialBlockConnectionPointTypes.Vector3, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"splatScale\", NodeMaterialBlockConnectionPointTypes.Vector2, true, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"world\", NodeMaterialBlockConnectionPointTypes.Matrix, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"view\", NodeMaterialBlockConnectionPointTypes.Matrix, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"projection\", NodeMaterialBlockConnectionPointTypes.Matrix, false, NodeMaterialBlockTargets.Vertex);\r\n\r\n this.registerOutput(\"splatVertex\", NodeMaterialBlockConnectionPointTypes.Vector4, NodeMaterialBlockTargets.Vertex);\r\n this.registerOutput(\"SH\", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Vertex);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"GaussianSplattingBlock\";\r\n }\r\n\r\n /**\r\n * Gets the position input component\r\n */\r\n public get splatPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the scale input component\r\n */\r\n public get splatScale(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the View matrix input component\r\n */\r\n public get world(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the View matrix input component\r\n */\r\n public get view(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the projection matrix input component\r\n */\r\n public get projection(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the splatVertex output component\r\n */\r\n public get splatVertex(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the SH output contribution\r\n */\r\n public get SH(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"focal\");\r\n state._excludeVariableName(\"invViewport\");\r\n state._excludeVariableName(\"kernelSize\");\r\n state._excludeVariableName(\"minPixelSize\");\r\n state._excludeVariableName(\"eyePosition\");\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync(state.shaderLanguage);\r\n }\r\n\r\n private async _initShaderSourceAsync(shaderLanguage: ShaderLanguage) {\r\n this._codeIsReady = false;\r\n\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([\r\n import(\"../../../../ShadersWGSL/ShadersInclude/gaussianSplattingVertexDeclaration\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/gaussianSplatting\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/helperFunctions\"),\r\n ]);\r\n } else {\r\n await Promise.all([\r\n import(\"../../../../Shaders/ShadersInclude/gaussianSplattingVertexDeclaration\"),\r\n import(\"../../../../Shaders/ShadersInclude/gaussianSplatting\"),\r\n import(\"../../../../Shaders/ShadersInclude/helperFunctions\"),\r\n ]);\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n /**\r\n * Update defines for shader compilation\r\n * @param defines defines the material defines to update\r\n * @param nodeMaterial defines the node material requesting the update\r\n * @param mesh defines the mesh to be rendered\r\n */\r\n public override prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial, mesh?: AbstractMesh) {\r\n if (!mesh) {\r\n return;\r\n }\r\n\r\n if (_IsGaussianSplattingMesh(mesh)) {\r\n defines.setValue(\"SH_DEGREE\", (<GaussianSplattingMesh>mesh).shDegree, true);\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n return;\r\n }\r\n\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n const comments = `//${this.name}`;\r\n state._emitFunctionFromInclude(\"gaussianSplattingVertexDeclaration\", comments);\r\n state._emitFunctionFromInclude(\"gaussianSplatting\", comments);\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n state._emitUniformFromString(\"focal\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n state._emitUniformFromString(\"invViewport\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n state._emitUniformFromString(\"kernelSize\", NodeMaterialBlockConnectionPointTypes.Float);\r\n state._emitUniformFromString(\"minPixelSize\", NodeMaterialBlockConnectionPointTypes.Float);\r\n state._emitUniformFromString(\"eyePosition\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n state.attributes.push(VertexBuffer.PositionKind);\r\n state.attributes.push(\"splatIndex0\");\r\n state.attributes.push(\"splatIndex1\");\r\n state.attributes.push(\"splatIndex2\");\r\n state.attributes.push(\"splatIndex3\");\r\n state.sharedData.nodeMaterial.backFaceCulling = false;\r\n\r\n const splatPosition = this.splatPosition;\r\n const splatScale = this.splatScale;\r\n const world = this.world;\r\n const view = this.view;\r\n const projection = this.projection;\r\n const output = this.splatVertex;\r\n const sh = this.SH;\r\n\r\n const addF = state.fSuffix;\r\n let splatScaleParameter = `vec2${addF}(1.,1.)`;\r\n if (splatScale.isConnected) {\r\n splatScaleParameter = splatScale.associatedVariableName;\r\n }\r\n\r\n let input = \"position\";\r\n let uniforms = \"\";\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n input = \"input.position\";\r\n uniforms = \", uniforms.focal, uniforms.invViewport, uniforms.kernelSize, uniforms.minPixelSize\";\r\n }\r\n if (this.SH.isConnected) {\r\n state.compilationString += `#if SH_DEGREE > 0\\n`;\r\n\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n state.compilationString += `let worldRot: mat3x3f = mat3x3f(${world.associatedVariableName}[0].xyz, ${world.associatedVariableName}[1].xyz, ${world.associatedVariableName}[2].xyz);`;\r\n state.compilationString += `let normWorldRot: mat3x3f = inverseMat3(worldRot);`;\r\n state.compilationString += `var eyeToSplatLocalSpace: vec3f = normalize(normWorldRot * (${splatPosition.associatedVariableName}.xyz - uniforms.eyePosition));\\n`;\r\n } else {\r\n state.compilationString += `mat3 worldRot = mat3(${world.associatedVariableName});`;\r\n state.compilationString += `mat3 normWorldRot = inverseMat3(worldRot);`;\r\n state.compilationString += `vec3 eyeToSplatLocalSpace = normalize(normWorldRot * (${splatPosition.associatedVariableName}.xyz - eyePosition));\\n`;\r\n }\r\n\r\n state.compilationString += `${state._declareOutput(sh)} = computeSH(splat, eyeToSplatLocalSpace);\\n`;\r\n state.compilationString += `#else\\n`;\r\n state.compilationString += `${state._declareOutput(sh)} = vec3${addF}(0.,0.,0.);\\n`;\r\n state.compilationString += `#endif;\\n`;\r\n } else {\r\n state.compilationString += `${state._declareOutput(sh)} = vec3${addF}(0.,0.,0.);`;\r\n }\r\n\r\n state.compilationString += `${state._declareOutput(output)} = gaussianSplatting(${input}.xy, ${splatPosition.associatedVariableName}, ${splatScaleParameter}, covA, covB, ${world.associatedVariableName}, ${view.associatedVariableName}, ${projection.associatedVariableName}${uniforms});\\n`;\r\n return this;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for gaussianSplattingBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterGaussianSplattingBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.GaussianSplattingBlock\", GaussianSplattingBlock);\r\n}\r\n"]}
|
|
@@ -138,6 +138,10 @@ export declare class NodeMaterialDefines extends NodeMaterialDefines_base {
|
|
|
138
138
|
PREPASS_OBJECT_ID_INDEX: number;
|
|
139
139
|
/** Whether object IDs use the RED texture format */
|
|
140
140
|
PREPASS_OBJECT_ID_R8: boolean;
|
|
141
|
+
/** Packed mesh-blending tag */
|
|
142
|
+
PREPASS_MESH_BLEND_TAG: boolean;
|
|
143
|
+
/** Packed mesh-blending tag index */
|
|
144
|
+
PREPASS_MESH_BLEND_TAG_INDEX: number;
|
|
141
145
|
/** Scene MRT count */
|
|
142
146
|
SCENE_MRT_COUNT: number;
|
|
143
147
|
/** BONES */
|
|
@@ -113,6 +113,10 @@ export class NodeMaterialDefines extends ImageProcessingDefinesMixin(NodeMateria
|
|
|
113
113
|
this.PREPASS_OBJECT_ID_INDEX = -1;
|
|
114
114
|
/** Whether object IDs use the RED texture format */
|
|
115
115
|
this.PREPASS_OBJECT_ID_R8 = false;
|
|
116
|
+
/** Packed mesh-blending tag */
|
|
117
|
+
this.PREPASS_MESH_BLEND_TAG = false;
|
|
118
|
+
/** Packed mesh-blending tag index */
|
|
119
|
+
this.PREPASS_MESH_BLEND_TAG_INDEX = -1;
|
|
116
120
|
/** Scene MRT count */
|
|
117
121
|
this.SCENE_MRT_COUNT = 0;
|
|
118
122
|
/** BONES */
|