@babylonjs/core 7.37.0 → 7.37.2

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 (222) hide show
  1. package/Buffers/buffer.d.ts +3 -1
  2. package/Buffers/buffer.js +20 -122
  3. package/Buffers/buffer.js.map +1 -1
  4. package/Buffers/bufferUtils.d.ts +32 -1
  5. package/Buffers/bufferUtils.js +221 -10
  6. package/Buffers/bufferUtils.js.map +1 -1
  7. package/Cameras/arcRotateCamera.d.ts +3 -1
  8. package/Cameras/arcRotateCamera.js +14 -3
  9. package/Cameras/arcRotateCamera.js.map +1 -1
  10. package/Engines/abstractEngine.js +2 -2
  11. package/Engines/abstractEngine.js.map +1 -1
  12. package/Engines/engine.js +0 -4
  13. package/Engines/engine.js.map +1 -1
  14. package/Engines/thinEngine.js +2 -2
  15. package/Engines/thinEngine.js.map +1 -1
  16. package/FrameGraph/Node/nodeRenderGraphBlock.js +1 -0
  17. package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
  18. package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.d.ts +2 -0
  19. package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.js +3 -1
  20. package/FrameGraph/Node/nodeRenderGraphBlockConnectionPoint.js.map +1 -1
  21. package/Inputs/scene.inputManager.js +2 -0
  22. package/Inputs/scene.inputManager.js.map +1 -1
  23. package/Lights/IES/iesLoader.d.ts +19 -0
  24. package/Lights/IES/iesLoader.js +150 -0
  25. package/Lights/IES/iesLoader.js.map +1 -0
  26. package/Lights/index.d.ts +1 -0
  27. package/Lights/index.js +1 -0
  28. package/Lights/index.js.map +1 -1
  29. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +12 -2
  30. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  31. package/Materials/GreasedLine/greasedLineMaterialInterfaces.d.ts +5 -0
  32. package/Materials/GreasedLine/greasedLineMaterialInterfaces.js.map +1 -1
  33. package/Materials/GreasedLine/greasedLinePluginMaterial.d.ts +21 -5
  34. package/Materials/GreasedLine/greasedLinePluginMaterial.js +52 -176
  35. package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
  36. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.d.ts +11 -0
  37. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js +158 -0
  38. package/Materials/GreasedLine/greasedLinePluginMaterialShadersGLSL.js.map +1 -0
  39. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.d.ts +11 -0
  40. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js +177 -0
  41. package/Materials/GreasedLine/greasedLinePluginMaterialShadersWGSL.js.map +1 -0
  42. package/Materials/GreasedLine/greasedLineSimpleMaterial.d.ts +4 -2
  43. package/Materials/GreasedLine/greasedLineSimpleMaterial.js +45 -25
  44. package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
  45. package/Materials/Node/Blocks/PBR/reflectionBlock.js +6 -0
  46. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  47. package/Materials/Node/Blocks/index.d.ts +1 -0
  48. package/Materials/Node/Blocks/index.js +1 -0
  49. package/Materials/Node/Blocks/index.js.map +1 -1
  50. package/Materials/Node/Blocks/matrixSplitterBlock.d.ts +56 -0
  51. package/Materials/Node/Blocks/matrixSplitterBlock.js +130 -0
  52. package/Materials/Node/Blocks/matrixSplitterBlock.js.map +1 -0
  53. package/Materials/Node/nodeMaterialBlock.js +1 -0
  54. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  55. package/Materials/Node/nodeMaterialBlockConnectionPoint.d.ts +2 -0
  56. package/Materials/Node/nodeMaterialBlockConnectionPoint.js +4 -1
  57. package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
  58. package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
  59. package/Materials/PBR/pbrBaseMaterial.js +12 -0
  60. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  61. package/Materials/Textures/Loaders/iesTextureLoader.d.ts +23 -0
  62. package/Materials/Textures/Loaders/iesTextureLoader.js +40 -0
  63. package/Materials/Textures/Loaders/iesTextureLoader.js.map +1 -0
  64. package/Materials/Textures/Loaders/index.d.ts +1 -0
  65. package/Materials/Textures/Loaders/index.js +1 -0
  66. package/Materials/Textures/Loaders/index.js.map +1 -1
  67. package/Materials/Textures/Loaders/textureLoaderManager.js +3 -0
  68. package/Materials/Textures/Loaders/textureLoaderManager.js.map +1 -1
  69. package/Materials/effectRenderer.js +1 -1
  70. package/Materials/effectRenderer.js.map +1 -1
  71. package/Materials/index.d.ts +4 -0
  72. package/Materials/index.js +5 -0
  73. package/Materials/index.js.map +1 -1
  74. package/Maths/math.scalar.d.ts +0 -1
  75. package/Maths/math.scalar.js +1 -2
  76. package/Maths/math.scalar.js.map +1 -1
  77. package/Meshes/Builders/greasedLineBuilder.js +2 -2
  78. package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
  79. package/Meshes/GaussianSplatting/gaussianSplattingMesh.d.ts +15 -2
  80. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +68 -20
  81. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  82. package/Meshes/Node/Blocks/geometryInputBlock.d.ts +4 -0
  83. package/Meshes/Node/Blocks/geometryInputBlock.js +8 -0
  84. package/Meshes/Node/Blocks/geometryInputBlock.js.map +1 -1
  85. package/Meshes/Node/nodeGeometryBlock.js +1 -0
  86. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  87. package/Meshes/Node/nodeGeometryBlockConnectionPoint.d.ts +2 -0
  88. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +3 -1
  89. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
  90. package/Meshes/abstractMesh.hotSpot.d.ts +8 -1
  91. package/Meshes/abstractMesh.hotSpot.js +17 -0
  92. package/Meshes/abstractMesh.hotSpot.js.map +1 -1
  93. package/Meshes/linesMesh.js +1 -1
  94. package/Meshes/linesMesh.js.map +1 -1
  95. package/Misc/deepMerger.d.ts +6 -0
  96. package/Misc/deepMerger.js +26 -0
  97. package/Misc/deepMerger.js.map +1 -0
  98. package/Misc/index.d.ts +1 -0
  99. package/Misc/index.js +1 -0
  100. package/Misc/index.js.map +1 -1
  101. package/Misc/virtualJoystick.js +2 -0
  102. package/Misc/virtualJoystick.js.map +1 -1
  103. package/Rendering/IBLShadows/iblShadowsRenderPipeline.d.ts +3 -23
  104. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +30 -67
  105. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  106. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +1 -1
  107. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +8 -4
  108. package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
  109. package/Rendering/boundingBoxRenderer.d.ts +63 -1
  110. package/Rendering/boundingBoxRenderer.js +224 -3
  111. package/Rendering/boundingBoxRenderer.js.map +1 -1
  112. package/Rendering/edgesRenderer.js +4 -1
  113. package/Rendering/edgesRenderer.js.map +1 -1
  114. package/Rendering/{IBLShadows/iblShadowsImportanceSamplingRenderer.d.ts → iblCdfGenerator.d.ts} +15 -12
  115. package/Rendering/{IBLShadows/iblShadowsImportanceSamplingRenderer.js → iblCdfGenerator.js} +37 -27
  116. package/Rendering/iblCdfGenerator.js.map +1 -0
  117. package/Rendering/iblCdfGeneratorSceneComponent.d.ts +59 -0
  118. package/Rendering/iblCdfGeneratorSceneComponent.js +83 -0
  119. package/Rendering/iblCdfGeneratorSceneComponent.js.map +1 -0
  120. package/Rendering/index.d.ts +12 -10
  121. package/Rendering/index.js +12 -10
  122. package/Rendering/index.js.map +1 -1
  123. package/Shaders/ShadersInclude/gaussianSplatting.js +72 -2
  124. package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
  125. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js +1 -1
  126. package/Shaders/ShadersInclude/gaussianSplattingVertexDeclaration.js.map +1 -1
  127. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +29 -4
  128. package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  129. package/Shaders/ShadersInclude/pbrBlockReflection.js +9 -1
  130. package/Shaders/ShadersInclude/pbrBlockReflection.js.map +1 -1
  131. package/Shaders/ShadersInclude/pbrBlockSubSurface.js +9 -1
  132. package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  133. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +3 -0
  134. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  135. package/Shaders/boundingBoxRenderer.vertex.js +7 -0
  136. package/Shaders/boundingBoxRenderer.vertex.js.map +1 -1
  137. package/Shaders/gaussianSplatting.vertex.js +16 -2
  138. package/Shaders/gaussianSplatting.vertex.js.map +1 -1
  139. package/Shaders/{iblShadowsCdfy.fragment.d.ts → iblCdfx.fragment.d.ts} +1 -1
  140. package/Shaders/{iblShadowsCdfx.fragment.js → iblCdfx.fragment.js} +3 -3
  141. package/Shaders/iblCdfx.fragment.js.map +1 -0
  142. package/Shaders/{iblShadowsCdfx.fragment.d.ts → iblCdfy.fragment.d.ts} +1 -1
  143. package/Shaders/{iblShadowsCdfy.fragment.js → iblCdfy.fragment.js} +3 -3
  144. package/Shaders/iblCdfy.fragment.js.map +1 -0
  145. package/Shaders/{iblShadowsIcdfx.fragment.d.ts → iblIcdfx.fragment.d.ts} +1 -1
  146. package/Shaders/{iblShadowsIcdfx.fragment.js → iblIcdfx.fragment.js} +3 -3
  147. package/Shaders/iblIcdfx.fragment.js.map +1 -0
  148. package/Shaders/{iblShadowsIcdfy.fragment.d.ts → iblIcdfy.fragment.d.ts} +1 -1
  149. package/Shaders/{iblShadowsIcdfy.fragment.js → iblIcdfy.fragment.js} +3 -3
  150. package/Shaders/iblIcdfy.fragment.js.map +1 -0
  151. package/Shaders/importanceSamplingDebug.fragment.d.ts +5 -0
  152. package/Shaders/{iblShadowsImportanceSamplingDebug.fragment.js → importanceSamplingDebug.fragment.js} +3 -3
  153. package/Shaders/importanceSamplingDebug.fragment.js.map +1 -0
  154. package/Shaders/pbr.fragment.js +8 -0
  155. package/Shaders/pbr.fragment.js.map +1 -1
  156. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +77 -1
  157. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
  158. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +28 -4
  159. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  160. package/ShadersWGSL/ShadersInclude/lightFragment.js +1 -1
  161. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  162. package/ShadersWGSL/ShadersInclude/oitFragment.js +1 -1
  163. package/ShadersWGSL/ShadersInclude/oitFragment.js.map +1 -1
  164. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js +14 -1
  165. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js.map +1 -1
  166. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js +14 -1
  167. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  168. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js +3 -0
  169. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  170. package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js +1 -1
  171. package/ShadersWGSL/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
  172. package/ShadersWGSL/boundingBoxRenderer.vertex.js +9 -1
  173. package/ShadersWGSL/boundingBoxRenderer.vertex.js.map +1 -1
  174. package/ShadersWGSL/gaussianSplatting.vertex.js +18 -2
  175. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  176. package/ShadersWGSL/greasedLine.fragment.d.ts +5 -0
  177. package/ShadersWGSL/greasedLine.fragment.js +25 -0
  178. package/ShadersWGSL/greasedLine.fragment.js.map +1 -0
  179. package/ShadersWGSL/greasedLine.vertex.d.ts +9 -0
  180. package/ShadersWGSL/greasedLine.vertex.js +43 -0
  181. package/ShadersWGSL/greasedLine.vertex.js.map +1 -0
  182. package/ShadersWGSL/iblCdfx.fragment.d.ts +5 -0
  183. package/ShadersWGSL/{iblShadowsCdfx.fragment.js → iblCdfx.fragment.js} +3 -3
  184. package/ShadersWGSL/iblCdfx.fragment.js.map +1 -0
  185. package/ShadersWGSL/iblCdfy.fragment.d.ts +5 -0
  186. package/ShadersWGSL/{iblShadowsCdfy.fragment.js → iblCdfy.fragment.js} +3 -3
  187. package/ShadersWGSL/iblCdfy.fragment.js.map +1 -0
  188. package/ShadersWGSL/iblIcdfx.fragment.d.ts +5 -0
  189. package/ShadersWGSL/{iblShadowsIcdfx.fragment.js → iblIcdfx.fragment.js} +3 -3
  190. package/ShadersWGSL/iblIcdfx.fragment.js.map +1 -0
  191. package/ShadersWGSL/iblIcdfy.fragment.d.ts +5 -0
  192. package/ShadersWGSL/{iblShadowsIcdfy.fragment.js → iblIcdfy.fragment.js} +3 -3
  193. package/ShadersWGSL/iblIcdfy.fragment.js.map +1 -0
  194. package/ShadersWGSL/importanceSamplingDebug.fragment.d.ts +5 -0
  195. package/ShadersWGSL/{iblShadowsImportanceSamplingDebug.fragment.js → importanceSamplingDebug.fragment.js} +3 -3
  196. package/ShadersWGSL/importanceSamplingDebug.fragment.js.map +1 -0
  197. package/ShadersWGSL/pbr.fragment.js +12 -0
  198. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  199. package/package.json +1 -1
  200. package/scene.d.ts +4 -0
  201. package/scene.js +6 -0
  202. package/scene.js.map +1 -1
  203. package/sceneComponent.d.ts +1 -1
  204. package/sceneComponent.js +1 -1
  205. package/sceneComponent.js.map +1 -1
  206. package/Rendering/IBLShadows/iblShadowsImportanceSamplingRenderer.js.map +0 -1
  207. package/Shaders/iblShadowsCdfx.fragment.js.map +0 -1
  208. package/Shaders/iblShadowsCdfy.fragment.js.map +0 -1
  209. package/Shaders/iblShadowsIcdfx.fragment.js.map +0 -1
  210. package/Shaders/iblShadowsIcdfy.fragment.js.map +0 -1
  211. package/Shaders/iblShadowsImportanceSamplingDebug.fragment.d.ts +0 -5
  212. package/Shaders/iblShadowsImportanceSamplingDebug.fragment.js.map +0 -1
  213. package/ShadersWGSL/iblShadowsCdfx.fragment.d.ts +0 -5
  214. package/ShadersWGSL/iblShadowsCdfx.fragment.js.map +0 -1
  215. package/ShadersWGSL/iblShadowsCdfy.fragment.d.ts +0 -5
  216. package/ShadersWGSL/iblShadowsCdfy.fragment.js.map +0 -1
  217. package/ShadersWGSL/iblShadowsIcdfx.fragment.d.ts +0 -5
  218. package/ShadersWGSL/iblShadowsIcdfx.fragment.js.map +0 -1
  219. package/ShadersWGSL/iblShadowsIcdfy.fragment.d.ts +0 -5
  220. package/ShadersWGSL/iblShadowsIcdfy.fragment.js.map +0 -1
  221. package/ShadersWGSL/iblShadowsImportanceSamplingDebug.fragment.d.ts +0 -5
  222. package/ShadersWGSL/iblShadowsImportanceSamplingDebug.fragment.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"greasedLineSimpleMaterial.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GreasedLine/greasedLineSimpleMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"../../scene\";\r\nimport { RawTexture } from \"../Textures/rawTexture\";\r\n\r\nimport { ShaderMaterial } from \"../shaderMaterial\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Color3 } from \"../../Maths/math.color\";\r\nimport { Vector2 } from \"../../Maths/math.vector\";\r\n\r\nimport \"../../Shaders/greasedLine.fragment\";\r\nimport \"../../Shaders/greasedLine.vertex\";\r\nimport type { GreasedLineMaterialOptions, IGreasedLineMaterial } from \"./greasedLineMaterialInterfaces\";\r\nimport { GreasedLineMeshColorDistributionType, GreasedLineMeshColorMode } from \"./greasedLineMaterialInterfaces\";\r\nimport { GreasedLineTools } from \"../../Misc/greasedLineTools\";\r\nimport { GreasedLineMaterialDefaults } from \"./greasedLineMaterialDefaults\";\r\n\r\n/**\r\n * GreasedLineSimpleMaterial\r\n */\r\nexport class GreasedLineSimpleMaterial extends ShaderMaterial implements IGreasedLineMaterial {\r\n private _visibility: number;\r\n private _width: number;\r\n private _useDash: boolean;\r\n private _dashCount: number;\r\n private _dashArray: number;\r\n private _dashRatio: number;\r\n private _dashOffset: number;\r\n private _useColors: boolean;\r\n private _color: Color3 = Color3.White();\r\n private _colors: Nullable<Color3[]>;\r\n private _colorsDistributionType: GreasedLineMeshColorDistributionType = GreasedLineMeshColorDistributionType.COLOR_DISTRIBUTION_TYPE_SEGMENT;\r\n private _colorMode: GreasedLineMeshColorMode;\r\n private _colorsSampling: number;\r\n private _resolution: Vector2;\r\n private _sizeAttenuation: boolean;\r\n private _colorsTexture: Nullable<RawTexture> = null;\r\n private _cameraFacing: boolean;\r\n\r\n /**\r\n * GreasedLineSimple material constructor\r\n * @param name material name\r\n * @param scene the scene\r\n * @param options material options\r\n */\r\n constructor(name: string, scene: Scene, options: GreasedLineMaterialOptions) {\r\n const defines = [\r\n `COLOR_DISTRIBUTION_TYPE_LINE ${GreasedLineMeshColorDistributionType.COLOR_DISTRIBUTION_TYPE_LINE}.`,\r\n `COLOR_DISTRIBUTION_TYPE_SEGMENT ${GreasedLineMeshColorDistributionType.COLOR_DISTRIBUTION_TYPE_SEGMENT}.`,\r\n `COLOR_MODE_SET ${GreasedLineMeshColorMode.COLOR_MODE_SET}.`,\r\n `COLOR_MODE_ADD ${GreasedLineMeshColorMode.COLOR_MODE_ADD}.`,\r\n `COLOR_MODE_MULTIPLY ${GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY}.`,\r\n ];\r\n const attributes = [\"position\", \"grl_widths\", \"grl_offsets\", \"grl_colorPointers\"];\r\n\r\n scene.useRightHandedSystem && defines.push(\"GREASED_LINE_RIGHT_HANDED_COORDINATE_SYSTEM\");\r\n\r\n if (options.cameraFacing) {\r\n defines.push(\"GREASED_LINE_CAMERA_FACING\");\r\n attributes.push(\"grl_previousAndSide\", \"grl_nextAndCounters\");\r\n } else {\r\n attributes.push(\"grl_slopes\");\r\n attributes.push(\"grl_counters\");\r\n }\r\n\r\n super(\r\n name,\r\n scene,\r\n {\r\n vertex: \"greasedLine\",\r\n fragment: \"greasedLine\",\r\n },\r\n {\r\n attributes,\r\n uniforms: [\r\n \"world\",\r\n \"viewProjection\",\r\n \"view\",\r\n \"projection\",\r\n \"grlColorsWidth\",\r\n \"grlUseColors\",\r\n \"grlWidth\",\r\n \"grlColor\",\r\n \"grl_colorModeAndColorDistributionType\",\r\n \"grlResolution\",\r\n \"grlAspect\",\r\n \"grlAizeAttenuation\",\r\n \"grlDashArray\",\r\n \"grlDashOffset\",\r\n \"grlDashRatio\",\r\n \"grlUseDash\",\r\n \"grlVisibility\",\r\n ],\r\n samplers: [\"grlColors\"],\r\n defines,\r\n }\r\n );\r\n options = options || {\r\n color: GreasedLineMaterialDefaults.DEFAULT_COLOR,\r\n };\r\n\r\n const engine = scene.getEngine();\r\n\r\n this.visibility = options.visibility ?? 1;\r\n this.useDash = options.useDash ?? false;\r\n this.dashRatio = options.dashRatio ?? 0.5;\r\n this.dashOffset = options.dashOffset ?? 0;\r\n this.dashCount = options.dashCount ?? 1; // calculate the _dashArray value, call the setter\r\n this.width = options.width\r\n ? options.width\r\n : options.sizeAttenuation && options.cameraFacing\r\n ? GreasedLineMaterialDefaults.DEFAULT_WIDTH_ATTENUATED\r\n : GreasedLineMaterialDefaults.DEFAULT_WIDTH;\r\n this.sizeAttenuation = options.sizeAttenuation ?? false;\r\n this.color = options.color ?? Color3.White();\r\n this.useColors = options.useColors ?? false;\r\n this.colorsDistributionType = options.colorDistributionType ?? GreasedLineMeshColorDistributionType.COLOR_DISTRIBUTION_TYPE_SEGMENT;\r\n this.colorsSampling = options.colorsSampling ?? RawTexture.NEAREST_NEAREST;\r\n this.colorMode = options.colorMode ?? GreasedLineMeshColorMode.COLOR_MODE_SET;\r\n this._colors = options.colors ?? null;\r\n this._cameraFacing = options.cameraFacing ?? true;\r\n this.resolution = options.resolution ?? new Vector2(engine.getRenderWidth(), engine.getRenderHeight()); // calculate aspect call the setter\r\n\r\n if (options.colorsTexture) {\r\n this.colorsTexture = options.colorsTexture;\r\n } else {\r\n this.colorsTexture = GreasedLineTools.PrepareEmptyColorsTexture(scene);\r\n }\r\n\r\n if (this._colors) {\r\n if (this.useColors) {\r\n this.colorsTexture = GreasedLineTools.CreateColorsTexture(`${this.name}-colors-texture`, this._colors, this.colorsSampling, scene);\r\n }\r\n }\r\n\r\n engine.onDisposeObservable.add(() => {\r\n GreasedLineTools.DisposeEmptyColorsTexture();\r\n });\r\n }\r\n\r\n /**\r\n * Disposes the plugin material.\r\n */\r\n public override dispose(): void {\r\n this._colorsTexture?.dispose();\r\n super.dispose();\r\n }\r\n\r\n private _setColorModeAndColorDistributionType() {\r\n this.setVector2(\"grl_colorModeAndColorDistributionType\", new Vector2(this._colorMode, this._colorsDistributionType));\r\n }\r\n\r\n /**\r\n * Updates the material. Use when material created in lazy mode.\r\n */\r\n public updateLazy() {\r\n if (this._colors) {\r\n this.setColors(this._colors, false, true);\r\n }\r\n }\r\n\r\n /**\r\n * Returns the colors used to colorize the line\r\n */\r\n get colors() {\r\n return this._colors;\r\n }\r\n\r\n /**\r\n * Sets the colors used to colorize the line\r\n */\r\n set colors(value: Nullable<Color3[]>) {\r\n this.setColors(value);\r\n }\r\n\r\n /**\r\n * Creates or updates the colors texture\r\n * @param colors color table RGBA\r\n * @param lazy if lazy, the colors are not updated\r\n * @param forceNewTexture force creation of a new texture\r\n */\r\n public setColors(colors: Nullable<Color3[]>, lazy = false, forceNewTexture = false): void {\r\n const origColorsCount = this._colors?.length ?? 0;\r\n\r\n this._colors = colors;\r\n\r\n if (colors === null || colors.length === 0) {\r\n this._colorsTexture?.dispose();\r\n return;\r\n }\r\n\r\n if (lazy && !forceNewTexture) {\r\n return;\r\n }\r\n\r\n if (this._colorsTexture && origColorsCount === colors.length && !forceNewTexture) {\r\n const colorArray = GreasedLineTools.Color3toRGBAUint8(colors);\r\n this._colorsTexture.update(colorArray);\r\n } else {\r\n this._colorsTexture?.dispose();\r\n this.colorsTexture = GreasedLineTools.CreateColorsTexture(`${this.name}-colors-texture`, colors, this.colorsSampling, this.getScene());\r\n }\r\n }\r\n\r\n /**\r\n * Gets the colors texture\r\n */\r\n get colorsTexture() {\r\n return (this._colorsTexture as RawTexture) ?? null;\r\n }\r\n\r\n /**\r\n * Sets the colorsTexture\r\n */\r\n set colorsTexture(value: RawTexture) {\r\n this._colorsTexture = value;\r\n this.setFloat(\"grlColorsWidth\", this._colorsTexture.getSize().width);\r\n this.setTexture(\"grlColors\", this._colorsTexture);\r\n }\r\n\r\n /**\r\n * Line base width. At each point the line width is calculated by widths[pointIndex] * width\r\n */\r\n get width() {\r\n return this._width;\r\n }\r\n\r\n /**\r\n * Line base width. At each point the line width is calculated by widths[pointIndex] * width\r\n */\r\n set width(value: number) {\r\n this._width = value;\r\n this.setFloat(\"grlWidth\", value);\r\n }\r\n\r\n /**\r\n * Whether to use the colors option to colorize the line\r\n */\r\n get useColors() {\r\n return this._useColors;\r\n }\r\n\r\n set useColors(value: boolean) {\r\n this._useColors = value;\r\n this.setFloat(\"grlUseColors\", GreasedLineTools.BooleanToNumber(value));\r\n }\r\n\r\n /**\r\n * The type of sampling of the colors texture. The values are the same when using with textures.\r\n */\r\n get colorsSampling() {\r\n return this._colorsSampling;\r\n }\r\n\r\n /**\r\n * The type of sampling of the colors texture. The values are the same when using with textures.\r\n */\r\n set colorsSampling(value: number) {\r\n this._colorsSampling = value;\r\n }\r\n\r\n /**\r\n * Normalized value of how much of the line will be visible\r\n * 0 - 0% of the line will be visible\r\n * 1 - 100% of the line will be visible\r\n */\r\n get visibility() {\r\n return this._visibility;\r\n }\r\n\r\n set visibility(value: number) {\r\n this._visibility = value;\r\n this.setFloat(\"grlVisibility\", value);\r\n }\r\n\r\n /**\r\n * Turns on/off dash mode\r\n */\r\n get useDash() {\r\n return this._useDash;\r\n }\r\n\r\n /**\r\n * Turns on/off dash mode\r\n */\r\n set useDash(value: boolean) {\r\n this._useDash = value;\r\n this.setFloat(\"grlUseDash\", GreasedLineTools.BooleanToNumber(value));\r\n }\r\n\r\n /**\r\n * Gets the dash offset\r\n */\r\n get dashOffset() {\r\n return this._dashOffset;\r\n }\r\n\r\n /**\r\n * Sets the dash offset\r\n */\r\n set dashOffset(value: number) {\r\n this._dashOffset = value;\r\n this.setFloat(\"grlDashOffset\", value);\r\n }\r\n\r\n /**\r\n * Length of the dash. 0 to 1. 0.5 means half empty, half drawn.\r\n */\r\n get dashRatio() {\r\n return this._dashRatio;\r\n }\r\n\r\n /**\r\n * Length of the dash. 0 to 1. 0.5 means half empty, half drawn.\r\n */\r\n set dashRatio(value: number) {\r\n this._dashRatio = value;\r\n this.setFloat(\"grlDashRatio\", value);\r\n }\r\n\r\n /**\r\n * Gets the number of dashes in the line\r\n */\r\n get dashCount() {\r\n return this._dashCount;\r\n }\r\n /**\r\n * Sets the number of dashes in the line\r\n * @param value dash\r\n */\r\n set dashCount(value: number) {\r\n this._dashCount = value;\r\n this._dashArray = 1 / value;\r\n this.setFloat(\"grlDashArray\", this._dashArray);\r\n }\r\n\r\n /**\r\n * False means 1 unit in width = 1 unit on scene, true means 1 unit in width is reduced on the screen to make better looking lines\r\n */\r\n get sizeAttenuation() {\r\n return this._sizeAttenuation;\r\n }\r\n\r\n /**\r\n * Turn on/off attenuation of the width option and widths array.\r\n * @param value false means 1 unit in width = 1 unit on scene, true means 1 unit in width is reduced on the screen to make better looking lines\r\n */\r\n set sizeAttenuation(value: boolean) {\r\n this._sizeAttenuation = value;\r\n this.setFloat(\"grlSizeAttenuation\", GreasedLineTools.BooleanToNumber(value));\r\n }\r\n\r\n /**\r\n * Gets the color of the line\r\n */\r\n get color() {\r\n return this._color;\r\n }\r\n\r\n /**\r\n * Sets the color of the line\r\n * @param value Color3\r\n */\r\n set color(value: Color3) {\r\n this.setColor(value);\r\n }\r\n\r\n /**\r\n * Sets the color of the line. If set the whole line will be mixed with this color according to the colorMode option.\r\n * The simple material always needs a color to be set. If you set it to null it will set the color to the default color (GreasedLineSimpleMaterial.DEFAULT_COLOR).\r\n * @param value color\r\n */\r\n public setColor(value: Nullable<Color3>) {\r\n value = value ?? GreasedLineMaterialDefaults.DEFAULT_COLOR;\r\n this._color = value;\r\n this.setColor3(\"grlColor\", value);\r\n }\r\n\r\n /**\r\n * Gets the color distributiopn type\r\n */\r\n get colorsDistributionType() {\r\n return this._colorsDistributionType;\r\n }\r\n\r\n /**\r\n * Sets the color distribution type\r\n * @see GreasedLineMeshColorDistributionType\r\n * @param value color distribution type\r\n */\r\n set colorsDistributionType(value: GreasedLineMeshColorDistributionType) {\r\n this._colorsDistributionType = value;\r\n this._setColorModeAndColorDistributionType();\r\n }\r\n\r\n /**\r\n * Gets the mixing mode of the color and colors paramaters. Default value is GreasedLineMeshColorMode.SET.\r\n * MATERIAL_TYPE_SIMPLE mixes the color and colors of the greased line material.\r\n * @see GreasedLineMeshColorMode\r\n */\r\n get colorMode() {\r\n return this._colorMode;\r\n }\r\n\r\n /**\r\n * Sets the mixing mode of the color and colors paramaters. Default value is GreasedLineMeshColorMode.SET.\r\n * MATERIAL_TYPE_SIMPLE mixes the color and colors of the greased line material.\r\n * @see GreasedLineMeshColorMode\r\n */\r\n set colorMode(value: GreasedLineMeshColorMode) {\r\n this._colorMode = value;\r\n this._setColorModeAndColorDistributionType();\r\n }\r\n\r\n /**\r\n * Gets the resolution\r\n */\r\n get resolution() {\r\n return this._resolution;\r\n }\r\n\r\n /**\r\n * Sets the resolution\r\n * @param value resolution of the screen for GreasedLine\r\n */\r\n set resolution(value: Vector2) {\r\n this._resolution = value;\r\n this.setVector2(\"grlResolution\", value);\r\n this.setFloat(\"grlAspect\", value.x / value.y);\r\n }\r\n\r\n /**\r\n * Serializes this plugin material\r\n * @returns serializationObjec\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n const greasedLineMaterialOptions: GreasedLineMaterialOptions = {\r\n colorDistributionType: this._colorsDistributionType,\r\n colorsSampling: this._colorsSampling,\r\n colorMode: this._colorMode,\r\n color: this._color,\r\n dashCount: this._dashCount,\r\n dashOffset: this._dashOffset,\r\n dashRatio: this._dashRatio,\r\n resolution: this._resolution,\r\n sizeAttenuation: this._sizeAttenuation,\r\n useColors: this._useColors,\r\n useDash: this._useDash,\r\n visibility: this._visibility,\r\n width: this._width,\r\n cameraFacing: this._cameraFacing,\r\n };\r\n\r\n this._colors && (greasedLineMaterialOptions.colors = this._colors);\r\n\r\n serializationObject.greasedLineMaterialOptions = greasedLineMaterialOptions;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Parses a serialized objects\r\n * @param source serialized object\r\n * @param scene scene\r\n * @param _rootUrl root url for textures\r\n */\r\n public parse(source: any, scene: Scene, _rootUrl: string): void {\r\n // TODO: super.parse?\r\n const greasedLineMaterialOptions = <GreasedLineMaterialOptions>source.greasedLineMaterialOptions;\r\n\r\n this._colorsTexture?.dispose();\r\n\r\n greasedLineMaterialOptions.color && (this.color = greasedLineMaterialOptions.color);\r\n greasedLineMaterialOptions.colorDistributionType && (this.colorsDistributionType = greasedLineMaterialOptions.colorDistributionType);\r\n greasedLineMaterialOptions.colorsSampling && (this.colorsSampling = greasedLineMaterialOptions.colorsSampling);\r\n greasedLineMaterialOptions.colorMode && (this.colorMode = greasedLineMaterialOptions.colorMode);\r\n greasedLineMaterialOptions.useColors && (this.useColors = greasedLineMaterialOptions.useColors);\r\n greasedLineMaterialOptions.visibility && (this.visibility = greasedLineMaterialOptions.visibility);\r\n greasedLineMaterialOptions.useDash && (this.useDash = greasedLineMaterialOptions.useDash);\r\n greasedLineMaterialOptions.dashCount && (this.dashCount = greasedLineMaterialOptions.dashCount);\r\n greasedLineMaterialOptions.dashRatio && (this.dashRatio = greasedLineMaterialOptions.dashRatio);\r\n greasedLineMaterialOptions.dashOffset && (this.dashOffset = greasedLineMaterialOptions.dashOffset);\r\n greasedLineMaterialOptions.width && (this.width = greasedLineMaterialOptions.width);\r\n greasedLineMaterialOptions.sizeAttenuation && (this.sizeAttenuation = greasedLineMaterialOptions.sizeAttenuation);\r\n greasedLineMaterialOptions.resolution && (this.resolution = greasedLineMaterialOptions.resolution);\r\n\r\n if (greasedLineMaterialOptions.colors) {\r\n this.colorsTexture = GreasedLineTools.CreateColorsTexture(`${this.name}-colors-texture`, greasedLineMaterialOptions.colors, this.colorsSampling, this.getScene());\r\n } else {\r\n this.colorsTexture = GreasedLineTools.PrepareEmptyColorsTexture(scene);\r\n }\r\n\r\n this._cameraFacing = greasedLineMaterialOptions.cameraFacing ?? true;\r\n this.setDefine(\"GREASED_LINE_CAMERA_FACING\", this._cameraFacing);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"greasedLineSimpleMaterial.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/GreasedLine/greasedLineSimpleMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"../../scene\";\r\nimport { RawTexture } from \"../Textures/rawTexture\";\r\nimport { ShaderMaterial } from \"../shaderMaterial\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Color3 } from \"../../Maths/math.color\";\r\nimport { Vector2 } from \"../../Maths/math.vector\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { TextureSampler } from \"../Textures/textureSampler\";\r\n\r\nimport type { GreasedLineMaterialOptions, IGreasedLineMaterial } from \"./greasedLineMaterialInterfaces\";\r\nimport { GreasedLineMeshColorDistributionType, GreasedLineMeshColorMode } from \"./greasedLineMaterialInterfaces\";\r\nimport { GreasedLineTools } from \"../../Misc/greasedLineTools\";\r\nimport { GreasedLineMaterialDefaults } from \"./greasedLineMaterialDefaults\";\r\n\r\n/**\r\n * GreasedLineSimpleMaterial\r\n */\r\nexport class GreasedLineSimpleMaterial extends ShaderMaterial implements IGreasedLineMaterial {\r\n /**\r\n * Force to use GLSL in WebGPU\r\n */\r\n public static ForceGLSL = false;\r\n\r\n private _visibility: number;\r\n private _width: number;\r\n private _useDash: boolean;\r\n private _dashCount: number;\r\n private _dashArray: number;\r\n private _dashRatio: number;\r\n private _dashOffset: number;\r\n private _useColors: boolean;\r\n private _color: Color3 = Color3.White();\r\n private _colors: Nullable<Color3[]>;\r\n private _colorsDistributionType: GreasedLineMeshColorDistributionType = GreasedLineMeshColorDistributionType.COLOR_DISTRIBUTION_TYPE_SEGMENT;\r\n private _colorMode: GreasedLineMeshColorMode;\r\n private _colorsSampling: number;\r\n private _resolution: Vector2;\r\n private _sizeAttenuation: boolean;\r\n private _colorsTexture: Nullable<RawTexture> = null;\r\n private _cameraFacing: boolean;\r\n\r\n /**\r\n * GreasedLineSimple material constructor\r\n * @param name material name\r\n * @param scene the scene\r\n * @param options material options\r\n */\r\n constructor(name: string, scene: Scene, options: GreasedLineMaterialOptions) {\r\n const engine = scene.getEngine();\r\n const isWGSL = engine.isWebGPU && !(options.forceGLSL || GreasedLineSimpleMaterial.ForceGLSL);\r\n\r\n const defines = [\r\n `COLOR_DISTRIBUTION_TYPE_LINE ${GreasedLineMeshColorDistributionType.COLOR_DISTRIBUTION_TYPE_LINE}.`,\r\n `COLOR_DISTRIBUTION_TYPE_SEGMENT ${GreasedLineMeshColorDistributionType.COLOR_DISTRIBUTION_TYPE_SEGMENT}.`,\r\n `COLOR_MODE_SET ${GreasedLineMeshColorMode.COLOR_MODE_SET}.`,\r\n `COLOR_MODE_ADD ${GreasedLineMeshColorMode.COLOR_MODE_ADD}.`,\r\n `COLOR_MODE_MULTIPLY ${GreasedLineMeshColorMode.COLOR_MODE_MULTIPLY}.`,\r\n ];\r\n scene.useRightHandedSystem && defines.push(\"GREASED_LINE_RIGHT_HANDED_COORDINATE_SYSTEM\");\r\n\r\n const attributes = [\"position\", \"grl_widths\", \"grl_offsets\", \"grl_colorPointers\"];\r\n\r\n if (options.cameraFacing) {\r\n defines.push(\"GREASED_LINE_CAMERA_FACING\");\r\n attributes.push(\"grl_previousAndSide\", \"grl_nextAndCounters\");\r\n } else {\r\n attributes.push(\"grl_slopes\");\r\n attributes.push(\"grl_counters\");\r\n }\r\n\r\n const uniforms = [\r\n \"grlColorsWidth\",\r\n \"grlUseColors\",\r\n \"grlWidth\",\r\n \"grlColor\",\r\n \"grl_colorModeAndColorDistributionType\",\r\n \"grlResolution\",\r\n \"grlAspect\",\r\n \"grlAizeAttenuation\",\r\n \"grlDashArray\",\r\n \"grlDashOffset\",\r\n \"grlDashRatio\",\r\n \"grlUseDash\",\r\n \"grlVisibility\",\r\n \"grlColors\",\r\n ];\r\n\r\n if (!isWGSL) {\r\n uniforms.push(\"world\", \"viewProjection\", \"view\", \"projection\");\r\n }\r\n\r\n super(\r\n name,\r\n scene,\r\n {\r\n vertex: \"greasedLine\",\r\n fragment: \"greasedLine\",\r\n },\r\n {\r\n uniformBuffers: isWGSL ? [\"Scene\", \"Mesh\"] : undefined,\r\n attributes,\r\n uniforms,\r\n samplers: isWGSL ? [] : [\"grlColors\"],\r\n defines,\r\n extraInitializationsAsync: async () => {\r\n if (isWGSL) {\r\n await Promise.all([import(\"../../ShadersWGSL/greasedLine.vertex\"), import(\"../../ShadersWGSL/greasedLine.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../../Shaders/greasedLine.vertex\"), import(\"../../Shaders/greasedLine.fragment\")]);\r\n }\r\n },\r\n shaderLanguage: isWGSL ? ShaderLanguage.WGSL : ShaderLanguage.GLSL,\r\n }\r\n );\r\n\r\n options = options || {\r\n color: GreasedLineMaterialDefaults.DEFAULT_COLOR,\r\n };\r\n\r\n this.visibility = options.visibility ?? 1;\r\n this.useDash = options.useDash ?? false;\r\n this.dashRatio = options.dashRatio ?? 0.5;\r\n this.dashOffset = options.dashOffset ?? 0;\r\n this.dashCount = options.dashCount ?? 1; // calculate the _dashArray value, call the setter\r\n this.width = options.width\r\n ? options.width\r\n : options.sizeAttenuation && options.cameraFacing\r\n ? GreasedLineMaterialDefaults.DEFAULT_WIDTH_ATTENUATED\r\n : GreasedLineMaterialDefaults.DEFAULT_WIDTH;\r\n this.sizeAttenuation = options.sizeAttenuation ?? false;\r\n this.color = options.color ?? Color3.White();\r\n this.useColors = options.useColors ?? false;\r\n this.colorsDistributionType = options.colorDistributionType ?? GreasedLineMeshColorDistributionType.COLOR_DISTRIBUTION_TYPE_SEGMENT;\r\n this.colorsSampling = options.colorsSampling ?? RawTexture.NEAREST_NEAREST;\r\n this.colorMode = options.colorMode ?? GreasedLineMeshColorMode.COLOR_MODE_SET;\r\n this._colors = options.colors ?? null;\r\n this._cameraFacing = options.cameraFacing ?? true;\r\n this.resolution = options.resolution ?? new Vector2(engine.getRenderWidth(), engine.getRenderHeight()); // calculate aspect call the setter\r\n\r\n if (options.colorsTexture) {\r\n this.colorsTexture = options.colorsTexture;\r\n } else {\r\n this.colorsTexture = GreasedLineTools.PrepareEmptyColorsTexture(scene);\r\n }\r\n\r\n if (this._colors) {\r\n if (this.useColors) {\r\n this.colorsTexture = GreasedLineTools.CreateColorsTexture(`${this.name}-colors-texture`, this._colors, this.colorsSampling, scene);\r\n }\r\n }\r\n\r\n if (isWGSL) {\r\n const sampler = new TextureSampler();\r\n sampler.setParameters(); // use the default values\r\n sampler.samplingMode = this.colorsSampling;\r\n this.setTextureSampler(\"grlColorsSampler\", sampler);\r\n }\r\n\r\n engine.onDisposeObservable.add(() => {\r\n GreasedLineTools.DisposeEmptyColorsTexture();\r\n });\r\n }\r\n\r\n /**\r\n * Disposes the plugin material.\r\n */\r\n public override dispose(): void {\r\n this._colorsTexture?.dispose();\r\n super.dispose();\r\n }\r\n\r\n private _setColorModeAndColorDistributionType() {\r\n this.setVector2(\"grl_colorModeAndColorDistributionType\", new Vector2(this._colorMode, this._colorsDistributionType));\r\n }\r\n\r\n /**\r\n * Updates the material. Use when material created in lazy mode.\r\n */\r\n public updateLazy() {\r\n if (this._colors) {\r\n this.setColors(this._colors, false, true);\r\n }\r\n }\r\n\r\n /**\r\n * Returns the colors used to colorize the line\r\n */\r\n get colors() {\r\n return this._colors;\r\n }\r\n\r\n /**\r\n * Sets the colors used to colorize the line\r\n */\r\n set colors(value: Nullable<Color3[]>) {\r\n this.setColors(value);\r\n }\r\n\r\n /**\r\n * Creates or updates the colors texture\r\n * @param colors color table RGBA\r\n * @param lazy if lazy, the colors are not updated\r\n * @param forceNewTexture force creation of a new texture\r\n */\r\n public setColors(colors: Nullable<Color3[]>, lazy = false, forceNewTexture = false): void {\r\n const origColorsCount = this._colors?.length ?? 0;\r\n\r\n this._colors = colors;\r\n\r\n if (colors === null || colors.length === 0) {\r\n this._colorsTexture?.dispose();\r\n return;\r\n }\r\n\r\n if (lazy && !forceNewTexture) {\r\n return;\r\n }\r\n\r\n if (this._colorsTexture && origColorsCount === colors.length && !forceNewTexture) {\r\n const colorArray = GreasedLineTools.Color3toRGBAUint8(colors);\r\n this._colorsTexture.update(colorArray);\r\n } else {\r\n this._colorsTexture?.dispose();\r\n this.colorsTexture = GreasedLineTools.CreateColorsTexture(`${this.name}-colors-texture`, colors, this.colorsSampling, this.getScene());\r\n }\r\n }\r\n\r\n /**\r\n * Gets the colors texture\r\n */\r\n get colorsTexture() {\r\n return (this._colorsTexture as RawTexture) ?? null;\r\n }\r\n\r\n /**\r\n * Sets the colorsTexture\r\n */\r\n set colorsTexture(value: RawTexture) {\r\n this._colorsTexture = value;\r\n this.setFloat(\"grlColorsWidth\", this._colorsTexture.getSize().width);\r\n this.setTexture(\"grlColors\", this._colorsTexture);\r\n }\r\n\r\n /**\r\n * Line base width. At each point the line width is calculated by widths[pointIndex] * width\r\n */\r\n get width() {\r\n return this._width;\r\n }\r\n\r\n /**\r\n * Line base width. At each point the line width is calculated by widths[pointIndex] * width\r\n */\r\n set width(value: number) {\r\n this._width = value;\r\n this.setFloat(\"grlWidth\", value);\r\n }\r\n\r\n /**\r\n * Whether to use the colors option to colorize the line\r\n */\r\n get useColors() {\r\n return this._useColors;\r\n }\r\n\r\n set useColors(value: boolean) {\r\n this._useColors = value;\r\n this.setFloat(\"grlUseColors\", GreasedLineTools.BooleanToNumber(value));\r\n }\r\n\r\n /**\r\n * The type of sampling of the colors texture. The values are the same when using with textures.\r\n */\r\n get colorsSampling() {\r\n return this._colorsSampling;\r\n }\r\n\r\n /**\r\n * The type of sampling of the colors texture. The values are the same when using with textures.\r\n */\r\n set colorsSampling(value: number) {\r\n this._colorsSampling = value;\r\n }\r\n\r\n /**\r\n * Normalized value of how much of the line will be visible\r\n * 0 - 0% of the line will be visible\r\n * 1 - 100% of the line will be visible\r\n */\r\n get visibility() {\r\n return this._visibility;\r\n }\r\n\r\n set visibility(value: number) {\r\n this._visibility = value;\r\n this.setFloat(\"grlVisibility\", value);\r\n }\r\n\r\n /**\r\n * Turns on/off dash mode\r\n */\r\n get useDash() {\r\n return this._useDash;\r\n }\r\n\r\n /**\r\n * Turns on/off dash mode\r\n */\r\n set useDash(value: boolean) {\r\n this._useDash = value;\r\n this.setFloat(\"grlUseDash\", GreasedLineTools.BooleanToNumber(value));\r\n }\r\n\r\n /**\r\n * Gets the dash offset\r\n */\r\n get dashOffset() {\r\n return this._dashOffset;\r\n }\r\n\r\n /**\r\n * Sets the dash offset\r\n */\r\n set dashOffset(value: number) {\r\n this._dashOffset = value;\r\n this.setFloat(\"grlDashOffset\", value);\r\n }\r\n\r\n /**\r\n * Length of the dash. 0 to 1. 0.5 means half empty, half drawn.\r\n */\r\n get dashRatio() {\r\n return this._dashRatio;\r\n }\r\n\r\n /**\r\n * Length of the dash. 0 to 1. 0.5 means half empty, half drawn.\r\n */\r\n set dashRatio(value: number) {\r\n this._dashRatio = value;\r\n this.setFloat(\"grlDashRatio\", value);\r\n }\r\n\r\n /**\r\n * Gets the number of dashes in the line\r\n */\r\n get dashCount() {\r\n return this._dashCount;\r\n }\r\n /**\r\n * Sets the number of dashes in the line\r\n * @param value dash\r\n */\r\n set dashCount(value: number) {\r\n this._dashCount = value;\r\n this._dashArray = 1 / value;\r\n this.setFloat(\"grlDashArray\", this._dashArray);\r\n }\r\n\r\n /**\r\n * False means 1 unit in width = 1 unit on scene, true means 1 unit in width is reduced on the screen to make better looking lines\r\n */\r\n get sizeAttenuation() {\r\n return this._sizeAttenuation;\r\n }\r\n\r\n /**\r\n * Turn on/off attenuation of the width option and widths array.\r\n * @param value false means 1 unit in width = 1 unit on scene, true means 1 unit in width is reduced on the screen to make better looking lines\r\n */\r\n set sizeAttenuation(value: boolean) {\r\n this._sizeAttenuation = value;\r\n this.setFloat(\"grlSizeAttenuation\", GreasedLineTools.BooleanToNumber(value));\r\n }\r\n\r\n /**\r\n * Gets the color of the line\r\n */\r\n get color() {\r\n return this._color;\r\n }\r\n\r\n /**\r\n * Sets the color of the line\r\n * @param value Color3\r\n */\r\n set color(value: Color3) {\r\n this.setColor(value);\r\n }\r\n\r\n /**\r\n * Sets the color of the line. If set the whole line will be mixed with this color according to the colorMode option.\r\n * The simple material always needs a color to be set. If you set it to null it will set the color to the default color (GreasedLineSimpleMaterial.DEFAULT_COLOR).\r\n * @param value color\r\n */\r\n public setColor(value: Nullable<Color3>) {\r\n value = value ?? GreasedLineMaterialDefaults.DEFAULT_COLOR;\r\n this._color = value;\r\n this.setColor3(\"grlColor\", value);\r\n }\r\n\r\n /**\r\n * Gets the color distributiopn type\r\n */\r\n get colorsDistributionType() {\r\n return this._colorsDistributionType;\r\n }\r\n\r\n /**\r\n * Sets the color distribution type\r\n * @see GreasedLineMeshColorDistributionType\r\n * @param value color distribution type\r\n */\r\n set colorsDistributionType(value: GreasedLineMeshColorDistributionType) {\r\n this._colorsDistributionType = value;\r\n this._setColorModeAndColorDistributionType();\r\n }\r\n\r\n /**\r\n * Gets the mixing mode of the color and colors paramaters. Default value is GreasedLineMeshColorMode.SET.\r\n * MATERIAL_TYPE_SIMPLE mixes the color and colors of the greased line material.\r\n * @see GreasedLineMeshColorMode\r\n */\r\n get colorMode() {\r\n return this._colorMode;\r\n }\r\n\r\n /**\r\n * Sets the mixing mode of the color and colors paramaters. Default value is GreasedLineMeshColorMode.SET.\r\n * MATERIAL_TYPE_SIMPLE mixes the color and colors of the greased line material.\r\n * @see GreasedLineMeshColorMode\r\n */\r\n set colorMode(value: GreasedLineMeshColorMode) {\r\n this._colorMode = value;\r\n this._setColorModeAndColorDistributionType();\r\n }\r\n\r\n /**\r\n * Gets the resolution\r\n */\r\n get resolution() {\r\n return this._resolution;\r\n }\r\n\r\n /**\r\n * Sets the resolution\r\n * @param value resolution of the screen for GreasedLine\r\n */\r\n set resolution(value: Vector2) {\r\n this._resolution = value;\r\n this.setVector2(\"grlResolution\", value);\r\n this.setFloat(\"grlAspect\", value.x / value.y);\r\n }\r\n\r\n /**\r\n * Serializes this plugin material\r\n * @returns serializationObjec\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n const greasedLineMaterialOptions: GreasedLineMaterialOptions = {\r\n colorDistributionType: this._colorsDistributionType,\r\n colorsSampling: this._colorsSampling,\r\n colorMode: this._colorMode,\r\n color: this._color,\r\n dashCount: this._dashCount,\r\n dashOffset: this._dashOffset,\r\n dashRatio: this._dashRatio,\r\n resolution: this._resolution,\r\n sizeAttenuation: this._sizeAttenuation,\r\n useColors: this._useColors,\r\n useDash: this._useDash,\r\n visibility: this._visibility,\r\n width: this._width,\r\n cameraFacing: this._cameraFacing,\r\n };\r\n\r\n this._colors && (greasedLineMaterialOptions.colors = this._colors);\r\n\r\n serializationObject.greasedLineMaterialOptions = greasedLineMaterialOptions;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Parses a serialized objects\r\n * @param source serialized object\r\n * @param scene scene\r\n * @param _rootUrl root url for textures\r\n */\r\n public parse(source: any, scene: Scene, _rootUrl: string): void {\r\n const greasedLineMaterialOptions = <GreasedLineMaterialOptions>source.greasedLineMaterialOptions;\r\n\r\n this._colorsTexture?.dispose();\r\n\r\n greasedLineMaterialOptions.color && (this.color = greasedLineMaterialOptions.color);\r\n greasedLineMaterialOptions.colorDistributionType && (this.colorsDistributionType = greasedLineMaterialOptions.colorDistributionType);\r\n greasedLineMaterialOptions.colorsSampling && (this.colorsSampling = greasedLineMaterialOptions.colorsSampling);\r\n greasedLineMaterialOptions.colorMode && (this.colorMode = greasedLineMaterialOptions.colorMode);\r\n greasedLineMaterialOptions.useColors && (this.useColors = greasedLineMaterialOptions.useColors);\r\n greasedLineMaterialOptions.visibility && (this.visibility = greasedLineMaterialOptions.visibility);\r\n greasedLineMaterialOptions.useDash && (this.useDash = greasedLineMaterialOptions.useDash);\r\n greasedLineMaterialOptions.dashCount && (this.dashCount = greasedLineMaterialOptions.dashCount);\r\n greasedLineMaterialOptions.dashRatio && (this.dashRatio = greasedLineMaterialOptions.dashRatio);\r\n greasedLineMaterialOptions.dashOffset && (this.dashOffset = greasedLineMaterialOptions.dashOffset);\r\n greasedLineMaterialOptions.width && (this.width = greasedLineMaterialOptions.width);\r\n greasedLineMaterialOptions.sizeAttenuation && (this.sizeAttenuation = greasedLineMaterialOptions.sizeAttenuation);\r\n greasedLineMaterialOptions.resolution && (this.resolution = greasedLineMaterialOptions.resolution);\r\n\r\n if (greasedLineMaterialOptions.colors) {\r\n this.colorsTexture = GreasedLineTools.CreateColorsTexture(`${this.name}-colors-texture`, greasedLineMaterialOptions.colors, this.colorsSampling, this.getScene());\r\n } else {\r\n this.colorsTexture = GreasedLineTools.PrepareEmptyColorsTexture(scene);\r\n }\r\n\r\n this._cameraFacing = greasedLineMaterialOptions.cameraFacing ?? true;\r\n this.setDefine(\"GREASED_LINE_CAMERA_FACING\", this._cameraFacing);\r\n }\r\n}\r\n"]}
