@babylonjs/core 5.35.1 → 5.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/Audio/sound.d.ts +5 -0
  2. package/Audio/sound.js +7 -0
  3. package/Audio/sound.js.map +1 -1
  4. package/Cameras/arcRotateCamera.d.ts +2 -2
  5. package/Cameras/arcRotateCamera.js.map +1 -1
  6. package/Debug/physicsViewer.d.ts +4 -3
  7. package/Debug/physicsViewer.js +2 -2
  8. package/Debug/physicsViewer.js.map +1 -1
  9. package/Engines/Extensions/engine.views.d.ts +4 -0
  10. package/Engines/Extensions/engine.views.js +61 -42
  11. package/Engines/Extensions/engine.views.js.map +1 -1
  12. package/Engines/thinEngine.js +2 -2
  13. package/Engines/thinEngine.js.map +1 -1
  14. package/Gizmos/planeRotationGizmo.js +3 -1
  15. package/Gizmos/planeRotationGizmo.js.map +1 -1
  16. package/Inputs/scene.inputManager.js +4 -4
  17. package/Inputs/scene.inputManager.js.map +1 -1
  18. package/Loading/Plugins/babylonFileLoader.js +3 -3
  19. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  20. package/Materials/Node/Blocks/Dual/currentScreenBlock.js +2 -3
  21. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  22. package/Materials/Node/Blocks/Dual/fogBlock.js +4 -4
  23. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  24. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +2 -2
  25. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  26. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +2 -3
  27. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  28. package/Materials/Node/Blocks/Dual/textureBlock.js +4 -5
  29. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  30. package/Materials/Node/Blocks/Fragment/TBNBlock.js +2 -2
  31. package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
  32. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +2 -2
  33. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  34. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +2 -2
  35. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
  36. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.d.ts +4 -0
  37. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +35 -19
  38. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  39. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +2 -2
  40. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
  41. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js +2 -2
  42. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js.map +1 -1
  43. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +2 -2
  44. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  45. package/Materials/Node/Blocks/PBR/reflectionBlock.js +2 -2
  46. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  47. package/Materials/Node/Blocks/Particle/particleTextureBlock.js +2 -3
  48. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  49. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +2 -2
  50. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  51. package/Materials/Node/Blocks/gradientBlock.js +7 -6
  52. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  53. package/Materials/Node/Blocks/normalBlendBlock.js +10 -8
  54. package/Materials/Node/Blocks/normalBlendBlock.js.map +1 -1
  55. package/Materials/Node/Blocks/randomNumberBlock.js +6 -5
  56. package/Materials/Node/Blocks/randomNumberBlock.js.map +1 -1
  57. package/Materials/Node/Blocks/reflectBlock.js +10 -8
  58. package/Materials/Node/Blocks/reflectBlock.js.map +1 -1
  59. package/Materials/Node/Blocks/refractBlock.js +10 -8
  60. package/Materials/Node/Blocks/refractBlock.js.map +1 -1
  61. package/Materials/Node/Blocks/triPlanarBlock.js +4 -4
  62. package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
  63. package/Materials/Node/Enums/nodeMaterialBlockConnectionPointTypes.d.ts +3 -1
  64. package/Materials/Node/Enums/nodeMaterialBlockConnectionPointTypes.js +2 -0
  65. package/Materials/Node/Enums/nodeMaterialBlockConnectionPointTypes.js.map +1 -1
  66. package/Materials/Node/nodeMaterial.d.ts +19 -1
  67. package/Materials/Node/nodeMaterial.js +30 -0
  68. package/Materials/Node/nodeMaterial.js.map +1 -1
  69. package/Materials/Node/nodeMaterialBlockConnectionPoint.d.ts +5 -0
  70. package/Materials/Node/nodeMaterialBlockConnectionPoint.js +13 -0
  71. package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
  72. package/Materials/Node/nodeMaterialBuildStateSharedData.d.ts +2 -8
  73. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  74. package/Materials/Textures/baseTexture.d.ts +2 -1
  75. package/Materials/Textures/baseTexture.js +3 -2
  76. package/Materials/Textures/baseTexture.js.map +1 -1
  77. package/Materials/Textures/internalTexture.d.ts +2 -0
  78. package/Materials/Textures/internalTexture.js +4 -0
  79. package/Materials/Textures/internalTexture.js.map +1 -1
  80. package/Materials/Textures/mirrorTexture.js +0 -2
  81. package/Materials/Textures/mirrorTexture.js.map +1 -1
  82. package/Materials/Textures/texture.d.ts +2 -0
  83. package/Materials/Textures/texture.js +35 -7
  84. package/Materials/Textures/texture.js.map +1 -1
  85. package/Materials/Textures/videoTexture.d.ts +5 -0
  86. package/Materials/Textures/videoTexture.js +27 -23
  87. package/Materials/Textures/videoTexture.js.map +1 -1
  88. package/Materials/material.js +1 -1
  89. package/Materials/material.js.map +1 -1
  90. package/Materials/materialHelper.js +3 -0
  91. package/Materials/materialHelper.js.map +1 -1
  92. package/Meshes/abstractMesh.d.ts +4 -4
  93. package/Meshes/abstractMesh.js +4 -4
  94. package/Meshes/abstractMesh.js.map +1 -1
  95. package/Meshes/mesh.d.ts +2 -2
  96. package/Meshes/mesh.js +1 -1
  97. package/Meshes/mesh.js.map +1 -1
  98. package/Misc/copyTextureToTexture.d.ts +9 -2
  99. package/Misc/copyTextureToTexture.js +23 -1
  100. package/Misc/copyTextureToTexture.js.map +1 -1
  101. package/Misc/virtualJoystick.d.ts +1 -0
  102. package/Misc/virtualJoystick.js +6 -0
  103. package/Misc/virtualJoystick.js.map +1 -1
  104. package/Particles/IParticleSystem.d.ts +15 -1
  105. package/Particles/IParticleSystem.js.map +1 -1
  106. package/Particles/gpuParticleSystem.d.ts +24 -2
  107. package/Particles/gpuParticleSystem.js +98 -43
  108. package/Particles/gpuParticleSystem.js.map +1 -1
  109. package/Particles/particleSystem.d.ts +6 -1
  110. package/Particles/particleSystem.js +7 -2
  111. package/Particles/particleSystem.js.map +1 -1
  112. package/Physics/IPhysicsEngine.d.ts +8 -108
  113. package/Physics/IPhysicsEngine.js.map +1 -1
  114. package/Physics/Plugins/ammoJSPlugin.d.ts +1 -389
  115. package/Physics/Plugins/ammoJSPlugin.js +2 -1414
  116. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  117. package/Physics/Plugins/cannonJSPlugin.d.ts +1 -75
  118. package/Physics/Plugins/cannonJSPlugin.js +2 -664
  119. package/Physics/Plugins/cannonJSPlugin.js.map +1 -1
  120. package/Physics/Plugins/oimoJSPlugin.d.ts +1 -59
  121. package/Physics/Plugins/oimoJSPlugin.js +2 -432
  122. package/Physics/Plugins/oimoJSPlugin.js.map +1 -1
  123. package/Physics/index.d.ts +3 -6
  124. package/Physics/index.js +3 -6
  125. package/Physics/index.js.map +1 -1
  126. package/Physics/physicsEngine.d.ts +1 -135
  127. package/Physics/physicsEngine.js +2 -221
  128. package/Physics/physicsEngine.js.map +1 -1
  129. package/Physics/physicsEngineComponent.d.ts +7 -42
  130. package/Physics/physicsEngineComponent.js +11 -71
  131. package/Physics/physicsEngineComponent.js.map +1 -1
  132. package/Physics/physicsHelper.d.ts +1 -411
  133. package/Physics/physicsHelper.js +2 -708
  134. package/Physics/physicsHelper.js.map +1 -1
  135. package/Physics/physicsImpostor.d.ts +1 -640
  136. package/Physics/physicsImpostor.js +2 -1004
  137. package/Physics/physicsImpostor.js.map +1 -1
  138. package/Physics/physicsJoint.d.ts +1 -275
  139. package/Physics/physicsJoint.js +2 -222
  140. package/Physics/physicsJoint.js.map +1 -1
  141. package/Physics/v1/IPhysicsEnginePlugin.d.ts +73 -0
  142. package/Physics/v1/IPhysicsEnginePlugin.js +2 -0
  143. package/Physics/v1/IPhysicsEnginePlugin.js.map +1 -0
  144. package/Physics/v1/Plugins/ammoJSPlugin.d.ts +401 -0
  145. package/Physics/v1/Plugins/ammoJSPlugin.js +1431 -0
  146. package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -0
  147. package/Physics/v1/Plugins/cannonJSPlugin.d.ts +87 -0
  148. package/Physics/v1/Plugins/cannonJSPlugin.js +683 -0
  149. package/Physics/v1/Plugins/cannonJSPlugin.js.map +1 -0
  150. package/Physics/{Plugins → v1/Plugins}/index.d.ts +0 -0
  151. package/Physics/{Plugins → v1/Plugins}/index.js +0 -0
  152. package/Physics/v1/Plugins/index.js.map +1 -0
  153. package/Physics/v1/Plugins/oimoJSPlugin.d.ts +71 -0
  154. package/Physics/v1/Plugins/oimoJSPlugin.js +450 -0
  155. package/Physics/v1/Plugins/oimoJSPlugin.js.map +1 -0
  156. package/Physics/v1/index.d.ts +7 -0
  157. package/Physics/v1/index.js +9 -0
  158. package/Physics/v1/index.js.map +1 -0
  159. package/Physics/v1/physicsEngine.d.ts +147 -0
  160. package/Physics/v1/physicsEngine.js +237 -0
  161. package/Physics/v1/physicsEngine.js.map +1 -0
  162. package/Physics/v1/physicsEngineComponent.d.ts +45 -0
  163. package/Physics/v1/physicsEngineComponent.js +70 -0
  164. package/Physics/v1/physicsEngineComponent.js.map +1 -0
  165. package/Physics/v1/physicsHelper.d.ts +411 -0
  166. package/Physics/v1/physicsHelper.js +709 -0
  167. package/Physics/v1/physicsHelper.js.map +1 -0
  168. package/Physics/v1/physicsImpostor.d.ts +636 -0
  169. package/Physics/v1/physicsImpostor.js +1001 -0
  170. package/Physics/v1/physicsImpostor.js.map +1 -0
  171. package/Physics/v1/physicsJoint.d.ts +275 -0
  172. package/Physics/v1/physicsJoint.js +223 -0
  173. package/Physics/v1/physicsJoint.js.map +1 -0
  174. package/Physics/v2/IPhysicsEnginePlugin.d.ts +170 -0
  175. package/Physics/v2/IPhysicsEnginePlugin.js +47 -0
  176. package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -0
  177. package/Physics/v2/Plugins/index.d.ts +0 -0
  178. package/Physics/v2/Plugins/index.js +2 -0
  179. package/Physics/v2/Plugins/index.js.map +1 -0
  180. package/Physics/v2/index.d.ts +6 -0
  181. package/Physics/v2/index.js +8 -0
  182. package/Physics/v2/index.js.map +1 -0
  183. package/Physics/v2/physicsAggregate.d.ts +114 -0
  184. package/Physics/v2/physicsAggregate.js +46 -0
  185. package/Physics/v2/physicsAggregate.js.map +1 -0
  186. package/Physics/v2/physicsBody.d.ts +109 -0
  187. package/Physics/v2/physicsBody.js +158 -0
  188. package/Physics/v2/physicsBody.js.map +1 -0
  189. package/Physics/v2/physicsConstraint.d.ts +184 -0
  190. package/Physics/v2/physicsConstraint.js +257 -0
  191. package/Physics/v2/physicsConstraint.js.map +1 -0
  192. package/Physics/v2/physicsEngine.d.ts +103 -0
  193. package/Physics/v2/physicsEngine.js +146 -0
  194. package/Physics/v2/physicsEngine.js.map +1 -0
  195. package/Physics/v2/physicsEngineComponent.d.ts +31 -0
  196. package/Physics/v2/physicsEngineComponent.js +50 -0
  197. package/Physics/v2/physicsEngineComponent.js.map +1 -0
  198. package/Physics/v2/physicsMaterial.d.ts +45 -0
  199. package/Physics/v2/physicsMaterial.js +67 -0
  200. package/Physics/v2/physicsMaterial.js.map +1 -0
  201. package/Physics/v2/physicsShape.d.ts +182 -0
  202. package/Physics/v2/physicsShape.js +229 -0
  203. package/Physics/v2/physicsShape.js.map +1 -0
  204. package/PostProcesses/postProcess.d.ts +3 -1
  205. package/PostProcesses/postProcess.js +4 -1
  206. package/PostProcesses/postProcess.js.map +1 -1
  207. package/Rendering/fluidRenderer/fluidRenderer.d.ts +153 -0
  208. package/Rendering/fluidRenderer/fluidRenderer.js +410 -0
  209. package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -0
  210. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.d.ts +13 -0
  211. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js +31 -0
  212. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js.map +1 -0
  213. package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +81 -0
  214. package/Rendering/fluidRenderer/fluidRenderingObject.js +180 -0
  215. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -0
  216. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.d.ts +63 -0
  217. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +130 -0
  218. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -0
  219. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +64 -0
  220. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +104 -0
  221. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -0
  222. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +234 -0
  223. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +690 -0
  224. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -0
  225. package/Rendering/fluidRenderer/fluidRenderingTextures.d.ts +56 -0
  226. package/Rendering/fluidRenderer/fluidRenderingTextures.js +261 -0
  227. package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -0
  228. package/Rendering/fluidRenderer/index.d.ts +5 -0
  229. package/Rendering/fluidRenderer/index.js +6 -0
  230. package/Rendering/fluidRenderer/index.js.map +1 -0
  231. package/Rendering/index.d.ts +1 -0
  232. package/Rendering/index.js +2 -0
  233. package/Rendering/index.js.map +1 -1
  234. package/Shaders/copyTextureToTexture.fragment.js +4 -1
  235. package/Shaders/copyTextureToTexture.fragment.js.map +1 -1
  236. package/Shaders/fluidRenderingBilateralBlur.fragment.d.ts +5 -0
  237. package/Shaders/fluidRenderingBilateralBlur.fragment.js +9 -0
  238. package/Shaders/fluidRenderingBilateralBlur.fragment.js.map +1 -0
  239. package/Shaders/fluidRenderingParticleDepth.fragment.d.ts +5 -0
  240. package/Shaders/fluidRenderingParticleDepth.fragment.js +17 -0
  241. package/Shaders/fluidRenderingParticleDepth.fragment.js.map +1 -0
  242. package/Shaders/fluidRenderingParticleDepth.vertex.d.ts +5 -0
  243. package/Shaders/fluidRenderingParticleDepth.vertex.js +13 -0
  244. package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -0
  245. package/Shaders/fluidRenderingParticleDiffuse.fragment.d.ts +5 -0
  246. package/Shaders/fluidRenderingParticleDiffuse.fragment.js +9 -0
  247. package/Shaders/fluidRenderingParticleDiffuse.fragment.js.map +1 -0
  248. package/Shaders/fluidRenderingParticleDiffuse.vertex.d.ts +5 -0
  249. package/Shaders/fluidRenderingParticleDiffuse.vertex.js +4 -0
  250. package/Shaders/fluidRenderingParticleDiffuse.vertex.js.map +1 -0
  251. package/Shaders/fluidRenderingParticleThickness.fragment.d.ts +5 -0
  252. package/Shaders/fluidRenderingParticleThickness.fragment.js +9 -0
  253. package/Shaders/fluidRenderingParticleThickness.fragment.js.map +1 -0
  254. package/Shaders/fluidRenderingParticleThickness.vertex.d.ts +5 -0
  255. package/Shaders/fluidRenderingParticleThickness.vertex.js +9 -0
  256. package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -0
  257. package/Shaders/fluidRenderingRender.fragment.d.ts +5 -0
  258. package/Shaders/fluidRenderingRender.fragment.js +46 -0
  259. package/Shaders/fluidRenderingRender.fragment.js.map +1 -0
  260. package/Shaders/fluidRenderingStandardBlur.fragment.d.ts +5 -0
  261. package/Shaders/fluidRenderingStandardBlur.fragment.js +9 -0
  262. package/Shaders/fluidRenderingStandardBlur.fragment.js.map +1 -0
  263. package/XR/features/WebXRControllerPhysics.d.ts +1 -1
  264. package/XR/features/WebXRControllerPhysics.js +1 -1
  265. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  266. package/XR/features/WebXRHandTracking.js +1 -1
  267. package/XR/features/WebXRHandTracking.js.map +1 -1
  268. package/package.json +1 -1
  269. package/scene.js +6 -1
  270. package/scene.js.map +1 -1
  271. package/sceneComponent.d.ts +3 -0
  272. package/sceneComponent.js +3 -0
  273. package/sceneComponent.js.map +1 -1
  274. package/Physics/Plugins/index.js.map +0 -1
