@onerjs/core 8.42.7 → 8.42.9

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 (327) hide show
  1. package/Animations/animatable.core.js +1 -1
  2. package/Animations/animatable.core.js.map +1 -1
  3. package/Animations/animatorAvatar.js +2 -2
  4. package/Animations/animatorAvatar.js.map +1 -1
  5. package/Animations/runtimeAnimation.js +1 -1
  6. package/Animations/runtimeAnimation.js.map +1 -1
  7. package/Audio/audioSceneComponent.js +1 -2
  8. package/Audio/audioSceneComponent.js.map +1 -1
  9. package/AudioV2/audioUtils.d.ts +23 -0
  10. package/AudioV2/audioUtils.js +37 -0
  11. package/AudioV2/audioUtils.js.map +1 -1
  12. package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js +3 -3
  13. package/AudioV2/webAudio/subNodes/webAudioBusAndSoundSubGraph.js.map +1 -1
  14. package/AudioV2/webAudio/webAudioEngine.js +1 -1
  15. package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
  16. package/AudioV2/webAudio/webAudioStaticSound.js +3 -2
  17. package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
  18. package/AudioV2/webAudio/webAudioStreamingSound.js +10 -3
  19. package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
  20. package/Behaviors/Meshes/followBehavior.js +1 -1
  21. package/Behaviors/Meshes/followBehavior.js.map +1 -1
  22. package/Behaviors/Meshes/pointerDragBehavior.js +1 -1
  23. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  24. package/Bones/boneLookController.js +1 -1
  25. package/Bones/boneLookController.js.map +1 -1
  26. package/Buffers/buffer.js +1 -1
  27. package/Buffers/buffer.js.map +1 -1
  28. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +2 -2
  29. package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
  30. package/Cameras/camera.js +2 -2
  31. package/Cameras/camera.js.map +1 -1
  32. package/Engines/AbstractEngine/abstractEngine.renderPass.js +1 -0
  33. package/Engines/AbstractEngine/abstractEngine.renderPass.js.map +1 -1
  34. package/Engines/Extensions/engine.query.js +1 -1
  35. package/Engines/Extensions/engine.query.js.map +1 -1
  36. package/Engines/Processors/shaderProcessor.js +2 -3
  37. package/Engines/Processors/shaderProcessor.js.map +1 -1
  38. package/Engines/WebGL/webGLRenderTargetWrapper.js +1 -1
  39. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  40. package/Engines/WebGPU/Extensions/engine.debugging.d.ts +87 -0
  41. package/Engines/WebGPU/Extensions/engine.debugging.js +123 -31
  42. package/Engines/WebGPU/Extensions/engine.debugging.js.map +1 -1
  43. package/Engines/WebGPU/webgpuBufferManager.js +1 -1
  44. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  45. package/Engines/WebGPU/webgpuShaderProcessor.js +1 -1
  46. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  47. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +1 -1
  48. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  49. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +1 -1
  50. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  51. package/Engines/WebGPU/webgpuTextureManager.js +20 -6
  52. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  53. package/Engines/abstractEngine.js +2 -2
  54. package/Engines/abstractEngine.js.map +1 -1
  55. package/Engines/engine.common.js +2 -2
  56. package/Engines/engine.common.js.map +1 -1
  57. package/Engines/engine.js +0 -1
  58. package/Engines/engine.js.map +1 -1
  59. package/Engines/thinEngine.functions.js +1 -1
  60. package/Engines/thinEngine.functions.js.map +1 -1
  61. package/Engines/thinEngine.js +4 -5
  62. package/Engines/thinEngine.js.map +1 -1
  63. package/Engines/thinNativeEngine.js +2 -5
  64. package/Engines/thinNativeEngine.js.map +1 -1
  65. package/Engines/thinWebGPUEngine.d.ts +6 -4
  66. package/Engines/thinWebGPUEngine.js +49 -25
  67. package/Engines/thinWebGPUEngine.js.map +1 -1
  68. package/Engines/webgpuEngine.d.ts +2 -1
  69. package/Engines/webgpuEngine.js +18 -16
  70. package/Engines/webgpuEngine.js.map +1 -1
  71. package/FlowGraph/flowGraph.d.ts +1 -0
  72. package/FlowGraph/flowGraph.js.map +1 -1
  73. package/FlowGraph/flowGraphBlock.d.ts +1 -0
  74. package/FlowGraph/flowGraphBlock.js.map +1 -1
  75. package/FlowGraph/flowGraphContext.d.ts +1 -0
  76. package/FlowGraph/flowGraphContext.js.map +1 -1
  77. package/FlowGraph/flowGraphCoordinator.d.ts +1 -0
  78. package/FlowGraph/flowGraphCoordinator.js.map +1 -1
  79. package/FrameGraph/Node/nodeRenderGraph.d.ts +12 -1
  80. package/FrameGraph/Node/nodeRenderGraph.js +36 -2
  81. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  82. package/FrameGraph/Tasks/Layers/baseLayerTask.js +1 -1
  83. package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
  84. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js +3 -0
  85. package/FrameGraph/Tasks/PostProcesses/ssao2RenderingPipelineTask.js.map +1 -1
  86. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js +3 -0
  87. package/FrameGraph/Tasks/PostProcesses/ssrRenderingPipelineTask.js.map +1 -1
  88. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.d.ts +3 -1
  89. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js +14 -0
  90. package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js.map +1 -1
  91. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +2 -2
  92. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +20 -14
  93. package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
  94. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.d.ts +3 -2
  95. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js +38 -14
  96. package/FrameGraph/Tasks/Rendering/shadowGeneratorTask.js.map +1 -1
  97. package/Layers/glowLayer.js +1 -1
  98. package/Layers/glowLayer.js.map +1 -1
  99. package/Layers/highlightLayer.js +1 -1
  100. package/Layers/highlightLayer.js.map +1 -1
  101. package/Layers/selectionOutlineLayer.js +8 -0
  102. package/Layers/selectionOutlineLayer.js.map +1 -1
  103. package/Layers/thinSelectionOutlineLayer.js +15 -0
  104. package/Layers/thinSelectionOutlineLayer.js.map +1 -1
  105. package/Lights/Shadows/cascadedShadowGenerator.js +0 -1
  106. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  107. package/Lights/Shadows/shadowGenerator.d.ts +28 -1
  108. package/Lights/Shadows/shadowGenerator.js +77 -11
  109. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  110. package/Lights/lightingVolume.d.ts +1 -0
  111. package/Lights/lightingVolume.js +10 -2
  112. package/Lights/lightingVolume.js.map +1 -1
  113. package/Loading/sceneLoader.js +1 -1
  114. package/Loading/sceneLoader.js.map +1 -1
  115. package/Materials/Node/Blocks/Dual/fogBlock.js +1 -1
  116. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  117. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +1 -1
  118. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  119. package/Materials/Node/Blocks/PBR/sheenBlock.js +1 -2
  120. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  121. package/Materials/Node/Blocks/cloudBlock.js +1 -1
  122. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  123. package/Materials/Node/Blocks/curveBlock.js +2 -3
  124. package/Materials/Node/Blocks/curveBlock.js.map +1 -1
  125. package/Materials/Node/nodeMaterial.js +1 -2
  126. package/Materials/Node/nodeMaterial.js.map +1 -1
  127. package/Materials/PBR/openpbrMaterial.js +3 -5
  128. package/Materials/PBR/openpbrMaterial.js.map +1 -1
  129. package/Materials/PBR/pbrBaseMaterial.js +2 -3
  130. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  131. package/Materials/Textures/Procedurals/proceduralTexture.js +0 -1
  132. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  133. package/Materials/Textures/cubeTexture.js +1 -1
  134. package/Materials/Textures/cubeTexture.js.map +1 -1
  135. package/Materials/Textures/htmlElementTexture.js +2 -2
  136. package/Materials/Textures/htmlElementTexture.js.map +1 -1
  137. package/Materials/Textures/multiRenderTarget.js +1 -1
  138. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  139. package/Materials/Textures/renderTargetTexture.js +13 -2
  140. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  141. package/Materials/effect.js +2 -1
  142. package/Materials/effect.js.map +1 -1
  143. package/Materials/materialHelper.functions.js +1 -1
  144. package/Materials/materialHelper.functions.js.map +1 -1
  145. package/Materials/multiMaterial.js +1 -1
  146. package/Materials/multiMaterial.js.map +1 -1
  147. package/Materials/standardMaterial.js +1 -2
  148. package/Materials/standardMaterial.js.map +1 -1
  149. package/Maths/math.geospatial.d.ts +17 -2
  150. package/Maths/math.geospatial.functions.d.ts +16 -2
  151. package/Maths/math.geospatial.functions.js +37 -4
  152. package/Maths/math.geospatial.functions.js.map +1 -1
  153. package/Maths/math.geospatial.js.map +1 -1
  154. package/Maths/math.path.js +1 -1
  155. package/Maths/math.path.js.map +1 -1
  156. package/Maths/math.scalar.functions.js +3 -3
  157. package/Maths/math.scalar.functions.js.map +1 -1
  158. package/Maths/math.vector.js +1 -1
  159. package/Maths/math.vector.js.map +1 -1
  160. package/Meshes/Builders/boxBuilder.js +1 -2
  161. package/Meshes/Builders/boxBuilder.js.map +1 -1
  162. package/Meshes/Builders/cylinderBuilder.js +2 -2
  163. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  164. package/Meshes/Builders/decalBuilder.js +1 -2
  165. package/Meshes/Builders/decalBuilder.js.map +1 -1
  166. package/Meshes/Builders/latheBuilder.js +2 -2
  167. package/Meshes/Builders/latheBuilder.js.map +1 -1
  168. package/Meshes/Builders/linesBuilder.js +11 -15
  169. package/Meshes/Builders/linesBuilder.js.map +1 -1
  170. package/Meshes/Builders/polygonBuilder.js +6 -6
  171. package/Meshes/Builders/polygonBuilder.js.map +1 -1
  172. package/Meshes/Builders/polyhedronBuilder.js +2 -2
  173. package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
  174. package/Meshes/Builders/ribbonBuilder.js +6 -6
  175. package/Meshes/Builders/ribbonBuilder.js.map +1 -1
  176. package/Meshes/Builders/shapeBuilder.js +2 -3
  177. package/Meshes/Builders/shapeBuilder.js.map +1 -1
  178. package/Meshes/Builders/tiledBoxBuilder.js +1 -1
  179. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  180. package/Meshes/Builders/tiledPlaneBuilder.js +1 -1
  181. package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
  182. package/Meshes/GreasedLine/greasedLineMesh.js +1 -2
  183. package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
  184. package/Meshes/GreasedLine/greasedLineRibbonMesh.js +1 -1
  185. package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
  186. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js +1 -1
  187. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js.map +1 -1
  188. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js +1 -1
  189. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js.map +1 -1
  190. package/Meshes/Node/Blocks/extrudeGeometryBlock.d.ts +61 -0
  191. package/Meshes/Node/Blocks/extrudeGeometryBlock.js +297 -0
  192. package/Meshes/Node/Blocks/extrudeGeometryBlock.js.map +1 -0
  193. package/Meshes/Node/Blocks/mappingBlock.js +1 -1
  194. package/Meshes/Node/Blocks/mappingBlock.js.map +1 -1
  195. package/Meshes/Node/index.d.ts +1 -0
  196. package/Meshes/Node/index.js +1 -0
  197. package/Meshes/Node/index.js.map +1 -1
  198. package/Meshes/abstractMesh.d.ts +4 -0
  199. package/Meshes/abstractMesh.js +14 -10
  200. package/Meshes/abstractMesh.js.map +1 -1
  201. package/Meshes/csg.js +1 -1
  202. package/Meshes/csg.js.map +1 -1
  203. package/Meshes/csg2.js +1 -1
  204. package/Meshes/csg2.js.map +1 -1
  205. package/Meshes/geodesicMesh.js +11 -13
  206. package/Meshes/geodesicMesh.js.map +1 -1
  207. package/Meshes/geometry.js +2 -2
  208. package/Meshes/geometry.js.map +1 -1
  209. package/Meshes/groundMesh.js +7 -7
  210. package/Meshes/groundMesh.js.map +1 -1
  211. package/Meshes/mesh.d.ts +2 -0
  212. package/Meshes/mesh.js +21 -7
  213. package/Meshes/mesh.js.map +1 -1
  214. package/Meshes/mesh.vertexData.js +22 -22
  215. package/Meshes/mesh.vertexData.js.map +1 -1
  216. package/Meshes/meshSimplification.js +1 -1
  217. package/Meshes/meshSimplification.js.map +1 -1
  218. package/Meshes/polygonMesh.js +1 -1
  219. package/Meshes/polygonMesh.js.map +1 -1
  220. package/Meshes/trailMesh.js +1 -1
  221. package/Meshes/trailMesh.js.map +1 -1
  222. package/Misc/HighDynamicRange/hdr.js +4 -6
  223. package/Misc/HighDynamicRange/hdr.js.map +1 -1
  224. package/Misc/HighDynamicRange/panoramaToCubemap.js +1 -1
  225. package/Misc/HighDynamicRange/panoramaToCubemap.js.map +1 -1
  226. package/Misc/basisWorker.js +1 -1
  227. package/Misc/basisWorker.js.map +1 -1
  228. package/Misc/environmentTextureTools.js +1 -1
  229. package/Misc/environmentTextureTools.js.map +1 -1
  230. package/Misc/meshExploder.js +1 -2
  231. package/Misc/meshExploder.js.map +1 -1
  232. package/Misc/tga.js +2 -2
  233. package/Misc/tga.js.map +1 -1
  234. package/Misc/timer.js +4 -2
  235. package/Misc/timer.js.map +1 -1
  236. package/Misc/tools.d.ts +7 -0
  237. package/Misc/tools.js +25 -7
  238. package/Misc/tools.js.map +1 -1
  239. package/Misc/webRequest.d.ts +34 -3
  240. package/Misc/webRequest.js +107 -24
  241. package/Misc/webRequest.js.map +1 -1
  242. package/Morph/morphTargetManager.js +1 -1
  243. package/Morph/morphTargetManager.js.map +1 -1
  244. package/Particles/Node/Blocks/Update/updateNoiseBlock.js +1 -1
  245. package/Particles/Node/Blocks/Update/updateNoiseBlock.js.map +1 -1
  246. package/Particles/Node/Blocks/particleSourceTextureBlock.d.ts +11 -1
  247. package/Particles/Node/Blocks/particleSourceTextureBlock.js +25 -11
  248. package/Particles/Node/Blocks/particleSourceTextureBlock.js.map +1 -1
  249. package/Particles/Node/nodeParticleSystemSet.helper.js +3 -3
  250. package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
  251. package/Particles/Node/nodeParticleSystemSet.js +1 -1
  252. package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
  253. package/Particles/computeShaderParticleSystem.js +2 -0
  254. package/Particles/computeShaderParticleSystem.js.map +1 -1
  255. package/Particles/gpuParticleSystem.d.ts +14 -0
  256. package/Particles/gpuParticleSystem.js +94 -12
  257. package/Particles/gpuParticleSystem.js.map +1 -1
  258. package/Particles/particleSystem.js +4 -1
  259. package/Particles/particleSystem.js.map +1 -1
  260. package/Particles/pointsCloudSystem.js +46 -47
  261. package/Particles/pointsCloudSystem.js.map +1 -1
  262. package/Particles/solidParticleSystem.js +5 -6
  263. package/Particles/solidParticleSystem.js.map +1 -1
  264. package/Particles/thinParticleSystem.js +3 -4
  265. package/Particles/thinParticleSystem.js.map +1 -1
  266. package/Particles/webgl2ParticleSystem.js +2 -1
  267. package/Particles/webgl2ParticleSystem.js.map +1 -1
  268. package/Physics/v1/Plugins/ammoJSPlugin.js +0 -8
  269. package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
  270. package/Physics/v2/characterController.js +4 -8
  271. package/Physics/v2/characterController.js.map +1 -1
  272. package/Physics/v2/ragdoll.js +1 -2
  273. package/Physics/v2/ragdoll.js.map +1 -1
  274. package/PostProcesses/postProcess.js +3 -3
  275. package/PostProcesses/postProcess.js.map +1 -1
  276. package/PostProcesses/thinDepthOfFieldEffect.js +2 -2
  277. package/PostProcesses/thinDepthOfFieldEffect.js.map +1 -1
  278. package/Probes/reflectionProbe.js +0 -1
  279. package/Probes/reflectionProbe.js.map +1 -1
  280. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +0 -5
  281. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  282. package/Rendering/depthRenderer.js +0 -11
  283. package/Rendering/depthRenderer.js.map +1 -1
  284. package/Rendering/depthRendererSceneComponent.js +1 -1
  285. package/Rendering/depthRendererSceneComponent.js.map +1 -1
  286. package/Rendering/geometryBufferRenderer.js +0 -1
  287. package/Rendering/geometryBufferRenderer.js.map +1 -1
  288. package/Rendering/objectRenderer.js +7 -5
  289. package/Rendering/objectRenderer.js.map +1 -1
  290. package/Rendering/thinDepthPeelingRenderer.js +1 -1
  291. package/Rendering/thinDepthPeelingRenderer.js.map +1 -1
  292. package/Rendering/utilityLayerRenderer.js +1 -1
  293. package/Rendering/utilityLayerRenderer.js.map +1 -1
  294. package/Shaders/ShadersInclude/screenSpaceRayTrace.js +18 -8
  295. package/Shaders/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
  296. package/Shaders/gpuRenderParticles.vertex.js +4 -0
  297. package/Shaders/gpuRenderParticles.vertex.js.map +1 -1
  298. package/Shaders/gpuUpdateParticles.vertex.js +15 -3
  299. package/Shaders/gpuUpdateParticles.vertex.js.map +1 -1
  300. package/ShadersWGSL/ShadersInclude/screenSpaceRayTrace.js +18 -7
  301. package/ShadersWGSL/ShadersInclude/screenSpaceRayTrace.js.map +1 -1
  302. package/ShadersWGSL/gpuUpdateParticles.compute.js +16 -1
  303. package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
  304. package/ShadersWGSL/lightingVolume.compute.js +1 -1
  305. package/ShadersWGSL/lightingVolume.compute.js.map +1 -1
  306. package/Sprites/spriteManager.js +4 -4
  307. package/Sprites/spriteManager.js.map +1 -1
  308. package/XR/features/WebXRAnchorSystem.js +2 -2
  309. package/XR/features/WebXRAnchorSystem.js.map +1 -1
  310. package/XR/features/WebXRHandTracking.js +1 -1
  311. package/XR/features/WebXRHandTracking.js.map +1 -1
  312. package/XR/features/WebXRNearInteraction.js +1 -1
  313. package/XR/features/WebXRNearInteraction.js.map +1 -1
  314. package/XR/motionController/webXRMicrosoftMixedRealityController.js +1 -1
  315. package/XR/motionController/webXRMicrosoftMixedRealityController.js.map +1 -1
  316. package/XR/motionController/webXROculusTouchMotionController.js +1 -1
  317. package/XR/motionController/webXROculusTouchMotionController.js.map +1 -1
  318. package/XR/webXRFeaturesManager.js +1 -1
  319. package/XR/webXRFeaturesManager.js.map +1 -1
  320. package/assetContainer.js +1 -1
  321. package/assetContainer.js.map +1 -1
  322. package/package.json +1 -1
  323. package/scene.d.ts +16 -0
  324. package/scene.js +28 -0
  325. package/scene.js.map +1 -1
  326. package/sceneComponent.js +1 -1
  327. package/sceneComponent.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"fogBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Dual/fogBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,qCAAqC,EAAE,MAAM,mDAAmD,CAAC;AAE1G,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAMhF,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,6CAAgD;AAGtE;;GAEG;AACH,MAAM,OAAO,QAAS,SAAQ,iBAAiB;IAI3C;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QAE/D,SAAS;QACT,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,qCAAqC,CAAC,OAAO,EAAE,KAAK,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAC3H,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,qCAAqC,CAAC,MAAM,EAAE,KAAK,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAEjH,WAAW;QACX,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,qCAAqC,CAAC,UAAU,EAAE,KAAK,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACxH,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,qCAAqC,CAAC,UAAU,EAAE,KAAK,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAE3H,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,qCAAqC,CAAC,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAE/G,IAAI,CAAC,KAAK,CAAC,0CAA0C,CACjD,qCAAqC,CAAC,MAAM,GAAG,qCAAqC,CAAC,OAAO,GAAG,qCAAqC,CAAC,MAAM,CAC9I,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,0CAA0C,CACpD,qCAAqC,CAAC,MAAM,GAAG,qCAAqC,CAAC,OAAO,GAAG,qCAAqC,CAAC,MAAM,CAC9I,CAAC;IACN,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACa,UAAU,CAAC,KAA6B;QACpD,mEAAmE;QACnE,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACtD,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,cAA8B;QAC/D,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAE1B,IAAI,cAAc,gCAAwB,EAAE,CAAC;YACzC,MAAM,MAAM,CAAC,+DAA+D,CAAC,CAAC;QAClF,CAAC;aAAM,CAAC;YACJ,MAAM,MAAM,CAAC,2DAA2D,CAAC,CAAC;QAC9E,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACa,aAAa,CAAC,QAAsB,EAAE,0BAAgE,GAAG,EAAE,CAAC,IAAI;QAC5H,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACzB,IAAI,SAAS,GAAG,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,wBAAwB,CAAC,IAAI,IAAI,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;YAExI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACb,SAAS,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnC,SAAS,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;YAC9D,CAAC;YACD,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC7B,IAAI,aAAa,GAAG,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,wBAAwB,CAAC,QAAQ,IAAI,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhJ,IAAI,CAAC,aAAa,EAAE,CAAC;gBACjB,aAAa,GAAG,IAAI,UAAU,CAAC,UAAU,EAAE,SAAS,EAAE,qCAAqC,CAAC,MAAM,CAAC,CAAC;gBACpG,aAAa,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;YACtE,CAAC;YACD,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClD,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACa,cAAc,CAAC,OAA4B,EAAE,YAA0B,EAAE,IAAmB;QACxG,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO;QACX,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,IAAI,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IACjF,CAAC;IAED;;;;;OAKG;IACa,IAAI,CAAC,MAAc,EAAE,YAA0B,EAAE,IAAW;QACxE,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO;QACX,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACzG,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,KAAK,CAAC,MAAM,KAAK,wBAAwB,CAAC,QAAQ,EAAE,CAAC;YACrD,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9C,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE3C,IAAI,cAAc,GAAG,EAAE,CAAC;YACxB,IAAI,OAAO,GAAG,EAAE,CAAC;YACjB,IAAI,OAAO,GAAG,EAAE,CAAC;YAEjB,IAAI,KAAK,CAAC,cAAc,gCAAwB,EAAE,CAAC;gBAC/C,cAAc,GAAG;oBACb,EAAE,MAAM,EAAE,sBAAsB,EAAE,OAAO,EAAE,yDAAyD,EAAE;oBACtG,EAAE,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,WAAW,EAAE;oBACvD,EAAE,MAAM,EAAE,8BAA8B,EAAE,OAAO,EAAE,cAAc,EAAE;iBACtE,CAAC;gBAEF,OAAO,GAAG,iBAAiB,CAAC;gBAC5B,OAAO,GAAG,WAAW,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACJ,cAAc,GAAG,CAAC,EAAE,MAAM,EAAE,yBAAyB,EAAE,OAAO,EAAE,wDAAwD,EAAE,CAAC,CAAC;YAChI,CAAC;YAED,KAAK,CAAC,wBAAwB,CAAC,wBAAwB,EAAE,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE;gBACvE,cAAc,EAAE,IAAI;gBACpB,cAAc,EAAE,IAAI;gBACpB,WAAW,EAAE,KAAK;gBAClB,cAAc,EAAE,cAAc;aACjC,CAAC,CAAC;YAEH,MAAM,mBAAmB,GAAG,KAAK,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAEhC,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,cAAc,EAAE,qCAAqC,CAAC,OAAO,CAAC,CAAC;YAEjG,KAAK,CAAC,iBAAiB,IAAI,cAAc,CAAC;YAC1C,KAAK,CAAC,iBAAiB,IAAI,GAAG,KAAK,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,qCAAqC,CAAC,KAAK,CAAC,oBAAoB,OAAO,GAAG,IAAI,CAAC,gBAAgB,KAAK,OAAO,GAAG,IAAI,CAAC,cAAc,MAAM,CAAC;YAClN,KAAK,CAAC,iBAAiB;gBACnB,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;oBAC5B,MAAM,mBAAmB,MAAM,KAAK,CAAC,sBAAsB,iBAAiB,mBAAmB,OAAO,QAAQ,CAAC,sBAAsB,SAAS,CAAC;YACnJ,KAAK,CAAC,iBAAiB,IAAI,UAAU,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC,sBAAsB,SAAS,CAAC;YAC9G,KAAK,CAAC,iBAAiB,IAAI,UAAU,CAAC;QAC1C,CAAC;aAAM,CAAC;YACJ,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;YACnE,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,gBAAgB,EAAE,qCAAqC,CAAC,OAAO,CAAC,CAAC;YACnG,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,gCAAwB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;YACpF,KAAK,CAAC,iBAAiB,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,gBAAgB,OAAO,IAAI,CAAC,sBAAsB,MAAM,QAAQ,CAAC,sBAAsB,UAAU,CAAC;QAClJ,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,aAAa,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialSystemValues } from \"../../Enums/nodeMaterialSystemValues\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\nimport { GetFogState } from \"core/Materials/materialHelper.functions\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to add support for scene fog\r\n */\r\nexport class FogBlock extends NodeMaterialBlock {\r\n private _fogDistanceName: string;\r\n private _fogParameters: string;\r\n\r\n /**\r\n * Create a new FogBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.VertexAndFragment, false);\r\n\r\n // Vertex\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector4, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"view\", NodeMaterialBlockConnectionPointTypes.Matrix, false, NodeMaterialBlockTargets.Vertex);\r\n\r\n // Fragment\r\n this.registerInput(\"input\", NodeMaterialBlockConnectionPointTypes.AutoDetect, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"fogColor\", NodeMaterialBlockConnectionPointTypes.AutoDetect, false, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.input.addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 | NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Color4\r\n );\r\n this.fogColor.addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 | NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Color4\r\n );\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 \"FogBlock\";\r\n }\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the view input component\r\n */\r\n public get view(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the color input component\r\n */\r\n public get input(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the fog color input component\r\n */\r\n public get fogColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * 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 import(\"../../../../ShadersWGSL/ShadersInclude/fogFragmentDeclaration\");\r\n } else {\r\n await import(\"../../../../Shaders/ShadersInclude/fogFragmentDeclaration\");\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 block based on the material\r\n * @param material - the node material\r\n * @param additionalFilteringInfo - optional filtering info\r\n */\r\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!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 if (!this.fogColor.isConnected) {\r\n let fogColorInput = material.getInputBlockByPredicate((b) => b.systemValue === NodeMaterialSystemValues.FogColor && additionalFilteringInfo(b));\r\n\r\n if (!fogColorInput) {\r\n fogColorInput = new InputBlock(\"fogColor\", undefined, NodeMaterialBlockConnectionPointTypes.Color3);\r\n fogColorInput.setAsSystemValue(NodeMaterialSystemValues.FogColor);\r\n }\r\n fogColorInput.output.connectTo(this.fogColor);\r\n }\r\n }\r\n\r\n /**\r\n * Prepare the list of defines\r\n * @param defines - the material defines\r\n * @param nodeMaterial - the node material\r\n * @param mesh - the mesh to prepare for\r\n */\r\n public override prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial, mesh?: AbstractMesh) {\r\n if (!mesh) {\r\n return;\r\n }\r\n\r\n const scene = mesh.getScene();\r\n defines.setValue(\"FOG\", nodeMaterial.fogEnabled && GetFogState(mesh, scene));\r\n }\r\n\r\n /**\r\n * Bind data to effect\r\n * @param effect - the effect to bind to\r\n * @param nodeMaterial - the node material\r\n * @param mesh - the mesh to bind for\r\n */\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if (!mesh) {\r\n return;\r\n }\r\n\r\n const scene = mesh.getScene();\r\n effect.setFloat4(this._fogParameters, scene.fogMode, scene.fogStart, scene.fogEnd, scene.fogDensity);\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n let replaceStrings = [];\r\n let prefix1 = \"\";\r\n let prefix2 = \"\";\r\n\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n replaceStrings = [\r\n { search: /fn CalcFogFactor\\(\\)/, replace: \"fn CalcFogFactor(vFogDistance: vec3f, vFogInfos: vec4f)\" },\r\n { search: /uniforms.vFogInfos/g, replace: \"vFogInfos\" },\r\n { search: /fragmentInputs.vFogDistance/g, replace: \"vFogDistance\" },\r\n ];\r\n\r\n prefix1 = \"fragmentInputs.\";\r\n prefix2 = \"uniforms.\";\r\n } else {\r\n replaceStrings = [{ search: /float CalcFogFactor\\(\\)/, replace: \"float CalcFogFactor(vec3 vFogDistance, vec4 vFogInfos)\" }];\r\n }\r\n\r\n state._emitFunctionFromInclude(\"fogFragmentDeclaration\", `//${this.name}`, {\r\n removeUniforms: true,\r\n removeVaryings: true,\r\n removeIfDef: false,\r\n replaceStrings: replaceStrings,\r\n });\r\n\r\n const tempFogVariablename = state._getFreeVariableName(\"fog\");\r\n const color = this.input;\r\n const fogColor = this.fogColor;\r\n this._fogParameters = state._getFreeVariableName(\"fogParameters\");\r\n const output = this._outputs[0];\r\n\r\n state._emitUniformFromString(this._fogParameters, NodeMaterialBlockConnectionPointTypes.Vector4);\r\n\r\n state.compilationString += `#ifdef FOG\\n`;\r\n state.compilationString += `${state._declareLocalVar(tempFogVariablename, NodeMaterialBlockConnectionPointTypes.Float)} = CalcFogFactor(${prefix1}${this._fogDistanceName}, ${prefix2}${this._fogParameters});\\n`;\r\n state.compilationString +=\r\n state._declareOutput(output) +\r\n ` = ${tempFogVariablename} * ${color.associatedVariableName}.rgb + (1.0 - ${tempFogVariablename}) * ${fogColor.associatedVariableName}.rgb;\\n`;\r\n state.compilationString += `#else\\n${state._declareOutput(output)} = ${color.associatedVariableName}.rgb;\\n`;\r\n state.compilationString += `#endif\\n`;\r\n } else {\r\n const worldPos = this.worldPosition;\r\n const view = this.view;\r\n this._fogDistanceName = state._getFreeVariableName(\"vFogDistance\");\r\n state._emitVaryingFromString(this._fogDistanceName, NodeMaterialBlockConnectionPointTypes.Vector3);\r\n const prefix = state.shaderLanguage === ShaderLanguage.WGSL ? \"vertexOutputs.\" : \"\";\r\n state.compilationString += `${prefix}${this._fogDistanceName} = (${view.associatedVariableName} * ${worldPos.associatedVariableName}).xyz;\\n`;\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.FogBlock\", FogBlock);\r\n"]}