@@ -338,6 +338,12 @@ export class ReflectionBlock extends ReflectionTextureBaseBlock {
338
338
  #endif
339
339
  #ifdef REALTIME_FILTERING
340
340
  , ${this._vReflectionFilteringInfoName}
341
+ #ifdef IBL_CDF_FILTERING
342
+ , icdfxSampler // ** not handled **
343
+ ${isWebGPU ? `, icdfxSamplerSampler` : ""}
344
+ , icdfySampler // ** not handled **
345
+ ${isWebGPU ? `, icdfySamplerSampler` : ""}
346
+ #endif
341
347
  #endif
342
348
  );
343
349
  #endif\n`;
@@ -1 +1 @@
1
- {"version":3,"file":"reflectionBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/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 \"../../../../Decorators/nodeDecorator\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\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\", { embedded: true, 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\", { embedded: true, notifiers: { update: true } })\r\n public forceIrradianceInFragment: boolean = false;\r\n\r\n protected override _onGenerateOnlyFragmentCodeChanged(): boolean {\r\n if (this.position.isConnected) {\r\n this.generateOnlyFragmentCode = !this.generateOnlyFragmentCode;\r\n Logger.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 override _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(\r\n NodeMaterialBlockConnectionPointTypes.Color3 | 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 override 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 override _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 override 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 override 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, Math.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 override handleVertexSide(state: NodeMaterialBuildState): string {\r\n let code = super.handleVertexSide(state);\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\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(\r\n this._vEnvironmentIrradianceName,\r\n NodeMaterialBlockConnectionPointTypes.Vector3,\r\n \"defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)\"\r\n );\r\n\r\n state._emitUniformFromString(\"vSphericalL00\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL1_1\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL10\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL11\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL2_2\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL2_1\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL20\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL21\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL22\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n\r\n state._emitUniformFromString(\"vSphericalX\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalY\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalXX_ZZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalYY_ZZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalZZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalXY\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalYZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalZX\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n\r\n code += `#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)\r\n ${state._declareLocalVar(reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = (${(isWebGPU ? \"uniforms.\" : \"\") + this._reflectionMatrixName} * vec4${state.fSuffix}(normalize(${this.worldNormal.associatedVariableName}).xyz, 0)).xyz;\r\n #ifdef ${this._defineOppositeZ}\r\n ${reflectionVectorName}.z *= -1.0;\r\n #endif\r\n ${isWebGPU ? \"vertexOutputs.\" : \"\"}${this._vEnvironmentIrradianceName} = computeEnvironmentIrradiance(${reflectionVectorName});\r\n #endif\\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 const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\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 if (!isWebGPU) {\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\\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\\n`,\r\n `//${this.name}`\r\n );\r\n }\r\n\r\n const computeReflectionCoordsFunc = isWebGPU\r\n ? `\r\n fn computeReflectionCoordsPBR(worldPos: vec4f, worldNormal: vec3f) -> vec3f {\r\n ${this.handleFragmentSideCodeReflectionCoords(state, \"worldNormal\", \"worldPos\", true, true)}\r\n return ${this._reflectionVectorName};\r\n }\\n`\r\n : `\r\n vec3 computeReflectionCoordsPBR(vec4 worldPos, vec3 worldNormal) {\r\n ${this.handleFragmentSideCodeReflectionCoords(state, \"worldNormal\", \"worldPos\", true, true)}\r\n return ${this._reflectionVectorName};\r\n }\\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, NodeMaterialBlockConnectionPointTypes.Vector3);\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, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n code += `#ifdef REFLECTION\r\n ${state._declareLocalVar(this._vReflectionInfosName, NodeMaterialBlockConnectionPointTypes.Vector2)} = vec2${state.fSuffix}(1., 0.);\r\n\r\n ${isWebGPU ? \"var reflectionOut: reflectionOutParams\" : \"reflectionOutParams reflectionOut\"};\r\n\r\n reflectionOut = reflectionBlock(\r\n ${this.generateOnlyFragmentCode ? this._worldPositionNameInFragmentOnlyMode : (isWebGPU ? \"input.\" : \"\") + \"v_\" + this.worldPosition.associatedVariableName}.xyz\r\n , ${normalVarName}\r\n , alphaG\r\n , ${(isWebGPU ? \"uniforms.\" : \"\") + 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 ${isWebGPU ? `, ${this._cubeSamplerName}Sampler` : \"\"}\r\n #else\r\n , ${this._2DSamplerName}\r\n ${isWebGPU ? `, ${this._2DSamplerName}Sampler` : \"\"}\r\n #endif\r\n #if defined(NORMAL) && defined(USESPHERICALINVERTEX)\r\n , ${isWebGPU ? \"input.\" : \"\"}${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 ${isWebGPU ? `, irradianceSamplerSampler` : \"\"}\r\n #endif\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${this._define3DName}\r\n , ${this._cubeSamplerName}\r\n ${isWebGPU ? `, ${this._cubeSamplerName}Sampler` : \"\"}\r\n , ${this._cubeSamplerName}\r\n ${isWebGPU ? `, ${this._cubeSamplerName}Sampler` : \"\"}\r\n #else\r\n , ${this._2DSamplerName}\r\n ${isWebGPU ? `, ${this._2DSamplerName}Sampler` : \"\"}\r\n , ${this._2DSamplerName} \r\n ${isWebGPU ? `, ${this._2DSamplerName}Sampler` : \"\"}\r\n #endif\r\n #endif\r\n #ifdef REALTIME_FILTERING\r\n , ${this._vReflectionFilteringInfoName}\r\n #endif\r\n );\r\n #endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n this._scene = state.sharedData.scene;\r\n\r\n 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 override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (this.texture) {\r\n codeString += `${this._codeVariableName}.texture.gammaSpace = ${this.texture.gammaSpace};\\n`;\r\n }\r\n codeString += `${this._codeVariableName}.useSphericalHarmonics = ${this.useSphericalHarmonics};\\n`;\r\n codeString += `${this._codeVariableName}.forceIrradianceInFragment = ${this.forceIrradianceInFragment};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.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 override _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":["../../../../../../../dev/core/src/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 \"../../../../Decorators/nodeDecorator\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\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\", { embedded: true, 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\", { embedded: true, notifiers: { update: true } })\r\n public forceIrradianceInFragment: boolean = false;\r\n\r\n protected override _onGenerateOnlyFragmentCodeChanged(): boolean {\r\n if (this.position.isConnected) {\r\n this.generateOnlyFragmentCode = !this.generateOnlyFragmentCode;\r\n Logger.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 override _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(\r\n NodeMaterialBlockConnectionPointTypes.Color3 | 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 override 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 override _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 override 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 override 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, Math.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 override handleVertexSide(state: NodeMaterialBuildState): string {\r\n let code = super.handleVertexSide(state);\r\n const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\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(\r\n this._vEnvironmentIrradianceName,\r\n NodeMaterialBlockConnectionPointTypes.Vector3,\r\n \"defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)\"\r\n );\r\n\r\n state._emitUniformFromString(\"vSphericalL00\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL1_1\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL10\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL11\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL2_2\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL2_1\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL20\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL21\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n state._emitUniformFromString(\"vSphericalL22\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\");\r\n\r\n state._emitUniformFromString(\"vSphericalX\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalY\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalXX_ZZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalYY_ZZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalZZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalXY\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalYZ\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n state._emitUniformFromString(\"vSphericalZX\", NodeMaterialBlockConnectionPointTypes.Vector3, \"SPHERICAL_HARMONICS\", true);\r\n\r\n code += `#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)\r\n ${state._declareLocalVar(reflectionVectorName, NodeMaterialBlockConnectionPointTypes.Vector3)} = (${(isWebGPU ? \"uniforms.\" : \"\") + this._reflectionMatrixName} * vec4${state.fSuffix}(normalize(${this.worldNormal.associatedVariableName}).xyz, 0)).xyz;\r\n #ifdef ${this._defineOppositeZ}\r\n ${reflectionVectorName}.z *= -1.0;\r\n #endif\r\n ${isWebGPU ? \"vertexOutputs.\" : \"\"}${this._vEnvironmentIrradianceName} = computeEnvironmentIrradiance(${reflectionVectorName});\r\n #endif\\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 const isWebGPU = state.shaderLanguage === ShaderLanguage.WGSL;\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 if (!isWebGPU) {\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\\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\\n`,\r\n `//${this.name}`\r\n );\r\n }\r\n\r\n const computeReflectionCoordsFunc = isWebGPU\r\n ? `\r\n fn computeReflectionCoordsPBR(worldPos: vec4f, worldNormal: vec3f) -> vec3f {\r\n ${this.handleFragmentSideCodeReflectionCoords(state, \"worldNormal\", \"worldPos\", true, true)}\r\n return ${this._reflectionVectorName};\r\n }\\n`\r\n : `\r\n vec3 computeReflectionCoordsPBR(vec4 worldPos, vec3 worldNormal) {\r\n ${this.handleFragmentSideCodeReflectionCoords(state, \"worldNormal\", \"worldPos\", true, true)}\r\n return ${this._reflectionVectorName};\r\n }\\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, NodeMaterialBlockConnectionPointTypes.Vector3);\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, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n code += `#ifdef REFLECTION\r\n ${state._declareLocalVar(this._vReflectionInfosName, NodeMaterialBlockConnectionPointTypes.Vector2)} = vec2${state.fSuffix}(1., 0.);\r\n\r\n ${isWebGPU ? \"var reflectionOut: reflectionOutParams\" : \"reflectionOutParams reflectionOut\"};\r\n\r\n reflectionOut = reflectionBlock(\r\n ${this.generateOnlyFragmentCode ? this._worldPositionNameInFragmentOnlyMode : (isWebGPU ? \"input.\" : \"\") + \"v_\" + this.worldPosition.associatedVariableName}.xyz\r\n , ${normalVarName}\r\n , alphaG\r\n , ${(isWebGPU ? \"uniforms.\" : \"\") + 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 ${isWebGPU ? `, ${this._cubeSamplerName}Sampler` : \"\"}\r\n #else\r\n , ${this._2DSamplerName}\r\n ${isWebGPU ? `, ${this._2DSamplerName}Sampler` : \"\"}\r\n #endif\r\n #if defined(NORMAL) && defined(USESPHERICALINVERTEX)\r\n , ${isWebGPU ? \"input.\" : \"\"}${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 ${isWebGPU ? `, irradianceSamplerSampler` : \"\"}\r\n #endif\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${this._define3DName}\r\n , ${this._cubeSamplerName}\r\n ${isWebGPU ? `, ${this._cubeSamplerName}Sampler` : \"\"}\r\n , ${this._cubeSamplerName}\r\n ${isWebGPU ? `, ${this._cubeSamplerName}Sampler` : \"\"}\r\n #else\r\n , ${this._2DSamplerName}\r\n ${isWebGPU ? `, ${this._2DSamplerName}Sampler` : \"\"}\r\n , ${this._2DSamplerName} \r\n ${isWebGPU ? `, ${this._2DSamplerName}Sampler` : \"\"}\r\n #endif\r\n #endif\r\n #ifdef REALTIME_FILTERING\r\n , ${this._vReflectionFilteringInfoName}\r\n #ifdef IBL_CDF_FILTERING\r\n , icdfxSampler // ** not handled **\r\n ${isWebGPU ? `, icdfxSamplerSampler` : \"\"}\r\n , icdfySampler // ** not handled **\r\n ${isWebGPU ? `, icdfySamplerSampler` : \"\"}\r\n #endif\r\n #endif\r\n );\r\n #endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n this._scene = state.sharedData.scene;\r\n\r\n 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 override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (this.texture) {\r\n codeString += `${this._codeVariableName}.texture.gammaSpace = ${this.texture.gammaSpace};\\n`;\r\n }\r\n codeString += `${this._codeVariableName}.useSphericalHarmonics = ${this.useSphericalHarmonics};\\n`;\r\n codeString += `${this._codeVariableName}.forceIrradianceInFragment = ${this.forceIrradianceInFragment};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.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 override _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"]}
@@ -65,4 +65,5 @@ export * from "./colorConverterBlock";
65
65
  export * from "./loopBlock";