@@ -28,11 +28,11 @@ export class ReflectionBlock extends ReflectionTextureBaseBlock {
28
28
  */
29
29
  this.forceIrradianceInFragment = false;
30
30
  this._isUnique = true;
31
- this.registerInput("position", NodeMaterialBlockConnectionPointTypes.Vector3, false, NodeMaterialBlockTargets.Vertex);
31
+ this.registerInput("position", NodeMaterialBlockConnectionPointTypes.AutoDetect, false, NodeMaterialBlockTargets.Vertex);
32
32
  this.registerInput("world", NodeMaterialBlockConnectionPointTypes.Matrix, false, NodeMaterialBlockTargets.Vertex);
33
33
  this.registerInput("color", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);
34
34
  this.registerOutput("reflection", NodeMaterialBlockConnectionPointTypes.Object, NodeMaterialBlockTargets.Fragment, new NodeMaterialConnectionPointCustomObject("reflection", this, NodeMaterialConnectionPointDirection.Output, ReflectionBlock, "ReflectionBlock"));
35
- this.position.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector4);
35
+ this.position.addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);
36
36
  }
37
37
  _onGenerateOnlyFragmentCodeChanged() {
38
38
  if (this.position.isConnected) {
@@ -1 +1 @@
1
- {"version":3,"file":"reflectionBlock.js","sourceRoot":"","sources":["../../../../../../../lts/core/generated/Materials/Node/Blocks/PBR/reflectionBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { 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 type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { ReflectionTextureBaseBlock } from \"../Dual/reflectionTextureBaseBlock\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { Texture } from \"../../../Textures/texture\";\r\nimport type { BaseTexture } from \"../../../Textures/baseTexture\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport type { SubMesh } from \"../../../../Meshes/subMesh\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../nodeMaterialDecorator\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { Scalar } from \"../../../../Maths/math.scalar\";\r\n\r\n/**\r\n * Block used to implement the reflection module of the PBR material\r\n */\r\nexport class ReflectionBlock extends ReflectionTextureBaseBlock {\r\n /** @internal */\r\n public _defineLODReflectionAlpha: string;\r\n /** @internal */\r\n public _defineLinearSpecularReflection: string;\r\n private _vEnvironmentIrradianceName: string;\r\n /** @internal */\r\n public _vReflectionMicrosurfaceInfosName: string;\r\n /** @internal */\r\n public _vReflectionInfosName: string;\r\n /** @internal */\r\n public _vReflectionFilteringInfoName: string;\r\n private _scene: Scene;\r\n\r\n /**\r\n * The properties below are set by the main PBR block prior to calling methods of this class.\r\n * This is to avoid having to add them as inputs here whereas they are already inputs of the main block, so already known.\r\n * It's less burden on the user side in the editor part.\r\n */\r\n\r\n /** @internal */\r\n public worldPositionConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public worldNormalConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public cameraPositionConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public viewConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * Defines if the material uses spherical harmonics vs spherical polynomials for the\r\n * diffuse part of the IBL.\r\n */\r\n @editableInPropertyPage(\"Spherical Harmonics\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { notifiers: { update: true } })\r\n public useSphericalHarmonics: boolean = true;\r\n\r\n /**\r\n * Force the shader to compute irradiance in the fragment shader in order to take bump in account.\r\n */\r\n @editableInPropertyPage(\"Force irradiance in fragment\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { notifiers: { update: true } })\r\n public forceIrradianceInFragment: boolean = false;\r\n\r\n protected _onGenerateOnlyFragmentCodeChanged(): boolean {\r\n if (this.position.isConnected) {\r\n this.generateOnlyFragmentCode = !this.generateOnlyFragmentCode;\r\n console.error(\"The position input must not be connected to be able to switch!\");\r\n return false;\r\n }\r\n\r\n this._setTarget();\r\n\r\n return true;\r\n }\r\n\r\n protected _setTarget(): void {\r\n super._setTarget();\r\n this.getInputByName(\"position\")!.target = this.generateOnlyFragmentCode ? NodeMaterialBlockTargets.Fragment : NodeMaterialBlockTargets.Vertex;\r\n if (this.generateOnlyFragmentCode) {\r\n this.forceIrradianceInFragment = true;\r\n }\r\n }\r\n\r\n /**\r\n * Create a new ReflectionBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"position\", NodeMaterialBlockConnectionPointTypes.Vector3, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"world\", NodeMaterialBlockConnectionPointTypes.Matrix, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"color\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"reflection\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"reflection\", this, NodeMaterialConnectionPointDirection.Output, ReflectionBlock, \"ReflectionBlock\")\r\n );\r\n\r\n this.position.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"ReflectionBlock\";\r\n }\r\n\r\n /**\r\n * Gets the position input component\r\n */\r\n public get position(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\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.worldPositionConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the world normal input component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this.worldNormalConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the world input component\r\n */\r\n public get world(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the camera (or eye) position component\r\n */\r\n public get cameraPosition(): NodeMaterialConnectionPoint {\r\n return this.cameraPositionConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the view input component\r\n */\r\n public get view(): NodeMaterialConnectionPoint {\r\n return this.viewConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the color input component\r\n */\r\n public get color(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the reflection object output component\r\n */\r\n public get reflection(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Returns true if the block has a texture (either its own texture or the environment texture from the scene, if set)\r\n */\r\n public get hasTexture(): boolean {\r\n return !!this._getTexture();\r\n }\r\n\r\n /**\r\n * Gets the reflection color (either the name of the variable if the color input is connected, else a default value)\r\n */\r\n public get reflectionColor(): string {\r\n return this.color.isConnected ? this.color.associatedVariableName : \"vec3(1., 1., 1.)\";\r\n }\r\n\r\n protected _getTexture(): Nullable<BaseTexture> {\r\n if (this.texture) {\r\n return this.texture;\r\n }\r\n\r\n return this._scene.environmentTexture;\r\n }\r\n\r\n public prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n super.prepareDefines(mesh, nodeMaterial, defines);\r\n\r\n const reflectionTexture = this._getTexture();\r\n const reflection = reflectionTexture && reflectionTexture.getTextureMatrix;\r\n\r\n defines.setValue(\"REFLECTION\", reflection, true);\r\n\r\n if (!reflection) {\r\n return;\r\n }\r\n\r\n defines.setValue(this._defineLODReflectionAlpha, reflectionTexture!.lodLevelInAlpha, true);\r\n defines.setValue(this._defineLinearSpecularReflection, reflectionTexture!.linearSpecularLOD, true);\r\n defines.setValue(this._defineOppositeZ, this._scene.useRightHandedSystem ? !reflectionTexture!.invertZ : reflectionTexture!.invertZ, true);\r\n\r\n defines.setValue(\"SPHERICAL_HARMONICS\", this.useSphericalHarmonics, true);\r\n defines.setValue(\"GAMMAREFLECTION\", reflectionTexture!.gammaSpace, true);\r\n defines.setValue(\"RGBDREFLECTION\", reflectionTexture!.isRGBD, true);\r\n\r\n if (reflectionTexture && reflectionTexture.coordinatesMode !== Texture.SKYBOX_MODE) {\r\n if (reflectionTexture.isCube) {\r\n defines.setValue(\"USESPHERICALFROMREFLECTIONMAP\", true);\r\n defines.setValue(\"USEIRRADIANCEMAP\", false);\r\n if (this.forceIrradianceInFragment || this._scene.getEngine().getCaps().maxVaryingVectors <= 8) {\r\n defines.setValue(\"USESPHERICALINVERTEX\", false);\r\n } else {\r\n defines.setValue(\"USESPHERICALINVERTEX\", true);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh, subMesh?: SubMesh) {\r\n super.bind(effect, nodeMaterial, mesh);\r\n\r\n const reflectionTexture = this._getTexture();\r\n\r\n if (!reflectionTexture || !subMesh) {\r\n return;\r\n }\r\n\r\n if (reflectionTexture.isCube) {\r\n effect.setTexture(this._cubeSamplerName, reflectionTexture);\r\n } else {\r\n effect.setTexture(this._2DSamplerName, reflectionTexture);\r\n }\r\n\r\n const width = reflectionTexture.getSize().width;\r\n\r\n effect.setFloat3(this._vReflectionMicrosurfaceInfosName, width, reflectionTexture.lodGenerationScale, reflectionTexture.lodGenerationOffset);\r\n effect.setFloat2(this._vReflectionFilteringInfoName, width, Scalar.Log2(width));\r\n\r\n const defines = subMesh.materialDefines as NodeMaterialDefines;\r\n\r\n const polynomials = reflectionTexture.sphericalPolynomial;\r\n if (defines.USESPHERICALFROMREFLECTIONMAP && polynomials) {\r\n if (defines.SPHERICAL_HARMONICS) {\r\n const preScaledHarmonics = polynomials.preScaledHarmonics;\r\n effect.setVector3(\"vSphericalL00\", preScaledHarmonics.l00);\r\n effect.setVector3(\"vSphericalL1_1\", preScaledHarmonics.l1_1);\r\n effect.setVector3(\"vSphericalL10\", preScaledHarmonics.l10);\r\n effect.setVector3(\"vSphericalL11\", preScaledHarmonics.l11);\r\n effect.setVector3(\"vSphericalL2_2\", preScaledHarmonics.l2_2);\r\n effect.setVector3(\"vSphericalL2_1\", preScaledHarmonics.l2_1);\r\n effect.setVector3(\"vSphericalL20\", preScaledHarmonics.l20);\r\n effect.setVector3(\"vSphericalL21\", preScaledHarmonics.l21);\r\n effect.setVector3(\"vSphericalL22\", preScaledHarmonics.l22);\r\n } else {\r\n effect.setFloat3(\"vSphericalX\", polynomials.x.x, polynomials.x.y, polynomials.x.z);\r\n effect.setFloat3(\"vSphericalY\", polynomials.y.x, polynomials.y.y, polynomials.y.z);\r\n effect.setFloat3(\"vSphericalZ\", polynomials.z.x, polynomials.z.y, polynomials.z.z);\r\n effect.setFloat3(\"vSphericalXX_ZZ\", polynomials.xx.x - polynomials.zz.x, polynomials.xx.y - polynomials.zz.y, polynomials.xx.z - polynomials.zz.z);\r\n effect.setFloat3(\"vSphericalYY_ZZ\", polynomials.yy.x - polynomials.zz.x, polynomials.yy.y - polynomials.zz.y, polynomials.yy.z - polynomials.zz.z);\r\n effect.setFloat3(\"vSphericalZZ\", polynomials.zz.x, polynomials.zz.y, polynomials.zz.z);\r\n effect.setFloat3(\"vSphericalXY\", polynomials.xy.x, polynomials.xy.y, polynomials.xy.z);\r\n effect.setFloat3(\"vSphericalYZ\", polynomials.yz.x, polynomials.yz.y, polynomials.yz.z);\r\n effect.setFloat3(\"vSphericalZX\", polynomials.zx.x, polynomials.zx.y, polynomials.zx.z);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets the code to inject in the vertex shader\r\n * @param state current state of the node material building\r\n * @returns the shader code\r\n */\r\n public handleVertexSide(state: NodeMaterialBuildState): string {\r\n let code = super.handleVertexSide(state);\r\n\r\n state._emitFunctionFromInclude(\"harmonicsFunctions\", `//${this.name}`, {\r\n replaceStrings: [\r\n { search: /uniform vec3 vSphericalL00;[\\s\\S]*?uniform vec3 vSphericalL22;/g, replace: \"\" },\r\n { search: /uniform vec3 vSphericalX;[\\s\\S]*?uniform vec3 vSphericalZX;/g, replace: \"\" },\r\n ],\r\n });\r\n\r\n const reflectionVectorName = state._getFreeVariableName(\"reflectionVector\");\r\n\r\n this._vEnvironmentIrradianceName = state._getFreeVariableName(\"vEnvironmentIrradiance\");\r\n\r\n state._emitVaryingFromString(this._vEnvironmentIrradianceName, \"vec3\", \"defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)\");\r\n\r\n state._emitUniformFromString(\"vSphericalL00\", \"vec3\", \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL1_1\", \"vec3\", \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL10\", \"vec3\", \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL11\", \"vec3\", \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL2_2\", \"vec3\", \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL2_1\", \"vec3\", \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL20\", \"vec3\", \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL21\", \"vec3\", \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL22\", \"vec3\", \"SPHERICAL_HARMONICS\");\r\n\r\n state._emitUniformFromString(\"vSphericalX\", \"vec3\", \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalY\", \"vec3\", \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalZ\", \"vec3\", \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalXX_ZZ\", \"vec3\", \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalYY_ZZ\", \"vec3\", \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalZZ\", \"vec3\", \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalXY\", \"vec3\", \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalYZ\", \"vec3\", \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalZX\", \"vec3\", \"SPHERICAL_HARMONICS\", true);\r\n\r\n code += `#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)\r\n vec3 ${reflectionVectorName} = vec3(${this._reflectionMatrixName} * vec4(normalize(${this.worldNormal.associatedVariableName}).xyz, 0)).xyz;\r\n #ifdef ${this._defineOppositeZ}\r\n ${reflectionVectorName}.z *= -1.0;\r\n #endif\r\n ${this._vEnvironmentIrradianceName} = computeEnvironmentIrradiance(${reflectionVectorName});\r\n #endif\\r\\n`;\r\n\r\n return code;\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param state current state of the node material building\r\n * @param normalVarName name of the existing variable corresponding to the normal\r\n * @returns the shader code\r\n */\r\n public getCode(state: NodeMaterialBuildState, normalVarName: string): string {\r\n let code = \"\";\r\n\r\n this.handleFragmentSideInits(state);\r\n\r\n state._emitFunctionFromInclude(\"harmonicsFunctions\", `//${this.name}`, {\r\n replaceStrings: [\r\n { search: /uniform vec3 vSphericalL00;[\\s\\S]*?uniform vec3 vSphericalL22;/g, replace: \"\" },\r\n { search: /uniform vec3 vSphericalX;[\\s\\S]*?uniform vec3 vSphericalZX;/g, replace: \"\" },\r\n ],\r\n });\r\n\r\n state._emitFunction(\r\n \"sampleReflection\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleReflection(s, c) textureCube(s, c)\r\n #else\r\n #define sampleReflection(s, c) texture2D(s, c)\r\n #endif\\r\\n`,\r\n `//${this.name}`\r\n );\r\n\r\n state._emitFunction(\r\n \"sampleReflectionLod\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleReflectionLod(s, c, l) textureCubeLodEXT(s, c, l)\r\n #else\r\n #define sampleReflectionLod(s, c, l) texture2DLodEXT(s, c, l)\r\n #endif\\r\\n`,\r\n `//${this.name}`\r\n );\r\n\r\n const computeReflectionCoordsFunc = `\r\n vec3 computeReflectionCoordsPBR(vec4 worldPos, vec3 worldNormal) {\r\n ${this.handleFragmentSideCodeReflectionCoords(\"worldNormal\", \"worldPos\", true, true)}\r\n return ${this._reflectionVectorName};\r\n }\\r\\n`;\r\n\r\n state._emitFunction(\"computeReflectionCoordsPBR\", computeReflectionCoordsFunc, `//${this.name}`);\r\n\r\n this._vReflectionMicrosurfaceInfosName = state._getFreeVariableName(\"vReflectionMicrosurfaceInfos\");\r\n\r\n state._emitUniformFromString(this._vReflectionMicrosurfaceInfosName, \"vec3\");\r\n\r\n this._vReflectionInfosName = state._getFreeVariableName(\"vReflectionInfos\");\r\n\r\n this._vReflectionFilteringInfoName = state._getFreeVariableName(\"vReflectionFilteringInfo\");\r\n\r\n state._emitUniformFromString(this._vReflectionFilteringInfoName, \"vec2\");\r\n\r\n code += `#ifdef REFLECTION\r\n vec2 ${this._vReflectionInfosName} = vec2(1., 0.);\r\n\r\n reflectionOutParams reflectionOut;\r\n\r\n reflectionBlock(\r\n ${this.generateOnlyFragmentCode ? this._worldPositionNameInFragmentOnlyMode : \"v_\" + this.worldPosition.associatedVariableName}.xyz,\r\n ${normalVarName},\r\n alphaG,\r\n ${this._vReflectionMicrosurfaceInfosName},\r\n ${this._vReflectionInfosName},\r\n ${this.reflectionColor},\r\n #ifdef ANISOTROPIC\r\n anisotropicOut,\r\n #endif\r\n #if defined(${this._defineLODReflectionAlpha}) && !defined(${this._defineSkyboxName})\r\n NdotVUnclamped,\r\n #endif\r\n #ifdef ${this._defineLinearSpecularReflection}\r\n roughness,\r\n #endif\r\n #ifdef ${this._define3DName}\r\n ${this._cubeSamplerName},\r\n #else\r\n ${this._2DSamplerName},\r\n #endif\r\n #if defined(NORMAL) && defined(USESPHERICALINVERTEX)\r\n ${this._vEnvironmentIrradianceName},\r\n #endif\r\n #ifdef USESPHERICALFROMREFLECTIONMAP\r\n #if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)\r\n ${this._reflectionMatrixName},\r\n #endif\r\n #endif\r\n #ifdef USEIRRADIANCEMAP\r\n irradianceSampler, // ** not handled **\r\n #endif\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${this._define3DName}\r\n ${this._cubeSamplerName},\r\n ${this._cubeSamplerName},\r\n #else\r\n ${this._2DSamplerName},\r\n ${this._2DSamplerName},\r\n #endif\r\n #endif\r\n #ifdef REALTIME_FILTERING\r\n ${this._vReflectionFilteringInfoName},\r\n #endif\r\n reflectionOut\r\n );\r\n #endif\\r\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n this._scene = state.sharedData.scene;\r\n\r\n if (state.target !== NodeMaterialBlockTargets.Fragment) {\r\n this._defineLODReflectionAlpha = state._getFreeDefineName(\"LODINREFLECTIONALPHA\");\r\n this._defineLinearSpecularReflection = state._getFreeDefineName(\"LINEARSPECULARREFLECTION\");\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (this.texture) {\r\n codeString += `${this._codeVariableName}.texture.gammaSpace = ${this.texture.gammaSpace};\\r\\n`;\r\n }\r\n codeString += `${this._codeVariableName}.useSphericalHarmonics = ${this.useSphericalHarmonics};\\r\\n`;\r\n codeString += `${this._codeVariableName}.forceIrradianceInFragment = ${this.forceIrradianceInFragment};\\r\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.useSphericalHarmonics = this.useSphericalHarmonics;\r\n serializationObject.forceIrradianceInFragment = this.forceIrradianceInFragment;\r\n serializationObject.gammaSpace = this.texture?.gammaSpace ?? true;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.useSphericalHarmonics = serializationObject.useSphericalHarmonics;\r\n this.forceIrradianceInFragment = serializationObject.forceIrradianceInFragment;\r\n if (this.texture) {\r\n this.texture.gammaSpace = serializationObject.gammaSpace;\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ReflectionBlock\", ReflectionBlock);\r\n"]}
1
+ {"version":3,"file":"reflectionBlock.js","sourceRoot":"","sources":["../../../../../../../lts/core/generated/Materials/Node/Blocks/PBR/reflectionBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { 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 type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { ReflectionTextureBaseBlock } from \"../Dual/reflectionTextureBaseBlock\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { Texture } from \"../../../Textures/texture\";\r\nimport type { BaseTexture } from \"../../../Textures/baseTexture\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport type { SubMesh } from \"../../../../Meshes/subMesh\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../nodeMaterialDecorator\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { Scalar } from \"../../../../Maths/math.scalar\";\r\n\r\n/**\r\n * Block used to implement the reflection module of the PBR material\r\n */\r\nexport class ReflectionBlock extends ReflectionTextureBaseBlock {\r\n /** @internal */\r\n public _defineLODReflectionAlpha: string;\r\n /** @internal */\r\n public _defineLinearSpecularReflection: string;\r\n private _vEnvironmentIrradianceName: string;\r\n /** @internal */\r\n public _vReflectionMicrosurfaceInfosName: string;\r\n /** @internal */\r\n public _vReflectionInfosName: string;\r\n /** @internal */\r\n public _vReflectionFilteringInfoName: string;\r\n private _scene: Scene;\r\n\r\n /**\r\n * The properties below are set by the main PBR block prior to calling methods of this class.\r\n * This is to avoid having to add them as inputs here whereas they are already inputs of the main block, so already known.\r\n * It's less burden on the user side in the editor part.\r\n */\r\n\r\n /** @internal */\r\n public worldPositionConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public worldNormalConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public cameraPositionConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public viewConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * Defines if the material uses spherical harmonics vs spherical polynomials for the\r\n * diffuse part of the IBL.\r\n */\r\n @editableInPropertyPage(\"Spherical Harmonics\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { notifiers: { update: true } })\r\n public useSphericalHarmonics: boolean = true;\r\n\r\n /**\r\n * Force the shader to compute irradiance in the fragment shader in order to take bump in account.\r\n */\r\n @editableInPropertyPage(\"Force irradiance in fragment\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { notifiers: { update: true } })\r\n public forceIrradianceInFragment: boolean = false;\r\n\r\n protected _onGenerateOnlyFragmentCodeChanged(): boolean {\r\n if (this.position.isConnected) {\r\n this.generateOnlyFragmentCode = !this.generateOnlyFragmentCode;\r\n console.error(\"The position input must not be connected to be able to switch!\");\r\n return false;\r\n }\r\n\r\n this._setTarget();\r\n\r\n return true;\r\n }\r\n\r\n protected _setTarget(): void {\r\n super._setTarget();\r\n this.getInputByName(\"position\")!.target = this.generateOnlyFragmentCode ? NodeMaterialBlockTargets.Fragment : NodeMaterialBlockTargets.Vertex;\r\n if (this.generateOnlyFragmentCode) {\r\n this.forceIrradianceInFragment = true;\r\n }\r\n }\r\n\r\n /**\r\n * Create a new ReflectionBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"position\", NodeMaterialBlockConnectionPointTypes.AutoDetect, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"world\", NodeMaterialBlockConnectionPointTypes.Matrix, false, NodeMaterialBlockTargets.Vertex);\r\n this.registerInput(\"color\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"reflection\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"reflection\", this, NodeMaterialConnectionPointDirection.Output, ReflectionBlock, \"ReflectionBlock\")\r\n );\r\n\r\n this.position.addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"ReflectionBlock\";\r\n }\r\n\r\n /**\r\n * Gets the position input component\r\n */\r\n public get position(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\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.worldPositionConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the world normal input component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this.worldNormalConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the world input component\r\n */\r\n public get world(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the camera (or eye) position component\r\n */\r\n public get cameraPosition(): NodeMaterialConnectionPoint {\r\n return this.cameraPositionConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the view input component\r\n */\r\n public get view(): NodeMaterialConnectionPoint {\r\n return this.viewConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the color input component\r\n */\r\n public get color(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the reflection object output component\r\n */\r\n public get reflection(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Returns true if the block has a texture (either its own texture or the environment texture from the scene, if set)\r\n */\r\n public get hasTexture(): boolean {\r\n return !!this._getTexture();\r\n }\r\n\r\n /**\r\n * Gets the reflection color (either the name of the variable if the color input is connected, else a default value)\r\n */\r\n public get reflectionColor(): string {\r\n return this.color.isConnected ? this.color.associatedVariableName : \"vec3(1., 1., 1.)\";\r\n }\r\n\r\n protected _getTexture(): Nullable<BaseTexture> {\r\n if (this.texture) {\r\n return this.texture;\r\n }\r\n\r\n return this._scene.environmentTexture;\r\n }\r\n\r\n public prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n super.prepareDefines(mesh, nodeMaterial, defines);\r\n\r\n const reflectionTexture = this._getTexture();\r\n const reflection = reflectionTexture && reflectionTexture.getTextureMatrix;\r\n\r\n defines.setValue(\"REFLECTION\", reflection, true);\r\n\r\n if (!reflection) {\r\n return;\r\n }\r\n\r\n defines.setValue(this._defineLODReflectionAlpha, reflectionTexture!.lodLevelInAlpha, true);\r\n defines.setValue(this._defineLinearSpecularReflection, reflectionTexture!.linearSpecularLOD, true);\r\n defines.setValue(this._defineOppositeZ, this._scene.useRightHandedSystem ? !reflectionTexture!.invertZ : reflectionTexture!.invertZ, true);\r\n\r\n defines.setValue(\"SPHERICAL_HARMONICS\", this.useSphericalHarmonics, true);\r\n defines.setValue(\"GAMMAREFLECTION\", reflectionTexture!.gammaSpace, true);\r\n defines.setValue(\"RGBDREFLECTION\", reflectionTexture!.isRGBD, true);\r\n\r\n if (reflectionTexture && reflectionTexture.coordinatesMode !== Texture.SKYBOX_MODE) {\r\n if (reflectionTexture.isCube) {\r\n defines.setValue(\"USESPHERICALFROMREFLECTIONMAP\", true);\r\n defines.setValue(\"USEIRRADIANCEMAP\", false);\r\n if (this.forceIrradianceInFragment || this._scene.getEngine().getCaps().maxVaryingVectors <= 8) {\r\n defines.setValue(\"USESPHERICALINVERTEX\", false);\r\n } else {\r\n defines.setValue(\"USESPHERICALINVERTEX\", true);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh, subMesh?: SubMesh) {\r\n super.bind(effect, nodeMaterial, mesh);\r\n\r\n const reflectionTexture = this._getTexture();\r\n\r\n if (!reflectionTexture || !subMesh) {\r\n return;\r\n }\r\n\r\n if (reflectionTexture.isCube) {\r\n effect.setTexture(this._cubeSamplerName, reflectionTexture);\r\n } else {\r\n effect.setTexture(this._2DSamplerName, reflectionTexture);\r\n }\r\n\r\n const width = reflectionTexture.getSize().width;\r\n\r\n effect.setFloat3(this._vReflectionMicrosurfaceInfosName, width, reflectionTexture.lodGenerationScale, reflectionTexture.lodGenerationOffset);\r\n effect.setFloat2(this._vReflectionFilteringInfoName, width, Scalar.Log2(width));\r\n\r\n const defines = subMesh.materialDefines as NodeMaterialDefines;\r\n\r\n const polynomials = reflectionTexture.sphericalPolynomial;\r\n if (defines.USESPHERICALFROMREFLECTIONMAP && polynomials) {\r\n if (defines.SPHERICAL_HARMONICS) {\r\n const preScaledHarmonics = polynomials.preScaledHarmonics;\r\n effect.setVector3(\"vSphericalL00\", preScaledHarmonics.l00);\r\n effect.setVector3(\"vSphericalL1_1\", preScaledHarmonics.l1_1);\r\n effect.setVector3(\"vSphericalL10\", preScaledHarmonics.l10);\r\n effect.setVector3(\"vSphericalL11\", preScaledHarmonics.l11);\r\n effect.setVector3(\"vSphericalL2_2\", preScaledHarmonics.l2_2);\r\n effect.setVector3(\"vSphericalL2_1\", preScaledHarmonics.l2_1);\r\n effect.setVector3(\"vSphericalL20\", preScaledHarmonics.l20);\r\n effect.setVector3(\"vSphericalL21\", preScaledHarmonics.l21);\r\n effect.setVector3(\"vSphericalL22\", preScaledHarmonics.l22);\r\n } else {\r\n effect.setFloat3(\"vSphericalX\", polynomials.x.x, polynomials.x.y, polynomials.x.z);\r\n effect.setFloat3(\"vSphericalY\", polynomials.y.x, polynomials.y.y, polynomials.y.z);\r\n effect.setFloat3(\"vSphericalZ\", polynomials.z.x, polynomials.z.y, polynomials.z.z);\r\n effect.setFloat3(\"vSphericalXX_ZZ\", polynomials.xx.x - polynomials.zz.x, polynomials.xx.y - polynomials.zz.y, polynomials.xx.z - polynomials.zz.z);\r\n effect.setFloat3(\"vSphericalYY_ZZ\", polynomials.yy.x - polynomials.zz.x, polynomials.yy.y - polynomials.zz.y, polynomials.yy.z - polynomials.zz.z);\r\n effect.setFloat3(\"vSphericalZZ\", polynomials.zz.x, polynomials.zz.y, polynomials.zz.z);\r\n effect.setFloat3(\"vSphericalXY\", polynomials.xy.x, polynomials.xy.y, polynomials.xy.z);\r\n effect.setFloat3(\"vSphericalYZ\", polynomials.yz.x, polynomials.yz.y, polynomials.yz.z);\r\n effect.setFloat3(\"vSphericalZX\", polynomials.zx.x, polynomials.zx.y, polynomials.zx.z);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets the code to inject in the vertex shader\r\n * @param state current state of the node material building\r\n * @returns the shader code\r\n */\r\n public handleVertexSide(state: NodeMaterialBuildState): string {\r\n let code = super.handleVertexSide(state);\r\n\r\n state._emitFunctionFromInclude(\"harmonicsFunctions\", `//${this.name}`, {\r\n replaceStrings: [\r\n { search: /uniform vec3 vSphericalL00;[\\s\\S]*?uniform vec3 vSphericalL22;/g, replace: \"\" },\r\n { search: /uniform vec3 vSphericalX;[\\s\\S]*?uniform vec3 vSphericalZX;/g, replace: \"\" },\r\n ],\r\n });\r\n\r\n const reflectionVectorName = state._getFreeVariableName(\"reflectionVector\");\r\n\r\n this._vEnvironmentIrradianceName = state._getFreeVariableName(\"vEnvironmentIrradiance\");\r\n\r\n state._emitVaryingFromString(this._vEnvironmentIrradianceName, \"vec3\", \"defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)\");\r\n\r\n state._emitUniformFromString(\"vSphericalL00\", \"vec3\", \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL1_1\", \"vec3\", \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL10\", \"vec3\", \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL11\", \"vec3\", \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL2_2\", \"vec3\", \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL2_1\", \"vec3\", \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL20\", \"vec3\", \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL21\", \"vec3\", \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL22\", \"vec3\", \"SPHERICAL_HARMONICS\");\r\n\r\n state._emitUniformFromString(\"vSphericalX\", \"vec3\", \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalY\", \"vec3\", \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalZ\", \"vec3\", \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalXX_ZZ\", \"vec3\", \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalYY_ZZ\", \"vec3\", \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalZZ\", \"vec3\", \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalXY\", \"vec3\", \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalYZ\", \"vec3\", \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalZX\", \"vec3\", \"SPHERICAL_HARMONICS\", true);\r\n\r\n code += `#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)\r\n vec3 ${reflectionVectorName} = vec3(${this._reflectionMatrixName} * vec4(normalize(${this.worldNormal.associatedVariableName}).xyz, 0)).xyz;\r\n #ifdef ${this._defineOppositeZ}\r\n ${reflectionVectorName}.z *= -1.0;\r\n #endif\r\n ${this._vEnvironmentIrradianceName} = computeEnvironmentIrradiance(${reflectionVectorName});\r\n #endif\\r\\n`;\r\n\r\n return code;\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param state current state of the node material building\r\n * @param normalVarName name of the existing variable corresponding to the normal\r\n * @returns the shader code\r\n */\r\n public getCode(state: NodeMaterialBuildState, normalVarName: string): string {\r\n let code = \"\";\r\n\r\n this.handleFragmentSideInits(state);\r\n\r\n state._emitFunctionFromInclude(\"harmonicsFunctions\", `//${this.name}`, {\r\n replaceStrings: [\r\n { search: /uniform vec3 vSphericalL00;[\\s\\S]*?uniform vec3 vSphericalL22;/g, replace: \"\" },\r\n { search: /uniform vec3 vSphericalX;[\\s\\S]*?uniform vec3 vSphericalZX;/g, replace: \"\" },\r\n ],\r\n });\r\n\r\n state._emitFunction(\r\n \"sampleReflection\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleReflection(s, c) textureCube(s, c)\r\n #else\r\n #define sampleReflection(s, c) texture2D(s, c)\r\n #endif\\r\\n`,\r\n `//${this.name}`\r\n );\r\n\r\n state._emitFunction(\r\n \"sampleReflectionLod\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleReflectionLod(s, c, l) textureCubeLodEXT(s, c, l)\r\n #else\r\n #define sampleReflectionLod(s, c, l) texture2DLodEXT(s, c, l)\r\n #endif\\r\\n`,\r\n `//${this.name}`\r\n );\r\n\r\n const computeReflectionCoordsFunc = `\r\n vec3 computeReflectionCoordsPBR(vec4 worldPos, vec3 worldNormal) {\r\n ${this.handleFragmentSideCodeReflectionCoords(\"worldNormal\", \"worldPos\", true, true)}\r\n return ${this._reflectionVectorName};\r\n }\\r\\n`;\r\n\r\n state._emitFunction(\"computeReflectionCoordsPBR\", computeReflectionCoordsFunc, `//${this.name}`);\r\n\r\n this._vReflectionMicrosurfaceInfosName = state._getFreeVariableName(\"vReflectionMicrosurfaceInfos\");\r\n\r\n state._emitUniformFromString(this._vReflectionMicrosurfaceInfosName, \"vec3\");\r\n\r\n this._vReflectionInfosName = state._getFreeVariableName(\"vReflectionInfos\");\r\n\r\n this._vReflectionFilteringInfoName = state._getFreeVariableName(\"vReflectionFilteringInfo\");\r\n\r\n state._emitUniformFromString(this._vReflectionFilteringInfoName, \"vec2\");\r\n\r\n code += `#ifdef REFLECTION\r\n vec2 ${this._vReflectionInfosName} = vec2(1., 0.);\r\n\r\n reflectionOutParams reflectionOut;\r\n\r\n reflectionBlock(\r\n ${this.generateOnlyFragmentCode ? this._worldPositionNameInFragmentOnlyMode : \"v_\" + this.worldPosition.associatedVariableName}.xyz,\r\n ${normalVarName},\r\n alphaG,\r\n ${this._vReflectionMicrosurfaceInfosName},\r\n ${this._vReflectionInfosName},\r\n ${this.reflectionColor},\r\n #ifdef ANISOTROPIC\r\n anisotropicOut,\r\n #endif\r\n #if defined(${this._defineLODReflectionAlpha}) && !defined(${this._defineSkyboxName})\r\n NdotVUnclamped,\r\n #endif\r\n #ifdef ${this._defineLinearSpecularReflection}\r\n roughness,\r\n #endif\r\n #ifdef ${this._define3DName}\r\n ${this._cubeSamplerName},\r\n #else\r\n ${this._2DSamplerName},\r\n #endif\r\n #if defined(NORMAL) && defined(USESPHERICALINVERTEX)\r\n ${this._vEnvironmentIrradianceName},\r\n #endif\r\n #ifdef USESPHERICALFROMREFLECTIONMAP\r\n #if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)\r\n ${this._reflectionMatrixName},\r\n #endif\r\n #endif\r\n #ifdef USEIRRADIANCEMAP\r\n irradianceSampler, // ** not handled **\r\n #endif\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${this._define3DName}\r\n ${this._cubeSamplerName},\r\n ${this._cubeSamplerName},\r\n #else\r\n ${this._2DSamplerName},\r\n ${this._2DSamplerName},\r\n #endif\r\n #endif\r\n #ifdef REALTIME_FILTERING\r\n ${this._vReflectionFilteringInfoName},\r\n #endif\r\n reflectionOut\r\n );\r\n #endif\\r\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n this._scene = state.sharedData.scene;\r\n\r\n if (state.target !== NodeMaterialBlockTargets.Fragment) {\r\n this._defineLODReflectionAlpha = state._getFreeDefineName(\"LODINREFLECTIONALPHA\");\r\n this._defineLinearSpecularReflection = state._getFreeDefineName(\"LINEARSPECULARREFLECTION\");\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (this.texture) {\r\n codeString += `${this._codeVariableName}.texture.gammaSpace = ${this.texture.gammaSpace};\\r\\n`;\r\n }\r\n codeString += `${this._codeVariableName}.useSphericalHarmonics = ${this.useSphericalHarmonics};\\r\\n`;\r\n codeString += `${this._codeVariableName}.forceIrradianceInFragment = ${this.forceIrradianceInFragment};\\r\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.useSphericalHarmonics = this.useSphericalHarmonics;\r\n serializationObject.forceIrradianceInFragment = this.forceIrradianceInFragment;\r\n serializationObject.gammaSpace = this.texture?.gammaSpace ?? true;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.useSphericalHarmonics = serializationObject.useSphericalHarmonics;\r\n this.forceIrradianceInFragment = serializationObject.forceIrradianceInFragment;\r\n if (this.texture) {\r\n this.texture.gammaSpace = serializationObject.gammaSpace;\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ReflectionBlock\", ReflectionBlock);\r\n"]}
@@ -24,15 +24,14 @@ export class ParticleTextureBlock extends NodeMaterialBlock {
24
24
  */
25
25
  this.convertToLinearSpace = false;
26
26
  this._isUnique = false;
27
- this.registerInput("uv", NodeMaterialBlockConnectionPointTypes.Vector2, false, NodeMaterialBlockTargets.VertexAndFragment);
27
+ this.registerInput("uv", NodeMaterialBlockConnectionPointTypes.AutoDetect, false, NodeMaterialBlockTargets.VertexAndFragment);
28
28
  this.registerOutput("rgba", NodeMaterialBlockConnectionPointTypes.Color4, NodeMaterialBlockTargets.Neutral);
29
29
  this.registerOutput("rgb", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Neutral);
30
30
  this.registerOutput("r", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);
31
31
  this.registerOutput("g", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);
32
32
  this.registerOutput("b", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);
33
33
  this.registerOutput("a", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);
34
- this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector3);
35
- this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector4);
34
+ this._inputs[0].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector2 | NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4);
36
35
  }
