@babylonjs/core 8.24.2 → 8.25.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +1 -1
  2. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -1
  3. package/Engines/Native/nativeShaderProcessors.js +3 -0
  4. package/Engines/Native/nativeShaderProcessors.js.map +1 -1
  5. package/Engines/WebGL/webGL2ShaderProcessors.js +3 -0
  6. package/Engines/WebGL/webGL2ShaderProcessors.js.map +1 -1
  7. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.d.ts +3 -1
  8. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +4 -1
  9. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  10. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +4 -1
  11. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  12. package/Engines/abstractEngine.d.ts +1 -1
  13. package/Engines/abstractEngine.functions.d.ts +2 -2
  14. package/Engines/abstractEngine.functions.js.map +1 -1
  15. package/Engines/abstractEngine.js +2 -2
  16. package/Engines/abstractEngine.js.map +1 -1
  17. package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js +8 -0
  18. package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js.map +1 -1
  19. package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js +16 -0
  20. package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js.map +1 -1
  21. package/FrameGraph/Node/Blocks/inputBlock.js +2 -0
  22. package/FrameGraph/Node/Blocks/inputBlock.js.map +1 -1
  23. package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +2 -1
  24. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +16 -1
  25. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  26. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.d.ts +3 -1
  27. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js +10 -7
  28. package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +1 -1
  29. package/FrameGraph/frameGraph.d.ts +2 -2
  30. package/FrameGraph/frameGraph.js.map +1 -1
  31. package/FrameGraph/frameGraphTextureManager.js +4 -0
  32. package/FrameGraph/frameGraphTextureManager.js.map +1 -1
  33. package/Gizmos/cameraGizmo.js +11 -13
  34. package/Gizmos/cameraGizmo.js.map +1 -1
  35. package/Gizmos/planeDragGizmo.js +21 -13
  36. package/Gizmos/planeDragGizmo.js.map +1 -1
  37. package/Materials/Background/backgroundMaterial.js +1 -1
  38. package/Materials/Background/backgroundMaterial.js.map +1 -1
  39. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +1 -1
  40. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  41. package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js +0 -5
  42. package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js.map +1 -1
  43. package/Materials/Node/nodeMaterial.d.ts +1 -1
  44. package/Materials/Node/nodeMaterial.js +3 -14
  45. package/Materials/Node/nodeMaterial.js.map +1 -1
  46. package/Materials/PBR/pbrBaseMaterial.js +1 -1
  47. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  48. package/Materials/material.d.ts +17 -1
  49. package/Materials/material.js +38 -7
  50. package/Materials/material.js.map +1 -1
  51. package/Materials/materialDefines.d.ts +1 -0
  52. package/Materials/materialDefines.js +1 -0
  53. package/Materials/materialDefines.js.map +1 -1
  54. package/Materials/materialHelper.functions.d.ts +2 -1
  55. package/Materials/materialHelper.functions.js +3 -1
  56. package/Materials/materialHelper.functions.js.map +1 -1
  57. package/Materials/standardMaterial.js +1 -1
  58. package/Materials/standardMaterial.js.map +1 -1
  59. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +3 -10
  60. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  61. package/Meshes/csg2.js +5 -3
  62. package/Meshes/csg2.js.map +1 -1
  63. package/Meshes/linesMesh.d.ts +5 -3
  64. package/Meshes/linesMesh.js +27 -8
  65. package/Meshes/linesMesh.js.map +1 -1
  66. package/Meshes/mesh.vertexData.d.ts +2 -2
  67. package/Meshes/mesh.vertexData.js.map +1 -1
  68. package/Misc/fileTools.d.ts +2 -2
  69. package/Misc/fileTools.js +3 -1
  70. package/Misc/fileTools.js.map +1 -1
  71. package/Misc/khronosTextureContainer2.js +16 -7
  72. package/Misc/khronosTextureContainer2.js.map +1 -1
  73. package/Misc/snapshotRenderingHelper.d.ts +2 -0
  74. package/Misc/snapshotRenderingHelper.js +31 -1
  75. package/Misc/snapshotRenderingHelper.js.map +1 -1
  76. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +6 -3
  77. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  78. package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.js +1 -0
  79. package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.js.map +1 -1
  80. package/Rendering/objectRenderer.d.ts +14 -2
  81. package/Rendering/objectRenderer.js +54 -28
  82. package/Rendering/objectRenderer.js.map +1 -1
  83. package/Shaders/pbr.vertex.js +1 -5
  84. package/Shaders/pbr.vertex.js.map +1 -1
  85. package/Shaders/ssao2.fragment.js +14 -2
  86. package/Shaders/ssao2.fragment.js.map +1 -1
  87. package/ShadersWGSL/ssao2.fragment.js +14 -2
  88. package/ShadersWGSL/ssao2.fragment.js.map +1 -1
  89. package/Sprites/spriteManager.d.ts +5 -0
  90. package/Sprites/spriteManager.js +6 -0
  91. package/Sprites/spriteManager.js.map +1 -1
  92. package/Sprites/spriteRenderer.d.ts +5 -2
  93. package/Sprites/spriteRenderer.js.map +1 -1
  94. package/XR/features/WebXRDepthSensing.js +4 -2
  95. package/XR/features/WebXRDepthSensing.js.map +1 -1
  96. package/package.json +1 -1
  97. package/scene.js +5 -2
  98. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"smartFilterTextureBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Dual/smartFilterTextureBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\nimport { CurrentScreenBlock } from \"./currentScreenBlock\";\nimport { RegisterClass } from \"core/Misc/typeStore\";\nimport { InputBlock } from \"../Input/inputBlock\";\nimport type { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\nimport type { NodeMaterial } from \"../../nodeMaterial\";\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"core/Decorators/nodeDecorator\";\nimport type { Scene } from \"core/scene\";\nimport { SfeModeDefine } from \"../Fragment/smartFilterFragmentOutputBlock\";\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\n\n/**\n * Base block used for creating Smart Filter shader blocks for the SFE framework.\n * This block extends the functionality of CurrentScreenBlock, as both are used\n * to represent arbitrary 2D textures to compose, and work similarly.\n */\nexport class SmartFilterTextureBlock extends CurrentScreenBlock {\n private _firstInit: boolean = true;\n\n /**\n * A boolean indicating whether this block should be the main input for the SFE pipeline.\n * If true, it can be used in SFE for auto-disabling.\n */\n @editableInPropertyPage(\"Is Main Input\", PropertyTypeForEdition.Boolean, undefined, { notifiers: { rebuild: true } })\n public isMainInput: boolean = false;\n\n /**\n * Create a new SmartFilterTextureBlock\n * @param name defines the block name\n */\n public constructor(name: string) {\n super(name);\n }\n\n /**\n * Gets the current class name\n * @returns the class name\n */\n public override getClassName() {\n return \"SmartFilterTextureBlock\";\n }\n\n /**\n * Initialize the block and prepare the context for build\n * @param state defines the state that will be used for the build\n */\n public override initialize(state: NodeMaterialBuildState) {\n if (this._firstInit) {\n this._samplerName = state._getFreeVariableName(this.name);\n this._firstInit = false;\n }\n }\n\n protected override _getMainUvName(state: NodeMaterialBuildState): string {\n // Get the ScreenUVBlock's name, which is required for SFE and should be vUV.\n // NOTE: In the future, when we move to vertex shaders, update this to check for the nearest vec2 varying output.\n const screenUv = state.sharedData.nodeMaterial.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"postprocess_uv\");\n if (!screenUv || !screenUv.isAnAncestorOf(this)) {\n state.sharedData.raiseBuildError(\"SmartFilterTextureBlock: 'postprocess_uv' attribute from ScreenUVBlock is required.\");\n return \"\";\n }\n return screenUv.associatedVariableName;\n }\n\n protected override _emitUvAndSampler(state: NodeMaterialBuildState): void {\n if (state.target === NodeMaterialBlockTargets.Fragment) {\n // Wrap the varying in a define, as it won't be needed in SFE.\n state._emitVaryingFromString(this._mainUVName, NodeMaterialBlockConnectionPointTypes.Vector2, SfeModeDefine, true);\n\n // Append `// main` to denote this as the main input texture to composite\n const annotation = this.isMainInput ? \"// main\" : undefined;\n state._emit2DSampler(this._samplerName, undefined, undefined, annotation);\n }\n }\n\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\n if (!this.uv.isConnected) {\n let uvInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"postprocess_uv\" && additionalFilteringInfo(b));\n\n if (!uvInput) {\n uvInput = new InputBlock(\"uv\");\n uvInput.setAsAttribute(\"postprocess_uv\");\n }\n uvInput.output.connectTo(this.uv);\n }\n }\n\n public override _postBuildBlock(): void {\n this._firstInit = true;\n }\n\n public override serialize(): any {\n const serializationObject = super.serialize();\n serializationObject.isMainInput = this.isMainInput;\n return serializationObject;\n }\n\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\n super._deserialize(serializationObject, scene, rootUrl);\n this.isMainInput = serializationObject.isMainInput;\n }\n}\n\nRegisterClass(\"BABYLON.SmartFilterTextureBlock\", SmartFilterTextureBlock);\n"]}
