@babylonjs/core 9.13.0 → 9.15.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.
Files changed (237) hide show
  1. package/Animations/animationGroup.d.ts +0 -1
  2. package/Animations/animationGroup.js +0 -1
  3. package/Animations/animationGroup.js.map +1 -1
  4. package/Animations/animationGroup.pure.js +2 -0
  5. package/Animations/animationGroup.pure.js.map +1 -1
  6. package/Animations/runtimeAnimation.js +11 -0
  7. package/Animations/runtimeAnimation.js.map +1 -1
  8. package/AudioV2/abstractAudio/abstractSound.d.ts +2 -1
  9. package/AudioV2/abstractAudio/abstractSound.js +3 -2
  10. package/AudioV2/abstractAudio/abstractSound.js.map +1 -1
  11. package/AudioV2/abstractAudio/abstractSoundInstance.d.ts +1 -1
  12. package/AudioV2/abstractAudio/abstractSoundInstance.js.map +1 -1
  13. package/AudioV2/abstractAudio/staticSound.d.ts +6 -0
  14. package/AudioV2/abstractAudio/staticSound.js +9 -1
  15. package/AudioV2/abstractAudio/staticSound.js.map +1 -1
  16. package/AudioV2/abstractAudio/streamingSound.d.ts +6 -0
  17. package/AudioV2/abstractAudio/streamingSound.js +9 -1
  18. package/AudioV2/abstractAudio/streamingSound.js.map +1 -1
  19. package/AudioV2/webAudio/webAudioStaticSound.d.ts +1 -1
  20. package/AudioV2/webAudio/webAudioStaticSound.js +6 -3
  21. package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
  22. package/AudioV2/webAudio/webAudioStreamingSound.d.ts +1 -1
  23. package/AudioV2/webAudio/webAudioStreamingSound.js +7 -4
  24. package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
  25. package/Cameras/Inputs/BaseCameraPointersInput.d.ts +2 -1
  26. package/Cameras/Inputs/BaseCameraPointersInput.js +3 -2
  27. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  28. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.d.ts +3 -0
  29. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js +37 -10
  30. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
  31. package/Cameras/Inputs/flyCameraKeyboardInput.js +19 -9
  32. package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
  33. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +21 -18
  34. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
  35. package/Cameras/Inputs/geospatialCameraKeyboardInput.d.ts +2 -0
  36. package/Cameras/Inputs/geospatialCameraKeyboardInput.js +31 -12
  37. package/Cameras/Inputs/geospatialCameraKeyboardInput.js.map +1 -1
  38. package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +11 -1
  39. package/Cameras/Inputs/geospatialCameraPointersInput.js +18 -2
  40. package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
  41. package/Cameras/VR/vrExperienceHelper.d.ts +0 -2
  42. package/Cameras/VR/vrExperienceHelper.js +0 -2
  43. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  44. package/Cameras/VR/vrExperienceHelper.pure.js +5 -0
  45. package/Cameras/VR/vrExperienceHelper.pure.js.map +1 -1
  46. package/Cameras/arcRotateCamera.pure.js +9 -3
  47. package/Cameras/arcRotateCamera.pure.js.map +1 -1
  48. package/Cameras/targetCamera.pure.js +18 -18
  49. package/Cameras/targetCamera.pure.js.map +1 -1
  50. package/Collisions/gpuPicker.js +23 -13
  51. package/Collisions/gpuPicker.js.map +1 -1
  52. package/Engines/Native/nativeInterfaces.d.ts +3 -2
  53. package/Engines/Native/nativeInterfaces.js.map +1 -1
  54. package/Engines/Native/nativeRenderTargetWrapper.d.ts +3 -0
  55. package/Engines/Native/nativeRenderTargetWrapper.js +24 -1
  56. package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
  57. package/Engines/WebGPU/Extensions/engine.videoTexture.pure.js +16 -3
  58. package/Engines/WebGPU/Extensions/engine.videoTexture.pure.js.map +1 -1
  59. package/Engines/WebGPU/webgpuClearQuad.pure.js +7 -1
  60. package/Engines/WebGPU/webgpuClearQuad.pure.js.map +1 -1
  61. package/Engines/abstractEngine.pure.d.ts +8 -1
  62. package/Engines/abstractEngine.pure.js +4 -3
  63. package/Engines/abstractEngine.pure.js.map +1 -1
  64. package/Engines/engine.d.ts +113 -0
  65. package/Engines/thinNativeEngine.pure.d.ts +2 -0
  66. package/Engines/thinNativeEngine.pure.js +115 -9
  67. package/Engines/thinNativeEngine.pure.js.map +1 -1
  68. package/FlowGraph/flowGraph.js +9 -0
  69. package/FlowGraph/flowGraph.js.map +1 -1
  70. package/FlowGraph/flowGraphDataConnection.pure.d.ts +14 -0
  71. package/FlowGraph/flowGraphDataConnection.pure.js +38 -1
  72. package/FlowGraph/flowGraphDataConnection.pure.js.map +1 -1
  73. package/FlowGraph/serialization.d.ts +11 -0
  74. package/FlowGraph/serialization.js +11 -1
  75. package/FlowGraph/serialization.js.map +1 -1
  76. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.d.ts +2 -2
  77. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js +43 -51
  78. package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js.map +1 -1
  79. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.d.ts +0 -1
  80. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.js +0 -1
  81. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.js.map +1 -1
  82. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.d.ts +0 -1
  83. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js +66 -35
  84. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js.map +1 -1
  85. package/Helpers/environmentHelper.js +2 -2
  86. package/Helpers/environmentHelper.js.map +1 -1
  87. package/Lights/Clustered/clusteredLightContainer.pure.d.ts +1 -1
  88. package/Lights/Clustered/clusteredLightContainer.pure.js +15 -2
  89. package/Lights/Clustered/clusteredLightContainer.pure.js.map +1 -1
  90. package/Lights/areaLight.pure.js +5 -0
  91. package/Lights/areaLight.pure.js.map +1 -1
  92. package/Lights/light.d.ts +4 -2
  93. package/Lights/light.js +10 -4
  94. package/Lights/light.js.map +1 -1
  95. package/Lights/rectAreaLight.pure.d.ts +17 -0
  96. package/Lights/rectAreaLight.pure.js +67 -0
  97. package/Lights/rectAreaLight.pure.js.map +1 -1
  98. package/Loading/Plugins/babylonFileLoader.pure.js +4 -4
  99. package/Loading/Plugins/babylonFileLoader.pure.js.map +1 -1
  100. package/Materials/Background/backgroundMaterial.pure.js +3 -1
  101. package/Materials/Background/backgroundMaterial.pure.js.map +1 -1
  102. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.pure.js +2 -2
  103. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.pure.js.map +1 -1
  104. package/Materials/Node/Blocks/PBR/refractionBlock.pure.js +2 -2
  105. package/Materials/Node/Blocks/PBR/refractionBlock.pure.js.map +1 -1
  106. package/Materials/Node/nodeMaterial.pure.js +3 -0
  107. package/Materials/Node/nodeMaterial.pure.js.map +1 -1
  108. package/Materials/Node/nodeMaterialBuildState.d.ts +3 -3
  109. package/Materials/PBR/openpbrMaterial.pure.js +3 -1
  110. package/Materials/PBR/openpbrMaterial.pure.js.map +1 -1
  111. package/Materials/PBR/pbrMaterial.pure.js +3 -0
  112. package/Materials/PBR/pbrMaterial.pure.js.map +1 -1
  113. package/Materials/PBR/pbrMetallicRoughnessMaterial.pure.js +3 -0
  114. package/Materials/PBR/pbrMetallicRoughnessMaterial.pure.js.map +1 -1
  115. package/Materials/PBR/pbrSpecularGlossinessMaterial.pure.js +3 -0
  116. package/Materials/PBR/pbrSpecularGlossinessMaterial.pure.js.map +1 -1
  117. package/Materials/Textures/HTML/htmlInCanvasPolyfill.d.ts +43 -0
  118. package/Materials/Textures/HTML/htmlInCanvasPolyfill.js +64 -0
  119. package/Materials/Textures/HTML/htmlInCanvasPolyfill.js.map +1 -0
  120. package/Materials/Textures/HTML/htmlInteractionManager.d.ts +69 -0
  121. package/Materials/Textures/HTML/htmlInteractionManager.js +130 -0
  122. package/Materials/Textures/HTML/htmlInteractionManager.js.map +1 -0
  123. package/Materials/Textures/HTML/htmlRaycastInteractionManager.d.ts +84 -0
  124. package/Materials/Textures/HTML/htmlRaycastInteractionManager.js +246 -0
  125. package/Materials/Textures/HTML/htmlRaycastInteractionManager.js.map +1 -0
  126. package/Materials/Textures/HTML/htmlTexture.d.ts +148 -0
  127. package/Materials/Textures/HTML/htmlTexture.js +455 -0
  128. package/Materials/Textures/HTML/htmlTexture.js.map +1 -0
  129. package/Materials/Textures/HTML/index.d.ts +4 -0
  130. package/Materials/Textures/HTML/index.js +5 -0
  131. package/Materials/Textures/HTML/index.js.map +1 -0
  132. package/Materials/Textures/HTML/pure.d.ts +5 -0
  133. package/Materials/Textures/HTML/pure.js +6 -0
  134. package/Materials/Textures/HTML/pure.js.map +1 -0
  135. package/Materials/Textures/cubeTexture.d.ts +0 -1
  136. package/Materials/Textures/cubeTexture.js +0 -1
  137. package/Materials/Textures/cubeTexture.js.map +1 -1
  138. package/Materials/Textures/cubeTexture.pure.js +2 -0
  139. package/Materials/Textures/cubeTexture.pure.js.map +1 -1
  140. package/Materials/Textures/dynamicTexture.d.ts +0 -1
  141. package/Materials/Textures/dynamicTexture.js +0 -1
  142. package/Materials/Textures/dynamicTexture.js.map +1 -1
  143. package/Materials/Textures/dynamicTexture.pure.js +2 -0
  144. package/Materials/Textures/dynamicTexture.pure.js.map +1 -1
  145. package/Materials/Textures/htmlElementTexture.d.ts +0 -2
  146. package/Materials/Textures/htmlElementTexture.js +0 -2
  147. package/Materials/Textures/htmlElementTexture.js.map +1 -1
  148. package/Materials/Textures/htmlElementTexture.pure.js +4 -0
  149. package/Materials/Textures/htmlElementTexture.pure.js.map +1 -1
  150. package/Materials/Textures/index.d.ts +1 -0
  151. package/Materials/Textures/index.js +1 -1
  152. package/Materials/Textures/index.js.map +1 -1
  153. package/Materials/Textures/multiRenderTarget.d.ts +0 -1
  154. package/Materials/Textures/multiRenderTarget.js +0 -1
  155. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  156. package/Materials/Textures/multiRenderTarget.pure.js +2 -0
  157. package/Materials/Textures/multiRenderTarget.pure.js.map +1 -1
  158. package/Materials/Textures/pure.d.ts +1 -0
  159. package/Materials/Textures/pure.js +1 -0
  160. package/Materials/Textures/pure.js.map +1 -1
  161. package/Materials/Textures/videoTexture.pure.d.ts +3 -0
  162. package/Materials/Textures/videoTexture.pure.js +30 -0
  163. package/Materials/Textures/videoTexture.pure.js.map +1 -1
  164. package/Materials/standardMaterial.pure.js +3 -1
  165. package/Materials/standardMaterial.pure.js.map +1 -1
  166. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +9 -0
  167. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +12 -0
  168. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
  169. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.d.ts +1 -1
  170. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js +20 -6
  171. package/Meshes/GaussianSplatting/gaussianSplattingSortWorker.js.map +1 -1
  172. package/Misc/decorators.functions.d.ts +7 -0
  173. package/Misc/decorators.functions.js +86 -35
  174. package/Misc/decorators.functions.js.map +1 -1
  175. package/Misc/snapshotRenderingHelper.d.ts +4 -1
  176. package/Misc/snapshotRenderingHelper.js.map +1 -1
  177. package/Misc/symbolMetadataPolyfill.d.ts +11 -0
  178. package/Misc/symbolMetadataPolyfill.js +22 -0
  179. package/Misc/symbolMetadataPolyfill.js.map +1 -0
  180. package/Misc/tools.pure.js +1 -1
  181. package/Misc/tools.pure.js.map +1 -1
  182. package/Particles/gpuParticleSystem.d.ts +0 -1
  183. package/Particles/gpuParticleSystem.js +0 -1
  184. package/Particles/gpuParticleSystem.js.map +1 -1
  185. package/Particles/thinParticleSystem.d.ts +0 -1
  186. package/Particles/thinParticleSystem.js +0 -1
  187. package/Particles/thinParticleSystem.js.map +1 -1
  188. package/Particles/thinParticleSystem.pure.js +2 -0
  189. package/Particles/thinParticleSystem.pure.js.map +1 -1
  190. package/Particles/webgl2ParticleSystem.pure.js +2 -0
  191. package/Particles/webgl2ParticleSystem.pure.js.map +1 -1
  192. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.d.ts +0 -1
  193. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +0 -1
  194. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
  195. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js +7 -0
  196. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js.map +1 -1
  197. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.d.ts +0 -1
  198. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +0 -1
  199. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  200. package/PostProcesses/postProcess.pure.js +5 -0
  201. package/PostProcesses/postProcess.pure.js.map +1 -1
  202. package/PostProcesses/vrMultiviewToSingleviewPostProcess.d.ts +0 -1
  203. package/PostProcesses/vrMultiviewToSingleviewPostProcess.js +0 -1
  204. package/PostProcesses/vrMultiviewToSingleviewPostProcess.js.map +1 -1
  205. package/PostProcesses/vrMultiviewToSingleviewPostProcess.pure.js +2 -0
  206. package/PostProcesses/vrMultiviewToSingleviewPostProcess.pure.js.map +1 -1
  207. package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +0 -2
  208. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +0 -2
  209. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  210. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +5 -0
  211. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
  212. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.d.ts +0 -1
  213. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +0 -1
  214. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
  215. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.d.ts +1 -0
  216. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +34 -0
  217. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
  218. package/Rendering/prePassRenderer.d.ts +0 -2
  219. package/Rendering/prePassRenderer.js +0 -2
  220. package/Rendering/prePassRenderer.js.map +1 -1
  221. package/Rendering/prePassRenderer.pure.js +2 -0
  222. package/Rendering/prePassRenderer.pure.js.map +1 -1
  223. package/Rendering/thinDepthPeelingRenderer.d.ts +0 -1
  224. package/Rendering/thinDepthPeelingRenderer.js +0 -1
  225. package/Rendering/thinDepthPeelingRenderer.js.map +1 -1
  226. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +35 -5
  227. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  228. package/ShadersWGSL/ShadersInclude/helperFunctions.js +2 -2
  229. package/ShadersWGSL/ShadersInclude/helperFunctions.js.map +1 -1
  230. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +39 -7
  231. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  232. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js +4 -3
  233. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js.map +1 -1
  234. package/index.d.ts +1 -0
  235. package/index.js +1 -0
  236. package/index.js.map +1 -1
  237. package/package.json +3 -11
