@babylonjs/core 7.3.1 → 7.3.3

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 (510) hide show
  1. package/Actions/condition.js.map +1 -1
  2. package/Actions/directActions.js.map +1 -1
  3. package/Actions/directAudioActions.js.map +1 -1
  4. package/Actions/interpolateValueAction.js.map +1 -1
  5. package/Animations/easing.js.map +1 -1
  6. package/Behaviors/Meshes/sixDofDragBehavior.js.map +1 -1
  7. package/Bones/bone.js.map +1 -1
  8. package/Cameras/Inputs/arcRotateCameraPointersInput.js.map +1 -1
  9. package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
  10. package/Cameras/Inputs/freeCameraMouseWheelInput.js.map +1 -1
  11. package/Cameras/Stereoscopic/anaglyphArcRotateCamera.js.map +1 -1
  12. package/Cameras/Stereoscopic/anaglyphFreeCamera.js.map +1 -1
  13. package/Cameras/Stereoscopic/anaglyphGamepadCamera.js.map +1 -1
  14. package/Cameras/Stereoscopic/anaglyphUniversalCamera.js.map +1 -1
  15. package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.js.map +1 -1
  16. package/Cameras/Stereoscopic/stereoscopicFreeCamera.js.map +1 -1
  17. package/Cameras/Stereoscopic/stereoscopicGamepadCamera.js.map +1 -1
  18. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
  19. package/Cameras/Stereoscopic/stereoscopicUniversalCamera.js.map +1 -1
  20. package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js.map +1 -1
  21. package/Cameras/VR/vrDeviceOrientationFreeCamera.js.map +1 -1
  22. package/Cameras/VR/vrDeviceOrientationGamepadCamera.js.map +1 -1
  23. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  24. package/Cameras/arcRotateCamera.js.map +1 -1
  25. package/Cameras/camera.js.map +1 -1
  26. package/Cameras/deviceOrientationCamera.js.map +1 -1
  27. package/Cameras/flyCamera.js.map +1 -1
  28. package/Cameras/followCamera.js.map +1 -1
  29. package/Cameras/freeCamera.js.map +1 -1
  30. package/Cameras/freeCameraInputsManager.js.map +1 -1
  31. package/Cameras/gamepadCamera.js.map +1 -1
  32. package/Cameras/targetCamera.js.map +1 -1
  33. package/Cameras/touchCamera.js.map +1 -1
  34. package/Cameras/universalCamera.js.map +1 -1
  35. package/Cameras/virtualJoysticksCamera.js.map +1 -1
  36. package/Compute/computeEffect.js +4 -4
  37. package/Compute/computeEffect.js.map +1 -1
  38. package/Debug/boneAxesViewer.js.map +1 -1
  39. package/Engines/IPipelineContext.d.ts +3 -0
  40. package/Engines/IPipelineContext.js.map +1 -1
  41. package/Engines/Native/nativePipelineContext.d.ts +2 -0
  42. package/Engines/Native/nativePipelineContext.js +3 -0
  43. package/Engines/Native/nativePipelineContext.js.map +1 -1
  44. package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
  45. package/Engines/Processors/Expressions/Operators/shaderDefineAndOperator.js.map +1 -1
  46. package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js.map +1 -1
  47. package/Engines/Processors/Expressions/Operators/shaderDefineIsDefinedOperator.js.map +1 -1
  48. package/Engines/Processors/Expressions/Operators/shaderDefineOrOperator.js.map +1 -1
  49. package/Engines/Processors/iShaderProcessor.d.ts +3 -2
  50. package/Engines/Processors/iShaderProcessor.js.map +1 -1
  51. package/Engines/Processors/shaderCodeConditionNode.js.map +1 -1
  52. package/Engines/Processors/shaderCodeTestNode.js.map +1 -1
  53. package/Engines/Processors/shaderProcessor.d.ts +15 -23
  54. package/Engines/Processors/shaderProcessor.js +332 -320
  55. package/Engines/Processors/shaderProcessor.js.map +1 -1
  56. package/Engines/WebGL/webGLPipelineContext.d.ts +2 -0
  57. package/Engines/WebGL/webGLPipelineContext.js +3 -0
  58. package/Engines/WebGL/webGLPipelineContext.js.map +1 -1
  59. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  60. package/Engines/WebGL/webGLShaderProcessors.d.ts +3 -2
  61. package/Engines/WebGL/webGLShaderProcessors.js +2 -2
  62. package/Engines/WebGL/webGLShaderProcessors.js.map +1 -1
  63. package/Engines/WebGPU/Extensions/engine.computeShader.js +1 -1
  64. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  65. package/Engines/WebGPU/Extensions/engine.rawTexture.js +10 -10
  66. package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
  67. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
  68. package/Engines/WebGPU/webgpuDepthCullingState.js.map +1 -1
  69. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +2 -0
  70. package/Engines/WebGPU/webgpuHardwareTexture.js +2 -0
  71. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  72. package/Engines/WebGPU/webgpuPipelineContext.d.ts +2 -0
  73. package/Engines/WebGPU/webgpuPipelineContext.js +3 -0
  74. package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
  75. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.d.ts +3 -2
  76. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +2 -4
  77. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  78. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  79. package/Engines/WebGPU/webgpuStencilStateComposer.js.map +1 -1
  80. package/Engines/abstractEngine.d.ts +10 -5
  81. package/Engines/abstractEngine.functions.d.ts +38 -0
  82. package/Engines/abstractEngine.functions.js +75 -0
  83. package/Engines/abstractEngine.functions.js.map +1 -0
  84. package/Engines/abstractEngine.js +34 -14
  85. package/Engines/abstractEngine.js.map +1 -1
  86. package/Engines/constants.d.ts +2 -0
  87. package/Engines/constants.js +2 -0
  88. package/Engines/constants.js.map +1 -1
  89. package/Engines/engine.d.ts +0 -8
  90. package/Engines/engine.js +0 -28
  91. package/Engines/engine.js.map +1 -1
  92. package/Engines/nativeEngine.js.map +1 -1
  93. package/Engines/nullEngine.js.map +1 -1
  94. package/Engines/thinEngine.d.ts +11 -6
  95. package/Engines/thinEngine.functions.d.ts +96 -0
  96. package/Engines/thinEngine.functions.js +249 -0
  97. package/Engines/thinEngine.functions.js.map +1 -0
  98. package/Engines/thinEngine.js +50 -129
  99. package/Engines/thinEngine.js.map +1 -1
  100. package/Engines/webgpuEngine.js +5 -1
  101. package/Engines/webgpuEngine.js.map +1 -1
  102. package/Events/keyboardEvents.js.map +1 -1
  103. package/FlowGraph/Blocks/Data/flowGraphBinaryOperationBlock.js.map +1 -1
  104. package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js.map +1 -1
  105. package/FlowGraph/Blocks/Data/flowGraphConditionalDataBlock.js.map +1 -1
  106. package/FlowGraph/Blocks/Data/flowGraphConstantBlock.js.map +1 -1
  107. package/FlowGraph/Blocks/Data/flowGraphConstantOperationBlock.js.map +1 -1
  108. package/FlowGraph/Blocks/Data/flowGraphCoordinateTransformBlock.js.map +1 -1
  109. package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.js.map +1 -1
  110. package/FlowGraph/Blocks/Data/flowGraphGetVariableBlock.js.map +1 -1
  111. package/FlowGraph/Blocks/Data/flowGraphTernaryOperationBlock.js.map +1 -1
  112. package/FlowGraph/Blocks/Data/flowGraphUnaryOperationBlock.js.map +1 -1
  113. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js.map +1 -1
  114. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.js.map +1 -1
  115. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.js.map +1 -1
  116. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.js.map +1 -1
  117. package/FlowGraph/Blocks/Execution/Animation/flowGraphPauseAnimationBlock.js.map +1 -1
  118. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js.map +1 -1
  119. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.js.map +1 -1
  120. package/FlowGraph/Blocks/Execution/Audio/flowGraphPlayAudioBlock.js.map +1 -1
  121. package/FlowGraph/Blocks/Execution/Audio/flowGraphStopAudioBlock.js.map +1 -1
  122. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphBranchBlock.js.map +1 -1
  123. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.js.map +1 -1
  124. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDebounceBlock.js.map +1 -1
  125. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDoNBlock.js.map +1 -1
  126. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphFlipFlopBlock.js.map +1 -1
  127. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.js.map +1 -1
  128. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphMultiGateBlock.js.map +1 -1
  129. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSequenceBlock.js.map +1 -1
  130. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSwitchBlock.js.map +1 -1
  131. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.js.map +1 -1
  132. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphTimerBlock.js.map +1 -1
  133. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWaitAllBlock.js.map +1 -1
  134. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.js.map +1 -1
  135. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js.map +1 -1
  136. package/FlowGraph/Blocks/Execution/flowGraphSendCustomEventBlock.js.map +1 -1
  137. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.js.map +1 -1
  138. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.js.map +1 -1
  139. package/FlowGraph/flowGraphDataConnection.js.map +1 -1
  140. package/FlowGraph/flowGraphExecutionBlock.js.map +1 -1
  141. package/FlowGraph/flowGraphSignalConnection.js.map +1 -1
  142. package/Gamepads/dualShockGamepad.js.map +1 -1
  143. package/Gamepads/gamepad.js.map +1 -1
  144. package/Gamepads/xboxGamepad.js.map +1 -1
  145. package/Gizmos/axisDragGizmo.js.map +1 -1
  146. package/Gizmos/axisScaleGizmo.js.map +1 -1
  147. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  148. package/Gizmos/cameraGizmo.js.map +1 -1
  149. package/Gizmos/lightGizmo.js.map +1 -1
  150. package/Gizmos/planeDragGizmo.js.map +1 -1
  151. package/Gizmos/planeRotationGizmo.js.map +1 -1
  152. package/Gizmos/positionGizmo.js.map +1 -1
  153. package/Gizmos/rotationGizmo.js.map +1 -1
  154. package/Gizmos/scaleGizmo.js.map +1 -1
  155. package/Helpers/photoDome.js.map +1 -1
  156. package/Helpers/textureDome.js.map +1 -1
  157. package/Helpers/videoDome.js.map +1 -1
  158. package/Layers/glowLayer.js.map +1 -1
  159. package/Layers/highlightLayer.js.map +1 -1
  160. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  161. package/Lights/directionalLight.js.map +1 -1
  162. package/Lights/hemisphericLight.js.map +1 -1
  163. package/Lights/light.js.map +1 -1
  164. package/Lights/pointLight.js.map +1 -1
  165. package/Lights/shadowLight.js.map +1 -1
  166. package/Lights/spotLight.js.map +1 -1
  167. package/Materials/Background/backgroundMaterial.js.map +1 -1
  168. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  169. package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
  170. package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
  171. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
  172. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  173. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  174. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  175. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  176. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  177. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  178. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  179. package/Materials/Node/Blocks/Dual/textureBlock.js +3 -3
  180. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  181. package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
  182. package/Materials/Node/Blocks/Fragment/derivativeBlock.js.map +1 -1
  183. package/Materials/Node/Blocks/Fragment/discardBlock.js.map +1 -1
  184. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js.map +1 -1
  185. package/Materials/Node/Blocks/Fragment/fragDepthBlock.js.map +1 -1
  186. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  187. package/Materials/Node/Blocks/Fragment/frontFacingBlock.js.map +1 -1
  188. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
  189. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  190. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  191. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.js.map +1 -1
  192. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
  193. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
  194. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js.map +1 -1
  195. package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -1
  196. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  197. package/Materials/Node/Blocks/Input/prePassTextureBlock.js.map +1 -1
  198. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  199. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  200. package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
  201. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  202. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  203. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  204. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  205. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  206. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js.map +1 -1
  207. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js.map +1 -1
  208. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  209. package/Materials/Node/Blocks/Teleport/teleportInBlock.js.map +1 -1
  210. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
  211. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  212. package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
  213. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  214. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  215. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
  216. package/Materials/Node/Blocks/addBlock.js.map +1 -1
  217. package/Materials/Node/Blocks/arcTan2Block.js.map +1 -1
  218. package/Materials/Node/Blocks/biPlanarBlock.js.map +1 -1
  219. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  220. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  221. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  222. package/Materials/Node/Blocks/colorSplitterBlock.js.map +1 -1
  223. package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
  224. package/Materials/Node/Blocks/crossBlock.js.map +1 -1
  225. package/Materials/Node/Blocks/curveBlock.js.map +1 -1
  226. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  227. package/Materials/Node/Blocks/desaturateBlock.js.map +1 -1
  228. package/Materials/Node/Blocks/distanceBlock.js.map +1 -1
  229. package/Materials/Node/Blocks/divideBlock.js.map +1 -1
  230. package/Materials/Node/Blocks/dotBlock.js.map +1 -1
  231. package/Materials/Node/Blocks/elbowBlock.js.map +1 -1
  232. package/Materials/Node/Blocks/fresnelBlock.js.map +1 -1
  233. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  234. package/Materials/Node/Blocks/lengthBlock.js.map +1 -1
  235. package/Materials/Node/Blocks/lerpBlock.js.map +1 -1
  236. package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
  237. package/Materials/Node/Blocks/matrixDeterminantBlock.js.map +1 -1
  238. package/Materials/Node/Blocks/matrixTransposeBlock.js.map +1 -1
  239. package/Materials/Node/Blocks/maxBlock.js.map +1 -1
  240. package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
  241. package/Materials/Node/Blocks/minBlock.js.map +1 -1
  242. package/Materials/Node/Blocks/modBlock.js.map +1 -1
  243. package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
  244. package/Materials/Node/Blocks/nLerpBlock.js.map +1 -1
  245. package/Materials/Node/Blocks/negateBlock.js.map +1 -1
  246. package/Materials/Node/Blocks/normalBlendBlock.js.map +1 -1
  247. package/Materials/Node/Blocks/normalizeBlock.js.map +1 -1
  248. package/Materials/Node/Blocks/oneMinusBlock.js.map +1 -1
  249. package/Materials/Node/Blocks/posterizeBlock.js.map +1 -1
  250. package/Materials/Node/Blocks/powBlock.js.map +1 -1
  251. package/Materials/Node/Blocks/randomNumberBlock.js.map +1 -1
  252. package/Materials/Node/Blocks/reciprocalBlock.js.map +1 -1
  253. package/Materials/Node/Blocks/reflectBlock.js.map +1 -1
  254. package/Materials/Node/Blocks/refractBlock.js.map +1 -1
  255. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  256. package/Materials/Node/Blocks/replaceColorBlock.js.map +1 -1
  257. package/Materials/Node/Blocks/rotate2dBlock.js.map +1 -1
  258. package/Materials/Node/Blocks/scaleBlock.js.map +1 -1
  259. package/Materials/Node/Blocks/simplexPerlin3DBlock.js.map +1 -1
  260. package/Materials/Node/Blocks/smoothStepBlock.js.map +1 -1
  261. package/Materials/Node/Blocks/stepBlock.js.map +1 -1
  262. package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
  263. package/Materials/Node/Blocks/transformBlock.js.map +1 -1
  264. package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
  265. package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
  266. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  267. package/Materials/Node/Blocks/vectorSplitterBlock.js.map +1 -1
  268. package/Materials/Node/Blocks/viewDirectionBlock.js.map +1 -1
  269. package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -1
  270. package/Materials/Node/Blocks/waveBlock.js.map +1 -1
  271. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  272. package/Materials/Node/nodeMaterial.js.map +1 -1
  273. package/Materials/Node/nodeMaterialConnectionPointCustomObject.js.map +1 -1
  274. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  275. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  276. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  277. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  278. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  279. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
  280. package/Materials/PBR/pbrMaterial.js.map +1 -1
  281. package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
  282. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  283. package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
  284. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  285. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  286. package/Materials/Textures/Procedurals/customProceduralTexture.js.map +1 -1
  287. package/Materials/Textures/Procedurals/noiseProceduralTexture.js.map +1 -1
  288. package/Materials/Textures/Procedurals/proceduralTexture.d.ts +9 -1
  289. package/Materials/Textures/Procedurals/proceduralTexture.js +16 -0
  290. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  291. package/Materials/Textures/baseTexture.js.map +1 -1
  292. package/Materials/Textures/colorGradingTexture.js.map +1 -1
  293. package/Materials/Textures/cubeTexture.js.map +1 -1
  294. package/Materials/Textures/dynamicTexture.js.map +1 -1
  295. package/Materials/Textures/equiRectangularCubeTexture.js +1 -1
  296. package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
  297. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  298. package/Materials/Textures/htmlElementTexture.js.map +1 -1
  299. package/Materials/Textures/internalTexture.js.map +1 -1
  300. package/Materials/Textures/mirrorTexture.js.map +1 -1
  301. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  302. package/Materials/Textures/prePassRenderTarget.js.map +1 -1
  303. package/Materials/Textures/rawCubeTexture.js.map +1 -1
  304. package/Materials/Textures/refractionTexture.js.map +1 -1
  305. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  306. package/Materials/Textures/texture.js.map +1 -1
  307. package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
  308. package/Materials/Textures/videoTexture.js.map +1 -1
  309. package/Materials/effect.d.ts +11 -6
  310. package/Materials/effect.functions.d.ts +86 -0
  311. package/Materials/effect.functions.js +185 -0
  312. package/Materials/effect.functions.js.map +1 -0
  313. package/Materials/effect.js +94 -153
  314. package/Materials/effect.js.map +1 -1
  315. package/Materials/effect.webgl.functions.d.ts +13 -0
  316. package/Materials/effect.webgl.functions.js +83 -0
  317. package/Materials/effect.webgl.functions.js.map +1 -0
  318. package/Materials/material.decalMapConfiguration.js.map +1 -1
  319. package/Materials/material.detailMapConfiguration.js.map +1 -1
  320. package/Materials/materialPluginManager.js +2 -2
  321. package/Materials/materialPluginManager.js.map +1 -1
  322. package/Materials/meshDebugPluginMaterial.js.map +1 -1
  323. package/Materials/multiMaterial.js.map +1 -1
  324. package/Materials/pushMaterial.js.map +1 -1
  325. package/Materials/shaderMaterial.js.map +1 -1
  326. package/Materials/standardMaterial.js.map +1 -1
  327. package/Meshes/Compression/dracoCompression.js.map +1 -1
  328. package/Meshes/Compression/dracoCompressionWorker.d.ts +1 -1
  329. package/Meshes/Compression/dracoCompressionWorker.js +21 -10
  330. package/Meshes/Compression/dracoCompressionWorker.js.map +1 -1
  331. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  332. package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
  333. package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
  334. package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
  335. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js.map +1 -1
  336. package/Meshes/Node/Blocks/Instances/instantiateBlock.js.map +1 -1
  337. package/Meshes/Node/Blocks/Instances/instantiateLinearBlock.js.map +1 -1
  338. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js.map +1 -1
  339. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js.map +1 -1
  340. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js.map +1 -1
  341. package/Meshes/Node/Blocks/Instances/instantiateRadialBlock.js.map +1 -1
  342. package/Meshes/Node/Blocks/Matrices/alignBlock.js.map +1 -1
  343. package/Meshes/Node/Blocks/Matrices/rotationXBlock.js.map +1 -1
  344. package/Meshes/Node/Blocks/Matrices/rotationYBlock.js.map +1 -1
  345. package/Meshes/Node/Blocks/Matrices/rotationZBlock.js.map +1 -1
  346. package/Meshes/Node/Blocks/Matrices/scalingBlock.js.map +1 -1
  347. package/Meshes/Node/Blocks/Matrices/translationBlock.js.map +1 -1
  348. package/Meshes/Node/Blocks/Set/setColorsBlock.js.map +1 -1
  349. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.js.map +1 -1
  350. package/Meshes/Node/Blocks/Set/setNormalsBlock.js.map +1 -1
  351. package/Meshes/Node/Blocks/Set/setPositionsBlock.js.map +1 -1
  352. package/Meshes/Node/Blocks/Set/setTangentsBlock.js.map +1 -1
  353. package/Meshes/Node/Blocks/Set/setUVsBlock.js.map +1 -1
  354. package/Meshes/Node/Blocks/Sources/boxBlock.js.map +1 -1
  355. package/Meshes/Node/Blocks/Sources/capsuleBlock.js.map +1 -1
  356. package/Meshes/Node/Blocks/Sources/cylinderBlock.js.map +1 -1
  357. package/Meshes/Node/Blocks/Sources/discBlock.js.map +1 -1
  358. package/Meshes/Node/Blocks/Sources/gridBlock.js.map +1 -1
  359. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js.map +1 -1
  360. package/Meshes/Node/Blocks/Sources/meshBlock.js.map +1 -1
  361. package/Meshes/Node/Blocks/Sources/nullBlock.js.map +1 -1
  362. package/Meshes/Node/Blocks/Sources/planeBlock.js.map +1 -1
  363. package/Meshes/Node/Blocks/Sources/sphereBlock.js.map +1 -1
  364. package/Meshes/Node/Blocks/Sources/torusBlock.js.map +1 -1
  365. package/Meshes/Node/Blocks/Teleport/teleportInBlock.js.map +1 -1
  366. package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
  367. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js.map +1 -1
  368. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.js.map +1 -1
  369. package/Meshes/Node/Blocks/booleanGeometryBlock.js.map +1 -1
  370. package/Meshes/Node/Blocks/boundingBlock.js.map +1 -1
  371. package/Meshes/Node/Blocks/computeNormalsBlock.js.map +1 -1
  372. package/Meshes/Node/Blocks/conditionBlock.js.map +1 -1
  373. package/Meshes/Node/Blocks/debugBlock.js.map +1 -1
  374. package/Meshes/Node/Blocks/geometryArcTan2Block.js.map +1 -1
  375. package/Meshes/Node/Blocks/geometryClampBlock.js.map +1 -1
  376. package/Meshes/Node/Blocks/geometryCollectionBlock.js.map +1 -1
  377. package/Meshes/Node/Blocks/geometryCrossBlock.js.map +1 -1
  378. package/Meshes/Node/Blocks/geometryCurveBlock.js.map +1 -1
  379. package/Meshes/Node/Blocks/geometryDesaturateBlock.js.map +1 -1
  380. package/Meshes/Node/Blocks/geometryDistanceBlock.js.map +1 -1
  381. package/Meshes/Node/Blocks/geometryDotBlock.js.map +1 -1
  382. package/Meshes/Node/Blocks/geometryElbowBlock.js.map +1 -1
  383. package/Meshes/Node/Blocks/geometryInfoBlock.js.map +1 -1
  384. package/Meshes/Node/Blocks/geometryInputBlock.js.map +1 -1
  385. package/Meshes/Node/Blocks/geometryLengthBlock.js.map +1 -1
  386. package/Meshes/Node/Blocks/geometryLerpBlock.js.map +1 -1
  387. package/Meshes/Node/Blocks/geometryModBlock.js.map +1 -1
  388. package/Meshes/Node/Blocks/geometryNLerpBlock.js.map +1 -1
  389. package/Meshes/Node/Blocks/geometryOptimizeBlock.js.map +1 -1
  390. package/Meshes/Node/Blocks/geometryOutputBlock.js.map +1 -1
  391. package/Meshes/Node/Blocks/geometryPosterizeBlock.js.map +1 -1
  392. package/Meshes/Node/Blocks/geometryPowBlock.js.map +1 -1
  393. package/Meshes/Node/Blocks/geometryReplaceColorBlock.js.map +1 -1
  394. package/Meshes/Node/Blocks/geometryRotate2dBlock.js.map +1 -1
  395. package/Meshes/Node/Blocks/geometrySmoothStepBlock.js.map +1 -1
  396. package/Meshes/Node/Blocks/geometryStepBlock.js.map +1 -1
  397. package/Meshes/Node/Blocks/geometryTransformBlock.js.map +1 -1
  398. package/Meshes/Node/Blocks/geometryTrigonometryBlock.js.map +1 -1
  399. package/Meshes/Node/Blocks/intFloatConverterBlock.js.map +1 -1
  400. package/Meshes/Node/Blocks/mapRangeBlock.js.map +1 -1
  401. package/Meshes/Node/Blocks/mappingBlock.js.map +1 -1
  402. package/Meshes/Node/Blocks/mathBlock.js.map +1 -1
  403. package/Meshes/Node/Blocks/matrixComposeBlock.js.map +1 -1
  404. package/Meshes/Node/Blocks/mergeGeometryBlock.js.map +1 -1
  405. package/Meshes/Node/Blocks/noiseBlock.js.map +1 -1
  406. package/Meshes/Node/Blocks/normalizeVectorBlock.js.map +1 -1
  407. package/Meshes/Node/Blocks/randomBlock.js.map +1 -1
  408. package/Meshes/Node/Blocks/vectorConverterBlock.js.map +1 -1
  409. package/Meshes/Node/nodeGeometryBlock.js +1 -0
  410. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  411. package/Meshes/WebGL/webGLDataBuffer.js.map +1 -1
  412. package/Meshes/WebGPU/webgpuDataBuffer.js.map +1 -1
  413. package/Meshes/abstractMesh.js.map +1 -1
  414. package/Meshes/geodesicMesh.js.map +1 -1
  415. package/Meshes/goldbergMesh.js.map +1 -1
  416. package/Meshes/groundMesh.js.map +1 -1
  417. package/Meshes/instancedMesh.js.map +1 -1
  418. package/Meshes/linesMesh.js.map +1 -1
  419. package/Meshes/mesh.js.map +1 -1
  420. package/Meshes/trailMesh.js.map +1 -1
  421. package/Meshes/transformNode.js.map +1 -1
  422. package/Misc/assetsManager.js.map +1 -1
  423. package/Misc/depthReducer.js.map +1 -1
  424. package/Misc/fileTools.js +4 -3
  425. package/Misc/fileTools.js.map +1 -1
  426. package/Misc/sceneOptimizer.js.map +1 -1
  427. package/Misc/smartArray.js.map +1 -1
  428. package/Misc/workerPool.js.map +1 -1
  429. package/Particles/EmitterTypes/cylinderParticleEmitter.js.map +1 -1
  430. package/Particles/EmitterTypes/sphereParticleEmitter.js.map +1 -1
  431. package/Particles/gpuParticleSystem.js.map +1 -1
  432. package/Particles/particleSystem.js.map +1 -1
  433. package/Particles/thinParticleSystem.js.map +1 -1
  434. package/Physics/physicsRaycastResult.js.map +1 -1
  435. package/Physics/proximityCastResult.js.map +1 -1
  436. package/Physics/v1/physicsJoint.js.map +1 -1
  437. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  438. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
  439. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  440. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  441. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  442. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  443. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js.map +1 -1
  444. package/PostProcesses/anaglyphPostProcess.js.map +1 -1
  445. package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
  446. package/PostProcesses/bloomMergePostProcess.js.map +1 -1
  447. package/PostProcesses/blurPostProcess.js.map +1 -1
  448. package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
  449. package/PostProcesses/circleOfConfusionPostProcess.js.map +1 -1
  450. package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
  451. package/PostProcesses/convolutionPostProcess.js.map +1 -1
  452. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  453. package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
  454. package/PostProcesses/displayPassPostProcess.js.map +1 -1
  455. package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
  456. package/PostProcesses/filterPostProcess.js.map +1 -1
  457. package/PostProcesses/fxaaPostProcess.js.map +1 -1
  458. package/PostProcesses/grainPostProcess.js.map +1 -1
  459. package/PostProcesses/highlightsPostProcess.js.map +1 -1
  460. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  461. package/PostProcesses/motionBlurPostProcess.js.map +1 -1
  462. package/PostProcesses/passPostProcess.js.map +1 -1
  463. package/PostProcesses/refractionPostProcess.js.map +1 -1
  464. package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
  465. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  466. package/PostProcesses/sharpenPostProcess.js.map +1 -1
  467. package/PostProcesses/stereoscopicInterlacePostProcess.js.map +1 -1
  468. package/PostProcesses/subSurfaceScatteringPostProcess.js.map +1 -1
  469. package/PostProcesses/tonemapPostProcess.js.map +1 -1
  470. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  471. package/PostProcesses/vrDistortionCorrectionPostProcess.js.map +1 -1
  472. package/PostProcesses/vrMultiviewToSingleviewPostProcess.js.map +1 -1
  473. package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
  474. package/Rendering/edgesRenderer.js.map +1 -1
  475. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
  476. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
  477. package/Rendering/reflectiveShadowMap.js.map +1 -1
  478. package/Sprites/sprite.js.map +1 -1
  479. package/Sprites/spritePackedManager.js.map +1 -1
  480. package/XR/features/Layers/WebXRCompositionLayer.js.map +1 -1
  481. package/XR/features/Layers/WebXRProjectionLayer.js.map +1 -1
  482. package/XR/features/WebXRAnchorSystem.js.map +1 -1
  483. package/XR/features/WebXRBackgroundRemover.js.map +1 -1
  484. package/XR/features/WebXRControllerMovement.js.map +1 -1
  485. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  486. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  487. package/XR/features/WebXRControllerTeleportation.js.map +1 -1
  488. package/XR/features/WebXRDOMOverlay.js.map +1 -1
  489. package/XR/features/WebXRDepthSensing.js.map +1 -1
  490. package/XR/features/WebXREyeTracking.js.map +1 -1
  491. package/XR/features/WebXRFeaturePointSystem.js.map +1 -1
  492. package/XR/features/WebXRHandTracking.js.map +1 -1
  493. package/XR/features/WebXRHitTest.js.map +1 -1
  494. package/XR/features/WebXRHitTestLegacy.js.map +1 -1
  495. package/XR/features/WebXRImageTracking.js.map +1 -1
  496. package/XR/features/WebXRLayers.js.map +1 -1
  497. package/XR/features/WebXRLightEstimation.js.map +1 -1
  498. package/XR/features/WebXRMeshDetector.js.map +1 -1
  499. package/XR/features/WebXRNearInteraction.js.map +1 -1
  500. package/XR/features/WebXRPlaneDetector.js.map +1 -1
  501. package/XR/features/WebXRRawCameraAccess.js.map +1 -1
  502. package/XR/features/WebXRSpaceWarp.js.map +1 -1
  503. package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
  504. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  505. package/XR/native/nativeXRRenderTarget.js.map +1 -1
  506. package/XR/webXRCamera.js.map +1 -1
  507. package/XR/webXRWebGLLayer.js.map +1 -1
  508. package/assets/Draco/draco_wasm_wrapper.js +115 -115
  509. package/package.json +1 -1
  510. package/scene.js.map +1 -1