66
66
  export * from "./storageReadBlock";
67
67
  export * from "./storageWriteBlock";
68
+ export * from "./matrixSplitterBlock";
68
69
  export * from "./GaussianSplatting/index";
@@ -66,5 +66,6 @@ export * from "./colorConverterBlock.js";
66
66
  export * from "./loopBlock.js";
67
67
  export * from "./storageReadBlock.js";
68
68
  export * from "./storageWriteBlock.js";
69
+ export * from "./matrixSplitterBlock.js";
69
70
  export * from "./GaussianSplatting/index.js";
70
71
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nexport * from \"./Vertex/index\";\r\nexport * from \"./Fragment/index\";\r\nexport * from \"./Dual/index\";\r\nexport * from \"./Input/index\";\r\nexport * from \"./Teleport/index\";\r\nexport * from \"./multiplyBlock\";\r\nexport * from \"./addBlock\";\r\nexport * from \"./scaleBlock\";\r\nexport * from \"./clampBlock\";\r\nexport * from \"./crossBlock\";\r\nexport * from \"./customBlock\";\r\nexport * from \"./dotBlock\";\r\nexport * from \"./transformBlock\";\r\nexport * from \"./remapBlock\";\r\nexport * from \"./normalizeBlock\";\r\nexport * from \"./trigonometryBlock\";\r\nexport * from \"./colorMergerBlock\";\r\nexport * from \"./vectorMergerBlock\";\r\nexport * from \"./colorSplitterBlock\";\r\nexport * from \"./vectorSplitterBlock\";\r\nexport * from \"./lerpBlock\";\r\nexport * from \"./divideBlock\";\r\nexport * from \"./subtractBlock\";\r\nexport * from \"./stepBlock\";\r\nexport * from \"./oneMinusBlock\";\r\nexport * from \"./viewDirectionBlock\";\r\nexport * from \"./fresnelBlock\";\r\nexport * from \"./maxBlock\";\r\nexport * from \"./minBlock\";\r\nexport * from \"./distanceBlock\";\r\nexport * from \"./lengthBlock\";\r\nexport * from \"./negateBlock\";\r\nexport * from \"./powBlock\";\r\nexport * from \"./randomNumberBlock\";\r\nexport * from \"./arcTan2Block\";\r\nexport * from \"./smoothStepBlock\";\r\nexport * from \"./reciprocalBlock\";\r\nexport * from \"./replaceColorBlock\";\r\nexport * from \"./posterizeBlock\";\r\nexport * from \"./waveBlock\";\r\nexport * from \"./gradientBlock\";\r\nexport * from \"./nLerpBlock\";\r\nexport * from \"./worleyNoise3DBlock\";\r\nexport * from \"./simplexPerlin3DBlock\";\r\nexport * from \"./normalBlendBlock\";\r\nexport * from \"./rotate2dBlock\";\r\nexport * from \"./reflectBlock\";\r\nexport * from \"./refractBlock\";\r\nexport * from \"./desaturateBlock\";\r\nexport * from \"./PBR/index\";\r\nexport * from \"./Particle/index\";\r\nexport * from \"./modBlock\";\r\nexport * from \"./matrixBuilderBlock\";\r\nexport * from \"./conditionalBlock\";\r\nexport * from \"./cloudBlock\";\r\nexport * from \"./voronoiNoiseBlock\";\r\nexport * from \"./elbowBlock\";\r\nexport * from \"./triPlanarBlock\";\r\nexport * from \"./biPlanarBlock\";\r\nexport * from \"./matrixDeterminantBlock\";\r\nexport * from \"./matrixTransposeBlock\";\r\nexport * from \"./meshAttributeExistsBlock\";\r\nexport * from \"./curveBlock\";\r\nexport * from \"./colorConverterBlock\";\r\nexport * from \"./loopBlock\";\r\nexport * from \"./storageReadBlock\";\r\nexport * from \"./storageWriteBlock\";\r\nexport * from \"./GaussianSplatting/index\";\r\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAC/C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nexport * from \"./Vertex/index\";\r\nexport * from \"./Fragment/index\";\r\nexport * from \"./Dual/index\";\r\nexport * from \"./Input/index\";\r\nexport * from \"./Teleport/index\";\r\nexport * from \"./multiplyBlock\";\r\nexport * from \"./addBlock\";\r\nexport * from \"./scaleBlock\";\r\nexport * from \"./clampBlock\";\r\nexport * from \"./crossBlock\";\r\nexport * from \"./customBlock\";\r\nexport * from \"./dotBlock\";\r\nexport * from \"./transformBlock\";\r\nexport * from \"./remapBlock\";\r\nexport * from \"./normalizeBlock\";\r\nexport * from \"./trigonometryBlock\";\r\nexport * from \"./colorMergerBlock\";\r\nexport * from \"./vectorMergerBlock\";\r\nexport * from \"./colorSplitterBlock\";\r\nexport * from \"./vectorSplitterBlock\";\r\nexport * from \"./lerpBlock\";\r\nexport * from \"./divideBlock\";\r\nexport * from \"./subtractBlock\";\r\nexport * from \"./stepBlock\";\r\nexport * from \"./oneMinusBlock\";\r\nexport * from \"./viewDirectionBlock\";\r\nexport * from \"./fresnelBlock\";\r\nexport * from \"./maxBlock\";\r\nexport * from \"./minBlock\";\r\nexport * from \"./distanceBlock\";\r\nexport * from \"./lengthBlock\";\r\nexport * from \"./negateBlock\";\r\nexport * from \"./powBlock\";\r\nexport * from \"./randomNumberBlock\";\r\nexport * from \"./arcTan2Block\";\r\nexport * from \"./smoothStepBlock\";\r\nexport * from \"./reciprocalBlock\";\r\nexport * from \"./replaceColorBlock\";\r\nexport * from \"./posterizeBlock\";\r\nexport * from \"./waveBlock\";\r\nexport * from \"./gradientBlock\";\r\nexport * from \"./nLerpBlock\";\r\nexport * from \"./worleyNoise3DBlock\";\r\nexport * from \"./simplexPerlin3DBlock\";\r\nexport * from \"./normalBlendBlock\";\r\nexport * from \"./rotate2dBlock\";\r\nexport * from \"./reflectBlock\";\r\nexport * from \"./refractBlock\";\r\nexport * from \"./desaturateBlock\";\r\nexport * from \"./PBR/index\";\r\nexport * from \"./Particle/index\";\r\nexport * from \"./modBlock\";\r\nexport * from \"./matrixBuilderBlock\";\r\nexport * from \"./conditionalBlock\";\r\nexport * from \"./cloudBlock\";\r\nexport * from \"./voronoiNoiseBlock\";\r\nexport * from \"./elbowBlock\";\r\nexport * from \"./triPlanarBlock\";\r\nexport * from \"./biPlanarBlock\";\r\nexport * from \"./matrixDeterminantBlock\";\r\nexport * from \"./matrixTransposeBlock\";\r\nexport * from \"./meshAttributeExistsBlock\";\r\nexport * from \"./curveBlock\";\r\nexport * from \"./colorConverterBlock\";\r\nexport * from \"./loopBlock\";\r\nexport * from \"./storageReadBlock\";\r\nexport * from \"./storageWriteBlock\";\r\nexport * from \"./matrixSplitterBlock\";\r\nexport * from \"./GaussianSplatting/index\";\r\n"]}
@@ -0,0 +1,56 @@
1
+ import { NodeMaterialBlock } from "../nodeMaterialBlock";
2
+ import type { NodeMaterialBuildState } from "../nodeMaterialBuildState";
3
+ import type { NodeMaterialConnectionPoint } from "../nodeMaterialBlockConnectionPoint";
4
+ /**
5
+ * Block used to split a matrix into Vector4
6
+ */
7
+ export declare class MatrixSplitterBlock extends NodeMaterialBlock {
8
+ /**
9
+ * Creates a new MatrixSplitterBlock
10
+ * @param name defines the block name
11
+ */
12
+ constructor(name: string);
13
+ /**
14
+ * Gets the current class name
15
+ * @returns the class name
16
+ */
17
+ getClassName(): string;
18
+ /**
19
+ * Gets the input component
20
+ */
21
+ get input(): NodeMaterialConnectionPoint;
22
+ /**
23
+ * Gets the row0 output vector
24
+ */
25
+ get row0(): NodeMaterialConnectionPoint;
26
+ /**
27
+ * Gets the row1 output vector
28
+ */
29
+ get row1(): NodeMaterialConnectionPoint;
30
+ /**
31
+ * Gets the row2 output vector
32
+ */
33
+ get row2(): NodeMaterialConnectionPoint;
34
+ /**
35
+ * Gets the row3 output vector
36
+ */
37
+ get row3(): NodeMaterialConnectionPoint;
38
+ /**
39
+ * Gets the col0 output vector
40
+ */
41
+ get col0(): NodeMaterialConnectionPoint;
42
+ /**
43
+ * Gets the col1 output vector
44
+ */
45
+ get col1(): NodeMaterialConnectionPoint;
46
+ /**
47
+ * Gets the col2 output vector
48
+ */
49
+ get col2(): NodeMaterialConnectionPoint;
50
+ /**
51
+ * Gets the col3 output vector
52
+ */
53
+ get col3(): NodeMaterialConnectionPoint;
54
+ private _exportColumn;
55
+ protected _buildBlock(state: NodeMaterialBuildState): this;
56
+ }
@@ -0,0 +1,130 @@
1
+ import { NodeMaterialBlock } from "../nodeMaterialBlock.js";
2
+ import { NodeMaterialBlockConnectionPointTypes } from "../Enums/nodeMaterialBlockConnectionPointTypes.js";
3
+ import { NodeMaterialBlockTargets } from "../Enums/nodeMaterialBlockTargets.js";
4
+ import { RegisterClass } from "../../../Misc/typeStore.js";
5
+ /**
6
+ * Block used to split a matrix into Vector4
7
+ */
8
+ export class MatrixSplitterBlock extends NodeMaterialBlock {
9
+ /**
10
+ * Creates a new MatrixSplitterBlock
11
+ * @param name defines the block name
12
+ */
13
+ constructor(name) {
14
+ super(name, NodeMaterialBlockTargets.Neutral);
15
+ this.registerInput("input", NodeMaterialBlockConnectionPointTypes.Matrix);
16
+ this.registerOutput("row0", NodeMaterialBlockConnectionPointTypes.Vector4);
17
+ this.registerOutput("row1", NodeMaterialBlockConnectionPointTypes.Vector4);
18
+ this.registerOutput("row2", NodeMaterialBlockConnectionPointTypes.Vector4);
19
+ this.registerOutput("row3", NodeMaterialBlockConnectionPointTypes.Vector4);
20
+ this.registerOutput("col0", NodeMaterialBlockConnectionPointTypes.Vector4);
21
+ this.registerOutput("col1", NodeMaterialBlockConnectionPointTypes.Vector4);
22
+ this.registerOutput("col2", NodeMaterialBlockConnectionPointTypes.Vector4);
23
+ this.registerOutput("col3", NodeMaterialBlockConnectionPointTypes.Vector4);
24
+ }
25
+ /**
26
+ * Gets the current class name
27
+ * @returns the class name
28
+ */
29
+ getClassName() {
30
+ return "MatrixSplitterBlock";
31
+ }
32
+ /**
33
+ * Gets the input component
34
+ */
35
+ get input() {
36
+ return this._inputs[0];
37
+ }
38
+ /**
39
+ * Gets the row0 output vector
40
+ */
41
+ get row0() {
42
+ return this._outputs[0];
43
+ }
44
+ /**
45
+ * Gets the row1 output vector
46
+ */
47
+ get row1() {
48
+ return this._outputs[1];
49
+ }
50
+ /**
51
+ * Gets the row2 output vector
52
+ */
53
+ get row2() {
54
+ return this._outputs[2];
55
+ }
56
+ /**
57
+ * Gets the row3 output vector
58
+ */
59
+ get row3() {
60
+ return this._outputs[3];
61
+ }
62
+ /**
63
+ * Gets the col0 output vector
64
+ */
65
+ get col0() {
66
+ return this._outputs[4];
67
+ }
68
+ /**
69
+ * Gets the col1 output vector
70
+ */
71
+ get col1() {
72
+ return this._outputs[5];
73
+ }
74
+ /**
75
+ * Gets the col2 output vector
76
+ */
77
+ get col2() {
78
+ return this._outputs[6];
79
+ }
80
+ /**
81
+ * Gets the col3 output vector
82
+ */
83
+ get col3() {
84
+ return this._outputs[7];
85
+ }
86
+ _exportColumn(state, col, input, columnIndex) {
87
+ const vec4 = state.shaderLanguage === 1 /* ShaderLanguage.WGSL */ ? "vec4f" : "vec4";
88
+ state.compilationString +=
89
+ state._declareOutput(col) + ` = ${vec4}(${input}[0][${columnIndex}], ${input}[1][${columnIndex}], ${input}[2][${columnIndex}], ${input}[3][${columnIndex}]);\n`;
90
+ }
91
+ _buildBlock(state) {
92
+ super._buildBlock(state);
93
+ const input = this._inputs[0].associatedVariableName;
94
+ const row0 = this.row0;
95
+ const row1 = this.row1;
96
+ const row2 = this.row2;
97
+ const row3 = this.row3;
98
+ const col0 = this.col0;
99
+ const col1 = this.col1;
100
+ const col2 = this.col2;
101
+ const col3 = this.col3;
102
+ if (row0.hasEndpoints) {
103
+ state.compilationString += state._declareOutput(row0) + ` = ${input}[0];\n`;
104
+ }
105
+ if (row1.hasEndpoints) {
106
+ state.compilationString += state._declareOutput(row1) + ` = ${input}[1];\n`;
107
+ }
108
+ if (row2.hasEndpoints) {
109
+ state.compilationString += state._declareOutput(row2) + ` = ${input}[2];\n`;
110
+ }
111
+ if (row3.hasEndpoints) {
112
+ state.compilationString += state._declareOutput(row3) + ` = ${input}[3];\n`;
113
+ }
114
+ if (col0.hasEndpoints) {
115
+ this._exportColumn(state, col0, input, 0);
116
+ }
117
+ if (col1.hasEndpoints) {
118
+ this._exportColumn(state, col1, input, 1);
119
+ }
120
+ if (col2.hasEndpoints) {
121
+ this._exportColumn(state, col2, input, 2);
122
+ }
123
+ if (col3.hasEndpoints) {
124
+ this._exportColumn(state, col3, input, 3);
125
+ }
126
+ return this;
127
+ }
128
+ }
129
+ RegisterClass("BABYLON.MatrixSplitterBlock", MatrixSplitterBlock);
130
+ //# sourceMappingURL=matrixSplitterBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrixSplitterBlock.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Materials/Node/Blocks/matrixSplitterBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/**\r\n * Block used to split a matrix into Vector4\r\n */\r\nexport class MatrixSplitterBlock extends NodeMaterialBlock {\r\n /**\r\n * Creates a new MatrixSplitterBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\"input\", NodeMaterialBlockConnectionPointTypes.Matrix);\r\n this.registerOutput(\"row0\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"row1\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"row2\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"row3\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"col0\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"col1\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"col2\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"col3\", 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 override getClassName() {\r\n return \"MatrixSplitterBlock\";\r\n }\r\n\r\n /**\r\n * Gets the input component\r\n */\r\n public get input(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the row0 output vector\r\n */\r\n public get row0(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the row1 output vector\r\n */\r\n public get row1(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the row2 output vector\r\n */\r\n public get row2(): NodeMaterialConnectionPoint {\r\n return this._outputs[2];\r\n }\r\n\r\n /**\r\n * Gets the row3 output vector\r\n */\r\n public get row3(): NodeMaterialConnectionPoint {\r\n return this._outputs[3];\r\n }\r\n\r\n /**\r\n * Gets the col0 output vector\r\n */\r\n public get col0(): NodeMaterialConnectionPoint {\r\n return this._outputs[4];\r\n }\r\n\r\n /**\r\n * Gets the col1 output vector\r\n */\r\n public get col1(): NodeMaterialConnectionPoint {\r\n return this._outputs[5];\r\n }\r\n\r\n /**\r\n * Gets the col2 output vector\r\n */\r\n public get col2(): NodeMaterialConnectionPoint {\r\n return this._outputs[6];\r\n }\r\n\r\n /**\r\n * Gets the col3 output vector\r\n */\r\n public get col3(): NodeMaterialConnectionPoint {\r\n return this._outputs[7];\r\n }\r\n\r\n private _exportColumn(state: NodeMaterialBuildState, col: NodeMaterialConnectionPoint, input: string, columnIndex: number) {\r\n const vec4 = state.shaderLanguage === ShaderLanguage.WGSL ? \"vec4f\" : \"vec4\";\r\n state.compilationString +=\r\n state._declareOutput(col) + ` = ${vec4}(${input}[0][${columnIndex}], ${input}[1][${columnIndex}], ${input}[2][${columnIndex}], ${input}[3][${columnIndex}]);\\n`;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const input = this._inputs[0].associatedVariableName;\r\n\r\n const row0 = this.row0;\r\n const row1 = this.row1;\r\n const row2 = this.row2;\r\n const row3 = this.row3;\r\n const col0 = this.col0;\r\n const col1 = this.col1;\r\n const col2 = this.col2;\r\n const col3 = this.col3;\r\n\r\n if (row0.hasEndpoints) {\r\n state.compilationString += state._declareOutput(row0) + ` = ${input}[0];\\n`;\r\n }\r\n if (row1.hasEndpoints) {\r\n state.compilationString += state._declareOutput(row1) + ` = ${input}[1];\\n`;\r\n }\r\n if (row2.hasEndpoints) {\r\n state.compilationString += state._declareOutput(row2) + ` = ${input}[2];\\n`;\r\n }\r\n if (row3.hasEndpoints) {\r\n state.compilationString += state._declareOutput(row3) + ` = ${input}[3];\\n`;\r\n }\r\n\r\n if (col0.hasEndpoints) {\r\n this._exportColumn(state, col0, input, 0);\r\n }\r\n if (col1.hasEndpoints) {\r\n this._exportColumn(state, col1, input, 1);\r\n }\r\n if (col2.hasEndpoints) {\r\n this._exportColumn(state, col2, input, 2);\r\n }\r\n if (col3.hasEndpoints) {\r\n this._exportColumn(state, col3, input, 3);\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.MatrixSplitterBlock\", MatrixSplitterBlock);\r\n"]}
@@ -463,6 +463,7 @@ export class NodeMaterialBlock {
463
463
  }
464
464
  else {
465
465
  this._inputs[inputIndex0]._linkedConnectionSource = this._inputs[inputIndex1];
466
+ this._inputs[inputIndex0]._isMainLinkSource = true;
466
467
  }
467
468
  this._inputs[inputIndex1]._linkedConnectionSource = this._inputs[inputIndex0];
468
469
  }