@@ -1 +1 @@
1
- {"version":3,"file":"reflectionTextureBaseBlock.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { type NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { type NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { type BaseTexture } from \"../../../Textures/baseTexture.pure\";\r\nimport { type NodeMaterialDefines, NodeMaterial } from \"../../nodeMaterial.pure\";\r\nimport { type Effect } from \"../../../effect.pure\";\r\nimport { type Mesh } from \"../../../../Meshes/mesh.pure\";\r\nimport { type Nullable } from \"../../../../types\";\r\nimport { type Scene } from \"../../../../scene.pure\";\r\nimport { InputBlock } from \"../Input/inputBlock.pure\";\r\nimport { NodeMaterialSystemValues } from \"../../Enums/nodeMaterialSystemValues\";\r\nimport { Constants } from \"../../../../Engines/constants\";\r\n\r\nimport { CubeTexture } from \"../../../Textures/cubeTexture.pure\";\r\nimport { Texture } from \"../../../Textures/texture.pure\";\r\nimport { EngineStore } from \"../../../../Engines/engineStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { type SubMesh } from \"../../../..//Meshes/subMesh.pure\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\n/**\r\n * Base block used to read a reflection texture from a sampler\r\n */\r\nexport abstract class ReflectionTextureBaseBlock extends NodeMaterialBlock {\r\n /** @internal */\r\n public _define3DName: string;\r\n /** @internal */\r\n public _defineCubicName: string;\r\n /** @internal */\r\n public _defineExplicitName: string;\r\n /** @internal */\r\n public _defineProjectionName: string;\r\n /** @internal */\r\n public _defineLocalCubicName: string;\r\n /** @internal */\r\n public _defineSphericalName: string;\r\n /** @internal */\r\n public _definePlanarName: string;\r\n /** @internal */\r\n public _defineEquirectangularName: string;\r\n /** @internal */\r\n public _defineMirroredEquirectangularFixedName: string;\r\n /** @internal */\r\n public _defineEquirectangularFixedName: string;\r\n /** @internal */\r\n public _defineSkyboxName: string;\r\n /** @internal */\r\n public _defineOppositeZ: string;\r\n /** @internal */\r\n public _cubeSamplerName: string;\r\n /** @internal */\r\n public _2DSamplerName: string;\r\n /** @internal */\r\n public _reflectionPositionName: string;\r\n /** @internal */\r\n public _reflectionSizeName: string;\r\n\r\n protected _positionUVWName: string;\r\n protected _directionWname: string;\r\n protected _reflectionVectorName: string;\r\n /** @internal */\r\n public _reflectionCoordsName: string;\r\n /** @internal */\r\n public _reflectionMatrixName: string;\r\n protected _reflectionColorName: string;\r\n protected _worldPositionNameInFragmentOnlyMode: string;\r\n\r\n protected _texture: Nullable<BaseTexture>;\r\n /**\r\n * Gets or sets the texture associated with the node\r\n */\r\n public get texture(): Nullable<BaseTexture> {\r\n return this._texture;\r\n }\r\n\r\n public set texture(texture: Nullable<BaseTexture>) {\r\n if (this._texture === texture) {\r\n return;\r\n }\r\n\r\n const scene = texture?.getScene() ?? EngineStore.LastCreatedScene;\r\n\r\n if (!texture && scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(this._texture!);\r\n });\r\n }\r\n\r\n this._texture = texture;\r\n\r\n if (texture && scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(texture);\r\n });\r\n }\r\n }\r\n\r\n /** Indicates that no code should be generated in the vertex shader. Can be useful in some specific circumstances (like when doing ray marching for eg) */\r\n @editableInPropertyPage(\"Generate only fragment code\", PropertyTypeForEdition.Boolean, \"ADVANCED\", {\r\n notifiers: { rebuild: true, update: true, onValidation: ReflectionTextureBaseBlock._OnGenerateOnlyFragmentCodeChanged },\r\n })\r\n public generateOnlyFragmentCode = false;\r\n\r\n protected static _OnGenerateOnlyFragmentCodeChanged(block: NodeMaterialBlock, _propertyName: string): boolean {\r\n const that = block as ReflectionTextureBaseBlock;\r\n return that._onGenerateOnlyFragmentCodeChanged();\r\n }\r\n\r\n protected _onGenerateOnlyFragmentCodeChanged(): boolean {\r\n this._setTarget();\r\n return true;\r\n }\r\n\r\n protected _setTarget(): void {\r\n this._setInitialTarget(this.generateOnlyFragmentCode ? NodeMaterialBlockTargets.Fragment : NodeMaterialBlockTargets.VertexAndFragment);\r\n }\r\n\r\n /**\r\n * Create a new ReflectionTextureBaseBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.VertexAndFragment);\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 \"ReflectionTextureBaseBlock\";\r\n }\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public abstract get position(): NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public abstract get worldPosition(): NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * Gets the world normal input component\r\n */\r\n public abstract get worldNormal(): NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * Gets the world input component\r\n */\r\n public abstract get world(): NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * Gets the camera (or eye) position component\r\n */\r\n public abstract get cameraPosition(): NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * Gets the view input component\r\n */\r\n public abstract get view(): NodeMaterialConnectionPoint;\r\n\r\n protected _getTexture(): Nullable<BaseTexture> {\r\n return this.texture;\r\n }\r\n\r\n /**\r\n * Initialize the block\r\n * @param state - the build state\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([import(\"../../../../ShadersWGSL/ShadersInclude/helperFunctions\"), import(\"../../../../ShadersWGSL/ShadersInclude/reflectionFunction\")]);\r\n } else {\r\n await Promise.all([import(\"../../../../Shaders/ShadersInclude/helperFunctions\"), import(\"../../../../Shaders/ShadersInclude/reflectionFunction\")]);\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Auto configure the node based on the existing material\r\n * @param material defines the material to configure\r\n * @param additionalFilteringInfo defines additional info to be used when filtering inputs (we might want to skip some non relevant blocks)\r\n */\r\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!this.position.isConnected) {\r\n let positionInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"position\" && additionalFilteringInfo(b));\r\n\r\n if (!positionInput) {\r\n positionInput = new InputBlock(\"position\");\r\n positionInput.setAsAttribute();\r\n }\r\n positionInput.output.connectTo(this.position);\r\n }\r\n\r\n if (!this.world.isConnected) {\r\n let worldInput = material.getInputBlockByPredicate((b) => b.systemValue === NodeMaterialSystemValues.World && additionalFilteringInfo(b));\r\n\r\n if (!worldInput) {\r\n worldInput = new InputBlock(\"world\");\r\n worldInput.setAsSystemValue(NodeMaterialSystemValues.World);\r\n }\r\n worldInput.output.connectTo(this.world);\r\n }\r\n\r\n if (this.view && !this.view.isConnected) {\r\n let viewInput = material.getInputBlockByPredicate((b) => b.systemValue === NodeMaterialSystemValues.View && additionalFilteringInfo(b));\r\n\r\n if (!viewInput) {\r\n viewInput = new InputBlock(\"view\");\r\n viewInput.setAsSystemValue(NodeMaterialSystemValues.View);\r\n }\r\n viewInput.output.connectTo(this.view);\r\n }\r\n }\r\n\r\n /**\r\n * Prepare the list of defines\r\n * @param defines - the material defines\r\n */\r\n public override prepareDefines(defines: NodeMaterialDefines) {\r\n if (!defines._areTexturesDirty) {\r\n return;\r\n }\r\n\r\n const texture = this._getTexture();\r\n\r\n if (!texture || !texture.getTextureMatrix) {\r\n return;\r\n }\r\n\r\n defines.setValue(this._define3DName, texture.isCube, true);\r\n defines.setValue(this._defineLocalCubicName, (<any>texture).boundingBoxSize ? true : false, true);\r\n defines.setValue(this._defineExplicitName, texture.coordinatesMode === Constants.TEXTURE_EXPLICIT_MODE, true);\r\n defines.setValue(this._defineSkyboxName, texture.coordinatesMode === Constants.TEXTURE_SKYBOX_MODE, true);\r\n defines.setValue(this._defineCubicName, texture.coordinatesMode === Constants.TEXTURE_CUBIC_MODE || texture.coordinatesMode === Constants.TEXTURE_INVCUBIC_MODE, true);\r\n defines.setValue(\"INVERTCUBICMAP\", texture.coordinatesMode === Constants.TEXTURE_INVCUBIC_MODE, true);\r\n defines.setValue(this._defineSphericalName, texture.coordinatesMode === Constants.TEXTURE_SPHERICAL_MODE, true);\r\n defines.setValue(this._definePlanarName, texture.coordinatesMode === Constants.TEXTURE_PLANAR_MODE, true);\r\n defines.setValue(this._defineProjectionName, texture.coordinatesMode === Constants.TEXTURE_PROJECTION_MODE, true);\r\n defines.setValue(this._defineEquirectangularName, texture.coordinatesMode === Constants.TEXTURE_EQUIRECTANGULAR_MODE, true);\r\n defines.setValue(this._defineEquirectangularFixedName, texture.coordinatesMode === Constants.TEXTURE_FIXED_EQUIRECTANGULAR_MODE, true);\r\n defines.setValue(this._defineMirroredEquirectangularFixedName, texture.coordinatesMode === Constants.TEXTURE_FIXED_EQUIRECTANGULAR_MIRRORED_MODE, true);\r\n }\r\n\r\n /**\r\n * Checks if the block is ready\r\n * @returns true if ready\r\n */\r\n public override isReady() {\r\n const texture = this._getTexture();\r\n\r\n if (texture && !texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Bind data to effect\r\n * @param effect - the effect to bind to\r\n * @param nodeMaterial - the node material\r\n * @param mesh - the mesh to bind for\r\n * @param _subMesh - the submesh\r\n */\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh, _subMesh?: SubMesh) {\r\n const texture = this._getTexture();\r\n\r\n if (!mesh || !texture) {\r\n return;\r\n }\r\n\r\n effect.setMatrix(this._reflectionMatrixName, texture.getReflectionTextureMatrix());\r\n\r\n if (texture.isCube) {\r\n effect.setTexture(this._cubeSamplerName, texture);\r\n } else {\r\n effect.setTexture(this._2DSamplerName, texture);\r\n }\r\n\r\n if ((<any>texture).boundingBoxSize) {\r\n const cubeTexture = <CubeTexture>texture;\r\n effect.setVector3(this._reflectionPositionName, cubeTexture.boundingBoxPosition);\r\n effect.setVector3(this._reflectionSizeName, cubeTexture.boundingBoxSize);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the code to inject in the vertex shader\r\n * @param state current state of the node material building\r\n * @returns the shader code\r\n */\r\n public handleVertexSide(state: NodeMaterialBuildState): string {\r\n if (this.generateOnlyFragmentCode && state.target === NodeMaterialBlockTargets.Vertex) {\r\n return \"\";\r\n }\r\n\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n this._define3DName = state._getFreeDefineName(\"REFLECTIONMAP_3D\");\r\n this._defineCubicName = state._getFreeDefineName(\"REFLECTIONMAP_CUBIC\");\r\n this._defineSphericalName = state._getFreeDefineName(\"REFLECTIONMAP_SPHERICAL\");\r\n this._definePlanarName = state._getFreeDefineName(\"REFLECTIONMAP_PLANAR\");\r\n this._defineProjectionName = state._getFreeDefineName(\"REFLECTIONMAP_PROJECTION\");\r\n this._defineExplicitName = state._getFreeDefineName(\"REFLECTIONMAP_EXPLICIT\");\r\n this._defineEquirectangularName = state._getFreeDefineName(\"REFLECTIONMAP_EQUIRECTANGULAR\");\r\n this._defineLocalCubicName = state._getFreeDefineName(\"USE_LOCAL_REFLECTIONMAP_CUBIC\");\r\n this._defineMirroredEquirectangularFixedName = state._getFreeDefineName(\"REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED\");\r\n this._defineEquirectangularFixedName = state._getFreeDefineName(\"REFLECTIONMAP_EQUIRECTANGULAR_FIXED\");\r\n this._defineSkyboxName = state._getFreeDefineName(\"REFLECTIONMAP_SKYBOX\");\r\n this._defineOppositeZ = state._getFreeDefineName(\"REFLECTIONMAP_OPPOSITEZ\");\r\n\r\n this._reflectionMatrixName = state._getFreeVariableName(\"reflectionMatrix\");\r\n\r\n state._emitUniformFromString(this._reflectionMatrixName, NodeMaterialBlockConnectionPointTypes.Matrix);\r\n\r\n let code = \"\";\r\n\r\n this._worldPositionNameInFragmentOnlyMode = state._getFreeVariableName(\"worldPosition\");\r\n\r\n const worldPosVaryingName = this.generateOnlyFragmentCode ? this._worldPositionNameInFragmentOnlyMode : \"v_\" + this.worldPosition.associatedVariableName;\r\n if (this.generateOnlyFragmentCode || state._emitVaryingFromString(worldPosVaryingName, NodeMaterialBlockConnectionPointTypes.Vector4)) {\r\n if (this.generateOnlyFragmentCode) {\r\n code += `${state._declareLocalVar(worldPosVaryingName, NodeMaterialBlockConnectionPointTypes.Vector4)} = ${this.worldPosition.associatedVariableName};\\n`;\r\n } else {\r\n code += `${isWebGPU ? \"vertexOutputs.\" : \"\"}${worldPosVaryingName} = ${this.worldPosition.associatedVariableName};\\n`;\r\n }\r\n }\r\n\r\n this._positionUVWName = state._getFreeVariableName(\"positionUVW\");\r\n this._directionWname = state._getFreeVariableName(\"directionW\");\r\n\r\n if (this.generateOnlyFragmentCode || state._emitVaryingFromString(this._positionUVWName, NodeMaterialBlockConnectionPointTypes.Vector3, this._defineSkyboxName)) {\r\n code += `#ifdef ${this._defineSkyboxName}\\n`;\r\n if (this.generateOnlyFragmentCode) {\r\n code += `${state._declareLocalVar(this._positionUVWName, NodeMaterialBlockConnectionPointTypes.Vector3)} = ${this.position.associatedVariableName}.xyz;\\n`;\r\n } else {\r\n code += `${isWebGPU ? \"vertexOutputs.\" : \"\"}${this._positionUVWName} = ${this.position.associatedVariableName}.xyz;\\n`;\r\n }\r\n code += `#endif\\n`;\r\n }\r\n\r\n if (\r\n this.generateOnlyFragmentCode ||\r\n state._emitVaryingFromString(\r\n this._directionWname,\r\n NodeMaterialBlockConnectionPointTypes.Vector3,\r\n `defined(${this._defineEquirectangularFixedName}) || defined(${this._defineMirroredEquirectangularFixedName})`\r\n )\r\n ) {\r\n code += `#if defined(${this._defineEquirectangularFixedName}) || defined(${this._defineMirroredEquirectangularFixedName})\\n`;\r\n if (this.generateOnlyFragmentCode) {\r\n code += `${state._declareLocalVar(this._directionWname, NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(vec3${state.fSuffix}(${this.world.associatedVariableName} * vec4${state.fSuffix}(${\r\n this.position.associatedVariableName\r\n }.xyz, 0.0)));\\n`;\r\n } else {\r\n code += `${isWebGPU ? \"vertexOutputs.\" : \"\"}${this._directionWname} = normalize(vec3${state.fSuffix}(${this.world.associatedVariableName} * vec4${state.fSuffix}(${\r\n this.position.associatedVariableName\r\n }.xyz, 0.0)));\\n`;\r\n }\r\n code += `#endif\\n`;\r\n }\r\n\r\n return code;\r\n }\r\n\r\n /**\r\n * Handles the inits for the fragment code path\r\n * @param state node material build state\r\n */\r\n public handleFragmentSideInits(state: NodeMaterialBuildState) {\r\n state.sharedData.blockingBlocks.push(this);\r\n state.sharedData.textureBlocks.push(this);\r\n\r\n // Samplers\r\n this._cubeSamplerName = state._getFreeVariableName(this.name + \"CubeSampler\");\r\n state.samplers.push(this._cubeSamplerName);\r\n\r\n this._2DSamplerName = state._getFreeVariableName(this.name + \"2DSampler\");\r\n state.samplers.push(this._2DSamplerName);\r\n\r\n state._samplerDeclaration += `#ifdef ${this._define3DName}\\n`;\r\n state._emitCubeSampler(this._cubeSamplerName, \"\", true);\r\n state._samplerDeclaration += `#else\\n`;\r\n state._emit2DSampler(this._2DSamplerName, \"\", true);\r\n state._samplerDeclaration += `#endif\\n`;\r\n\r\n // Fragment\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n const comments = `//${this.name}`;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n state._emitFunctionFromInclude(\"reflectionFunction\", comments, {\r\n replaceStrings: [\r\n { search: /vec3 computeReflectionCoords/g, replace: \"void DUMMYFUNC\" },\r\n { search: /fn computeReflectionCoords\\(worldPos: vec4f,worldNormal: vec3f\\)->vec3f/g, replace: \"fn DUMMYFUNC()\" },\r\n ],\r\n });\r\n\r\n this._reflectionColorName = state._getFreeVariableName(\"reflectionColor\");\r\n this._reflectionVectorName = state._getFreeVariableName(\"reflectionUVW\");\r\n this._reflectionCoordsName = state._getFreeVariableName(\"reflectionCoords\");\r\n\r\n this._reflectionPositionName = state._getFreeVariableName(\"vReflectionPosition\");\r\n state._emitUniformFromString(this._reflectionPositionName, NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n this._reflectionSizeName = state._getFreeVariableName(\"vReflectionPosition\");\r\n state._emitUniformFromString(this._reflectionSizeName, NodeMaterialBlockConnectionPointTypes.Vector3);\r\n }\r\n\r\n /**\r\n * Generates the reflection coords code for the fragment code path\r\n * @param state defines the build state\r\n * @param worldNormalVarName name of the world normal variable\r\n * @param worldPos name of the world position variable. If not provided, will use the world position connected to this block\r\n * @param onlyReflectionVector if true, generates code only for the reflection vector computation, not for the reflection coordinates\r\n * @param doNotEmitInvertZ if true, does not emit the invertZ code\r\n * @returns the shader code\r\n */\r\n public handleFragmentSideCodeReflectionCoords(\r\n state: NodeMaterialBuildState,\r\n worldNormalVarName: string,\r\n worldPos?: string,\r\n onlyReflectionVector = false,\r\n doNotEmitInvertZ = false\r\n ): string {\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n const reflectionMatrix = (isWebGPU ? \"uniforms.\" : \"\") + this._reflectionMatrixName;\r\n const direction = `normalize(${this._directionWname})`;\r\n const positionUVW = `${this._positionUVWName}`;\r\n const vEyePosition = `${this.cameraPosition.associatedVariableName}`;\r\n const view = `${this.view.associatedVariableName}`;\r\n const fragmentInputsPrefix = isWebGPU ? \"fragmentInputs.\" : \"\";\r\n\r\n if (!worldPos) {\r\n worldPos = this.generateOnlyFragmentCode ? this._worldPositionNameInFragmentOnlyMode : `${fragmentInputsPrefix}v_${this.worldPosition.associatedVariableName}`;\r\n }\r\n\r\n worldNormalVarName += \".xyz\";\r\n\r\n let code = `\r\n #ifdef ${this._defineMirroredEquirectangularFixedName}\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = computeMirroredFixedEquirectangularCoords(${worldPos}, ${worldNormalVarName}, ${direction});\r\n #endif\r\n\r\n #ifdef ${this._defineEquirectangularFixedName}\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = computeFixedEquirectangularCoords(${worldPos}, ${worldNormalVarName}, ${direction});\r\n #endif\r\n\r\n #ifdef ${this._defineEquirectangularName}\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = computeEquirectangularCoords(${worldPos}, ${worldNormalVarName}, ${vEyePosition}.xyz, ${reflectionMatrix});\r\n #endif\r\n\r\n #ifdef ${this._defineSphericalName}\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = computeSphericalCoords(${worldPos}, ${worldNormalVarName}, ${view}, ${reflectionMatrix});\r\n #endif\r\n\r\n #ifdef ${this._definePlanarName}\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = computePlanarCoords(${worldPos}, ${worldNormalVarName}, ${vEyePosition}.xyz, ${reflectionMatrix});\r\n #endif\r\n\r\n #ifdef ${this._defineCubicName}\r\n #ifdef ${this._defineLocalCubicName}\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = computeCubicLocalCoords(${worldPos}, ${worldNormalVarName}, ${vEyePosition}.xyz, ${reflectionMatrix}, ${this._reflectionSizeName}, ${this._reflectionPositionName});\r\n #else\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = computeCubicCoords(${worldPos}, ${worldNormalVarName}, ${vEyePosition}.xyz, ${reflectionMatrix});\r\n #endif\r\n #endif\r\n\r\n #ifdef ${this._defineProjectionName}\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = computeProjectionCoords(${worldPos}, ${view}, ${reflectionMatrix});\r\n #endif\r\n\r\n #ifdef ${this._defineSkyboxName}\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = computeSkyBoxCoords(${positionUVW}, ${reflectionMatrix});\r\n #endif\r\n\r\n #ifdef ${this._defineExplicitName}\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = vec3(0, 0, 0);\r\n #endif\\n`;\r\n\r\n if (!doNotEmitInvertZ) {\r\n code += `#ifdef ${this._defineOppositeZ}\r\n ${this._reflectionVectorName}.z *= -1.0;\r\n #endif\\n`;\r\n }\r\n\r\n if (!onlyReflectionVector) {\r\n code += `\r\n #ifdef ${this._define3DName}\r\n ${state._declareLocalVar(this._reflectionCoordsName, NodeMaterialBlockConnectionPointTypes.Vector3)} = ${this._reflectionVectorName};\r\n #else\r\n ${state._declareLocalVar(this._reflectionCoordsName, NodeMaterialBlockConnectionPointTypes.Vector2)} = ${this._reflectionVectorName}.xy;\r\n #ifdef ${this._defineProjectionName}\r\n ${this._reflectionCoordsName} /= ${this._reflectionVectorName}.z;\r\n #endif\r\n ${this._reflectionCoordsName}.y = 1.0 - ${this._reflectionCoordsName}.y;\r\n #endif\\n`;\r\n }\r\n\r\n return code;\r\n }\r\n\r\n /**\r\n * Generates the reflection color code for the fragment code path\r\n * @param state defines the build state\r\n * @param lodVarName name of the lod variable\r\n * @param swizzleLookupTexture swizzle to use for the final color variable\r\n * @returns the shader code\r\n */\r\n public handleFragmentSideCodeReflectionColor(state: NodeMaterialBuildState, lodVarName?: string, swizzleLookupTexture = \".rgb\"): string {\r\n let colorType = NodeMaterialBlockConnectionPointTypes.Vector4;\r\n\r\n if (swizzleLookupTexture.length === 3) {\r\n colorType = NodeMaterialBlockConnectionPointTypes.Vector3;\r\n }\r\n\r\n let code = `${state._declareLocalVar(this._reflectionColorName, colorType)};\r\n #ifdef ${this._define3DName}\\n`;\r\n\r\n if (lodVarName) {\r\n code += `${this._reflectionColorName} = ${state._generateTextureSampleCubeLOD(this._reflectionVectorName, this._cubeSamplerName, lodVarName)}${swizzleLookupTexture};\\n`;\r\n } else {\r\n code += `${this._reflectionColorName} = ${state._generateTextureSampleCube(this._reflectionVectorName, this._cubeSamplerName)}${swizzleLookupTexture};\\n`;\r\n }\r\n\r\n code += `\r\n #else\\n`;\r\n\r\n if (lodVarName) {\r\n code += `${this._reflectionColorName} =${state._generateTextureSampleLOD(this._reflectionCoordsName, this._2DSamplerName, lodVarName)}${swizzleLookupTexture};\\n`;\r\n } else {\r\n code += `${this._reflectionColorName} = ${state._generateTextureSample(this._reflectionCoordsName, this._2DSamplerName)}${swizzleLookupTexture};\\n`;\r\n }\r\n\r\n code += `#endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n /**\r\n * Generates the code corresponding to the connected output points\r\n * @param state node material build state\r\n * @param varName name of the variable to output\r\n * @returns the shader code\r\n */\r\n public writeOutputs(state: NodeMaterialBuildState, varName: string): string {\r\n let code = \"\";\r\n\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\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\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (!this.texture) {\r\n return codeString;\r\n }\r\n\r\n if (this.texture.isCube) {\r\n const forcedExtension = (this.texture as CubeTexture).forcedExtension;\r\n codeString += `${this._codeVariableName}.texture = new BABYLON.CubeTexture(\"${this.texture.name}\", undefined, undefined, ${\r\n this.texture.noMipmap\r\n }, null, undefined, undefined, undefined, ${this.texture._prefiltered}, ${forcedExtension ? '\"' + forcedExtension + '\"' : \"null\"});\\n`;\r\n } else {\r\n codeString += `${this._codeVariableName}.texture = new BABYLON.Texture(\"${this.texture.name}\", null);\\n`;\r\n }\r\n codeString += `${this._codeVariableName}.texture.coordinatesMode = ${this.texture.coordinatesMode};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @returns the serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n if (this.texture && !this.texture.isRenderTarget) {\r\n serializationObject.texture = this.texture.serialize();\r\n }\r\n\r\n serializationObject.generateOnlyFragmentCode = this.generateOnlyFragmentCode;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root url\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n if (serializationObject.texture && !NodeMaterial.IgnoreTexturesAtLoadTime) {\r\n rootUrl = serializationObject.texture.url.indexOf(\"data:\") === 0 ? \"\" : rootUrl;\r\n if (serializationObject.texture.isCube) {\r\n this.texture = CubeTexture.Parse(serializationObject.texture, scene, rootUrl);\r\n } else {\r\n this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl);\r\n }\r\n }\r\n\r\n this.generateOnlyFragmentCode = serializationObject.generateOnlyFragmentCode;\r\n\r\n this._setTarget();\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for reflectionTextureBaseBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterReflectionTextureBaseBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.ReflectionTextureBaseBlock\", ReflectionTextureBaseBlock);\r\n}\r\n"]}
1
+ {"version":3,"file":"reflectionTextureBaseBlock.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { type NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { type NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { type BaseTexture } from \"../../../Textures/baseTexture.pure\";\r\nimport { type NodeMaterialDefines, NodeMaterial } from \"../../nodeMaterial.pure\";\r\nimport { type Effect } from \"../../../effect.pure\";\r\nimport { type Mesh } from \"../../../../Meshes/mesh.pure\";\r\nimport { type Nullable } from \"../../../../types\";\r\nimport { type Scene } from \"../../../../scene.pure\";\r\nimport { InputBlock } from \"../Input/inputBlock.pure\";\r\nimport { NodeMaterialSystemValues } from \"../../Enums/nodeMaterialSystemValues\";\r\nimport { Constants } from \"../../../../Engines/constants\";\r\n\r\nimport { CubeTextureParse, type CubeTexture } from \"../../../Textures/cubeTexture.pure\";\r\nimport { Texture } from \"../../../Textures/texture.pure\";\r\nimport { EngineStore } from \"../../../../Engines/engineStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { type SubMesh } from \"../../../..//Meshes/subMesh.pure\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\n/**\r\n * Base block used to read a reflection texture from a sampler\r\n */\r\nexport abstract class ReflectionTextureBaseBlock extends NodeMaterialBlock {\r\n /** @internal */\r\n public _define3DName: string;\r\n /** @internal */\r\n public _defineCubicName: string;\r\n /** @internal */\r\n public _defineExplicitName: string;\r\n /** @internal */\r\n public _defineProjectionName: string;\r\n /** @internal */\r\n public _defineLocalCubicName: string;\r\n /** @internal */\r\n public _defineSphericalName: string;\r\n /** @internal */\r\n public _definePlanarName: string;\r\n /** @internal */\r\n public _defineEquirectangularName: string;\r\n /** @internal */\r\n public _defineMirroredEquirectangularFixedName: string;\r\n /** @internal */\r\n public _defineEquirectangularFixedName: string;\r\n /** @internal */\r\n public _defineSkyboxName: string;\r\n /** @internal */\r\n public _defineOppositeZ: string;\r\n /** @internal */\r\n public _cubeSamplerName: string;\r\n /** @internal */\r\n public _2DSamplerName: string;\r\n /** @internal */\r\n public _reflectionPositionName: string;\r\n /** @internal */\r\n public _reflectionSizeName: string;\r\n\r\n protected _positionUVWName: string;\r\n protected _directionWname: string;\r\n protected _reflectionVectorName: string;\r\n /** @internal */\r\n public _reflectionCoordsName: string;\r\n /** @internal */\r\n public _reflectionMatrixName: string;\r\n protected _reflectionColorName: string;\r\n protected _worldPositionNameInFragmentOnlyMode: string;\r\n\r\n protected _texture: Nullable<BaseTexture>;\r\n /**\r\n * Gets or sets the texture associated with the node\r\n */\r\n public get texture(): Nullable<BaseTexture> {\r\n return this._texture;\r\n }\r\n\r\n public set texture(texture: Nullable<BaseTexture>) {\r\n if (this._texture === texture) {\r\n return;\r\n }\r\n\r\n const scene = texture?.getScene() ?? EngineStore.LastCreatedScene;\r\n\r\n if (!texture && scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(this._texture!);\r\n });\r\n }\r\n\r\n this._texture = texture;\r\n\r\n if (texture && scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(texture);\r\n });\r\n }\r\n }\r\n\r\n /** Indicates that no code should be generated in the vertex shader. Can be useful in some specific circumstances (like when doing ray marching for eg) */\r\n @editableInPropertyPage(\"Generate only fragment code\", PropertyTypeForEdition.Boolean, \"ADVANCED\", {\r\n notifiers: { rebuild: true, update: true, onValidation: ReflectionTextureBaseBlock._OnGenerateOnlyFragmentCodeChanged },\r\n })\r\n public generateOnlyFragmentCode = false;\r\n\r\n protected static _OnGenerateOnlyFragmentCodeChanged(block: NodeMaterialBlock, _propertyName: string): boolean {\r\n const that = block as ReflectionTextureBaseBlock;\r\n return that._onGenerateOnlyFragmentCodeChanged();\r\n }\r\n\r\n protected _onGenerateOnlyFragmentCodeChanged(): boolean {\r\n this._setTarget();\r\n return true;\r\n }\r\n\r\n protected _setTarget(): void {\r\n this._setInitialTarget(this.generateOnlyFragmentCode ? NodeMaterialBlockTargets.Fragment : NodeMaterialBlockTargets.VertexAndFragment);\r\n }\r\n\r\n /**\r\n * Create a new ReflectionTextureBaseBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.VertexAndFragment);\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 \"ReflectionTextureBaseBlock\";\r\n }\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public abstract get position(): NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public abstract get worldPosition(): NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * Gets the world normal input component\r\n */\r\n public abstract get worldNormal(): NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * Gets the world input component\r\n */\r\n public abstract get world(): NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * Gets the camera (or eye) position component\r\n */\r\n public abstract get cameraPosition(): NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * Gets the view input component\r\n */\r\n public abstract get view(): NodeMaterialConnectionPoint;\r\n\r\n protected _getTexture(): Nullable<BaseTexture> {\r\n return this.texture;\r\n }\r\n\r\n /**\r\n * Initialize the block\r\n * @param state - the build state\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([import(\"../../../../ShadersWGSL/ShadersInclude/helperFunctions\"), import(\"../../../../ShadersWGSL/ShadersInclude/reflectionFunction\")]);\r\n } else {\r\n await Promise.all([import(\"../../../../Shaders/ShadersInclude/helperFunctions\"), import(\"../../../../Shaders/ShadersInclude/reflectionFunction\")]);\r\n }\r\n\r\n this._codeIsReady = true;\r\n this.onCodeIsReadyObservable.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Auto configure the node based on the existing material\r\n * @param material defines the material to configure\r\n * @param additionalFilteringInfo defines additional info to be used when filtering inputs (we might want to skip some non relevant blocks)\r\n */\r\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!this.position.isConnected) {\r\n let positionInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"position\" && additionalFilteringInfo(b));\r\n\r\n if (!positionInput) {\r\n positionInput = new InputBlock(\"position\");\r\n positionInput.setAsAttribute();\r\n }\r\n positionInput.output.connectTo(this.position);\r\n }\r\n\r\n if (!this.world.isConnected) {\r\n let worldInput = material.getInputBlockByPredicate((b) => b.systemValue === NodeMaterialSystemValues.World && additionalFilteringInfo(b));\r\n\r\n if (!worldInput) {\r\n worldInput = new InputBlock(\"world\");\r\n worldInput.setAsSystemValue(NodeMaterialSystemValues.World);\r\n }\r\n worldInput.output.connectTo(this.world);\r\n }\r\n\r\n if (this.view && !this.view.isConnected) {\r\n let viewInput = material.getInputBlockByPredicate((b) => b.systemValue === NodeMaterialSystemValues.View && additionalFilteringInfo(b));\r\n\r\n if (!viewInput) {\r\n viewInput = new InputBlock(\"view\");\r\n viewInput.setAsSystemValue(NodeMaterialSystemValues.View);\r\n }\r\n viewInput.output.connectTo(this.view);\r\n }\r\n }\r\n\r\n /**\r\n * Prepare the list of defines\r\n * @param defines - the material defines\r\n */\r\n public override prepareDefines(defines: NodeMaterialDefines) {\r\n if (!defines._areTexturesDirty) {\r\n return;\r\n }\r\n\r\n const texture = this._getTexture();\r\n\r\n if (!texture || !texture.getTextureMatrix) {\r\n return;\r\n }\r\n\r\n defines.setValue(this._define3DName, texture.isCube, true);\r\n defines.setValue(this._defineLocalCubicName, (<any>texture).boundingBoxSize ? true : false, true);\r\n defines.setValue(this._defineExplicitName, texture.coordinatesMode === Constants.TEXTURE_EXPLICIT_MODE, true);\r\n defines.setValue(this._defineSkyboxName, texture.coordinatesMode === Constants.TEXTURE_SKYBOX_MODE, true);\r\n defines.setValue(this._defineCubicName, texture.coordinatesMode === Constants.TEXTURE_CUBIC_MODE || texture.coordinatesMode === Constants.TEXTURE_INVCUBIC_MODE, true);\r\n defines.setValue(\"INVERTCUBICMAP\", texture.coordinatesMode === Constants.TEXTURE_INVCUBIC_MODE, true);\r\n defines.setValue(this._defineSphericalName, texture.coordinatesMode === Constants.TEXTURE_SPHERICAL_MODE, true);\r\n defines.setValue(this._definePlanarName, texture.coordinatesMode === Constants.TEXTURE_PLANAR_MODE, true);\r\n defines.setValue(this._defineProjectionName, texture.coordinatesMode === Constants.TEXTURE_PROJECTION_MODE, true);\r\n defines.setValue(this._defineEquirectangularName, texture.coordinatesMode === Constants.TEXTURE_EQUIRECTANGULAR_MODE, true);\r\n defines.setValue(this._defineEquirectangularFixedName, texture.coordinatesMode === Constants.TEXTURE_FIXED_EQUIRECTANGULAR_MODE, true);\r\n defines.setValue(this._defineMirroredEquirectangularFixedName, texture.coordinatesMode === Constants.TEXTURE_FIXED_EQUIRECTANGULAR_MIRRORED_MODE, true);\r\n }\r\n\r\n /**\r\n * Checks if the block is ready\r\n * @returns true if ready\r\n */\r\n public override isReady() {\r\n const texture = this._getTexture();\r\n\r\n if (texture && !texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Bind data to effect\r\n * @param effect - the effect to bind to\r\n * @param nodeMaterial - the node material\r\n * @param mesh - the mesh to bind for\r\n * @param _subMesh - the submesh\r\n */\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh, _subMesh?: SubMesh) {\r\n const texture = this._getTexture();\r\n\r\n if (!mesh || !texture) {\r\n return;\r\n }\r\n\r\n effect.setMatrix(this._reflectionMatrixName, texture.getReflectionTextureMatrix());\r\n\r\n if (texture.isCube) {\r\n effect.setTexture(this._cubeSamplerName, texture);\r\n } else {\r\n effect.setTexture(this._2DSamplerName, texture);\r\n }\r\n\r\n if ((<any>texture).boundingBoxSize) {\r\n const cubeTexture = <CubeTexture>texture;\r\n effect.setVector3(this._reflectionPositionName, cubeTexture.boundingBoxPosition);\r\n effect.setVector3(this._reflectionSizeName, cubeTexture.boundingBoxSize);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the code to inject in the vertex shader\r\n * @param state current state of the node material building\r\n * @returns the shader code\r\n */\r\n public handleVertexSide(state: NodeMaterialBuildState): string {\r\n if (this.generateOnlyFragmentCode && state.target === NodeMaterialBlockTargets.Vertex) {\r\n return \"\";\r\n }\r\n\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n this._define3DName = state._getFreeDefineName(\"REFLECTIONMAP_3D\");\r\n this._defineCubicName = state._getFreeDefineName(\"REFLECTIONMAP_CUBIC\");\r\n this._defineSphericalName = state._getFreeDefineName(\"REFLECTIONMAP_SPHERICAL\");\r\n this._definePlanarName = state._getFreeDefineName(\"REFLECTIONMAP_PLANAR\");\r\n this._defineProjectionName = state._getFreeDefineName(\"REFLECTIONMAP_PROJECTION\");\r\n this._defineExplicitName = state._getFreeDefineName(\"REFLECTIONMAP_EXPLICIT\");\r\n this._defineEquirectangularName = state._getFreeDefineName(\"REFLECTIONMAP_EQUIRECTANGULAR\");\r\n this._defineLocalCubicName = state._getFreeDefineName(\"USE_LOCAL_REFLECTIONMAP_CUBIC\");\r\n this._defineMirroredEquirectangularFixedName = state._getFreeDefineName(\"REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED\");\r\n this._defineEquirectangularFixedName = state._getFreeDefineName(\"REFLECTIONMAP_EQUIRECTANGULAR_FIXED\");\r\n this._defineSkyboxName = state._getFreeDefineName(\"REFLECTIONMAP_SKYBOX\");\r\n this._defineOppositeZ = state._getFreeDefineName(\"REFLECTIONMAP_OPPOSITEZ\");\r\n\r\n this._reflectionMatrixName = state._getFreeVariableName(\"reflectionMatrix\");\r\n\r\n state._emitUniformFromString(this._reflectionMatrixName, NodeMaterialBlockConnectionPointTypes.Matrix);\r\n\r\n let code = \"\";\r\n\r\n this._worldPositionNameInFragmentOnlyMode = state._getFreeVariableName(\"worldPosition\");\r\n\r\n const worldPosVaryingName = this.generateOnlyFragmentCode ? this._worldPositionNameInFragmentOnlyMode : \"v_\" + this.worldPosition.associatedVariableName;\r\n if (this.generateOnlyFragmentCode || state._emitVaryingFromString(worldPosVaryingName, NodeMaterialBlockConnectionPointTypes.Vector4)) {\r\n if (this.generateOnlyFragmentCode) {\r\n code += `${state._declareLocalVar(worldPosVaryingName, NodeMaterialBlockConnectionPointTypes.Vector4)} = ${this.worldPosition.associatedVariableName};\\n`;\r\n } else {\r\n code += `${isWebGPU ? \"vertexOutputs.\" : \"\"}${worldPosVaryingName} = ${this.worldPosition.associatedVariableName};\\n`;\r\n }\r\n }\r\n\r\n this._positionUVWName = state._getFreeVariableName(\"positionUVW\");\r\n this._directionWname = state._getFreeVariableName(\"directionW\");\r\n\r\n if (this.generateOnlyFragmentCode || state._emitVaryingFromString(this._positionUVWName, NodeMaterialBlockConnectionPointTypes.Vector3, this._defineSkyboxName)) {\r\n code += `#ifdef ${this._defineSkyboxName}\\n`;\r\n if (this.generateOnlyFragmentCode) {\r\n code += `${state._declareLocalVar(this._positionUVWName, NodeMaterialBlockConnectionPointTypes.Vector3)} = ${this.position.associatedVariableName}.xyz;\\n`;\r\n } else {\r\n code += `${isWebGPU ? \"vertexOutputs.\" : \"\"}${this._positionUVWName} = ${this.position.associatedVariableName}.xyz;\\n`;\r\n }\r\n code += `#endif\\n`;\r\n }\r\n\r\n if (\r\n this.generateOnlyFragmentCode ||\r\n state._emitVaryingFromString(\r\n this._directionWname,\r\n NodeMaterialBlockConnectionPointTypes.Vector3,\r\n `defined(${this._defineEquirectangularFixedName}) || defined(${this._defineMirroredEquirectangularFixedName})`\r\n )\r\n ) {\r\n code += `#if defined(${this._defineEquirectangularFixedName}) || defined(${this._defineMirroredEquirectangularFixedName})\\n`;\r\n if (this.generateOnlyFragmentCode) {\r\n code += `${state._declareLocalVar(this._directionWname, NodeMaterialBlockConnectionPointTypes.Vector3)} = normalize(vec3${state.fSuffix}(${this.world.associatedVariableName} * vec4${state.fSuffix}(${\r\n this.position.associatedVariableName\r\n }.xyz, 0.0)));\\n`;\r\n } else {\r\n code += `${isWebGPU ? \"vertexOutputs.\" : \"\"}${this._directionWname} = normalize(vec3${state.fSuffix}(${this.world.associatedVariableName} * vec4${state.fSuffix}(${\r\n this.position.associatedVariableName\r\n }.xyz, 0.0)));\\n`;\r\n }\r\n code += `#endif\\n`;\r\n }\r\n\r\n return code;\r\n }\r\n\r\n /**\r\n * Handles the inits for the fragment code path\r\n * @param state node material build state\r\n */\r\n public handleFragmentSideInits(state: NodeMaterialBuildState) {\r\n state.sharedData.blockingBlocks.push(this);\r\n state.sharedData.textureBlocks.push(this);\r\n\r\n // Samplers\r\n this._cubeSamplerName = state._getFreeVariableName(this.name + \"CubeSampler\");\r\n state.samplers.push(this._cubeSamplerName);\r\n\r\n this._2DSamplerName = state._getFreeVariableName(this.name + \"2DSampler\");\r\n state.samplers.push(this._2DSamplerName);\r\n\r\n state._samplerDeclaration += `#ifdef ${this._define3DName}\\n`;\r\n state._emitCubeSampler(this._cubeSamplerName, \"\", true);\r\n state._samplerDeclaration += `#else\\n`;\r\n state._emit2DSampler(this._2DSamplerName, \"\", true);\r\n state._samplerDeclaration += `#endif\\n`;\r\n\r\n // Fragment\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n const comments = `//${this.name}`;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n state._emitFunctionFromInclude(\"reflectionFunction\", comments, {\r\n replaceStrings: [\r\n { search: /vec3 computeReflectionCoords/g, replace: \"void DUMMYFUNC\" },\r\n { search: /fn computeReflectionCoords\\(worldPos: vec4f,worldNormal: vec3f\\)->vec3f/g, replace: \"fn DUMMYFUNC()\" },\r\n ],\r\n });\r\n\r\n this._reflectionColorName = state._getFreeVariableName(\"reflectionColor\");\r\n this._reflectionVectorName = state._getFreeVariableName(\"reflectionUVW\");\r\n this._reflectionCoordsName = state._getFreeVariableName(\"reflectionCoords\");\r\n\r\n this._reflectionPositionName = state._getFreeVariableName(\"vReflectionPosition\");\r\n state._emitUniformFromString(this._reflectionPositionName, NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n this._reflectionSizeName = state._getFreeVariableName(\"vReflectionPosition\");\r\n state._emitUniformFromString(this._reflectionSizeName, NodeMaterialBlockConnectionPointTypes.Vector3);\r\n }\r\n\r\n /**\r\n * Generates the reflection coords code for the fragment code path\r\n * @param state defines the build state\r\n * @param worldNormalVarName name of the world normal variable\r\n * @param worldPos name of the world position variable. If not provided, will use the world position connected to this block\r\n * @param onlyReflectionVector if true, generates code only for the reflection vector computation, not for the reflection coordinates\r\n * @param doNotEmitInvertZ if true, does not emit the invertZ code\r\n * @returns the shader code\r\n */\r\n public handleFragmentSideCodeReflectionCoords(\r\n state: NodeMaterialBuildState,\r\n worldNormalVarName: string,\r\n worldPos?: string,\r\n onlyReflectionVector = false,\r\n doNotEmitInvertZ = false\r\n ): string {\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n const reflectionMatrix = (isWebGPU ? \"uniforms.\" : \"\") + this._reflectionMatrixName;\r\n const direction = `normalize(${this._directionWname})`;\r\n const positionUVW = `${this._positionUVWName}`;\r\n const vEyePosition = `${this.cameraPosition.associatedVariableName}`;\r\n const view = `${this.view.associatedVariableName}`;\r\n const fragmentInputsPrefix = isWebGPU ? \"fragmentInputs.\" : \"\";\r\n\r\n if (!worldPos) {\r\n worldPos = this.generateOnlyFragmentCode ? this._worldPositionNameInFragmentOnlyMode : `${fragmentInputsPrefix}v_${this.worldPosition.associatedVariableName}`;\r\n }\r\n\r\n worldNormalVarName += \".xyz\";\r\n\r\n let code = `\r\n #ifdef ${this._defineMirroredEquirectangularFixedName}\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = computeMirroredFixedEquirectangularCoords(${worldPos}, ${worldNormalVarName}, ${direction});\r\n #endif\r\n\r\n #ifdef ${this._defineEquirectangularFixedName}\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = computeFixedEquirectangularCoords(${worldPos}, ${worldNormalVarName}, ${direction});\r\n #endif\r\n\r\n #ifdef ${this._defineEquirectangularName}\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = computeEquirectangularCoords(${worldPos}, ${worldNormalVarName}, ${vEyePosition}.xyz, ${reflectionMatrix});\r\n #endif\r\n\r\n #ifdef ${this._defineSphericalName}\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = computeSphericalCoords(${worldPos}, ${worldNormalVarName}, ${view}, ${reflectionMatrix});\r\n #endif\r\n\r\n #ifdef ${this._definePlanarName}\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = computePlanarCoords(${worldPos}, ${worldNormalVarName}, ${vEyePosition}.xyz, ${reflectionMatrix});\r\n #endif\r\n\r\n #ifdef ${this._defineCubicName}\r\n #ifdef ${this._defineLocalCubicName}\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = computeCubicLocalCoords(${worldPos}, ${worldNormalVarName}, ${vEyePosition}.xyz, ${reflectionMatrix}, ${this._reflectionSizeName}, ${this._reflectionPositionName});\r\n #else\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = computeCubicCoords(${worldPos}, ${worldNormalVarName}, ${vEyePosition}.xyz, ${reflectionMatrix});\r\n #endif\r\n #endif\r\n\r\n #ifdef ${this._defineProjectionName}\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = computeProjectionCoords(${worldPos}, ${view}, ${reflectionMatrix});\r\n #endif\r\n\r\n #ifdef ${this._defineSkyboxName}\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = computeSkyBoxCoords(${positionUVW}, ${reflectionMatrix});\r\n #endif\r\n\r\n #ifdef ${this._defineExplicitName}\r\n ${state._declareLocalVar(this._reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = vec3(0, 0, 0);\r\n #endif\\n`;\r\n\r\n if (!doNotEmitInvertZ) {\r\n code += `#ifdef ${this._defineOppositeZ}\r\n ${this._reflectionVectorName}.z *= -1.0;\r\n #endif\\n`;\r\n }\r\n\r\n if (!onlyReflectionVector) {\r\n code += `\r\n #ifdef ${this._define3DName}\r\n ${state._declareLocalVar(this._reflectionCoordsName, NodeMaterialBlockConnectionPointTypes.Vector3)} = ${this._reflectionVectorName};\r\n #else\r\n ${state._declareLocalVar(this._reflectionCoordsName, NodeMaterialBlockConnectionPointTypes.Vector2)} = ${this._reflectionVectorName}.xy;\r\n #ifdef ${this._defineProjectionName}\r\n ${this._reflectionCoordsName} /= ${this._reflectionVectorName}.z;\r\n #endif\r\n ${this._reflectionCoordsName}.y = 1.0 - ${this._reflectionCoordsName}.y;\r\n #endif\\n`;\r\n }\r\n\r\n return code;\r\n }\r\n\r\n /**\r\n * Generates the reflection color code for the fragment code path\r\n * @param state defines the build state\r\n * @param lodVarName name of the lod variable\r\n * @param swizzleLookupTexture swizzle to use for the final color variable\r\n * @returns the shader code\r\n */\r\n public handleFragmentSideCodeReflectionColor(state: NodeMaterialBuildState, lodVarName?: string, swizzleLookupTexture = \".rgb\"): string {\r\n let colorType = NodeMaterialBlockConnectionPointTypes.Vector4;\r\n\r\n if (swizzleLookupTexture.length === 3) {\r\n colorType = NodeMaterialBlockConnectionPointTypes.Vector3;\r\n }\r\n\r\n let code = `${state._declareLocalVar(this._reflectionColorName, colorType)};\r\n #ifdef ${this._define3DName}\\n`;\r\n\r\n if (lodVarName) {\r\n code += `${this._reflectionColorName} = ${state._generateTextureSampleCubeLOD(this._reflectionVectorName, this._cubeSamplerName, lodVarName)}${swizzleLookupTexture};\\n`;\r\n } else {\r\n code += `${this._reflectionColorName} = ${state._generateTextureSampleCube(this._reflectionVectorName, this._cubeSamplerName)}${swizzleLookupTexture};\\n`;\r\n }\r\n\r\n code += `\r\n #else\\n`;\r\n\r\n if (lodVarName) {\r\n code += `${this._reflectionColorName} =${state._generateTextureSampleLOD(this._reflectionCoordsName, this._2DSamplerName, lodVarName)}${swizzleLookupTexture};\\n`;\r\n } else {\r\n code += `${this._reflectionColorName} = ${state._generateTextureSample(this._reflectionCoordsName, this._2DSamplerName)}${swizzleLookupTexture};\\n`;\r\n }\r\n\r\n code += `#endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n /**\r\n * Generates the code corresponding to the connected output points\r\n * @param state node material build state\r\n * @param varName name of the variable to output\r\n * @returns the shader code\r\n */\r\n public writeOutputs(state: NodeMaterialBuildState, varName: string): string {\r\n let code = \"\";\r\n\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\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\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (!this.texture) {\r\n return codeString;\r\n }\r\n\r\n if (this.texture.isCube) {\r\n const forcedExtension = (this.texture as CubeTexture).forcedExtension;\r\n codeString += `${this._codeVariableName}.texture = new BABYLON.CubeTexture(\"${this.texture.name}\", undefined, undefined, ${\r\n this.texture.noMipmap\r\n }, null, undefined, undefined, undefined, ${this.texture._prefiltered}, ${forcedExtension ? '\"' + forcedExtension + '\"' : \"null\"});\\n`;\r\n } else {\r\n codeString += `${this._codeVariableName}.texture = new BABYLON.Texture(\"${this.texture.name}\", null);\\n`;\r\n }\r\n codeString += `${this._codeVariableName}.texture.coordinatesMode = ${this.texture.coordinatesMode};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @returns the serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n if (this.texture && !this.texture.isRenderTarget) {\r\n serializationObject.texture = this.texture.serialize();\r\n }\r\n\r\n serializationObject.generateOnlyFragmentCode = this.generateOnlyFragmentCode;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root url\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n if (serializationObject.texture && !NodeMaterial.IgnoreTexturesAtLoadTime) {\r\n rootUrl = serializationObject.texture.url.indexOf(\"data:\") === 0 ? \"\" : rootUrl;\r\n if (serializationObject.texture.isCube) {\r\n this.texture = CubeTextureParse(serializationObject.texture, scene, rootUrl);\r\n } else {\r\n this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl);\r\n }\r\n }\r\n\r\n this.generateOnlyFragmentCode = serializationObject.generateOnlyFragmentCode;\r\n\r\n this._setTarget();\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for reflectionTextureBaseBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterReflectionTextureBaseBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.ReflectionTextureBaseBlock\", ReflectionTextureBaseBlock);\r\n}\r\n"]}
@@ -6,7 +6,7 @@ import { InputBlock } from "../Input/inputBlock.pure.js";
6
6
  import { NodeMaterialConnectionPointCustomObject } from "../../nodeMaterialConnectionPointCustomObject.js";