37
36
  /**
38
37
  * Gets the current class name
@@ -1 +1 @@
1
- {"version":3,"file":"particleTextureBlock.js","sourceRoot":"","sources":["../../../../../../../lts/core/generated/Materials/Node/Blocks/Particle/particleTextureBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport type { BaseTexture } from \"../../../Textures/baseTexture\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { Texture } from \"../../../Textures/texture\";\r\nimport type { Scene } from \"../../../../scene\";\r\n\r\ndeclare type NodeMaterial = import(\"../../nodeMaterial\").NodeMaterial;\r\n\r\n/**\r\n * Base block used for the particle texture\r\n */\r\nexport class ParticleTextureBlock extends NodeMaterialBlock {\r\n private _samplerName = \"diffuseSampler\";\r\n private _linearDefineName: string;\r\n private _gammaDefineName: string;\r\n private _tempTextureRead: string;\r\n\r\n /**\r\n * Gets or sets the texture associated with the node\r\n */\r\n public texture: Nullable<BaseTexture>;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if content needs to be converted to gamma space\r\n */\r\n public convertToGammaSpace = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if content needs to be converted to linear space\r\n */\r\n public convertToLinearSpace = false;\r\n\r\n /**\r\n * Create a new ParticleTextureBlock\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 = false;\r\n\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.Vector2, false, NodeMaterialBlockTargets.VertexAndFragment);\r\n\r\n this.registerOutput(\"rgba\", NodeMaterialBlockConnectionPointTypes.Color4, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"rgb\", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"r\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"g\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"b\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"a\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n\r\n this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"ParticleTextureBlock\";\r\n }\r\n\r\n /**\r\n * Gets the uv input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the rgba output component\r\n */\r\n public get rgba(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the rgb output component\r\n */\r\n public get rgb(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the r output component\r\n */\r\n public get r(): NodeMaterialConnectionPoint {\r\n return this._outputs[2];\r\n }\r\n\r\n /**\r\n * Gets the g output component\r\n */\r\n public get g(): NodeMaterialConnectionPoint {\r\n return this._outputs[3];\r\n }\r\n\r\n /**\r\n * Gets the b output component\r\n */\r\n public get b(): NodeMaterialConnectionPoint {\r\n return this._outputs[4];\r\n }\r\n\r\n /**\r\n * Gets the a output component\r\n */\r\n public get a(): NodeMaterialConnectionPoint {\r\n return this._outputs[5];\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"diffuseSampler\");\r\n }\r\n\r\n public autoConfigure(material: NodeMaterial) {\r\n if (!this.uv.isConnected) {\r\n let uvInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"particle_uv\");\r\n\r\n if (!uvInput) {\r\n uvInput = new InputBlock(\"uv\");\r\n uvInput.setAsAttribute(\"particle_uv\");\r\n }\r\n uvInput.output.connectTo(this.uv);\r\n }\r\n }\r\n\r\n public prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n defines.setValue(this._linearDefineName, this.convertToGammaSpace, true);\r\n defines.setValue(this._gammaDefineName, this.convertToLinearSpace, true);\r\n }\r\n\r\n public 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 private _writeOutput(state: NodeMaterialBuildState, output: NodeMaterialConnectionPoint, swizzle: string) {\r\n state.compilationString += `${this._declareOutput(output, state)} = ${this._tempTextureRead}.${swizzle};\\r\\n`;\r\n\r\n state.compilationString += `#ifdef ${this._linearDefineName}\\r\\n`;\r\n state.compilationString += `${output.associatedVariableName} = toGammaSpace(${output.associatedVariableName});\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n state.compilationString += `#ifdef ${this._gammaDefineName}\\r\\n`;\r\n state.compilationString += `${output.associatedVariableName} = toLinearSpace(${output.associatedVariableName});\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (state.target === NodeMaterialBlockTargets.Vertex) {\r\n return;\r\n }\r\n\r\n this._tempTextureRead = state._getFreeVariableName(\"tempTextureRead\");\r\n\r\n state._emit2DSampler(this._samplerName);\r\n\r\n state.sharedData.blockingBlocks.push(this);\r\n state.sharedData.textureBlocks.push(this);\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n this._linearDefineName = state._getFreeDefineName(\"ISLINEAR\");\r\n this._gammaDefineName = state._getFreeDefineName(\"ISGAMMA\");\r\n\r\n const comments = `//${this.name}`;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n\r\n state.compilationString += `vec4 ${this._tempTextureRead} = texture2D(${this._samplerName}, ${this.uv.associatedVariableName});\\r\\n`;\r\n\r\n for (const output of this._outputs) {\r\n if (output.hasEndpoints) {\r\n this._writeOutput(state, output, output.name);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.convertToGammaSpace = this.convertToGammaSpace;\r\n serializationObject.convertToLinearSpace = this.convertToLinearSpace;\r\n if (this.texture && !this.texture.isRenderTarget) {\r\n serializationObject.texture = this.texture.serialize();\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n public _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.convertToGammaSpace = serializationObject.convertToGammaSpace;\r\n this.convertToLinearSpace = !!serializationObject.convertToLinearSpace;\r\n\r\n if (serializationObject.texture) {\r\n rootUrl = serializationObject.texture.url.indexOf(\"data:\") === 0 ? \"\" : rootUrl;\r\n this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl) as Texture;\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ParticleTextureBlock\", ParticleTextureBlock);\r\n"]}
1
+ {"version":3,"file":"particleTextureBlock.js","sourceRoot":"","sources":["../../../../../../../lts/core/generated/Materials/Node/Blocks/Particle/particleTextureBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport type { BaseTexture } from \"../../../Textures/baseTexture\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { Texture } from \"../../../Textures/texture\";\r\nimport type { Scene } from \"../../../../scene\";\r\n\r\ndeclare type NodeMaterial = import(\"../../nodeMaterial\").NodeMaterial;\r\n\r\n/**\r\n * Base block used for the particle texture\r\n */\r\nexport class ParticleTextureBlock extends NodeMaterialBlock {\r\n private _samplerName = \"diffuseSampler\";\r\n private _linearDefineName: string;\r\n private _gammaDefineName: string;\r\n private _tempTextureRead: string;\r\n\r\n /**\r\n * Gets or sets the texture associated with the node\r\n */\r\n public texture: Nullable<BaseTexture>;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if content needs to be converted to gamma space\r\n */\r\n public convertToGammaSpace = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if content needs to be converted to linear space\r\n */\r\n public convertToLinearSpace = false;\r\n\r\n /**\r\n * Create a new ParticleTextureBlock\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 = false;\r\n\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.AutoDetect, false, NodeMaterialBlockTargets.VertexAndFragment);\r\n\r\n this.registerOutput(\"rgba\", NodeMaterialBlockConnectionPointTypes.Color4, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"rgb\", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"r\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"g\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"b\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"a\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n\r\n this._inputs[0].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Vector2 | NodeMaterialBlockConnectionPointTypes.Vector3 | NodeMaterialBlockConnectionPointTypes.Vector4\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 getClassName() {\r\n return \"ParticleTextureBlock\";\r\n }\r\n\r\n /**\r\n * Gets the uv input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the rgba output component\r\n */\r\n public get rgba(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the rgb output component\r\n */\r\n public get rgb(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the r output component\r\n */\r\n public get r(): NodeMaterialConnectionPoint {\r\n return this._outputs[2];\r\n }\r\n\r\n /**\r\n * Gets the g output component\r\n */\r\n public get g(): NodeMaterialConnectionPoint {\r\n return this._outputs[3];\r\n }\r\n\r\n /**\r\n * Gets the b output component\r\n */\r\n public get b(): NodeMaterialConnectionPoint {\r\n return this._outputs[4];\r\n }\r\n\r\n /**\r\n * Gets the a output component\r\n */\r\n public get a(): NodeMaterialConnectionPoint {\r\n return this._outputs[5];\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"diffuseSampler\");\r\n }\r\n\r\n public autoConfigure(material: NodeMaterial) {\r\n if (!this.uv.isConnected) {\r\n let uvInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"particle_uv\");\r\n\r\n if (!uvInput) {\r\n uvInput = new InputBlock(\"uv\");\r\n uvInput.setAsAttribute(\"particle_uv\");\r\n }\r\n uvInput.output.connectTo(this.uv);\r\n }\r\n }\r\n\r\n public prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n defines.setValue(this._linearDefineName, this.convertToGammaSpace, true);\r\n defines.setValue(this._gammaDefineName, this.convertToLinearSpace, true);\r\n }\r\n\r\n public 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 private _writeOutput(state: NodeMaterialBuildState, output: NodeMaterialConnectionPoint, swizzle: string) {\r\n state.compilationString += `${this._declareOutput(output, state)} = ${this._tempTextureRead}.${swizzle};\\r\\n`;\r\n\r\n state.compilationString += `#ifdef ${this._linearDefineName}\\r\\n`;\r\n state.compilationString += `${output.associatedVariableName} = toGammaSpace(${output.associatedVariableName});\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n state.compilationString += `#ifdef ${this._gammaDefineName}\\r\\n`;\r\n state.compilationString += `${output.associatedVariableName} = toLinearSpace(${output.associatedVariableName});\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (state.target === NodeMaterialBlockTargets.Vertex) {\r\n return;\r\n }\r\n\r\n this._tempTextureRead = state._getFreeVariableName(\"tempTextureRead\");\r\n\r\n state._emit2DSampler(this._samplerName);\r\n\r\n state.sharedData.blockingBlocks.push(this);\r\n state.sharedData.textureBlocks.push(this);\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n this._linearDefineName = state._getFreeDefineName(\"ISLINEAR\");\r\n this._gammaDefineName = state._getFreeDefineName(\"ISGAMMA\");\r\n\r\n const comments = `//${this.name}`;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n\r\n state.compilationString += `vec4 ${this._tempTextureRead} = texture2D(${this._samplerName}, ${this.uv.associatedVariableName});\\r\\n`;\r\n\r\n for (const output of this._outputs) {\r\n if (output.hasEndpoints) {\r\n this._writeOutput(state, output, output.name);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.convertToGammaSpace = this.convertToGammaSpace;\r\n serializationObject.convertToLinearSpace = this.convertToLinearSpace;\r\n if (this.texture && !this.texture.isRenderTarget) {\r\n serializationObject.texture = this.texture.serialize();\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n public _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.convertToGammaSpace = serializationObject.convertToGammaSpace;\r\n this.convertToLinearSpace = !!serializationObject.convertToLinearSpace;\r\n\r\n if (serializationObject.texture) {\r\n rootUrl = serializationObject.texture.url.indexOf(\"data:\") === 0 ? \"\" : rootUrl;\r\n this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl) as Texture;\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ParticleTextureBlock\", ParticleTextureBlock);\r\n"]}
@@ -19,8 +19,8 @@ export class MorphTargetsBlock extends NodeMaterialBlock {
19
19
  super(name, NodeMaterialBlockTargets.Vertex);
20
20
  this.registerInput("position", NodeMaterialBlockConnectionPointTypes.Vector3);
21
21
  this.registerInput("normal", NodeMaterialBlockConnectionPointTypes.Vector3);
22
- this.registerInput("tangent", NodeMaterialBlockConnectionPointTypes.Vector4);
23
- this.tangent.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector3);
22
+ this.registerInput("tangent", NodeMaterialBlockConnectionPointTypes.AutoDetect);
23
+ this.tangent.addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector4 | NodeMaterialBlockConnectionPointTypes.Vector3);
24
24
  this.registerInput("uv", NodeMaterialBlockConnectionPointTypes.Vector2);