1
+ {"version":3,"file":"smartFilterTextureBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Dual/smartFilterTextureBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\nimport { CurrentScreenBlock } from \"./currentScreenBlock\";\nimport { RegisterClass } from \"core/Misc/typeStore\";\nimport { InputBlock } from \"../Input/inputBlock\";\nimport type { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\nimport type { NodeMaterial } from \"../../nodeMaterial\";\nimport type { Scene } from \"core/scene\";\nimport { SfeModeDefine } from \"../Fragment/smartFilterFragmentOutputBlock\";\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\n\n/**\n * Base block used for creating Smart Filter shader blocks for the SFE framework.\n * This block extends the functionality of CurrentScreenBlock, as both are used\n * to represent arbitrary 2D textures to compose, and work similarly.\n */\nexport class SmartFilterTextureBlock extends CurrentScreenBlock {\n private _firstInit: boolean = true;\n\n /**\n * A boolean indicating whether this block should be the main input for the SFE pipeline.\n * If true, it can be used in SFE for auto-disabling.\n */\n public isMainInput: boolean = false;\n\n /**\n * Create a new SmartFilterTextureBlock\n * @param name defines the block name\n */\n public constructor(name: string) {\n super(name);\n }\n\n /**\n * Gets the current class name\n * @returns the class name\n */\n public override getClassName() {\n return \"SmartFilterTextureBlock\";\n }\n\n /**\n * Initialize the block and prepare the context for build\n * @param state defines the state that will be used for the build\n */\n public override initialize(state: NodeMaterialBuildState) {\n if (this._firstInit) {\n this._samplerName = state._getFreeVariableName(this.name);\n this._firstInit = false;\n }\n }\n\n protected override _getMainUvName(state: NodeMaterialBuildState): string {\n // Get the ScreenUVBlock's name, which is required for SFE and should be vUV.\n // NOTE: In the future, when we move to vertex shaders, update this to check for the nearest vec2 varying output.\n const screenUv = state.sharedData.nodeMaterial.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"postprocess_uv\");\n if (!screenUv || !screenUv.isAnAncestorOf(this)) {\n state.sharedData.raiseBuildError(\"SmartFilterTextureBlock: 'postprocess_uv' attribute from ScreenUVBlock is required.\");\n return \"\";\n }\n return screenUv.associatedVariableName;\n }\n\n protected override _emitUvAndSampler(state: NodeMaterialBuildState): void {\n if (state.target === NodeMaterialBlockTargets.Fragment) {\n // Wrap the varying in a define, as it won't be needed in SFE.\n state._emitVaryingFromString(this._mainUVName, NodeMaterialBlockConnectionPointTypes.Vector2, SfeModeDefine, true);\n\n // Append `// main` to denote this as the main input texture to composite\n const annotation = this.isMainInput ? \"// main\" : undefined;\n state._emit2DSampler(this._samplerName, undefined, undefined, annotation);\n }\n }\n\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\n if (!this.uv.isConnected) {\n let uvInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"postprocess_uv\" && additionalFilteringInfo(b));\n\n if (!uvInput) {\n uvInput = new InputBlock(\"uv\");\n uvInput.setAsAttribute(\"postprocess_uv\");\n }\n uvInput.output.connectTo(this.uv);\n }\n }\n\n public override _postBuildBlock(): void {\n this._firstInit = true;\n }\n\n public override serialize(): any {\n const serializationObject = super.serialize();\n serializationObject.isMainInput = this.isMainInput;\n return serializationObject;\n }\n\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\n super._deserialize(serializationObject, scene, rootUrl);\n this.isMainInput = serializationObject.isMainInput;\n }\n}\n\nRegisterClass(\"BABYLON.SmartFilterTextureBlock\", SmartFilterTextureBlock);\n"]}
@@ -26,7 +26,7 @@ import { NodeMaterialModes } from "./Enums/nodeMaterialModes.js";
26
26
  import type { IParticleSystem } from "../../Particles/IParticleSystem.js";