1
+ {"version":3,"file":"fogBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Dual/fogBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialSystemValues } from \"../../Enums/nodeMaterialSystemValues\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\nimport { GetFogState } from \"core/Materials/materialHelper.functions\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to add support for scene fog\r\n */\r\nexport class FogBlock extends NodeMaterialBlock {\r\n private _fogDistanceName: string;\r\n private _fogParameters: string;\r\n\r\n /**\r\n * Create a new FogBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.VertexAndFragment, false);\r\n\r\n // Vertex\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector4, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"view\", NodeMaterialBlockConnectionPointTypes.Matrix, false, NodeMaterialBlockTargets.Vertex);\r\n\r\n // Fragment\r\n this.registerInput(\"input\", NodeMaterialBlockConnectionPointTypes.AutoDetect, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"fogColor\", NodeMaterialBlockConnectionPointTypes.AutoDetect, false, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.input.addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 | NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Color4\r\n );\r\n this.fogColor.addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 | NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Color4\r\n );\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 \"FogBlock\";\r\n }\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the view input component\r\n */\r\n public get view(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the color input component\r\n */\r\n public get input(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the fog color input component\r\n */\r\n public get fogColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * 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 import(\"../../../../ShadersWGSL/ShadersInclude/fogFragmentDeclaration\");\r\n } else {\r\n await import(\"../../../../Shaders/ShadersInclude/fogFragmentDeclaration\");\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 block based on the material\r\n * @param material - the node material\r\n * @param additionalFilteringInfo - optional filtering info\r\n */\r\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!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 if (!this.fogColor.isConnected) {\r\n let fogColorInput = material.getInputBlockByPredicate((b) => b.systemValue === NodeMaterialSystemValues.FogColor && additionalFilteringInfo(b));\r\n\r\n if (!fogColorInput) {\r\n fogColorInput = new InputBlock(\"fogColor\", undefined, NodeMaterialBlockConnectionPointTypes.Color3);\r\n fogColorInput.setAsSystemValue(NodeMaterialSystemValues.FogColor);\r\n }\r\n fogColorInput.output.connectTo(this.fogColor);\r\n }\r\n }\r\n\r\n /**\r\n * Prepare the list of defines\r\n * @param defines - the material defines\r\n * @param nodeMaterial - the node material\r\n * @param mesh - the mesh to prepare for\r\n */\r\n public override prepareDefines(defines: NodeMaterialDefines, nodeMaterial: NodeMaterial, mesh?: AbstractMesh) {\r\n if (!mesh) {\r\n return;\r\n }\r\n\r\n const scene = mesh.getScene();\r\n defines.setValue(\"FOG\", nodeMaterial.fogEnabled && GetFogState(mesh, scene));\r\n }\r\n\r\n /**\r\n * Bind data to effect\r\n * @param effect - the effect to bind to\r\n * @param nodeMaterial - the node material\r\n * @param mesh - the mesh to bind for\r\n */\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if (!mesh) {\r\n return;\r\n }\r\n\r\n const scene = mesh.getScene();\r\n effect.setFloat4(this._fogParameters, scene.fogMode, scene.fogStart, scene.fogEnd, scene.fogDensity);\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n let replaceStrings: { search: RegExp; replace: string }[];\r\n let prefix1 = \"\";\r\n let prefix2 = \"\";\r\n\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n replaceStrings = [\r\n { search: /fn CalcFogFactor\\(\\)/, replace: \"fn CalcFogFactor(vFogDistance: vec3f, vFogInfos: vec4f)\" },\r\n { search: /uniforms.vFogInfos/g, replace: \"vFogInfos\" },\r\n { search: /fragmentInputs.vFogDistance/g, replace: \"vFogDistance\" },\r\n ];\r\n\r\n prefix1 = \"fragmentInputs.\";\r\n prefix2 = \"uniforms.\";\r\n } else {\r\n replaceStrings = [{ search: /float CalcFogFactor\\(\\)/, replace: \"float CalcFogFactor(vec3 vFogDistance, vec4 vFogInfos)\" }];\r\n }\r\n\r\n state._emitFunctionFromInclude(\"fogFragmentDeclaration\", `//${this.name}`, {\r\n removeUniforms: true,\r\n removeVaryings: true,\r\n removeIfDef: false,\r\n replaceStrings: replaceStrings,\r\n });\r\n\r\n const tempFogVariablename = state._getFreeVariableName(\"fog\");\r\n const color = this.input;\r\n const fogColor = this.fogColor;\r\n this._fogParameters = state._getFreeVariableName(\"fogParameters\");\r\n const output = this._outputs[0];\r\n\r\n state._emitUniformFromString(this._fogParameters, NodeMaterialBlockConnectionPointTypes.Vector4);\r\n\r\n state.compilationString += `#ifdef FOG\\n`;\r\n state.compilationString += `${state._declareLocalVar(tempFogVariablename, NodeMaterialBlockConnectionPointTypes.Float)} = CalcFogFactor(${prefix1}${this._fogDistanceName}, ${prefix2}${this._fogParameters});\\n`;\r\n state.compilationString +=\r\n state._declareOutput(output) +\r\n ` = ${tempFogVariablename} * ${color.associatedVariableName}.rgb + (1.0 - ${tempFogVariablename}) * ${fogColor.associatedVariableName}.rgb;\\n`;\r\n state.compilationString += `#else\\n${state._declareOutput(output)} = ${color.associatedVariableName}.rgb;\\n`;\r\n state.compilationString += `#endif\\n`;\r\n } else {\r\n const worldPos = this.worldPosition;\r\n const view = this.view;\r\n this._fogDistanceName = state._getFreeVariableName(\"vFogDistance\");\r\n state._emitVaryingFromString(this._fogDistanceName, NodeMaterialBlockConnectionPointTypes.Vector3);\r\n const prefix = state.shaderLanguage === ShaderLanguage.WGSL ? \"vertexOutputs.\" : \"\";\r\n state.compilationString += `${prefix}${this._fogDistanceName} = (${view.associatedVariableName} * ${worldPos.associatedVariableName}).xyz;\\n`;\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.FogBlock\", FogBlock);\r\n"]}
@@ -99,7 +99,7 @@ export class ImageSourceBlock extends NodeMaterialBlock {
99
99
  state.sharedData.bindableBlocks.push(this);
100
100
  }