25
25
  this.registerOutput("positionOutput", NodeMaterialBlockConnectionPointTypes.Vector3);
26
26
  this.registerOutput("normalOutput", NodeMaterialBlockConnectionPointTypes.Vector3);
@@ -1 +1 @@
1
- {"version":3,"file":"morphTargetsBlock.js","sourceRoot":"","sources":["../../../../../../../lts/core/generated/Materials/Node/Blocks/Vertex/morphTargetsBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport { MaterialHelper } from \"../../../materialHelper\";\r\nimport { VertexBuffer } from \"../../../../Buffers/buffer\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\nimport \"../../../../Shaders/ShadersInclude/morphTargetsVertexDeclaration\";\r\nimport \"../../../../Shaders/ShadersInclude/morphTargetsVertexGlobalDeclaration\";\r\n\r\n/**\r\n * Block used to add morph targets support to vertex shader\r\n */\r\nexport class MorphTargetsBlock extends NodeMaterialBlock {\r\n private _repeatableContentAnchor: string;\r\n\r\n /**\r\n * Create a new MorphTargetsBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Vertex);\r\n\r\n this.registerInput(\"position\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerInput(\"normal\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerInput(\"tangent\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.tangent.acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n this.registerOutput(\"positionOutput\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerOutput(\"normalOutput\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerOutput(\"tangentOutput\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"uvOutput\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"MorphTargetsBlock\";\r\n }\r\n\r\n /**\r\n * Gets the position input component\r\n */\r\n public get position(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the normal input component\r\n */\r\n public get normal(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the tangent input component\r\n */\r\n public get tangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the tangent input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the position output component\r\n */\r\n public get positionOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the normal output component\r\n */\r\n public get normalOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the tangent output component\r\n */\r\n public get tangentOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[2];\r\n }\r\n\r\n /**\r\n * Gets the tangent output component\r\n */\r\n public get uvOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[3];\r\n }\r\n\r\n public initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"morphTargetInfluences\");\r\n }\r\n\r\n public autoConfigure(material: NodeMaterial) {\r\n if (!this.position.isConnected) {\r\n let positionInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"position\");\r\n\r\n if (!positionInput) {\r\n positionInput = new InputBlock(\"position\");\r\n positionInput.setAsAttribute();\r\n }\r\n positionInput.output.connectTo(this.position);\r\n }\r\n if (!this.normal.isConnected) {\r\n let normalInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"normal\");\r\n\r\n if (!normalInput) {\r\n normalInput = new InputBlock(\"normal\");\r\n normalInput.setAsAttribute(\"normal\");\r\n }\r\n normalInput.output.connectTo(this.normal);\r\n }\r\n if (!this.tangent.isConnected) {\r\n let tangentInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"tangent\");\r\n\r\n if (!tangentInput) {\r\n tangentInput = new InputBlock(\"tangent\");\r\n tangentInput.setAsAttribute(\"tangent\");\r\n }\r\n tangentInput.output.connectTo(this.tangent);\r\n }\r\n if (!this.uv.isConnected) {\r\n let uvInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"uv\");\r\n\r\n if (!uvInput) {\r\n uvInput = new InputBlock(\"uv\");\r\n uvInput.setAsAttribute(\"uv\");\r\n }\r\n uvInput.output.connectTo(this.uv);\r\n }\r\n }\r\n\r\n public prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n if ((<Mesh>mesh).morphTargetManager) {\r\n const morphTargetManager = (<Mesh>mesh).morphTargetManager;\r\n\r\n if (morphTargetManager?.isUsingTextureForTargets && morphTargetManager.numInfluencers !== defines[\"NUM_MORPH_INFLUENCERS\"]) {\r\n defines.markAsAttributesDirty();\r\n }\r\n }\r\n\r\n if (!defines._areAttributesDirty) {\r\n return;\r\n }\r\n\r\n MaterialHelper.PrepareDefinesForMorphTargets(mesh, defines);\r\n }\r\n\r\n public bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if (mesh && mesh.morphTargetManager && mesh.morphTargetManager.numInfluencers > 0) {\r\n MaterialHelper.BindMorphTargetParameters(mesh, effect);\r\n\r\n if (mesh.morphTargetManager.isUsingTextureForTargets) {\r\n mesh.morphTargetManager._bind(effect);\r\n }\r\n }\r\n }\r\n\r\n public replaceRepeatableContent(vertexShaderState: NodeMaterialBuildState, fragmentShaderState: NodeMaterialBuildState, mesh: AbstractMesh, defines: NodeMaterialDefines) {\r\n const position = this.position;\r\n const normal = this.normal;\r\n const tangent = this.tangent;\r\n const uv = this.uv;\r\n const positionOutput = this.positionOutput;\r\n const normalOutput = this.normalOutput;\r\n const tangentOutput = this.tangentOutput;\r\n const uvOutput = this.uvOutput;\r\n const state = vertexShaderState;\r\n const repeatCount = defines.NUM_MORPH_INFLUENCERS as number;\r\n\r\n const manager = (<Mesh>mesh).morphTargetManager;\r\n const hasNormals = manager && manager.supportsNormals && defines[\"NORMAL\"];\r\n const hasTangents = manager && manager.supportsTangents && defines[\"TANGENT\"];\r\n const hasUVs = manager && manager.supportsUVs && defines[\"UV1\"];\r\n\r\n let injectionCode = \"\";\r\n\r\n if (manager?.isUsingTextureForTargets && repeatCount > 0) {\r\n injectionCode += `float vertexID;\\r\\n`;\r\n }\r\n\r\n for (let index = 0; index < repeatCount; index++) {\r\n injectionCode += `#ifdef MORPHTARGETS\\r\\n`;\r\n if (manager?.isUsingTextureForTargets) {\r\n injectionCode += `vertexID = float(gl_VertexID) * morphTargetTextureInfo.x;\\r\\n`;\r\n injectionCode += `${positionOutput.associatedVariableName} += (readVector3FromRawSampler(${index}, vertexID) - ${position.associatedVariableName}) * morphTargetInfluences[${index}];\\r\\n`;\r\n injectionCode += `vertexID += 1.0;\\r\\n`;\r\n } else {\r\n injectionCode += `${positionOutput.associatedVariableName} += (position${index} - ${position.associatedVariableName}) * morphTargetInfluences[${index}];\\r\\n`;\r\n }\r\n\r\n if (hasNormals) {\r\n injectionCode += `#ifdef MORPHTARGETS_NORMAL\\r\\n`;\r\n if (manager?.isUsingTextureForTargets) {\r\n injectionCode += `${normalOutput.associatedVariableName} += (readVector3FromRawSampler(${index}, vertexID) - ${normal.associatedVariableName}) * morphTargetInfluences[${index}];\\r\\n`;\r\n injectionCode += `vertexID += 1.0;\\r\\n`;\r\n } else {\r\n injectionCode += `${normalOutput.associatedVariableName} += (normal${index} - ${normal.associatedVariableName}) * morphTargetInfluences[${index}];\\r\\n`;\r\n }\r\n injectionCode += `#endif\\r\\n`;\r\n }\r\n\r\n if (hasUVs) {\r\n injectionCode += `#ifdef MORPHTARGETS_UV\\r\\n`;\r\n if (manager?.isUsingTextureForTargets) {\r\n injectionCode += `${uvOutput.associatedVariableName} += (readVector3FromRawSampler(${index}, vertexID).xy - ${uv.associatedVariableName}) * morphTargetInfluences[${index}];\\r\\n`;\r\n injectionCode += `vertexID += 1.0;\\r\\n`;\r\n } else {\r\n injectionCode += `${uvOutput.associatedVariableName}.xy += (uv_${index} - ${uv.associatedVariableName}.xy) * morphTargetInfluences[${index}];\\r\\n`;\r\n }\r\n injectionCode += `#endif\\r\\n`;\r\n }\r\n\r\n if (hasTangents) {\r\n injectionCode += `#ifdef MORPHTARGETS_TANGENT\\r\\n`;\r\n if (manager?.isUsingTextureForTargets) {\r\n injectionCode += `${tangentOutput.associatedVariableName}.xyz += (readVector3FromRawSampler(${index}, vertexID) - ${tangent.associatedVariableName}.xyz) * morphTargetInfluences[${index}];\\r\\n`;\r\n } else {\r\n injectionCode += `${tangentOutput.associatedVariableName}.xyz += (tangent${index} - ${tangent.associatedVariableName}.xyz) * morphTargetInfluences[${index}];\\r\\n`;\r\n }\r\n\r\n if (tangent.type === NodeMaterialBlockConnectionPointTypes.Vector4) {\r\n injectionCode += `${tangentOutput.associatedVariableName}.w = ${tangent.associatedVariableName}.w;\\r\\n`;\r\n } else {\r\n injectionCode += `${tangentOutput.associatedVariableName}.w = 1.;\\r\\n`;\r\n }\r\n injectionCode += `#endif\\r\\n`;\r\n }\r\n\r\n injectionCode += `#endif\\r\\n`;\r\n }\r\n\r\n state.compilationString = state.compilationString.replace(this._repeatableContentAnchor, injectionCode);\r\n\r\n if (repeatCount > 0) {\r\n for (let index = 0; index < repeatCount; index++) {\r\n state.attributes.push(VertexBuffer.PositionKind + index);\r\n\r\n if (hasNormals) {\r\n state.attributes.push(VertexBuffer.NormalKind + index);\r\n }\r\n\r\n if (hasTangents) {\r\n state.attributes.push(VertexBuffer.TangentKind + index);\r\n }\r\n\r\n if (hasUVs) {\r\n state.attributes.push(VertexBuffer.UVKind + \"_\" + index);\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n // Register for defines\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n // Register for binding\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n // Register for repeatable content generation\r\n state.sharedData.repeatableContentBlocks.push(this);\r\n\r\n // Emit code\r\n const position = this.position;\r\n const normal = this.normal;\r\n const tangent = this.tangent;\r\n const uv = this.uv;\r\n const positionOutput = this.positionOutput;\r\n const normalOutput = this.normalOutput;\r\n const tangentOutput = this.tangentOutput;\r\n const uvOutput = this.uvOutput;\r\n const comments = `//${this.name}`;\r\n\r\n state.uniforms.push(\"morphTargetInfluences\");\r\n state.uniforms.push(\"morphTargetTextureInfo\");\r\n state.uniforms.push(\"morphTargetTextureIndices\");\r\n state.samplers.push(\"morphTargets\");\r\n\r\n state._emitFunctionFromInclude(\"morphTargetsVertexGlobalDeclaration\", comments);\r\n state._emitFunctionFromInclude(\"morphTargetsVertexDeclaration\", comments, {\r\n repeatKey: \"maxSimultaneousMorphTargets\",\r\n });\r\n\r\n state.compilationString += `${this._declareOutput(positionOutput, state)} = ${position.associatedVariableName};\\r\\n`;\r\n state.compilationString += `#ifdef NORMAL\\r\\n`;\r\n state.compilationString += `${this._declareOutput(normalOutput, state)} = ${normal.associatedVariableName};\\r\\n`;\r\n state.compilationString += `#else\\r\\n`;\r\n state.compilationString += `${this._declareOutput(normalOutput, state)} = vec3(0., 0., 0.);\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef TANGENT\\r\\n`;\r\n state.compilationString += `${this._declareOutput(tangentOutput, state)} = ${tangent.associatedVariableName};\\r\\n`;\r\n state.compilationString += `#else\\r\\n`;\r\n state.compilationString += `${this._declareOutput(tangentOutput, state)} = vec4(0., 0., 0., 0.);\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef UV1\\r\\n`;\r\n state.compilationString += `${this._declareOutput(uvOutput, state)} = ${uv.associatedVariableName};\\r\\n`;\r\n state.compilationString += `#else\\r\\n`;\r\n state.compilationString += `${this._declareOutput(uvOutput, state)} = vec2(0., 0.);\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n // Repeatable content\r\n this._repeatableContentAnchor = state._repeatableContentAnchor;\r\n state.compilationString += this._repeatableContentAnchor;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.MorphTargetsBlock\", MorphTargetsBlock);\r\n"]}
1
+ {"version":3,"file":"morphTargetsBlock.js","sourceRoot":"","sources":["../../../../../../../lts/core/generated/Materials/Node/Blocks/Vertex/morphTargetsBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport { MaterialHelper } from \"../../../materialHelper\";\r\nimport { VertexBuffer } from \"../../../../Buffers/buffer\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\n\r\nimport \"../../../../Shaders/ShadersInclude/morphTargetsVertexDeclaration\";\r\nimport \"../../../../Shaders/ShadersInclude/morphTargetsVertexGlobalDeclaration\";\r\n\r\n/**\r\n * Block used to add morph targets support to vertex shader\r\n */\r\nexport class MorphTargetsBlock extends NodeMaterialBlock {\r\n private _repeatableContentAnchor: string;\r\n\r\n /**\r\n * Create a new MorphTargetsBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Vertex);\r\n\r\n this.registerInput(\"position\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerInput(\"normal\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerInput(\"tangent\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.tangent.addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector4 | NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n this.registerOutput(\"positionOutput\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerOutput(\"normalOutput\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerOutput(\"tangentOutput\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"uvOutput\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"MorphTargetsBlock\";\r\n }\r\n\r\n /**\r\n * Gets the position input component\r\n */\r\n public get position(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the normal input component\r\n */\r\n public get normal(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the tangent input component\r\n */\r\n public get tangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the tangent input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the position output component\r\n */\r\n public get positionOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the normal output component\r\n */\r\n public get normalOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the tangent output component\r\n */\r\n public get tangentOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[2];\r\n }\r\n\r\n /**\r\n * Gets the tangent output component\r\n */\r\n public get uvOutput(): NodeMaterialConnectionPoint {\r\n return this._outputs[3];\r\n }\r\n\r\n public initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"morphTargetInfluences\");\r\n }\r\n\r\n public autoConfigure(material: NodeMaterial) {\r\n if (!this.position.isConnected) {\r\n let positionInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"position\");\r\n\r\n if (!positionInput) {\r\n positionInput = new InputBlock(\"position\");\r\n positionInput.setAsAttribute();\r\n }\r\n positionInput.output.connectTo(this.position);\r\n }\r\n if (!this.normal.isConnected) {\r\n let normalInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"normal\");\r\n\r\n if (!normalInput) {\r\n normalInput = new InputBlock(\"normal\");\r\n normalInput.setAsAttribute(\"normal\");\r\n }\r\n normalInput.output.connectTo(this.normal);\r\n }\r\n if (!this.tangent.isConnected) {\r\n let tangentInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"tangent\");\r\n\r\n if (!tangentInput) {\r\n tangentInput = new InputBlock(\"tangent\");\r\n tangentInput.setAsAttribute(\"tangent\");\r\n }\r\n tangentInput.output.connectTo(this.tangent);\r\n }\r\n if (!this.uv.isConnected) {\r\n let uvInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"uv\");\r\n\r\n if (!uvInput) {\r\n uvInput = new InputBlock(\"uv\");\r\n uvInput.setAsAttribute(\"uv\");\r\n }\r\n uvInput.output.connectTo(this.uv);\r\n }\r\n }\r\n\r\n public prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n if ((<Mesh>mesh).morphTargetManager) {\r\n const morphTargetManager = (<Mesh>mesh).morphTargetManager;\r\n\r\n if (morphTargetManager?.isUsingTextureForTargets && morphTargetManager.numInfluencers !== defines[\"NUM_MORPH_INFLUENCERS\"]) {\r\n defines.markAsAttributesDirty();\r\n }\r\n }\r\n\r\n if (!defines._areAttributesDirty) {\r\n return;\r\n }\r\n\r\n MaterialHelper.PrepareDefinesForMorphTargets(mesh, defines);\r\n }\r\n\r\n public bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if (mesh && mesh.morphTargetManager && mesh.morphTargetManager.numInfluencers > 0) {\r\n MaterialHelper.BindMorphTargetParameters(mesh, effect);\r\n\r\n if (mesh.morphTargetManager.isUsingTextureForTargets) {\r\n mesh.morphTargetManager._bind(effect);\r\n }\r\n }\r\n }\r\n\r\n public replaceRepeatableContent(vertexShaderState: NodeMaterialBuildState, fragmentShaderState: NodeMaterialBuildState, mesh: AbstractMesh, defines: NodeMaterialDefines) {\r\n const position = this.position;\r\n const normal = this.normal;\r\n const tangent = this.tangent;\r\n const uv = this.uv;\r\n const positionOutput = this.positionOutput;\r\n const normalOutput = this.normalOutput;\r\n const tangentOutput = this.tangentOutput;\r\n const uvOutput = this.uvOutput;\r\n const state = vertexShaderState;\r\n const repeatCount = defines.NUM_MORPH_INFLUENCERS as number;\r\n\r\n const manager = (<Mesh>mesh).morphTargetManager;\r\n const hasNormals = manager && manager.supportsNormals && defines[\"NORMAL\"];\r\n const hasTangents = manager && manager.supportsTangents && defines[\"TANGENT\"];\r\n const hasUVs = manager && manager.supportsUVs && defines[\"UV1\"];\r\n\r\n let injectionCode = \"\";\r\n\r\n if (manager?.isUsingTextureForTargets && repeatCount > 0) {\r\n injectionCode += `float vertexID;\\r\\n`;\r\n }\r\n\r\n for (let index = 0; index < repeatCount; index++) {\r\n injectionCode += `#ifdef MORPHTARGETS\\r\\n`;\r\n if (manager?.isUsingTextureForTargets) {\r\n injectionCode += `vertexID = float(gl_VertexID) * morphTargetTextureInfo.x;\\r\\n`;\r\n injectionCode += `${positionOutput.associatedVariableName} += (readVector3FromRawSampler(${index}, vertexID) - ${position.associatedVariableName}) * morphTargetInfluences[${index}];\\r\\n`;\r\n injectionCode += `vertexID += 1.0;\\r\\n`;\r\n } else {\r\n injectionCode += `${positionOutput.associatedVariableName} += (position${index} - ${position.associatedVariableName}) * morphTargetInfluences[${index}];\\r\\n`;\r\n }\r\n\r\n if (hasNormals) {\r\n injectionCode += `#ifdef MORPHTARGETS_NORMAL\\r\\n`;\r\n if (manager?.isUsingTextureForTargets) {\r\n injectionCode += `${normalOutput.associatedVariableName} += (readVector3FromRawSampler(${index}, vertexID) - ${normal.associatedVariableName}) * morphTargetInfluences[${index}];\\r\\n`;\r\n injectionCode += `vertexID += 1.0;\\r\\n`;\r\n } else {\r\n injectionCode += `${normalOutput.associatedVariableName} += (normal${index} - ${normal.associatedVariableName}) * morphTargetInfluences[${index}];\\r\\n`;\r\n }\r\n injectionCode += `#endif\\r\\n`;\r\n }\r\n\r\n if (hasUVs) {\r\n injectionCode += `#ifdef MORPHTARGETS_UV\\r\\n`;\r\n if (manager?.isUsingTextureForTargets) {\r\n injectionCode += `${uvOutput.associatedVariableName} += (readVector3FromRawSampler(${index}, vertexID).xy - ${uv.associatedVariableName}) * morphTargetInfluences[${index}];\\r\\n`;\r\n injectionCode += `vertexID += 1.0;\\r\\n`;\r\n } else {\r\n injectionCode += `${uvOutput.associatedVariableName}.xy += (uv_${index} - ${uv.associatedVariableName}.xy) * morphTargetInfluences[${index}];\\r\\n`;\r\n }\r\n injectionCode += `#endif\\r\\n`;\r\n }\r\n\r\n if (hasTangents) {\r\n injectionCode += `#ifdef MORPHTARGETS_TANGENT\\r\\n`;\r\n if (manager?.isUsingTextureForTargets) {\r\n injectionCode += `${tangentOutput.associatedVariableName}.xyz += (readVector3FromRawSampler(${index}, vertexID) - ${tangent.associatedVariableName}.xyz) * morphTargetInfluences[${index}];\\r\\n`;\r\n } else {\r\n injectionCode += `${tangentOutput.associatedVariableName}.xyz += (tangent${index} - ${tangent.associatedVariableName}.xyz) * morphTargetInfluences[${index}];\\r\\n`;\r\n }\r\n\r\n if (tangent.type === NodeMaterialBlockConnectionPointTypes.Vector4) {\r\n injectionCode += `${tangentOutput.associatedVariableName}.w = ${tangent.associatedVariableName}.w;\\r\\n`;\r\n } else {\r\n injectionCode += `${tangentOutput.associatedVariableName}.w = 1.;\\r\\n`;\r\n }\r\n injectionCode += `#endif\\r\\n`;\r\n }\r\n\r\n injectionCode += `#endif\\r\\n`;\r\n }\r\n\r\n state.compilationString = state.compilationString.replace(this._repeatableContentAnchor, injectionCode);\r\n\r\n if (repeatCount > 0) {\r\n for (let index = 0; index < repeatCount; index++) {\r\n state.attributes.push(VertexBuffer.PositionKind + index);\r\n\r\n if (hasNormals) {\r\n state.attributes.push(VertexBuffer.NormalKind + index);\r\n }\r\n\r\n if (hasTangents) {\r\n state.attributes.push(VertexBuffer.TangentKind + index);\r\n }\r\n\r\n if (hasUVs) {\r\n state.attributes.push(VertexBuffer.UVKind + \"_\" + index);\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n // Register for defines\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n // Register for binding\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n // Register for repeatable content generation\r\n state.sharedData.repeatableContentBlocks.push(this);\r\n\r\n // Emit code\r\n const position = this.position;\r\n const normal = this.normal;\r\n const tangent = this.tangent;\r\n const uv = this.uv;\r\n const positionOutput = this.positionOutput;\r\n const normalOutput = this.normalOutput;\r\n const tangentOutput = this.tangentOutput;\r\n const uvOutput = this.uvOutput;\r\n const comments = `//${this.name}`;\r\n\r\n state.uniforms.push(\"morphTargetInfluences\");\r\n state.uniforms.push(\"morphTargetTextureInfo\");\r\n state.uniforms.push(\"morphTargetTextureIndices\");\r\n state.samplers.push(\"morphTargets\");\r\n\r\n state._emitFunctionFromInclude(\"morphTargetsVertexGlobalDeclaration\", comments);\r\n state._emitFunctionFromInclude(\"morphTargetsVertexDeclaration\", comments, {\r\n repeatKey: \"maxSimultaneousMorphTargets\",\r\n });\r\n\r\n state.compilationString += `${this._declareOutput(positionOutput, state)} = ${position.associatedVariableName};\\r\\n`;\r\n state.compilationString += `#ifdef NORMAL\\r\\n`;\r\n state.compilationString += `${this._declareOutput(normalOutput, state)} = ${normal.associatedVariableName};\\r\\n`;\r\n state.compilationString += `#else\\r\\n`;\r\n state.compilationString += `${this._declareOutput(normalOutput, state)} = vec3(0., 0., 0.);\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef TANGENT\\r\\n`;\r\n state.compilationString += `${this._declareOutput(tangentOutput, state)} = ${tangent.associatedVariableName};\\r\\n`;\r\n state.compilationString += `#else\\r\\n`;\r\n state.compilationString += `${this._declareOutput(tangentOutput, state)} = vec4(0., 0., 0., 0.);\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n state.compilationString += `#ifdef UV1\\r\\n`;\r\n state.compilationString += `${this._declareOutput(uvOutput, state)} = ${uv.associatedVariableName};\\r\\n`;\r\n state.compilationString += `#else\\r\\n`;\r\n state.compilationString += `${this._declareOutput(uvOutput, state)} = vec2(0., 0.);\\r\\n`;\r\n state.compilationString += `#endif\\r\\n`;\r\n\r\n // Repeatable content\r\n this._repeatableContentAnchor = state._repeatableContentAnchor;\r\n state.compilationString += this._repeatableContentAnchor;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.MorphTargetsBlock\", MorphTargetsBlock);\r\n"]}
@@ -58,13 +58,14 @@ export class GradientBlock extends NodeMaterialBlock {
58
58
  this.colorSteps = [new GradientBlockColorStep(0, Color3.Black()), new GradientBlockColorStep(1.0, Color3.White())];
59
59
  /** Gets an observable raised when the value is changed */
60
60
  this.onValueChangedObservable = new Observable();
61
- this.registerInput("gradient", NodeMaterialBlockConnectionPointTypes.Float);
61
+ this.registerInput("gradient", NodeMaterialBlockConnectionPointTypes.AutoDetect);
62
62
  this.registerOutput("output", NodeMaterialBlockConnectionPointTypes.Color3);
63
- this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector2);
64
- this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector3);
65
- this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector4);
66
- this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Color3);
67
- this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Color4);
63
+ this._inputs[0].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Float |
64
+ NodeMaterialBlockConnectionPointTypes.Vector2 |
65
+ NodeMaterialBlockConnectionPointTypes.Vector3 |
66
+ NodeMaterialBlockConnectionPointTypes.Vector4 |
67
+ NodeMaterialBlockConnectionPointTypes.Color3 |
68
+ NodeMaterialBlockConnectionPointTypes.Color4);
68
69
  }