27
27
  import { ProceduralTexture } from "../Textures/Procedurals/proceduralTexture.js";
28
28
  import type { ImageSourceBlock } from "./Blocks/Dual/imageSourceBlock.js";
29
- import type { Material } from "../material.js";
29
+ import { Material } from "../material.js";
30
30
  import type { TriPlanarBlock } from "./Blocks/triPlanarBlock.js";
31
31
  import type { BiPlanarBlock } from "./Blocks/biPlanarBlock.js";
32
32
  import type { PrePassRenderer } from "../../Rendering/prePassRenderer.js";
@@ -39,6 +39,7 @@ import { AnimatedInputBlockTypes } from "./Blocks/Input/animatedInputBlockTypes.
39
39
  import { TrigonometryBlock, TrigonometryBlockOperations } from "./Blocks/trigonometryBlock.js";
40
40
  import { NodeMaterialSystemValues } from "./Enums/nodeMaterialSystemValues.js";
41
41
  import { EngineStore } from "../../Engines/engineStore.js";
42
+ import { Material } from "../material.js";
42
43
  import { Logger } from "../../Misc/logger.js";
43
44
  import { PrepareDefinesForCamera, PrepareDefinesForPrePass } from "../materialHelper.functions.js";
44
45
  import { AbstractEngine } from "../../Engines/abstractEngine.js";
