@babylonjs/core 8.11.0 → 8.12.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/Cameras/arcRotateCamera.js +8 -0
- package/Cameras/arcRotateCamera.js.map +1 -1
- package/Cameras/targetCamera.js +2 -0
- package/Cameras/targetCamera.js.map +1 -1
- package/Collisions/gpuPicker.d.ts +4 -0
- package/Collisions/gpuPicker.js +6 -0
- package/Collisions/gpuPicker.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.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/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.d.ts +1 -0
- package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js +2 -0
- package/FrameGraph/Node/Blocks/Rendering/baseShadowGeneratorBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.d.ts +6 -1
- package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.js +29 -0
- package/FrameGraph/Node/Blocks/Rendering/csmShadowGeneratorBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +6 -0
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +36 -9
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/shadowGeneratorBlock.js +1 -0
- package/FrameGraph/Node/Blocks/Rendering/shadowGeneratorBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/inputBlock.js +1 -0
- package/FrameGraph/Node/Blocks/inputBlock.js.map +1 -1
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +2 -0
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +2 -0
- package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +23 -0
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +126 -21
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +5 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +4 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.d.ts +2 -4
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +4 -17
- package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
- package/FrameGraph/frameGraph.js +1 -1
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphContext.d.ts +30 -0
- package/FrameGraph/frameGraphContext.js +47 -0
- package/FrameGraph/frameGraphContext.js.map +1 -1
- package/FrameGraph/frameGraphRenderContext.d.ts +1 -4
- package/FrameGraph/frameGraphRenderContext.js +2 -5
- package/FrameGraph/frameGraphRenderContext.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.d.ts +0 -1
- package/Lights/Shadows/cascadedShadowGenerator.js +0 -12
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Materials/Node/Blocks/Dual/clipPlanesBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +4 -1
- package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/currentScreenBlock.d.ts +2 -3
- package/Materials/Node/Blocks/Dual/currentScreenBlock.js +1 -1
- package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/fogBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Dual/fogBlock.js +4 -1
- package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js +2 -2
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.d.ts +1 -2
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js +3 -4
- package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/textureBlock.d.ts +2 -3
- package/Materials/Node/Blocks/Dual/textureBlock.js +2 -2
- package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/TBNBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Fragment/TBNBlock.js +4 -1
- package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragCoordBlock.js +2 -2
- package/Materials/Node/Blocks/Fragment/fragCoordBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +1 -2
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +1 -1
- package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/frontFacingBlock.js +2 -2
- package/Materials/Node/Blocks/Fragment/frontFacingBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +1 -2
- package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +1 -1
- package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/perturbNormalBlock.d.ts +1 -2
- package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +1 -1
- package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/screenSizeBlock.js +2 -2
- package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.d.ts +3 -3
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.js +6 -3
- package/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/anisotropyBlock.d.ts +1 -2
- package/Materials/Node/Blocks/PBR/anisotropyBlock.js +2 -4
- package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/clearCoatBlock.d.ts +1 -2
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js +1 -2
- package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/iridescenceBlock.d.ts +2 -3
- package/Materials/Node/Blocks/PBR/iridescenceBlock.js +1 -2
- package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.d.ts +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +5 -2
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.d.ts +1 -2
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +2 -2
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/refractionBlock.d.ts +1 -2
- package/Materials/Node/Blocks/PBR/refractionBlock.js +1 -2
- package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/sheenBlock.d.ts +2 -3
- package/Materials/Node/Blocks/PBR/sheenBlock.js +1 -2
- package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.d.ts +2 -3
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +1 -2
- package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
- package/Materials/Node/Blocks/Particle/particleTextureBlock.d.ts +1 -2
- package/Materials/Node/Blocks/Particle/particleTextureBlock.js +1 -1
- package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/bonesBlock.d.ts +2 -2
- package/Materials/Node/Blocks/Vertex/bonesBlock.js +3 -3
- package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/instancesBlock.d.ts +1 -1
- package/Materials/Node/Blocks/Vertex/instancesBlock.js +1 -1
- package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/lightInformationBlock.d.ts +1 -2
- package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +1 -1
- package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.d.ts +2 -2
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +8 -2
- package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
- package/Materials/Node/Blocks/transformBlock.d.ts +3 -3
- package/Materials/Node/Blocks/transformBlock.js +4 -5
- package/Materials/Node/Blocks/transformBlock.js.map +1 -1
- package/Materials/Node/Blocks/triPlanarBlock.d.ts +1 -3
- package/Materials/Node/Blocks/triPlanarBlock.js +1 -1
- package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +1 -1
- package/Materials/Node/nodeMaterial.js +28 -42
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.d.ts +8 -12
- package/Materials/Node/nodeMaterialBlock.js +10 -12
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.js +3 -1
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildStateSharedData.d.ts +7 -3
- package/Materials/Node/nodeMaterialBuildStateSharedData.js +17 -6
- package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +2 -0
- package/Materials/PBR/pbrBaseMaterial.js +11 -0
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/Loaders/exrTextureLoader.d.ts +10 -0
- package/Materials/Textures/Loaders/exrTextureLoader.js +28 -1
- package/Materials/Textures/Loaders/exrTextureLoader.js.map +1 -1
- package/Materials/materialHelper.functions.js +1 -1
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/materialHelper.geometryrendering.js +7 -0
- package/Materials/materialHelper.geometryrendering.js.map +1 -1
- package/Materials/standardMaterial.d.ts +2 -0
- package/Materials/standardMaterial.js +11 -0
- package/Materials/standardMaterial.js.map +1 -1
- package/Meshes/Node/Blocks/Textures/geometryTextureBlock.d.ts +7 -0
- package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js +11 -5
- package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js.map +1 -1
- package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.d.ts +6 -0
- package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.js +42 -4
- package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.js.map +1 -1
- package/Meshes/Node/Blocks/geometryOptimizeBlock.js +8 -0
- package/Meshes/Node/Blocks/geometryOptimizeBlock.js.map +1 -1
- package/Misc/environmentTextureTools.js +1 -1
- package/Misc/environmentTextureTools.js.map +1 -1
- package/Misc/minMaxReducer.d.ts +8 -6
- package/Misc/minMaxReducer.js +57 -90
- package/Misc/minMaxReducer.js.map +1 -1
- package/Misc/thinMinMaxReducer.d.ts +47 -0
- package/Misc/thinMinMaxReducer.js +148 -0
- package/Misc/thinMinMaxReducer.js.map +1 -0
- package/Particles/EmitterTypes/customParticleEmitter.d.ts +5 -0
- package/Particles/EmitterTypes/customParticleEmitter.js +9 -1
- package/Particles/EmitterTypes/customParticleEmitter.js.map +1 -1
- package/Particles/IParticleSystem.d.ts +4 -0
- package/Particles/IParticleSystem.js.map +1 -1
- package/Particles/Node/Blocks/Conditions/particleConditionBlock.d.ts +75 -0
- package/Particles/Node/Blocks/Conditions/particleConditionBlock.js +179 -0
- package/Particles/Node/Blocks/Conditions/particleConditionBlock.js.map +1 -0
- package/Particles/Node/Blocks/Emitters/boxShapeBlock.d.ts +47 -0
- package/Particles/Node/Blocks/Emitters/boxShapeBlock.js +107 -0
- package/Particles/Node/Blocks/Emitters/boxShapeBlock.js.map +1 -0
- package/Particles/Node/Blocks/Emitters/createParticleBlock.d.ts +46 -0
- package/Particles/Node/Blocks/Emitters/createParticleBlock.js +97 -0
- package/Particles/Node/Blocks/Emitters/createParticleBlock.js.map +1 -0
- package/Particles/Node/Blocks/Emitters/customShapeBlock.d.ts +39 -0
- package/Particles/Node/Blocks/Emitters/customShapeBlock.js +84 -0
- package/Particles/Node/Blocks/Emitters/customShapeBlock.js.map +1 -0
- package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.d.ts +48 -0
- package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.js +120 -0
- package/Particles/Node/Blocks/Emitters/cylinderShapeBlock.js.map +1 -0
- package/Particles/Node/Blocks/Emitters/index.d.ts +7 -0
- package/Particles/Node/Blocks/Emitters/index.js +8 -0
- package/Particles/Node/Blocks/Emitters/index.js.map +1 -0
- package/Particles/Node/Blocks/Emitters/pointShapeBlock.d.ts +39 -0
- package/Particles/Node/Blocks/Emitters/pointShapeBlock.js +86 -0
- package/Particles/Node/Blocks/Emitters/pointShapeBlock.js.map +1 -0
- package/Particles/Node/Blocks/Emitters/setupSpriteSheetBlock.d.ts +53 -0
- package/Particles/Node/Blocks/Emitters/setupSpriteSheetBlock.js +111 -0
- package/Particles/Node/Blocks/Emitters/setupSpriteSheetBlock.js.map +1 -0
- package/Particles/Node/Blocks/Emitters/sphereShapeBlock.d.ts +43 -0
- package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js +108 -0
- package/Particles/Node/Blocks/Emitters/sphereShapeBlock.js.map +1 -0
- package/Particles/Node/Blocks/Teleport/particleTeleportInBlock.d.ts +48 -0
- package/Particles/Node/Blocks/Teleport/particleTeleportInBlock.js +100 -0
- package/Particles/Node/Blocks/Teleport/particleTeleportInBlock.js.map +1 -0
- package/Particles/Node/Blocks/Teleport/particleTeleportOutBlock.d.ts +47 -0
- package/Particles/Node/Blocks/Teleport/particleTeleportOutBlock.js +82 -0
- package/Particles/Node/Blocks/Teleport/particleTeleportOutBlock.js.map +1 -0
- package/Particles/Node/Blocks/Triggers/particleTriggerBlock.d.ts +48 -0
- package/Particles/Node/Blocks/Triggers/particleTriggerBlock.js +133 -0
- package/Particles/Node/Blocks/Triggers/particleTriggerBlock.js.map +1 -0
- package/Particles/Node/Blocks/Triggers/triggerTools.d.ts +9 -0
- package/Particles/Node/Blocks/Triggers/triggerTools.js +16 -0
- package/Particles/Node/Blocks/Triggers/triggerTools.js.map +1 -0
- package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.d.ts +31 -0
- package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.js +64 -0
- package/Particles/Node/Blocks/Update/basicPositionUpdateBlock.js.map +1 -0
- package/Particles/Node/Blocks/Update/basicSpriteUpdateBlock.d.ts +31 -0
- package/Particles/Node/Blocks/Update/basicSpriteUpdateBlock.js +63 -0
- package/Particles/Node/Blocks/Update/basicSpriteUpdateBlock.js.map +1 -0
- package/Particles/Node/Blocks/Update/updateAngleBlock.d.ts +35 -0
- package/Particles/Node/Blocks/Update/updateAngleBlock.js +73 -0
- package/Particles/Node/Blocks/Update/updateAngleBlock.js.map +1 -0
- package/Particles/Node/Blocks/Update/updateColorBlock.d.ts +35 -0
- package/Particles/Node/Blocks/Update/updateColorBlock.js +73 -0
- package/Particles/Node/Blocks/Update/updateColorBlock.js.map +1 -0
- package/Particles/Node/Blocks/Update/updateDirectionBlock.d.ts +35 -0
- package/Particles/Node/Blocks/Update/updateDirectionBlock.js +73 -0
- package/Particles/Node/Blocks/Update/updateDirectionBlock.js.map +1 -0
- package/Particles/Node/Blocks/Update/updateFlowMapBlock.d.ts +41 -0
- package/Particles/Node/Blocks/Update/updateFlowMapBlock.js +102 -0
- package/Particles/Node/Blocks/Update/updateFlowMapBlock.js.map +1 -0
- package/Particles/Node/Blocks/Update/updatePositionBlock.d.ts +35 -0
- package/Particles/Node/Blocks/Update/updatePositionBlock.js +73 -0
- package/Particles/Node/Blocks/Update/updatePositionBlock.js.map +1 -0
- package/Particles/Node/Blocks/Update/updateScaleBlock.d.ts +35 -0
- package/Particles/Node/Blocks/Update/updateScaleBlock.js +73 -0
- package/Particles/Node/Blocks/Update/updateScaleBlock.js.map +1 -0
- package/Particles/Node/Blocks/Update/updateSpriteCellIndexBlock.d.ts +35 -0
- package/Particles/Node/Blocks/Update/updateSpriteCellIndexBlock.js +74 -0
- package/Particles/Node/Blocks/Update/updateSpriteCellIndexBlock.js.map +1 -0
- package/Particles/Node/Blocks/index.d.ts +27 -0
- package/Particles/Node/Blocks/index.js +29 -0
- package/Particles/Node/Blocks/index.js.map +1 -0
- package/Particles/Node/Blocks/particleConverterBlock.d.ts +85 -0
- package/Particles/Node/Blocks/particleConverterBlock.js +267 -0
- package/Particles/Node/Blocks/particleConverterBlock.js.map +1 -0
- package/Particles/Node/Blocks/particleDebugBlock.d.ts +37 -0
- package/Particles/Node/Blocks/particleDebugBlock.js +109 -0
- package/Particles/Node/Blocks/particleDebugBlock.js.map +1 -0
- package/Particles/Node/Blocks/particleElbowBlock.d.ts +27 -0
- package/Particles/Node/Blocks/particleElbowBlock.js +47 -0
- package/Particles/Node/Blocks/particleElbowBlock.js.map +1 -0
- package/Particles/Node/Blocks/particleGradientBlock.d.ts +28 -0
- package/Particles/Node/Blocks/particleGradientBlock.js +118 -0
- package/Particles/Node/Blocks/particleGradientBlock.js.map +1 -0
- package/Particles/Node/Blocks/particleGradientValueBlock.d.ts +32 -0
- package/Particles/Node/Blocks/particleGradientValueBlock.js +79 -0
- package/Particles/Node/Blocks/particleGradientValueBlock.js.map +1 -0
- package/Particles/Node/Blocks/particleInputBlock.d.ts +87 -0
- package/Particles/Node/Blocks/particleInputBlock.js +279 -0
- package/Particles/Node/Blocks/particleInputBlock.js.map +1 -0
- package/Particles/Node/Blocks/particleLerpBlock.d.ts +34 -0
- package/Particles/Node/Blocks/particleLerpBlock.js +92 -0
- package/Particles/Node/Blocks/particleLerpBlock.js.map +1 -0
- package/Particles/Node/Blocks/particleMathBlock.d.ts +64 -0
- package/Particles/Node/Blocks/particleMathBlock.js +321 -0
- package/Particles/Node/Blocks/particleMathBlock.js.map +1 -0
- package/Particles/Node/Blocks/particleRandomBlock.d.ts +52 -0
- package/Particles/Node/Blocks/particleRandomBlock.js +161 -0
- package/Particles/Node/Blocks/particleRandomBlock.js.map +1 -0
- package/Particles/Node/Blocks/particleSourceTextureBlock.d.ts +65 -0
- package/Particles/Node/Blocks/particleSourceTextureBlock.js +173 -0
- package/Particles/Node/Blocks/particleSourceTextureBlock.js.map +1 -0
- package/Particles/Node/Blocks/particleTrigonometryBlock.d.ts +80 -0
- package/Particles/Node/Blocks/particleTrigonometryBlock.js +272 -0
- package/Particles/Node/Blocks/particleTrigonometryBlock.js.map +1 -0
- package/Particles/Node/Blocks/randomRangeBlock.d.ts +45 -0
- package/Particles/Node/Blocks/randomRangeBlock.js +151 -0
- package/Particles/Node/Blocks/randomRangeBlock.js.map +1 -0
- package/Particles/Node/Blocks/systemBlock.d.ts +71 -0
- package/Particles/Node/Blocks/systemBlock.js +193 -0
- package/Particles/Node/Blocks/systemBlock.js.map +1 -0
- package/Particles/Node/Enums/nodeParticleBlockConnectionPointTypes.d.ts +39 -0
- package/Particles/Node/Enums/nodeParticleBlockConnectionPointTypes.js +41 -0
- package/Particles/Node/Enums/nodeParticleBlockConnectionPointTypes.js.map +1 -0
- package/Particles/Node/Enums/nodeParticleContextualSources.d.ts +31 -0
- package/Particles/Node/Enums/nodeParticleContextualSources.js +34 -0
- package/Particles/Node/Enums/nodeParticleContextualSources.js.map +1 -0
- package/Particles/Node/Enums/nodeParticleSystemSources.d.ts +13 -0
- package/Particles/Node/Enums/nodeParticleSystemSources.js +15 -0
- package/Particles/Node/Enums/nodeParticleSystemSources.js.map +1 -0
- package/Particles/Node/index.d.ts +8 -0
- package/Particles/Node/index.js +10 -0
- package/Particles/Node/index.js.map +1 -0
- package/Particles/Node/nodeParticleBlock.d.ts +154 -0
- package/Particles/Node/nodeParticleBlock.js +355 -0
- package/Particles/Node/nodeParticleBlock.js.map +1 -0
- package/Particles/Node/nodeParticleBlockConnectionPoint.d.ts +188 -0
- package/Particles/Node/nodeParticleBlockConnectionPoint.js +337 -0
- package/Particles/Node/nodeParticleBlockConnectionPoint.js.map +1 -0
- package/Particles/Node/nodeParticleBuildState.d.ts +89 -0
- package/Particles/Node/nodeParticleBuildState.js +170 -0
- package/Particles/Node/nodeParticleBuildState.js.map +1 -0
- package/Particles/Node/nodeParticleSystemSet.d.ts +120 -0
- package/Particles/Node/nodeParticleSystemSet.js +382 -0
- package/Particles/Node/nodeParticleSystemSet.js.map +1 -0
- package/Particles/Queue/executionQueue.d.ts +2 -0
- package/Particles/Queue/executionQueue.js +10 -0
- package/Particles/Queue/executionQueue.js.map +1 -1
- package/Particles/baseParticleSystem.d.ts +2 -1
- package/Particles/baseParticleSystem.js +1 -0
- package/Particles/baseParticleSystem.js.map +1 -1
- package/Particles/flowMap.d.ts +7 -0
- package/Particles/flowMap.js +32 -0
- package/Particles/flowMap.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +4 -0
- package/Particles/gpuParticleSystem.js +4 -0
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/index.d.ts +1 -0
- package/Particles/index.js +1 -0
- package/Particles/index.js.map +1 -1
- package/Particles/particleSystem.d.ts +12 -0
- package/Particles/particleSystem.js +22 -1
- package/Particles/particleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.d.ts +32 -11
- package/Particles/thinParticleSystem.js +62 -36
- package/Particles/thinParticleSystem.js.map +1 -1
- package/PostProcesses/postProcessManager.d.ts +2 -1
- package/PostProcesses/postProcessManager.js +3 -2
- package/PostProcesses/postProcessManager.js.map +1 -1
- package/Shaders/ShadersInclude/defaultUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/defaultUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/defaultVertexDeclaration.js +1 -0
- package/Shaders/ShadersInclude/defaultVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/lightFragment.js +5 -2
- package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
- package/Shaders/ShadersInclude/morphTargetsVertexDeclaration.js +3 -0
- package/Shaders/ShadersInclude/morphTargetsVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrBlockPrePass.js +3 -0
- package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +1 -1
- package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
- package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/pbrVertexDeclaration.js +1 -0
- package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/prePassDeclaration.js +3 -0
- package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/Shaders/ShadersInclude/prePassVertex.js +3 -0
- package/Shaders/ShadersInclude/prePassVertex.js.map +1 -1
- package/Shaders/ShadersInclude/prePassVertexDeclaration.js +3 -0
- package/Shaders/ShadersInclude/prePassVertexDeclaration.js.map +1 -1
- package/Shaders/default.fragment.js +3 -0
- package/Shaders/default.fragment.js.map +1 -1
- package/Shaders/minmaxRedux.fragment.js +13 -5
- package/Shaders/minmaxRedux.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/defaultUboDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/defaultUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/lightFragment.js +5 -2
- package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.js +3 -0
- package/ShadersWGSL/ShadersInclude/morphTargetsVertexDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +3 -0
- package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js +1 -1
- package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +3 -0
- package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/prePassVertex.js +3 -0
- package/ShadersWGSL/ShadersInclude/prePassVertex.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/prePassVertexDeclaration.js +3 -0
- package/ShadersWGSL/ShadersInclude/prePassVertexDeclaration.js.map +1 -1
- package/ShadersWGSL/default.fragment.js +3 -0
- package/ShadersWGSL/default.fragment.js.map +1 -1
- package/ShadersWGSL/minmaxRedux.fragment.js +14 -6
- package/ShadersWGSL/minmaxRedux.fragment.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +5 -0
- package/scene.js +8 -0
- package/scene.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heightToNormalBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/heightToNormalBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { Logger } from \"../../../../Misc/logger\";\r\nimport { ShaderLanguage } from \"../../../../Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to convert a height vector to a normal\r\n */\r\nexport class HeightToNormalBlock extends NodeMaterialBlock {\r\n /**\r\n * Creates a new HeightToNormalBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerInput(\"input\", NodeMaterialBlockConnectionPointTypes.Float);\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerInput(\"worldTangent\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"xyz\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n this._inputs[3].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 | NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4\r\n );\r\n }\r\n\r\n /**\r\n * Defines if the output should be generated in world or tangent space.\r\n * Note that in tangent space the result is also scaled by 0.5 and offsetted by 0.5 so that it can directly be used as a PerturbNormal.normalMapColor input\r\n */\r\n @editableInPropertyPage(\"Generate in world space instead of tangent space\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public generateInWorldSpace: boolean = false;\r\n\r\n /**\r\n * Defines that the worldNormal input will be normalized by the HeightToNormal block before being used\r\n */\r\n @editableInPropertyPage(\"Force normalization for the worldNormal input\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public automaticNormalizationNormal: boolean = true;\r\n\r\n /**\r\n * Defines that the worldTangent input will be normalized by the HeightToNormal block before being used\r\n */\r\n @editableInPropertyPage(\"Force normalization for the worldTangent input\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public automaticNormalizationTangent: boolean = true;\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 \"HeightToNormalBlock\";\r\n }\r\n\r\n /**\r\n * Gets the input component\r\n */\r\n public get input(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the position component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the normal component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the tangent component\r\n */\r\n public get worldTangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the xyz component\r\n */\r\n public get xyz(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const output = this._outputs[0];\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n const fPrefix = state.fSuffix;\r\n\r\n if (!this.generateInWorldSpace && !this.worldTangent.isConnected) {\r\n Logger.Error(`You must connect the 'worldTangent' input of the ${this.name} block!`);\r\n }\r\n\r\n const startCode = this.generateInWorldSpace\r\n ? \"\"\r\n : `\r\n vec3 biTangent = cross(norm, tgt);\r\n mat3 TBN = mat3(tgt, biTangent, norm);\r\n `;\r\n\r\n const endCode = this.generateInWorldSpace\r\n ? \"\"\r\n : `\r\n result = TBN * result;\r\n result = result * vec3(0.5) + vec3(0.5);\r\n `;\r\n\r\n let heightToNormal = `\r\n vec4 heightToNormal(float height, vec3 position, vec3 tangent, vec3 normal) {\r\n vec3 tgt = ${this.automaticNormalizationTangent ? \"normalize(tangent);\" : \"tangent;\"}\r\n vec3 norm = ${this.automaticNormalizationNormal ? \"normalize(normal);\" : \"normal;\"}\r\n ${startCode}\r\n vec3 worlddX = dFdx(position);\r\n vec3 worlddY = dFdy(position);\r\n vec3 crossX = cross(norm, worlddX);\r\n vec3 crossY = cross(worlddY, norm);\r\n float d = abs(dot(crossY, worlddX));\r\n vec3 inToNormal = vec3(((((height + dFdx(height)) - height) * crossY) + (((height + dFdy(height)) - height) * crossX)) * sign(d));\r\n inToNormal.y *= -1.0;\r\n vec3 result = normalize((d * norm) - inToNormal);\r\n ${endCode}\r\n return vec4(result, 0.);\r\n }`;\r\n\r\n if (isWebGPU) {\r\n heightToNormal = state._babylonSLtoWGSL(heightToNormal);\r\n } else {\r\n state._emitExtension(\"derivatives\", \"#extension GL_OES_standard_derivatives : enable\");\r\n }\r\n state._emitFunction(\"heightToNormal\", heightToNormal, \"// heightToNormal\");\r\n state.compilationString +=\r\n state._declareOutput(output) +\r\n ` = heightToNormal(${this.input.associatedVariableName}, ${this.worldPosition.associatedVariableName}, ${\r\n this.worldTangent.isConnected ? this.worldTangent.associatedVariableName : `vec3${fPrefix}(0.)`\r\n }.xyz, ${this.worldNormal.associatedVariableName});\\n`;\r\n\r\n if (this.xyz.hasEndpoints) {\r\n state.compilationString += state._declareOutput(this.xyz) + ` = ${this.output.associatedVariableName}.xyz;\\n`;\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}.generateInWorldSpace = ${this.generateInWorldSpace};\\n`;\r\n codeString += `${this._codeVariableName}.automaticNormalizationNormal = ${this.automaticNormalizationNormal};\\n`;\r\n codeString += `${this._codeVariableName}.automaticNormalizationTangent = ${this.automaticNormalizationTangent};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.generateInWorldSpace = this.generateInWorldSpace;\r\n serializationObject.automaticNormalizationNormal = this.automaticNormalizationNormal;\r\n serializationObject.automaticNormalizationTangent = this.automaticNormalizationTangent;\r\n\r\n return serializationObject;\r\n }\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.generateInWorldSpace = serializationObject.generateInWorldSpace;\r\n this.automaticNormalizationNormal = serializationObject.automaticNormalizationNormal;\r\n this.automaticNormalizationTangent = serializationObject.automaticNormalizationTangent;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.HeightToNormalBlock\", HeightToNormalBlock);\r\n"]}
|
|
1
|
+
{"version":3,"file":"heightToNormalBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/heightToNormalBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { ShaderLanguage } from \"../../../../Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to convert a height vector to a normal\r\n */\r\nexport class HeightToNormalBlock extends NodeMaterialBlock {\r\n /**\r\n * Creates a new HeightToNormalBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerInput(\"input\", NodeMaterialBlockConnectionPointTypes.Float);\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerInput(\"worldTangent\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"xyz\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n this._inputs[3].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 | NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4\r\n );\r\n }\r\n\r\n /**\r\n * Defines if the output should be generated in world or tangent space.\r\n * Note that in tangent space the result is also scaled by 0.5 and offsetted by 0.5 so that it can directly be used as a PerturbNormal.normalMapColor input\r\n */\r\n @editableInPropertyPage(\"Generate in world space instead of tangent space\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public generateInWorldSpace: boolean = false;\r\n\r\n /**\r\n * Defines that the worldNormal input will be normalized by the HeightToNormal block before being used\r\n */\r\n @editableInPropertyPage(\"Force normalization for the worldNormal input\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public automaticNormalizationNormal: boolean = true;\r\n\r\n /**\r\n * Defines that the worldTangent input will be normalized by the HeightToNormal block before being used\r\n */\r\n @editableInPropertyPage(\"Force normalization for the worldTangent input\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public automaticNormalizationTangent: boolean = true;\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 \"HeightToNormalBlock\";\r\n }\r\n\r\n /**\r\n * Gets the input component\r\n */\r\n public get input(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the position component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the normal component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the tangent component\r\n */\r\n public get worldTangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the xyz component\r\n */\r\n public get xyz(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const output = this._outputs[0];\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n const fPrefix = state.fSuffix;\r\n\r\n if (!this.generateInWorldSpace && !this.worldTangent.isConnected) {\r\n state.sharedData.raiseBuildError(`You must connect the 'worldTangent' input of the ${this.name} block!`);\r\n }\r\n\r\n const startCode = this.generateInWorldSpace\r\n ? \"\"\r\n : `\r\n vec3 biTangent = cross(norm, tgt);\r\n mat3 TBN = mat3(tgt, biTangent, norm);\r\n `;\r\n\r\n const endCode = this.generateInWorldSpace\r\n ? \"\"\r\n : `\r\n result = TBN * result;\r\n result = result * vec3(0.5) + vec3(0.5);\r\n `;\r\n\r\n let heightToNormal = `\r\n vec4 heightToNormal(float height, vec3 position, vec3 tangent, vec3 normal) {\r\n vec3 tgt = ${this.automaticNormalizationTangent ? \"normalize(tangent);\" : \"tangent;\"}\r\n vec3 norm = ${this.automaticNormalizationNormal ? \"normalize(normal);\" : \"normal;\"}\r\n ${startCode}\r\n vec3 worlddX = dFdx(position);\r\n vec3 worlddY = dFdy(position);\r\n vec3 crossX = cross(norm, worlddX);\r\n vec3 crossY = cross(worlddY, norm);\r\n float d = abs(dot(crossY, worlddX));\r\n vec3 inToNormal = vec3(((((height + dFdx(height)) - height) * crossY) + (((height + dFdy(height)) - height) * crossX)) * sign(d));\r\n inToNormal.y *= -1.0;\r\n vec3 result = normalize((d * norm) - inToNormal);\r\n ${endCode}\r\n return vec4(result, 0.);\r\n }`;\r\n\r\n if (isWebGPU) {\r\n heightToNormal = state._babylonSLtoWGSL(heightToNormal);\r\n } else {\r\n state._emitExtension(\"derivatives\", \"#extension GL_OES_standard_derivatives : enable\");\r\n }\r\n state._emitFunction(\"heightToNormal\", heightToNormal, \"// heightToNormal\");\r\n state.compilationString +=\r\n state._declareOutput(output) +\r\n ` = heightToNormal(${this.input.associatedVariableName}, ${this.worldPosition.associatedVariableName}, ${\r\n this.worldTangent.isConnected ? this.worldTangent.associatedVariableName : `vec3${fPrefix}(0.)`\r\n }.xyz, ${this.worldNormal.associatedVariableName});\\n`;\r\n\r\n if (this.xyz.hasEndpoints) {\r\n state.compilationString += state._declareOutput(this.xyz) + ` = ${this.output.associatedVariableName}.xyz;\\n`;\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}.generateInWorldSpace = ${this.generateInWorldSpace};\\n`;\r\n codeString += `${this._codeVariableName}.automaticNormalizationNormal = ${this.automaticNormalizationNormal};\\n`;\r\n codeString += `${this._codeVariableName}.automaticNormalizationTangent = ${this.automaticNormalizationTangent};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.generateInWorldSpace = this.generateInWorldSpace;\r\n serializationObject.automaticNormalizationNormal = this.automaticNormalizationNormal;\r\n serializationObject.automaticNormalizationTangent = this.automaticNormalizationTangent;\r\n\r\n return serializationObject;\r\n }\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.generateInWorldSpace = serializationObject.generateInWorldSpace;\r\n this.automaticNormalizationNormal = serializationObject.automaticNormalizationNormal;\r\n this.automaticNormalizationTangent = serializationObject.automaticNormalizationTangent;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.HeightToNormalBlock\", HeightToNormalBlock);\r\n"]}
|
|
@@ -43,7 +43,7 @@ export declare class ImageProcessingBlock extends NodeMaterialBlock {
|
|
|
43
43
|
initialize(state: NodeMaterialBuildState): void;
|
|
44
44
|
private _initShaderSourceAsync;
|
|
45
45
|
isReady(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): boolean;
|
|
46
|
-
prepareDefines(
|
|
46
|
+
prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial): void;
|
|
47
47
|
bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
|
|
48
48
|
protected _buildBlock(state: NodeMaterialBuildState): this;
|
|
49
49
|
protected _dumpPropertiesCode(): string;
|
|
@@ -97,7 +97,7 @@ export class ImageProcessingBlock extends NodeMaterialBlock {
|
|
|
97
97
|
}
|
|
98
98
|
return true;
|
|
99
99
|
}
|
|
100
|
-
prepareDefines(
|
|
100
|
+
prepareDefines(defines, nodeMaterial) {
|
|
101
101
|
if (defines._areImageProcessingDirty && nodeMaterial.imageProcessingConfiguration) {
|
|
102
102
|
nodeMaterial.imageProcessingConfiguration.prepareDefines(defines);
|
|
103
103
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imageProcessingBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/imageProcessingBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { 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 { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\n\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to add image processing support to fragment shader\r\n */\r\nexport class ImageProcessingBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new ImageProcessingBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerInput(\"color\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Color4);\r\n this.registerOutput(\"rgb\", NodeMaterialBlockConnectionPointTypes.Color3);\r\n\r\n this._inputs[0].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 |\r\n NodeMaterialBlockConnectionPointTypes.Color4 |\r\n NodeMaterialBlockConnectionPointTypes.Vector3 |\r\n NodeMaterialBlockConnectionPointTypes.Vector4\r\n );\r\n }\r\n\r\n /**\r\n * Defines if the input should be converted to linear space (default: true)\r\n */\r\n @editableInPropertyPage(\"Convert input to linear space\", PropertyTypeForEdition.Boolean, \"ADVANCED\")\r\n public convertInputToLinearSpace: boolean = true;\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 \"ImageProcessingBlock\";\r\n }\r\n\r\n /**\r\n * Gets the color input component\r\n */\r\n public get color(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the rgb component\r\n */\r\n public get rgb(): 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(\"exposureLinear\");\r\n state._excludeVariableName(\"contrast\");\r\n state._excludeVariableName(\"vInverseScreenSize\");\r\n state._excludeVariableName(\"vignetteSettings1\");\r\n state._excludeVariableName(\"vignetteSettings2\");\r\n state._excludeVariableName(\"vCameraColorCurveNegative\");\r\n state._excludeVariableName(\"vCameraColorCurveNeutral\");\r\n state._excludeVariableName(\"vCameraColorCurvePositive\");\r\n state._excludeVariableName(\"txColorTransform\");\r\n state._excludeVariableName(\"colorTransformSettings\");\r\n state._excludeVariableName(\"ditherIntensity\");\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/helperFunctions\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/imageProcessingDeclaration\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/imageProcessingFunctions\"),\r\n ]);\r\n } else {\r\n await Promise.all([\r\n import(\"../../../../Shaders/ShadersInclude/helperFunctions\"),\r\n import(\"../../../../Shaders/ShadersInclude/imageProcessingDeclaration\"),\r\n import(\"../../../../Shaders/ShadersInclude/imageProcessingFunctions\"),\r\n ]);\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n public override isReady(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n if (defines._areImageProcessingDirty && nodeMaterial.imageProcessingConfiguration) {\r\n if (!nodeMaterial.imageProcessingConfiguration.isReady()) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n if (defines._areImageProcessingDirty && nodeMaterial.imageProcessingConfiguration) {\r\n nodeMaterial.imageProcessingConfiguration.prepareDefines(defines);\r\n }\r\n }\r\n\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if (!mesh) {\r\n return;\r\n }\r\n\r\n if (!nodeMaterial.imageProcessingConfiguration) {\r\n return;\r\n }\r\n\r\n nodeMaterial.imageProcessingConfiguration.bind(effect);\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n // Register for defines\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n // Register for blocking\r\n state.sharedData.blockingBlocks.push(this);\r\n\r\n // Register for binding\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n // Uniforms\r\n state.uniforms.push(\"exposureLinear\");\r\n state.uniforms.push(\"contrast\");\r\n state.uniforms.push(\"vInverseScreenSize\");\r\n state.uniforms.push(\"vignetteSettings1\");\r\n state.uniforms.push(\"vignetteSettings2\");\r\n state.uniforms.push(\"vCameraColorCurveNegative\");\r\n state.uniforms.push(\"vCameraColorCurveNeutral\");\r\n state.uniforms.push(\"vCameraColorCurvePositive\");\r\n state.uniforms.push(\"txColorTransform\");\r\n state.uniforms.push(\"colorTransformSettings\");\r\n state.uniforms.push(\"ditherIntensity\");\r\n\r\n // Emit code\r\n const color = this.color;\r\n const output = this._outputs[0];\r\n const comments = `//${this.name}`;\r\n const overrideText = state.shaderLanguage === ShaderLanguage.WGSL ? \"Vec3\" : \"\";\r\n\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n state._emitFunctionFromInclude(\"imageProcessingDeclaration\", comments);\r\n state._emitFunctionFromInclude(\"imageProcessingFunctions\", comments);\r\n\r\n if (color.connectedPoint?.isConnected) {\r\n if (color.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Color4 || color.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4) {\r\n state.compilationString += `${state._declareOutput(output)} = ${color.associatedVariableName};\\n`;\r\n } else {\r\n state.compilationString += `${state._declareOutput(output)} = vec4${state.fSuffix}(${color.associatedVariableName}, 1.0);\\n`;\r\n }\r\n state.compilationString += `#ifdef IMAGEPROCESSINGPOSTPROCESS\\n`;\r\n if (this.convertInputToLinearSpace) {\r\n state.compilationString += `${output.associatedVariableName} = vec4${state.fSuffix}(toLinearSpace${overrideText}(${color.associatedVariableName}.rgb), ${color.associatedVariableName}.a);\\n`;\r\n }\r\n state.compilationString += `#else\\n`;\r\n state.compilationString += `#ifdef IMAGEPROCESSING\\n`;\r\n if (this.convertInputToLinearSpace) {\r\n state.compilationString += `${output.associatedVariableName} = vec4${state.fSuffix}(toLinearSpace${overrideText}(${color.associatedVariableName}.rgb), ${color.associatedVariableName}.a);\\n`;\r\n }\r\n state.compilationString += `${output.associatedVariableName} = applyImageProcessing(${output.associatedVariableName});\\n`;\r\n state.compilationString += `#endif\\n`;\r\n state.compilationString += `#endif\\n`;\r\n\r\n if (this.rgb.hasEndpoints) {\r\n state.compilationString += state._declareOutput(this.rgb) + ` = ${this.output.associatedVariableName}.xyz;\\n`;\r\n }\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\r\n codeString += `${this._codeVariableName}.convertInputToLinearSpace = ${this.convertInputToLinearSpace};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.convertInputToLinearSpace = this.convertInputToLinearSpace;\r\n\r\n return serializationObject;\r\n }\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.convertInputToLinearSpace = serializationObject.convertInputToLinearSpace ?? true;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ImageProcessingBlock\", ImageProcessingBlock);\r\n"]}
|
|
1
|
+
{"version":3,"file":"imageProcessingBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/imageProcessingBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { 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 { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\n\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to add image processing support to fragment shader\r\n */\r\nexport class ImageProcessingBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new ImageProcessingBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerInput(\"color\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Color4);\r\n this.registerOutput(\"rgb\", NodeMaterialBlockConnectionPointTypes.Color3);\r\n\r\n this._inputs[0].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 |\r\n NodeMaterialBlockConnectionPointTypes.Color4 |\r\n NodeMaterialBlockConnectionPointTypes.Vector3 |\r\n NodeMaterialBlockConnectionPointTypes.Vector4\r\n );\r\n }\r\n\r\n /**\r\n * Defines if the input should be converted to linear space (default: true)\r\n */\r\n @editableInPropertyPage(\"Convert input to linear space\", PropertyTypeForEdition.Boolean, \"ADVANCED\")\r\n public convertInputToLinearSpace: boolean = true;\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 \"ImageProcessingBlock\";\r\n }\r\n\r\n /**\r\n * Gets the color input component\r\n */\r\n public get color(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the rgb component\r\n */\r\n public get rgb(): 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(\"exposureLinear\");\r\n state._excludeVariableName(\"contrast\");\r\n state._excludeVariableName(\"vInverseScreenSize\");\r\n state._excludeVariableName(\"vignetteSettings1\");\r\n state._excludeVariableName(\"vignetteSettings2\");\r\n state._excludeVariableName(\"vCameraColorCurveNegative\");\r\n state._excludeVariableName(\"vCameraColorCurveNeutral\");\r\n state._excludeVariableName(\"vCameraColorCurvePositive\");\r\n state._excludeVariableName(\"txColorTransform\");\r\n state._excludeVariableName(\"colorTransformSettings\");\r\n state._excludeVariableName(\"ditherIntensity\");\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/helperFunctions\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/imageProcessingDeclaration\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/imageProcessingFunctions\"),\r\n ]);\r\n } else {\r\n await Promise.all([\r\n import(\"../../../../Shaders/ShadersInclude/helperFunctions\"),\r\n import(\"../../../../Shaders/ShadersInclude/imageProcessingDeclaration\"),\r\n import(\"../../../../Shaders/ShadersInclude/imageProcessingFunctions\"),\r\n ]);\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n public override isReady(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n if (defines._areImageProcessingDirty && nodeMaterial.imageProcessingConfiguration) {\r\n if (!nodeMaterial.imageProcessingConfiguration.isReady()) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n public override prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial) {\r\n if (defines._areImageProcessingDirty && nodeMaterial.imageProcessingConfiguration) {\r\n nodeMaterial.imageProcessingConfiguration.prepareDefines(defines);\r\n }\r\n }\r\n\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if (!mesh) {\r\n return;\r\n }\r\n\r\n if (!nodeMaterial.imageProcessingConfiguration) {\r\n return;\r\n }\r\n\r\n nodeMaterial.imageProcessingConfiguration.bind(effect);\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n // Register for defines\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n // Register for blocking\r\n state.sharedData.blockingBlocks.push(this);\r\n\r\n // Register for binding\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n // Uniforms\r\n state.uniforms.push(\"exposureLinear\");\r\n state.uniforms.push(\"contrast\");\r\n state.uniforms.push(\"vInverseScreenSize\");\r\n state.uniforms.push(\"vignetteSettings1\");\r\n state.uniforms.push(\"vignetteSettings2\");\r\n state.uniforms.push(\"vCameraColorCurveNegative\");\r\n state.uniforms.push(\"vCameraColorCurveNeutral\");\r\n state.uniforms.push(\"vCameraColorCurvePositive\");\r\n state.uniforms.push(\"txColorTransform\");\r\n state.uniforms.push(\"colorTransformSettings\");\r\n state.uniforms.push(\"ditherIntensity\");\r\n\r\n // Emit code\r\n const color = this.color;\r\n const output = this._outputs[0];\r\n const comments = `//${this.name}`;\r\n const overrideText = state.shaderLanguage === ShaderLanguage.WGSL ? \"Vec3\" : \"\";\r\n\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n state._emitFunctionFromInclude(\"imageProcessingDeclaration\", comments);\r\n state._emitFunctionFromInclude(\"imageProcessingFunctions\", comments);\r\n\r\n if (color.connectedPoint?.isConnected) {\r\n if (color.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Color4 || color.connectedPoint.type === NodeMaterialBlockConnectionPointTypes.Vector4) {\r\n state.compilationString += `${state._declareOutput(output)} = ${color.associatedVariableName};\\n`;\r\n } else {\r\n state.compilationString += `${state._declareOutput(output)} = vec4${state.fSuffix}(${color.associatedVariableName}, 1.0);\\n`;\r\n }\r\n state.compilationString += `#ifdef IMAGEPROCESSINGPOSTPROCESS\\n`;\r\n if (this.convertInputToLinearSpace) {\r\n state.compilationString += `${output.associatedVariableName} = vec4${state.fSuffix}(toLinearSpace${overrideText}(${color.associatedVariableName}.rgb), ${color.associatedVariableName}.a);\\n`;\r\n }\r\n state.compilationString += `#else\\n`;\r\n state.compilationString += `#ifdef IMAGEPROCESSING\\n`;\r\n if (this.convertInputToLinearSpace) {\r\n state.compilationString += `${output.associatedVariableName} = vec4${state.fSuffix}(toLinearSpace${overrideText}(${color.associatedVariableName}.rgb), ${color.associatedVariableName}.a);\\n`;\r\n }\r\n state.compilationString += `${output.associatedVariableName} = applyImageProcessing(${output.associatedVariableName});\\n`;\r\n state.compilationString += `#endif\\n`;\r\n state.compilationString += `#endif\\n`;\r\n\r\n if (this.rgb.hasEndpoints) {\r\n state.compilationString += state._declareOutput(this.rgb) + ` = ${this.output.associatedVariableName}.xyz;\\n`;\r\n }\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\r\n codeString += `${this._codeVariableName}.convertInputToLinearSpace = ${this.convertInputToLinearSpace};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.convertInputToLinearSpace = this.convertInputToLinearSpace;\r\n\r\n return serializationObject;\r\n }\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.convertInputToLinearSpace = serializationObject.convertInputToLinearSpace ?? true;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ImageProcessingBlock\", ImageProcessingBlock);\r\n"]}
|
|
@@ -2,7 +2,6 @@ import { NodeMaterialBlock } from "../../nodeMaterialBlock.js";
|
|
|
2
2
|
import type { NodeMaterialBuildState } from "../../nodeMaterialBuildState.js";
|
|
3
3
|
import type { NodeMaterialConnectionPoint } from "../../nodeMaterialBlockConnectionPoint.js";
|
|
4
4
|
import type { NodeMaterial, NodeMaterialDefines } from "../../nodeMaterial.js";
|
|
5
|
-
import type { AbstractMesh } from "../../../../Meshes/abstractMesh.js";
|
|
6
5
|
import type { Mesh } from "../../../../Meshes/mesh.js";
|
|
7
6
|
import type { Effect } from "../../../effect.js";
|
|
8
7
|
import type { Scene } from "../../../../scene.js";
|
|
@@ -85,7 +84,7 @@ export declare class PerturbNormalBlock extends NodeMaterialBlock {
|
|
|
85
84
|
get uvOffset(): NodeMaterialConnectionPoint;
|
|
86
85
|
initialize(state: NodeMaterialBuildState): void;
|
|
87
86
|
private _initShaderSourceAsync;
|
|
88
|
-
prepareDefines(
|
|
87
|
+
prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial): void;
|
|
89
88
|
bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
|
|
90
89
|
autoConfigure(material: NodeMaterial, additionalFilteringInfo?: (node: NodeMaterialBlock) => boolean): void;
|
|
91
90
|
protected _buildBlock(state: NodeMaterialBuildState): this;
|
|
@@ -155,7 +155,7 @@ export class PerturbNormalBlock extends NodeMaterialBlock {
|
|
|
155
155
|
this._codeIsReady = true;
|
|
156
156
|
this.onCodeIsReadyObservable.notifyObservers(this);
|
|
157
157
|
}
|
|
158
|
-
prepareDefines(
|
|
158
|
+
prepareDefines(defines, nodeMaterial) {
|
|
159
159
|
const normalSamplerName = this.normalMapColor.connectedPoint._ownerBlock.samplerName;
|
|
160
160
|
const useParallax = this.viewDirection.isConnected && ((this.useParallaxOcclusion && normalSamplerName) || (!this.useParallaxOcclusion && this.parallaxHeight.isConnected));
|
|
161
161
|
defines.setValue("BUMP", true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"perturbNormalBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/perturbNormalBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { 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 { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport type { TextureBlock } from \"../Dual/textureBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { TBNBlock } from \"./TBNBlock\";\r\n\r\nimport { ShaderLanguage } from \"../../../../Materials/shaderLanguage\";\r\nimport { Constants } from \"../../../../Engines/constants\";\r\n\r\n/**\r\n * Block used to perturb normals based on a normal map\r\n */\r\nexport class PerturbNormalBlock extends NodeMaterialBlock {\r\n private _tangentSpaceParameterName = \"\";\r\n private _tangentCorrectionFactorName = \"\";\r\n private _worldMatrixName = \"\";\r\n\r\n /** Gets or sets a boolean indicating that normal should be inverted on X axis */\r\n @editableInPropertyPage(\"Invert X axis\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true, notifiers: { update: true } })\r\n public invertX = false;\r\n /** Gets or sets a boolean indicating that normal should be inverted on Y axis */\r\n @editableInPropertyPage(\"Invert Y axis\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true, notifiers: { update: true } })\r\n public invertY = false;\r\n /** Gets or sets a boolean indicating that parallax occlusion should be enabled */\r\n @editableInPropertyPage(\"Use parallax occlusion\", PropertyTypeForEdition.Boolean, undefined, { embedded: true })\r\n public useParallaxOcclusion = false;\r\n /** Gets or sets a boolean indicating that sampling mode is in Object space */\r\n @editableInPropertyPage(\"Object Space Mode\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true, notifiers: { update: true } })\r\n public useObjectSpaceNormalMap = false;\r\n\r\n /**\r\n * Create a new PerturbNormalBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n // Vertex\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector4, false);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.Vector4, false);\r\n this.registerInput(\"worldTangent\", NodeMaterialBlockConnectionPointTypes.Vector4, true);\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.Vector2, false);\r\n this.registerInput(\"normalMapColor\", NodeMaterialBlockConnectionPointTypes.Color3, false);\r\n this.registerInput(\"strength\", NodeMaterialBlockConnectionPointTypes.Float, false);\r\n this.registerInput(\"viewDirection\", NodeMaterialBlockConnectionPointTypes.Vector3, true);\r\n this.registerInput(\"parallaxScale\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"parallaxHeight\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\r\n \"TBN\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"TBN\", this, NodeMaterialConnectionPointDirection.Input, TBNBlock, \"TBNBlock\")\r\n );\r\n this.registerInput(\"world\", NodeMaterialBlockConnectionPointTypes.Matrix, true);\r\n\r\n // Fragment\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"uvOffset\", NodeMaterialBlockConnectionPointTypes.Vector2);\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 \"PerturbNormalBlock\";\r\n }\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the world normal input component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the world tangent input component\r\n */\r\n public get worldTangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the uv input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the normal map color input component\r\n */\r\n public get normalMapColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the strength input component\r\n */\r\n public get strength(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the view direction input component\r\n */\r\n public get viewDirection(): NodeMaterialConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n /**\r\n * Gets the parallax scale input component\r\n */\r\n public get parallaxScale(): NodeMaterialConnectionPoint {\r\n return this._inputs[7];\r\n }\r\n\r\n /**\r\n * Gets the parallax height input component\r\n */\r\n public get parallaxHeight(): NodeMaterialConnectionPoint {\r\n return this._inputs[8];\r\n }\r\n\r\n /**\r\n * Gets the TBN input component\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public get TBN(): NodeMaterialConnectionPoint {\r\n return this._inputs[9];\r\n }\r\n\r\n /**\r\n * Gets the World input component\r\n */\r\n public get world(): NodeMaterialConnectionPoint {\r\n return this._inputs[10];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the uv offset output component\r\n */\r\n public get uvOffset(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\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 Promise.all([\r\n import(\"../../../../ShadersWGSL/ShadersInclude/bumpFragment\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/bumpFragmentFunctions\"),\r\n ]);\r\n } else {\r\n await Promise.all([\r\n import(\"../../../../Shaders/ShadersInclude/bumpFragment\"),\r\n import(\"../../../../Shaders/ShadersInclude/bumpFragmentMainFunctions\"),\r\n import(\"../../../../Shaders/ShadersInclude/bumpFragmentFunctions\"),\r\n ]);\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n const normalSamplerName = (this.normalMapColor.connectedPoint!._ownerBlock as TextureBlock).samplerName;\r\n const useParallax = this.viewDirection.isConnected && ((this.useParallaxOcclusion && normalSamplerName) || (!this.useParallaxOcclusion && this.parallaxHeight.isConnected));\r\n\r\n defines.setValue(\"BUMP\", true);\r\n defines.setValue(\"PARALLAX\", useParallax, true);\r\n defines.setValue(\"PARALLAX_RHS\", nodeMaterial.getScene().useRightHandedSystem, true);\r\n defines.setValue(\"PARALLAXOCCLUSION\", this.useParallaxOcclusion, true);\r\n defines.setValue(\"OBJECTSPACE_NORMALMAP\", this.useObjectSpaceNormalMap, true);\r\n }\r\n\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if (nodeMaterial.getScene()._mirroredCameraPosition) {\r\n effect.setFloat2(this._tangentSpaceParameterName, this.invertX ? 1.0 : -1.0, this.invertY ? 1.0 : -1.0);\r\n } else {\r\n effect.setFloat2(this._tangentSpaceParameterName, this.invertX ? -1.0 : 1.0, this.invertY ? -1.0 : 1.0);\r\n }\r\n\r\n if (mesh) {\r\n effect.setFloat(this._tangentCorrectionFactorName, mesh.getWorldMatrix().determinant() < 0 ? -1 : 1);\r\n\r\n if (this.useObjectSpaceNormalMap && !this.world.isConnected) {\r\n // World default to the mesh world matrix\r\n effect.setMatrix(this._worldMatrixName, mesh.getWorldMatrix());\r\n }\r\n }\r\n }\r\n\r\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!this.uv.isConnected) {\r\n let uvInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"uv\" && additionalFilteringInfo(b));\r\n\r\n if (!uvInput) {\r\n uvInput = new InputBlock(\"uv\");\r\n uvInput.setAsAttribute();\r\n }\r\n uvInput.output.connectTo(this.uv);\r\n }\r\n\r\n if (!this.strength.isConnected) {\r\n const strengthInput = new InputBlock(\"strength\");\r\n strengthInput.value = 1.0;\r\n strengthInput.output.connectTo(this.strength);\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const comments = `//${this.name}`;\r\n const uv = this.uv;\r\n const worldPosition = this.worldPosition;\r\n const worldNormal = this.worldNormal;\r\n const worldTangent = this.worldTangent;\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n const mat3 = isWebGPU ? \"mat3x3f\" : \"mat3\";\r\n const fSuffix = isWebGPU ? \"f\" : \"\";\r\n const uniformPrefix = isWebGPU ? \"uniforms.\" : \"\";\r\n const fragmentInputsPrefix = isWebGPU ? \"fragmentInputs.\" : \"\";\r\n\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n this._tangentSpaceParameterName = state._getFreeDefineName(\"tangentSpaceParameter\");\r\n\r\n state._emitUniformFromString(this._tangentSpaceParameterName, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n this._tangentCorrectionFactorName = state._getFreeDefineName(\"tangentCorrectionFactor\");\r\n\r\n state._emitUniformFromString(this._tangentCorrectionFactorName, NodeMaterialBlockConnectionPointTypes.Float);\r\n\r\n this._worldMatrixName = state._getFreeDefineName(\"perturbNormalWorldMatrix\");\r\n\r\n state._emitUniformFromString(this._worldMatrixName, NodeMaterialBlockConnectionPointTypes.Matrix);\r\n\r\n let normalSamplerName = null;\r\n if (this.normalMapColor.connectedPoint) {\r\n normalSamplerName = (this.normalMapColor.connectedPoint._ownerBlock as TextureBlock).samplerName;\r\n }\r\n const useParallax = this.viewDirection.isConnected && ((this.useParallaxOcclusion && normalSamplerName) || (!this.useParallaxOcclusion && this.parallaxHeight.isConnected));\r\n\r\n const replaceForParallaxInfos = !this.parallaxScale.isConnectedToInputBlock\r\n ? \"0.05\"\r\n : this.parallaxScale.connectInputBlock!.isConstant\r\n ? state._emitFloat(this.parallaxScale.connectInputBlock!.value)\r\n : this.parallaxScale.associatedVariableName;\r\n\r\n const replaceForBumpInfos =\r\n this.strength.isConnectedToInputBlock && this.strength.connectInputBlock!.isConstant\r\n ? `\\n#if !defined(NORMALXYSCALE)\\n1.0/\\n#endif\\n${state._emitFloat(this.strength.connectInputBlock!.value)}`\r\n : `\\n#if !defined(NORMALXYSCALE)\\n1.0/\\n#endif\\n${this.strength.associatedVariableName}`;\r\n\r\n if (!isWebGPU) {\r\n state._emitExtension(\"derivatives\", \"#extension GL_OES_standard_derivatives : enable\");\r\n }\r\n\r\n const tangentReplaceString = { search: /defined\\(TANGENT\\)/g, replace: worldTangent.isConnected ? \"defined(TANGENT)\" : \"defined(IGNORE)\" };\r\n const tbnVarying = { search: /varying mat3 vTBN;/g, replace: \"\" };\r\n const normalMatrixReplaceString = { search: isWebGPU ? /uniform normalMatrix: mat4x4f;/g : /uniform mat4 normalMatrix;/g, replace: \"\" };\r\n\r\n const tbn = this.TBN;\r\n if (tbn.isConnected) {\r\n state.compilationString += `\r\n #ifdef TBNBLOCK\r\n ${isWebGPU ? \"var\" : \"mat3\"} vTBN = ${tbn.associatedVariableName};\r\n #endif\r\n `;\r\n } else if (worldTangent.isConnected) {\r\n state.compilationString += `${state._declareLocalVar(\"tbnNormal\", NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(${worldNormal.associatedVariableName}.xyz);\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"tbnTangent\", NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(${worldTangent.associatedVariableName}.xyz);\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"tbnBitangent\", NodeMaterialBlockConnectionPointTypes.Vector3)} = cross(tbnNormal, tbnTangent) * ${uniformPrefix}${this._tangentCorrectionFactorName};\\n`;\r\n state.compilationString += `${isWebGPU ? \"var\" : \"mat3\"} vTBN = ${mat3}(tbnTangent, tbnBitangent, tbnNormal);\\n`;\r\n }\r\n\r\n let replaceStrings = [tangentReplaceString, tbnVarying, normalMatrixReplaceString];\r\n\r\n if (isWebGPU) {\r\n replaceStrings.push({ search: /varying vTBN0: vec3f;/g, replace: \"\" });\r\n replaceStrings.push({ search: /varying vTBN1: vec3f;/g, replace: \"\" });\r\n replaceStrings.push({ search: /varying vTBN2: vec3f;/g, replace: \"\" });\r\n }\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentMainFunctions\", comments, {\r\n replaceStrings: replaceStrings,\r\n });\r\n\r\n const replaceString0 = isWebGPU\r\n ? \"fn parallaxOcclusion(vViewDirCoT: vec3f, vNormalCoT: vec3f, texCoord: vec2f, parallaxScale:f32, bumpSampler: texture_2d<f32>, bumpSamplerSampler: sampler)\"\r\n : \"#define inline\\nvec2 parallaxOcclusion(vec3 vViewDirCoT, vec3 vNormalCoT, vec2 texCoord, float parallaxScale, sampler2D bumpSampler)\";\r\n\r\n const searchExp0 = isWebGPU\r\n ? /fn parallaxOcclusion\\(vViewDirCoT: vec3f,vNormalCoT: vec3f,texCoord: vec2f,parallaxScale: f32\\)/g\r\n : /vec2 parallaxOcclusion\\(vec3 vViewDirCoT,vec3 vNormalCoT,vec2 texCoord,float parallaxScale\\)/g;\r\n\r\n const replaceString1 = isWebGPU\r\n ? \"fn parallaxOffset(viewDir: vec3f, heightScale: f32, height_: f32)\"\r\n : \"vec2 parallaxOffset(vec3 viewDir, float heightScale, float height_)\";\r\n\r\n const searchExp1 = isWebGPU ? /fn parallaxOffset\\(viewDir: vec3f,heightScale: f32\\)/g : /vec2 parallaxOffset\\(vec3 viewDir,float heightScale\\)/g;\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentFunctions\", comments, {\r\n replaceStrings: [\r\n { search: /#include<samplerFragmentDeclaration>\\(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_SAMPLERNAME_,bump\\)/g, replace: \"\" },\r\n { search: /uniform sampler2D bumpSampler;/g, replace: \"\" },\r\n {\r\n search: searchExp0,\r\n replace: replaceString0,\r\n },\r\n { search: searchExp1, replace: replaceString1 },\r\n { search: /texture.+?bumpSampler,.*?vBumpUV\\)\\.w/g, replace: \"height_\" },\r\n ],\r\n });\r\n\r\n const normalRead = isWebGPU ? `textureSample(${normalSamplerName}, ${normalSamplerName + Constants.AUTOSAMPLERSUFFIX}` : `texture2D(${normalSamplerName}`;\r\n\r\n const uvForPerturbNormal = !useParallax || !normalSamplerName ? this.normalMapColor.associatedVariableName : `${normalRead}, ${uv.associatedVariableName} + uvOffset).xyz`;\r\n\r\n const tempOutput = state._getFreeVariableName(\"tempOutput\");\r\n state.compilationString += state._declareLocalVar(tempOutput, NodeMaterialBlockConnectionPointTypes.Vector3) + ` = vec3${fSuffix}(0.);\\n`;\r\n\r\n replaceStrings = [\r\n { search: new RegExp(`texture.+?bumpSampler${isWebGPU ? \"Sampler,fragmentInputs.\" : \",\"}vBumpUV\\\\)`, \"g\"), replace: `${uvForPerturbNormal}` },\r\n {\r\n search: /#define CUSTOM_FRAGMENT_BUMP_FRAGMENT/g,\r\n replace: `${state._declareLocalVar(\"normalMatrix\", NodeMaterialBlockConnectionPointTypes.Matrix)} = toNormalMatrix(${this.world.isConnected ? this.world.associatedVariableName : uniformPrefix + this._worldMatrixName});`,\r\n },\r\n {\r\n search: new RegExp(\r\n `perturbNormal\\\\(TBN,texture.+?bumpSampler${isWebGPU ? \"Sampler,fragmentInputs.\" : \",\"}vBumpUV\\\\+uvOffset\\\\).xyz,${uniformPrefix}vBumpInfos.y\\\\)`,\r\n \"g\"\r\n ),\r\n replace: `perturbNormal(TBN, ${uvForPerturbNormal}, ${uniformPrefix}vBumpInfos.y)`,\r\n },\r\n {\r\n search: /parallaxOcclusion\\(invTBN\\*-viewDirectionW,invTBN\\*normalW,(fragmentInputs\\.)?vBumpUV,(uniforms\\.)?vBumpInfos.z\\)/g,\r\n replace: `parallaxOcclusion((invTBN * -viewDirectionW), (invTBN * normalW), ${fragmentInputsPrefix}vBumpUV, ${uniformPrefix}vBumpInfos.z, ${\r\n isWebGPU\r\n ? useParallax && this.useParallaxOcclusion\r\n ? `${normalSamplerName}, ${normalSamplerName + Constants.AUTOSAMPLERSUFFIX}`\r\n : \"bump, bumpSampler\"\r\n : useParallax && this.useParallaxOcclusion\r\n ? normalSamplerName\r\n : \"bumpSampler\"\r\n })`,\r\n },\r\n {\r\n search: /parallaxOffset\\(invTBN\\*viewDirectionW,vBumpInfos\\.z\\)/g,\r\n replace: `parallaxOffset(invTBN * viewDirectionW, ${uniformPrefix}vBumpInfos.z, ${useParallax ? this.parallaxHeight.associatedVariableName : \"0.\"})`,\r\n },\r\n { search: isWebGPU ? /uniforms.vBumpInfos.y/g : /vBumpInfos.y/g, replace: replaceForBumpInfos },\r\n { search: isWebGPU ? /uniforms.vBumpInfos.z/g : /vBumpInfos.z/g, replace: replaceForParallaxInfos },\r\n { search: /normalW=/g, replace: tempOutput + \" = \" },\r\n isWebGPU\r\n ? {\r\n search: /mat3x3f\\(uniforms\\.normalMatrix\\[0\\].xyz,uniforms\\.normalMatrix\\[1\\]\\.xyz,uniforms\\.normalMatrix\\[2\\].xyz\\)\\*normalW/g,\r\n replace: `${mat3}(normalMatrix[0].xyz, normalMatrix[1].xyz, normalMatrix[2].xyz) * ` + tempOutput,\r\n }\r\n : {\r\n search: /mat3\\(normalMatrix\\)\\*normalW/g,\r\n replace: `${mat3}(normalMatrix) * ` + tempOutput,\r\n },\r\n { search: /normalW/g, replace: worldNormal.associatedVariableName + \".xyz\" },\r\n { search: /viewDirectionW/g, replace: useParallax ? this.viewDirection.associatedVariableName : `vec3${fSuffix}(0.)` },\r\n tangentReplaceString,\r\n ];\r\n\r\n if (isWebGPU) {\r\n replaceStrings.push({ search: /fragmentInputs.vBumpUV/g, replace: uv.associatedVariableName });\r\n replaceStrings.push({ search: /input.vPositionW/g, replace: worldPosition.associatedVariableName + \".xyz\" });\r\n replaceStrings.push({ search: /uniforms.vTangentSpaceParams/g, replace: uniformPrefix + this._tangentSpaceParameterName });\r\n replaceStrings.push({ search: /var TBN: mat3x3f=mat3x3<f32>\\(input.vTBN0,input.vTBN1,input.vTBN2\\);/g, replace: `var TBN = vTBN;` });\r\n } else {\r\n replaceStrings.push({ search: /vBumpUV/g, replace: uv.associatedVariableName });\r\n replaceStrings.push({ search: /vPositionW/g, replace: worldPosition.associatedVariableName + \".xyz\" });\r\n replaceStrings.push({ search: /vTangentSpaceParams/g, replace: uniformPrefix + this._tangentSpaceParameterName });\r\n }\r\n\r\n state.compilationString += state._emitCodeFromInclude(\"bumpFragment\", comments, {\r\n replaceStrings: replaceStrings,\r\n });\r\n\r\n state.compilationString += state._declareOutput(this.output) + ` = vec4${fSuffix}(${tempOutput}, 0.);\\n`;\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.invertX = ${this.invertX};\\n`;\r\n\r\n codeString += `${this._codeVariableName}.invertY = ${this.invertY};\\n`;\r\n codeString += `${this._codeVariableName}.useParallaxOcclusion = ${this.useParallaxOcclusion};\\n`;\r\n codeString += `${this._codeVariableName}.useObjectSpaceNormalMap = ${this.useObjectSpaceNormalMap};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.invertX = this.invertX;\r\n serializationObject.invertY = this.invertY;\r\n serializationObject.useParallaxOcclusion = this.useParallaxOcclusion;\r\n serializationObject.useObjectSpaceNormalMap = this.useObjectSpaceNormalMap;\r\n\r\n return serializationObject;\r\n }\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.invertX = serializationObject.invertX;\r\n this.invertY = serializationObject.invertY;\r\n this.useParallaxOcclusion = !!serializationObject.useParallaxOcclusion;\r\n this.useObjectSpaceNormalMap = !!serializationObject.useObjectSpaceNormalMap;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.PerturbNormalBlock\", PerturbNormalBlock);\r\n"]}
|
|
1
|
+
{"version":3,"file":"perturbNormalBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/perturbNormalBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { 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 { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport type { TextureBlock } from \"../Dual/textureBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { TBNBlock } from \"./TBNBlock\";\r\n\r\nimport { ShaderLanguage } from \"../../../../Materials/shaderLanguage\";\r\nimport { Constants } from \"../../../../Engines/constants\";\r\n\r\n/**\r\n * Block used to perturb normals based on a normal map\r\n */\r\nexport class PerturbNormalBlock extends NodeMaterialBlock {\r\n private _tangentSpaceParameterName = \"\";\r\n private _tangentCorrectionFactorName = \"\";\r\n private _worldMatrixName = \"\";\r\n\r\n /** Gets or sets a boolean indicating that normal should be inverted on X axis */\r\n @editableInPropertyPage(\"Invert X axis\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true, notifiers: { update: true } })\r\n public invertX = false;\r\n /** Gets or sets a boolean indicating that normal should be inverted on Y axis */\r\n @editableInPropertyPage(\"Invert Y axis\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true, notifiers: { update: true } })\r\n public invertY = false;\r\n /** Gets or sets a boolean indicating that parallax occlusion should be enabled */\r\n @editableInPropertyPage(\"Use parallax occlusion\", PropertyTypeForEdition.Boolean, undefined, { embedded: true })\r\n public useParallaxOcclusion = false;\r\n /** Gets or sets a boolean indicating that sampling mode is in Object space */\r\n @editableInPropertyPage(\"Object Space Mode\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true, notifiers: { update: true } })\r\n public useObjectSpaceNormalMap = false;\r\n\r\n /**\r\n * Create a new PerturbNormalBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n // Vertex\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector4, false);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.Vector4, false);\r\n this.registerInput(\"worldTangent\", NodeMaterialBlockConnectionPointTypes.Vector4, true);\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.Vector2, false);\r\n this.registerInput(\"normalMapColor\", NodeMaterialBlockConnectionPointTypes.Color3, false);\r\n this.registerInput(\"strength\", NodeMaterialBlockConnectionPointTypes.Float, false);\r\n this.registerInput(\"viewDirection\", NodeMaterialBlockConnectionPointTypes.Vector3, true);\r\n this.registerInput(\"parallaxScale\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"parallaxHeight\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\r\n \"TBN\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"TBN\", this, NodeMaterialConnectionPointDirection.Input, TBNBlock, \"TBNBlock\")\r\n );\r\n this.registerInput(\"world\", NodeMaterialBlockConnectionPointTypes.Matrix, true);\r\n\r\n // Fragment\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"uvOffset\", NodeMaterialBlockConnectionPointTypes.Vector2);\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 \"PerturbNormalBlock\";\r\n }\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the world normal input component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the world tangent input component\r\n */\r\n public get worldTangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the uv input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the normal map color input component\r\n */\r\n public get normalMapColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the strength input component\r\n */\r\n public get strength(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the view direction input component\r\n */\r\n public get viewDirection(): NodeMaterialConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n /**\r\n * Gets the parallax scale input component\r\n */\r\n public get parallaxScale(): NodeMaterialConnectionPoint {\r\n return this._inputs[7];\r\n }\r\n\r\n /**\r\n * Gets the parallax height input component\r\n */\r\n public get parallaxHeight(): NodeMaterialConnectionPoint {\r\n return this._inputs[8];\r\n }\r\n\r\n /**\r\n * Gets the TBN input component\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public get TBN(): NodeMaterialConnectionPoint {\r\n return this._inputs[9];\r\n }\r\n\r\n /**\r\n * Gets the World input component\r\n */\r\n public get world(): NodeMaterialConnectionPoint {\r\n return this._inputs[10];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the uv offset output component\r\n */\r\n public get uvOffset(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\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 Promise.all([\r\n import(\"../../../../ShadersWGSL/ShadersInclude/bumpFragment\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions\"),\r\n import(\"../../../../ShadersWGSL/ShadersInclude/bumpFragmentFunctions\"),\r\n ]);\r\n } else {\r\n await Promise.all([\r\n import(\"../../../../Shaders/ShadersInclude/bumpFragment\"),\r\n import(\"../../../../Shaders/ShadersInclude/bumpFragmentMainFunctions\"),\r\n import(\"../../../../Shaders/ShadersInclude/bumpFragmentFunctions\"),\r\n ]);\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n public override prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial) {\r\n const normalSamplerName = (this.normalMapColor.connectedPoint!._ownerBlock as TextureBlock).samplerName;\r\n const useParallax = this.viewDirection.isConnected && ((this.useParallaxOcclusion && normalSamplerName) || (!this.useParallaxOcclusion && this.parallaxHeight.isConnected));\r\n\r\n defines.setValue(\"BUMP\", true);\r\n defines.setValue(\"PARALLAX\", useParallax, true);\r\n defines.setValue(\"PARALLAX_RHS\", nodeMaterial.getScene().useRightHandedSystem, true);\r\n defines.setValue(\"PARALLAXOCCLUSION\", this.useParallaxOcclusion, true);\r\n defines.setValue(\"OBJECTSPACE_NORMALMAP\", this.useObjectSpaceNormalMap, true);\r\n }\r\n\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if (nodeMaterial.getScene()._mirroredCameraPosition) {\r\n effect.setFloat2(this._tangentSpaceParameterName, this.invertX ? 1.0 : -1.0, this.invertY ? 1.0 : -1.0);\r\n } else {\r\n effect.setFloat2(this._tangentSpaceParameterName, this.invertX ? -1.0 : 1.0, this.invertY ? -1.0 : 1.0);\r\n }\r\n\r\n if (mesh) {\r\n effect.setFloat(this._tangentCorrectionFactorName, mesh.getWorldMatrix().determinant() < 0 ? -1 : 1);\r\n\r\n if (this.useObjectSpaceNormalMap && !this.world.isConnected) {\r\n // World default to the mesh world matrix\r\n effect.setMatrix(this._worldMatrixName, mesh.getWorldMatrix());\r\n }\r\n }\r\n }\r\n\r\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!this.uv.isConnected) {\r\n let uvInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"uv\" && additionalFilteringInfo(b));\r\n\r\n if (!uvInput) {\r\n uvInput = new InputBlock(\"uv\");\r\n uvInput.setAsAttribute();\r\n }\r\n uvInput.output.connectTo(this.uv);\r\n }\r\n\r\n if (!this.strength.isConnected) {\r\n const strengthInput = new InputBlock(\"strength\");\r\n strengthInput.value = 1.0;\r\n strengthInput.output.connectTo(this.strength);\r\n }\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const comments = `//${this.name}`;\r\n const uv = this.uv;\r\n const worldPosition = this.worldPosition;\r\n const worldNormal = this.worldNormal;\r\n const worldTangent = this.worldTangent;\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n const mat3 = isWebGPU ? \"mat3x3f\" : \"mat3\";\r\n const fSuffix = isWebGPU ? \"f\" : \"\";\r\n const uniformPrefix = isWebGPU ? \"uniforms.\" : \"\";\r\n const fragmentInputsPrefix = isWebGPU ? \"fragmentInputs.\" : \"\";\r\n\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n this._tangentSpaceParameterName = state._getFreeDefineName(\"tangentSpaceParameter\");\r\n\r\n state._emitUniformFromString(this._tangentSpaceParameterName, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n this._tangentCorrectionFactorName = state._getFreeDefineName(\"tangentCorrectionFactor\");\r\n\r\n state._emitUniformFromString(this._tangentCorrectionFactorName, NodeMaterialBlockConnectionPointTypes.Float);\r\n\r\n this._worldMatrixName = state._getFreeDefineName(\"perturbNormalWorldMatrix\");\r\n\r\n state._emitUniformFromString(this._worldMatrixName, NodeMaterialBlockConnectionPointTypes.Matrix);\r\n\r\n let normalSamplerName = null;\r\n if (this.normalMapColor.connectedPoint) {\r\n normalSamplerName = (this.normalMapColor.connectedPoint._ownerBlock as TextureBlock).samplerName;\r\n }\r\n const useParallax = this.viewDirection.isConnected && ((this.useParallaxOcclusion && normalSamplerName) || (!this.useParallaxOcclusion && this.parallaxHeight.isConnected));\r\n\r\n const replaceForParallaxInfos = !this.parallaxScale.isConnectedToInputBlock\r\n ? \"0.05\"\r\n : this.parallaxScale.connectInputBlock!.isConstant\r\n ? state._emitFloat(this.parallaxScale.connectInputBlock!.value)\r\n : this.parallaxScale.associatedVariableName;\r\n\r\n const replaceForBumpInfos =\r\n this.strength.isConnectedToInputBlock && this.strength.connectInputBlock!.isConstant\r\n ? `\\n#if !defined(NORMALXYSCALE)\\n1.0/\\n#endif\\n${state._emitFloat(this.strength.connectInputBlock!.value)}`\r\n : `\\n#if !defined(NORMALXYSCALE)\\n1.0/\\n#endif\\n${this.strength.associatedVariableName}`;\r\n\r\n if (!isWebGPU) {\r\n state._emitExtension(\"derivatives\", \"#extension GL_OES_standard_derivatives : enable\");\r\n }\r\n\r\n const tangentReplaceString = { search: /defined\\(TANGENT\\)/g, replace: worldTangent.isConnected ? \"defined(TANGENT)\" : \"defined(IGNORE)\" };\r\n const tbnVarying = { search: /varying mat3 vTBN;/g, replace: \"\" };\r\n const normalMatrixReplaceString = { search: isWebGPU ? /uniform normalMatrix: mat4x4f;/g : /uniform mat4 normalMatrix;/g, replace: \"\" };\r\n\r\n const tbn = this.TBN;\r\n if (tbn.isConnected) {\r\n state.compilationString += `\r\n #ifdef TBNBLOCK\r\n ${isWebGPU ? \"var\" : \"mat3\"} vTBN = ${tbn.associatedVariableName};\r\n #endif\r\n `;\r\n } else if (worldTangent.isConnected) {\r\n state.compilationString += `${state._declareLocalVar(\"tbnNormal\", NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(${worldNormal.associatedVariableName}.xyz);\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"tbnTangent\", NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(${worldTangent.associatedVariableName}.xyz);\\n`;\r\n state.compilationString += `${state._declareLocalVar(\"tbnBitangent\", NodeMaterialBlockConnectionPointTypes.Vector3)} = cross(tbnNormal, tbnTangent) * ${uniformPrefix}${this._tangentCorrectionFactorName};\\n`;\r\n state.compilationString += `${isWebGPU ? \"var\" : \"mat3\"} vTBN = ${mat3}(tbnTangent, tbnBitangent, tbnNormal);\\n`;\r\n }\r\n\r\n let replaceStrings = [tangentReplaceString, tbnVarying, normalMatrixReplaceString];\r\n\r\n if (isWebGPU) {\r\n replaceStrings.push({ search: /varying vTBN0: vec3f;/g, replace: \"\" });\r\n replaceStrings.push({ search: /varying vTBN1: vec3f;/g, replace: \"\" });\r\n replaceStrings.push({ search: /varying vTBN2: vec3f;/g, replace: \"\" });\r\n }\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentMainFunctions\", comments, {\r\n replaceStrings: replaceStrings,\r\n });\r\n\r\n const replaceString0 = isWebGPU\r\n ? \"fn parallaxOcclusion(vViewDirCoT: vec3f, vNormalCoT: vec3f, texCoord: vec2f, parallaxScale:f32, bumpSampler: texture_2d<f32>, bumpSamplerSampler: sampler)\"\r\n : \"#define inline\\nvec2 parallaxOcclusion(vec3 vViewDirCoT, vec3 vNormalCoT, vec2 texCoord, float parallaxScale, sampler2D bumpSampler)\";\r\n\r\n const searchExp0 = isWebGPU\r\n ? /fn parallaxOcclusion\\(vViewDirCoT: vec3f,vNormalCoT: vec3f,texCoord: vec2f,parallaxScale: f32\\)/g\r\n : /vec2 parallaxOcclusion\\(vec3 vViewDirCoT,vec3 vNormalCoT,vec2 texCoord,float parallaxScale\\)/g;\r\n\r\n const replaceString1 = isWebGPU\r\n ? \"fn parallaxOffset(viewDir: vec3f, heightScale: f32, height_: f32)\"\r\n : \"vec2 parallaxOffset(vec3 viewDir, float heightScale, float height_)\";\r\n\r\n const searchExp1 = isWebGPU ? /fn parallaxOffset\\(viewDir: vec3f,heightScale: f32\\)/g : /vec2 parallaxOffset\\(vec3 viewDir,float heightScale\\)/g;\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentFunctions\", comments, {\r\n replaceStrings: [\r\n { search: /#include<samplerFragmentDeclaration>\\(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_SAMPLERNAME_,bump\\)/g, replace: \"\" },\r\n { search: /uniform sampler2D bumpSampler;/g, replace: \"\" },\r\n {\r\n search: searchExp0,\r\n replace: replaceString0,\r\n },\r\n { search: searchExp1, replace: replaceString1 },\r\n { search: /texture.+?bumpSampler,.*?vBumpUV\\)\\.w/g, replace: \"height_\" },\r\n ],\r\n });\r\n\r\n const normalRead = isWebGPU ? `textureSample(${normalSamplerName}, ${normalSamplerName + Constants.AUTOSAMPLERSUFFIX}` : `texture2D(${normalSamplerName}`;\r\n\r\n const uvForPerturbNormal = !useParallax || !normalSamplerName ? this.normalMapColor.associatedVariableName : `${normalRead}, ${uv.associatedVariableName} + uvOffset).xyz`;\r\n\r\n const tempOutput = state._getFreeVariableName(\"tempOutput\");\r\n state.compilationString += state._declareLocalVar(tempOutput, NodeMaterialBlockConnectionPointTypes.Vector3) + ` = vec3${fSuffix}(0.);\\n`;\r\n\r\n replaceStrings = [\r\n { search: new RegExp(`texture.+?bumpSampler${isWebGPU ? \"Sampler,fragmentInputs.\" : \",\"}vBumpUV\\\\)`, \"g\"), replace: `${uvForPerturbNormal}` },\r\n {\r\n search: /#define CUSTOM_FRAGMENT_BUMP_FRAGMENT/g,\r\n replace: `${state._declareLocalVar(\"normalMatrix\", NodeMaterialBlockConnectionPointTypes.Matrix)} = toNormalMatrix(${this.world.isConnected ? this.world.associatedVariableName : uniformPrefix + this._worldMatrixName});`,\r\n },\r\n {\r\n search: new RegExp(\r\n `perturbNormal\\\\(TBN,texture.+?bumpSampler${isWebGPU ? \"Sampler,fragmentInputs.\" : \",\"}vBumpUV\\\\+uvOffset\\\\).xyz,${uniformPrefix}vBumpInfos.y\\\\)`,\r\n \"g\"\r\n ),\r\n replace: `perturbNormal(TBN, ${uvForPerturbNormal}, ${uniformPrefix}vBumpInfos.y)`,\r\n },\r\n {\r\n search: /parallaxOcclusion\\(invTBN\\*-viewDirectionW,invTBN\\*normalW,(fragmentInputs\\.)?vBumpUV,(uniforms\\.)?vBumpInfos.z\\)/g,\r\n replace: `parallaxOcclusion((invTBN * -viewDirectionW), (invTBN * normalW), ${fragmentInputsPrefix}vBumpUV, ${uniformPrefix}vBumpInfos.z, ${\r\n isWebGPU\r\n ? useParallax && this.useParallaxOcclusion\r\n ? `${normalSamplerName}, ${normalSamplerName + Constants.AUTOSAMPLERSUFFIX}`\r\n : \"bump, bumpSampler\"\r\n : useParallax && this.useParallaxOcclusion\r\n ? normalSamplerName\r\n : \"bumpSampler\"\r\n })`,\r\n },\r\n {\r\n search: /parallaxOffset\\(invTBN\\*viewDirectionW,vBumpInfos\\.z\\)/g,\r\n replace: `parallaxOffset(invTBN * viewDirectionW, ${uniformPrefix}vBumpInfos.z, ${useParallax ? this.parallaxHeight.associatedVariableName : \"0.\"})`,\r\n },\r\n { search: isWebGPU ? /uniforms.vBumpInfos.y/g : /vBumpInfos.y/g, replace: replaceForBumpInfos },\r\n { search: isWebGPU ? /uniforms.vBumpInfos.z/g : /vBumpInfos.z/g, replace: replaceForParallaxInfos },\r\n { search: /normalW=/g, replace: tempOutput + \" = \" },\r\n isWebGPU\r\n ? {\r\n search: /mat3x3f\\(uniforms\\.normalMatrix\\[0\\].xyz,uniforms\\.normalMatrix\\[1\\]\\.xyz,uniforms\\.normalMatrix\\[2\\].xyz\\)\\*normalW/g,\r\n replace: `${mat3}(normalMatrix[0].xyz, normalMatrix[1].xyz, normalMatrix[2].xyz) * ` + tempOutput,\r\n }\r\n : {\r\n search: /mat3\\(normalMatrix\\)\\*normalW/g,\r\n replace: `${mat3}(normalMatrix) * ` + tempOutput,\r\n },\r\n { search: /normalW/g, replace: worldNormal.associatedVariableName + \".xyz\" },\r\n { search: /viewDirectionW/g, replace: useParallax ? this.viewDirection.associatedVariableName : `vec3${fSuffix}(0.)` },\r\n tangentReplaceString,\r\n ];\r\n\r\n if (isWebGPU) {\r\n replaceStrings.push({ search: /fragmentInputs.vBumpUV/g, replace: uv.associatedVariableName });\r\n replaceStrings.push({ search: /input.vPositionW/g, replace: worldPosition.associatedVariableName + \".xyz\" });\r\n replaceStrings.push({ search: /uniforms.vTangentSpaceParams/g, replace: uniformPrefix + this._tangentSpaceParameterName });\r\n replaceStrings.push({ search: /var TBN: mat3x3f=mat3x3<f32>\\(input.vTBN0,input.vTBN1,input.vTBN2\\);/g, replace: `var TBN = vTBN;` });\r\n } else {\r\n replaceStrings.push({ search: /vBumpUV/g, replace: uv.associatedVariableName });\r\n replaceStrings.push({ search: /vPositionW/g, replace: worldPosition.associatedVariableName + \".xyz\" });\r\n replaceStrings.push({ search: /vTangentSpaceParams/g, replace: uniformPrefix + this._tangentSpaceParameterName });\r\n }\r\n\r\n state.compilationString += state._emitCodeFromInclude(\"bumpFragment\", comments, {\r\n replaceStrings: replaceStrings,\r\n });\r\n\r\n state.compilationString += state._declareOutput(this.output) + ` = vec4${fSuffix}(${tempOutput}, 0.);\\n`;\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.invertX = ${this.invertX};\\n`;\r\n\r\n codeString += `${this._codeVariableName}.invertY = ${this.invertY};\\n`;\r\n codeString += `${this._codeVariableName}.useParallaxOcclusion = ${this.useParallaxOcclusion};\\n`;\r\n codeString += `${this._codeVariableName}.useObjectSpaceNormalMap = ${this.useObjectSpaceNormalMap};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.invertX = this.invertX;\r\n serializationObject.invertY = this.invertY;\r\n serializationObject.useParallaxOcclusion = this.useParallaxOcclusion;\r\n serializationObject.useObjectSpaceNormalMap = this.useObjectSpaceNormalMap;\r\n\r\n return serializationObject;\r\n }\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.invertX = serializationObject.invertX;\r\n this.invertY = serializationObject.invertY;\r\n this.useParallaxOcclusion = !!serializationObject.useParallaxOcclusion;\r\n this.useObjectSpaceNormalMap = !!serializationObject.useObjectSpaceNormalMap;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.PerturbNormalBlock\", PerturbNormalBlock);\r\n"]}
|
|
@@ -65,8 +65,8 @@ export class ScreenSizeBlock extends NodeMaterialBlock {
|
|
|
65
65
|
super._buildBlock(state);
|
|
66
66
|
this._scene = state.sharedData.scene;
|
|
67
67
|
if (state.target === NodeMaterialBlockTargets.Vertex) {
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
state.sharedData.raiseBuildError("ScreenSizeBlock must only be used in a fragment shader");
|
|
69
|
+
return this;
|
|
70
70
|
}
|
|
71
71
|
state.sharedData.bindableBlocks.push(this);
|
|
72
72
|
this._varName = state._getFreeVariableName("screenSize");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screenSizeBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/screenSizeBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,qCAAqC,EAAE,MAAM,mDAAmD,CAAC;AAG1G,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAK3D;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,iBAAiB;IAIlD;;OAEG;IACH,IAAW,sBAAsB;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAE/C,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,qCAAqC,CAAC,OAAO,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAC5G,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,qCAAqC,CAAC,KAAK,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACzG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,qCAAqC,CAAC,KAAK,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAC7G,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,IAAW,EAAE;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,CAAC;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,CAAC;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEe,IAAI,CAAC,MAAc;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAEvC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,gEAAgE;IACtD,YAAY,CAAC,KAA6B,EAAE,OAAe;QACjE,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACtB,IAAI,IAAI,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;YAC7E,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;QAErC,IAAI,KAAK,CAAC,MAAM,KAAK,wBAAwB,CAAC,MAAM,EAAE,CAAC;YACnD,
|
|
1
|
+
{"version":3,"file":"screenSizeBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Fragment/screenSizeBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { ShaderLanguage } from \"../../../../Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to get the screen sizes\r\n */\r\nexport class ScreenSizeBlock extends NodeMaterialBlock {\r\n private _varName: string;\r\n private _scene: Scene;\r\n\r\n /**\r\n * Name of the variable in the shader that holds the screen size\r\n */\r\n public get associatedVariableName(): string {\r\n return this._varName;\r\n }\r\n\r\n /**\r\n * Creates a new ScreenSizeBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\"xy\", NodeMaterialBlockConnectionPointTypes.Vector2, NodeMaterialBlockTargets.Fragment);\r\n this.registerOutput(\"x\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Fragment);\r\n this.registerOutput(\"y\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Fragment);\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 \"ScreenSizeBlock\";\r\n }\r\n\r\n /**\r\n * Gets the xy component\r\n */\r\n public get xy(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the x component\r\n */\r\n public get x(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the y component\r\n */\r\n public get y(): NodeMaterialConnectionPoint {\r\n return this._outputs[2];\r\n }\r\n\r\n public override bind(effect: Effect) {\r\n const engine = this._scene.getEngine();\r\n\r\n effect.setFloat2(this._varName, engine.getRenderWidth(), engine.getRenderHeight());\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected writeOutputs(state: NodeMaterialBuildState, varName: string): string {\r\n let code = \"\";\r\n\r\n for (const output of this._outputs) {\r\n if (output.hasEndpoints) {\r\n code += `${state._declareOutput(output)} = ${varName}.${output.name};\\n`;\r\n }\r\n }\r\n\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n this._scene = state.sharedData.scene;\r\n\r\n if (state.target === NodeMaterialBlockTargets.Vertex) {\r\n state.sharedData.raiseBuildError(\"ScreenSizeBlock must only be used in a fragment shader\");\r\n return this;\r\n }\r\n\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n this._varName = state._getFreeVariableName(\"screenSize\");\r\n state._emitUniformFromString(this._varName, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n const prefix = state.shaderLanguage === ShaderLanguage.WGSL ? \"uniforms.\" : \"\";\r\n state.compilationString += this.writeOutputs(state, prefix + this._varName);\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ScreenSizeBlock\", ScreenSizeBlock);\r\n"]}
|
|
@@ -52,10 +52,10 @@ export declare class GaussianSplattingBlock extends NodeMaterialBlock {
|
|
|
52
52
|
initialize(state: NodeMaterialBuildState): void;
|
|
53
53
|
/**
|
|
54
54
|
* Update defines for shader compilation
|
|
55
|
-
* @param mesh defines the mesh to be rendered
|
|
56
|
-
* @param nodeMaterial defines the node material requesting the update
|
|
57
55
|
* @param defines defines the material defines to update
|
|
56
|
+
* @param nodeMaterial defines the node material requesting the update
|
|
57
|
+
* @param mesh defines the mesh to be rendered
|
|
58
58
|
*/
|
|
59
|
-
prepareDefines(
|
|
59
|
+
prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial, mesh?: AbstractMesh): void;
|
|
60
60
|
protected _buildBlock(state: NodeMaterialBuildState): this | undefined;
|
|
61
61
|
}
|
|
@@ -83,11 +83,14 @@ export class GaussianSplattingBlock extends NodeMaterialBlock {
|
|
|
83
83
|
}
|
|
84
84
|
/**
|
|
85
85
|
* Update defines for shader compilation
|
|
86
|
-
* @param mesh defines the mesh to be rendered
|
|
87
|
-
* @param nodeMaterial defines the node material requesting the update
|
|
88
86
|
* @param defines defines the material defines to update
|
|
87
|
+
* @param nodeMaterial defines the node material requesting the update
|
|
88
|
+
* @param mesh defines the mesh to be rendered
|
|
89
89
|
*/
|
|
90
|
-
prepareDefines(
|
|
90
|
+
prepareDefines(defines, nodeMaterial, mesh) {
|
|
91
|
+
if (!mesh) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
91
94
|
if (mesh.getClassName() == "GaussianSplattingMesh") {
|
|
92
95
|
defines.setValue("SH_DEGREE", mesh.shDegree, true);
|
|
93
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gaussianSplattingBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { 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 { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { VertexBuffer } from \"core/Meshes/buffer\";\r\nimport type { GaussianSplattingMesh } from \"core/Meshes/GaussianSplatting/gaussianSplattingMesh\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\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(\"eyePosition\");\r\n }\r\n /**\r\n * Update defines for shader compilation\r\n * @param mesh defines the mesh to be rendered\r\n * @param nodeMaterial defines the node material requesting the update\r\n * @param defines defines the material defines to update\r\n */\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n if (mesh.getClassName() == \"GaussianSplattingMesh\") {\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(\"eyePosition\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n state.attributes.push(VertexBuffer.PositionKind);\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\";\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 dir: 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 dir = normalize(normWorldRot * (${splatPosition.associatedVariableName}.xyz - eyePosition));\\n`;\r\n }\r\n\r\n state.compilationString += `dir *= vec3${addF}(1.,1.,-1.);\\n`;\r\n state.compilationString += `${state._declareOutput(sh)} = computeSH(splat, dir);\\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}, ${splatPosition.associatedVariableName}, ${splatScaleParameter}, covA, covB, ${world.associatedVariableName}, ${view.associatedVariableName}, ${projection.associatedVariableName}${uniforms});\\n`;\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GaussianSplattingBlock\", GaussianSplattingBlock);\r\n"]}
|
|
1
|
+
{"version":3,"file":"gaussianSplattingBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/GaussianSplatting/gaussianSplattingBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { 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 { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { VertexBuffer } from \"core/Meshes/buffer\";\r\nimport type { GaussianSplattingMesh } from \"core/Meshes/GaussianSplatting/gaussianSplattingMesh\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\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(\"eyePosition\");\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 (mesh.getClassName() == \"GaussianSplattingMesh\") {\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(\"eyePosition\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n state.attributes.push(VertexBuffer.PositionKind);\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\";\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 dir: 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 dir = normalize(normWorldRot * (${splatPosition.associatedVariableName}.xyz - eyePosition));\\n`;\r\n }\r\n\r\n state.compilationString += `dir *= vec3${addF}(1.,1.,-1.);\\n`;\r\n state.compilationString += `${state._declareOutput(sh)} = computeSH(splat, dir);\\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}, ${splatPosition.associatedVariableName}, ${splatScaleParameter}, covA, covB, ${world.associatedVariableName}, ${view.associatedVariableName}, ${projection.associatedVariableName}${uniforms});\\n`;\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GaussianSplattingBlock\", GaussianSplattingBlock);\r\n"]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { NodeMaterial, NodeMaterialDefines } from "../../nodeMaterial.js";
|
|
2
2
|
import { NodeMaterialBlock } from "../../nodeMaterialBlock.js";
|
|
3
3
|
import type { NodeMaterialConnectionPoint } from "../../nodeMaterialBlockConnectionPoint.js";
|
|
4
|
-
import type { AbstractMesh } from "../../../../Meshes/abstractMesh.js";
|
|
5
4
|
import type { Mesh } from "../../../../Meshes/mesh.js";
|
|
6
5
|
import type { Effect } from "../../../effect.js";
|
|
7
6
|
import type { NodeMaterialBuildState } from "../../nodeMaterialBuildState.js";
|
|
@@ -70,7 +69,7 @@ export declare class AnisotropyBlock extends NodeMaterialBlock {
|
|
|
70
69
|
* @returns the shader code
|
|
71
70
|
*/
|
|
72
71
|
getCode(state: NodeMaterialBuildState, generateTBNSpace?: boolean): string;
|
|
73
|
-
prepareDefines(
|
|
72
|
+
prepareDefines(defines: NodeMaterialDefines): void;
|
|
74
73
|
bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
|
|
75
74
|
protected _buildBlock(state: NodeMaterialBuildState): this;
|
|
76
75
|
}
|
|
@@ -4,7 +4,6 @@ import { NodeMaterialBlockTargets } from "../../Enums/nodeMaterialBlockTargets.j
|
|
|
4
4
|
import { RegisterClass } from "../../../../Misc/typeStore.js";
|
|
5
5
|
import { NodeMaterialConnectionPointCustomObject } from "../../nodeMaterialConnectionPointCustomObject.js";
|
|
6
6
|
import { TBNBlock } from "../Fragment/TBNBlock.js";
|
|
7
|
-
import { Logger } from "../../../../Misc/logger.js";
|
|
8
7
|
/**
|
|
9
8
|
* Block used to implement the anisotropy module of the PBR material
|
|
10
9
|
*/
|
|
@@ -95,7 +94,7 @@ export class AnisotropyBlock extends NodeMaterialBlock {
|
|
|
95
94
|
// we must set the uv input as optional because we may not end up in this method (in case a PerturbNormal block is linked to the PBR material)
|
|
96
95
|
// in which case uv is not required. But if we do come here, we do need the uv, so we have to raise an error but not with throw, else
|
|
97
96
|
// it will stop the building of the node material and will lead to errors in the editor!
|
|
98
|
-
|
|
97
|
+
state.sharedData.raiseBuildError(`You must connect the 'uv' input of the ${this.name} block!`);
|
|
99
98
|
}
|
|
100
99
|
state._emitExtension("derivatives", "#extension GL_OES_standard_derivatives : enable");
|
|
101
100
|
const tangentReplaceString = { search: /defined\(TANGENT\)/g, replace: worldTangent.isConnected ? "defined(TANGENT)" : "defined(IGNORE)" };
|
|
@@ -152,8 +151,7 @@ export class AnisotropyBlock extends NodeMaterialBlock {
|
|
|
152
151
|
);\n`;
|
|
153
152
|
return code;
|
|
154
153
|
}
|
|
155
|
-
prepareDefines(
|
|
156
|
-
super.prepareDefines(mesh, nodeMaterial, defines);
|
|
154
|
+
prepareDefines(defines) {
|
|
157
155
|
defines.setValue("ANISOTROPIC", true);
|
|
158
156
|
defines.setValue("ANISOTROPIC_TEXTURE", false, true);
|
|
159
157
|
defines.setValue("ANISOTROPIC_LEGACY", !this.roughness.isConnected);
|