69
70
  /** calls observable when the value is changed*/
70
71
  colorStepsUpdated() {
@@ -1 +1 @@
1
- {"version":3,"file":"gradientBlock.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Materials/Node/Blocks/gradientBlock.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 { Color3 } from \"../../../Maths/math.color\";\r\nimport type { Scene } from \"../../../scene\";\r\nimport { Observable } from \"../../../Misc/observable\";\r\n\r\n/**\r\n * Class used to store a color step for the GradientBlock\r\n */\r\nexport class GradientBlockColorStep {\r\n private _step: number;\r\n /**\r\n * Gets value indicating which step this color is associated with (between 0 and 1)\r\n */\r\n public get step(): number {\r\n return this._step;\r\n }\r\n\r\n /**\r\n * Sets a value indicating which step this color is associated with (between 0 and 1)\r\n */\r\n public set step(val: number) {\r\n this._step = val;\r\n }\r\n\r\n private _color: Color3;\r\n\r\n /**\r\n * Gets the color associated with this step\r\n */\r\n public get color(): Color3 {\r\n return this._color;\r\n }\r\n\r\n /**\r\n * Sets the color associated with this step\r\n */\r\n public set color(val: Color3) {\r\n this._color = val;\r\n }\r\n\r\n /**\r\n * Creates a new GradientBlockColorStep\r\n * @param step defines a value indicating which step this color is associated with (between 0 and 1)\r\n * @param color defines the color associated with this step\r\n */\r\n public constructor(step: number, color: Color3) {\r\n this.step = step;\r\n this.color = color;\r\n }\r\n}\r\n\r\n/**\r\n * Block used to return a color from a gradient based on an input value between 0 and 1\r\n */\r\nexport class GradientBlock extends NodeMaterialBlock {\r\n /**\r\n * Gets or sets the list of color steps\r\n */\r\n public colorSteps: GradientBlockColorStep[] = [new GradientBlockColorStep(0, Color3.Black()), new GradientBlockColorStep(1.0, Color3.White())];\r\n\r\n /** Gets an observable raised when the value is changed */\r\n public onValueChangedObservable = new Observable<GradientBlock>();\r\n\r\n /** calls observable when the value is changed*/\r\n public colorStepsUpdated() {\r\n this.onValueChangedObservable.notifyObservers(this);\r\n }\r\n /**\r\n * Creates a new GradientBlock\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(\"gradient\", NodeMaterialBlockConnectionPointTypes.Float);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Color3);\r\n\r\n this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector2);\r\n this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Color3);\r\n this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Color4);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"GradientBlock\";\r\n }\r\n\r\n /**\r\n * Gets the gradient input component\r\n */\r\n public get gradient(): 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 _writeColorConstant(index: number) {\r\n const step = this.colorSteps[index];\r\n return `vec3(${step.color.r}, ${step.color.g}, ${step.color.b})`;\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const output = this._outputs[0];\r\n\r\n if (!this.colorSteps.length || !this.gradient.connectedPoint) {\r\n state.compilationString += this._declareOutput(output, state) + ` = vec3(0., 0., 0.);\\r\\n`;\r\n return;\r\n }\r\n\r\n const tempColor = state._getFreeVariableName(\"gradientTempColor\");\r\n const tempPosition = state._getFreeVariableName(\"gradientTempPosition\");\r\n\r\n state.compilationString += `vec3 ${tempColor} = ${this._writeColorConstant(0)};\\r\\n`;\r\n state.compilationString += `float ${tempPosition};\\r\\n`;\r\n\r\n let gradientSource = this.gradient.associatedVariableName;\r\n\r\n if (this.gradient.connectedPoint!.type !== NodeMaterialBlockConnectionPointTypes.Float) {\r\n gradientSource += \".x\";\r\n }\r\n\r\n for (let index = 1; index < this.colorSteps.length; index++) {\r\n const step = this.colorSteps[index];\r\n const previousStep = this.colorSteps[index - 1];\r\n state.compilationString += `${tempPosition} = clamp((${gradientSource} - ${state._emitFloat(previousStep.step)}) / (${state._emitFloat(\r\n step.step\r\n )} - ${state._emitFloat(previousStep.step)}), 0.0, 1.0) * step(${state._emitFloat(index)}, ${state._emitFloat(this.colorSteps.length - 1)});\\r\\n`;\r\n state.compilationString += `${tempColor} = mix(${tempColor}, ${this._writeColorConstant(index)}, ${tempPosition});\\r\\n`;\r\n }\r\n state.compilationString += this._declareOutput(output, state) + ` = ${tempColor};\\r\\n`;\r\n\r\n return this;\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.colorSteps = [];\r\n\r\n for (const step of this.colorSteps) {\r\n serializationObject.colorSteps.push({\r\n step: step.step,\r\n color: {\r\n r: step.color.r,\r\n g: step.color.g,\r\n b: step.color.b,\r\n },\r\n });\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n public _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.colorSteps.length = 0;\r\n\r\n for (const step of serializationObject.colorSteps) {\r\n this.colorSteps.push(new GradientBlockColorStep(step.step, new Color3(step.color.r, step.color.g, step.color.b)));\r\n }\r\n }\r\n\r\n protected _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n codeString += `${this._codeVariableName}.colorSteps = [];\\r\\n`;\r\n\r\n for (const colorStep of this.colorSteps) {\r\n codeString += `${this._codeVariableName}.colorSteps.push(new BABYLON.GradientBlockColorStep(${colorStep.step}, new BABYLON.Color3(${colorStep.color.r}, ${colorStep.color.g}, ${colorStep.color.b})));\\r\\n`;\r\n }\r\n\r\n return codeString;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GradientBlock\", GradientBlock);\r\n"]}
1
+ {"version":3,"file":"gradientBlock.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Materials/Node/Blocks/gradientBlock.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 { Color3 } from \"../../../Maths/math.color\";\r\nimport type { Scene } from \"../../../scene\";\r\nimport { Observable } from \"../../../Misc/observable\";\r\n\r\n/**\r\n * Class used to store a color step for the GradientBlock\r\n */\r\nexport class GradientBlockColorStep {\r\n private _step: number;\r\n /**\r\n * Gets value indicating which step this color is associated with (between 0 and 1)\r\n */\r\n public get step(): number {\r\n return this._step;\r\n }\r\n\r\n /**\r\n * Sets a value indicating which step this color is associated with (between 0 and 1)\r\n */\r\n public set step(val: number) {\r\n this._step = val;\r\n }\r\n\r\n private _color: Color3;\r\n\r\n /**\r\n * Gets the color associated with this step\r\n */\r\n public get color(): Color3 {\r\n return this._color;\r\n }\r\n\r\n /**\r\n * Sets the color associated with this step\r\n */\r\n public set color(val: Color3) {\r\n this._color = val;\r\n }\r\n\r\n /**\r\n * Creates a new GradientBlockColorStep\r\n * @param step defines a value indicating which step this color is associated with (between 0 and 1)\r\n * @param color defines the color associated with this step\r\n */\r\n public constructor(step: number, color: Color3) {\r\n this.step = step;\r\n this.color = color;\r\n }\r\n}\r\n\r\n/**\r\n * Block used to return a color from a gradient based on an input value between 0 and 1\r\n */\r\nexport class GradientBlock extends NodeMaterialBlock {\r\n /**\r\n * Gets or sets the list of color steps\r\n */\r\n public colorSteps: GradientBlockColorStep[] = [new GradientBlockColorStep(0, Color3.Black()), new GradientBlockColorStep(1.0, Color3.White())];\r\n\r\n /** Gets an observable raised when the value is changed */\r\n public onValueChangedObservable = new Observable<GradientBlock>();\r\n\r\n /** calls observable when the value is changed*/\r\n public colorStepsUpdated() {\r\n this.onValueChangedObservable.notifyObservers(this);\r\n }\r\n /**\r\n * Creates a new GradientBlock\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(\"gradient\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Color3);\r\n\r\n this._inputs[0].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Float |\r\n NodeMaterialBlockConnectionPointTypes.Vector2 |\r\n NodeMaterialBlockConnectionPointTypes.Vector3 |\r\n NodeMaterialBlockConnectionPointTypes.Vector4 |\r\n NodeMaterialBlockConnectionPointTypes.Color3 |\r\n 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 getClassName() {\r\n return \"GradientBlock\";\r\n }\r\n\r\n /**\r\n * Gets the gradient input component\r\n */\r\n public get gradient(): 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 _writeColorConstant(index: number) {\r\n const step = this.colorSteps[index];\r\n return `vec3(${step.color.r}, ${step.color.g}, ${step.color.b})`;\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const output = this._outputs[0];\r\n\r\n if (!this.colorSteps.length || !this.gradient.connectedPoint) {\r\n state.compilationString += this._declareOutput(output, state) + ` = vec3(0., 0., 0.);\\r\\n`;\r\n return;\r\n }\r\n\r\n const tempColor = state._getFreeVariableName(\"gradientTempColor\");\r\n const tempPosition = state._getFreeVariableName(\"gradientTempPosition\");\r\n\r\n state.compilationString += `vec3 ${tempColor} = ${this._writeColorConstant(0)};\\r\\n`;\r\n state.compilationString += `float ${tempPosition};\\r\\n`;\r\n\r\n let gradientSource = this.gradient.associatedVariableName;\r\n\r\n if (this.gradient.connectedPoint!.type !== NodeMaterialBlockConnectionPointTypes.Float) {\r\n gradientSource += \".x\";\r\n }\r\n\r\n for (let index = 1; index < this.colorSteps.length; index++) {\r\n const step = this.colorSteps[index];\r\n const previousStep = this.colorSteps[index - 1];\r\n state.compilationString += `${tempPosition} = clamp((${gradientSource} - ${state._emitFloat(previousStep.step)}) / (${state._emitFloat(\r\n step.step\r\n )} - ${state._emitFloat(previousStep.step)}), 0.0, 1.0) * step(${state._emitFloat(index)}, ${state._emitFloat(this.colorSteps.length - 1)});\\r\\n`;\r\n state.compilationString += `${tempColor} = mix(${tempColor}, ${this._writeColorConstant(index)}, ${tempPosition});\\r\\n`;\r\n }\r\n state.compilationString += this._declareOutput(output, state) + ` = ${tempColor};\\r\\n`;\r\n\r\n return this;\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.colorSteps = [];\r\n\r\n for (const step of this.colorSteps) {\r\n serializationObject.colorSteps.push({\r\n step: step.step,\r\n color: {\r\n r: step.color.r,\r\n g: step.color.g,\r\n b: step.color.b,\r\n },\r\n });\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n public _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.colorSteps.length = 0;\r\n\r\n for (const step of serializationObject.colorSteps) {\r\n this.colorSteps.push(new GradientBlockColorStep(step.step, new Color3(step.color.r, step.color.g, step.color.b)));\r\n }\r\n }\r\n\r\n protected _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n codeString += `${this._codeVariableName}.colorSteps = [];\\r\\n`;\r\n\r\n for (const colorStep of this.colorSteps) {\r\n codeString += `${this._codeVariableName}.colorSteps.push(new BABYLON.GradientBlockColorStep(${colorStep.step}, new BABYLON.Color3(${colorStep.color.r}, ${colorStep.color.g}, ${colorStep.color.b})));\\r\\n`;\r\n }\r\n\r\n return codeString;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.GradientBlock\", GradientBlock);\r\n"]}
@@ -12,15 +12,17 @@ export class NormalBlendBlock extends NodeMaterialBlock {
12
12
  */
13
13
  constructor(name) {
14
14
  super(name, NodeMaterialBlockTargets.Neutral);
15
- this.registerInput("normalMap0", NodeMaterialBlockConnectionPointTypes.Vector3);
16
- this.registerInput("normalMap1", NodeMaterialBlockConnectionPointTypes.Vector3);
15
+ this.registerInput("normalMap0", NodeMaterialBlockConnectionPointTypes.AutoDetect);
16
+ this.registerInput("normalMap1", NodeMaterialBlockConnectionPointTypes.AutoDetect);
17
17
  this.registerOutput("output", NodeMaterialBlockConnectionPointTypes.Vector3);
18
- this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Color3);
19
- this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Color4);
20
- this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector4);
21
- this._inputs[1].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Color3);
22
- this._inputs[1].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Color4);
23
- this._inputs[1].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector4);
18
+ this._inputs[0].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Color3 |
19
+ NodeMaterialBlockConnectionPointTypes.Color4 |
20
+ NodeMaterialBlockConnectionPointTypes.Vector3 |
21
+ NodeMaterialBlockConnectionPointTypes.Vector4);
22
+ this._inputs[1].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Color3 |
23
+ NodeMaterialBlockConnectionPointTypes.Color4 |
24
+ NodeMaterialBlockConnectionPointTypes.Vector3 |
25
+ NodeMaterialBlockConnectionPointTypes.Vector4);
24
26
  }