101
101
  if (this.dimensions.isConnected) {
102
- let affect = "";
102
+ let affect;
103
103
  if (state.shaderLanguage === 1 /* ShaderLanguage.WGSL */) {
104
104
  affect = `vec2f(textureDimensions(${this._samplerName}, 0).xy)`;
105
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"imageSourceBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Dual/imageSourceBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { Texture } from \"../../../Textures/texture\";\r\nimport { Constants } from \"../../../../Engines/constants\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport { NodeMaterial } from \"../../nodeMaterial\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { EngineStore } from \"../../../../Engines/engineStore\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n/**\r\n * Block used to provide an image for a TextureBlock\r\n */\r\nexport class ImageSourceBlock extends NodeMaterialBlock {\r\n private _samplerName: string;\r\n protected _texture: Nullable<Texture>;\r\n /**\r\n * Gets or sets the texture associated with the node\r\n */\r\n public get texture(): Nullable<Texture> {\r\n return this._texture;\r\n }\r\n\r\n public set texture(texture: Nullable<Texture>) {\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 /**\r\n * Gets the sampler name associated with this image source\r\n */\r\n public get samplerName(): string {\r\n return this._samplerName;\r\n }\r\n\r\n /**\r\n * Creates a new ImageSourceBlock\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 this.registerOutput(\r\n \"source\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"source\", this, NodeMaterialConnectionPointDirection.Output, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n\r\n this.registerOutput(\"dimensions\", NodeMaterialBlockConnectionPointTypes.Vector2);\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 */\r\n public override bind(effect: Effect, _nodeMaterial: NodeMaterial) {\r\n if (!this.texture) {\r\n return;\r\n }\r\n\r\n effect.setTexture(this._samplerName, this.texture);\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 if (this.texture && !this.texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n\r\n return true;\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 \"ImageSourceBlock\";\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get source(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the dimension component\r\n */\r\n public get dimensions(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (state.target === NodeMaterialBlockTargets.Vertex) {\r\n this._samplerName = state._getFreeVariableName(this.name);\r\n\r\n // Declarations\r\n state.sharedData.blockingBlocks.push(this);\r\n state.sharedData.textureBlocks.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n }\r\n\r\n if (this.dimensions.isConnected) {\r\n let affect: string = \"\";\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n affect = `vec2f(textureDimensions(${this._samplerName}, 0).xy)`;\r\n } else {\r\n affect = `vec2(textureSize(${this._samplerName}, 0).xy)`;\r\n }\r\n\r\n state.compilationString += `${state._declareOutput(this.dimensions)} = ${affect};\\n`;\r\n }\r\n\r\n if (this._texture?._texture?.is2DArray) {\r\n state._emit2DArraySampler(this._samplerName);\r\n } else {\r\n state._emit2DSampler(this._samplerName);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode(ignoreTexture = false) {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (!this.texture || ignoreTexture) {\r\n return codeString;\r\n }\r\n\r\n codeString += `${this._codeVariableName}.texture = new BABYLON.Texture(\"${this.texture.name}\", null, ${this.texture.noMipmap}, ${this.texture.invertY}, ${this.texture.samplingMode});\\n`;\r\n codeString += `${this._codeVariableName}.texture.wrapU = ${this.texture.wrapU};\\n`;\r\n codeString += `${this._codeVariableName}.texture.wrapV = ${this.texture.wrapV};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uAng = ${this.texture.uAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vAng = ${this.texture.vAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.wAng = ${this.texture.wAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uOffset = ${this.texture.uOffset};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vOffset = ${this.texture.vOffset};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uScale = ${this.texture.uScale};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vScale = ${this.texture.vScale};\\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 * @param ignoreTexture - whether to skip texture serialization\r\n * @returns the serialized object\r\n */\r\n public override serialize(ignoreTexture = false): any {\r\n const serializationObject = super.serialize();\r\n\r\n if (\r\n !ignoreTexture &&\r\n this.texture &&\r\n (NodeMaterial.AllowSerializationOfRenderTargetTextures || !this.texture.isRenderTarget) &&\r\n this.texture.getClassName() !== \"VideoTexture\"\r\n ) {\r\n serializationObject.texture = this.texture.serialize();\r\n }\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 * @param urlRewriter - optional url rewriter\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string, urlRewriter?: (url: string) => string) {\r\n super._deserialize(serializationObject, scene, rootUrl, urlRewriter);\r\n\r\n if (serializationObject.texture && !NodeMaterial.IgnoreTexturesAtLoadTime) {\r\n if (serializationObject.texture.url !== undefined) {\r\n if (serializationObject.texture.url.indexOf(\"data:\") === 0) {\r\n rootUrl = \"\";\r\n } else if (urlRewriter) {\r\n serializationObject.texture.url = urlRewriter(serializationObject.texture.url);\r\n serializationObject.texture.name = serializationObject.texture.url;\r\n }\r\n }\r\n if (serializationObject.texture.base64String || serializationObject.texture.url !== undefined) {\r\n this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl) as Texture;\r\n }\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ImageSourceBlock\", ImageSourceBlock);\r\n"]}
1
+ {"version":3,"file":"imageSourceBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Dual/imageSourceBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { Texture } from \"../../../Textures/texture\";\r\nimport { Constants } from \"../../../../Engines/constants\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport { NodeMaterial } from \"../../nodeMaterial\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { EngineStore } from \"../../../../Engines/engineStore\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n/**\r\n * Block used to provide an image for a TextureBlock\r\n */\r\nexport class ImageSourceBlock extends NodeMaterialBlock {\r\n private _samplerName: string;\r\n protected _texture: Nullable<Texture>;\r\n /**\r\n * Gets or sets the texture associated with the node\r\n */\r\n public get texture(): Nullable<Texture> {\r\n return this._texture;\r\n }\r\n\r\n public set texture(texture: Nullable<Texture>) {\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 /**\r\n * Gets the sampler name associated with this image source\r\n */\r\n public get samplerName(): string {\r\n return this._samplerName;\r\n }\r\n\r\n /**\r\n * Creates a new ImageSourceBlock\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 this.registerOutput(\r\n \"source\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"source\", this, NodeMaterialConnectionPointDirection.Output, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n\r\n this.registerOutput(\"dimensions\", NodeMaterialBlockConnectionPointTypes.Vector2);\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 */\r\n public override bind(effect: Effect, _nodeMaterial: NodeMaterial) {\r\n if (!this.texture) {\r\n return;\r\n }\r\n\r\n effect.setTexture(this._samplerName, this.texture);\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 if (this.texture && !this.texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n\r\n return true;\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 \"ImageSourceBlock\";\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get source(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the dimension component\r\n */\r\n public get dimensions(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (state.target === NodeMaterialBlockTargets.Vertex) {\r\n this._samplerName = state._getFreeVariableName(this.name);\r\n\r\n // Declarations\r\n state.sharedData.blockingBlocks.push(this);\r\n state.sharedData.textureBlocks.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n }\r\n\r\n if (this.dimensions.isConnected) {\r\n let affect: string;\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n affect = `vec2f(textureDimensions(${this._samplerName}, 0).xy)`;\r\n } else {\r\n affect = `vec2(textureSize(${this._samplerName}, 0).xy)`;\r\n }\r\n\r\n state.compilationString += `${state._declareOutput(this.dimensions)} = ${affect};\\n`;\r\n }\r\n\r\n if (this._texture?._texture?.is2DArray) {\r\n state._emit2DArraySampler(this._samplerName);\r\n } else {\r\n state._emit2DSampler(this._samplerName);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode(ignoreTexture = false) {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (!this.texture || ignoreTexture) {\r\n return codeString;\r\n }\r\n\r\n codeString += `${this._codeVariableName}.texture = new BABYLON.Texture(\"${this.texture.name}\", null, ${this.texture.noMipmap}, ${this.texture.invertY}, ${this.texture.samplingMode});\\n`;\r\n codeString += `${this._codeVariableName}.texture.wrapU = ${this.texture.wrapU};\\n`;\r\n codeString += `${this._codeVariableName}.texture.wrapV = ${this.texture.wrapV};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uAng = ${this.texture.uAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vAng = ${this.texture.vAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.wAng = ${this.texture.wAng};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uOffset = ${this.texture.uOffset};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vOffset = ${this.texture.vOffset};\\n`;\r\n codeString += `${this._codeVariableName}.texture.uScale = ${this.texture.uScale};\\n`;\r\n codeString += `${this._codeVariableName}.texture.vScale = ${this.texture.vScale};\\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 * @param ignoreTexture - whether to skip texture serialization\r\n * @returns the serialized object\r\n */\r\n public override serialize(ignoreTexture = false): any {\r\n const serializationObject = super.serialize();\r\n\r\n if (\r\n !ignoreTexture &&\r\n this.texture &&\r\n (NodeMaterial.AllowSerializationOfRenderTargetTextures || !this.texture.isRenderTarget) &&\r\n this.texture.getClassName() !== \"VideoTexture\"\r\n ) {\r\n serializationObject.texture = this.texture.serialize();\r\n }\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 * @param urlRewriter - optional url rewriter\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string, urlRewriter?: (url: string) => string) {\r\n super._deserialize(serializationObject, scene, rootUrl, urlRewriter);\r\n\r\n if (serializationObject.texture && !NodeMaterial.IgnoreTexturesAtLoadTime) {\r\n if (serializationObject.texture.url !== undefined) {\r\n if (serializationObject.texture.url.indexOf(\"data:\") === 0) {\r\n rootUrl = \"\";\r\n } else if (urlRewriter) {\r\n serializationObject.texture.url = urlRewriter(serializationObject.texture.url);\r\n serializationObject.texture.name = serializationObject.texture.url;\r\n }\r\n }\r\n if (serializationObject.texture.base64String || serializationObject.texture.url !== undefined) {\r\n this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl) as Texture;\r\n }\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ImageSourceBlock\", ImageSourceBlock);\r\n"]}
@@ -90,13 +90,12 @@ export class SheenBlock extends NodeMaterialBlock {
90
90
  * @returns the shader code
91
91
  */
92
92
  getCode(reflectionBlock, state) {
93
- let code = "";
94
93
  const color = this.color.isConnected ? this.color.associatedVariableName : `vec3${state.fSuffix}(1.)`;
95
94
  const intensity = this.intensity.isConnected ? this.intensity.associatedVariableName : "1.";
96
95
  const roughness = this.roughness.isConnected ? this.roughness.associatedVariableName : "0.";
97
96
  const texture = `vec4${state.fSuffix}(0.)`;
98
97
  const isWebGPU = state.shaderLanguage === 1 /* ShaderLanguage.WGSL */;
99
- code = `#ifdef SHEEN
98
+ const code = `#ifdef SHEEN
100
99
  ${isWebGPU ? "var sheenOut: sheenOutParams" : "sheenOutParams sheenOut"};
101
100
 
102
101
  ${state._declareLocalVar("vSheenColor", NodeMaterialBlockConnectionPointTypes.Vector4)} = vec4${state.fSuffix}(${color}, ${intensity});
@@ -1 +1 @@
1
- {"version":3,"file":"sheenBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/sheenBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport type { NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { ReflectionBlock } from \"./reflectionBlock\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to implement the sheen module of the PBR material\r\n */\r\nexport class SheenBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new SheenBlock\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, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"color\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"roughness\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"sheen\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"sheen\", this, NodeMaterialConnectionPointDirection.Output, SheenBlock, \"SheenBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * If true, the sheen effect is layered above the base BRDF with the albedo-scaling technique.\r\n * It allows the strength of the sheen effect to not depend on the base color of the material,\r\n * making it easier to setup and tweak the effect\r\n */\r\n @editableInPropertyPage(\"Albedo scaling\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true, notifiers: { update: true } })\r\n public albedoScaling: boolean = false;\r\n\r\n /**\r\n * Defines if the sheen is linked to the sheen color.\r\n */\r\n @editableInPropertyPage(\"Link sheen with albedo\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true, notifiers: { update: true } })\r\n public linkSheenWithAlbedo: boolean = false;\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(\"sheenOut\");\r\n state._excludeVariableName(\"sheenMapData\");\r\n state._excludeVariableName(\"vSheenColor\");\r\n state._excludeVariableName(\"vSheenRoughness\");\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 \"SheenBlock\";\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 color input component\r\n */\r\n public get color(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the roughness input component\r\n */\r\n public get roughness(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the sheen object output component\r\n */\r\n public get sheen(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\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 defines.setValue(\"SHEEN\", true);\r\n defines.setValue(\"SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE\", true, true);\r\n defines.setValue(\"SHEEN_LINKWITHALBEDO\", this.linkSheenWithAlbedo, true);\r\n defines.setValue(\"SHEEN_ROUGHNESS\", this.roughness.isConnected, true);\r\n defines.setValue(\"SHEEN_ALBEDOSCALING\", this.albedoScaling, true);\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param reflectionBlock instance of a ReflectionBlock null if the code must be generated without an active reflection module\r\n * @param state define the build state\r\n * @returns the shader code\r\n */\r\n public getCode(reflectionBlock: Nullable<ReflectionBlock>, state: NodeMaterialBuildState): string {\r\n let code = \"\";\r\n\r\n const color = this.color.isConnected ? this.color.associatedVariableName : `vec3${state.fSuffix}(1.)`;\r\n const intensity = this.intensity.isConnected ? this.intensity.associatedVariableName : \"1.\";\r\n const roughness = this.roughness.isConnected ? this.roughness.associatedVariableName : \"0.\";\r\n const texture = `vec4${state.fSuffix}(0.)`;\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n code = `#ifdef SHEEN\r\n ${isWebGPU ? \"var sheenOut: sheenOutParams\" : \"sheenOutParams sheenOut\"};\r\n\r\n ${state._declareLocalVar(\"vSheenColor\", NodeMaterialBlockConnectionPointTypes.Vector4)} = vec4${state.fSuffix}(${color}, ${intensity});\r\n\r\n sheenOut = sheenBlock(\r\n vSheenColor\r\n #ifdef SHEEN_ROUGHNESS\r\n , ${roughness}\r\n #endif\r\n , roughness\r\n #ifdef SHEEN_TEXTURE\r\n , ${texture}\r\n ${isWebGPU ? `, ${texture}Sampler` : \"\"}\r\n , 1.0\r\n #endif\r\n , reflectanceF0\r\n #ifdef SHEEN_LINKWITHALBEDO\r\n , baseColor\r\n , surfaceAlbedo\r\n #endif\r\n #ifdef ENVIRONMENTBRDF\r\n , NdotV\r\n , environmentBrdf\r\n #endif\r\n #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)\r\n , AARoughnessFactors\r\n , ${isWebGPU ? \"uniforms.\" : \"\"}${reflectionBlock?._vReflectionMicrosurfaceInfosName}\r\n , ${reflectionBlock?._vReflectionInfosName}\r\n , ${reflectionBlock?.reflectionColor}\r\n , ${isWebGPU ? \"uniforms.\" : \"\"}vLightingIntensity\r\n #ifdef ${reflectionBlock?._define3DName}\r\n , ${reflectionBlock?._cubeSamplerName} \r\n ${isWebGPU ? `, ${reflectionBlock?._cubeSamplerName}Sampler` : \"\"}\r\n #else\r\n , ${reflectionBlock?._2DSamplerName}\r\n ${isWebGPU ? `, ${reflectionBlock?._2DSamplerName}Sampler` : \"\"}\r\n #endif\r\n , reflectionOut.reflectionCoords\r\n , NdotVUnclamped\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${reflectionBlock?._define3DName}\r\n , ${reflectionBlock?._cubeSamplerName} \r\n ${isWebGPU ? `, ${reflectionBlock?._cubeSamplerName}Sampler` : \"\"}\r\n , ${reflectionBlock?._cubeSamplerName}\r\n ${isWebGPU ? `, ${reflectionBlock?._cubeSamplerName}Sampler` : \"\"}\r\n #else\r\n , ${reflectionBlock?._2DSamplerName}\r\n ${isWebGPU ? `, ${reflectionBlock?._2DSamplerName}Sampler` : \"\"}\r\n , ${reflectionBlock?._2DSamplerName}\r\n ${isWebGPU ? `, ${reflectionBlock?._2DSamplerName}Sampler` : \"\"}\r\n #endif\r\n #endif\r\n #if !defined(${reflectionBlock?._defineSkyboxName}) && defined(RADIANCEOCCLUSION)\r\n , seo\r\n #endif\r\n #if !defined(${reflectionBlock?._defineSkyboxName}) && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(${reflectionBlock?._define3DName})\r\n , eho\r\n #endif\r\n #endif\r\n );\r\n\r\n #ifdef SHEEN_LINKWITHALBEDO\r\n surfaceAlbedo = sheenOut.surfaceAlbedo;\r\n #endif\r\n #endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n state.sharedData.blocksWithDefines.push(this);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n codeString += `${this._codeVariableName}.albedoScaling = ${this.albedoScaling};\\n`;\r\n codeString += `${this._codeVariableName}.linkSheenWithAlbedo = ${this.linkSheenWithAlbedo};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @returns the serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.albedoScaling = this.albedoScaling;\r\n serializationObject.linkSheenWithAlbedo = this.linkSheenWithAlbedo;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root URL\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.albedoScaling = serializationObject.albedoScaling;\r\n this.linkSheenWithAlbedo = serializationObject.linkSheenWithAlbedo;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.SheenBlock\", SheenBlock);\r\n"]}
1
+ {"version":3,"file":"sheenBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/sheenBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport type { NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { ReflectionBlock } from \"./reflectionBlock\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to implement the sheen module of the PBR material\r\n */\r\nexport class SheenBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new SheenBlock\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, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"color\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"roughness\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"sheen\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"sheen\", this, NodeMaterialConnectionPointDirection.Output, SheenBlock, \"SheenBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * If true, the sheen effect is layered above the base BRDF with the albedo-scaling technique.\r\n * It allows the strength of the sheen effect to not depend on the base color of the material,\r\n * making it easier to setup and tweak the effect\r\n */\r\n @editableInPropertyPage(\"Albedo scaling\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true, notifiers: { update: true } })\r\n public albedoScaling: boolean = false;\r\n\r\n /**\r\n * Defines if the sheen is linked to the sheen color.\r\n */\r\n @editableInPropertyPage(\"Link sheen with albedo\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { embedded: true, notifiers: { update: true } })\r\n public linkSheenWithAlbedo: boolean = false;\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(\"sheenOut\");\r\n state._excludeVariableName(\"sheenMapData\");\r\n state._excludeVariableName(\"vSheenColor\");\r\n state._excludeVariableName(\"vSheenRoughness\");\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 \"SheenBlock\";\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 color input component\r\n */\r\n public get color(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the roughness input component\r\n */\r\n public get roughness(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the sheen object output component\r\n */\r\n public get sheen(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\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 defines.setValue(\"SHEEN\", true);\r\n defines.setValue(\"SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE\", true, true);\r\n defines.setValue(\"SHEEN_LINKWITHALBEDO\", this.linkSheenWithAlbedo, true);\r\n defines.setValue(\"SHEEN_ROUGHNESS\", this.roughness.isConnected, true);\r\n defines.setValue(\"SHEEN_ALBEDOSCALING\", this.albedoScaling, true);\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param reflectionBlock instance of a ReflectionBlock null if the code must be generated without an active reflection module\r\n * @param state define the build state\r\n * @returns the shader code\r\n */\r\n public getCode(reflectionBlock: Nullable<ReflectionBlock>, state: NodeMaterialBuildState): string {\r\n const color = this.color.isConnected ? this.color.associatedVariableName : `vec3${state.fSuffix}(1.)`;\r\n const intensity = this.intensity.isConnected ? this.intensity.associatedVariableName : \"1.\";\r\n const roughness = this.roughness.isConnected ? this.roughness.associatedVariableName : \"0.\";\r\n const texture = `vec4${state.fSuffix}(0.)`;\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n const code = `#ifdef SHEEN\r\n ${isWebGPU ? \"var sheenOut: sheenOutParams\" : \"sheenOutParams sheenOut\"};\r\n\r\n ${state._declareLocalVar(\"vSheenColor\", NodeMaterialBlockConnectionPointTypes.Vector4)} = vec4${state.fSuffix}(${color}, ${intensity});\r\n\r\n sheenOut = sheenBlock(\r\n vSheenColor\r\n #ifdef SHEEN_ROUGHNESS\r\n , ${roughness}\r\n #endif\r\n , roughness\r\n #ifdef SHEEN_TEXTURE\r\n , ${texture}\r\n ${isWebGPU ? `, ${texture}Sampler` : \"\"}\r\n , 1.0\r\n #endif\r\n , reflectanceF0\r\n #ifdef SHEEN_LINKWITHALBEDO\r\n , baseColor\r\n , surfaceAlbedo\r\n #endif\r\n #ifdef ENVIRONMENTBRDF\r\n , NdotV\r\n , environmentBrdf\r\n #endif\r\n #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)\r\n , AARoughnessFactors\r\n , ${isWebGPU ? \"uniforms.\" : \"\"}${reflectionBlock?._vReflectionMicrosurfaceInfosName}\r\n , ${reflectionBlock?._vReflectionInfosName}\r\n , ${reflectionBlock?.reflectionColor}\r\n , ${isWebGPU ? \"uniforms.\" : \"\"}vLightingIntensity\r\n #ifdef ${reflectionBlock?._define3DName}\r\n , ${reflectionBlock?._cubeSamplerName} \r\n ${isWebGPU ? `, ${reflectionBlock?._cubeSamplerName}Sampler` : \"\"}\r\n #else\r\n , ${reflectionBlock?._2DSamplerName}\r\n ${isWebGPU ? `, ${reflectionBlock?._2DSamplerName}Sampler` : \"\"}\r\n #endif\r\n , reflectionOut.reflectionCoords\r\n , NdotVUnclamped\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${reflectionBlock?._define3DName}\r\n , ${reflectionBlock?._cubeSamplerName} \r\n ${isWebGPU ? `, ${reflectionBlock?._cubeSamplerName}Sampler` : \"\"}\r\n , ${reflectionBlock?._cubeSamplerName}\r\n ${isWebGPU ? `, ${reflectionBlock?._cubeSamplerName}Sampler` : \"\"}\r\n #else\r\n , ${reflectionBlock?._2DSamplerName}\r\n ${isWebGPU ? `, ${reflectionBlock?._2DSamplerName}Sampler` : \"\"}\r\n , ${reflectionBlock?._2DSamplerName}\r\n ${isWebGPU ? `, ${reflectionBlock?._2DSamplerName}Sampler` : \"\"}\r\n #endif\r\n #endif\r\n #if !defined(${reflectionBlock?._defineSkyboxName}) && defined(RADIANCEOCCLUSION)\r\n , seo\r\n #endif\r\n #if !defined(${reflectionBlock?._defineSkyboxName}) && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(${reflectionBlock?._define3DName})\r\n , eho\r\n #endif\r\n #endif\r\n );\r\n\r\n #ifdef SHEEN_LINKWITHALBEDO\r\n surfaceAlbedo = sheenOut.surfaceAlbedo;\r\n #endif\r\n #endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n state.sharedData.blocksWithDefines.push(this);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n codeString += `${this._codeVariableName}.albedoScaling = ${this.albedoScaling};\\n`;\r\n codeString += `${this._codeVariableName}.linkSheenWithAlbedo = ${this.linkSheenWithAlbedo};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @returns the serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.albedoScaling = this.albedoScaling;\r\n serializationObject.linkSheenWithAlbedo = this.linkSheenWithAlbedo;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root URL\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.albedoScaling = serializationObject.albedoScaling;\r\n this.linkSheenWithAlbedo = serializationObject.linkSheenWithAlbedo;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.SheenBlock\", SheenBlock);\r\n"]}
@@ -166,7 +166,7 @@ export class CloudBlock extends NodeMaterialBlock {
166
166
  if (this.offsetZ.isConnected && seedType === NodeMaterialBlockConnectionPointTypes.Vector3) {
167
167
  state.compilationString += `${localVariable}.z += 0.1 * ${this.offsetZ.associatedVariableName};\n`;
168
168
  }
169
- let chaosValue = "";
169
+ let chaosValue;
170
170
  if (this.chaos.isConnected) {
171
171
  chaosValue = this.chaos.associatedVariableName;
172
172
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cloudBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/cloudBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../Decorators/nodeDecorator\";\r\nimport type { Scene } from \"../../../scene\";\r\nimport { ShaderLanguage } from \"../../../Materials/shaderLanguage\";\r\n/**\r\n * block used to Generate Fractal Brownian Motion Clouds\r\n */\r\nexport class CloudBlock extends NodeMaterialBlock {\r\n /** Gets or sets the number of octaves */\r\n @editableInPropertyPage(\"Octaves\", PropertyTypeForEdition.Int, undefined, { embedded: true })\r\n public octaves = 6.0;\r\n\r\n /**\r\n * Creates a new CloudBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n this.registerInput(\"seed\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerInput(\"chaos\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"offsetX\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"offsetY\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"offsetZ\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Float);\r\n\r\n this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector2);\r\n this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this._linkConnectionTypes(0, 1);\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 \"CloudBlock\";\r\n }\r\n\r\n /**\r\n * Gets the seed input component\r\n */\r\n public get seed(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the chaos input component\r\n */\r\n public get chaos(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the offset X input component\r\n */\r\n public get offsetX(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the offset Y input component\r\n */\r\n public get offsetY(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the offset Z input component\r\n */\r\n public get offsetZ(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (!this.seed.isConnected) {\r\n return;\r\n }\r\n\r\n if (!this._outputs[0].hasEndpoints) {\r\n return;\r\n }\r\n\r\n let functionString = `\r\n\r\n float cloudRandom(float p) { \r\n float temp = fract(p * 0.011); \r\n temp *= temp + 7.5; \r\n temp *= temp + temp; \r\n return fract(temp); \r\n }\r\n\r\n // Based on Morgan McGuire @morgan3d\r\n // https://www.shadertoy.com/view/4dS3Wd\r\n float cloudNoise2(vec2 x, vec2 chaos) {\r\n vec2 step = chaos * vec2(75., 120.) + vec2(75., 120.);\r\n\r\n vec2 i = floor(x);\r\n vec2 f = fract(x);\r\n\r\n float n = dot(i, step);\r\n\r\n vec2 u = f * f * (3.0 - 2.0 * f);\r\n return mix(\r\n mix(cloudRandom(n + dot(step, vec2(0, 0))), cloudRandom(n + dot(step, vec2(1, 0))), u.x),\r\n mix(cloudRandom(n + dot(step, vec2(0, 1))), cloudRandom(n + dot(step, vec2(1, 1))), u.x),\r\n u.y\r\n );\r\n }\r\n\r\n float cloudNoise3(vec3 x, vec3 chaos) {\r\n vec3 step = chaos * vec3(60., 120., 75.) + vec3(60., 120., 75.);\r\n\r\n vec3 i = floor(x);\r\n vec3 f = fract(x);\r\n\r\n float n = dot(i, step);\r\n\r\n vec3 u = f * f * (3.0 - 2.0 * f);\r\n return mix(mix(mix( cloudRandom(n + dot(step, vec3(0, 0, 0))), cloudRandom(n + dot(step, vec3(1, 0, 0))), u.x),\r\n mix( cloudRandom(n + dot(step, vec3(0, 1, 0))), cloudRandom(n + dot(step, vec3(1, 1, 0))), u.x), u.y),\r\n mix(mix( cloudRandom(n + dot(step, vec3(0, 0, 1))), cloudRandom(n + dot(step, vec3(1, 0, 1))), u.x),\r\n mix( cloudRandom(n + dot(step, vec3(0, 1, 1))), cloudRandom(n + dot(step, vec3(1, 1, 1))), u.x), u.y), u.z);\r\n }`;\r\n\r\n let fractalBrownianString = `\r\n float fbm2(vec2 st, vec2 chaos) {\r\n // Initial values\r\n float value = 0.0;\r\n float amplitude = .5;\r\n float frequency = 0.;\r\n\r\n // Loop of octaves\r\n vec2 tempST = st;\r\n for (int i = 0; i < OCTAVES; i++) {\r\n value += amplitude * cloudNoise2(tempST, chaos);\r\n tempST *= 2.0;\r\n amplitude *= 0.5;\r\n }\r\n return value;\r\n }\r\n\r\n float fbm3(vec3 x, vec3 chaos) {\r\n // Initial values\r\n float value = 0.0;\r\n float amplitude = 0.5;\r\n vec3 tempX = x;\r\n for (int i = 0; i < OCTAVES; i++) {\r\n value += amplitude * cloudNoise3(tempX, chaos);\r\n tempX = tempX * 2.0;\r\n amplitude *= 0.5;\r\n }\r\n return value;\r\n }`;\r\n\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n functionString = state._babylonSLtoWGSL(functionString);\r\n fractalBrownianString = state._babylonSLtoWGSL(fractalBrownianString);\r\n }\r\n\r\n const fbmNewName = `fbm${this.octaves}`;\r\n state._emitFunction(\"CloudBlockCode\", functionString, \"// CloudBlockCode\");\r\n state._emitFunction(\r\n \"CloudBlockCodeFBM\" + this.octaves,\r\n fractalBrownianString.replace(/fbm/gi, fbmNewName).replace(/OCTAVES/gi, (this.octaves | 0).toString()),\r\n \"// CloudBlockCode FBM\"\r\n );\r\n\r\n const localVariable = state._getFreeVariableName(\"st\");\r\n const seedType = this.seed.connectedPoint?.type || NodeMaterialBlockConnectionPointTypes.Vector3;\r\n\r\n state.compilationString += `${state._declareLocalVar(localVariable, seedType)} = ${this.seed.associatedVariableName};\\n`;\r\n if (this.offsetX.isConnected) {\r\n state.compilationString += `${localVariable}.x += 0.1 * ${this.offsetX.associatedVariableName};\\n`;\r\n }\r\n if (this.offsetY.isConnected) {\r\n state.compilationString += `${localVariable}.y += 0.1 * ${this.offsetY.associatedVariableName};\\n`;\r\n }\r\n if (this.offsetZ.isConnected && seedType === NodeMaterialBlockConnectionPointTypes.Vector3) {\r\n state.compilationString += `${localVariable}.z += 0.1 * ${this.offsetZ.associatedVariableName};\\n`;\r\n }\r\n\r\n let chaosValue = \"\";\r\n if (this.chaos.isConnected) {\r\n chaosValue = this.chaos.associatedVariableName;\r\n } else {\r\n const addF = state.fSuffix;\r\n chaosValue = this.seed.connectedPoint?.type === NodeMaterialBlockConnectionPointTypes.Vector2 ? `vec2${addF}(0., 0.)` : `vec3${addF}(0., 0., 0.)`;\r\n }\r\n\r\n state.compilationString +=\r\n state._declareOutput(this._outputs[0]) +\r\n ` = ${fbmNewName}${this.seed.connectedPoint?.type === NodeMaterialBlockConnectionPointTypes.Vector2 ? \"2\" : \"3\"}(${localVariable}, ${chaosValue});\\n`;\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n const codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.octaves = ${this.octaves};\\n`;\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @returns the serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.octaves = this.octaves;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root URL\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.octaves = serializationObject.octaves;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.CloudBlock\", CloudBlock);\r\n"]}
1
+ {"version":3,"file":"cloudBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/cloudBlock.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qCAAqC,EAAE,MAAM,gDAAgD,CAAC;AAGvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAA0B,MAAM,mCAAmC,CAAC;AAGnG;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,iBAAiB;IAK7C;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QATlD,yCAAyC;QAElC,YAAO,GAAG,GAAG,CAAC;QAQjB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,qCAAqC,CAAC,UAAU,CAAC,CAAC;QAC7E,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,qCAAqC,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACpF,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,qCAAqC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACjF,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,qCAAqC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACjF,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,qCAAqC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACjF,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,qCAAqC,CAAC,KAAK,CAAC,CAAC;QAE3E,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,IAAI,CAAC,qCAAqC,CAAC,OAAO,CAAC,CAAC;QACjG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,IAAI,CAAC,qCAAqC,CAAC,OAAO,CAAC,CAAC;QACjG,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,YAAY,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACzB,OAAO;QACX,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;YACjC,OAAO;QACX,CAAC;QAED,IAAI,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAwCnB,CAAC;QAEH,IAAI,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA4B1B,CAAC;QAEH,IAAI,KAAK,CAAC,cAAc,gCAAwB,EAAE,CAAC;YAC/C,cAAc,GAAG,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;YACxD,qBAAqB,GAAG,KAAK,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACxC,KAAK,CAAC,aAAa,CAAC,gBAAgB,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC;QAC3E,KAAK,CAAC,aAAa,CACf,mBAAmB,GAAG,IAAI,CAAC,OAAO,EAClC,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EACtG,uBAAuB,CAC1B,CAAC;QAEF,MAAM,aAAa,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,qCAAqC,CAAC,OAAO,CAAC;QAEjG,KAAK,CAAC,iBAAiB,IAAI,GAAG,KAAK,CAAC,gBAAgB,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC;QACzH,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC3B,KAAK,CAAC,iBAAiB,IAAI,GAAG,aAAa,eAAe,IAAI,CAAC,OAAO,CAAC,sBAAsB,KAAK,CAAC;QACvG,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;YAC3B,KAAK,CAAC,iBAAiB,IAAI,GAAG,aAAa,eAAe,IAAI,CAAC,OAAO,CAAC,sBAAsB,KAAK,CAAC;QACvG,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,QAAQ,KAAK,qCAAqC,CAAC,OAAO,EAAE,CAAC;YACzF,KAAK,CAAC,iBAAiB,IAAI,GAAG,aAAa,eAAe,IAAI,CAAC,OAAO,CAAC,sBAAsB,KAAK,CAAC;QACvG,CAAC;QAED,IAAI,UAAkB,CAAC;QACvB,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACzB,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC;QACnD,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;YAC3B,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,KAAK,qCAAqC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,OAAO,IAAI,cAAc,CAAC;QACtJ,CAAC;QAED,KAAK,CAAC,iBAAiB;YACnB,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACtC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,KAAK,qCAAqC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,aAAa,KAAK,UAAU,MAAM,CAAC;QAE1J,OAAO,IAAI,CAAC;IAChB,CAAC;IAEkB,mBAAmB;QAClC,MAAM,UAAU,GAAG,KAAK,CAAC,mBAAmB,EAAE,GAAG,GAAG,IAAI,CAAC,iBAAiB,cAAc,IAAI,CAAC,OAAO,KAAK,CAAC;QAC1G,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;;OAGG;IACa,SAAS;QACrB,MAAM,mBAAmB,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAE9C,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAE3C,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACa,YAAY,CAAC,mBAAwB,EAAE,KAAY,EAAE,OAAe;QAChF,KAAK,CAAC,YAAY,CAAC,mBAAmB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAExD,IAAI,CAAC,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC;IAC/C,CAAC;CACJ;AA/NU;IADN,sBAAsB,CAAC,SAAS,sCAA8B,SAAS,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;2CACxE;AAiOzB,aAAa,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../Decorators/nodeDecorator\";\r\nimport type { Scene } from \"../../../scene\";\r\nimport { ShaderLanguage } from \"../../../Materials/shaderLanguage\";\r\n/**\r\n * block used to Generate Fractal Brownian Motion Clouds\r\n */\r\nexport class CloudBlock extends NodeMaterialBlock {\r\n /** Gets or sets the number of octaves */\r\n @editableInPropertyPage(\"Octaves\", PropertyTypeForEdition.Int, undefined, { embedded: true })\r\n public octaves = 6.0;\r\n\r\n /**\r\n * Creates a new CloudBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n this.registerInput(\"seed\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerInput(\"chaos\", NodeMaterialBlockConnectionPointTypes.AutoDetect, true);\r\n this.registerInput(\"offsetX\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"offsetY\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"offsetZ\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Float);\r\n\r\n this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector2);\r\n this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this._linkConnectionTypes(0, 1);\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 \"CloudBlock\";\r\n }\r\n\r\n /**\r\n * Gets the seed input component\r\n */\r\n public get seed(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the chaos input component\r\n */\r\n public get chaos(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the offset X input component\r\n */\r\n public get offsetX(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the offset Y input component\r\n */\r\n public get offsetY(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the offset Z input component\r\n */\r\n public get offsetZ(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (!this.seed.isConnected) {\r\n return;\r\n }\r\n\r\n if (!this._outputs[0].hasEndpoints) {\r\n return;\r\n }\r\n\r\n let functionString = `\r\n\r\n float cloudRandom(float p) { \r\n float temp = fract(p * 0.011); \r\n temp *= temp + 7.5; \r\n temp *= temp + temp; \r\n return fract(temp); \r\n }\r\n\r\n // Based on Morgan McGuire @morgan3d\r\n // https://www.shadertoy.com/view/4dS3Wd\r\n float cloudNoise2(vec2 x, vec2 chaos) {\r\n vec2 step = chaos * vec2(75., 120.) + vec2(75., 120.);\r\n\r\n vec2 i = floor(x);\r\n vec2 f = fract(x);\r\n\r\n float n = dot(i, step);\r\n\r\n vec2 u = f * f * (3.0 - 2.0 * f);\r\n return mix(\r\n mix(cloudRandom(n + dot(step, vec2(0, 0))), cloudRandom(n + dot(step, vec2(1, 0))), u.x),\r\n mix(cloudRandom(n + dot(step, vec2(0, 1))), cloudRandom(n + dot(step, vec2(1, 1))), u.x),\r\n u.y\r\n );\r\n }\r\n\r\n float cloudNoise3(vec3 x, vec3 chaos) {\r\n vec3 step = chaos * vec3(60., 120., 75.) + vec3(60., 120., 75.);\r\n\r\n vec3 i = floor(x);\r\n vec3 f = fract(x);\r\n\r\n float n = dot(i, step);\r\n\r\n vec3 u = f * f * (3.0 - 2.0 * f);\r\n return mix(mix(mix( cloudRandom(n + dot(step, vec3(0, 0, 0))), cloudRandom(n + dot(step, vec3(1, 0, 0))), u.x),\r\n mix( cloudRandom(n + dot(step, vec3(0, 1, 0))), cloudRandom(n + dot(step, vec3(1, 1, 0))), u.x), u.y),\r\n mix(mix( cloudRandom(n + dot(step, vec3(0, 0, 1))), cloudRandom(n + dot(step, vec3(1, 0, 1))), u.x),\r\n mix( cloudRandom(n + dot(step, vec3(0, 1, 1))), cloudRandom(n + dot(step, vec3(1, 1, 1))), u.x), u.y), u.z);\r\n }`;\r\n\r\n let fractalBrownianString = `\r\n float fbm2(vec2 st, vec2 chaos) {\r\n // Initial values\r\n float value = 0.0;\r\n float amplitude = .5;\r\n float frequency = 0.;\r\n\r\n // Loop of octaves\r\n vec2 tempST = st;\r\n for (int i = 0; i < OCTAVES; i++) {\r\n value += amplitude * cloudNoise2(tempST, chaos);\r\n tempST *= 2.0;\r\n amplitude *= 0.5;\r\n }\r\n return value;\r\n }\r\n\r\n float fbm3(vec3 x, vec3 chaos) {\r\n // Initial values\r\n float value = 0.0;\r\n float amplitude = 0.5;\r\n vec3 tempX = x;\r\n for (int i = 0; i < OCTAVES; i++) {\r\n value += amplitude * cloudNoise3(tempX, chaos);\r\n tempX = tempX * 2.0;\r\n amplitude *= 0.5;\r\n }\r\n return value;\r\n }`;\r\n\r\n if (state.shaderLanguage === ShaderLanguage.WGSL) {\r\n functionString = state._babylonSLtoWGSL(functionString);\r\n fractalBrownianString = state._babylonSLtoWGSL(fractalBrownianString);\r\n }\r\n\r\n const fbmNewName = `fbm${this.octaves}`;\r\n state._emitFunction(\"CloudBlockCode\", functionString, \"// CloudBlockCode\");\r\n state._emitFunction(\r\n \"CloudBlockCodeFBM\" + this.octaves,\r\n fractalBrownianString.replace(/fbm/gi, fbmNewName).replace(/OCTAVES/gi, (this.octaves | 0).toString()),\r\n \"// CloudBlockCode FBM\"\r\n );\r\n\r\n const localVariable = state._getFreeVariableName(\"st\");\r\n const seedType = this.seed.connectedPoint?.type || NodeMaterialBlockConnectionPointTypes.Vector3;\r\n\r\n state.compilationString += `${state._declareLocalVar(localVariable, seedType)} = ${this.seed.associatedVariableName};\\n`;\r\n if (this.offsetX.isConnected) {\r\n state.compilationString += `${localVariable}.x += 0.1 * ${this.offsetX.associatedVariableName};\\n`;\r\n }\r\n if (this.offsetY.isConnected) {\r\n state.compilationString += `${localVariable}.y += 0.1 * ${this.offsetY.associatedVariableName};\\n`;\r\n }\r\n if (this.offsetZ.isConnected && seedType === NodeMaterialBlockConnectionPointTypes.Vector3) {\r\n state.compilationString += `${localVariable}.z += 0.1 * ${this.offsetZ.associatedVariableName};\\n`;\r\n }\r\n\r\n let chaosValue: string;\r\n if (this.chaos.isConnected) {\r\n chaosValue = this.chaos.associatedVariableName;\r\n } else {\r\n const addF = state.fSuffix;\r\n chaosValue = this.seed.connectedPoint?.type === NodeMaterialBlockConnectionPointTypes.Vector2 ? `vec2${addF}(0., 0.)` : `vec3${addF}(0., 0., 0.)`;\r\n }\r\n\r\n state.compilationString +=\r\n state._declareOutput(this._outputs[0]) +\r\n ` = ${fbmNewName}${this.seed.connectedPoint?.type === NodeMaterialBlockConnectionPointTypes.Vector2 ? \"2\" : \"3\"}(${localVariable}, ${chaosValue});\\n`;\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n const codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.octaves = ${this.octaves};\\n`;\r\n return codeString;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @returns the serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.octaves = this.octaves;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root URL\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.octaves = serializationObject.octaves;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.CloudBlock\", CloudBlock);\r\n"]}
@@ -131,11 +131,10 @@ export class CurveBlock extends NodeMaterialBlock {
131
131
  _buildBlock(state) {
132
132
  super._buildBlock(state);
133
133
  const output = this._outputs[0];
134
- let registeredFunction = "";
135
- let registeredFunctionName = "";
134
+ let registeredFunction;
136
135
  const inputType = state._getShaderType(this.input.type);
137
136
  const isWGSL = state.shaderLanguage === 1 /* ShaderLanguage.WGSL */;
138
- registeredFunctionName = CurveBlockTypes[this.type] + "_" + inputType.replace("<", "").replace(">", "");
137
+ const registeredFunctionName = CurveBlockTypes[this.type] + "_" + inputType.replace("<", "").replace(">", "");
139
138
  switch (this.type) {
140
139
  case CurveBlockTypes.EaseInSine:
141
140
  registeredFunction = `return 1.0 - cos((v * 3.1415) / 2.0)`;
@@ -1 +1 @@
1
- {"version":3,"file":"curveBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/curveBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport type { Scene } from \"../../../scene\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"core/Decorators/nodeDecorator\";\r\n\r\n/**\r\n * Types of curves supported by the Curve block\r\n */\r\nexport enum CurveBlockTypes {\r\n /** EaseInSine */\r\n EaseInSine,\r\n /** EaseOutSine */\r\n EaseOutSine,\r\n /** EaseInOutSine */\r\n EaseInOutSine,\r\n /** EaseInQuad */\r\n EaseInQuad,\r\n /** EaseOutQuad */\r\n EaseOutQuad,\r\n /** EaseInOutQuad */\r\n EaseInOutQuad,\r\n /** EaseInCubic */\r\n EaseInCubic,\r\n /** EaseOutCubic */\r\n EaseOutCubic,\r\n /** EaseInOutCubic */\r\n EaseInOutCubic,\r\n /** EaseInQuart */\r\n EaseInQuart,\r\n /** EaseOutQuart */\r\n EaseOutQuart,\r\n /** EaseInOutQuart */\r\n EaseInOutQuart,\r\n /** EaseInQuint */\r\n EaseInQuint,\r\n /** EaseOutQuint */\r\n EaseOutQuint,\r\n /** EaseInOutQuint */\r\n EaseInOutQuint,\r\n /** EaseInExpo */\r\n EaseInExpo,\r\n /** EaseOutExpo */\r\n EaseOutExpo,\r\n /** EaseInOutExpo */\r\n EaseInOutExpo,\r\n /** EaseInCirc */\r\n EaseInCirc,\r\n /** EaseOutCirc */\r\n EaseOutCirc,\r\n /** EaseInOutCirc */\r\n EaseInOutCirc,\r\n /** EaseInBack */\r\n EaseInBack,\r\n /** EaseOutBack */\r\n EaseOutBack,\r\n /** EaseInOutBack */\r\n EaseInOutBack,\r\n /** EaseInElastic */\r\n EaseInElastic,\r\n /** EaseOutElastic */\r\n EaseOutElastic,\r\n /** EaseInOutElastic */\r\n EaseInOutElastic,\r\n}\r\n\r\n/**\r\n * Block used to apply curve operation\r\n */\r\nexport class CurveBlock extends NodeMaterialBlock {\r\n /**\r\n * Gets or sets the type of the curve applied by the block\r\n */\r\n @editableInPropertyPage(\"Type\", PropertyTypeForEdition.List, \"ADVANCED\", {\r\n notifiers: { rebuild: true },\r\n embedded: true,\r\n options: [\r\n { label: \"EaseInSine\", value: CurveBlockTypes.EaseInSine },\r\n { label: \"EaseOutSine\", value: CurveBlockTypes.EaseOutSine },\r\n { label: \"EaseInOutSine\", value: CurveBlockTypes.EaseInOutSine },\r\n { label: \"EaseInQuad\", value: CurveBlockTypes.EaseInQuad },\r\n { label: \"EaseOutQuad\", value: CurveBlockTypes.EaseOutQuad },\r\n { label: \"EaseInOutQuad\", value: CurveBlockTypes.EaseInOutQuad },\r\n { label: \"EaseInCubic\", value: CurveBlockTypes.EaseInCubic },\r\n { label: \"EaseOutCubic\", value: CurveBlockTypes.EaseOutCubic },\r\n { label: \"EaseInOutCubic\", value: CurveBlockTypes.EaseInOutCubic },\r\n { label: \"EaseInQuart\", value: CurveBlockTypes.EaseInQuart },\r\n { label: \"EaseOutQuart\", value: CurveBlockTypes.EaseOutQuart },\r\n { label: \"EaseInOutQuart\", value: CurveBlockTypes.EaseInOutQuart },\r\n { label: \"EaseInQuint\", value: CurveBlockTypes.EaseInQuint },\r\n { label: \"EaseOutQuint\", value: CurveBlockTypes.EaseOutQuint },\r\n { label: \"EaseInOutQuint\", value: CurveBlockTypes.EaseInOutQuint },\r\n { label: \"EaseInExpo\", value: CurveBlockTypes.EaseInExpo },\r\n { label: \"EaseOutExpo\", value: CurveBlockTypes.EaseOutExpo },\r\n { label: \"EaseInOutExpo\", value: CurveBlockTypes.EaseInOutExpo },\r\n { label: \"EaseInCirc\", value: CurveBlockTypes.EaseInCirc },\r\n { label: \"EaseOutCirc\", value: CurveBlockTypes.EaseOutCirc },\r\n { label: \"EaseInOutCirc\", value: CurveBlockTypes.EaseInOutCirc },\r\n { label: \"EaseInBack\", value: CurveBlockTypes.EaseInBack },\r\n { label: \"EaseOutBack\", value: CurveBlockTypes.EaseOutBack },\r\n { label: \"EaseInOutBack\", value: CurveBlockTypes.EaseInOutBack },\r\n { label: \"EaseInElastic\", value: CurveBlockTypes.EaseInElastic },\r\n { label: \"EaseOutElastic\", value: CurveBlockTypes.EaseOutElastic },\r\n { label: \"EaseInOutElastic\", value: CurveBlockTypes.EaseInOutElastic },\r\n ],\r\n })\r\n public type = CurveBlockTypes.EaseInOutSine;\r\n\r\n /**\r\n * Creates a new CurveBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\"input\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.BasedOnInput);\r\n\r\n this._outputs[0]._typeConnectionSource = this._inputs[0];\r\n\r\n this._inputs[0].excludedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Matrix);\r\n this._inputs[0].excludedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Object);\r\n this._inputs[0].excludedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Int);\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 \"CurveBlock\";\r\n }\r\n\r\n /**\r\n * Gets the input component\r\n */\r\n public get input(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n private _duplicateEntry(entry: string, component: string) {\r\n return `ret.${component} = ${entry.replace(/VAL/g, \"v.\" + component)}`;\r\n }\r\n\r\n private _duplicateEntryDirect(entry: string) {\r\n return `return ${entry.replace(/VAL/g, \"v\")}`;\r\n }\r\n\r\n private _duplicateVector(entry: string, inputType: string, isWGSL: boolean) {\r\n if (inputType === \"float\" || inputType === \"f32\") {\r\n return this._duplicateEntryDirect(entry);\r\n }\r\n\r\n const size = parseInt(inputType.replace(\"vec\", \"\"));\r\n let code = isWGSL\r\n ? `\r\n var ret: vec${size}f = vec${size}f(0.0);\r\n `\r\n : `\r\n vec${size} ret = vec${size}(0.0);\r\n `;\r\n\r\n for (let i = 1; i <= size; i++) {\r\n code += this._duplicateEntry(entry, i === 1 ? \"x\" : i === 2 ? \"y\" : i === 3 ? \"z\" : \"w\") + \";\\n\";\r\n }\r\n\r\n code += \"return ret;\\n\";\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const output = this._outputs[0];\r\n let registeredFunction = \"\";\r\n let registeredFunctionName = \"\";\r\n\r\n const inputType = state._getShaderType(this.input.type);\r\n const isWGSL = state.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n registeredFunctionName = CurveBlockTypes[this.type] + \"_\" + inputType.replace(\"<\", \"\").replace(\">\", \"\");\r\n\r\n switch (this.type) {\r\n case CurveBlockTypes.EaseInSine:\r\n registeredFunction = `return 1.0 - cos((v * 3.1415) / 2.0)`;\r\n break;\r\n case CurveBlockTypes.EaseOutSine:\r\n registeredFunction = `return sin((v * 3.1415) / 2.0)`;\r\n break;\r\n case CurveBlockTypes.EaseInOutSine:\r\n registeredFunction = `return -(cos(v * 3.1415) - 1.0) / 2.0`;\r\n break;\r\n case CurveBlockTypes.EaseInQuad:\r\n registeredFunction = `return v * v`;\r\n break;\r\n case CurveBlockTypes.EaseOutQuad:\r\n registeredFunction = `return (1.0 - v) * (1.0 - v)`;\r\n break;\r\n case CurveBlockTypes.EaseInOutQuad: {\r\n const entry = state._generateTernary(\"2.0 * VAL * VAL\", \"1.0 - pow(-2.0 * VAL + 2.0, 2.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInCubic:\r\n registeredFunction = `return v * v * v`;\r\n break;\r\n case CurveBlockTypes.EaseOutCubic: {\r\n const entry = \"1.0 - pow(1.0 - VAL, 3.0)\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutCubic: {\r\n const entry = state._generateTernary(\"4.0 * VAL * VAL * VAL\", \"1.0 - pow(-2.0 * VAL + 2.0, 3.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInQuart:\r\n registeredFunction = `return v * v * v * v`;\r\n break;\r\n case CurveBlockTypes.EaseOutQuart: {\r\n const entry = \"1.0 - pow(1.0 - VAL, 4.0)\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutQuart: {\r\n const entry = state._generateTernary(\"8.0 * VAL * VAL * VAL * VAL\", \"1.0 - pow(-2.0 * VAL + 2.0, 4.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInQuint:\r\n registeredFunction = `return v * v * v * v * v`;\r\n break;\r\n case CurveBlockTypes.EaseOutQuint: {\r\n const entry = \"1.0 - pow(1.0 - VAL, 5.0)\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutQuint: {\r\n const entry = state._generateTernary(\"16.0 * VAL * VAL * VAL * VAL * VAL\", \"1.0 - pow(-2.0 * VAL + 2.0, 5.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInExpo: {\r\n const entry = state._generateTernary(\"0.0\", \"pow(2.0, 10.0 * VAL - 10.0)\", \"VAL == 0.0\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseOutExpo: {\r\n const entry = state._generateTernary(\"1.0\", \"1.0 - pow(2.0, -10.0 * VAL)\", \"VAL == 1.0\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutExpo: {\r\n const entry = state._generateTernary(\r\n \"0.0\",\r\n state._generateTernary(\r\n \"1.0\",\r\n state._generateTernary(\"pow(2.0, 20.0 * VAL - 10.0) / 2.0\", \"(2.0 - pow(2.0, -20.0 * VAL + 10.0)) / 2.0\", \"VAL < 0.5\"),\r\n \"VAL == 1.0\"\r\n ),\r\n \"VAL == 0.0\"\r\n );\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInCirc: {\r\n const entry = \"1.0 - sqrt(1.0 - pow(VAL, 2.0))\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseOutCirc: {\r\n const entry = \"sqrt(1.0 - pow(VAL - 1.0, 2.0))\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutCirc: {\r\n const entry = state._generateTernary(\"(1.0 - sqrt(1.0 - pow(2.0 * VAL, 2.0))) / 2.0\", \"(sqrt(1.0 - pow(-2.0 * VAL + 2.0, 2.0)) + 1.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInBack: {\r\n registeredFunction = \"return 2.70158 * v * v * v - 1.70158 * v * v\";\r\n break;\r\n }\r\n case CurveBlockTypes.EaseOutBack: {\r\n const entry = \"2.70158 * pow(VAL - 1.0, 3.0) + 1.70158 * pow(VAL - 1.0, 2.0)\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutBack: {\r\n const entry = state._generateTernary(\r\n \"(pow(2.0 * VAL, 2.0) * ((3.5949095) * 2.0 * VAL - 2.5949095)) / 2.0\",\r\n \"(pow(2.0 * VAL - 2.0, 2.0) * (3.5949095 * (VAL * 2.0 - 2.0) + 3.5949095) + 2.0) / 2.0\",\r\n \"VAL < 0.5\"\r\n );\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInElastic: {\r\n const entry = state._generateTernary(\r\n \"0.0\",\r\n state._generateTernary(\"1.0\", \"-pow(2.0, 10.0 * VAL - 10.0) * sin((VAL * 10.0 - 10.75) * ((2.0 * 3.1415) / 3.0))\", \"VAL == 1.0\"),\r\n \"VAL == 0.0\"\r\n );\r\n\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseOutElastic: {\r\n const entry = state._generateTernary(\r\n \"0.0\",\r\n state._generateTernary(\"1.0\", \"pow(2.0, -10.0 * VAL) * sin((VAL * 10.0 - 0.75) * ((2.0 * 3.1415) / 3.0)) + 1.0\", \"VAL == 1.0\"),\r\n \"VAL == 0.0\"\r\n );\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutElastic: {\r\n const entry = state._generateTernary(\r\n \"0.0\",\r\n state._generateTernary(\r\n \"1.0\",\r\n state._generateTernary(\r\n \"-(pow(2.0, 20.0 * VAL - 10.0) * sin((20.0 * VAL - 11.125) * ((2.0 * 3.1415) / 4.5))) / 2.0\",\r\n \"(pow(2.0, -20.0 * VAL + 10.0) * sin((20.0 * VAL - 11.125) * ((2.0 * 3.1415) / 4.5))) / 2.0 + 1.0\",\r\n \"VAL < 0.5\"\r\n ),\r\n \"VAL == 1.0\"\r\n ),\r\n \"VAL == 0.0\"\r\n );\r\n\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n }\r\n\r\n if (isWGSL) {\r\n state._emitFunction(registeredFunctionName, `fn ${registeredFunctionName}(v: ${inputType}) -> ${inputType} {${registeredFunction};}\\n`, \"\");\r\n } else {\r\n state._emitFunction(registeredFunctionName, `${inputType} ${registeredFunctionName}(${inputType} v) {${registeredFunction};}\\n`, \"\");\r\n }\r\n\r\n state.compilationString += state._declareOutput(output) + ` = ${registeredFunctionName}(${this.input.associatedVariableName});\\n`;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @returns the serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.curveType = this.type;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root URL\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.type = serializationObject.curveType;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n const codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.type = BABYLON.CurveBlockTypes.${CurveBlockTypes[this.type]};\\n`;\r\n return codeString;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.CurveBlock\", CurveBlock);\r\n"]}
1
+ {"version":3,"file":"curveBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/curveBlock.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qCAAqC,EAAE,MAAM,gDAAgD,CAAC;AAGvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD,OAAO,EAAE,sBAAsB,EAA0B,6CAAsC;AAE/F;;GAEG;AACH,MAAM,CAAN,IAAY,eAuDX;AAvDD,WAAY,eAAe;IACvB,iBAAiB;IACjB,iEAAU,CAAA;IACV,kBAAkB;IAClB,mEAAW,CAAA;IACX,oBAAoB;IACpB,uEAAa,CAAA;IACb,iBAAiB;IACjB,iEAAU,CAAA;IACV,kBAAkB;IAClB,mEAAW,CAAA;IACX,oBAAoB;IACpB,uEAAa,CAAA;IACb,kBAAkB;IAClB,mEAAW,CAAA;IACX,mBAAmB;IACnB,qEAAY,CAAA;IACZ,qBAAqB;IACrB,yEAAc,CAAA;IACd,kBAAkB;IAClB,mEAAW,CAAA;IACX,mBAAmB;IACnB,sEAAY,CAAA;IACZ,qBAAqB;IACrB,0EAAc,CAAA;IACd,kBAAkB;IAClB,oEAAW,CAAA;IACX,mBAAmB;IACnB,sEAAY,CAAA;IACZ,qBAAqB;IACrB,0EAAc,CAAA;IACd,iBAAiB;IACjB,kEAAU,CAAA;IACV,kBAAkB;IAClB,oEAAW,CAAA;IACX,oBAAoB;IACpB,wEAAa,CAAA;IACb,iBAAiB;IACjB,kEAAU,CAAA;IACV,kBAAkB;IAClB,oEAAW,CAAA;IACX,oBAAoB;IACpB,wEAAa,CAAA;IACb,iBAAiB;IACjB,kEAAU,CAAA;IACV,kBAAkB;IAClB,oEAAW,CAAA;IACX,oBAAoB;IACpB,wEAAa,CAAA;IACb,oBAAoB;IACpB,wEAAa,CAAA;IACb,qBAAqB;IACrB,0EAAc,CAAA;IACd,uBAAuB;IACvB,8EAAgB,CAAA;AACpB,CAAC,EAvDW,eAAe,KAAf,eAAe,QAuD1B;AAED;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,iBAAiB;IAuC7C;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QA3ClD;;WAEG;QAkCI,SAAI,GAAG,eAAe,CAAC,aAAa,CAAC;QASxC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,qCAAqC,CAAC,UAAU,CAAC,CAAC;QAC9E,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,qCAAqC,CAAC,YAAY,CAAC,CAAC;QAElF,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAEzD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,IAAI,CAAC,qCAAqC,CAAC,MAAM,CAAC,CAAC;QAChG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,IAAI,CAAC,qCAAqC,CAAC,MAAM,CAAC,CAAC;QAChG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,IAAI,CAAC,qCAAqC,CAAC,GAAG,CAAC,CAAC;IACjG,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,YAAY,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEO,eAAe,CAAC,KAAa,EAAE,SAAiB;QACpD,OAAO,OAAO,SAAS,MAAM,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;IAC3E,CAAC;IAEO,qBAAqB,CAAC,KAAa;QACvC,OAAO,UAAU,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;IAClD,CAAC;IAEO,gBAAgB,CAAC,KAAa,EAAE,SAAiB,EAAE,MAAe;QACtE,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QACpD,IAAI,IAAI,GAAG,MAAM;YACb,CAAC,CAAC;0BACY,IAAI,UAAU,IAAI;SACnC;YACG,CAAC,CAAC;iBACG,IAAI,aAAa,IAAI;SAC7B,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACrG,CAAC;QAED,IAAI,IAAI,eAAe,CAAC;QACxB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,kBAA0B,CAAC;QAE/B,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,gCAAwB,CAAC;QAE5D,MAAM,sBAAsB,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAE9G,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAChB,KAAK,eAAe,CAAC,UAAU;gBAC3B,kBAAkB,GAAG,sCAAsC,CAAC;gBAC5D,MAAM;YACV,KAAK,eAAe,CAAC,WAAW;gBAC5B,kBAAkB,GAAG,gCAAgC,CAAC;gBACtD,MAAM;YACV,KAAK,eAAe,CAAC,aAAa;gBAC9B,kBAAkB,GAAG,uCAAuC,CAAC;gBAC7D,MAAM;YACV,KAAK,eAAe,CAAC,UAAU;gBAC3B,kBAAkB,GAAG,cAAc,CAAC;gBACpC,MAAM;YACV,KAAK,eAAe,CAAC,WAAW;gBAC5B,kBAAkB,GAAG,8BAA8B,CAAC;gBACpD,MAAM;YACV,KAAK,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC;gBACjC,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,wCAAwC,EAAE,WAAW,CAAC,CAAC;gBAC/G,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM;YACV,CAAC;YACD,KAAK,eAAe,CAAC,WAAW;gBAC5B,kBAAkB,GAAG,kBAAkB,CAAC;gBACxC,MAAM;YACV,KAAK,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC;gBAChC,MAAM,KAAK,GAAG,2BAA2B,CAAC;gBAC1C,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM;YACV,CAAC;YACD,KAAK,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;gBAClC,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,uBAAuB,EAAE,wCAAwC,EAAE,WAAW,CAAC,CAAC;gBACrH,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM;YACV,CAAC;YACD,KAAK,eAAe,CAAC,WAAW;gBAC5B,kBAAkB,GAAG,sBAAsB,CAAC;gBAC5C,MAAM;YACV,KAAK,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC;gBAChC,MAAM,KAAK,GAAG,2BAA2B,CAAC;gBAC1C,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM;YACV,CAAC;YACD,KAAK,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;gBAClC,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,6BAA6B,EAAE,wCAAwC,EAAE,WAAW,CAAC,CAAC;gBAC3H,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM;YACV,CAAC;YACD,KAAK,eAAe,CAAC,WAAW;gBAC5B,kBAAkB,GAAG,0BAA0B,CAAC;gBAChD,MAAM;YACV,KAAK,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC;gBAChC,MAAM,KAAK,GAAG,2BAA2B,CAAC;gBAC1C,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM;YACV,CAAC;YACD,KAAK,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;gBAClC,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,oCAAoC,EAAE,wCAAwC,EAAE,WAAW,CAAC,CAAC;gBAClI,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM;YACV,CAAC;YACD,KAAK,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,6BAA6B,EAAE,YAAY,CAAC,CAAC;gBACzF,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM;YACV,CAAC;YACD,KAAK,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,6BAA6B,EAAE,YAAY,CAAC,CAAC;gBACzF,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM;YACV,CAAC;YACD,KAAK,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC;gBACjC,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAChC,KAAK,EACL,KAAK,CAAC,gBAAgB,CAClB,KAAK,EACL,KAAK,CAAC,gBAAgB,CAAC,mCAAmC,EAAE,4CAA4C,EAAE,WAAW,CAAC,EACtH,YAAY,CACf,EACD,YAAY,CACf,CAAC;gBACF,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM;YACV,CAAC;YACD,KAAK,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC9B,MAAM,KAAK,GAAG,iCAAiC,CAAC;gBAChD,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM;YACV,CAAC;YACD,KAAK,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC/B,MAAM,KAAK,GAAG,iCAAiC,CAAC;gBAChD,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM;YACV,CAAC;YACD,KAAK,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC;gBACjC,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,+CAA+C,EAAE,sDAAsD,EAAE,WAAW,CAAC,CAAC;gBAC3J,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM;YACV,CAAC;YACD,KAAK,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC9B,kBAAkB,GAAG,8CAA8C,CAAC;gBACpE,MAAM;YACV,CAAC;YACD,KAAK,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC/B,MAAM,KAAK,GAAG,+DAA+D,CAAC;gBAC9E,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM;YACV,CAAC;YACD,KAAK,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC;gBACjC,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAChC,qEAAqE,EACrE,uFAAuF,EACvF,WAAW,CACd,CAAC;gBACF,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM;YACV,CAAC;YACD,KAAK,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC;gBACjC,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAChC,KAAK,EACL,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,mFAAmF,EAAE,YAAY,CAAC,EAChI,YAAY,CACf,CAAC;gBAEF,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM;YACV,CAAC;YACD,KAAK,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC;gBAClC,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAChC,KAAK,EACL,KAAK,CAAC,gBAAgB,CAAC,KAAK,EAAE,iFAAiF,EAAE,YAAY,CAAC,EAC9H,YAAY,CACf,CAAC;gBACF,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM;YACV,CAAC;YACD,KAAK,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBACpC,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAChC,KAAK,EACL,KAAK,CAAC,gBAAgB,CAClB,KAAK,EACL,KAAK,CAAC,gBAAgB,CAClB,4FAA4F,EAC5F,kGAAkG,EAClG,WAAW,CACd,EACD,YAAY,CACf,EACD,YAAY,CACf,CAAC;gBAEF,kBAAkB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;gBACrE,MAAM;YACV,CAAC;QACL,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACT,KAAK,CAAC,aAAa,CAAC,sBAAsB,EAAE,MAAM,sBAAsB,OAAO,SAAS,QAAQ,SAAS,MAAM,kBAAkB,MAAM,EAAE,EAAE,CAAC,CAAC;QACjJ,CAAC;aAAM,CAAC;YACJ,KAAK,CAAC,aAAa,CAAC,sBAAsB,EAAE,GAAG,SAAS,IAAI,sBAAsB,IAAI,SAAS,QAAQ,kBAAkB,MAAM,EAAE,EAAE,CAAC,CAAC;QACzI,CAAC;QAED,KAAK,CAAC,iBAAiB,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM,sBAAsB,IAAI,IAAI,CAAC,KAAK,CAAC,sBAAsB,MAAM,CAAC;QAElI,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;OAGG;IACa,SAAS;QACrB,MAAM,mBAAmB,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAE9C,mBAAmB,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC;QAE1C,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACa,YAAY,CAAC,mBAAwB,EAAE,KAAY,EAAE,OAAe;QAChF,KAAK,CAAC,YAAY,CAAC,mBAAmB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAExD,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC,SAAS,CAAC;IAC9C,CAAC;IAEkB,mBAAmB;QAClC,MAAM,UAAU,GAAG,KAAK,CAAC,mBAAmB,EAAE,GAAG,GAAG,IAAI,CAAC,iBAAiB,mCAAmC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;QAC7I,OAAO,UAAU,CAAC;IACtB,CAAC;CACJ;AApRU;IAjCN,sBAAsB,CAAC,MAAM,uCAA+B,UAAU,EAAE;QACrE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QAC5B,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE;YACL,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,CAAC,UAAU,EAAE;YAC1D,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,CAAC,WAAW,EAAE;YAC5D,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,CAAC,aAAa,EAAE;YAChE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,CAAC,UAAU,EAAE;YAC1D,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,CAAC,WAAW,EAAE;YAC5D,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,CAAC,aAAa,EAAE;YAChE,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,CAAC,WAAW,EAAE;YAC5D,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,CAAC,YAAY,EAAE;YAC9D,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,CAAC,cAAc,EAAE;YAClE,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,CAAC,WAAW,EAAE;YAC5D,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,CAAC,YAAY,EAAE;YAC9D,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,CAAC,cAAc,EAAE;YAClE,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,CAAC,WAAW,EAAE;YAC5D,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,CAAC,YAAY,EAAE;YAC9D,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,CAAC,cAAc,EAAE;YAClE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,CAAC,UAAU,EAAE;YAC1D,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,CAAC,WAAW,EAAE;YAC5D,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,CAAC,aAAa,EAAE;YAChE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,CAAC,UAAU,EAAE;YAC1D,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,CAAC,WAAW,EAAE;YAC5D,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,CAAC,aAAa,EAAE;YAChE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,CAAC,UAAU,EAAE;YAC1D,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,CAAC,WAAW,EAAE;YAC5D,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,CAAC,aAAa,EAAE;YAChE,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,CAAC,aAAa,EAAE;YAChE,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,CAAC,cAAc,EAAE;YAClE,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,eAAe,CAAC,gBAAgB,EAAE;SACzE;KACJ,CAAC;wCAC0C;AAsRhD,aAAa,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport type { Scene } from \"../../../scene\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"core/Decorators/nodeDecorator\";\r\n\r\n/**\r\n * Types of curves supported by the Curve block\r\n */\r\nexport enum CurveBlockTypes {\r\n /** EaseInSine */\r\n EaseInSine,\r\n /** EaseOutSine */\r\n EaseOutSine,\r\n /** EaseInOutSine */\r\n EaseInOutSine,\r\n /** EaseInQuad */\r\n EaseInQuad,\r\n /** EaseOutQuad */\r\n EaseOutQuad,\r\n /** EaseInOutQuad */\r\n EaseInOutQuad,\r\n /** EaseInCubic */\r\n EaseInCubic,\r\n /** EaseOutCubic */\r\n EaseOutCubic,\r\n /** EaseInOutCubic */\r\n EaseInOutCubic,\r\n /** EaseInQuart */\r\n EaseInQuart,\r\n /** EaseOutQuart */\r\n EaseOutQuart,\r\n /** EaseInOutQuart */\r\n EaseInOutQuart,\r\n /** EaseInQuint */\r\n EaseInQuint,\r\n /** EaseOutQuint */\r\n EaseOutQuint,\r\n /** EaseInOutQuint */\r\n EaseInOutQuint,\r\n /** EaseInExpo */\r\n EaseInExpo,\r\n /** EaseOutExpo */\r\n EaseOutExpo,\r\n /** EaseInOutExpo */\r\n EaseInOutExpo,\r\n /** EaseInCirc */\r\n EaseInCirc,\r\n /** EaseOutCirc */\r\n EaseOutCirc,\r\n /** EaseInOutCirc */\r\n EaseInOutCirc,\r\n /** EaseInBack */\r\n EaseInBack,\r\n /** EaseOutBack */\r\n EaseOutBack,\r\n /** EaseInOutBack */\r\n EaseInOutBack,\r\n /** EaseInElastic */\r\n EaseInElastic,\r\n /** EaseOutElastic */\r\n EaseOutElastic,\r\n /** EaseInOutElastic */\r\n EaseInOutElastic,\r\n}\r\n\r\n/**\r\n * Block used to apply curve operation\r\n */\r\nexport class CurveBlock extends NodeMaterialBlock {\r\n /**\r\n * Gets or sets the type of the curve applied by the block\r\n */\r\n @editableInPropertyPage(\"Type\", PropertyTypeForEdition.List, \"ADVANCED\", {\r\n notifiers: { rebuild: true },\r\n embedded: true,\r\n options: [\r\n { label: \"EaseInSine\", value: CurveBlockTypes.EaseInSine },\r\n { label: \"EaseOutSine\", value: CurveBlockTypes.EaseOutSine },\r\n { label: \"EaseInOutSine\", value: CurveBlockTypes.EaseInOutSine },\r\n { label: \"EaseInQuad\", value: CurveBlockTypes.EaseInQuad },\r\n { label: \"EaseOutQuad\", value: CurveBlockTypes.EaseOutQuad },\r\n { label: \"EaseInOutQuad\", value: CurveBlockTypes.EaseInOutQuad },\r\n { label: \"EaseInCubic\", value: CurveBlockTypes.EaseInCubic },\r\n { label: \"EaseOutCubic\", value: CurveBlockTypes.EaseOutCubic },\r\n { label: \"EaseInOutCubic\", value: CurveBlockTypes.EaseInOutCubic },\r\n { label: \"EaseInQuart\", value: CurveBlockTypes.EaseInQuart },\r\n { label: \"EaseOutQuart\", value: CurveBlockTypes.EaseOutQuart },\r\n { label: \"EaseInOutQuart\", value: CurveBlockTypes.EaseInOutQuart },\r\n { label: \"EaseInQuint\", value: CurveBlockTypes.EaseInQuint },\r\n { label: \"EaseOutQuint\", value: CurveBlockTypes.EaseOutQuint },\r\n { label: \"EaseInOutQuint\", value: CurveBlockTypes.EaseInOutQuint },\r\n { label: \"EaseInExpo\", value: CurveBlockTypes.EaseInExpo },\r\n { label: \"EaseOutExpo\", value: CurveBlockTypes.EaseOutExpo },\r\n { label: \"EaseInOutExpo\", value: CurveBlockTypes.EaseInOutExpo },\r\n { label: \"EaseInCirc\", value: CurveBlockTypes.EaseInCirc },\r\n { label: \"EaseOutCirc\", value: CurveBlockTypes.EaseOutCirc },\r\n { label: \"EaseInOutCirc\", value: CurveBlockTypes.EaseInOutCirc },\r\n { label: \"EaseInBack\", value: CurveBlockTypes.EaseInBack },\r\n { label: \"EaseOutBack\", value: CurveBlockTypes.EaseOutBack },\r\n { label: \"EaseInOutBack\", value: CurveBlockTypes.EaseInOutBack },\r\n { label: \"EaseInElastic\", value: CurveBlockTypes.EaseInElastic },\r\n { label: \"EaseOutElastic\", value: CurveBlockTypes.EaseOutElastic },\r\n { label: \"EaseInOutElastic\", value: CurveBlockTypes.EaseInOutElastic },\r\n ],\r\n })\r\n public type = CurveBlockTypes.EaseInOutSine;\r\n\r\n /**\r\n * Creates a new CurveBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\"input\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.BasedOnInput);\r\n\r\n this._outputs[0]._typeConnectionSource = this._inputs[0];\r\n\r\n this._inputs[0].excludedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Matrix);\r\n this._inputs[0].excludedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Object);\r\n this._inputs[0].excludedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Int);\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 \"CurveBlock\";\r\n }\r\n\r\n /**\r\n * Gets the input component\r\n */\r\n public get input(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n private _duplicateEntry(entry: string, component: string) {\r\n return `ret.${component} = ${entry.replace(/VAL/g, \"v.\" + component)}`;\r\n }\r\n\r\n private _duplicateEntryDirect(entry: string) {\r\n return `return ${entry.replace(/VAL/g, \"v\")}`;\r\n }\r\n\r\n private _duplicateVector(entry: string, inputType: string, isWGSL: boolean) {\r\n if (inputType === \"float\" || inputType === \"f32\") {\r\n return this._duplicateEntryDirect(entry);\r\n }\r\n\r\n const size = parseInt(inputType.replace(\"vec\", \"\"));\r\n let code = isWGSL\r\n ? `\r\n var ret: vec${size}f = vec${size}f(0.0);\r\n `\r\n : `\r\n vec${size} ret = vec${size}(0.0);\r\n `;\r\n\r\n for (let i = 1; i <= size; i++) {\r\n code += this._duplicateEntry(entry, i === 1 ? \"x\" : i === 2 ? \"y\" : i === 3 ? \"z\" : \"w\") + \";\\n\";\r\n }\r\n\r\n code += \"return ret;\\n\";\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const output = this._outputs[0];\r\n let registeredFunction: string;\r\n\r\n const inputType = state._getShaderType(this.input.type);\r\n const isWGSL = state.shaderLanguage === ShaderLanguage.WGSL;\r\n\r\n const registeredFunctionName = CurveBlockTypes[this.type] + \"_\" + inputType.replace(\"<\", \"\").replace(\">\", \"\");\r\n\r\n switch (this.type) {\r\n case CurveBlockTypes.EaseInSine:\r\n registeredFunction = `return 1.0 - cos((v * 3.1415) / 2.0)`;\r\n break;\r\n case CurveBlockTypes.EaseOutSine:\r\n registeredFunction = `return sin((v * 3.1415) / 2.0)`;\r\n break;\r\n case CurveBlockTypes.EaseInOutSine:\r\n registeredFunction = `return -(cos(v * 3.1415) - 1.0) / 2.0`;\r\n break;\r\n case CurveBlockTypes.EaseInQuad:\r\n registeredFunction = `return v * v`;\r\n break;\r\n case CurveBlockTypes.EaseOutQuad:\r\n registeredFunction = `return (1.0 - v) * (1.0 - v)`;\r\n break;\r\n case CurveBlockTypes.EaseInOutQuad: {\r\n const entry = state._generateTernary(\"2.0 * VAL * VAL\", \"1.0 - pow(-2.0 * VAL + 2.0, 2.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInCubic:\r\n registeredFunction = `return v * v * v`;\r\n break;\r\n case CurveBlockTypes.EaseOutCubic: {\r\n const entry = \"1.0 - pow(1.0 - VAL, 3.0)\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutCubic: {\r\n const entry = state._generateTernary(\"4.0 * VAL * VAL * VAL\", \"1.0 - pow(-2.0 * VAL + 2.0, 3.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInQuart:\r\n registeredFunction = `return v * v * v * v`;\r\n break;\r\n case CurveBlockTypes.EaseOutQuart: {\r\n const entry = \"1.0 - pow(1.0 - VAL, 4.0)\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutQuart: {\r\n const entry = state._generateTernary(\"8.0 * VAL * VAL * VAL * VAL\", \"1.0 - pow(-2.0 * VAL + 2.0, 4.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInQuint:\r\n registeredFunction = `return v * v * v * v * v`;\r\n break;\r\n case CurveBlockTypes.EaseOutQuint: {\r\n const entry = \"1.0 - pow(1.0 - VAL, 5.0)\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutQuint: {\r\n const entry = state._generateTernary(\"16.0 * VAL * VAL * VAL * VAL * VAL\", \"1.0 - pow(-2.0 * VAL + 2.0, 5.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInExpo: {\r\n const entry = state._generateTernary(\"0.0\", \"pow(2.0, 10.0 * VAL - 10.0)\", \"VAL == 0.0\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseOutExpo: {\r\n const entry = state._generateTernary(\"1.0\", \"1.0 - pow(2.0, -10.0 * VAL)\", \"VAL == 1.0\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutExpo: {\r\n const entry = state._generateTernary(\r\n \"0.0\",\r\n state._generateTernary(\r\n \"1.0\",\r\n state._generateTernary(\"pow(2.0, 20.0 * VAL - 10.0) / 2.0\", \"(2.0 - pow(2.0, -20.0 * VAL + 10.0)) / 2.0\", \"VAL < 0.5\"),\r\n \"VAL == 1.0\"\r\n ),\r\n \"VAL == 0.0\"\r\n );\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInCirc: {\r\n const entry = \"1.0 - sqrt(1.0 - pow(VAL, 2.0))\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseOutCirc: {\r\n const entry = \"sqrt(1.0 - pow(VAL - 1.0, 2.0))\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutCirc: {\r\n const entry = state._generateTernary(\"(1.0 - sqrt(1.0 - pow(2.0 * VAL, 2.0))) / 2.0\", \"(sqrt(1.0 - pow(-2.0 * VAL + 2.0, 2.0)) + 1.0) / 2.0\", \"VAL < 0.5\");\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInBack: {\r\n registeredFunction = \"return 2.70158 * v * v * v - 1.70158 * v * v\";\r\n break;\r\n }\r\n case CurveBlockTypes.EaseOutBack: {\r\n const entry = \"2.70158 * pow(VAL - 1.0, 3.0) + 1.70158 * pow(VAL - 1.0, 2.0)\";\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutBack: {\r\n const entry = state._generateTernary(\r\n \"(pow(2.0 * VAL, 2.0) * ((3.5949095) * 2.0 * VAL - 2.5949095)) / 2.0\",\r\n \"(pow(2.0 * VAL - 2.0, 2.0) * (3.5949095 * (VAL * 2.0 - 2.0) + 3.5949095) + 2.0) / 2.0\",\r\n \"VAL < 0.5\"\r\n );\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInElastic: {\r\n const entry = state._generateTernary(\r\n \"0.0\",\r\n state._generateTernary(\"1.0\", \"-pow(2.0, 10.0 * VAL - 10.0) * sin((VAL * 10.0 - 10.75) * ((2.0 * 3.1415) / 3.0))\", \"VAL == 1.0\"),\r\n \"VAL == 0.0\"\r\n );\r\n\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseOutElastic: {\r\n const entry = state._generateTernary(\r\n \"0.0\",\r\n state._generateTernary(\"1.0\", \"pow(2.0, -10.0 * VAL) * sin((VAL * 10.0 - 0.75) * ((2.0 * 3.1415) / 3.0)) + 1.0\", \"VAL == 1.0\"),\r\n \"VAL == 0.0\"\r\n );\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n case CurveBlockTypes.EaseInOutElastic: {\r\n const entry = state._generateTernary(\r\n \"0.0\",\r\n state._generateTernary(\r\n \"1.0\",\r\n state._generateTernary(\r\n \"-(pow(2.0, 20.0 * VAL - 10.0) * sin((20.0 * VAL - 11.125) * ((2.0 * 3.1415) / 4.5))) / 2.0\",\r\n \"(pow(2.0, -20.0 * VAL + 10.0) * sin((20.0 * VAL - 11.125) * ((2.0 * 3.1415) / 4.5))) / 2.0 + 1.0\",\r\n \"VAL < 0.5\"\r\n ),\r\n \"VAL == 1.0\"\r\n ),\r\n \"VAL == 0.0\"\r\n );\r\n\r\n registeredFunction = this._duplicateVector(entry, inputType, isWGSL);\r\n break;\r\n }\r\n }\r\n\r\n if (isWGSL) {\r\n state._emitFunction(registeredFunctionName, `fn ${registeredFunctionName}(v: ${inputType}) -> ${inputType} {${registeredFunction};}\\n`, \"\");\r\n } else {\r\n state._emitFunction(registeredFunctionName, `${inputType} ${registeredFunctionName}(${inputType} v) {${registeredFunction};}\\n`, \"\");\r\n }\r\n\r\n state.compilationString += state._declareOutput(output) + ` = ${registeredFunctionName}(${this.input.associatedVariableName});\\n`;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Serializes the block\r\n * @returns the serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.curveType = this.type;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the block\r\n * @param serializationObject - the serialization object\r\n * @param scene - the scene\r\n * @param rootUrl - the root URL\r\n */\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.type = serializationObject.curveType;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n const codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.type = BABYLON.CurveBlockTypes.${CurveBlockTypes[this.type]};\\n`;\r\n return codeString;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.CurveBlock\", CurveBlock);\r\n"]}
@@ -1201,7 +1201,7 @@ export class NodeMaterial extends NodeMaterialBase {
1201
1201
  const previousEffect = subMesh.effect;
1202
1202
  // Compilation
1203
1203
  const join = defines.toString();
1204
- let effect = engine.createEffect({
1204
+ const effect = engine.createEffect({
1205
1205
  vertex: "nodeMaterial" + this._buildId,
1206
1206
  fragment: "nodeMaterial" + this._buildId,
1207
1207
  vertexSource: this._vertexCompilationState.compilationString,
@@ -1227,7 +1227,6 @@ export class NodeMaterial extends NodeMaterialBase {
1227
1227
  }
1228
1228
  // Use previous effect while new one is compiling
1229
1229
  if (this.allowShaderHotSwapping && previousEffect && !effect.isReady()) {
1230
- effect = previousEffect;
1231
1230
  defines.markAsUnprocessed();
1232
1231
  if (result.lightDisposed) {
1233
1232
  // re register in case it takes more than one frame.