7
7
  import { editableInPropertyPage } from "../../../../Decorators/nodeDecorator.js";
8
8
  import { NodeMaterialBlock } from "../../nodeMaterialBlock.js";
9
- import { CubeTexture } from "../../../Textures/cubeTexture.pure.js";
9
+ import { CubeTextureParse } from "../../../Textures/cubeTexture.pure.js";
10
10
  import { Texture } from "../../../Textures/texture.pure.js";
11
11
  import { NodeMaterialSystemValues } from "../../Enums/nodeMaterialSystemValues.js";
12
12
  import { RegisterClass } from "../../../../Misc/typeStore.js";
@@ -284,7 +284,7 @@ export class RefractionBlock extends NodeMaterialBlock {
284
284
  if (serializationObject.texture) {
285
285
  rootUrl = serializationObject.texture.url.indexOf("data:") === 0 ? "" : rootUrl;
286
286
  if (serializationObject.texture.isCube) {
287
- this.texture = CubeTexture.Parse(serializationObject.texture, scene, rootUrl);
287
+ this.texture = CubeTextureParse(serializationObject.texture, scene, rootUrl);
288
288
  }
289
289
  else {
290
290
  this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl);
@@ -1 +1 @@
1
- {"version":3,"file":"refractionBlock.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/refractionBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { type NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { type NodeMaterialConnectionPoint, NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { type NodeMaterial, type NodeMaterialDefines } from \"../../nodeMaterial.pure\";\r\nimport { InputBlock } from \"../Input/inputBlock.pure\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { type Nullable } from \"../../../../types\";\r\nimport { type BaseTexture } from \"../../../Textures/baseTexture.pure\";\r\nimport { type Mesh } from \"../../../../Meshes/mesh.pure\";\r\nimport { type Effect } from \"../../../effect.pure\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { type Scene } from \"../../../../scene.pure\";\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { CubeTexture } from \"../../../Textures/cubeTexture.pure\";\r\nimport { Texture } from \"../../../Textures/texture.pure\";\r\nimport { NodeMaterialSystemValues } from \"../../Enums/nodeMaterialSystemValues\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\n/**\r\n * Block used to implement the refraction part of the sub surface module of the PBR material\r\n */\r\nexport class RefractionBlock extends NodeMaterialBlock {\r\n /** @internal */\r\n public _define3DName: string;\r\n /** @internal */\r\n public _refractionMatrixName: string;\r\n /** @internal */\r\n public _defineLODRefractionAlpha: string;\r\n /** @internal */\r\n public _defineLinearSpecularRefraction: string;\r\n /** @internal */\r\n public _defineOppositeZ: string;\r\n /** @internal */\r\n public _cubeSamplerName: string;\r\n /** @internal */\r\n public _2DSamplerName: string;\r\n /** @internal */\r\n public _vRefractionMicrosurfaceInfosName: string;\r\n /** @internal */\r\n public _vRefractionInfosName: string;\r\n /** @internal */\r\n public _vRefractionFilteringInfoName: string;\r\n\r\n private _scene: Scene;\r\n\r\n /**\r\n * The properties below are set by the main PBR block prior to calling methods of this class.\r\n * This is to avoid having to add them as inputs here whereas they are already inputs of the main block, so already known.\r\n * It's less burden on the user side in the editor part.\r\n */\r\n\r\n /** @internal */\r\n public viewConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /** @internal */\r\n public indexOfRefractionConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * This parameters will make the material used its opacity to control how much it is refracting against not.\r\n * Materials half opaque for instance using refraction could benefit from this control.\r\n */\r\n @editableInPropertyPage(\"Link refraction to transparency\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { update: true } })\r\n public linkRefractionWithTransparency: boolean = false;\r\n\r\n /**\r\n * Controls if refraction needs to be inverted on Y. This could be useful for procedural texture.\r\n */\r\n @editableInPropertyPage(\"Invert refraction Y\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { update: true } })\r\n public invertRefractionY: boolean = false;\r\n\r\n /**\r\n * Controls if refraction needs to be inverted on Y. This could be useful for procedural texture.\r\n */\r\n @editableInPropertyPage(\"Use thickness as depth\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { update: true } })\r\n public useThicknessAsDepth: boolean = false;\r\n\r\n /**\r\n * Gets or sets the texture associated with the node\r\n */\r\n public texture: Nullable<BaseTexture>;\r\n\r\n /**\r\n * Create a new RefractionBlock\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 this.registerInput(\"intensity\", NodeMaterialBlockConnectionPointTypes.Float, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"tintAtDistance\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"volumeIndexOfRefraction\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"refraction\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"refraction\", this, NodeMaterialConnectionPointDirection.Output, RefractionBlock, \"RefractionBlock\")\r\n );\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(\"vRefractionPosition\");\r\n state._excludeVariableName(\"vRefractionSize\");\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 \"RefractionBlock\";\r\n }\r\n\r\n /**\r\n * Gets the intensity input component\r\n */\r\n public get intensity(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the tint at distance input component\r\n */\r\n public get tintAtDistance(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the volume index of refraction input component\r\n */\r\n public get volumeIndexOfRefraction(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the view input component\r\n */\r\n public get view(): NodeMaterialConnectionPoint {\r\n return this.viewConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the refraction object output component\r\n */\r\n public get refraction(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Returns true if the block has a texture\r\n */\r\n public get hasTexture(): boolean {\r\n return !!this._getTexture();\r\n }\r\n\r\n protected _getTexture(): Nullable<BaseTexture> {\r\n if (this.texture) {\r\n return this.texture;\r\n }\r\n\r\n return this._scene.environmentTexture;\r\n }\r\n\r\n /**\r\n * Auto configure the block based on the material\r\n * @param material - the node material\r\n * @param additionalFilteringInfo - additional filtering info\r\n */\r\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!this.intensity.isConnected) {\r\n const intensityInput = new InputBlock(\"Refraction intensity\", NodeMaterialBlockTargets.Fragment, NodeMaterialBlockConnectionPointTypes.Float);\r\n intensityInput.value = 1;\r\n intensityInput.output.connectTo(this.intensity);\r\n }\r\n\r\n if (this.view && !this.view.isConnected) {\r\n let viewInput = material.getInputBlockByPredicate((b) => b.systemValue === NodeMaterialSystemValues.View && additionalFilteringInfo(b));\r\n\r\n if (!viewInput) {\r\n viewInput = new InputBlock(\"view\");\r\n viewInput.setAsSystemValue(NodeMaterialSystemValues.View);\r\n }\r\n viewInput.output.connectTo(this.view);\r\n }\r\n }\r\n\r\n /**\r\n * Prepare the list of defines\r\n * @param defines - the list of defines\r\n */\r\n public override prepareDefines(defines: NodeMaterialDefines) {\r\n const refractionTexture = this._getTexture();\r\n const refraction = refractionTexture && refractionTexture.getTextureMatrix;\r\n\r\n defines.setValue(\"SS_REFRACTION\", refraction, true);\r\n\r\n if (!refraction) {\r\n return;\r\n }\r\n\r\n defines.setValue(this._define3DName, refractionTexture.isCube, true);\r\n defines.setValue(this._defineLODRefractionAlpha, refractionTexture.lodLevelInAlpha, true);\r\n defines.setValue(this._defineLinearSpecularRefraction, refractionTexture.linearSpecularLOD, true);\r\n defines.setValue(this._defineOppositeZ, this._scene.useRightHandedSystem && refractionTexture.isCube ? !refractionTexture.invertZ : refractionTexture.invertZ, true);\r\n\r\n defines.setValue(\"SS_LINKREFRACTIONTOTRANSPARENCY\", this.linkRefractionWithTransparency, true);\r\n defines.setValue(\"SS_GAMMAREFRACTION\", refractionTexture.gammaSpace, true);\r\n defines.setValue(\"SS_RGBDREFRACTION\", refractionTexture.isRGBD, true);\r\n defines.setValue(\"SS_USE_LOCAL_REFRACTIONMAP_CUBIC\", (<any>refractionTexture).boundingBoxSize ? true : false, true);\r\n defines.setValue(\"SS_USE_THICKNESS_AS_DEPTH\", this.useThicknessAsDepth, true);\r\n }\r\n\r\n /**\r\n * Checks if the block is ready\r\n * @returns true if ready\r\n */\r\n public override isReady() {\r\n const texture = this._getTexture();\r\n\r\n if (texture && !texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Bind data to effect\r\n * @param effect - the effect to bind to\r\n * @param nodeMaterial - the node material\r\n * @param mesh - the mesh\r\n */\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n super.bind(effect, nodeMaterial, mesh);\r\n\r\n const refractionTexture = this._getTexture();\r\n\r\n if (!refractionTexture) {\r\n return;\r\n }\r\n\r\n if (refractionTexture.isCube) {\r\n effect.setTexture(this._cubeSamplerName, refractionTexture);\r\n } else {\r\n effect.setTexture(this._2DSamplerName, refractionTexture);\r\n }\r\n\r\n effect.setMatrix(this._refractionMatrixName, refractionTexture.getRefractionTextureMatrix());\r\n\r\n let depth = 1.0;\r\n if (!refractionTexture.isCube) {\r\n if ((<any>refractionTexture).depth) {\r\n depth = (<any>refractionTexture).depth;\r\n }\r\n }\r\n\r\n const indexOfRefraction = this.volumeIndexOfRefraction.connectInputBlock?.value ?? this.indexOfRefractionConnectionPoint.connectInputBlock?.value ?? 1.5;\r\n\r\n effect.setFloat4(this._vRefractionInfosName, refractionTexture.level, 1 / indexOfRefraction, depth, this.invertRefractionY ? -1 : 1);\r\n\r\n effect.setFloat4(\r\n this._vRefractionMicrosurfaceInfosName,\r\n refractionTexture.getSize().width,\r\n refractionTexture.lodGenerationScale,\r\n refractionTexture.lodGenerationOffset,\r\n 1 / indexOfRefraction\r\n );\r\n\r\n const width = refractionTexture.getSize().width;\r\n\r\n effect.setFloat2(this._vRefractionFilteringInfoName, width, Math.log2(width));\r\n\r\n if ((<any>refractionTexture).boundingBoxSize) {\r\n const cubeTexture = <CubeTexture>refractionTexture;\r\n effect.setVector3(\"vRefractionPosition\", cubeTexture.boundingBoxPosition);\r\n effect.setVector3(\"vRefractionSize\", cubeTexture.boundingBoxSize);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param state current state of the node material building\r\n * @returns the shader code\r\n */\r\n public getCode(state: NodeMaterialBuildState): string {\r\n const code = \"\";\r\n\r\n state.sharedData.blockingBlocks.push(this);\r\n state.sharedData.textureBlocks.push(this);\r\n\r\n // Samplers\r\n this._cubeSamplerName = state._getFreeVariableName(this.name + \"CubeSampler\");\r\n state.samplers.push(this._cubeSamplerName);\r\n\r\n this._2DSamplerName = state._getFreeVariableName(this.name + \"2DSampler\");\r\n state.samplers.push(this._2DSamplerName);\r\n\r\n this._define3DName = state._getFreeDefineName(\"SS_REFRACTIONMAP_3D\");\r\n const refractionTexture = this._getTexture();\r\n\r\n if (refractionTexture) {\r\n state._samplerDeclaration += `#ifdef ${this._define3DName}\\n`;\r\n state._emitCubeSampler(this._cubeSamplerName, undefined, true);\r\n state._samplerDeclaration += `#else\\n`;\r\n state._emit2DSampler(this._2DSamplerName, undefined, true);\r\n state._samplerDeclaration += `#endif\\n`;\r\n }\r\n\r\n // Fragment\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n this._defineLODRefractionAlpha = state._getFreeDefineName(\"SS_LODINREFRACTIONALPHA\");\r\n this._defineLinearSpecularRefraction = state._getFreeDefineName(\"SS_LINEARSPECULARREFRACTION\");\r\n this._defineOppositeZ = state._getFreeDefineName(\"SS_REFRACTIONMAP_OPPOSITEZ\");\r\n\r\n this._refractionMatrixName = state._getFreeVariableName(\"refractionMatrix\");\r\n\r\n state._emitUniformFromString(this._refractionMatrixName, NodeMaterialBlockConnectionPointTypes.Matrix);\r\n\r\n if (state.shaderLanguage !== ShaderLanguage.WGSL) {\r\n state._emitFunction(\r\n \"sampleRefraction\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleRefraction(s, c) textureCube(s, c)\r\n #else\r\n #define sampleRefraction(s, c) texture2D(s, c)\r\n #endif\\n`,\r\n `//${this.name}`\r\n );\r\n\r\n state._emitFunction(\r\n \"sampleRefractionLod\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleRefractionLod(s, c, l) textureCubeLodEXT(s, c, l)\r\n #else\r\n #define sampleRefractionLod(s, c, l) texture2DLodEXT(s, c, l)\r\n #endif\\n`,\r\n `//${this.name}`\r\n );\r\n }\r\n\r\n this._vRefractionMicrosurfaceInfosName = state._getFreeVariableName(\"vRefractionMicrosurfaceInfos\");\r\n\r\n state._emitUniformFromString(this._vRefractionMicrosurfaceInfosName, NodeMaterialBlockConnectionPointTypes.Vector4);\r\n\r\n this._vRefractionInfosName = state._getFreeVariableName(\"vRefractionInfos\");\r\n\r\n state._emitUniformFromString(this._vRefractionInfosName, NodeMaterialBlockConnectionPointTypes.Vector4);\r\n\r\n this._vRefractionFilteringInfoName = state._getFreeVariableName(\"vRefractionFilteringInfo\");\r\n\r\n state._emitUniformFromString(this._vRefractionFilteringInfoName, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n state._emitUniformFromString(\"vRefractionPosition\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n state._emitUniformFromString(\"vRefractionSize\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n this._scene = state.sharedData.scene;\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 if (this.texture) {\r\n if (this.texture.isCube) {\r\n codeString = `${this._codeVariableName}.texture = new BABYLON.CubeTexture(\"${this.texture.name}\");\\n`;\r\n } else {\r\n codeString = `${this._codeVariableName}.texture = new BABYLON.Texture(\"${this.texture.name}\");\\n`;\r\n }\r\n codeString += `${this._codeVariableName}.texture.coordinatesMode = ${this.texture.coordinatesMode};\\n`;\r\n }\r\n\r\n codeString += `${this._codeVariableName}.linkRefractionWithTransparency = ${this.linkRefractionWithTransparency};\\n`;\r\n codeString += `${this._codeVariableName}.invertRefractionY = ${this.invertRefractionY};\\n`;\r\n codeString += `${this._codeVariableName}.useThicknessAsDepth = ${this.useThicknessAsDepth};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @returns the serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n if (this.texture && !this.texture.isRenderTarget) {\r\n serializationObject.texture = this.texture.serialize();\r\n }\r\n\r\n serializationObject.linkRefractionWithTransparency = this.linkRefractionWithTransparency;\r\n serializationObject.invertRefractionY = this.invertRefractionY;\r\n serializationObject.useThicknessAsDepth = this.useThicknessAsDepth;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root URL\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n if (serializationObject.texture) {\r\n rootUrl = serializationObject.texture.url.indexOf(\"data:\") === 0 ? \"\" : rootUrl;\r\n if (serializationObject.texture.isCube) {\r\n this.texture = CubeTexture.Parse(serializationObject.texture, scene, rootUrl);\r\n } else {\r\n this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl);\r\n }\r\n }\r\n\r\n this.linkRefractionWithTransparency = serializationObject.linkRefractionWithTransparency;\r\n this.invertRefractionY = serializationObject.invertRefractionY;\r\n this.useThicknessAsDepth = !!serializationObject.useThicknessAsDepth;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for refractionBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterRefractionBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.RefractionBlock\", RefractionBlock);\r\n}\r\n"]}
1
+ {"version":3,"file":"refractionBlock.pure.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/refractionBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { type NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { type NodeMaterialConnectionPoint, NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { type NodeMaterial, type NodeMaterialDefines } from \"../../nodeMaterial.pure\";\r\nimport { InputBlock } from \"../Input/inputBlock.pure\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { type Nullable } from \"../../../../types\";\r\nimport { type BaseTexture } from \"../../../Textures/baseTexture.pure\";\r\nimport { type Mesh } from \"../../../../Meshes/mesh.pure\";\r\nimport { type Effect } from \"../../../effect.pure\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { type Scene } from \"../../../../scene.pure\";\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { CubeTextureParse, type CubeTexture } from \"../../../Textures/cubeTexture.pure\";\r\nimport { Texture } from \"../../../Textures/texture.pure\";\r\nimport { NodeMaterialSystemValues } from \"../../Enums/nodeMaterialSystemValues\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\n/**\r\n * Block used to implement the refraction part of the sub surface module of the PBR material\r\n */\r\nexport class RefractionBlock extends NodeMaterialBlock {\r\n /** @internal */\r\n public _define3DName: string;\r\n /** @internal */\r\n public _refractionMatrixName: string;\r\n /** @internal */\r\n public _defineLODRefractionAlpha: string;\r\n /** @internal */\r\n public _defineLinearSpecularRefraction: string;\r\n /** @internal */\r\n public _defineOppositeZ: string;\r\n /** @internal */\r\n public _cubeSamplerName: string;\r\n /** @internal */\r\n public _2DSamplerName: string;\r\n /** @internal */\r\n public _vRefractionMicrosurfaceInfosName: string;\r\n /** @internal */\r\n public _vRefractionInfosName: string;\r\n /** @internal */\r\n public _vRefractionFilteringInfoName: string;\r\n\r\n private _scene: Scene;\r\n\r\n /**\r\n * The properties below are set by the main PBR block prior to calling methods of this class.\r\n * This is to avoid having to add them as inputs here whereas they are already inputs of the main block, so already known.\r\n * It's less burden on the user side in the editor part.\r\n */\r\n\r\n /** @internal */\r\n public viewConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /** @internal */\r\n public indexOfRefractionConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * This parameters will make the material used its opacity to control how much it is refracting against not.\r\n * Materials half opaque for instance using refraction could benefit from this control.\r\n */\r\n @editableInPropertyPage(\"Link refraction to transparency\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { update: true } })\r\n public linkRefractionWithTransparency: boolean = false;\r\n\r\n /**\r\n * Controls if refraction needs to be inverted on Y. This could be useful for procedural texture.\r\n */\r\n @editableInPropertyPage(\"Invert refraction Y\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { update: true } })\r\n public invertRefractionY: boolean = false;\r\n\r\n /**\r\n * Controls if refraction needs to be inverted on Y. This could be useful for procedural texture.\r\n */\r\n @editableInPropertyPage(\"Use thickness as depth\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { update: true } })\r\n public useThicknessAsDepth: boolean = false;\r\n\r\n /**\r\n * Gets or sets the texture associated with the node\r\n */\r\n public texture: Nullable<BaseTexture>;\r\n\r\n /**\r\n * Create a new RefractionBlock\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 this.registerInput(\"intensity\", NodeMaterialBlockConnectionPointTypes.Float, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"tintAtDistance\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"volumeIndexOfRefraction\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"refraction\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"refraction\", this, NodeMaterialConnectionPointDirection.Output, RefractionBlock, \"RefractionBlock\")\r\n );\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(\"vRefractionPosition\");\r\n state._excludeVariableName(\"vRefractionSize\");\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 \"RefractionBlock\";\r\n }\r\n\r\n /**\r\n * Gets the intensity input component\r\n */\r\n public get intensity(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the tint at distance input component\r\n */\r\n public get tintAtDistance(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the volume index of refraction input component\r\n */\r\n public get volumeIndexOfRefraction(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the view input component\r\n */\r\n public get view(): NodeMaterialConnectionPoint {\r\n return this.viewConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the refraction object output component\r\n */\r\n public get refraction(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Returns true if the block has a texture\r\n */\r\n public get hasTexture(): boolean {\r\n return !!this._getTexture();\r\n }\r\n\r\n protected _getTexture(): Nullable<BaseTexture> {\r\n if (this.texture) {\r\n return this.texture;\r\n }\r\n\r\n return this._scene.environmentTexture;\r\n }\r\n\r\n /**\r\n * Auto configure the block based on the material\r\n * @param material - the node material\r\n * @param additionalFilteringInfo - additional filtering info\r\n */\r\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!this.intensity.isConnected) {\r\n const intensityInput = new InputBlock(\"Refraction intensity\", NodeMaterialBlockTargets.Fragment, NodeMaterialBlockConnectionPointTypes.Float);\r\n intensityInput.value = 1;\r\n intensityInput.output.connectTo(this.intensity);\r\n }\r\n\r\n if (this.view && !this.view.isConnected) {\r\n let viewInput = material.getInputBlockByPredicate((b) => b.systemValue === NodeMaterialSystemValues.View && additionalFilteringInfo(b));\r\n\r\n if (!viewInput) {\r\n viewInput = new InputBlock(\"view\");\r\n viewInput.setAsSystemValue(NodeMaterialSystemValues.View);\r\n }\r\n viewInput.output.connectTo(this.view);\r\n }\r\n }\r\n\r\n /**\r\n * Prepare the list of defines\r\n * @param defines - the list of defines\r\n */\r\n public override prepareDefines(defines: NodeMaterialDefines) {\r\n const refractionTexture = this._getTexture();\r\n const refraction = refractionTexture && refractionTexture.getTextureMatrix;\r\n\r\n defines.setValue(\"SS_REFRACTION\", refraction, true);\r\n\r\n if (!refraction) {\r\n return;\r\n }\r\n\r\n defines.setValue(this._define3DName, refractionTexture.isCube, true);\r\n defines.setValue(this._defineLODRefractionAlpha, refractionTexture.lodLevelInAlpha, true);\r\n defines.setValue(this._defineLinearSpecularRefraction, refractionTexture.linearSpecularLOD, true);\r\n defines.setValue(this._defineOppositeZ, this._scene.useRightHandedSystem && refractionTexture.isCube ? !refractionTexture.invertZ : refractionTexture.invertZ, true);\r\n\r\n defines.setValue(\"SS_LINKREFRACTIONTOTRANSPARENCY\", this.linkRefractionWithTransparency, true);\r\n defines.setValue(\"SS_GAMMAREFRACTION\", refractionTexture.gammaSpace, true);\r\n defines.setValue(\"SS_RGBDREFRACTION\", refractionTexture.isRGBD, true);\r\n defines.setValue(\"SS_USE_LOCAL_REFRACTIONMAP_CUBIC\", (<any>refractionTexture).boundingBoxSize ? true : false, true);\r\n defines.setValue(\"SS_USE_THICKNESS_AS_DEPTH\", this.useThicknessAsDepth, true);\r\n }\r\n\r\n /**\r\n * Checks if the block is ready\r\n * @returns true if ready\r\n */\r\n public override isReady() {\r\n const texture = this._getTexture();\r\n\r\n if (texture && !texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Bind data to effect\r\n * @param effect - the effect to bind to\r\n * @param nodeMaterial - the node material\r\n * @param mesh - the mesh\r\n */\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n super.bind(effect, nodeMaterial, mesh);\r\n\r\n const refractionTexture = this._getTexture();\r\n\r\n if (!refractionTexture) {\r\n return;\r\n }\r\n\r\n if (refractionTexture.isCube) {\r\n effect.setTexture(this._cubeSamplerName, refractionTexture);\r\n } else {\r\n effect.setTexture(this._2DSamplerName, refractionTexture);\r\n }\r\n\r\n effect.setMatrix(this._refractionMatrixName, refractionTexture.getRefractionTextureMatrix());\r\n\r\n let depth = 1.0;\r\n if (!refractionTexture.isCube) {\r\n if ((<any>refractionTexture).depth) {\r\n depth = (<any>refractionTexture).depth;\r\n }\r\n }\r\n\r\n const indexOfRefraction = this.volumeIndexOfRefraction.connectInputBlock?.value ?? this.indexOfRefractionConnectionPoint.connectInputBlock?.value ?? 1.5;\r\n\r\n effect.setFloat4(this._vRefractionInfosName, refractionTexture.level, 1 / indexOfRefraction, depth, this.invertRefractionY ? -1 : 1);\r\n\r\n effect.setFloat4(\r\n this._vRefractionMicrosurfaceInfosName,\r\n refractionTexture.getSize().width,\r\n refractionTexture.lodGenerationScale,\r\n refractionTexture.lodGenerationOffset,\r\n 1 / indexOfRefraction\r\n );\r\n\r\n const width = refractionTexture.getSize().width;\r\n\r\n effect.setFloat2(this._vRefractionFilteringInfoName, width, Math.log2(width));\r\n\r\n if ((<any>refractionTexture).boundingBoxSize) {\r\n const cubeTexture = <CubeTexture>refractionTexture;\r\n effect.setVector3(\"vRefractionPosition\", cubeTexture.boundingBoxPosition);\r\n effect.setVector3(\"vRefractionSize\", cubeTexture.boundingBoxSize);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param state current state of the node material building\r\n * @returns the shader code\r\n */\r\n public getCode(state: NodeMaterialBuildState): string {\r\n const code = \"\";\r\n\r\n state.sharedData.blockingBlocks.push(this);\r\n state.sharedData.textureBlocks.push(this);\r\n\r\n // Samplers\r\n this._cubeSamplerName = state._getFreeVariableName(this.name + \"CubeSampler\");\r\n state.samplers.push(this._cubeSamplerName);\r\n\r\n this._2DSamplerName = state._getFreeVariableName(this.name + \"2DSampler\");\r\n state.samplers.push(this._2DSamplerName);\r\n\r\n this._define3DName = state._getFreeDefineName(\"SS_REFRACTIONMAP_3D\");\r\n const refractionTexture = this._getTexture();\r\n\r\n if (refractionTexture) {\r\n state._samplerDeclaration += `#ifdef ${this._define3DName}\\n`;\r\n state._emitCubeSampler(this._cubeSamplerName, undefined, true);\r\n state._samplerDeclaration += `#else\\n`;\r\n state._emit2DSampler(this._2DSamplerName, undefined, true);\r\n state._samplerDeclaration += `#endif\\n`;\r\n }\r\n\r\n // Fragment\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n this._defineLODRefractionAlpha = state._getFreeDefineName(\"SS_LODINREFRACTIONALPHA\");\r\n this._defineLinearSpecularRefraction = state._getFreeDefineName(\"SS_LINEARSPECULARREFRACTION\");\r\n this._defineOppositeZ = state._getFreeDefineName(\"SS_REFRACTIONMAP_OPPOSITEZ\");\r\n\r\n this._refractionMatrixName = state._getFreeVariableName(\"refractionMatrix\");\r\n\r\n state._emitUniformFromString(this._refractionMatrixName, NodeMaterialBlockConnectionPointTypes.Matrix);\r\n\r\n if (state.shaderLanguage !== ShaderLanguage.WGSL) {\r\n state._emitFunction(\r\n \"sampleRefraction\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleRefraction(s, c) textureCube(s, c)\r\n #else\r\n #define sampleRefraction(s, c) texture2D(s, c)\r\n #endif\\n`,\r\n `//${this.name}`\r\n );\r\n\r\n state._emitFunction(\r\n \"sampleRefractionLod\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleRefractionLod(s, c, l) textureCubeLodEXT(s, c, l)\r\n #else\r\n #define sampleRefractionLod(s, c, l) texture2DLodEXT(s, c, l)\r\n #endif\\n`,\r\n `//${this.name}`\r\n );\r\n }\r\n\r\n this._vRefractionMicrosurfaceInfosName = state._getFreeVariableName(\"vRefractionMicrosurfaceInfos\");\r\n\r\n state._emitUniformFromString(this._vRefractionMicrosurfaceInfosName, NodeMaterialBlockConnectionPointTypes.Vector4);\r\n\r\n this._vRefractionInfosName = state._getFreeVariableName(\"vRefractionInfos\");\r\n\r\n state._emitUniformFromString(this._vRefractionInfosName, NodeMaterialBlockConnectionPointTypes.Vector4);\r\n\r\n this._vRefractionFilteringInfoName = state._getFreeVariableName(\"vRefractionFilteringInfo\");\r\n\r\n state._emitUniformFromString(this._vRefractionFilteringInfoName, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n state._emitUniformFromString(\"vRefractionPosition\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n state._emitUniformFromString(\"vRefractionSize\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n this._scene = state.sharedData.scene;\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 if (this.texture) {\r\n if (this.texture.isCube) {\r\n codeString = `${this._codeVariableName}.texture = new BABYLON.CubeTexture(\"${this.texture.name}\");\\n`;\r\n } else {\r\n codeString = `${this._codeVariableName}.texture = new BABYLON.Texture(\"${this.texture.name}\");\\n`;\r\n }\r\n codeString += `${this._codeVariableName}.texture.coordinatesMode = ${this.texture.coordinatesMode};\\n`;\r\n }\r\n\r\n codeString += `${this._codeVariableName}.linkRefractionWithTransparency = ${this.linkRefractionWithTransparency};\\n`;\r\n codeString += `${this._codeVariableName}.invertRefractionY = ${this.invertRefractionY};\\n`;\r\n codeString += `${this._codeVariableName}.useThicknessAsDepth = ${this.useThicknessAsDepth};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @returns the serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n if (this.texture && !this.texture.isRenderTarget) {\r\n serializationObject.texture = this.texture.serialize();\r\n }\r\n\r\n serializationObject.linkRefractionWithTransparency = this.linkRefractionWithTransparency;\r\n serializationObject.invertRefractionY = this.invertRefractionY;\r\n serializationObject.useThicknessAsDepth = this.useThicknessAsDepth;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root URL\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n if (serializationObject.texture) {\r\n rootUrl = serializationObject.texture.url.indexOf(\"data:\") === 0 ? \"\" : rootUrl;\r\n if (serializationObject.texture.isCube) {\r\n this.texture = CubeTextureParse(serializationObject.texture, scene, rootUrl);\r\n } else {\r\n this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl);\r\n }\r\n }\r\n\r\n this.linkRefractionWithTransparency = serializationObject.linkRefractionWithTransparency;\r\n this.invertRefractionY = serializationObject.invertRefractionY;\r\n this.useThicknessAsDepth = !!serializationObject.useThicknessAsDepth;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for refractionBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterRefractionBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.RefractionBlock\", RefractionBlock);\r\n}\r\n"]}
@@ -44,6 +44,7 @@ import { Material } from "../material.pure.js";
44
44
  import { Logger } from "../../Misc/logger.js";
45
45
  import { PrepareDefinesForCamera, PrepareDefinesForPrePass, AreLightsTexturesReady } from "../materialHelper.functions.js";
46
46
  import { ImageProcessingDefinesMixin } from "../imageProcessingConfiguration.defines.js";
47
+ import { RegisterImageProcessingConfiguration } from "../imageProcessingConfiguration.pure.js";
47
48
  import { AbstractEngine } from "../../Engines/abstractEngine.pure.js";
48
49
  import { MaterialHelperGeometryRendering } from "../materialHelper.geometryrendering.js";
49
50
  import { UVDefinesMixin } from "../uv.defines.js";
@@ -2139,6 +2140,8 @@ export function RegisterNodeMaterial() {
2139
2140
  return;
2140
2141
  }
2141
2142
  _Registered = true;
2143
+ // NodeMaterial serializes its image processing configuration, so the parser must be registered for clone/parse to work.
2144
+ RegisterImageProcessingConfiguration();
2142
2145
  NodeMaterial._BlockIsTextureBlock = NodeMaterialBlockIsTextureBlock;
2143
2146
  NodeMaterial.Parse = NodeMaterialParse;
2144
2147
  NodeMaterial.ParseFromFileAsync = NodeMaterialParseFromFileAsync;