25
27
  /**
26
28
  * Gets the current class name
@@ -1 +1 @@
1
- {"version":3,"file":"normalBlendBlock.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Materials/Node/Blocks/normalBlendBlock.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\n/**\r\n * Block used to blend normals\r\n */\r\nexport class NormalBlendBlock extends NodeMaterialBlock {\r\n /**\r\n * Creates a new NormalBlendBlock\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(\"normalMap0\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerInput(\"normalMap1\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Color3);\r\n this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Color4);\r\n this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n\r\n this._inputs[1].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Color3);\r\n this._inputs[1].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Color4);\r\n this._inputs[1].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"NormalBlendBlock\";\r\n }\r\n\r\n /**\r\n * Gets the first input component\r\n */\r\n public get normalMap0(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the second input component\r\n */\r\n public get normalMap1(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\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 _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const output = this._outputs[0];\r\n const input0 = this._inputs[0];\r\n const input1 = this._inputs[1];\r\n const stepR = state._getFreeVariableName(\"stepR\");\r\n const stepG = state._getFreeVariableName(\"stepG\");\r\n\r\n state.compilationString += `float ${stepR} = step(0.5, ${input0.associatedVariableName}.r);\\r\\n`;\r\n state.compilationString += `float ${stepG} = step(0.5, ${input0.associatedVariableName}.g);\\r\\n`;\r\n state.compilationString += this._declareOutput(output, state) + `;\\r\\n`;\r\n state.compilationString += `${output.associatedVariableName}.r = (1.0 - ${stepR}) * ${input0.associatedVariableName}.r * ${input1.associatedVariableName}.r * 2.0 + ${stepR} * (1.0 - (1.0 - ${input0.associatedVariableName}.r) * (1.0 - ${input1.associatedVariableName}.r) * 2.0);\\r\\n`;\r\n state.compilationString += `${output.associatedVariableName}.g = (1.0 - ${stepG}) * ${input0.associatedVariableName}.g * ${input1.associatedVariableName}.g * 2.0 + ${stepG} * (1.0 - (1.0 - ${input0.associatedVariableName}.g) * (1.0 - ${input1.associatedVariableName}.g) * 2.0);\\r\\n`;\r\n state.compilationString += `${output.associatedVariableName}.b = ${input0.associatedVariableName}.b * ${input1.associatedVariableName}.b;\\r\\n`;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.NormalBlendBlock\", NormalBlendBlock);\r\n"]}
1
+ {"version":3,"file":"normalBlendBlock.js","sourceRoot":"","sources":["../../../../../../lts/core/generated/Materials/Node/Blocks/normalBlendBlock.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\n/**\r\n * Block used to blend normals\r\n */\r\nexport class NormalBlendBlock extends NodeMaterialBlock {\r\n /**\r\n * Creates a new NormalBlendBlock\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(\"normalMap0\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerInput(\"normalMap1\", NodeMaterialBlockConnectionPointTypes.AutoDetect);\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n this._inputs[0].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 |\r\n NodeMaterialBlockConnectionPointTypes.Color4 |\r\n NodeMaterialBlockConnectionPointTypes.Vector3 |\r\n NodeMaterialBlockConnectionPointTypes.Vector4\r\n );\r\n\r\n this._inputs[1].addExcludedConnectionPointFromAllowedTypes(\r\n NodeMaterialBlockConnectionPointTypes.Color3 |\r\n NodeMaterialBlockConnectionPointTypes.Color4 |\r\n NodeMaterialBlockConnectionPointTypes.Vector3 |\r\n NodeMaterialBlockConnectionPointTypes.Vector4\r\n );\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"NormalBlendBlock\";\r\n }\r\n\r\n /**\r\n * Gets the first input component\r\n */\r\n public get normalMap0(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the second input component\r\n */\r\n public get normalMap1(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\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 _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const output = this._outputs[0];\r\n const input0 = this._inputs[0];\r\n const input1 = this._inputs[1];\r\n const stepR = state._getFreeVariableName(\"stepR\");\r\n const stepG = state._getFreeVariableName(\"stepG\");\r\n\r\n state.compilationString += `float ${stepR} = step(0.5, ${input0.associatedVariableName}.r);\\r\\n`;\r\n state.compilationString += `float ${stepG} = step(0.5, ${input0.associatedVariableName}.g);\\r\\n`;\r\n state.compilationString += this._declareOutput(output, state) + `;\\r\\n`;\r\n state.compilationString += `${output.associatedVariableName}.r = (1.0 - ${stepR}) * ${input0.associatedVariableName}.r * ${input1.associatedVariableName}.r * 2.0 + ${stepR} * (1.0 - (1.0 - ${input0.associatedVariableName}.r) * (1.0 - ${input1.associatedVariableName}.r) * 2.0);\\r\\n`;\r\n state.compilationString += `${output.associatedVariableName}.g = (1.0 - ${stepG}) * ${input0.associatedVariableName}.g * ${input1.associatedVariableName}.g * 2.0 + ${stepG} * (1.0 - (1.0 - ${input0.associatedVariableName}.g) * (1.0 - ${input1.associatedVariableName}.g) * 2.0);\\r\\n`;\r\n state.compilationString += `${output.associatedVariableName}.b = ${input0.associatedVariableName}.b * ${input1.associatedVariableName}.b;\\r\\n`;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.NormalBlendBlock\", NormalBlendBlock);\r\n"]}
@@ -13,12 +13,13 @@ export class RandomNumberBlock extends NodeMaterialBlock {
13
13
  */
14
14
  constructor(name) {
15
15
  super(name, NodeMaterialBlockTargets.Neutral);
16
- this.registerInput("seed", NodeMaterialBlockConnectionPointTypes.Vector2);
16
+ this.registerInput("seed", NodeMaterialBlockConnectionPointTypes.AutoDetect);
17
17
  this.registerOutput("output", NodeMaterialBlockConnectionPointTypes.Float);
18
- this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector3);
19
- this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector4);
20
- this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Color3);
21
- this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Color4);
18
+ this._inputs[0].addExcludedConnectionPointFromAllowedTypes(NodeMaterialBlockConnectionPointTypes.Vector2 |
19
+ NodeMaterialBlockConnectionPointTypes.Vector3 |
20
+ NodeMaterialBlockConnectionPointTypes.Vector4 |
21
+ NodeMaterialBlockConnectionPointTypes.Color3 |
22
+ NodeMaterialBlockConnectionPointTypes.Color4);
22
23
  }
23
24
  /**
24
25
  * Gets the current class name