@@ -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 { Scalar } from \"../../../../Maths/math.scalar\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\n/**\r\n * Block used to implement the reflection module of the PBR material\r\n */\r\nexport class ReflectionBlock extends ReflectionTextureBaseBlock {\r\n /** @internal */\r\n public _defineLODReflectionAlpha: string;\r\n /** @internal */\r\n public _defineLinearSpecularReflection: string;\r\n private _vEnvironmentIrradianceName: string;\r\n /** @internal */\r\n public _vReflectionMicrosurfaceInfosName: string;\r\n /** @internal */\r\n public _vReflectionInfosName: string;\r\n /** @internal */\r\n public _vReflectionFilteringInfoName: string;\r\n private _scene: Scene;\r\n\r\n /**\r\n * The properties below are set by the main PBR block prior to calling methods of this class.\r\n * This is to avoid having to add them as inputs here whereas they are already inputs of the main block, so already known.\r\n * It's less burden on the user side in the editor part.\r\n */\r\n\r\n /** @internal */\r\n public worldPositionConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public worldNormalConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public cameraPositionConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public viewConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * Defines if the material uses spherical harmonics vs spherical polynomials for the\r\n * diffuse part of the IBL.\r\n */\r\n @editableInPropertyPage(\"Spherical Harmonics\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { notifiers: { update: true } })\r\n public useSphericalHarmonics: boolean = true;\r\n\r\n /**\r\n * Force the shader to compute irradiance in the fragment shader in order to take bump in account.\r\n */\r\n @editableInPropertyPage(\"Force irradiance in fragment\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { notifiers: { update: true } })\r\n public forceIrradianceInFragment: boolean = false;\r\n\r\n protected _onGenerateOnlyFragmentCodeChanged(): boolean {\r\n if (this.position.isConnected) {\r\n this.generateOnlyFragmentCode = !this.generateOnlyFragmentCode;\r\n 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 _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 getClassName() {\r\n return \"ReflectionBlock\";\r\n }\r\n\r\n /**\r\n * Gets the position input component\r\n */\r\n public get position(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this.worldPositionConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the world normal input component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this.worldNormalConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the world input component\r\n */\r\n public get world(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the camera (or eye) position component\r\n */\r\n public get cameraPosition(): NodeMaterialConnectionPoint {\r\n return this.cameraPositionConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the view input component\r\n */\r\n public get view(): NodeMaterialConnectionPoint {\r\n return this.viewConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the color input component\r\n */\r\n public get color(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the reflection object output component\r\n */\r\n public get reflection(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Returns true if the block has a texture (either its own texture or the environment texture from the scene, if set)\r\n */\r\n public get hasTexture(): boolean {\r\n return !!this._getTexture();\r\n }\r\n\r\n /**\r\n * Gets the reflection color (either the name of the variable if the color input is connected, else a default value)\r\n */\r\n public get reflectionColor(): string {\r\n return this.color.isConnected ? this.color.associatedVariableName : \"vec3(1., 1., 1.)\";\r\n }\r\n\r\n protected _getTexture(): Nullable<BaseTexture> {\r\n if (this.texture) {\r\n return this.texture;\r\n }\r\n\r\n return this._scene.environmentTexture;\r\n }\r\n\r\n public prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n super.prepareDefines(mesh, nodeMaterial, defines);\r\n\r\n const reflectionTexture = this._getTexture();\r\n const reflection = reflectionTexture && reflectionTexture.getTextureMatrix;\r\n\r\n defines.setValue(\"REFLECTION\", reflection, true);\r\n\r\n if (!reflection) {\r\n return;\r\n }\r\n\r\n defines.setValue(this._defineLODReflectionAlpha, reflectionTexture!.lodLevelInAlpha, true);\r\n defines.setValue(this._defineLinearSpecularReflection, reflectionTexture!.linearSpecularLOD, true);\r\n defines.setValue(this._defineOppositeZ, this._scene.useRightHandedSystem ? !reflectionTexture!.invertZ : reflectionTexture!.invertZ, true);\r\n\r\n defines.setValue(\"SPHERICAL_HARMONICS\", this.useSphericalHarmonics, true);\r\n defines.setValue(\"GAMMAREFLECTION\", reflectionTexture!.gammaSpace, true);\r\n defines.setValue(\"RGBDREFLECTION\", reflectionTexture!.isRGBD, true);\r\n\r\n if (reflectionTexture && reflectionTexture.coordinatesMode !== Texture.SKYBOX_MODE) {\r\n if (reflectionTexture.isCube) {\r\n defines.setValue(\"USESPHERICALFROMREFLECTIONMAP\", true);\r\n defines.setValue(\"USEIRRADIANCEMAP\", false);\r\n if (this.forceIrradianceInFragment || this._scene.getEngine().getCaps().maxVaryingVectors <= 8) {\r\n defines.setValue(\"USESPHERICALINVERTEX\", false);\r\n } else {\r\n defines.setValue(\"USESPHERICALINVERTEX\", true);\r\n }\r\n }\r\n }\r\n }\r\n\r\n public bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh, subMesh?: SubMesh) {\r\n super.bind(effect, nodeMaterial, mesh);\r\n\r\n const reflectionTexture = this._getTexture();\r\n\r\n if (!reflectionTexture || !subMesh) {\r\n return;\r\n }\r\n\r\n if (reflectionTexture.isCube) {\r\n effect.setTexture(this._cubeSamplerName, reflectionTexture);\r\n } else {\r\n effect.setTexture(this._2DSamplerName, reflectionTexture);\r\n }\r\n\r\n const width = reflectionTexture.getSize().width;\r\n\r\n effect.setFloat3(this._vReflectionMicrosurfaceInfosName, width, reflectionTexture.lodGenerationScale, reflectionTexture.lodGenerationOffset);\r\n effect.setFloat2(this._vReflectionFilteringInfoName, width, Scalar.Log2(width));\r\n\r\n const defines = subMesh.materialDefines as NodeMaterialDefines;\r\n\r\n const polynomials = reflectionTexture.sphericalPolynomial;\r\n if (defines.USESPHERICALFROMREFLECTIONMAP && polynomials) {\r\n if (defines.SPHERICAL_HARMONICS) {\r\n const preScaledHarmonics = polynomials.preScaledHarmonics;\r\n effect.setVector3(\"vSphericalL00\", preScaledHarmonics.l00);\r\n effect.setVector3(\"vSphericalL1_1\", preScaledHarmonics.l1_1);\r\n effect.setVector3(\"vSphericalL10\", preScaledHarmonics.l10);\r\n effect.setVector3(\"vSphericalL11\", preScaledHarmonics.l11);\r\n effect.setVector3(\"vSphericalL2_2\", preScaledHarmonics.l2_2);\r\n effect.setVector3(\"vSphericalL2_1\", preScaledHarmonics.l2_1);\r\n effect.setVector3(\"vSphericalL20\", preScaledHarmonics.l20);\r\n effect.setVector3(\"vSphericalL21\", preScaledHarmonics.l21);\r\n effect.setVector3(\"vSphericalL22\", preScaledHarmonics.l22);\r\n } else {\r\n effect.setFloat3(\"vSphericalX\", polynomials.x.x, polynomials.x.y, polynomials.x.z);\r\n effect.setFloat3(\"vSphericalY\", polynomials.y.x, polynomials.y.y, polynomials.y.z);\r\n effect.setFloat3(\"vSphericalZ\", polynomials.z.x, polynomials.z.y, polynomials.z.z);\r\n effect.setFloat3(\"vSphericalXX_ZZ\", polynomials.xx.x - polynomials.zz.x, polynomials.xx.y - polynomials.zz.y, polynomials.xx.z - polynomials.zz.z);\r\n effect.setFloat3(\"vSphericalYY_ZZ\", polynomials.yy.x - polynomials.zz.x, polynomials.yy.y - polynomials.zz.y, polynomials.yy.z - polynomials.zz.z);\r\n effect.setFloat3(\"vSphericalZZ\", polynomials.zz.x, polynomials.zz.y, polynomials.zz.z);\r\n effect.setFloat3(\"vSphericalXY\", polynomials.xy.x, polynomials.xy.y, polynomials.xy.z);\r\n effect.setFloat3(\"vSphericalYZ\", polynomials.yz.x, polynomials.yz.y, polynomials.yz.z);\r\n effect.setFloat3(\"vSphericalZX\", polynomials.zx.x, polynomials.zx.y, polynomials.zx.z);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets the code to inject in the vertex shader\r\n * @param state current state of the node material building\r\n * @returns the shader code\r\n */\r\n public handleVertexSide(state: NodeMaterialBuildState): string {\r\n let code = super.handleVertexSide(state);\r\n\r\n state._emitFunctionFromInclude(\"harmonicsFunctions\", `//${this.name}`, {\r\n replaceStrings: [\r\n { search: /uniform vec3 vSphericalL00;[\\s\\S]*?uniform vec3 vSphericalL22;/g, replace: \"\" },\r\n { search: /uniform vec3 vSphericalX;[\\s\\S]*?uniform vec3 vSphericalZX;/g, replace: \"\" },\r\n ],\r\n });\r\n\r\n const reflectionVectorName = state._getFreeVariableName(\"reflectionVector\");\r\n\r\n this._vEnvironmentIrradianceName = state._getFreeVariableName(\"vEnvironmentIrradiance\");\r\n\r\n state._emitVaryingFromString(\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 vec3 ${reflectionVectorName} = vec3(${this._reflectionMatrixName} * vec4(normalize(${this.worldNormal.associatedVariableName}).xyz, 0)).xyz;\r\n #ifdef ${this._defineOppositeZ}\r\n ${reflectionVectorName}.z *= -1.0;\r\n #endif\r\n ${this._vEnvironmentIrradianceName} = computeEnvironmentIrradiance(${reflectionVectorName});\r\n #endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param state current state of the node material building\r\n * @param normalVarName name of the existing variable corresponding to the normal\r\n * @returns the shader code\r\n */\r\n public getCode(state: NodeMaterialBuildState, normalVarName: string): string {\r\n let code = \"\";\r\n\r\n this.handleFragmentSideInits(state);\r\n\r\n state._emitFunctionFromInclude(\"harmonicsFunctions\", `//${this.name}`, {\r\n replaceStrings: [\r\n { search: /uniform vec3 vSphericalL00;[\\s\\S]*?uniform vec3 vSphericalL22;/g, replace: \"\" },\r\n { search: /uniform vec3 vSphericalX;[\\s\\S]*?uniform vec3 vSphericalZX;/g, replace: \"\" },\r\n ],\r\n });\r\n\r\n state._emitFunction(\r\n \"sampleReflection\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleReflection(s, c) textureCube(s, c)\r\n #else\r\n #define sampleReflection(s, c) texture2D(s, c)\r\n #endif\\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 const computeReflectionCoordsFunc = `\r\n vec3 computeReflectionCoordsPBR(vec4 worldPos, vec3 worldNormal) {\r\n ${this.handleFragmentSideCodeReflectionCoords(\"worldNormal\", \"worldPos\", true, true)}\r\n return ${this._reflectionVectorName};\r\n }\\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 vec2 ${this._vReflectionInfosName} = vec2(1., 0.);\r\n\r\n reflectionOutParams reflectionOut;\r\n\r\n reflectionBlock(\r\n ${this.generateOnlyFragmentCode ? this._worldPositionNameInFragmentOnlyMode : \"v_\" + this.worldPosition.associatedVariableName}.xyz,\r\n ${normalVarName},\r\n alphaG,\r\n ${this._vReflectionMicrosurfaceInfosName},\r\n ${this._vReflectionInfosName},\r\n ${this.reflectionColor},\r\n #ifdef ANISOTROPIC\r\n anisotropicOut,\r\n #endif\r\n #if defined(${this._defineLODReflectionAlpha}) && !defined(${this._defineSkyboxName})\r\n NdotVUnclamped,\r\n #endif\r\n #ifdef ${this._defineLinearSpecularReflection}\r\n roughness,\r\n #endif\r\n #ifdef ${this._define3DName}\r\n ${this._cubeSamplerName},\r\n #else\r\n ${this._2DSamplerName},\r\n #endif\r\n #if defined(NORMAL) && defined(USESPHERICALINVERTEX)\r\n ${this._vEnvironmentIrradianceName},\r\n #endif\r\n #ifdef USESPHERICALFROMREFLECTIONMAP\r\n #if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)\r\n ${this._reflectionMatrixName},\r\n #endif\r\n #endif\r\n #ifdef USEIRRADIANCEMAP\r\n irradianceSampler, // ** not handled **\r\n #endif\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${this._define3DName}\r\n ${this._cubeSamplerName},\r\n ${this._cubeSamplerName},\r\n #else\r\n ${this._2DSamplerName},\r\n ${this._2DSamplerName},\r\n #endif\r\n #endif\r\n #ifdef REALTIME_FILTERING\r\n ${this._vReflectionFilteringInfoName},\r\n #endif\r\n reflectionOut\r\n );\r\n #endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n this._scene = state.sharedData.scene;\r\n\r\n if (state.target !== NodeMaterialBlockTargets.Fragment) {\r\n this._defineLODReflectionAlpha = state._getFreeDefineName(\"LODINREFLECTIONALPHA\");\r\n this._defineLinearSpecularReflection = state._getFreeDefineName(\"LINEARSPECULARREFLECTION\");\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (this.texture) {\r\n codeString += `${this._codeVariableName}.texture.gammaSpace = ${this.texture.gammaSpace};\\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 serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.useSphericalHarmonics = this.useSphericalHarmonics;\r\n serializationObject.forceIrradianceInFragment = this.forceIrradianceInFragment;\r\n serializationObject.gammaSpace = this.texture?.gammaSpace ?? true;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.useSphericalHarmonics = serializationObject.useSphericalHarmonics;\r\n this.forceIrradianceInFragment = serializationObject.forceIrradianceInFragment;\r\n if (this.texture) {\r\n this.texture.gammaSpace = serializationObject.gammaSpace;\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ReflectionBlock\", ReflectionBlock);\r\n"]}
1
+ {"version":3,"file":"reflectionBlock.js","sourceRoot":"","sources":["../../../../../../../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 { Scalar } from \"../../../../Maths/math.scalar\";\r\nimport { Logger } from \"core/Misc/logger\";\r\n\r\n/**\r\n * Block used to implement the reflection module of the PBR material\r\n */\r\nexport class ReflectionBlock extends ReflectionTextureBaseBlock {\r\n /** @internal */\r\n public _defineLODReflectionAlpha: string;\r\n /** @internal */\r\n public _defineLinearSpecularReflection: string;\r\n private _vEnvironmentIrradianceName: string;\r\n /** @internal */\r\n public _vReflectionMicrosurfaceInfosName: string;\r\n /** @internal */\r\n public _vReflectionInfosName: string;\r\n /** @internal */\r\n public _vReflectionFilteringInfoName: string;\r\n private _scene: Scene;\r\n\r\n /**\r\n * The properties below are set by the main PBR block prior to calling methods of this class.\r\n * This is to avoid having to add them as inputs here whereas they are already inputs of the main block, so already known.\r\n * It's less burden on the user side in the editor part.\r\n */\r\n\r\n /** @internal */\r\n public worldPositionConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public worldNormalConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public cameraPositionConnectionPoint: NodeMaterialConnectionPoint;\r\n /** @internal */\r\n public viewConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * Defines if the material uses spherical harmonics vs spherical polynomials for the\r\n * diffuse part of the IBL.\r\n */\r\n @editableInPropertyPage(\"Spherical Harmonics\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { notifiers: { update: true } })\r\n public useSphericalHarmonics: boolean = true;\r\n\r\n /**\r\n * Force the shader to compute irradiance in the fragment shader in order to take bump in account.\r\n */\r\n @editableInPropertyPage(\"Force irradiance in fragment\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { notifiers: { update: true } })\r\n public forceIrradianceInFragment: boolean = false;\r\n\r\n protected 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, Scalar.Log2(width));\r\n\r\n const defines = subMesh.materialDefines as NodeMaterialDefines;\r\n\r\n const polynomials = reflectionTexture.sphericalPolynomial;\r\n if (defines.USESPHERICALFROMREFLECTIONMAP && polynomials) {\r\n if (defines.SPHERICAL_HARMONICS) {\r\n const preScaledHarmonics = polynomials.preScaledHarmonics;\r\n effect.setVector3(\"vSphericalL00\", preScaledHarmonics.l00);\r\n effect.setVector3(\"vSphericalL1_1\", preScaledHarmonics.l1_1);\r\n effect.setVector3(\"vSphericalL10\", preScaledHarmonics.l10);\r\n effect.setVector3(\"vSphericalL11\", preScaledHarmonics.l11);\r\n effect.setVector3(\"vSphericalL2_2\", preScaledHarmonics.l2_2);\r\n effect.setVector3(\"vSphericalL2_1\", preScaledHarmonics.l2_1);\r\n effect.setVector3(\"vSphericalL20\", preScaledHarmonics.l20);\r\n effect.setVector3(\"vSphericalL21\", preScaledHarmonics.l21);\r\n effect.setVector3(\"vSphericalL22\", preScaledHarmonics.l22);\r\n } else {\r\n effect.setFloat3(\"vSphericalX\", polynomials.x.x, polynomials.x.y, polynomials.x.z);\r\n effect.setFloat3(\"vSphericalY\", polynomials.y.x, polynomials.y.y, polynomials.y.z);\r\n effect.setFloat3(\"vSphericalZ\", polynomials.z.x, polynomials.z.y, polynomials.z.z);\r\n effect.setFloat3(\"vSphericalXX_ZZ\", polynomials.xx.x - polynomials.zz.x, polynomials.xx.y - polynomials.zz.y, polynomials.xx.z - polynomials.zz.z);\r\n effect.setFloat3(\"vSphericalYY_ZZ\", polynomials.yy.x - polynomials.zz.x, polynomials.yy.y - polynomials.zz.y, polynomials.yy.z - polynomials.zz.z);\r\n effect.setFloat3(\"vSphericalZZ\", polynomials.zz.x, polynomials.zz.y, polynomials.zz.z);\r\n effect.setFloat3(\"vSphericalXY\", polynomials.xy.x, polynomials.xy.y, polynomials.xy.z);\r\n effect.setFloat3(\"vSphericalYZ\", polynomials.yz.x, polynomials.yz.y, polynomials.yz.z);\r\n effect.setFloat3(\"vSphericalZX\", polynomials.zx.x, polynomials.zx.y, polynomials.zx.z);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets the code to inject in the vertex shader\r\n * @param state current state of the node material building\r\n * @returns the shader code\r\n */\r\n public override handleVertexSide(state: NodeMaterialBuildState): string {\r\n let code = super.handleVertexSide(state);\r\n\r\n state._emitFunctionFromInclude(\"harmonicsFunctions\", `//${this.name}`, {\r\n replaceStrings: [\r\n { search: /uniform vec3 vSphericalL00;[\\s\\S]*?uniform vec3 vSphericalL22;/g, replace: \"\" },\r\n { search: /uniform vec3 vSphericalX;[\\s\\S]*?uniform vec3 vSphericalZX;/g, replace: \"\" },\r\n ],\r\n });\r\n\r\n const reflectionVectorName = state._getFreeVariableName(\"reflectionVector\");\r\n\r\n this._vEnvironmentIrradianceName = state._getFreeVariableName(\"vEnvironmentIrradiance\");\r\n\r\n state._emitVaryingFromString(\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 vec3 ${reflectionVectorName} = vec3(${this._reflectionMatrixName} * vec4(normalize(${this.worldNormal.associatedVariableName}).xyz, 0)).xyz;\r\n #ifdef ${this._defineOppositeZ}\r\n ${reflectionVectorName}.z *= -1.0;\r\n #endif\r\n ${this._vEnvironmentIrradianceName} = computeEnvironmentIrradiance(${reflectionVectorName});\r\n #endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param state current state of the node material building\r\n * @param normalVarName name of the existing variable corresponding to the normal\r\n * @returns the shader code\r\n */\r\n public getCode(state: NodeMaterialBuildState, normalVarName: string): string {\r\n let code = \"\";\r\n\r\n this.handleFragmentSideInits(state);\r\n\r\n state._emitFunctionFromInclude(\"harmonicsFunctions\", `//${this.name}`, {\r\n replaceStrings: [\r\n { search: /uniform vec3 vSphericalL00;[\\s\\S]*?uniform vec3 vSphericalL22;/g, replace: \"\" },\r\n { search: /uniform vec3 vSphericalX;[\\s\\S]*?uniform vec3 vSphericalZX;/g, replace: \"\" },\r\n ],\r\n });\r\n\r\n state._emitFunction(\r\n \"sampleReflection\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleReflection(s, c) textureCube(s, c)\r\n #else\r\n #define sampleReflection(s, c) texture2D(s, c)\r\n #endif\\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 const computeReflectionCoordsFunc = `\r\n vec3 computeReflectionCoordsPBR(vec4 worldPos, vec3 worldNormal) {\r\n ${this.handleFragmentSideCodeReflectionCoords(\"worldNormal\", \"worldPos\", true, true)}\r\n return ${this._reflectionVectorName};\r\n }\\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 vec2 ${this._vReflectionInfosName} = vec2(1., 0.);\r\n\r\n reflectionOutParams reflectionOut;\r\n\r\n reflectionBlock(\r\n ${this.generateOnlyFragmentCode ? this._worldPositionNameInFragmentOnlyMode : \"v_\" + this.worldPosition.associatedVariableName}.xyz,\r\n ${normalVarName},\r\n alphaG,\r\n ${this._vReflectionMicrosurfaceInfosName},\r\n ${this._vReflectionInfosName},\r\n ${this.reflectionColor},\r\n #ifdef ANISOTROPIC\r\n anisotropicOut,\r\n #endif\r\n #if defined(${this._defineLODReflectionAlpha}) && !defined(${this._defineSkyboxName})\r\n NdotVUnclamped,\r\n #endif\r\n #ifdef ${this._defineLinearSpecularReflection}\r\n roughness,\r\n #endif\r\n #ifdef ${this._define3DName}\r\n ${this._cubeSamplerName},\r\n #else\r\n ${this._2DSamplerName},\r\n #endif\r\n #if defined(NORMAL) && defined(USESPHERICALINVERTEX)\r\n ${this._vEnvironmentIrradianceName},\r\n #endif\r\n #ifdef USESPHERICALFROMREFLECTIONMAP\r\n #if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)\r\n ${this._reflectionMatrixName},\r\n #endif\r\n #endif\r\n #ifdef USEIRRADIANCEMAP\r\n irradianceSampler, // ** not handled **\r\n #endif\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${this._define3DName}\r\n ${this._cubeSamplerName},\r\n ${this._cubeSamplerName},\r\n #else\r\n ${this._2DSamplerName},\r\n ${this._2DSamplerName},\r\n #endif\r\n #endif\r\n #ifdef REALTIME_FILTERING\r\n ${this._vReflectionFilteringInfoName},\r\n #endif\r\n reflectionOut\r\n );\r\n #endif\\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 +1 @@
1
- {"version":3,"file":"refractionBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/refractionBlock.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 { InputBlock } from \"../Input/inputBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport type { BaseTexture } from \"../../../Textures/baseTexture\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { CubeTexture } from \"../../../Textures/cubeTexture\";\r\nimport { Texture } from \"../../../Textures/texture\";\r\nimport { NodeMaterialSystemValues } from \"../../Enums/nodeMaterialSystemValues\";\r\nimport { Scalar } from \"../../../../Maths/math.scalar\";\r\n\r\n/**\r\n * Block used to implement the refraction part of the sub surface module of the PBR material\r\n */\r\nexport class RefractionBlock extends NodeMaterialBlock {\r\n /** @internal */\r\n public _define3DName: string;\r\n /** @internal */\r\n public _refractionMatrixName: string;\r\n /** @internal */\r\n public _defineLODRefractionAlpha: string;\r\n /** @internal */\r\n public _defineLinearSpecularRefraction: string;\r\n /** @internal */\r\n public _defineOppositeZ: string;\r\n /** @internal */\r\n public _cubeSamplerName: string;\r\n /** @internal */\r\n public _2DSamplerName: string;\r\n /** @internal */\r\n public _vRefractionMicrosurfaceInfosName: string;\r\n /** @internal */\r\n public _vRefractionInfosName: string;\r\n /** @internal */\r\n public _vRefractionFilteringInfoName: string;\r\n\r\n private _scene: Scene;\r\n\r\n /**\r\n * The properties below are set by the main PBR block prior to calling methods of this class.\r\n * This is to avoid having to add them as inputs here whereas they are already inputs of the main block, so already known.\r\n * It's less burden on the user side in the editor part.\r\n */\r\n\r\n /** @internal */\r\n public viewConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /** @internal */\r\n public indexOfRefractionConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * This parameters will make the material used its opacity to control how much it is refracting against not.\r\n * Materials half opaque for instance using refraction could benefit from this control.\r\n */\r\n @editableInPropertyPage(\"Link refraction to transparency\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { notifiers: { update: true } })\r\n public linkRefractionWithTransparency: boolean = false;\r\n\r\n /**\r\n * Controls if refraction needs to be inverted on Y. This could be useful for procedural texture.\r\n */\r\n @editableInPropertyPage(\"Invert refraction Y\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { notifiers: { update: true } })\r\n public invertRefractionY: boolean = false;\r\n\r\n /**\r\n * Controls if refraction needs to be inverted on Y. This could be useful for procedural texture.\r\n */\r\n @editableInPropertyPage(\"Use thickness as depth\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { notifiers: { update: true } })\r\n public useThicknessAsDepth: boolean = false;\r\n\r\n /**\r\n * Gets or sets the texture associated with the node\r\n */\r\n public texture: Nullable<BaseTexture>;\r\n\r\n /**\r\n * Create a new RefractionBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"intensity\", NodeMaterialBlockConnectionPointTypes.Float, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"tintAtDistance\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"volumeIndexOfRefraction\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"refraction\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"refraction\", this, NodeMaterialConnectionPointDirection.Output, RefractionBlock, \"RefractionBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"vRefractionPosition\");\r\n state._excludeVariableName(\"vRefractionSize\");\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"RefractionBlock\";\r\n }\r\n\r\n /**\r\n * Gets the intensity input component\r\n */\r\n public get intensity(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the tint at distance input component\r\n */\r\n public get tintAtDistance(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the volume index of refraction input component\r\n */\r\n public get volumeIndexOfRefraction(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the view input component\r\n */\r\n public get view(): NodeMaterialConnectionPoint {\r\n return this.viewConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the refraction object output component\r\n */\r\n public get refraction(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Returns true if the block has a texture\r\n */\r\n public get hasTexture(): boolean {\r\n return !!this._getTexture();\r\n }\r\n\r\n protected _getTexture(): Nullable<BaseTexture> {\r\n if (this.texture) {\r\n return this.texture;\r\n }\r\n\r\n return this._scene.environmentTexture;\r\n }\r\n\r\n public autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!this.intensity.isConnected) {\r\n const intensityInput = new InputBlock(\"Refraction intensity\", NodeMaterialBlockTargets.Fragment, NodeMaterialBlockConnectionPointTypes.Float);\r\n intensityInput.value = 1;\r\n intensityInput.output.connectTo(this.intensity);\r\n }\r\n\r\n if (this.view && !this.view.isConnected) {\r\n let viewInput = material.getInputBlockByPredicate((b) => b.systemValue === NodeMaterialSystemValues.View && additionalFilteringInfo(b));\r\n\r\n if (!viewInput) {\r\n viewInput = new InputBlock(\"view\");\r\n viewInput.setAsSystemValue(NodeMaterialSystemValues.View);\r\n }\r\n viewInput.output.connectTo(this.view);\r\n }\r\n }\r\n\r\n public prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n super.prepareDefines(mesh, nodeMaterial, defines);\r\n\r\n const refractionTexture = this._getTexture();\r\n const refraction = refractionTexture && refractionTexture.getTextureMatrix;\r\n\r\n defines.setValue(\"SS_REFRACTION\", refraction, true);\r\n\r\n if (!refraction) {\r\n return;\r\n }\r\n\r\n defines.setValue(this._define3DName, refractionTexture!.isCube, true);\r\n defines.setValue(this._defineLODRefractionAlpha, refractionTexture!.lodLevelInAlpha, true);\r\n defines.setValue(this._defineLinearSpecularRefraction, refractionTexture!.linearSpecularLOD, true);\r\n defines.setValue(this._defineOppositeZ, this._scene.useRightHandedSystem && refractionTexture.isCube ? !refractionTexture!.invertZ : refractionTexture!.invertZ, true);\r\n\r\n defines.setValue(\"SS_LINKREFRACTIONTOTRANSPARENCY\", this.linkRefractionWithTransparency, true);\r\n defines.setValue(\"SS_GAMMAREFRACTION\", refractionTexture!.gammaSpace, true);\r\n defines.setValue(\"SS_RGBDREFRACTION\", refractionTexture!.isRGBD, true);\r\n defines.setValue(\"SS_USE_LOCAL_REFRACTIONMAP_CUBIC\", (<any>refractionTexture).boundingBoxSize ? true : false, true);\r\n defines.setValue(\"SS_USE_THICKNESS_AS_DEPTH\", this.useThicknessAsDepth, true);\r\n }\r\n\r\n public isReady() {\r\n const texture = this._getTexture();\r\n\r\n if (texture && !texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n super.bind(effect, nodeMaterial, mesh);\r\n\r\n const refractionTexture = this._getTexture();\r\n\r\n if (!refractionTexture) {\r\n return;\r\n }\r\n\r\n if (refractionTexture.isCube) {\r\n effect.setTexture(this._cubeSamplerName, refractionTexture);\r\n } else {\r\n effect.setTexture(this._2DSamplerName, refractionTexture);\r\n }\r\n\r\n effect.setMatrix(this._refractionMatrixName, refractionTexture.getRefractionTextureMatrix());\r\n\r\n let depth = 1.0;\r\n if (!refractionTexture.isCube) {\r\n if ((<any>refractionTexture).depth) {\r\n depth = (<any>refractionTexture).depth;\r\n }\r\n }\r\n\r\n const indexOfRefraction = this.volumeIndexOfRefraction.connectInputBlock?.value ?? this.indexOfRefractionConnectionPoint.connectInputBlock?.value ?? 1.5;\r\n\r\n effect.setFloat4(this._vRefractionInfosName, refractionTexture.level, 1 / indexOfRefraction, depth, this.invertRefractionY ? -1 : 1);\r\n\r\n effect.setFloat4(\r\n this._vRefractionMicrosurfaceInfosName,\r\n refractionTexture.getSize().width,\r\n refractionTexture.lodGenerationScale,\r\n refractionTexture.lodGenerationOffset,\r\n 1 / indexOfRefraction\r\n );\r\n\r\n const width = refractionTexture.getSize().width;\r\n\r\n effect.setFloat2(this._vRefractionFilteringInfoName, width, Scalar.Log2(width));\r\n\r\n if ((<any>refractionTexture).boundingBoxSize) {\r\n const cubeTexture = <CubeTexture>refractionTexture;\r\n effect.setVector3(\"vRefractionPosition\", cubeTexture.boundingBoxPosition);\r\n effect.setVector3(\"vRefractionSize\", cubeTexture.boundingBoxSize);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param state current state of the node material building\r\n * @returns the shader code\r\n */\r\n public getCode(state: NodeMaterialBuildState): string {\r\n const code = \"\";\r\n\r\n state.sharedData.blockingBlocks.push(this);\r\n state.sharedData.textureBlocks.push(this);\r\n\r\n // Samplers\r\n this._cubeSamplerName = state._getFreeVariableName(this.name + \"CubeSampler\");\r\n state.samplers.push(this._cubeSamplerName);\r\n\r\n this._2DSamplerName = state._getFreeVariableName(this.name + \"2DSampler\");\r\n state.samplers.push(this._2DSamplerName);\r\n\r\n this._define3DName = state._getFreeDefineName(\"SS_REFRACTIONMAP_3D\");\r\n\r\n state._samplerDeclaration += `#ifdef ${this._define3DName}\\n`;\r\n state._samplerDeclaration += `uniform samplerCube ${this._cubeSamplerName};\\n`;\r\n state._samplerDeclaration += `#else\\n`;\r\n state._samplerDeclaration += `uniform sampler2D ${this._2DSamplerName};\\n`;\r\n state._samplerDeclaration += `#endif\\n`;\r\n\r\n // Fragment\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n this._defineLODRefractionAlpha = state._getFreeDefineName(\"SS_LODINREFRACTIONALPHA\");\r\n this._defineLinearSpecularRefraction = state._getFreeDefineName(\"SS_LINEARSPECULARREFRACTION\");\r\n this._defineOppositeZ = state._getFreeDefineName(\"SS_REFRACTIONMAP_OPPOSITEZ\");\r\n\r\n this._refractionMatrixName = state._getFreeVariableName(\"refractionMatrix\");\r\n\r\n state._emitUniformFromString(this._refractionMatrixName, NodeMaterialBlockConnectionPointTypes.Matrix);\r\n\r\n state._emitFunction(\r\n \"sampleRefraction\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleRefraction(s, c) textureCube(s, c)\r\n #else\r\n #define sampleRefraction(s, c) texture2D(s, c)\r\n #endif\\n`,\r\n `//${this.name}`\r\n );\r\n\r\n state._emitFunction(\r\n \"sampleRefractionLod\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleRefractionLod(s, c, l) textureCubeLodEXT(s, c, l)\r\n #else\r\n #define sampleRefractionLod(s, c, l) texture2DLodEXT(s, c, l)\r\n #endif\\n`,\r\n `//${this.name}`\r\n );\r\n\r\n this._vRefractionMicrosurfaceInfosName = state._getFreeVariableName(\"vRefractionMicrosurfaceInfos\");\r\n\r\n state._emitUniformFromString(this._vRefractionMicrosurfaceInfosName, NodeMaterialBlockConnectionPointTypes.Vector4);\r\n\r\n this._vRefractionInfosName = state._getFreeVariableName(\"vRefractionInfos\");\r\n\r\n state._emitUniformFromString(this._vRefractionInfosName, NodeMaterialBlockConnectionPointTypes.Vector4);\r\n\r\n this._vRefractionFilteringInfoName = state._getFreeVariableName(\"vRefractionFilteringInfo\");\r\n\r\n state._emitUniformFromString(this._vRefractionFilteringInfoName, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n state._emitUniformFromString(\"vRefractionPosition\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n state._emitUniformFromString(\"vRefractionSize\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n return code;\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n this._scene = state.sharedData.scene;\r\n\r\n return this;\r\n }\r\n\r\n protected _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (this.texture) {\r\n if (this.texture.isCube) {\r\n codeString = `${this._codeVariableName}.texture = new BABYLON.CubeTexture(\"${this.texture.name}\");\\n`;\r\n } else {\r\n codeString = `${this._codeVariableName}.texture = new BABYLON.Texture(\"${this.texture.name}\");\\n`;\r\n }\r\n codeString += `${this._codeVariableName}.texture.coordinatesMode = ${this.texture.coordinatesMode};\\n`;\r\n }\r\n\r\n codeString += `${this._codeVariableName}.linkRefractionWithTransparency = ${this.linkRefractionWithTransparency};\\n`;\r\n codeString += `${this._codeVariableName}.invertRefractionY = ${this.invertRefractionY};\\n`;\r\n codeString += `${this._codeVariableName}.useThicknessAsDepth = ${this.useThicknessAsDepth};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n if (this.texture && !this.texture.isRenderTarget) {\r\n serializationObject.texture = this.texture.serialize();\r\n }\r\n\r\n serializationObject.linkRefractionWithTransparency = this.linkRefractionWithTransparency;\r\n serializationObject.invertRefractionY = this.invertRefractionY;\r\n serializationObject.useThicknessAsDepth = this.useThicknessAsDepth;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n if (serializationObject.texture) {\r\n rootUrl = serializationObject.texture.url.indexOf(\"data:\") === 0 ? \"\" : rootUrl;\r\n if (serializationObject.texture.isCube) {\r\n this.texture = CubeTexture.Parse(serializationObject.texture, scene, rootUrl);\r\n } else {\r\n this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl);\r\n }\r\n }\r\n\r\n this.linkRefractionWithTransparency = serializationObject.linkRefractionWithTransparency;\r\n this.invertRefractionY = serializationObject.invertRefractionY;\r\n this.useThicknessAsDepth = !!serializationObject.useThicknessAsDepth;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.RefractionBlock\", RefractionBlock);\r\n"]}
1
+ {"version":3,"file":"refractionBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/refractionBlock.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 { InputBlock } from \"../Input/inputBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport type { BaseTexture } from \"../../../Textures/baseTexture\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { CubeTexture } from \"../../../Textures/cubeTexture\";\r\nimport { Texture } from \"../../../Textures/texture\";\r\nimport { NodeMaterialSystemValues } from \"../../Enums/nodeMaterialSystemValues\";\r\nimport { Scalar } from \"../../../../Maths/math.scalar\";\r\n\r\n/**\r\n * Block used to implement the refraction part of the sub surface module of the PBR material\r\n */\r\nexport class RefractionBlock extends NodeMaterialBlock {\r\n /** @internal */\r\n public _define3DName: string;\r\n /** @internal */\r\n public _refractionMatrixName: string;\r\n /** @internal */\r\n public _defineLODRefractionAlpha: string;\r\n /** @internal */\r\n public _defineLinearSpecularRefraction: string;\r\n /** @internal */\r\n public _defineOppositeZ: string;\r\n /** @internal */\r\n public _cubeSamplerName: string;\r\n /** @internal */\r\n public _2DSamplerName: string;\r\n /** @internal */\r\n public _vRefractionMicrosurfaceInfosName: string;\r\n /** @internal */\r\n public _vRefractionInfosName: string;\r\n /** @internal */\r\n public _vRefractionFilteringInfoName: string;\r\n\r\n private _scene: Scene;\r\n\r\n /**\r\n * The properties below are set by the main PBR block prior to calling methods of this class.\r\n * This is to avoid having to add them as inputs here whereas they are already inputs of the main block, so already known.\r\n * It's less burden on the user side in the editor part.\r\n */\r\n\r\n /** @internal */\r\n public viewConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /** @internal */\r\n public indexOfRefractionConnectionPoint: NodeMaterialConnectionPoint;\r\n\r\n /**\r\n * This parameters will make the material used its opacity to control how much it is refracting against not.\r\n * Materials half opaque for instance using refraction could benefit from this control.\r\n */\r\n @editableInPropertyPage(\"Link refraction to transparency\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { notifiers: { update: true } })\r\n public linkRefractionWithTransparency: boolean = false;\r\n\r\n /**\r\n * Controls if refraction needs to be inverted on Y. This could be useful for procedural texture.\r\n */\r\n @editableInPropertyPage(\"Invert refraction Y\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { notifiers: { update: true } })\r\n public invertRefractionY: boolean = false;\r\n\r\n /**\r\n * Controls if refraction needs to be inverted on Y. This could be useful for procedural texture.\r\n */\r\n @editableInPropertyPage(\"Use thickness as depth\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { notifiers: { update: true } })\r\n public useThicknessAsDepth: boolean = false;\r\n\r\n /**\r\n * Gets or sets the texture associated with the node\r\n */\r\n public texture: Nullable<BaseTexture>;\r\n\r\n /**\r\n * Create a new RefractionBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"intensity\", NodeMaterialBlockConnectionPointTypes.Float, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"tintAtDistance\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"volumeIndexOfRefraction\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"refraction\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"refraction\", this, NodeMaterialConnectionPointDirection.Output, RefractionBlock, \"RefractionBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"vRefractionPosition\");\r\n state._excludeVariableName(\"vRefractionSize\");\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"RefractionBlock\";\r\n }\r\n\r\n /**\r\n * Gets the intensity input component\r\n */\r\n public get intensity(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the tint at distance input component\r\n */\r\n public get tintAtDistance(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the volume index of refraction input component\r\n */\r\n public get volumeIndexOfRefraction(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the view input component\r\n */\r\n public get view(): NodeMaterialConnectionPoint {\r\n return this.viewConnectionPoint;\r\n }\r\n\r\n /**\r\n * Gets the refraction object output component\r\n */\r\n public get refraction(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Returns true if the block has a texture\r\n */\r\n public get hasTexture(): boolean {\r\n return !!this._getTexture();\r\n }\r\n\r\n protected _getTexture(): Nullable<BaseTexture> {\r\n if (this.texture) {\r\n return this.texture;\r\n }\r\n\r\n return this._scene.environmentTexture;\r\n }\r\n\r\n public override autoConfigure(material: NodeMaterial, additionalFilteringInfo: (node: NodeMaterialBlock) => boolean = () => true) {\r\n if (!this.intensity.isConnected) {\r\n const intensityInput = new InputBlock(\"Refraction intensity\", NodeMaterialBlockTargets.Fragment, NodeMaterialBlockConnectionPointTypes.Float);\r\n intensityInput.value = 1;\r\n intensityInput.output.connectTo(this.intensity);\r\n }\r\n\r\n if (this.view && !this.view.isConnected) {\r\n let viewInput = material.getInputBlockByPredicate((b) => b.systemValue === NodeMaterialSystemValues.View && additionalFilteringInfo(b));\r\n\r\n if (!viewInput) {\r\n viewInput = new InputBlock(\"view\");\r\n viewInput.setAsSystemValue(NodeMaterialSystemValues.View);\r\n }\r\n viewInput.output.connectTo(this.view);\r\n }\r\n }\r\n\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n super.prepareDefines(mesh, nodeMaterial, defines);\r\n\r\n const refractionTexture = this._getTexture();\r\n const refraction = refractionTexture && refractionTexture.getTextureMatrix;\r\n\r\n defines.setValue(\"SS_REFRACTION\", refraction, true);\r\n\r\n if (!refraction) {\r\n return;\r\n }\r\n\r\n defines.setValue(this._define3DName, refractionTexture!.isCube, true);\r\n defines.setValue(this._defineLODRefractionAlpha, refractionTexture!.lodLevelInAlpha, true);\r\n defines.setValue(this._defineLinearSpecularRefraction, refractionTexture!.linearSpecularLOD, true);\r\n defines.setValue(this._defineOppositeZ, this._scene.useRightHandedSystem && refractionTexture.isCube ? !refractionTexture!.invertZ : refractionTexture!.invertZ, true);\r\n\r\n defines.setValue(\"SS_LINKREFRACTIONTOTRANSPARENCY\", this.linkRefractionWithTransparency, true);\r\n defines.setValue(\"SS_GAMMAREFRACTION\", refractionTexture!.gammaSpace, true);\r\n defines.setValue(\"SS_RGBDREFRACTION\", refractionTexture!.isRGBD, true);\r\n defines.setValue(\"SS_USE_LOCAL_REFRACTIONMAP_CUBIC\", (<any>refractionTexture).boundingBoxSize ? true : false, true);\r\n defines.setValue(\"SS_USE_THICKNESS_AS_DEPTH\", this.useThicknessAsDepth, true);\r\n }\r\n\r\n public override isReady() {\r\n const texture = this._getTexture();\r\n\r\n if (texture && !texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public override bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n super.bind(effect, nodeMaterial, mesh);\r\n\r\n const refractionTexture = this._getTexture();\r\n\r\n if (!refractionTexture) {\r\n return;\r\n }\r\n\r\n if (refractionTexture.isCube) {\r\n effect.setTexture(this._cubeSamplerName, refractionTexture);\r\n } else {\r\n effect.setTexture(this._2DSamplerName, refractionTexture);\r\n }\r\n\r\n effect.setMatrix(this._refractionMatrixName, refractionTexture.getRefractionTextureMatrix());\r\n\r\n let depth = 1.0;\r\n if (!refractionTexture.isCube) {\r\n if ((<any>refractionTexture).depth) {\r\n depth = (<any>refractionTexture).depth;\r\n }\r\n }\r\n\r\n const indexOfRefraction = this.volumeIndexOfRefraction.connectInputBlock?.value ?? this.indexOfRefractionConnectionPoint.connectInputBlock?.value ?? 1.5;\r\n\r\n effect.setFloat4(this._vRefractionInfosName, refractionTexture.level, 1 / indexOfRefraction, depth, this.invertRefractionY ? -1 : 1);\r\n\r\n effect.setFloat4(\r\n this._vRefractionMicrosurfaceInfosName,\r\n refractionTexture.getSize().width,\r\n refractionTexture.lodGenerationScale,\r\n refractionTexture.lodGenerationOffset,\r\n 1 / indexOfRefraction\r\n );\r\n\r\n const width = refractionTexture.getSize().width;\r\n\r\n effect.setFloat2(this._vRefractionFilteringInfoName, width, Scalar.Log2(width));\r\n\r\n if ((<any>refractionTexture).boundingBoxSize) {\r\n const cubeTexture = <CubeTexture>refractionTexture;\r\n effect.setVector3(\"vRefractionPosition\", cubeTexture.boundingBoxPosition);\r\n effect.setVector3(\"vRefractionSize\", cubeTexture.boundingBoxSize);\r\n }\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param state current state of the node material building\r\n * @returns the shader code\r\n */\r\n public getCode(state: NodeMaterialBuildState): string {\r\n const code = \"\";\r\n\r\n state.sharedData.blockingBlocks.push(this);\r\n state.sharedData.textureBlocks.push(this);\r\n\r\n // Samplers\r\n this._cubeSamplerName = state._getFreeVariableName(this.name + \"CubeSampler\");\r\n state.samplers.push(this._cubeSamplerName);\r\n\r\n this._2DSamplerName = state._getFreeVariableName(this.name + \"2DSampler\");\r\n state.samplers.push(this._2DSamplerName);\r\n\r\n this._define3DName = state._getFreeDefineName(\"SS_REFRACTIONMAP_3D\");\r\n\r\n state._samplerDeclaration += `#ifdef ${this._define3DName}\\n`;\r\n state._samplerDeclaration += `uniform samplerCube ${this._cubeSamplerName};\\n`;\r\n state._samplerDeclaration += `#else\\n`;\r\n state._samplerDeclaration += `uniform sampler2D ${this._2DSamplerName};\\n`;\r\n state._samplerDeclaration += `#endif\\n`;\r\n\r\n // Fragment\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n this._defineLODRefractionAlpha = state._getFreeDefineName(\"SS_LODINREFRACTIONALPHA\");\r\n this._defineLinearSpecularRefraction = state._getFreeDefineName(\"SS_LINEARSPECULARREFRACTION\");\r\n this._defineOppositeZ = state._getFreeDefineName(\"SS_REFRACTIONMAP_OPPOSITEZ\");\r\n\r\n this._refractionMatrixName = state._getFreeVariableName(\"refractionMatrix\");\r\n\r\n state._emitUniformFromString(this._refractionMatrixName, NodeMaterialBlockConnectionPointTypes.Matrix);\r\n\r\n state._emitFunction(\r\n \"sampleRefraction\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleRefraction(s, c) textureCube(s, c)\r\n #else\r\n #define sampleRefraction(s, c) texture2D(s, c)\r\n #endif\\n`,\r\n `//${this.name}`\r\n );\r\n\r\n state._emitFunction(\r\n \"sampleRefractionLod\",\r\n `\r\n #ifdef ${this._define3DName}\r\n #define sampleRefractionLod(s, c, l) textureCubeLodEXT(s, c, l)\r\n #else\r\n #define sampleRefractionLod(s, c, l) texture2DLodEXT(s, c, l)\r\n #endif\\n`,\r\n `//${this.name}`\r\n );\r\n\r\n this._vRefractionMicrosurfaceInfosName = state._getFreeVariableName(\"vRefractionMicrosurfaceInfos\");\r\n\r\n state._emitUniformFromString(this._vRefractionMicrosurfaceInfosName, NodeMaterialBlockConnectionPointTypes.Vector4);\r\n\r\n this._vRefractionInfosName = state._getFreeVariableName(\"vRefractionInfos\");\r\n\r\n state._emitUniformFromString(this._vRefractionInfosName, NodeMaterialBlockConnectionPointTypes.Vector4);\r\n\r\n this._vRefractionFilteringInfoName = state._getFreeVariableName(\"vRefractionFilteringInfo\");\r\n\r\n state._emitUniformFromString(this._vRefractionFilteringInfoName, NodeMaterialBlockConnectionPointTypes.Vector2);\r\n\r\n state._emitUniformFromString(\"vRefractionPosition\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n state._emitUniformFromString(\"vRefractionSize\", NodeMaterialBlockConnectionPointTypes.Vector3);\r\n\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n this._scene = state.sharedData.scene;\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n if (this.texture) {\r\n if (this.texture.isCube) {\r\n codeString = `${this._codeVariableName}.texture = new BABYLON.CubeTexture(\"${this.texture.name}\");\\n`;\r\n } else {\r\n codeString = `${this._codeVariableName}.texture = new BABYLON.Texture(\"${this.texture.name}\");\\n`;\r\n }\r\n codeString += `${this._codeVariableName}.texture.coordinatesMode = ${this.texture.coordinatesMode};\\n`;\r\n }\r\n\r\n codeString += `${this._codeVariableName}.linkRefractionWithTransparency = ${this.linkRefractionWithTransparency};\\n`;\r\n codeString += `${this._codeVariableName}.invertRefractionY = ${this.invertRefractionY};\\n`;\r\n codeString += `${this._codeVariableName}.useThicknessAsDepth = ${this.useThicknessAsDepth};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n if (this.texture && !this.texture.isRenderTarget) {\r\n serializationObject.texture = this.texture.serialize();\r\n }\r\n\r\n serializationObject.linkRefractionWithTransparency = this.linkRefractionWithTransparency;\r\n serializationObject.invertRefractionY = this.invertRefractionY;\r\n serializationObject.useThicknessAsDepth = this.useThicknessAsDepth;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n if (serializationObject.texture) {\r\n rootUrl = serializationObject.texture.url.indexOf(\"data:\") === 0 ? \"\" : rootUrl;\r\n if (serializationObject.texture.isCube) {\r\n this.texture = CubeTexture.Parse(serializationObject.texture, scene, rootUrl);\r\n } else {\r\n this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl);\r\n }\r\n }\r\n\r\n this.linkRefractionWithTransparency = serializationObject.linkRefractionWithTransparency;\r\n this.invertRefractionY = serializationObject.invertRefractionY;\r\n this.useThicknessAsDepth = !!serializationObject.useThicknessAsDepth;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.RefractionBlock\", RefractionBlock);\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sheenBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/sheenBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { ReflectionBlock } from \"./reflectionBlock\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport type { Nullable } from \"../../../../types\";\r\n\r\n/**\r\n * Block used to implement the sheen module of the PBR material\r\n */\r\nexport class SheenBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new SheenBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"intensity\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"color\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"roughness\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"sheen\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"sheen\", this, NodeMaterialConnectionPointDirection.Output, SheenBlock, \"SheenBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * If true, the sheen effect is layered above the base BRDF with the albedo-scaling technique.\r\n * It allows the strength of the sheen effect to not depend on the base color of the material,\r\n * making it easier to setup and tweak the effect\r\n */\r\n @editableInPropertyPage(\"Albedo scaling\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public albedoScaling: boolean = false;\r\n\r\n /**\r\n * Defines if the sheen is linked to the sheen color.\r\n */\r\n @editableInPropertyPage(\"Link sheen with albedo\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public linkSheenWithAlbedo: boolean = false;\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"sheenOut\");\r\n state._excludeVariableName(\"sheenMapData\");\r\n state._excludeVariableName(\"vSheenColor\");\r\n state._excludeVariableName(\"vSheenRoughness\");\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"SheenBlock\";\r\n }\r\n\r\n /**\r\n * Gets the intensity input component\r\n */\r\n public get intensity(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the color input component\r\n */\r\n public get color(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the roughness input component\r\n */\r\n public get roughness(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the sheen object output component\r\n */\r\n public get sheen(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n public prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n super.prepareDefines(mesh, nodeMaterial, defines);\r\n\r\n defines.setValue(\"SHEEN\", true);\r\n defines.setValue(\"SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE\", true, true);\r\n defines.setValue(\"SHEEN_LINKWITHALBEDO\", this.linkSheenWithAlbedo, true);\r\n defines.setValue(\"SHEEN_ROUGHNESS\", this.roughness.isConnected, true);\r\n defines.setValue(\"SHEEN_ALBEDOSCALING\", this.albedoScaling, true);\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param reflectionBlock instance of a ReflectionBlock null if the code must be generated without an active reflection module\r\n * @returns the shader code\r\n */\r\n public getCode(reflectionBlock: Nullable<ReflectionBlock>): string {\r\n let code = \"\";\r\n\r\n const color = this.color.isConnected ? this.color.associatedVariableName : \"vec3(1.)\";\r\n const intensity = this.intensity.isConnected ? this.intensity.associatedVariableName : \"1.\";\r\n const roughness = this.roughness.isConnected ? this.roughness.associatedVariableName : \"0.\";\r\n const texture = \"vec4(0.)\";\r\n\r\n code = `#ifdef SHEEN\r\n sheenOutParams sheenOut;\r\n\r\n vec4 vSheenColor = vec4(${color}, ${intensity});\r\n\r\n sheenBlock(\r\n vSheenColor,\r\n #ifdef SHEEN_ROUGHNESS\r\n ${roughness},\r\n #endif\r\n roughness,\r\n #ifdef SHEEN_TEXTURE\r\n ${texture},\r\n 1.0,\r\n #endif\r\n reflectance,\r\n #ifdef SHEEN_LINKWITHALBEDO\r\n baseColor,\r\n surfaceAlbedo,\r\n #endif\r\n #ifdef ENVIRONMENTBRDF\r\n NdotV,\r\n environmentBrdf,\r\n #endif\r\n #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)\r\n AARoughnessFactors,\r\n ${reflectionBlock?._vReflectionMicrosurfaceInfosName},\r\n ${reflectionBlock?._vReflectionInfosName},\r\n ${reflectionBlock?.reflectionColor},\r\n vLightingIntensity,\r\n #ifdef ${reflectionBlock?._define3DName}\r\n ${reflectionBlock?._cubeSamplerName},\r\n #else\r\n ${reflectionBlock?._2DSamplerName},\r\n #endif\r\n reflectionOut.reflectionCoords,\r\n NdotVUnclamped,\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${reflectionBlock?._define3DName}\r\n ${reflectionBlock?._cubeSamplerName},\r\n ${reflectionBlock?._cubeSamplerName},\r\n #else\r\n ${reflectionBlock?._2DSamplerName},\r\n ${reflectionBlock?._2DSamplerName},\r\n #endif\r\n #endif\r\n #if !defined(${reflectionBlock?._defineSkyboxName}) && defined(RADIANCEOCCLUSION)\r\n seo,\r\n #endif\r\n #if !defined(${reflectionBlock?._defineSkyboxName}) && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(${reflectionBlock?._define3DName})\r\n eho,\r\n #endif\r\n #endif\r\n sheenOut\r\n );\r\n\r\n #ifdef SHEEN_LINKWITHALBEDO\r\n surfaceAlbedo = sheenOut.surfaceAlbedo;\r\n #endif\r\n #endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n state.sharedData.blocksWithDefines.push(this);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n codeString += `${this._codeVariableName}.albedoScaling = ${this.albedoScaling};\\n`;\r\n codeString += `${this._codeVariableName}.linkSheenWithAlbedo = ${this.linkSheenWithAlbedo};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.albedoScaling = this.albedoScaling;\r\n serializationObject.linkSheenWithAlbedo = this.linkSheenWithAlbedo;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.albedoScaling = serializationObject.albedoScaling;\r\n this.linkSheenWithAlbedo = serializationObject.linkSheenWithAlbedo;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.SheenBlock\", SheenBlock);\r\n"]}
1
+ {"version":3,"file":"sheenBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/sheenBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../../../Decorators/nodeDecorator\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { ReflectionBlock } from \"./reflectionBlock\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport type { Nullable } from \"../../../../types\";\r\n\r\n/**\r\n * Block used to implement the sheen module of the PBR material\r\n */\r\nexport class SheenBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new SheenBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"intensity\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"color\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"roughness\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"sheen\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"sheen\", this, NodeMaterialConnectionPointDirection.Output, SheenBlock, \"SheenBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * If true, the sheen effect is layered above the base BRDF with the albedo-scaling technique.\r\n * It allows the strength of the sheen effect to not depend on the base color of the material,\r\n * making it easier to setup and tweak the effect\r\n */\r\n @editableInPropertyPage(\"Albedo scaling\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public albedoScaling: boolean = false;\r\n\r\n /**\r\n * Defines if the sheen is linked to the sheen color.\r\n */\r\n @editableInPropertyPage(\"Link sheen with albedo\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: true } })\r\n public linkSheenWithAlbedo: boolean = false;\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"sheenOut\");\r\n state._excludeVariableName(\"sheenMapData\");\r\n state._excludeVariableName(\"vSheenColor\");\r\n state._excludeVariableName(\"vSheenRoughness\");\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"SheenBlock\";\r\n }\r\n\r\n /**\r\n * Gets the intensity input component\r\n */\r\n public get intensity(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the color input component\r\n */\r\n public get color(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the roughness input component\r\n */\r\n public get roughness(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the sheen object output component\r\n */\r\n public get sheen(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n public override prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n super.prepareDefines(mesh, nodeMaterial, defines);\r\n\r\n defines.setValue(\"SHEEN\", true);\r\n defines.setValue(\"SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE\", true, true);\r\n defines.setValue(\"SHEEN_LINKWITHALBEDO\", this.linkSheenWithAlbedo, true);\r\n defines.setValue(\"SHEEN_ROUGHNESS\", this.roughness.isConnected, true);\r\n defines.setValue(\"SHEEN_ALBEDOSCALING\", this.albedoScaling, true);\r\n }\r\n\r\n /**\r\n * Gets the main code of the block (fragment side)\r\n * @param reflectionBlock instance of a ReflectionBlock null if the code must be generated without an active reflection module\r\n * @returns the shader code\r\n */\r\n public getCode(reflectionBlock: Nullable<ReflectionBlock>): string {\r\n let code = \"\";\r\n\r\n const color = this.color.isConnected ? this.color.associatedVariableName : \"vec3(1.)\";\r\n const intensity = this.intensity.isConnected ? this.intensity.associatedVariableName : \"1.\";\r\n const roughness = this.roughness.isConnected ? this.roughness.associatedVariableName : \"0.\";\r\n const texture = \"vec4(0.)\";\r\n\r\n code = `#ifdef SHEEN\r\n sheenOutParams sheenOut;\r\n\r\n vec4 vSheenColor = vec4(${color}, ${intensity});\r\n\r\n sheenBlock(\r\n vSheenColor,\r\n #ifdef SHEEN_ROUGHNESS\r\n ${roughness},\r\n #endif\r\n roughness,\r\n #ifdef SHEEN_TEXTURE\r\n ${texture},\r\n 1.0,\r\n #endif\r\n reflectance,\r\n #ifdef SHEEN_LINKWITHALBEDO\r\n baseColor,\r\n surfaceAlbedo,\r\n #endif\r\n #ifdef ENVIRONMENTBRDF\r\n NdotV,\r\n environmentBrdf,\r\n #endif\r\n #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)\r\n AARoughnessFactors,\r\n ${reflectionBlock?._vReflectionMicrosurfaceInfosName},\r\n ${reflectionBlock?._vReflectionInfosName},\r\n ${reflectionBlock?.reflectionColor},\r\n vLightingIntensity,\r\n #ifdef ${reflectionBlock?._define3DName}\r\n ${reflectionBlock?._cubeSamplerName},\r\n #else\r\n ${reflectionBlock?._2DSamplerName},\r\n #endif\r\n reflectionOut.reflectionCoords,\r\n NdotVUnclamped,\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${reflectionBlock?._define3DName}\r\n ${reflectionBlock?._cubeSamplerName},\r\n ${reflectionBlock?._cubeSamplerName},\r\n #else\r\n ${reflectionBlock?._2DSamplerName},\r\n ${reflectionBlock?._2DSamplerName},\r\n #endif\r\n #endif\r\n #if !defined(${reflectionBlock?._defineSkyboxName}) && defined(RADIANCEOCCLUSION)\r\n seo,\r\n #endif\r\n #if !defined(${reflectionBlock?._defineSkyboxName}) && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(${reflectionBlock?._define3DName})\r\n eho,\r\n #endif\r\n #endif\r\n sheenOut\r\n );\r\n\r\n #ifdef SHEEN_LINKWITHALBEDO\r\n surfaceAlbedo = sheenOut.surfaceAlbedo;\r\n #endif\r\n #endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n state.sharedData.blocksWithDefines.push(this);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected override _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n codeString += `${this._codeVariableName}.albedoScaling = ${this.albedoScaling};\\n`;\r\n codeString += `${this._codeVariableName}.linkSheenWithAlbedo = ${this.linkSheenWithAlbedo};\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.albedoScaling = this.albedoScaling;\r\n serializationObject.linkSheenWithAlbedo = this.linkSheenWithAlbedo;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public override _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.albedoScaling = serializationObject.albedoScaling;\r\n this.linkSheenWithAlbedo = serializationObject.linkSheenWithAlbedo;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.SheenBlock\", SheenBlock);\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"subSurfaceBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/subSurfaceBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { ReflectionBlock } from \"./reflectionBlock\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { RefractionBlock } from \"./refractionBlock\";\r\n\r\n/**\r\n * Block used to implement the sub surface module of the PBR material\r\n */\r\nexport class SubSurfaceBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new SubSurfaceBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"thickness\", NodeMaterialBlockConnectionPointTypes.Float, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"tintColor\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"translucencyIntensity\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"translucencyDiffusionDist\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\r\n \"refraction\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"refraction\", this, NodeMaterialConnectionPointDirection.Input, RefractionBlock, \"RefractionBlock\")\r\n );\r\n this.registerInput(\"dispersion\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"subsurface\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"subsurface\", this, NodeMaterialConnectionPointDirection.Output, SubSurfaceBlock, \"SubSurfaceBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"subSurfaceOut\");\r\n state._excludeVariableName(\"vThicknessParam\");\r\n state._excludeVariableName(\"vTintColor\");\r\n state._excludeVariableName(\"vTranslucencyColor\");\r\n state._excludeVariableName(\"vSubSurfaceIntensity\");\r\n state._excludeVariableName(\"dispersion\");\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"SubSurfaceBlock\";\r\n }\r\n\r\n /**\r\n * Gets the thickness component\r\n */\r\n public get thickness(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the tint color input component\r\n */\r\n public get tintColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the translucency intensity input component\r\n */\r\n public get translucencyIntensity(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the translucency diffusion distance input component\r\n */\r\n public get translucencyDiffusionDist(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the refraction object parameters\r\n */\r\n public get refraction(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the dispersion input component\r\n */\r\n public get dispersion(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the sub surface object output component\r\n */\r\n public get subsurface(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n public autoConfigure() {\r\n if (!this.thickness.isConnected) {\r\n const thicknessInput = new InputBlock(\"SubSurface thickness\", NodeMaterialBlockTargets.Fragment, NodeMaterialBlockConnectionPointTypes.Float);\r\n thicknessInput.value = 0;\r\n thicknessInput.output.connectTo(this.thickness);\r\n }\r\n }\r\n\r\n public prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n super.prepareDefines(mesh, nodeMaterial, defines);\r\n\r\n const translucencyEnabled = this.translucencyDiffusionDist.isConnected || this.translucencyIntensity.isConnected;\r\n\r\n defines.setValue(\"SUBSURFACE\", translucencyEnabled || this.refraction.isConnected, true);\r\n defines.setValue(\"SS_TRANSLUCENCY\", translucencyEnabled, true);\r\n defines.setValue(\"SS_THICKNESSANDMASK_TEXTURE\", false, true);\r\n defines.setValue(\"SS_REFRACTIONINTENSITY_TEXTURE\", false, true);\r\n defines.setValue(\"SS_TRANSLUCENCYINTENSITY_TEXTURE\", false, true);\r\n defines.setValue(\"SS_USE_GLTF_TEXTURES\", false, true);\r\n defines.setValue(\"SS_DISPERSION\", this.dispersion.isConnected, true);\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 ssBlock instance of a SubSurfaceBlock or null if the code must be generated without an active sub surface module\r\n * @param reflectionBlock instance of a ReflectionBlock null if the code must be generated without an active reflection module\r\n * @param worldPosVarName name of the variable holding the world position\r\n * @returns the shader code\r\n */\r\n public static GetCode(state: NodeMaterialBuildState, ssBlock: Nullable<SubSurfaceBlock>, reflectionBlock: Nullable<ReflectionBlock>, worldPosVarName: string): string {\r\n let code = \"\";\r\n\r\n const thickness = ssBlock?.thickness.isConnected ? ssBlock.thickness.associatedVariableName : \"0.\";\r\n const tintColor = ssBlock?.tintColor.isConnected ? ssBlock.tintColor.associatedVariableName : \"vec3(1.)\";\r\n const translucencyIntensity = ssBlock?.translucencyIntensity.isConnected ? ssBlock?.translucencyIntensity.associatedVariableName : \"1.\";\r\n const translucencyDiffusionDistance = ssBlock?.translucencyDiffusionDist.isConnected ? ssBlock?.translucencyDiffusionDist.associatedVariableName : \"vec3(1.)\";\r\n\r\n const refractionBlock: Nullable<RefractionBlock> = (ssBlock?.refraction.isConnected ? ssBlock?.refraction.connectedPoint?.ownerBlock : null) as Nullable<RefractionBlock>;\r\n\r\n const refractionTintAtDistance = refractionBlock?.tintAtDistance.isConnected ? refractionBlock.tintAtDistance.associatedVariableName : \"1.\";\r\n const refractionIntensity = refractionBlock?.intensity.isConnected ? refractionBlock.intensity.associatedVariableName : \"1.\";\r\n const refractionView = refractionBlock?.view.isConnected ? refractionBlock.view.associatedVariableName : \"\";\r\n\r\n const dispersion = ssBlock?.dispersion.isConnected ? ssBlock?.dispersion.associatedVariableName : \"0.0\";\r\n\r\n code += refractionBlock?.getCode(state) ?? \"\";\r\n\r\n code += `subSurfaceOutParams subSurfaceOut;\r\n\r\n #ifdef SUBSURFACE\r\n vec2 vThicknessParam = vec2(0., ${thickness});\r\n vec4 vTintColor = vec4(${tintColor}, ${refractionTintAtDistance});\r\n vec3 vSubSurfaceIntensity = vec3(${refractionIntensity}, ${translucencyIntensity}, 0.);\r\n float dispersion = ${dispersion};\r\n subSurfaceBlock(\r\n vSubSurfaceIntensity,\r\n vThicknessParam,\r\n vTintColor,\r\n normalW,\r\n specularEnvironmentReflectance,\r\n #ifdef SS_THICKNESSANDMASK_TEXTURE\r\n vec4(0.),\r\n #endif\r\n #ifdef REFLECTION\r\n #ifdef SS_TRANSLUCENCY\r\n ${reflectionBlock?._reflectionMatrixName},\r\n #ifdef USESPHERICALFROMREFLECTIONMAP\r\n #if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)\r\n reflectionOut.irradianceVector,\r\n #endif\r\n #if defined(REALTIME_FILTERING)\r\n ${reflectionBlock?._cubeSamplerName},\r\n ${reflectionBlock?._vReflectionFilteringInfoName},\r\n #endif\r\n #endif\r\n #ifdef USEIRRADIANCEMAP\r\n irradianceSampler,\r\n #endif\r\n #endif\r\n #endif\r\n #if defined(SS_REFRACTION) || defined(SS_TRANSLUCENCY)\r\n surfaceAlbedo,\r\n #endif\r\n #ifdef SS_REFRACTION\r\n ${worldPosVarName}.xyz,\r\n viewDirectionW,\r\n ${refractionView},\r\n ${refractionBlock?._vRefractionInfosName ?? \"\"},\r\n ${refractionBlock?._refractionMatrixName ?? \"\"},\r\n ${refractionBlock?._vRefractionMicrosurfaceInfosName ?? \"\"},\r\n vLightingIntensity,\r\n #ifdef SS_LINKREFRACTIONTOTRANSPARENCY\r\n alpha,\r\n #endif\r\n #ifdef ${refractionBlock?._defineLODRefractionAlpha ?? \"IGNORE\"}\r\n NdotVUnclamped,\r\n #endif\r\n #ifdef ${refractionBlock?._defineLinearSpecularRefraction ?? \"IGNORE\"}\r\n roughness,\r\n #endif\r\n alphaG,\r\n #ifdef ${refractionBlock?._define3DName ?? \"IGNORE\"}\r\n ${refractionBlock?._cubeSamplerName ?? \"\"},\r\n #else\r\n ${refractionBlock?._2DSamplerName ?? \"\"},\r\n #endif\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${refractionBlock?._define3DName ?? \"IGNORE\"}\r\n ${refractionBlock?._cubeSamplerName ?? \"\"},\r\n ${refractionBlock?._cubeSamplerName ?? \"\"},\r\n #else\r\n ${refractionBlock?._2DSamplerName ?? \"\"},\r\n ${refractionBlock?._2DSamplerName ?? \"\"},\r\n #endif\r\n #endif\r\n #ifdef ANISOTROPIC\r\n anisotropicOut,\r\n #endif\r\n #ifdef REALTIME_FILTERING\r\n ${refractionBlock?._vRefractionFilteringInfoName ?? \"\"},\r\n #endif\r\n #ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC\r\n vRefractionPosition,\r\n vRefractionSize,\r\n #endif\r\n #ifdef SS_DISPERSION\r\n dispersion,\r\n #endif\r\n #endif\r\n #ifdef SS_TRANSLUCENCY\r\n ${translucencyDiffusionDistance},\r\n vTintColor,\r\n #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE\r\n vec4(0.),\r\n #endif\r\n #endif\r\n subSurfaceOut\r\n );\r\n\r\n #ifdef SS_REFRACTION\r\n surfaceAlbedo = subSurfaceOut.surfaceAlbedo;\r\n #ifdef SS_LINKREFRACTIONTOTRANSPARENCY\r\n alpha = subSurfaceOut.alpha;\r\n #endif\r\n #endif\r\n #else\r\n subSurfaceOut.specularEnvironmentReflectance = specularEnvironmentReflectance;\r\n #endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n state.sharedData.blocksWithDefines.push(this);\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.SubSurfaceBlock\", SubSurfaceBlock);\r\n"]}
1
+ {"version":3,"file":"subSurfaceBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/PBR/subSurfaceBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { ReflectionBlock } from \"./reflectionBlock\";\r\nimport type { Nullable } from \"../../../../types\";\r\nimport { RefractionBlock } from \"./refractionBlock\";\r\n\r\n/**\r\n * Block used to implement the sub surface module of the PBR material\r\n */\r\nexport class SubSurfaceBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new SubSurfaceBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"thickness\", NodeMaterialBlockConnectionPointTypes.Float, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"tintColor\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"translucencyIntensity\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"translucencyDiffusionDist\", NodeMaterialBlockConnectionPointTypes.Color3, true, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\r\n \"refraction\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"refraction\", this, NodeMaterialConnectionPointDirection.Input, RefractionBlock, \"RefractionBlock\")\r\n );\r\n this.registerInput(\"dispersion\", NodeMaterialBlockConnectionPointTypes.Float, true, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\r\n \"subsurface\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n NodeMaterialBlockTargets.Fragment,\r\n new NodeMaterialConnectionPointCustomObject(\"subsurface\", this, NodeMaterialConnectionPointDirection.Output, SubSurfaceBlock, \"SubSurfaceBlock\")\r\n );\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"subSurfaceOut\");\r\n state._excludeVariableName(\"vThicknessParam\");\r\n state._excludeVariableName(\"vTintColor\");\r\n state._excludeVariableName(\"vTranslucencyColor\");\r\n state._excludeVariableName(\"vSubSurfaceIntensity\");\r\n state._excludeVariableName(\"dispersion\");\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 \"SubSurfaceBlock\";\r\n }\r\n\r\n /**\r\n * Gets the thickness component\r\n */\r\n public get thickness(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the tint color input component\r\n */\r\n public get tintColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the translucency intensity input component\r\n */\r\n public get translucencyIntensity(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the translucency diffusion distance input component\r\n */\r\n public get translucencyDiffusionDist(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the refraction object parameters\r\n */\r\n public get refraction(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the dispersion input component\r\n */\r\n public get dispersion(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the sub surface object output component\r\n */\r\n public get subsurface(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n public override autoConfigure() {\r\n if (!this.thickness.isConnected) {\r\n const thicknessInput = new InputBlock(\"SubSurface thickness\", NodeMaterialBlockTargets.Fragment, NodeMaterialBlockConnectionPointTypes.Float);\r\n thicknessInput.value = 0;\r\n thicknessInput.output.connectTo(this.thickness);\r\n }\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 translucencyEnabled = this.translucencyDiffusionDist.isConnected || this.translucencyIntensity.isConnected;\r\n\r\n defines.setValue(\"SUBSURFACE\", translucencyEnabled || this.refraction.isConnected, true);\r\n defines.setValue(\"SS_TRANSLUCENCY\", translucencyEnabled, true);\r\n defines.setValue(\"SS_THICKNESSANDMASK_TEXTURE\", false, true);\r\n defines.setValue(\"SS_REFRACTIONINTENSITY_TEXTURE\", false, true);\r\n defines.setValue(\"SS_TRANSLUCENCYINTENSITY_TEXTURE\", false, true);\r\n defines.setValue(\"SS_USE_GLTF_TEXTURES\", false, true);\r\n defines.setValue(\"SS_DISPERSION\", this.dispersion.isConnected, true);\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 ssBlock instance of a SubSurfaceBlock or null if the code must be generated without an active sub surface module\r\n * @param reflectionBlock instance of a ReflectionBlock null if the code must be generated without an active reflection module\r\n * @param worldPosVarName name of the variable holding the world position\r\n * @returns the shader code\r\n */\r\n public static GetCode(state: NodeMaterialBuildState, ssBlock: Nullable<SubSurfaceBlock>, reflectionBlock: Nullable<ReflectionBlock>, worldPosVarName: string): string {\r\n let code = \"\";\r\n\r\n const thickness = ssBlock?.thickness.isConnected ? ssBlock.thickness.associatedVariableName : \"0.\";\r\n const tintColor = ssBlock?.tintColor.isConnected ? ssBlock.tintColor.associatedVariableName : \"vec3(1.)\";\r\n const translucencyIntensity = ssBlock?.translucencyIntensity.isConnected ? ssBlock?.translucencyIntensity.associatedVariableName : \"1.\";\r\n const translucencyDiffusionDistance = ssBlock?.translucencyDiffusionDist.isConnected ? ssBlock?.translucencyDiffusionDist.associatedVariableName : \"vec3(1.)\";\r\n\r\n const refractionBlock: Nullable<RefractionBlock> = (ssBlock?.refraction.isConnected ? ssBlock?.refraction.connectedPoint?.ownerBlock : null) as Nullable<RefractionBlock>;\r\n\r\n const refractionTintAtDistance = refractionBlock?.tintAtDistance.isConnected ? refractionBlock.tintAtDistance.associatedVariableName : \"1.\";\r\n const refractionIntensity = refractionBlock?.intensity.isConnected ? refractionBlock.intensity.associatedVariableName : \"1.\";\r\n const refractionView = refractionBlock?.view.isConnected ? refractionBlock.view.associatedVariableName : \"\";\r\n\r\n const dispersion = ssBlock?.dispersion.isConnected ? ssBlock?.dispersion.associatedVariableName : \"0.0\";\r\n\r\n code += refractionBlock?.getCode(state) ?? \"\";\r\n\r\n code += `subSurfaceOutParams subSurfaceOut;\r\n\r\n #ifdef SUBSURFACE\r\n vec2 vThicknessParam = vec2(0., ${thickness});\r\n vec4 vTintColor = vec4(${tintColor}, ${refractionTintAtDistance});\r\n vec3 vSubSurfaceIntensity = vec3(${refractionIntensity}, ${translucencyIntensity}, 0.);\r\n float dispersion = ${dispersion};\r\n subSurfaceBlock(\r\n vSubSurfaceIntensity,\r\n vThicknessParam,\r\n vTintColor,\r\n normalW,\r\n specularEnvironmentReflectance,\r\n #ifdef SS_THICKNESSANDMASK_TEXTURE\r\n vec4(0.),\r\n #endif\r\n #ifdef REFLECTION\r\n #ifdef SS_TRANSLUCENCY\r\n ${reflectionBlock?._reflectionMatrixName},\r\n #ifdef USESPHERICALFROMREFLECTIONMAP\r\n #if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)\r\n reflectionOut.irradianceVector,\r\n #endif\r\n #if defined(REALTIME_FILTERING)\r\n ${reflectionBlock?._cubeSamplerName},\r\n ${reflectionBlock?._vReflectionFilteringInfoName},\r\n #endif\r\n #endif\r\n #ifdef USEIRRADIANCEMAP\r\n irradianceSampler,\r\n #endif\r\n #endif\r\n #endif\r\n #if defined(SS_REFRACTION) || defined(SS_TRANSLUCENCY)\r\n surfaceAlbedo,\r\n #endif\r\n #ifdef SS_REFRACTION\r\n ${worldPosVarName}.xyz,\r\n viewDirectionW,\r\n ${refractionView},\r\n ${refractionBlock?._vRefractionInfosName ?? \"\"},\r\n ${refractionBlock?._refractionMatrixName ?? \"\"},\r\n ${refractionBlock?._vRefractionMicrosurfaceInfosName ?? \"\"},\r\n vLightingIntensity,\r\n #ifdef SS_LINKREFRACTIONTOTRANSPARENCY\r\n alpha,\r\n #endif\r\n #ifdef ${refractionBlock?._defineLODRefractionAlpha ?? \"IGNORE\"}\r\n NdotVUnclamped,\r\n #endif\r\n #ifdef ${refractionBlock?._defineLinearSpecularRefraction ?? \"IGNORE\"}\r\n roughness,\r\n #endif\r\n alphaG,\r\n #ifdef ${refractionBlock?._define3DName ?? \"IGNORE\"}\r\n ${refractionBlock?._cubeSamplerName ?? \"\"},\r\n #else\r\n ${refractionBlock?._2DSamplerName ?? \"\"},\r\n #endif\r\n #ifndef LODBASEDMICROSFURACE\r\n #ifdef ${refractionBlock?._define3DName ?? \"IGNORE\"}\r\n ${refractionBlock?._cubeSamplerName ?? \"\"},\r\n ${refractionBlock?._cubeSamplerName ?? \"\"},\r\n #else\r\n ${refractionBlock?._2DSamplerName ?? \"\"},\r\n ${refractionBlock?._2DSamplerName ?? \"\"},\r\n #endif\r\n #endif\r\n #ifdef ANISOTROPIC\r\n anisotropicOut,\r\n #endif\r\n #ifdef REALTIME_FILTERING\r\n ${refractionBlock?._vRefractionFilteringInfoName ?? \"\"},\r\n #endif\r\n #ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC\r\n vRefractionPosition,\r\n vRefractionSize,\r\n #endif\r\n #ifdef SS_DISPERSION\r\n dispersion,\r\n #endif\r\n #endif\r\n #ifdef SS_TRANSLUCENCY\r\n ${translucencyDiffusionDistance},\r\n vTintColor,\r\n #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE\r\n vec4(0.),\r\n #endif\r\n #endif\r\n subSurfaceOut\r\n );\r\n\r\n #ifdef SS_REFRACTION\r\n surfaceAlbedo = subSurfaceOut.surfaceAlbedo;\r\n #ifdef SS_LINKREFRACTIONTOTRANSPARENCY\r\n alpha = subSurfaceOut.alpha;\r\n #endif\r\n #endif\r\n #else\r\n subSurfaceOut.specularEnvironmentReflectance = specularEnvironmentReflectance;\r\n #endif\\n`;\r\n\r\n return code;\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n if (state.target === NodeMaterialBlockTargets.Fragment) {\r\n state.sharedData.blocksWithDefines.push(this);\r\n }\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.SubSurfaceBlock\", SubSurfaceBlock);\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"particleBlendMultiplyBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,qCAAqC,EAAE,MAAM,mDAAmD,CAAC;AAE1G,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D;;GAEG;AACH,MAAM,OAAO,0BAA2B,SAAQ,iBAAiB;IAC7D;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAE/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,qCAAqC,CAAC,MAAM,EAAE,KAAK,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACpH,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,qCAAqC,CAAC,KAAK,EAAE,KAAK,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAC1H,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,qCAAqC,CAAC,KAAK,EAAE,KAAK,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAExH,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,qCAAqC,CAAC,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACvH,CAAC;IAED;;;OAGG;IACI,YAAY;QACf,OAAO,4BAA4B,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,KAA6B;QAC3C,KAAK,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC;IAES,WAAW,CAAC,KAA6B;QAC/C,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,KAAK,CAAC,MAAM,KAAK,wBAAwB,CAAC,MAAM,EAAE;YAClD,OAAO;SACV;QAED,KAAK,CAAC,iBAAiB,IAAI;;kBAEjB,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;sCACjB,IAAI,CAAC,UAAU,CAAC,sBAAsB,MAAM,IAAI,CAAC,YAAY,CAAC,sBAAsB;kBACxG,IAAI,CAAC,UAAU,CAAC,sBAAsB,UAAU,IAAI,CAAC,KAAK,CAAC,sBAAsB;kBACjF,IAAI,CAAC,UAAU,CAAC,sBAAsB,QAAQ,IAAI,CAAC,KAAK,CAAC,sBAAsB;;kBAE/E,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAsB;;SAErF,CAAC;QAEF,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,aAAa,CAAC,oCAAoC,EAAE,0BAA0B,CAAC,CAAC","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\n\r\n/**\r\n * Block used for the particle blend multiply section\r\n */\r\nexport class ParticleBlendMultiplyBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new ParticleBlendMultiplyBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"color\", NodeMaterialBlockConnectionPointTypes.Color4, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"alphaTexture\", NodeMaterialBlockConnectionPointTypes.Float, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"alphaColor\", NodeMaterialBlockConnectionPointTypes.Float, false, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\"blendColor\", NodeMaterialBlockConnectionPointTypes.Color4, NodeMaterialBlockTargets.Fragment);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"ParticleBlendMultiplyBlock\";\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[0];\r\n }\r\n\r\n /**\r\n * Gets the alphaTexture input component\r\n */\r\n public get alphaTexture(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the alphaColor input component\r\n */\r\n public get alphaColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the blendColor output component\r\n */\r\n public get blendColor(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"sourceAlpha\");\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (state.target === NodeMaterialBlockTargets.Vertex) {\r\n return;\r\n }\r\n\r\n state.compilationString += `\r\n #ifdef BLENDMULTIPLYMODE\r\n ${state._declareOutput(this.blendColor)};\r\n float sourceAlpha = ${this.alphaColor.associatedVariableName} * ${this.alphaTexture.associatedVariableName};\r\n ${this.blendColor.associatedVariableName}.rgb = ${this.color.associatedVariableName}.rgb * sourceAlpha + vec3(1.0) * (1.0 - sourceAlpha);\r\n ${this.blendColor.associatedVariableName}.a = ${this.color.associatedVariableName}.a;\r\n #else\r\n ${state._declareOutput(this.blendColor)} = ${this.color.associatedVariableName};\r\n #endif\r\n `;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ParticleBlendMultiplyBlock\", ParticleBlendMultiplyBlock);\r\n"]}
1
+ {"version":3,"file":"particleBlendMultiplyBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,qCAAqC,EAAE,MAAM,mDAAmD,CAAC;AAE1G,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D;;GAEG;AACH,MAAM,OAAO,0BAA2B,SAAQ,iBAAiB;IAC7D;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAE/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,qCAAqC,CAAC,MAAM,EAAE,KAAK,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACpH,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,qCAAqC,CAAC,KAAK,EAAE,KAAK,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAC1H,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,qCAAqC,CAAC,KAAK,EAAE,KAAK,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAExH,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,qCAAqC,CAAC,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACvH,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,4BAA4B,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACa,UAAU,CAAC,KAA6B;QACpD,KAAK,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,KAAK,CAAC,MAAM,KAAK,wBAAwB,CAAC,MAAM,EAAE;YAClD,OAAO;SACV;QAED,KAAK,CAAC,iBAAiB,IAAI;;kBAEjB,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC;sCACjB,IAAI,CAAC,UAAU,CAAC,sBAAsB,MAAM,IAAI,CAAC,YAAY,CAAC,sBAAsB;kBACxG,IAAI,CAAC,UAAU,CAAC,sBAAsB,UAAU,IAAI,CAAC,KAAK,CAAC,sBAAsB;kBACjF,IAAI,CAAC,UAAU,CAAC,sBAAsB,QAAQ,IAAI,CAAC,KAAK,CAAC,sBAAsB;;kBAE/E,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAsB;;SAErF,CAAC;QAEF,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,aAAa,CAAC,oCAAoC,EAAE,0BAA0B,CAAC,CAAC","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\n\r\n/**\r\n * Block used for the particle blend multiply section\r\n */\r\nexport class ParticleBlendMultiplyBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new ParticleBlendMultiplyBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"color\", NodeMaterialBlockConnectionPointTypes.Color4, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"alphaTexture\", NodeMaterialBlockConnectionPointTypes.Float, false, NodeMaterialBlockTargets.Fragment);\r\n this.registerInput(\"alphaColor\", NodeMaterialBlockConnectionPointTypes.Float, false, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\"blendColor\", NodeMaterialBlockConnectionPointTypes.Color4, NodeMaterialBlockTargets.Fragment);\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 \"ParticleBlendMultiplyBlock\";\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[0];\r\n }\r\n\r\n /**\r\n * Gets the alphaTexture input component\r\n */\r\n public get alphaTexture(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the alphaColor input component\r\n */\r\n public get alphaColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the blendColor output component\r\n */\r\n public get blendColor(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"sourceAlpha\");\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (state.target === NodeMaterialBlockTargets.Vertex) {\r\n return;\r\n }\r\n\r\n state.compilationString += `\r\n #ifdef BLENDMULTIPLYMODE\r\n ${state._declareOutput(this.blendColor)};\r\n float sourceAlpha = ${this.alphaColor.associatedVariableName} * ${this.alphaTexture.associatedVariableName};\r\n ${this.blendColor.associatedVariableName}.rgb = ${this.color.associatedVariableName}.rgb * sourceAlpha + vec3(1.0) * (1.0 - sourceAlpha);\r\n ${this.blendColor.associatedVariableName}.a = ${this.color.associatedVariableName}.a;\r\n #else\r\n ${state._declareOutput(this.blendColor)} = ${this.color.associatedVariableName};\r\n #endif\r\n `;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ParticleBlendMultiplyBlock\", ParticleBlendMultiplyBlock);\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"particleRampGradientBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Particle/particleRampGradientBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,qCAAqC,EAAE,MAAM,mDAAmD,CAAC;AAE1G,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D;;GAEG;AACH,MAAM,OAAO,yBAA0B,SAAQ,iBAAiB;IAC5D;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAE/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,qCAAqC,CAAC,MAAM,EAAE,KAAK,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAEpH,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,qCAAqC,CAAC,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACtH,CAAC;IAED;;;OAGG;IACI,YAAY;QACf,OAAO,2BAA2B,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,KAA6B;QAC3C,KAAK,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAC1C,KAAK,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAC1C,KAAK,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACxC,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACpC,KAAK,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;QACjD,KAAK,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACxC,KAAK,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;IAES,WAAW,CAAC,KAA6B;QAC/C,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,KAAK,CAAC,MAAM,KAAK,wBAAwB,CAAC,MAAM,EAAE;YAClD,OAAO;SACV;QAED,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QACpC,KAAK,CAAC,sBAAsB,CAAC,aAAa,EAAE,qCAAqC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAE3G,KAAK,CAAC,iBAAiB,IAAI;;mCAEA,IAAI,CAAC,KAAK,CAAC,sBAAsB;gCACpC,IAAI,CAAC,KAAK,CAAC,sBAAsB;;;;;;;;;;;kBAW/C,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;;kBAEpC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAsB;;SAEpF,CAAC;QAEF,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,aAAa,CAAC,mCAAmC,EAAE,yBAAyB,CAAC,CAAC","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\n\r\n/**\r\n * Block used for the particle ramp gradient section\r\n */\r\nexport class ParticleRampGradientBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new ParticleRampGradientBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"color\", NodeMaterialBlockConnectionPointTypes.Color4, false, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\"rampColor\", NodeMaterialBlockConnectionPointTypes.Color4, NodeMaterialBlockTargets.Fragment);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"ParticleRampGradientBlock\";\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[0];\r\n }\r\n\r\n /**\r\n * Gets the rampColor output component\r\n */\r\n public get rampColor(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"remapRanges\");\r\n state._excludeVariableName(\"rampSampler\");\r\n state._excludeVariableName(\"baseColor\");\r\n state._excludeVariableName(\"alpha\");\r\n state._excludeVariableName(\"remappedColorIndex\");\r\n state._excludeVariableName(\"rampColor\");\r\n state._excludeVariableName(\"finalAlpha\");\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (state.target === NodeMaterialBlockTargets.Vertex) {\r\n return;\r\n }\r\n\r\n state._emit2DSampler(\"rampSampler\");\r\n state._emitVaryingFromString(\"remapRanges\", NodeMaterialBlockConnectionPointTypes.Vector4, \"RAMPGRADIENT\");\r\n\r\n state.compilationString += `\r\n #ifdef RAMPGRADIENT\r\n vec4 baseColor = ${this.color.associatedVariableName};\r\n float alpha = ${this.color.associatedVariableName}.a;\r\n\r\n float remappedColorIndex = clamp((alpha - remapRanges.x) / remapRanges.y, 0.0, 1.0);\r\n\r\n vec4 rampColor = texture2D(rampSampler, vec2(1.0 - remappedColorIndex, 0.));\r\n baseColor.rgb *= rampColor.rgb;\r\n\r\n // Remapped alpha\r\n float finalAlpha = baseColor.a;\r\n baseColor.a = clamp((alpha * rampColor.a - remapRanges.z) / remapRanges.w, 0.0, 1.0);\r\n\r\n ${state._declareOutput(this.rampColor)} = baseColor;\r\n #else\r\n ${state._declareOutput(this.rampColor)} = ${this.color.associatedVariableName};\r\n #endif\r\n `;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ParticleRampGradientBlock\", ParticleRampGradientBlock);\r\n"]}
1
+ {"version":3,"file":"particleRampGradientBlock.js","sourceRoot":"","sources":["../../../../../../../dev/core/src/Materials/Node/Blocks/Particle/particleRampGradientBlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,qCAAqC,EAAE,MAAM,mDAAmD,CAAC;AAE1G,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAEhF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D;;GAEG;AACH,MAAM,OAAO,yBAA0B,SAAQ,iBAAiB;IAC5D;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAE/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,qCAAqC,CAAC,MAAM,EAAE,KAAK,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QAEpH,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,qCAAqC,CAAC,MAAM,EAAE,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACtH,CAAC;IAED;;;OAGG;IACa,YAAY;QACxB,OAAO,2BAA2B,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACa,UAAU,CAAC,KAA6B;QACpD,KAAK,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAC1C,KAAK,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QAC1C,KAAK,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACxC,KAAK,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACpC,KAAK,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;QACjD,KAAK,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACxC,KAAK,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;IAEkB,WAAW,CAAC,KAA6B;QACxD,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,KAAK,CAAC,MAAM,KAAK,wBAAwB,CAAC,MAAM,EAAE;YAClD,OAAO;SACV;QAED,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QACpC,KAAK,CAAC,sBAAsB,CAAC,aAAa,EAAE,qCAAqC,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAE3G,KAAK,CAAC,iBAAiB,IAAI;;mCAEA,IAAI,CAAC,KAAK,CAAC,sBAAsB;gCACpC,IAAI,CAAC,KAAK,CAAC,sBAAsB;;;;;;;;;;;kBAW/C,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC;;kBAEpC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,sBAAsB;;SAEpF,CAAC;QAEF,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,aAAa,CAAC,mCAAmC,EAAE,yBAAyB,CAAC,CAAC","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\n\r\n/**\r\n * Block used for the particle ramp gradient section\r\n */\r\nexport class ParticleRampGradientBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new ParticleRampGradientBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n this.registerInput(\"color\", NodeMaterialBlockConnectionPointTypes.Color4, false, NodeMaterialBlockTargets.Fragment);\r\n\r\n this.registerOutput(\"rampColor\", NodeMaterialBlockConnectionPointTypes.Color4, NodeMaterialBlockTargets.Fragment);\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 \"ParticleRampGradientBlock\";\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[0];\r\n }\r\n\r\n /**\r\n * Gets the rampColor output component\r\n */\r\n public get rampColor(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public override initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"remapRanges\");\r\n state._excludeVariableName(\"rampSampler\");\r\n state._excludeVariableName(\"baseColor\");\r\n state._excludeVariableName(\"alpha\");\r\n state._excludeVariableName(\"remappedColorIndex\");\r\n state._excludeVariableName(\"rampColor\");\r\n state._excludeVariableName(\"finalAlpha\");\r\n }\r\n\r\n protected override _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (state.target === NodeMaterialBlockTargets.Vertex) {\r\n return;\r\n }\r\n\r\n state._emit2DSampler(\"rampSampler\");\r\n state._emitVaryingFromString(\"remapRanges\", NodeMaterialBlockConnectionPointTypes.Vector4, \"RAMPGRADIENT\");\r\n\r\n state.compilationString += `\r\n #ifdef RAMPGRADIENT\r\n vec4 baseColor = ${this.color.associatedVariableName};\r\n float alpha = ${this.color.associatedVariableName}.a;\r\n\r\n float remappedColorIndex = clamp((alpha - remapRanges.x) / remapRanges.y, 0.0, 1.0);\r\n\r\n vec4 rampColor = texture2D(rampSampler, vec2(1.0 - remappedColorIndex, 0.));\r\n baseColor.rgb *= rampColor.rgb;\r\n\r\n // Remapped alpha\r\n float finalAlpha = baseColor.a;\r\n baseColor.a = clamp((alpha * rampColor.a - remapRanges.z) / remapRanges.w, 0.0, 1.0);\r\n\r\n ${state._declareOutput(this.rampColor)} = baseColor;\r\n #else\r\n ${state._declareOutput(this.rampColor)} = ${this.color.associatedVariableName};\r\n #endif\r\n `;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ParticleRampGradientBlock\", ParticleRampGradientBlock);\r\n"]}