@@ -1752,7 +1753,6 @@ export class NodeMaterial extends PushMaterial {
1752
1753
  serialize(selectedBlocks) {
1753
1754
  const serializationObject = selectedBlocks ? {} : SerializationHelper.Serialize(this);
1754
1755
  serializationObject.editorData = JSON.parse(JSON.stringify(this.editorData)); // Copy
1755
- serializationObject.alphaMode = this._alphaMode;
1756
1756
  let blocks = [];
1757
1757
  if (selectedBlocks) {
1758
1758
  blocks = selectedBlocks;
@@ -1886,19 +1886,7 @@ export class NodeMaterial extends PushMaterial {
1886
1886
  }
1887
1887
  this.editorData.map = blockMap;
1888
1888
  }
1889
- this.comment = source.comment;
1890
- if (source.forceAlphaBlending !== undefined) {
1891
- this.forceAlphaBlending = source.forceAlphaBlending;
1892
- }
1893
- if (source.alphaMode !== undefined) {
1894
- this.alphaMode = source.alphaMode;
1895
- }
1896
- if (!Array.isArray(source.alphaMode)) {
1897
- this._alphaMode = [source.alphaMode ?? 2];
1898
- }
1899
- else {
1900
- this._alphaMode = source.alphaMode;
1901
- }
1889
+ Material.ParseAlphaMode(source, this);
1902
1890
  if (!merge) {
1903
1891
  this._mode = source.mode ?? NodeMaterialModes.Material;
1904
1892
  }
@@ -1911,6 +1899,7 @@ export class NodeMaterial extends PushMaterial {
1911
1899
  * @deprecated Please use the parseSerializedObject method instead
1912
1900
  */
1913
1901
  loadFromSerialization(source, rootUrl = "", merge = false) {
1902
+ SerializationHelper.ParseProperties(source, this, this.getScene(), rootUrl);
1914
1903
  this.parseSerializedObject(source, rootUrl, merge);
1915
1904
  }
1916
1905
  /**