@babylonjs/core 5.0.0-alpha.60 → 5.0.0-alpha.64

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 (709) hide show
  1. package/Animations/animation.d.ts +20 -0
  2. package/Animations/animation.js +99 -10
  3. package/Animations/animation.js.map +1 -1
  4. package/Animations/animationGroup.d.ts +5 -1
  5. package/Animations/animationGroup.js +19 -1
  6. package/Animations/animationGroup.js.map +1 -1
  7. package/Animations/animationKey.d.ts +4 -0
  8. package/Animations/animationKey.js +4 -0
  9. package/Animations/animationKey.js.map +1 -1
  10. package/Audio/sound.js +15 -1
  11. package/Audio/sound.js.map +1 -1
  12. package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +130 -0
  13. package/BakedVertexAnimation/bakedVertexAnimationManager.js +134 -0
  14. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -0
  15. package/BakedVertexAnimation/index.d.ts +2 -0
  16. package/BakedVertexAnimation/index.js +3 -0
  17. package/BakedVertexAnimation/index.js.map +1 -0
  18. package/BakedVertexAnimation/vertexAnimationBaker.d.ts +65 -0
  19. package/BakedVertexAnimation/vertexAnimationBaker.js +155 -0
  20. package/BakedVertexAnimation/vertexAnimationBaker.js.map +1 -0
  21. package/Behaviors/Cameras/autoRotationBehavior.d.ts +5 -0
  22. package/Behaviors/Cameras/autoRotationBehavior.js +7 -0
  23. package/Behaviors/Cameras/autoRotationBehavior.js.map +1 -1
  24. package/Behaviors/Cameras/framingBehavior.d.ts +5 -0
  25. package/Behaviors/Cameras/framingBehavior.js +8 -1
  26. package/Behaviors/Cameras/framingBehavior.js.map +1 -1
  27. package/Behaviors/Meshes/followBehavior.js +1 -1
  28. package/Behaviors/Meshes/followBehavior.js.map +1 -1
  29. package/Behaviors/Meshes/handConstraintBehavior.js +16 -12
  30. package/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
  31. package/Bones/bone.d.ts +3 -1
  32. package/Bones/bone.js +4 -1
  33. package/Bones/bone.js.map +1 -1
  34. package/Cameras/Inputs/BaseCameraPointersInput.js +4 -6
  35. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  36. package/Cameras/Inputs/flyCameraMouseInput.js +4 -4
  37. package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
  38. package/Cameras/Inputs/freeCameraMouseInput.js +4 -4
  39. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  40. package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js +1 -1
  41. package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js.map +1 -1
  42. package/Cameras/VR/vrExperienceHelper.d.ts +1 -1
  43. package/Cameras/VR/vrExperienceHelper.js +1 -1
  44. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  45. package/Cameras/camera.js +8 -2
  46. package/Cameras/camera.js.map +1 -1
  47. package/Cameras/targetCamera.js +1 -1
  48. package/Cameras/targetCamera.js.map +1 -1
  49. package/Culling/boundingBox.d.ts +4 -0
  50. package/Culling/boundingBox.js +8 -0
  51. package/Culling/boundingBox.js.map +1 -1
  52. package/Debug/physicsViewer.js +1 -1
  53. package/Debug/physicsViewer.js.map +1 -1
  54. package/Debug/skeletonViewer.js +2 -2
  55. package/Debug/skeletonViewer.js.map +1 -1
  56. package/DeviceInput/Implementations/{nativeDeviceInputWrapper.d.ts → nativeDeviceInputSystem.d.ts} +11 -22
  57. package/DeviceInput/Implementations/nativeDeviceInputSystem.js +80 -0
  58. package/DeviceInput/Implementations/nativeDeviceInputSystem.js.map +1 -0
  59. package/DeviceInput/Implementations/webDeviceInputSystem.d.ts +7 -20
  60. package/DeviceInput/Implementations/webDeviceInputSystem.js +80 -72
  61. package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
  62. package/DeviceInput/InputDevices/deviceSourceManager.d.ts +3 -2
  63. package/DeviceInput/InputDevices/deviceSourceManager.js +5 -1
  64. package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
  65. package/DeviceInput/Interfaces/inputInterfaces.d.ts +6 -13
  66. package/DeviceInput/Interfaces/inputInterfaces.js.map +1 -1
  67. package/DeviceInput/deviceInputSystem.d.ts +49 -5
  68. package/DeviceInput/deviceInputSystem.js +66 -9
  69. package/DeviceInput/deviceInputSystem.js.map +1 -1
  70. package/DeviceInput/index.d.ts +1 -1
  71. package/DeviceInput/index.js +1 -1
  72. package/DeviceInput/index.js.map +1 -1
  73. package/Engines/Extensions/engine.dynamicTexture.d.ts +2 -1
  74. package/Engines/Extensions/engine.dynamicTexture.js +2 -1
  75. package/Engines/Extensions/engine.dynamicTexture.js.map +1 -1
  76. package/Engines/Extensions/engine.multiview.js +17 -6
  77. package/Engines/Extensions/engine.multiview.js.map +1 -1
  78. package/Engines/Extensions/engine.views.d.ts +1 -1
  79. package/Engines/Extensions/engine.views.js +1 -1
  80. package/Engines/Extensions/engine.views.js.map +1 -1
  81. package/Engines/Processors/iShaderProcessor.d.ts +1 -1
  82. package/Engines/Processors/iShaderProcessor.js.map +1 -1
  83. package/Engines/Processors/shaderProcessingOptions.d.ts +5 -0
  84. package/Engines/Processors/shaderProcessingOptions.js.map +1 -1
  85. package/Engines/Processors/shaderProcessor.js +8 -2
  86. package/Engines/Processors/shaderProcessor.js.map +1 -1
  87. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +3 -11
  88. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
  89. package/Engines/WebGPU/Extensions/engine.multiRender.js +0 -4
  90. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  91. package/Engines/WebGPU/Extensions/engine.query.js +19 -3
  92. package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
  93. package/Engines/WebGPU/Extensions/engine.renderTarget.js +0 -4
  94. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  95. package/Engines/WebGPU/webgpuBufferManager.d.ts +1 -1
  96. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  97. package/Engines/WebGPU/webgpuBundleList.d.ts +13 -0
  98. package/Engines/WebGPU/webgpuBundleList.js +27 -0
  99. package/Engines/WebGPU/webgpuBundleList.js.map +1 -1
  100. package/Engines/WebGPU/webgpuCacheBindGroups.js +3 -3
  101. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  102. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +42 -61
  103. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  104. package/Engines/WebGPU/webgpuCacheSampler.js +6 -4
  105. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  106. package/Engines/WebGPU/webgpuClearQuad.js +17 -8
  107. package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
  108. package/Engines/WebGPU/webgpuComputeContext.js +2 -2
  109. package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
  110. package/Engines/WebGPU/webgpuConstants.d.ts +57 -13
  111. package/Engines/WebGPU/webgpuConstants.js +62 -13
  112. package/Engines/WebGPU/webgpuConstants.js.map +1 -1
  113. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +27 -3
  114. package/Engines/WebGPU/webgpuHardwareTexture.js +12 -2
  115. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  116. package/Engines/WebGPU/webgpuShaderProcessingContext.js +2 -0
  117. package/Engines/WebGPU/webgpuShaderProcessingContext.js.map +1 -1
  118. package/Engines/WebGPU/webgpuShaderProcessor.d.ts +2 -0
  119. package/Engines/WebGPU/webgpuShaderProcessor.js +23 -0
  120. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  121. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.d.ts +1 -0
  122. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +17 -1
  123. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  124. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.d.ts +7 -2
  125. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +16 -29
  126. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  127. package/Engines/WebGPU/webgpuSnapshotRendering.d.ts +27 -0
  128. package/Engines/WebGPU/webgpuSnapshotRendering.js +107 -0
  129. package/Engines/WebGPU/webgpuSnapshotRendering.js.map +1 -0
  130. package/Engines/WebGPU/webgpuTextureHelper.d.ts +4 -4
  131. package/Engines/WebGPU/webgpuTextureHelper.js +277 -83
  132. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  133. package/Engines/constants.d.ts +2 -0
  134. package/Engines/constants.js +2 -0
  135. package/Engines/constants.js.map +1 -1
  136. package/Engines/engine.d.ts +157 -46
  137. package/Engines/engine.js +38 -1
  138. package/Engines/engine.js.map +1 -1
  139. package/Engines/engineFeatures.d.ts +2 -0
  140. package/Engines/engineFeatures.js.map +1 -1
  141. package/Engines/index.d.ts +1 -0
  142. package/Engines/index.js +1 -0
  143. package/Engines/index.js.map +1 -1
  144. package/Engines/nativeEngine.js +34 -17
  145. package/Engines/nativeEngine.js.map +1 -1
  146. package/Engines/nullEngine.js +1 -0
  147. package/Engines/nullEngine.js.map +1 -1
  148. package/Engines/renderTargetWrapper.d.ts +1 -1
  149. package/Engines/renderTargetWrapper.js +1 -1
  150. package/Engines/renderTargetWrapper.js.map +1 -1
  151. package/Engines/thinEngine.d.ts +0 -11
  152. package/Engines/thinEngine.js +12 -40
  153. package/Engines/thinEngine.js.map +1 -1
  154. package/Engines/webgpuEngine.d.ts +11 -19
  155. package/Engines/webgpuEngine.js +46 -126
  156. package/Engines/webgpuEngine.js.map +1 -1
  157. package/Gizmos/positionGizmo.js +1 -1
  158. package/Gizmos/positionGizmo.js.map +1 -1
  159. package/Helpers/sceneHelpers.d.ts +3 -3
  160. package/Helpers/sceneHelpers.js +1 -2
  161. package/Helpers/sceneHelpers.js.map +1 -1
  162. package/Inputs/scene.inputManager.js +18 -15
  163. package/Inputs/scene.inputManager.js.map +1 -1
  164. package/Layers/effectLayer.d.ts +13 -1
  165. package/Layers/effectLayer.js +115 -65
  166. package/Layers/effectLayer.js.map +1 -1
  167. package/Layers/glowLayer.d.ts +8 -0
  168. package/Layers/glowLayer.js +7 -3
  169. package/Layers/glowLayer.js.map +1 -1
  170. package/Layers/highlightLayer.d.ts +2 -1
  171. package/Layers/highlightLayer.js +8 -3
  172. package/Layers/highlightLayer.js.map +1 -1
  173. package/Lights/Shadows/cascadedShadowGenerator.d.ts +1 -0
  174. package/Lights/Shadows/cascadedShadowGenerator.js +14 -0
  175. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  176. package/Lights/Shadows/shadowGenerator.d.ts +4 -0
  177. package/Lights/Shadows/shadowGenerator.js +31 -3
  178. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  179. package/Lights/light.js +10 -1
  180. package/Lights/light.js.map +1 -1
  181. package/Lights/pointLight.js +1 -1
  182. package/Lights/pointLight.js.map +1 -1
  183. package/Lights/spotLight.js +1 -1
  184. package/Lights/spotLight.js.map +1 -1
  185. package/Loading/Plugins/babylonFileLoader.js +20 -4
  186. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  187. package/Materials/Background/backgroundMaterial.js +1 -0
  188. package/Materials/Background/backgroundMaterial.js.map +1 -1
  189. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +10 -0
  190. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +31 -0
  191. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  192. package/Materials/Node/Blocks/Fragment/index.d.ts +2 -0
  193. package/Materials/Node/Blocks/Fragment/index.js +2 -0
  194. package/Materials/Node/Blocks/Fragment/index.js.map +1 -1
  195. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.d.ts +41 -0
  196. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +128 -0
  197. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -0
  198. package/Materials/Node/Blocks/Fragment/twirlBlock.d.ts +49 -0
  199. package/Materials/Node/Blocks/Fragment/twirlBlock.js +145 -0
  200. package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -0
  201. package/Materials/Node/Blocks/Input/inputBlock.js +1 -1
  202. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  203. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.d.ts +1 -0
  204. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js +15 -0
  205. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
  206. package/Materials/Node/Blocks/customBlock.d.ts +31 -0
  207. package/Materials/Node/Blocks/customBlock.js +144 -0
  208. package/Materials/Node/Blocks/customBlock.js.map +1 -0
  209. package/Materials/Node/Blocks/index.d.ts +2 -0
  210. package/Materials/Node/Blocks/index.js +2 -0
  211. package/Materials/Node/Blocks/index.js.map +1 -1
  212. package/Materials/Node/Blocks/vectorMergerBlock.js +4 -4
  213. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  214. package/Materials/Node/Blocks/voronoiNoiseBlock.d.ts +39 -0
  215. package/Materials/Node/Blocks/voronoiNoiseBlock.js +107 -0
  216. package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -0
  217. package/Materials/Node/Blocks/worleyNoise3DBlock.d.ts +8 -0
  218. package/Materials/Node/Blocks/worleyNoise3DBlock.js +34 -2
  219. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  220. package/Materials/Node/nodeMaterial.d.ts +1 -0
  221. package/Materials/Node/nodeMaterial.js +10 -0
  222. package/Materials/Node/nodeMaterial.js.map +1 -1
  223. package/Materials/Node/nodeMaterialBlock.js +1 -1
  224. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  225. package/Materials/Node/nodeMaterialBuildStateSharedData.d.ts +5 -0
  226. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  227. package/Materials/PBR/index.d.ts +4 -0
  228. package/Materials/PBR/index.js +4 -0
  229. package/Materials/PBR/index.js.map +1 -1
  230. package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +28 -96
  231. package/Materials/PBR/pbrAnisotropicConfiguration.js +50 -111
  232. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  233. package/Materials/PBR/pbrBRDFConfiguration.d.ts +11 -37
  234. package/Materials/PBR/pbrBRDFConfiguration.js +39 -52
  235. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  236. package/Materials/PBR/pbrBaseMaterial.d.ts +17 -74
  237. package/Materials/PBR/pbrBaseMaterial.js +75 -183
  238. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  239. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  240. package/Materials/PBR/pbrClearCoatConfiguration.d.ts +23 -98
  241. package/Materials/PBR/pbrClearCoatConfiguration.js +91 -143
  242. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  243. package/Materials/PBR/pbrSheenConfiguration.d.ts +25 -93
  244. package/Materials/PBR/pbrSheenConfiguration.js +71 -126
  245. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  246. package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +29 -104
  247. package/Materials/PBR/pbrSubSurfaceConfiguration.js +158 -204
  248. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  249. package/Materials/Textures/dynamicTexture.d.ts +3 -2
  250. package/Materials/Textures/dynamicTexture.js +5 -3
  251. package/Materials/Textures/dynamicTexture.js.map +1 -1
  252. package/Materials/Textures/hdrCubeTexture.d.ts +9 -0
  253. package/Materials/Textures/hdrCubeTexture.js +21 -5
  254. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  255. package/Materials/Textures/mirrorTexture.d.ts +2 -0
  256. package/Materials/Textures/mirrorTexture.js +13 -0
  257. package/Materials/Textures/mirrorTexture.js.map +1 -1
  258. package/Materials/Textures/renderTargetTexture.js +1 -1
  259. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  260. package/Materials/Textures/thinRenderTargetTexture.js +1 -1
  261. package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
  262. package/Materials/Textures/thinTexture.d.ts +1 -2
  263. package/Materials/Textures/thinTexture.js +2 -4
  264. package/Materials/Textures/thinTexture.js.map +1 -1
  265. package/Materials/Textures/videoTexture.d.ts +1 -1
  266. package/Materials/Textures/videoTexture.js +1 -1
  267. package/Materials/Textures/videoTexture.js.map +1 -1
  268. package/Materials/effect.d.ts +6 -1
  269. package/Materials/effect.js +4 -1
  270. package/Materials/effect.js.map +1 -1
  271. package/Materials/fresnelParameters.d.ts +1 -1
  272. package/Materials/fresnelParameters.js +1 -1
  273. package/Materials/fresnelParameters.js.map +1 -1
  274. package/Materials/imageProcessingConfiguration.d.ts +16 -1
  275. package/Materials/imageProcessingConfiguration.js +31 -0
  276. package/Materials/imageProcessingConfiguration.js.map +1 -1
  277. package/Materials/index.d.ts +4 -0
  278. package/Materials/index.js +4 -0
  279. package/Materials/index.js.map +1 -1
  280. package/Materials/material.d.ts +43 -2
  281. package/Materials/material.detailMapConfiguration.d.ts +29 -87
  282. package/Materials/material.detailMapConfiguration.js +50 -106
  283. package/Materials/material.detailMapConfiguration.js.map +1 -1
  284. package/Materials/material.js +99 -8
  285. package/Materials/material.js.map +1 -1
  286. package/Materials/materialDefines.d.ts +16 -0
  287. package/Materials/materialDefines.js +17 -5
  288. package/Materials/materialDefines.js.map +1 -1
  289. package/Materials/materialHelper.d.ts +15 -1
  290. package/Materials/materialHelper.js +40 -3
  291. package/Materials/materialHelper.js.map +1 -1
  292. package/Materials/materialPluginBase.d.ts +182 -0
  293. package/Materials/materialPluginBase.js +209 -0
  294. package/Materials/materialPluginBase.js.map +1 -0
  295. package/Materials/materialPluginEvent.d.ts +98 -0
  296. package/Materials/materialPluginEvent.js +21 -0
  297. package/Materials/materialPluginEvent.js.map +1 -0
  298. package/Materials/materialPluginFactoryExport.d.ts +40 -0
  299. package/Materials/materialPluginFactoryExport.js +75 -0
  300. package/Materials/materialPluginFactoryExport.js.map +1 -0
  301. package/Materials/materialPluginManager.d.ts +90 -0
  302. package/Materials/materialPluginManager.js +323 -0
  303. package/Materials/materialPluginManager.js.map +1 -0
  304. package/Materials/pushMaterial.d.ts +2 -2
  305. package/Materials/pushMaterial.js +7 -3
  306. package/Materials/pushMaterial.js.map +1 -1
  307. package/Materials/shaderMaterial.d.ts +7 -6
  308. package/Materials/shaderMaterial.js +71 -29
  309. package/Materials/shaderMaterial.js.map +1 -1
  310. package/Materials/shadowDepthWrapper.js +7 -7
  311. package/Materials/shadowDepthWrapper.js.map +1 -1
  312. package/Materials/standardMaterial.d.ts +15 -10
  313. package/Materials/standardMaterial.js +53 -49
  314. package/Materials/standardMaterial.js.map +1 -1
  315. package/Materials/uniformBuffer.js +1 -2
  316. package/Materials/uniformBuffer.js.map +1 -1
  317. package/Maths/math.color.d.ts +20 -0
  318. package/Maths/math.color.js +45 -2
  319. package/Maths/math.color.js.map +1 -1
  320. package/Maths/math.vector.d.ts +14 -9
  321. package/Maths/math.vector.js +36 -17
  322. package/Maths/math.vector.js.map +1 -1
  323. package/Meshes/Builders/boxBuilder.d.ts +1 -1
  324. package/Meshes/Builders/boxBuilder.js +1 -0
  325. package/Meshes/Builders/boxBuilder.js.map +1 -1
  326. package/Meshes/Builders/capsuleBuilder.d.ts +1 -1
  327. package/Meshes/Builders/capsuleBuilder.js +1 -1
  328. package/Meshes/Builders/capsuleBuilder.js.map +1 -1
  329. package/Meshes/Builders/cylinderBuilder.d.ts +17 -17
  330. package/Meshes/Builders/cylinderBuilder.js +1 -0
  331. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  332. package/Meshes/Builders/discBuilder.d.ts +1 -1
  333. package/Meshes/Builders/discBuilder.js +1 -0
  334. package/Meshes/Builders/discBuilder.js.map +1 -1
  335. package/Meshes/Builders/groundBuilder.d.ts +8 -8
  336. package/Meshes/Builders/groundBuilder.js +2 -0
  337. package/Meshes/Builders/groundBuilder.js.map +1 -1
  338. package/Meshes/Builders/hemisphereBuilder.d.ts +4 -4
  339. package/Meshes/Builders/hemisphereBuilder.js +1 -0
  340. package/Meshes/Builders/hemisphereBuilder.js.map +1 -1
  341. package/Meshes/Builders/icoSphereBuilder.d.ts +1 -1
  342. package/Meshes/Builders/icoSphereBuilder.js +1 -0
  343. package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
  344. package/Meshes/Builders/planeBuilder.d.ts +1 -1
  345. package/Meshes/Builders/planeBuilder.js +1 -0
  346. package/Meshes/Builders/planeBuilder.js.map +1 -1
  347. package/Meshes/Builders/polyhedronBuilder.d.ts +1 -1
  348. package/Meshes/Builders/polyhedronBuilder.js +1 -0
  349. package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
  350. package/Meshes/Builders/sphereBuilder.d.ts +1 -1
  351. package/Meshes/Builders/sphereBuilder.js +1 -0
  352. package/Meshes/Builders/sphereBuilder.js.map +1 -1
  353. package/Meshes/Builders/torusBuilder.d.ts +8 -8
  354. package/Meshes/Builders/torusBuilder.js +1 -0
  355. package/Meshes/Builders/torusBuilder.js.map +1 -1
  356. package/Meshes/Builders/torusKnotBuilder.d.ts +11 -11
  357. package/Meshes/Builders/torusKnotBuilder.js +1 -0
  358. package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
  359. package/Meshes/abstractMesh.d.ts +23 -3
  360. package/Meshes/abstractMesh.js +79 -29
  361. package/Meshes/abstractMesh.js.map +1 -1
  362. package/Meshes/geometry.d.ts +3 -0
  363. package/Meshes/geometry.js +15 -7
  364. package/Meshes/geometry.js.map +1 -1
  365. package/Meshes/linesMesh.d.ts +1 -3
  366. package/Meshes/linesMesh.js +5 -36
  367. package/Meshes/linesMesh.js.map +1 -1
  368. package/Meshes/mesh.d.ts +12 -0
  369. package/Meshes/mesh.js +186 -117
  370. package/Meshes/mesh.js.map +1 -1
  371. package/Meshes/mesh.lts.d.ts +8 -8
  372. package/Meshes/mesh.lts.js.map +1 -1
  373. package/Meshes/mesh.vertexData.d.ts +6 -1
  374. package/Meshes/mesh.vertexData.js +295 -114
  375. package/Meshes/mesh.vertexData.js.map +1 -1
  376. package/Meshes/thinInstanceMesh.js +6 -5
  377. package/Meshes/thinInstanceMesh.js.map +1 -1
  378. package/Meshes/transformNode.d.ts +8 -8
  379. package/Meshes/transformNode.js +41 -26
  380. package/Meshes/transformNode.js.map +1 -1
  381. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.d.ts +2 -1
  382. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +38 -33
  383. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
  384. package/Misc/PerformanceViewer/performanceViewerCollector.d.ts +29 -4
  385. package/Misc/PerformanceViewer/performanceViewerCollector.js +36 -12
  386. package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
  387. package/Misc/assetsManager.d.ts +4 -4
  388. package/Misc/assetsManager.js +2 -2
  389. package/Misc/assetsManager.js.map +1 -1
  390. package/Misc/basis.d.ts +2 -2
  391. package/Misc/basis.js +20 -4
  392. package/Misc/basis.js.map +1 -1
  393. package/Misc/coroutine.d.ts +41 -0
  394. package/Misc/coroutine.js +136 -0
  395. package/Misc/coroutine.js.map +1 -0
  396. package/Misc/index.d.ts +1 -0
  397. package/Misc/index.js +1 -0
  398. package/Misc/index.js.map +1 -1
  399. package/Misc/interfaces/iPerfViewer.d.ts +4 -0
  400. package/Misc/interfaces/iPerfViewer.js.map +1 -1
  401. package/Misc/observableCoroutine.d.ts +9 -10
  402. package/Misc/observableCoroutine.js +34 -39
  403. package/Misc/observableCoroutine.js.map +1 -1
  404. package/Misc/sceneSerializer.js +1 -3
  405. package/Misc/sceneSerializer.js.map +1 -1
  406. package/Misc/tools.d.ts +2 -4
  407. package/Misc/tools.js +6 -10
  408. package/Misc/tools.js.map +1 -1
  409. package/Particles/particleSystem.js +22 -16
  410. package/Particles/particleSystem.js.map +1 -1
  411. package/Particles/solidParticleSystem.js +29 -5
  412. package/Particles/solidParticleSystem.js.map +1 -1
  413. package/Particles/subEmitter.js +1 -0
  414. package/Particles/subEmitter.js.map +1 -1
  415. package/Physics/Plugins/ammoJSPlugin.js +10 -8
  416. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  417. package/PostProcesses/imageProcessingPostProcess.js +1 -0
  418. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  419. package/Probes/reflectionProbe.d.ts +2 -0
  420. package/Probes/reflectionProbe.js +21 -0
  421. package/Probes/reflectionProbe.js.map +1 -1
  422. package/Rendering/boundingBoxRenderer.d.ts +3 -0
  423. package/Rendering/boundingBoxRenderer.js +49 -14
  424. package/Rendering/boundingBoxRenderer.js.map +1 -1
  425. package/Rendering/depthPeelingRenderer.d.ts +4 -1
  426. package/Rendering/depthPeelingRenderer.js +34 -9
  427. package/Rendering/depthPeelingRenderer.js.map +1 -1
  428. package/Rendering/depthRenderer.d.ts +1 -1
  429. package/Rendering/depthRenderer.js +2 -2
  430. package/Rendering/depthRenderer.js.map +1 -1
  431. package/Rendering/edgesRenderer.js +3 -1
  432. package/Rendering/edgesRenderer.js.map +1 -1
  433. package/Rendering/geometryBufferRenderer.d.ts +0 -2
  434. package/Rendering/geometryBufferRenderer.js +13 -10
  435. package/Rendering/geometryBufferRenderer.js.map +1 -1
  436. package/Rendering/prePassRenderer.js +6 -6
  437. package/Rendering/prePassRenderer.js.map +1 -1
  438. package/Rendering/renderingGroup.js +5 -1
  439. package/Rendering/renderingGroup.js.map +1 -1
  440. package/Shaders/ShadersInclude/bakedVertexAnimation.d.ts +5 -0
  441. package/Shaders/ShadersInclude/bakedVertexAnimation.js +7 -0
  442. package/Shaders/ShadersInclude/bakedVertexAnimation.js.map +1 -0
  443. package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.d.ts +5 -0
  444. package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.js +7 -0
  445. package/Shaders/ShadersInclude/bakedVertexAnimationDeclaration.js.map +1 -0
  446. package/Shaders/ShadersInclude/bonesDeclaration.js +1 -1
  447. package/Shaders/ShadersInclude/bonesDeclaration.js.map +1 -1
  448. package/Shaders/ShadersInclude/bonesVertex.js +1 -1
  449. package/Shaders/ShadersInclude/bonesVertex.js.map +1 -1
  450. package/Shaders/ShadersInclude/defaultFragmentDeclaration.js +1 -1
  451. package/Shaders/ShadersInclude/defaultFragmentDeclaration.js.map +1 -1
  452. package/Shaders/ShadersInclude/defaultUboDeclaration.js +1 -1
  453. package/Shaders/ShadersInclude/defaultUboDeclaration.js.map +1 -1
  454. package/Shaders/ShadersInclude/defaultVertexDeclaration.js +1 -1
  455. package/Shaders/ShadersInclude/defaultVertexDeclaration.js.map +1 -1
  456. package/Shaders/ShadersInclude/pbrBlockImageProcessing.js +1 -1
  457. package/Shaders/ShadersInclude/pbrBlockImageProcessing.js.map +1 -1
  458. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +1 -1
  459. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
  460. package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
  461. package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  462. package/Shaders/ShadersInclude/pbrVertexDeclaration.js +1 -1
  463. package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
  464. package/Shaders/anaglyph.fragment.js +1 -1
  465. package/Shaders/anaglyph.fragment.js.map +1 -1
  466. package/Shaders/background.fragment.js +1 -1
  467. package/Shaders/background.fragment.js.map +1 -1
  468. package/Shaders/background.vertex.d.ts +2 -0
  469. package/Shaders/background.vertex.js +3 -1
  470. package/Shaders/background.vertex.js.map +1 -1
  471. package/Shaders/blackAndWhite.fragment.js +1 -1
  472. package/Shaders/blackAndWhite.fragment.js.map +1 -1
  473. package/Shaders/bloomMerge.fragment.js +1 -1
  474. package/Shaders/bloomMerge.fragment.js.map +1 -1
  475. package/Shaders/blur.fragment.js +1 -1
  476. package/Shaders/blur.fragment.js.map +1 -1
  477. package/Shaders/boundingBoxRenderer.fragment.js +1 -1
  478. package/Shaders/boundingBoxRenderer.fragment.js.map +1 -1
  479. package/Shaders/boundingBoxRenderer.vertex.js +1 -1
  480. package/Shaders/boundingBoxRenderer.vertex.js.map +1 -1
  481. package/Shaders/chromaticAberration.fragment.js +1 -1
  482. package/Shaders/chromaticAberration.fragment.js.map +1 -1
  483. package/Shaders/circleOfConfusion.fragment.js +1 -1
  484. package/Shaders/circleOfConfusion.fragment.js.map +1 -1
  485. package/Shaders/clearQuad.vertex.js +1 -1
  486. package/Shaders/clearQuad.vertex.js.map +1 -1
  487. package/Shaders/color.fragment.js +1 -1
  488. package/Shaders/color.fragment.js.map +1 -1
  489. package/Shaders/color.vertex.d.ts +2 -0
  490. package/Shaders/color.vertex.js +3 -1
  491. package/Shaders/color.vertex.js.map +1 -1
  492. package/Shaders/colorCorrection.fragment.js +1 -1
  493. package/Shaders/colorCorrection.fragment.js.map +1 -1
  494. package/Shaders/convolution.fragment.js +1 -1
  495. package/Shaders/convolution.fragment.js.map +1 -1
  496. package/Shaders/default.fragment.js +1 -1
  497. package/Shaders/default.fragment.js.map +1 -1
  498. package/Shaders/default.vertex.d.ts +2 -0
  499. package/Shaders/default.vertex.js +3 -1
  500. package/Shaders/default.vertex.js.map +1 -1
  501. package/Shaders/depth.fragment.js +1 -1
  502. package/Shaders/depth.fragment.js.map +1 -1
  503. package/Shaders/depth.vertex.d.ts +2 -0
  504. package/Shaders/depth.vertex.js +3 -1
  505. package/Shaders/depth.vertex.js.map +1 -1
  506. package/Shaders/depthBoxBlur.fragment.js +1 -1
  507. package/Shaders/depthBoxBlur.fragment.js.map +1 -1
  508. package/Shaders/depthOfField.fragment.js +1 -1
  509. package/Shaders/depthOfField.fragment.js.map +1 -1
  510. package/Shaders/depthOfFieldMerge.fragment.js +1 -1
  511. package/Shaders/depthOfFieldMerge.fragment.js.map +1 -1
  512. package/Shaders/displayPass.fragment.js +1 -1
  513. package/Shaders/displayPass.fragment.js.map +1 -1
  514. package/Shaders/extractHighlights.fragment.js +1 -1
  515. package/Shaders/extractHighlights.fragment.js.map +1 -1
  516. package/Shaders/filter.fragment.js +1 -1
  517. package/Shaders/filter.fragment.js.map +1 -1
  518. package/Shaders/fxaa.vertex.js +1 -1
  519. package/Shaders/fxaa.vertex.js.map +1 -1
  520. package/Shaders/geometry.vertex.d.ts +2 -0
  521. package/Shaders/geometry.vertex.js +3 -1
  522. package/Shaders/geometry.vertex.js.map +1 -1
  523. package/Shaders/glowBlurPostProcess.fragment.js +1 -1
  524. package/Shaders/glowBlurPostProcess.fragment.js.map +1 -1
  525. package/Shaders/glowMapGeneration.fragment.js +1 -1
  526. package/Shaders/glowMapGeneration.fragment.js.map +1 -1
  527. package/Shaders/glowMapGeneration.vertex.d.ts +2 -0
  528. package/Shaders/glowMapGeneration.vertex.js +3 -1
  529. package/Shaders/glowMapGeneration.vertex.js.map +1 -1
  530. package/Shaders/glowMapMerge.fragment.js +1 -1
  531. package/Shaders/glowMapMerge.fragment.js.map +1 -1
  532. package/Shaders/glowMapMerge.vertex.js +1 -1
  533. package/Shaders/glowMapMerge.vertex.js.map +1 -1
  534. package/Shaders/grain.fragment.js +1 -1
  535. package/Shaders/grain.fragment.js.map +1 -1
  536. package/Shaders/hdrFiltering.vertex.js +1 -1
  537. package/Shaders/hdrFiltering.vertex.js.map +1 -1
  538. package/Shaders/highlights.fragment.js +1 -1
  539. package/Shaders/highlights.fragment.js.map +1 -1
  540. package/Shaders/imageProcessing.fragment.js +1 -1
  541. package/Shaders/imageProcessing.fragment.js.map +1 -1
  542. package/Shaders/kernelBlur.fragment.js +1 -1
  543. package/Shaders/kernelBlur.fragment.js.map +1 -1
  544. package/Shaders/kernelBlur.vertex.js +1 -1
  545. package/Shaders/kernelBlur.vertex.js.map +1 -1
  546. package/Shaders/layer.fragment.js +1 -1
  547. package/Shaders/layer.fragment.js.map +1 -1
  548. package/Shaders/layer.vertex.js +1 -1
  549. package/Shaders/layer.vertex.js.map +1 -1
  550. package/Shaders/lensFlare.fragment.js +1 -1
  551. package/Shaders/lensFlare.fragment.js.map +1 -1
  552. package/Shaders/lensFlare.vertex.js +1 -1
  553. package/Shaders/lensFlare.vertex.js.map +1 -1
  554. package/Shaders/lensHighlights.fragment.js +1 -1
  555. package/Shaders/lensHighlights.fragment.js.map +1 -1
  556. package/Shaders/line.fragment.js +1 -1
  557. package/Shaders/line.fragment.js.map +1 -1
  558. package/Shaders/line.vertex.js +1 -1
  559. package/Shaders/line.vertex.js.map +1 -1
  560. package/Shaders/minmaxRedux.fragment.js +1 -1
  561. package/Shaders/minmaxRedux.fragment.js.map +1 -1
  562. package/Shaders/motionBlur.fragment.js +1 -1
  563. package/Shaders/motionBlur.fragment.js.map +1 -1
  564. package/Shaders/noise.fragment.js +1 -1
  565. package/Shaders/noise.fragment.js.map +1 -1
  566. package/Shaders/outline.fragment.js +1 -1
  567. package/Shaders/outline.fragment.js.map +1 -1
  568. package/Shaders/outline.vertex.d.ts +2 -0
  569. package/Shaders/outline.vertex.js +3 -1
  570. package/Shaders/outline.vertex.js.map +1 -1
  571. package/Shaders/particles.fragment.js +1 -1
  572. package/Shaders/particles.fragment.js.map +1 -1
  573. package/Shaders/particles.vertex.js +1 -1
  574. package/Shaders/particles.vertex.js.map +1 -1
  575. package/Shaders/pass.fragment.js +1 -1
  576. package/Shaders/pass.fragment.js.map +1 -1
  577. package/Shaders/passCube.fragment.js +1 -1
  578. package/Shaders/passCube.fragment.js.map +1 -1
  579. package/Shaders/pbr.fragment.js +1 -1
  580. package/Shaders/pbr.fragment.js.map +1 -1
  581. package/Shaders/pbr.vertex.d.ts +2 -0
  582. package/Shaders/pbr.vertex.js +3 -1
  583. package/Shaders/pbr.vertex.js.map +1 -1
  584. package/Shaders/postprocess.vertex.js +1 -1
  585. package/Shaders/postprocess.vertex.js.map +1 -1
  586. package/Shaders/procedural.vertex.js +1 -1
  587. package/Shaders/procedural.vertex.js.map +1 -1
  588. package/Shaders/rgbdDecode.fragment.js +1 -1
  589. package/Shaders/rgbdDecode.fragment.js.map +1 -1
  590. package/Shaders/rgbdEncode.fragment.js +1 -1
  591. package/Shaders/rgbdEncode.fragment.js.map +1 -1
  592. package/Shaders/screenSpaceCurvature.fragment.js +1 -1
  593. package/Shaders/screenSpaceCurvature.fragment.js.map +1 -1
  594. package/Shaders/shadowMap.fragment.js +1 -1
  595. package/Shaders/shadowMap.fragment.js.map +1 -1
  596. package/Shaders/shadowMap.vertex.d.ts +2 -0
  597. package/Shaders/shadowMap.vertex.js +3 -1
  598. package/Shaders/shadowMap.vertex.js.map +1 -1
  599. package/Shaders/sharpen.fragment.js +1 -1
  600. package/Shaders/sharpen.fragment.js.map +1 -1
  601. package/Shaders/sprites.fragment.js +1 -1
  602. package/Shaders/sprites.fragment.js.map +1 -1
  603. package/Shaders/sprites.vertex.js +1 -1
  604. package/Shaders/sprites.vertex.js.map +1 -1
  605. package/Shaders/ssaoCombine.fragment.js +1 -1
  606. package/Shaders/ssaoCombine.fragment.js.map +1 -1
  607. package/Shaders/standard.fragment.js +1 -1
  608. package/Shaders/standard.fragment.js.map +1 -1
  609. package/Shaders/stereoscopicInterlace.fragment.js +1 -1
  610. package/Shaders/stereoscopicInterlace.fragment.js.map +1 -1
  611. package/Shaders/subSurfaceScattering.fragment.js +1 -1
  612. package/Shaders/subSurfaceScattering.fragment.js.map +1 -1
  613. package/Shaders/tonemap.fragment.js +1 -1
  614. package/Shaders/tonemap.fragment.js.map +1 -1
  615. package/Shaders/volumetricLightScattering.fragment.js +1 -1
  616. package/Shaders/volumetricLightScattering.fragment.js.map +1 -1
  617. package/Shaders/volumetricLightScatteringPass.fragment.js +1 -1
  618. package/Shaders/volumetricLightScatteringPass.fragment.js.map +1 -1
  619. package/Shaders/volumetricLightScatteringPass.vertex.d.ts +2 -0
  620. package/Shaders/volumetricLightScatteringPass.vertex.js +3 -1
  621. package/Shaders/volumetricLightScatteringPass.vertex.js.map +1 -1
  622. package/Shaders/vrDistortionCorrection.fragment.js +1 -1
  623. package/Shaders/vrDistortionCorrection.fragment.js.map +1 -1
  624. package/Shaders/vrMultiviewToSingleview.fragment.js +1 -1
  625. package/Shaders/vrMultiviewToSingleview.fragment.js.map +1 -1
  626. package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.d.ts +5 -0
  627. package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js +7 -0
  628. package/ShadersWGSL/ShadersInclude/bakedVertexAnimation.js.map +1 -0
  629. package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.d.ts +5 -0
  630. package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js +7 -0
  631. package/ShadersWGSL/ShadersInclude/bakedVertexAnimationDeclaration.js.map +1 -0
  632. package/ShadersWGSL/ShadersInclude/bonesDeclaration.js +1 -1
  633. package/ShadersWGSL/ShadersInclude/bonesDeclaration.js.map +1 -1
  634. package/ShadersWGSL/ShadersInclude/bonesVertex.js +1 -1
  635. package/ShadersWGSL/ShadersInclude/bonesVertex.js.map +1 -1
  636. package/ShadersWGSL/ShadersInclude/clipPlaneFragment.d.ts +5 -0
  637. package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js +7 -0
  638. package/ShadersWGSL/ShadersInclude/clipPlaneFragment.js.map +1 -0
  639. package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.d.ts +5 -0
  640. package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js +7 -0
  641. package/ShadersWGSL/ShadersInclude/clipPlaneFragmentDeclaration.js.map +1 -0
  642. package/ShadersWGSL/ShadersInclude/clipPlaneVertex.d.ts +5 -0
  643. package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js +7 -0
  644. package/ShadersWGSL/ShadersInclude/clipPlaneVertex.js.map +1 -0
  645. package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.d.ts +5 -0
  646. package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js +7 -0
  647. package/ShadersWGSL/ShadersInclude/clipPlaneVertexDeclaration.js.map +1 -0
  648. package/XR/features/WebXRControllerPointerSelection.d.ts +14 -0
  649. package/XR/features/WebXRControllerPointerSelection.js +55 -21
  650. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  651. package/XR/features/WebXRHandTracking.d.ts +2 -0
  652. package/XR/features/WebXRHandTracking.js +34 -14
  653. package/XR/features/WebXRHandTracking.js.map +1 -1
  654. package/XR/features/WebXRLayers.d.ts +78 -0
  655. package/XR/features/WebXRLayers.js +243 -0
  656. package/XR/features/WebXRLayers.js.map +1 -0
  657. package/XR/features/WebXRNearInteraction.d.ts +1 -0
  658. package/XR/features/WebXRNearInteraction.js +2 -0
  659. package/XR/features/WebXRNearInteraction.js.map +1 -1
  660. package/XR/features/WebXRPlaneDetector.js +8 -12
  661. package/XR/features/WebXRPlaneDetector.js.map +1 -1
  662. package/XR/features/index.d.ts +1 -0
  663. package/XR/features/index.js +1 -0
  664. package/XR/features/index.js.map +1 -1
  665. package/XR/native/index.d.ts +1 -0
  666. package/XR/native/index.js +2 -0
  667. package/XR/native/index.js.map +1 -0
  668. package/XR/native/nativeXRRenderTarget.d.ts +44 -0
  669. package/XR/native/nativeXRRenderTarget.js +81 -0
  670. package/XR/native/nativeXRRenderTarget.js.map +1 -0
  671. package/XR/webXRCamera.js +2 -10
  672. package/XR/webXRCamera.js.map +1 -1
  673. package/XR/webXRExperienceHelper.js +15 -13
  674. package/XR/webXRExperienceHelper.js.map +1 -1
  675. package/XR/webXRFeaturesManager.d.ts +4 -0
  676. package/XR/webXRFeaturesManager.js +5 -1
  677. package/XR/webXRFeaturesManager.js.map +1 -1
  678. package/XR/webXRLayerWrapper.d.ts +48 -0
  679. package/XR/webXRLayerWrapper.js +60 -0
  680. package/XR/webXRLayerWrapper.js.map +1 -0
  681. package/XR/webXRManagedOutputCanvas.d.ts +2 -1
  682. package/XR/webXRManagedOutputCanvas.js +36 -29
  683. package/XR/webXRManagedOutputCanvas.js.map +1 -1
  684. package/XR/webXRRenderTargetTextureProvider.d.ts +55 -0
  685. package/XR/webXRRenderTargetTextureProvider.js +63 -0
  686. package/XR/webXRRenderTargetTextureProvider.js.map +1 -0
  687. package/XR/webXRSessionManager.d.ts +30 -7
  688. package/XR/webXRSessionManager.js +62 -64
  689. package/XR/webXRSessionManager.js.map +1 -1
  690. package/XR/webXRTypes.d.ts +1 -1
  691. package/XR/webXRTypes.js.map +1 -1
  692. package/XR/webXRWebGLLayer.d.ts +36 -0
  693. package/XR/webXRWebGLLayer.js +69 -0
  694. package/XR/webXRWebGLLayer.js.map +1 -0
  695. package/abstractScene.d.ts +1 -1
  696. package/abstractScene.js +1 -1
  697. package/abstractScene.js.map +1 -1
  698. package/index.d.ts +1 -0
  699. package/index.js +1 -0
  700. package/index.js.map +1 -1
  701. package/node.d.ts +30 -1
  702. package/node.js +12 -0
  703. package/node.js.map +1 -1
  704. package/package.json +87 -6
  705. package/scene.d.ts +14 -0
  706. package/scene.js +31 -0
  707. package/scene.js.map +1 -1
  708. package/DeviceInput/Implementations/nativeDeviceInputWrapper.js +0 -66
  709. package/DeviceInput/Implementations/nativeDeviceInputWrapper.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"pbrSubSurfaceConfiguration.js","sourceRoot":"","sources":["../../../../sourceES6/core/Materials/PBR/pbrSubSurfaceConfiguration.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAChI,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAKhD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AA6CrD;;GAEG;AACH;IA2PI;;;;;OAKG;IACH,oCAAY,+BAA2C,EAAE,qBAAiC,EAAE,KAAY;QA/PhG,yBAAoB,GAAG,KAAK,CAAC;QACrC;;WAEG;QAGI,wBAAmB,GAAG,KAAK,CAAC;QAE3B,2BAAsB,GAAG,KAAK,CAAC;QACvC;;WAEG;QAGI,0BAAqB,GAAG,KAAK,CAAC;QAE7B,yBAAoB,GAAG,KAAK,CAAC;QACrC;;WAEG;QAGI,wBAAmB,GAAG,KAAK,CAAC;QAG3B,qCAAgC,GAAG,CAAC,CAAC;QA0B7C;;;;WAIG;QAEI,wBAAmB,GAAW,CAAC,CAAC;QAEvC;;;;WAIG;QAEI,0BAAqB,GAAW,CAAC,CAAC;QAEzC;;WAEG;QAEI,8BAAyB,GAAY,KAAK,CAAC;QAElD;;WAEG;QAEI,gCAA2B,GAAY,KAAK,CAAC;QAE5C,sBAAiB,GAA0B,IAAI,CAAC;QACxD;;;;;;WAMG;QAGI,qBAAgB,GAA0B,IAAI,CAAC;QAE9C,uBAAkB,GAA0B,IAAI,CAAC;QACzD;;WAEG;QAGI,sBAAiB,GAA0B,IAAI,CAAC;QAE/C,uBAAkB,GAAG,GAAG,CAAC;QACjC;;;;;;;WAOG;QAGI,sBAAiB,GAAG,GAAG,CAAC;QAGvB,6BAAwB,GAAG,CAAC,GAAG,CAAC;QAwBhC,uBAAkB,GAAG,KAAK,CAAC;QACnC;;WAEG;QAGI,sBAAiB,GAAG,KAAK,CAAC;QAEzB,oCAA+B,GAAG,KAAK,CAAC;QAChD;;;WAGG;QAGI,mCAA8B,GAAG,KAAK,CAAC;QAE9C;;;WAGG;QAEI,qBAAgB,GAAW,CAAC,CAAC;QAEpC;;WAEG;QAEI,qBAAgB,GAAW,CAAC,CAAC;QAEpC;;WAEG;QAEI,wBAAmB,GAAG,KAAK,CAAC;QAEnC;;;UAGE;QAEK,cAAS,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAElC;;;WAGG;QAEI,wBAAmB,GAAG,CAAC,CAAC;QAE/B;;;WAGG;QAEI,sBAAiB,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAElC,iCAA4B,GAAG,KAAK,CAAC;QAC7C;;;;;WAKG;QAGI,gCAA2B,GAAY,KAAK,CAAC;QAE5C,gCAA2B,GAA0B,IAAI,CAAC;QAClE;;;WAGG;QAGI,+BAA0B,GAA0B,IAAI,CAAC;QAExD,kCAA6B,GAA0B,IAAI,CAAC;QACpE;;;WAGG;QAGI,iCAA4B,GAA0B,IAAI,CAAC;QAG1D,0BAAqB,GAAG,KAAK,CAAC;QACtC;;;;;WAKG;QAGI,yBAAoB,GAAY,KAAK,CAAC;QAuBzC,IAAI,CAAC,wCAAwC,GAAG,+BAA+B,CAAC;QAChF,IAAI,CAAC,8BAA8B,GAAG,qBAAqB,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IApOD,sBAAW,kEAA0B;QAJrC;;;WAGG;aACH;YACI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE;gBACtC,OAAO,IAAI,CAAC;aACf;YAED,OAAO,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,wBAAwB,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC/G,CAAC;aAED,UAAsC,CAAmB;YACrD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE,EAAE;gBAC3C,gBAAgB;gBAChB,OAAO;aACV;YAED,uDAAuD;YACvD,IAAI,CAAC,EAAE;gBACH,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC,MAAM,CAAC,uBAAwB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;aACvG;QACL,CAAC;;;OAZA;IAsFD,sBAAW,+DAAuB;QARlC;;;;;;WAMG;aAEH;YACI,IAAI,IAAI,CAAC,wBAAwB,IAAI,GAAG,EAAE;gBACtC,OAAO,IAAI,CAAC,wBAAwB,CAAC;aACxC;YACD,OAAO,IAAI,CAAC,kBAAkB,CAAC;QACnC,CAAC;aACD,UAAmC,KAAa;YAC5C,IAAI,KAAK,IAAI,GAAG,EAAE;gBACd,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;aACzC;iBAAM;gBACH,IAAI,CAAC,wBAAwB,GAAG,CAAC,GAAG,CAAC;aACxC;QACL,CAAC;;;OAPA;IA+GD,cAAc;IACP,qEAAgC,GAAvC;QACI,IAAI,CAAC,wCAAwC,EAAE,CAAC;IACpD,CAAC;IACD,cAAc;IACP,2DAAsB,GAA7B;QACI,IAAI,CAAC,wCAAwC,EAAE,CAAC;QAChD,IAAI,CAAC,8BAA8B,EAAE,CAAC;IAC1C,CAAC;IAcD;;;;;OAKG;IACI,sDAAiB,GAAxB,UAAyB,OAAmC,EAAE,KAAY;QACtE,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC1F,OAAO,IAAI,CAAC;SACf;QAED,IAAI,OAAO,CAAC,iBAAiB,EAAE;YAC3B,IAAI,KAAK,CAAC,eAAe,EAAE;gBACvB,IAAI,IAAI,CAAC,iBAAiB,IAAI,aAAa,CAAC,uBAAuB,EAAE;oBACjE,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,EAAE;wBAChD,OAAO,KAAK,CAAC;qBAChB;iBACJ;gBAED,IAAI,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAC1D,IAAI,iBAAiB,IAAI,aAAa,CAAC,wBAAwB,EAAE;oBAC7D,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,EAAE;wBAC3C,OAAO,KAAK,CAAC;qBAChB;iBACJ;aACJ;SACJ;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,mDAAc,GAArB,UAAsB,OAAmC,EAAE,KAAY;QACnE,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC1F,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;YAC3B,OAAO,CAAC,eAAe,GAAG,KAAK,CAAC;YAChC,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC;YAC9B,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC;YAC9B,OAAO;SACV;QAED,IAAI,OAAO,CAAC,iBAAiB,EAAE;YAC3B,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;YAE3B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC;YACtD,OAAO,CAAC,0CAA0C,GAAG,KAAK,CAAC;YAC3D,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC;YAClD,OAAO,CAAC,2BAA2B,GAAG,KAAK,CAAC;YAC5C,OAAO,CAAC,8BAA8B,GAAG,KAAK,CAAC;YAC/C,OAAO,CAAC,gCAAgC,GAAG,KAAK,CAAC;YACjD,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;YACjC,OAAO,CAAC,8BAA8B,GAAG,KAAK,CAAC;YAC/C,OAAO,CAAC,oBAAoB,GAAG,KAAK,CAAC;YACrC,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC;YAC9B,OAAO,CAAC,wCAAwC,GAAG,KAAK,CAAC;YACzD,OAAO,CAAC,mBAAmB,GAAG,KAAK,CAAC;YACpC,OAAO,CAAC,kBAAkB,GAAG,KAAK,CAAC;YACnC,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAClC,OAAO,CAAC,2BAA2B,GAAG,KAAK,CAAC;YAC5C,OAAO,CAAC,0BAA0B,GAAG,KAAK,CAAC;YAC3C,OAAO,CAAC,uBAAuB,GAAG,KAAK,CAAC;YACxC,OAAO,CAAC,+BAA+B,GAAG,KAAK,CAAC;YAChD,OAAO,CAAC,0BAA0B,GAAG,KAAK,CAAC;YAC3C,OAAO,CAAC,4BAA4B,GAAG,KAAK,CAAC;YAC7C,OAAO,CAAC,gCAAgC,GAAG,KAAK,CAAC;YACjD,OAAO,CAAC,yBAAyB,GAAG,KAAK,CAAC;YAE1C,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,oBAAoB,EAAE;gBACvF,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;gBAE1B,IAAM,4CAA4C,GAC9C,CAAC,CAAC,IAAI,CAAC,iBAAiB;oBACxB,CAAC,CAAC,IAAI,CAAC,2BAA2B;oBAClC,IAAI,CAAC,2BAA2B,CAAC,2BAA2B,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,2BAA2B,CAAC,QAAQ,KAAK,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;gBAE1K,IAAM,8CAA8C,GAChD,CAAC,CAAC,IAAI,CAAC,iBAAiB;oBACxB,CAAC,CAAC,IAAI,CAAC,6BAA6B;oBACpC,IAAI,CAAC,6BAA6B,CAAC,2BAA2B,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,6BAA6B,CAAC,QAAQ,KAAK,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;gBAE9K,sKAAsK;gBACtK,IAAM,uBAAuB,GAAG,CAAC,4CAA4C,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,8CAA8C,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;gBAE/M,IAAI,OAAO,CAAC,iBAAiB,EAAE;oBAC3B,IAAI,KAAK,CAAC,eAAe,EAAE;wBACvB,IAAI,IAAI,CAAC,iBAAiB,IAAI,aAAa,CAAC,uBAAuB,EAAE;4BACjE,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,6BAA6B,CAAC,CAAC;yBAC5G;wBAED,IAAI,IAAI,CAAC,2BAA2B,IAAI,aAAa,CAAC,iCAAiC,IAAI,CAAC,uBAAuB,EAAE;4BACjH,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC,2BAA2B,EAAE,OAAO,EAAE,gCAAgC,CAAC,CAAC;yBACzH;wBAED,IAAI,IAAI,CAAC,6BAA6B,IAAI,aAAa,CAAC,mCAAmC,IAAI,CAAC,uBAAuB,EAAE;4BACrH,cAAc,CAAC,yBAAyB,CAAC,IAAI,CAAC,6BAA6B,EAAE,OAAO,EAAE,kCAAkC,CAAC,CAAC;yBAC7H;qBACJ;iBACJ;gBAED,OAAO,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,CAAC;gBACnF,OAAO,CAAC,8BAA8B,GAAG,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,uBAAuB,CAAC;gBACtL,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,qBAAqB,CAAC;gBAC1D,OAAO,CAAC,wCAAwC,GAAG,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,IAAI,uBAAuB,CAAC;gBACxJ,OAAO,CAAC,0CAA0C,GAAG,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,uBAAuB,CAAC;aAC/J;YAED,IAAI,IAAI,CAAC,oBAAoB,EAAE;gBAC3B,IAAI,KAAK,CAAC,eAAe,EAAE;oBACvB,IAAI,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;oBAC1D,IAAI,iBAAiB,IAAI,aAAa,CAAC,wBAAwB,EAAE;wBAC7D,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;wBAC7B,OAAO,CAAC,mBAAmB,GAAG,iBAAiB,CAAC,MAAM,CAAC;wBACvD,OAAO,CAAC,kBAAkB,GAAG,iBAAiB,CAAC,UAAU,CAAC;wBAC1D,OAAO,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC;wBACrD,OAAO,CAAC,2BAA2B,GAAG,iBAAiB,CAAC,iBAAiB,CAAC;wBAC1E,OAAO,CAAC,0BAA0B,GAAG,iBAAiB,CAAC,OAAO,CAAC;wBAC/D,OAAO,CAAC,uBAAuB,GAAG,iBAAiB,CAAC,eAAe,CAAC;wBACpE,OAAO,CAAC,+BAA+B,GAAG,IAAI,CAAC,+BAA+B,CAAC;wBAC/E,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,yBAAyB,CAAC;wBACpE,OAAO,CAAC,gCAAgC,GAAG,iBAAiB,CAAC,MAAM,IAAU,iBAAkB,CAAC,eAAe,CAAC;wBAChH,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,mBAAmB,CAAC;qBAChE;iBACJ;aACJ;YAED,IAAI,IAAI,CAAC,sBAAsB,EAAE;gBAC7B,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC,2BAA2B,CAAC;aAC3E;SACJ;IACL,CAAC;IAED;;;;;;;;;MASE;IACK,mDAAc,GAArB,UAAsB,aAA4B,EAAE,KAAY,EAAE,MAAc,EAAE,QAAiB,EAAE,oBAA6B,EAAE,iBAA0B,EAAE,OAAgB;QAC5K,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;YAC1F,OAAO;SACV;QAED,IAAM,OAAO,GAAG,OAAQ,CAAC,eAAwD,CAAC;QAElF,IAAI,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAE1D,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,QAAQ,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE;YAC7D,IAAI,IAAI,CAAC,iBAAiB,IAAI,aAAa,CAAC,uBAAuB,EAAE;gBACjE,aAAa,CAAC,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBACrH,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;aACxF;YAED,IAAI,IAAI,CAAC,2BAA2B,IAAI,aAAa,CAAC,iCAAiC,IAAI,OAAO,CAAC,8BAA8B,EAAE;gBAC/H,aAAa,CAAC,YAAY,CAAC,2BAA2B,EAAE,IAAI,CAAC,2BAA2B,CAAC,gBAAgB,EAAE,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;gBACnJ,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,2BAA2B,EAAE,aAAa,EAAE,qBAAqB,CAAC,CAAC;aAC5G;YAED,IAAI,IAAI,CAAC,6BAA6B,IAAI,aAAa,CAAC,mCAAmC,IAAI,OAAO,CAAC,gCAAgC,EAAE;gBACrI,aAAa,CAAC,YAAY,CAAC,6BAA6B,EAAE,IAAI,CAAC,6BAA6B,CAAC,gBAAgB,EAAE,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;gBACzJ,cAAc,CAAC,iBAAiB,CAAC,IAAI,CAAC,6BAA6B,EAAE,aAAa,EAAE,uBAAuB,CAAC,CAAC;aAChH;YAED,OAAO,CAAC,gBAAgB,EAAE,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAE7E,IAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEzI,aAAa,CAAC,YAAY,CAAC,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,GAAG,cAAc,EAAE,CAAC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,cAAc,CAAC,CAAC;YAExJ,IAAI,iBAAiB,IAAI,aAAa,CAAC,wBAAwB,EAAE;gBAC7D,aAAa,CAAC,YAAY,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,0BAA0B,EAAE,CAAC,CAAC;gBAE/F,IAAI,KAAK,GAAG,GAAG,CAAC;gBAChB,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;oBAC3B,IAAU,iBAAkB,CAAC,KAAK,EAAE;wBAChC,KAAK,GAAS,iBAAkB,CAAC,KAAK,CAAC;qBAC1C;iBACJ;gBAED,IAAI,KAAK,GAAG,iBAAiB,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC;gBAC9C,IAAI,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC;gBACjD,aAAa,CAAC,YAAY,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,KAAK,EAAE,CAAC,GAAG,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpI,aAAa,CAAC,YAAY,CAAC,8BAA8B,EACrD,KAAK,EACL,iBAAiB,CAAC,kBAAkB,EACpC,iBAAiB,CAAC,mBAAmB,EACrC,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAElC,IAAI,iBAAiB,EAAE;oBACnB,aAAa,CAAC,YAAY,CAAC,0BAA0B,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;iBACrF;gBAED,IAAU,iBAAkB,CAAC,eAAe,EAAE;oBAC1C,IAAI,WAAW,GAAgB,iBAAiB,CAAC;oBAEjD,aAAa,CAAC,aAAa,CAAC,qBAAqB,EAAE,WAAW,CAAC,mBAAmB,CAAC,CAAC;oBACpF,aAAa,CAAC,aAAa,CAAC,iBAAiB,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;iBAC/E;aACJ;YAED,IAAI,IAAI,CAAC,mBAAmB,EAAE;gBAC1B,aAAa,CAAC,WAAW,CAAC,4BAA4B,EAAE,IAAI,CAAC,gCAAgC,CAAC,CAAC;aAClG;YACD,aAAa,CAAC,YAAY,CAAC,oBAAoB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAEzE,aAAa,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EACrD,IAAI,CAAC,SAAS,CAAC,CAAC,EAChB,IAAI,CAAC,SAAS,CAAC,CAAC,EAChB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAEjD,aAAa,CAAC,YAAY,CAAC,sBAAsB,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;SAC/G;QAED,WAAW;QACX,IAAI,KAAK,CAAC,eAAe,EAAE;YACvB,IAAI,IAAI,CAAC,iBAAiB,IAAI,aAAa,CAAC,uBAAuB,EAAE;gBACjE,aAAa,CAAC,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;aACxE;YAED,IAAI,IAAI,CAAC,2BAA2B,IAAI,aAAa,CAAC,iCAAiC,IAAI,OAAO,CAAC,8BAA8B,EAAE;gBAC/H,aAAa,CAAC,UAAU,CAAC,4BAA4B,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;aAC5F;YAED,IAAI,IAAI,CAAC,6BAA6B,IAAI,aAAa,CAAC,mCAAmC,IAAI,OAAO,CAAC,gCAAgC,EAAE;gBACrI,aAAa,CAAC,UAAU,CAAC,8BAA8B,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;aAChG;YAED,IAAI,iBAAiB,IAAI,aAAa,CAAC,wBAAwB,EAAE;gBAC7D,IAAI,oBAAoB,EAAE;oBACtB,aAAa,CAAC,UAAU,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;iBACpE;qBACI;oBACD,aAAa,CAAC,UAAU,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,cAAc,IAAI,iBAAiB,CAAC,CAAC;oBACrG,aAAa,CAAC,UAAU,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,cAAc,IAAI,iBAAiB,CAAC,CAAC;oBACxG,aAAa,CAAC,UAAU,CAAC,uBAAuB,EAAE,iBAAiB,CAAC,eAAe,IAAI,iBAAiB,CAAC,CAAC;iBAC7G;aACJ;SACJ;IACL,CAAC;IAED;;;;OAIG;IACI,2CAAM,GAAb,UAAc,YAAoB;QAC9B,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE;YACnE,YAAY,CAAC,UAAU,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACK,0DAAqB,GAA7B,UAA8B,KAAY;QACtC,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,OAAO,IAAI,CAAC,kBAAkB,CAAC;SAClC;QAED,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,OAAO,KAAK,CAAC,kBAAkB,CAAC;SACnC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAKD,sBAAW,4DAAoB;QAH/B;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,+BAA+B,CAAC;QAC5E,CAAC;;;OAAA;IAED;;;OAGG;IACI,6DAAwB,GAA/B,UAAgC,aAA8C;QAC1E,IAAI,aAAa,CAAC,wBAAwB,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE;YAC7G,aAAa,CAAC,IAAI,CAAsB,IAAI,CAAC,kBAAkB,CAAC,CAAC;SACpE;IACL,CAAC;IAED;;;;OAIG;IACI,+CAAU,GAAjB,UAAkB,OAAoB;QAClC,IAAI,IAAI,CAAC,iBAAiB,KAAK,OAAO,EAAE;YACpC,OAAO,IAAI,CAAC;SACf;QAED,IAAI,IAAI,CAAC,kBAAkB,KAAK,OAAO,EAAE;YACrC,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;OAGG;IACI,4DAAuB,GAA9B;QACI,IAAI,aAAa,CAAC,wBAAwB,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE;YAC7G,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;OAGG;IACI,sDAAiB,GAAxB,UAAyB,cAA6B;QAClD,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAC/C;QAED,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;SAChD;IACL,CAAC;IAED;;;OAGG;IACI,mDAAc,GAArB,UAAsB,WAA0B;QAC5C,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,UAAU,IAAI,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7G,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;SAC5C;QAED,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YAChH,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;SAC7C;IACL,CAAC;IAED;;;OAGG;IACI,4CAAO,GAAd,UAAe,oBAA8B;QACzC,IAAI,oBAAoB,EAAE;YACtB,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBACxB,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;aACpC;YAED,IAAI,IAAI,CAAC,kBAAkB,EAAE;gBACzB,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;aACrC;SACJ;IACL,CAAC;IAED;;;MAGE;IACK,iDAAY,GAAnB;QACI,OAAO,4BAA4B,CAAC;IACxC,CAAC;IAED;;;;;;OAMG;IACW,uCAAY,GAA1B,UAA2B,OAAmC,EAAE,SAA0B,EAAE,WAAmB;QAC3G,IAAI,OAAO,CAAC,aAAa,EAAE;YACvB,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,eAAe,CAAC,CAAC;SACzD;QACD,IAAI,OAAO,CAAC,eAAe,EAAE;YACzB,SAAS,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,iBAAiB,CAAC,CAAC;SAC3D;QACD,OAAO,WAAW,CAAC;IACvB,CAAC;IAED;;;OAGG;IACW,sCAAW,GAAzB,UAA0B,QAAkB;QACxC,QAAQ,CAAC,IAAI,CACT,oBAAoB,EAAE,YAAY,EAAE,sBAAsB,EAC1D,8BAA8B,EAAE,0BAA0B,EAC1D,kBAAkB,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,iBAAiB,EACpH,qBAAqB,EAAE,iBAAiB,EACxC,kBAAkB,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,4BAA4B,CAAC,CAAC;IACzI,CAAC;IAED;;;OAGG;IACW,sCAAW,GAAzB,UAA0B,QAAkB;QACxC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,4BAA4B,EAAE,8BAA8B,EAC1F,mBAAmB,EAAE,sBAAsB,EAAE,uBAAuB,CAAC,CAAC;IAC9E,CAAC;IAED;;;OAGG;IACW,+CAAoB,GAAlC,UAAmC,aAA4B;QAC3D,aAAa,CAAC,UAAU,CAAC,8BAA8B,EAAE,CAAC,CAAC,CAAC;QAC5D,aAAa,CAAC,UAAU,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC;QACxD,aAAa,CAAC,UAAU,CAAC,6BAA6B,EAAE,CAAC,CAAC,CAAC;QAC3D,aAAa,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAChD,aAAa,CAAC,UAAU,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;QACjD,aAAa,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QAC/C,aAAa,CAAC,UAAU,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC;QACzD,aAAa,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAChD,aAAa,CAAC,UAAU,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;QAC1D,aAAa,CAAC,UAAU,CAAC,6BAA6B,EAAE,EAAE,CAAC,CAAC;QAC5D,aAAa,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QAC/C,aAAa,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;QAClD,aAAa,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAC1C,aAAa,CAAC,UAAU,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;QACpD,aAAa,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;QACnD,aAAa,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;QAC/C,aAAa,CAAC,UAAU,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED;;;OAGG;IACI,2CAAM,GAAb,UAAc,aAAyC;QACnD,mBAAmB,CAAC,KAAK,CAAC,cAAM,OAAA,aAAa,EAAb,CAAa,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;IAED;;;OAGG;IACI,8CAAS,GAAhB;QACI,OAAO,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;OAKG;IACI,0CAAK,GAAZ,UAAa,MAAW,EAAE,KAAY,EAAE,OAAe;QAAvD,iBAEC;QADG,mBAAmB,CAAC,KAAK,CAAC,cAAM,OAAA,KAAI,EAAJ,CAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;IA/sBD;QAFC,SAAS,EAAE;QACX,gBAAgB,CAAC,kCAAkC,CAAC;2EAClB;IAQnC;QAFC,SAAS,EAAE;QACX,gBAAgB,CAAC,kCAAkC,CAAC;6EAChB;IAQrC;QAFC,SAAS,EAAE;QACX,gBAAgB,CAAC,wBAAwB,CAAC;2EACR;IAGnC;QADC,SAAS,EAAE;wFACiC;IAgC7C;QADC,SAAS,EAAE;2EAC2B;IAQvC;QADC,SAAS,EAAE;6EAC6B;IAMzC;QADC,SAAS,EAAE;iFACsC;IAMlD;QADC,SAAS,EAAE;mFACwC;IAYpD;QAFC,kBAAkB,EAAE;QACpB,gBAAgB,CAAC,kCAAkC,CAAC;wEACC;IAQtD;QAFC,kBAAkB,EAAE;QACpB,gBAAgB,CAAC,kCAAkC,CAAC;yEACE;IAavD;QAFC,SAAS,EAAE;QACX,gBAAgB,CAAC,kCAAkC,CAAC;yEACtB;IAG/B;QADC,SAAS,EAAE;gFAC4B;IAUxC;QADC,gBAAgB,CAAC,kCAAkC,CAAC;6EAMpD;IAeD;QAFC,SAAS,EAAE;QACX,gBAAgB,CAAC,kCAAkC,CAAC;yEACpB;IASjC;QAFC,SAAS,EAAE;QACX,gBAAgB,CAAC,kCAAkC,CAAC;sFACP;IAO9C;QADC,SAAS,EAAE;wEACwB;IAMpC;QADC,SAAS,EAAE;wEACwB;IAMpC;QADC,SAAS,EAAE;2EACuB;IAOnC;QADC,iBAAiB,EAAE;iEACc;IAOlC;QADC,SAAS,EAAE;2EACmB;IAO/B;QADC,iBAAiB,EAAE;yEACsB;IAW1C;QAFC,SAAS,EAAE;QACX,gBAAgB,CAAC,kCAAkC,CAAC;mFACD;IASpD;QAFC,kBAAkB,EAAE;QACpB,gBAAgB,CAAC,kCAAkC,CAAC;kFACW;IAShE;QAFC,kBAAkB,EAAE;QACpB,gBAAgB,CAAC,kCAAkC,CAAC;oFACa;IAYlE;QAFC,SAAS,EAAE;QACX,gBAAgB,CAAC,kCAAkC,CAAC;4EACR;IA6ejD,iCAAC;CAAA,AAxtBD,IAwtBC;SAxtBY,0BAA0B","sourcesContent":["import { Nullable } from \"../../types\";\r\nimport { IAnimatable } from '../../Animations/animatable.interface';\r\nimport { SerializationHelper, serialize, serializeAsTexture, expandToProperty, serializeAsColor3 } from \"../../Misc/decorators\";\r\nimport { Color3 } from '../../Maths/math.color';\r\nimport { SmartArray } from \"../../Misc/smartArray\";\r\nimport { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { RenderTargetTexture } from \"../../Materials/Textures/renderTargetTexture\";\r\nimport { Effect } from \"../../Materials/effect\";\r\nimport { MaterialFlags } from \"../materialFlags\";\r\nimport { UniformBuffer } from \"../../Materials/uniformBuffer\";\r\nimport { MaterialHelper } from \"../../Materials/materialHelper\";\r\nimport { EffectFallbacks } from '../effectFallbacks';\r\nimport { Scalar } from \"../../Maths/math.scalar\";\r\nimport { CubeTexture } from \"../Textures/cubeTexture\";\r\nimport { TmpVectors } from \"../../Maths/math.vector\";\r\nimport { SubMesh } from \"../../Meshes/subMesh\";\r\n\r\ndeclare type Engine = import(\"../../Engines/engine\").Engine;\r\ndeclare type Scene = import(\"../../scene\").Scene;\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport interface IMaterialSubSurfaceDefines {\r\n SUBSURFACE: boolean;\r\n\r\n SS_REFRACTION: boolean;\r\n SS_REFRACTION_USE_INTENSITY_FROM_TEXTURE: boolean;\r\n SS_TRANSLUCENCY: boolean;\r\n SS_TRANSLUCENCY_USE_INTENSITY_FROM_TEXTURE: boolean;\r\n SS_SCATTERING: boolean;\r\n\r\n SS_THICKNESSANDMASK_TEXTURE: boolean;\r\n SS_THICKNESSANDMASK_TEXTUREDIRECTUV: number;\r\n SS_HAS_THICKNESS: boolean;\r\n SS_REFRACTIONINTENSITY_TEXTURE: boolean;\r\n SS_REFRACTIONINTENSITY_TEXTUREDIRECTUV: number;\r\n SS_TRANSLUCENCYINTENSITY_TEXTURE: boolean;\r\n SS_TRANSLUCENCYINTENSITY_TEXTUREDIRECTUV: number;\r\n\r\n SS_REFRACTIONMAP_3D: boolean;\r\n SS_REFRACTIONMAP_OPPOSITEZ: boolean;\r\n SS_LODINREFRACTIONALPHA: boolean;\r\n SS_GAMMAREFRACTION: boolean;\r\n SS_RGBDREFRACTION: boolean;\r\n SS_LINEARSPECULARREFRACTION: boolean;\r\n SS_LINKREFRACTIONTOTRANSPARENCY: boolean;\r\n SS_ALBEDOFORREFRACTIONTINT: boolean;\r\n SS_ALBEDOFORTRANSLUCENCYTINT: boolean;\r\n SS_USE_LOCAL_REFRACTIONMAP_CUBIC: boolean;\r\n SS_USE_THICKNESS_AS_DEPTH: boolean;\r\n\r\n SS_MASK_FROM_THICKNESS_TEXTURE: boolean;\r\n SS_USE_GLTF_TEXTURES: boolean;\r\n\r\n /** @hidden */\r\n _areTexturesDirty: boolean;\r\n}\r\n\r\n/**\r\n * Define the code related to the sub surface parameters of the pbr material.\r\n */\r\nexport class PBRSubSurfaceConfiguration {\r\n\r\n private _isRefractionEnabled = false;\r\n /**\r\n * Defines if the refraction is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public isRefractionEnabled = false;\r\n\r\n private _isTranslucencyEnabled = false;\r\n /**\r\n * Defines if the translucency is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public isTranslucencyEnabled = false;\r\n\r\n private _isScatteringEnabled = false;\r\n /**\r\n * Defines if the sub surface scattering is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markScenePrePassDirty\")\r\n public isScatteringEnabled = false;\r\n\r\n @serialize()\r\n private _scatteringDiffusionProfileIndex = 0;\r\n\r\n /**\r\n * Diffusion profile for subsurface scattering.\r\n * Useful for better scattering in the skins or foliages.\r\n */\r\n public get scatteringDiffusionProfile(): Nullable<Color3> {\r\n if (!this._scene.subSurfaceConfiguration) {\r\n return null;\r\n }\r\n\r\n return this._scene.subSurfaceConfiguration.ssDiffusionProfileColors[this._scatteringDiffusionProfileIndex];\r\n }\r\n\r\n public set scatteringDiffusionProfile(c: Nullable<Color3>) {\r\n if (!this._scene.enableSubSurfaceForPrePass()) {\r\n // Not supported\r\n return;\r\n }\r\n\r\n // addDiffusionProfile automatically checks for doubles\r\n if (c) {\r\n this._scatteringDiffusionProfileIndex = this._scene.subSurfaceConfiguration!.addDiffusionProfile(c);\r\n }\r\n }\r\n\r\n /**\r\n * Defines the refraction intensity of the material.\r\n * The refraction when enabled replaces the Diffuse part of the material.\r\n * The intensity helps transitioning between diffuse and refraction.\r\n */\r\n @serialize()\r\n public refractionIntensity: number = 1;\r\n\r\n /**\r\n * Defines the translucency intensity of the material.\r\n * When translucency has been enabled, this defines how much of the \"translucency\"\r\n * is added to the diffuse part of the material.\r\n */\r\n @serialize()\r\n public translucencyIntensity: number = 1;\r\n\r\n /**\r\n * When enabled, transparent surfaces will be tinted with the albedo colour (independent of thickness)\r\n */\r\n @serialize()\r\n public useAlbedoToTintRefraction: boolean = false;\r\n\r\n /**\r\n * When enabled, translucent surfaces will be tinted with the albedo colour (independent of thickness)\r\n */\r\n @serialize()\r\n public useAlbedoToTintTranslucency: boolean = false;\r\n\r\n private _thicknessTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Stores the average thickness of a mesh in a texture (The texture is holding the values linearly).\r\n * The red (or green if useGltfStyleTextures=true) channel of the texture should contain the thickness remapped between 0 and 1.\r\n * 0 would mean minimumThickness\r\n * 1 would mean maximumThickness\r\n * The other channels might be use as a mask to vary the different effects intensity.\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public thicknessTexture: Nullable<BaseTexture> = null;\r\n\r\n private _refractionTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Defines the texture to use for refraction.\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public refractionTexture: Nullable<BaseTexture> = null;\r\n\r\n private _indexOfRefraction = 1.5;\r\n /**\r\n * Index of refraction of the material base layer.\r\n * https://en.wikipedia.org/wiki/List_of_refractive_indices\r\n *\r\n * This does not only impact refraction but also the Base F0 of Dielectric Materials.\r\n *\r\n * From dielectric fresnel rules: F0 = square((iorT - iorI) / (iorT + iorI))\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public indexOfRefraction = 1.5;\r\n\r\n @serialize()\r\n private _volumeIndexOfRefraction = -1.0;\r\n\r\n /**\r\n * Index of refraction of the material's volume.\r\n * https://en.wikipedia.org/wiki/List_of_refractive_indices\r\n *\r\n * This ONLY impacts refraction. If not provided or given a non-valid value,\r\n * the volume will use the same IOR as the surface.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public get volumeIndexOfRefraction(): number {\r\n if (this._volumeIndexOfRefraction >= 1.0) {\r\n return this._volumeIndexOfRefraction;\r\n }\r\n return this._indexOfRefraction;\r\n }\r\n public set volumeIndexOfRefraction(value: number) {\r\n if (value >= 1.0) {\r\n this._volumeIndexOfRefraction = value;\r\n } else {\r\n this._volumeIndexOfRefraction = -1.0;\r\n }\r\n }\r\n\r\n private _invertRefractionY = false;\r\n /**\r\n * Controls if refraction needs to be inverted on Y. This could be useful for procedural texture.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public invertRefractionY = false;\r\n\r\n private _linkRefractionWithTransparency = false;\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 @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public linkRefractionWithTransparency = false;\r\n\r\n /**\r\n * Defines the minimum thickness stored in the thickness map.\r\n * If no thickness map is defined, this value will be used to simulate thickness.\r\n */\r\n @serialize()\r\n public minimumThickness: number = 0;\r\n\r\n /**\r\n * Defines the maximum thickness stored in the thickness map.\r\n */\r\n @serialize()\r\n public maximumThickness: number = 1;\r\n\r\n /**\r\n * Defines that the thickness should be used as a measure of the depth volume.\r\n */\r\n @serialize()\r\n public useThicknessAsDepth = false;\r\n\r\n /**\r\n * Defines the volume tint of the material.\r\n * This is used for both translucency and scattering.\r\n */\r\n @serializeAsColor3()\r\n public tintColor = Color3.White();\r\n\r\n /**\r\n * Defines the distance at which the tint color should be found in the media.\r\n * This is used for refraction only.\r\n */\r\n @serialize()\r\n public tintColorAtDistance = 1;\r\n\r\n /**\r\n * Defines how far each channel transmit through the media.\r\n * It is defined as a color to simplify it selection.\r\n */\r\n @serializeAsColor3()\r\n public diffusionDistance = Color3.White();\r\n\r\n private _useMaskFromThicknessTexture = false;\r\n /**\r\n * Stores the intensity of the different subsurface effects in the thickness texture.\r\n * Note that if refractionIntensityTexture and/or translucencyIntensityTexture is provided it takes precedence over thicknessTexture + useMaskFromThicknessTexture\r\n * * the green (red if useGltfStyleTextures = true) channel is the refraction intensity.\r\n * * the blue channel is the translucency intensity.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useMaskFromThicknessTexture: boolean = false;\r\n\r\n private _refractionIntensityTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Stores the intensity of the refraction. If provided, it takes precedence over thicknessTexture + useMaskFromThicknessTexture\r\n * * the green (red if useGltfStyleTextures = true) channel is the refraction intensity.\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public refractionIntensityTexture: Nullable<BaseTexture> = null;\r\n\r\n private _translucencyIntensityTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Stores the intensity of the translucency. If provided, it takes precedence over thicknessTexture + useMaskFromThicknessTexture\r\n * * the blue channel is the translucency intensity.\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public translucencyIntensityTexture: Nullable<BaseTexture> = null;\r\n\r\n private _scene: Scene;\r\n private _useGltfStyleTextures = false;\r\n /**\r\n * Use channels layout used by glTF:\r\n * * thicknessTexture: the green (instead of red) channel is the thickness\r\n * * thicknessTexture/refractionIntensityTexture: the red (instead of green) channel is the refraction intensity\r\n * * thicknessTexture/translucencyIntensityTexture: no change, use the blue channel for the translucency intensity\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useGltfStyleTextures: boolean = false;\r\n\r\n /** @hidden */\r\n private _internalMarkAllSubMeshesAsTexturesDirty: () => void;\r\n private _internalMarkScenePrePassDirty: () => void;\r\n\r\n /** @hidden */\r\n public _markAllSubMeshesAsTexturesDirty(): void {\r\n this._internalMarkAllSubMeshesAsTexturesDirty();\r\n }\r\n /** @hidden */\r\n public _markScenePrePassDirty(): void {\r\n this._internalMarkAllSubMeshesAsTexturesDirty();\r\n this._internalMarkScenePrePassDirty();\r\n }\r\n\r\n /**\r\n * Instantiate a new instance of sub surface configuration.\r\n * @param markAllSubMeshesAsTexturesDirty Callback to flag the material to dirty\r\n * @param markScenePrePassDirty Callback to flag the scene as prepass dirty\r\n * @param scene The scene\r\n */\r\n constructor(markAllSubMeshesAsTexturesDirty: () => void, markScenePrePassDirty: () => void, scene: Scene) {\r\n this._internalMarkAllSubMeshesAsTexturesDirty = markAllSubMeshesAsTexturesDirty;\r\n this._internalMarkScenePrePassDirty = markScenePrePassDirty;\r\n this._scene = scene;\r\n }\r\n\r\n /**\r\n * Gets whether the submesh is ready to be used or not.\r\n * @param defines the list of \"defines\" to update.\r\n * @param scene defines the scene the material belongs to.\r\n * @returns - boolean indicating that the submesh is ready or not.\r\n */\r\n public isReadyForSubMesh(defines: IMaterialSubSurfaceDefines, scene: Scene): boolean {\r\n if (!this._isRefractionEnabled && !this._isTranslucencyEnabled && !this._isScatteringEnabled) {\r\n return true;\r\n }\r\n\r\n if (defines._areTexturesDirty) {\r\n if (scene.texturesEnabled) {\r\n if (this._thicknessTexture && MaterialFlags.ThicknessTextureEnabled) {\r\n if (!this._thicknessTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n var refractionTexture = this._getRefractionTexture(scene);\r\n if (refractionTexture && MaterialFlags.RefractionTextureEnabled) {\r\n if (!refractionTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Checks to see if a texture is used in the material.\r\n * @param defines the list of \"defines\" to update.\r\n * @param scene defines the scene to the material belongs to.\r\n */\r\n public prepareDefines(defines: IMaterialSubSurfaceDefines, scene: Scene): void {\r\n if (!this._isRefractionEnabled && !this._isTranslucencyEnabled && !this._isScatteringEnabled) {\r\n defines.SUBSURFACE = false;\r\n defines.SS_TRANSLUCENCY = false;\r\n defines.SS_SCATTERING = false;\r\n defines.SS_REFRACTION = false;\r\n return;\r\n }\r\n\r\n if (defines._areTexturesDirty) {\r\n defines.SUBSURFACE = false;\r\n\r\n defines.SS_TRANSLUCENCY = this._isTranslucencyEnabled;\r\n defines.SS_TRANSLUCENCY_USE_INTENSITY_FROM_TEXTURE = false;\r\n defines.SS_SCATTERING = this._isScatteringEnabled;\r\n defines.SS_THICKNESSANDMASK_TEXTURE = false;\r\n defines.SS_REFRACTIONINTENSITY_TEXTURE = false;\r\n defines.SS_TRANSLUCENCYINTENSITY_TEXTURE = false;\r\n defines.SS_HAS_THICKNESS = false;\r\n defines.SS_MASK_FROM_THICKNESS_TEXTURE = false;\r\n defines.SS_USE_GLTF_TEXTURES = false;\r\n defines.SS_REFRACTION = false;\r\n defines.SS_REFRACTION_USE_INTENSITY_FROM_TEXTURE = false;\r\n defines.SS_REFRACTIONMAP_3D = false;\r\n defines.SS_GAMMAREFRACTION = false;\r\n defines.SS_RGBDREFRACTION = false;\r\n defines.SS_LINEARSPECULARREFRACTION = false;\r\n defines.SS_REFRACTIONMAP_OPPOSITEZ = false;\r\n defines.SS_LODINREFRACTIONALPHA = false;\r\n defines.SS_LINKREFRACTIONTOTRANSPARENCY = false;\r\n defines.SS_ALBEDOFORREFRACTIONTINT = false;\r\n defines.SS_ALBEDOFORTRANSLUCENCYTINT = false;\r\n defines.SS_USE_LOCAL_REFRACTIONMAP_CUBIC = false;\r\n defines.SS_USE_THICKNESS_AS_DEPTH = false;\r\n\r\n if (this._isRefractionEnabled || this._isTranslucencyEnabled || this._isScatteringEnabled) {\r\n defines.SUBSURFACE = true;\r\n\r\n const refractionIntensityTextureIsThicknessTexture =\r\n !!this._thicknessTexture &&\r\n !!this._refractionIntensityTexture &&\r\n this._refractionIntensityTexture.checkTransformsAreIdentical(this._thicknessTexture) && this._refractionIntensityTexture._texture === this._thicknessTexture._texture;\r\n\r\n const translucencyIntensityTextureIsThicknessTexture =\r\n !!this._thicknessTexture &&\r\n !!this._translucencyIntensityTexture &&\r\n this._translucencyIntensityTexture.checkTransformsAreIdentical(this._thicknessTexture) && this._translucencyIntensityTexture._texture === this._thicknessTexture._texture;\r\n\r\n // if true, it means the refraction/translucency textures are the same than the thickness texture so there's no need to pass them to the shader, only thicknessTexture\r\n const useOnlyThicknessTexture = (refractionIntensityTextureIsThicknessTexture || !this._refractionIntensityTexture) && (translucencyIntensityTextureIsThicknessTexture || !this._translucencyIntensityTexture);\r\n\r\n if (defines._areTexturesDirty) {\r\n if (scene.texturesEnabled) {\r\n if (this._thicknessTexture && MaterialFlags.ThicknessTextureEnabled) {\r\n MaterialHelper.PrepareDefinesForMergedUV(this._thicknessTexture, defines, \"SS_THICKNESSANDMASK_TEXTURE\");\r\n }\r\n\r\n if (this._refractionIntensityTexture && MaterialFlags.RefractionIntensityTextureEnabled && !useOnlyThicknessTexture) {\r\n MaterialHelper.PrepareDefinesForMergedUV(this._refractionIntensityTexture, defines, \"SS_REFRACTIONINTENSITY_TEXTURE\");\r\n }\r\n\r\n if (this._translucencyIntensityTexture && MaterialFlags.TranslucencyIntensityTextureEnabled && !useOnlyThicknessTexture) {\r\n MaterialHelper.PrepareDefinesForMergedUV(this._translucencyIntensityTexture, defines, \"SS_TRANSLUCENCYINTENSITY_TEXTURE\");\r\n }\r\n }\r\n }\r\n\r\n defines.SS_HAS_THICKNESS = (this.maximumThickness - this.minimumThickness) !== 0.0;\r\n defines.SS_MASK_FROM_THICKNESS_TEXTURE = (this._useMaskFromThicknessTexture || !!this._refractionIntensityTexture || !!this._translucencyIntensityTexture) && useOnlyThicknessTexture;\r\n defines.SS_USE_GLTF_TEXTURES = this._useGltfStyleTextures;\r\n defines.SS_REFRACTION_USE_INTENSITY_FROM_TEXTURE = (this._useMaskFromThicknessTexture || !!this._refractionIntensityTexture) && useOnlyThicknessTexture;\r\n defines.SS_TRANSLUCENCY_USE_INTENSITY_FROM_TEXTURE = (this._useMaskFromThicknessTexture || !!this._translucencyIntensityTexture) && useOnlyThicknessTexture;\r\n }\r\n\r\n if (this._isRefractionEnabled) {\r\n if (scene.texturesEnabled) {\r\n var refractionTexture = this._getRefractionTexture(scene);\r\n if (refractionTexture && MaterialFlags.RefractionTextureEnabled) {\r\n defines.SS_REFRACTION = true;\r\n defines.SS_REFRACTIONMAP_3D = refractionTexture.isCube;\r\n defines.SS_GAMMAREFRACTION = refractionTexture.gammaSpace;\r\n defines.SS_RGBDREFRACTION = refractionTexture.isRGBD;\r\n defines.SS_LINEARSPECULARREFRACTION = refractionTexture.linearSpecularLOD;\r\n defines.SS_REFRACTIONMAP_OPPOSITEZ = refractionTexture.invertZ;\r\n defines.SS_LODINREFRACTIONALPHA = refractionTexture.lodLevelInAlpha;\r\n defines.SS_LINKREFRACTIONTOTRANSPARENCY = this._linkRefractionWithTransparency;\r\n defines.SS_ALBEDOFORREFRACTIONTINT = this.useAlbedoToTintRefraction;\r\n defines.SS_USE_LOCAL_REFRACTIONMAP_CUBIC = refractionTexture.isCube && (<any>refractionTexture).boundingBoxSize;\r\n defines.SS_USE_THICKNESS_AS_DEPTH = this.useThicknessAsDepth;\r\n }\r\n }\r\n }\r\n\r\n if (this._isTranslucencyEnabled) {\r\n defines.SS_ALBEDOFORTRANSLUCENCYTINT = this.useAlbedoToTintTranslucency;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Binds the material data.\r\n * @param uniformBuffer defines the Uniform buffer to fill in.\r\n * @param scene defines the scene the material belongs to.\r\n * @param engine defines the engine the material belongs to.\r\n * @param isFrozen defines whether the material is frozen or not.\r\n * @param lodBasedMicrosurface defines whether the material relies on lod based microsurface or not.\r\n * @param realTimeFiltering defines whether the textures should be filtered on the fly.\r\n * @param subMesh the submesh to bind data for\r\n */\r\n public bindForSubMesh(uniformBuffer: UniformBuffer, scene: Scene, engine: Engine, isFrozen: boolean, lodBasedMicrosurface: boolean, realTimeFiltering: boolean, subMesh: SubMesh): void {\r\n if (!this._isRefractionEnabled && !this._isTranslucencyEnabled && !this._isScatteringEnabled) {\r\n return;\r\n }\r\n\r\n const defines = subMesh!.materialDefines as unknown as IMaterialSubSurfaceDefines;\r\n\r\n var refractionTexture = this._getRefractionTexture(scene);\r\n\r\n if (!uniformBuffer.useUbo || !isFrozen || !uniformBuffer.isSync) {\r\n if (this._thicknessTexture && MaterialFlags.ThicknessTextureEnabled) {\r\n uniformBuffer.updateFloat2(\"vThicknessInfos\", this._thicknessTexture.coordinatesIndex, this._thicknessTexture.level);\r\n MaterialHelper.BindTextureMatrix(this._thicknessTexture, uniformBuffer, \"thickness\");\r\n }\r\n\r\n if (this._refractionIntensityTexture && MaterialFlags.RefractionIntensityTextureEnabled && defines.SS_REFRACTIONINTENSITY_TEXTURE) {\r\n uniformBuffer.updateFloat2(\"vRefractionIntensityInfos\", this._refractionIntensityTexture.coordinatesIndex, this._refractionIntensityTexture.level);\r\n MaterialHelper.BindTextureMatrix(this._refractionIntensityTexture, uniformBuffer, \"refractionIntensity\");\r\n }\r\n\r\n if (this._translucencyIntensityTexture && MaterialFlags.TranslucencyIntensityTextureEnabled && defines.SS_TRANSLUCENCYINTENSITY_TEXTURE) {\r\n uniformBuffer.updateFloat2(\"vTranslucencyIntensityInfos\", this._translucencyIntensityTexture.coordinatesIndex, this._translucencyIntensityTexture.level);\r\n MaterialHelper.BindTextureMatrix(this._translucencyIntensityTexture, uniformBuffer, \"translucencyIntensity\");\r\n }\r\n\r\n subMesh.getRenderingMesh().getWorldMatrix().decompose(TmpVectors.Vector3[0]);\r\n\r\n const thicknessScale = Math.max(Math.abs(TmpVectors.Vector3[0].x), Math.abs(TmpVectors.Vector3[0].y), Math.abs(TmpVectors.Vector3[0].z));\r\n\r\n uniformBuffer.updateFloat2(\"vThicknessParam\", this.minimumThickness * thicknessScale, (this.maximumThickness - this.minimumThickness) * thicknessScale);\r\n\r\n if (refractionTexture && MaterialFlags.RefractionTextureEnabled) {\r\n uniformBuffer.updateMatrix(\"refractionMatrix\", refractionTexture.getReflectionTextureMatrix());\r\n\r\n var 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 var width = refractionTexture.getSize().width;\r\n var refractionIor = this.volumeIndexOfRefraction;\r\n uniformBuffer.updateFloat4(\"vRefractionInfos\", refractionTexture.level, 1 / refractionIor, depth, this._invertRefractionY ? -1 : 1);\r\n uniformBuffer.updateFloat4(\"vRefractionMicrosurfaceInfos\",\r\n width,\r\n refractionTexture.lodGenerationScale,\r\n refractionTexture.lodGenerationOffset,\r\n 1.0 / this.indexOfRefraction);\r\n\r\n if (realTimeFiltering) {\r\n uniformBuffer.updateFloat2(\"vRefractionFilteringInfo\", width, Scalar.Log2(width));\r\n }\r\n\r\n if ((<any>refractionTexture).boundingBoxSize) {\r\n let cubeTexture = <CubeTexture>refractionTexture;\r\n\r\n uniformBuffer.updateVector3(\"vRefractionPosition\", cubeTexture.boundingBoxPosition);\r\n uniformBuffer.updateVector3(\"vRefractionSize\", cubeTexture.boundingBoxSize);\r\n }\r\n }\r\n\r\n if (this.isScatteringEnabled) {\r\n uniformBuffer.updateFloat(\"scatteringDiffusionProfile\", this._scatteringDiffusionProfileIndex);\r\n }\r\n uniformBuffer.updateColor3(\"vDiffusionDistance\", this.diffusionDistance);\r\n\r\n uniformBuffer.updateFloat4(\"vTintColor\", this.tintColor.r,\r\n this.tintColor.g,\r\n this.tintColor.b,\r\n Math.max(0.00001, this.tintColorAtDistance));\r\n\r\n uniformBuffer.updateFloat3(\"vSubSurfaceIntensity\", this.refractionIntensity, this.translucencyIntensity, 0);\r\n }\r\n\r\n // Textures\r\n if (scene.texturesEnabled) {\r\n if (this._thicknessTexture && MaterialFlags.ThicknessTextureEnabled) {\r\n uniformBuffer.setTexture(\"thicknessSampler\", this._thicknessTexture);\r\n }\r\n\r\n if (this._refractionIntensityTexture && MaterialFlags.RefractionIntensityTextureEnabled && defines.SS_REFRACTIONINTENSITY_TEXTURE) {\r\n uniformBuffer.setTexture(\"refractionIntensitySampler\", this._refractionIntensityTexture);\r\n }\r\n\r\n if (this._translucencyIntensityTexture && MaterialFlags.TranslucencyIntensityTextureEnabled && defines.SS_TRANSLUCENCYINTENSITY_TEXTURE) {\r\n uniformBuffer.setTexture(\"translucencyIntensitySampler\", this._translucencyIntensityTexture);\r\n }\r\n\r\n if (refractionTexture && MaterialFlags.RefractionTextureEnabled) {\r\n if (lodBasedMicrosurface) {\r\n uniformBuffer.setTexture(\"refractionSampler\", refractionTexture);\r\n }\r\n else {\r\n uniformBuffer.setTexture(\"refractionSampler\", refractionTexture._lodTextureMid || refractionTexture);\r\n uniformBuffer.setTexture(\"refractionSamplerLow\", refractionTexture._lodTextureLow || refractionTexture);\r\n uniformBuffer.setTexture(\"refractionSamplerHigh\", refractionTexture._lodTextureHigh || refractionTexture);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Unbinds the material from the mesh.\r\n * @param activeEffect defines the effect that should be unbound from.\r\n * @returns true if unbound, otherwise false\r\n */\r\n public unbind(activeEffect: Effect): boolean {\r\n if (this._refractionTexture && this._refractionTexture.isRenderTarget) {\r\n activeEffect.setTexture(\"refractionSampler\", null);\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Returns the texture used for refraction or null if none is used.\r\n * @param scene defines the scene the material belongs to.\r\n * @returns - Refraction texture if present. If no refraction texture and refraction\r\n * is linked with transparency, returns environment texture. Otherwise, returns null.\r\n */\r\n private _getRefractionTexture(scene: Scene): Nullable<BaseTexture> {\r\n if (this._refractionTexture) {\r\n return this._refractionTexture;\r\n }\r\n\r\n if (this._isRefractionEnabled) {\r\n return scene.environmentTexture;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns true if alpha blending should be disabled.\r\n */\r\n public get disableAlphaBlending(): boolean {\r\n return this.isRefractionEnabled && this._linkRefractionWithTransparency;\r\n }\r\n\r\n /**\r\n * Fills the list of render target textures.\r\n * @param renderTargets the list of render targets to update\r\n */\r\n public fillRenderTargetTextures(renderTargets: SmartArray<RenderTargetTexture>): void {\r\n if (MaterialFlags.RefractionTextureEnabled && this._refractionTexture && this._refractionTexture.isRenderTarget) {\r\n renderTargets.push(<RenderTargetTexture>this._refractionTexture);\r\n }\r\n }\r\n\r\n /**\r\n * Checks to see if a texture is used in the material.\r\n * @param texture - Base texture to use.\r\n * @returns - Boolean specifying if a texture is used in the material.\r\n */\r\n public hasTexture(texture: BaseTexture): boolean {\r\n if (this._thicknessTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._refractionTexture === texture) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that current material needs to register RTT\r\n * @returns true if this uses a render target otherwise false.\r\n */\r\n public hasRenderTargetTextures(): boolean {\r\n if (MaterialFlags.RefractionTextureEnabled && this._refractionTexture && this._refractionTexture.isRenderTarget) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Returns an array of the actively used textures.\r\n * @param activeTextures Array of BaseTextures\r\n */\r\n public getActiveTextures(activeTextures: BaseTexture[]): void {\r\n if (this._thicknessTexture) {\r\n activeTextures.push(this._thicknessTexture);\r\n }\r\n\r\n if (this._refractionTexture) {\r\n activeTextures.push(this._refractionTexture);\r\n }\r\n }\r\n\r\n /**\r\n * Returns the animatable textures.\r\n * @param animatables Array of animatable textures.\r\n */\r\n public getAnimatables(animatables: IAnimatable[]): void {\r\n if (this._thicknessTexture && this._thicknessTexture.animations && this._thicknessTexture.animations.length > 0) {\r\n animatables.push(this._thicknessTexture);\r\n }\r\n\r\n if (this._refractionTexture && this._refractionTexture.animations && this._refractionTexture.animations.length > 0) {\r\n animatables.push(this._refractionTexture);\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the resources of the material.\r\n * @param forceDisposeTextures - Forces the disposal of all textures.\r\n */\r\n public dispose(forceDisposeTextures?: boolean): void {\r\n if (forceDisposeTextures) {\r\n if (this._thicknessTexture) {\r\n this._thicknessTexture.dispose();\r\n }\r\n\r\n if (this._refractionTexture) {\r\n this._refractionTexture.dispose();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get the current class name of the texture useful for serialization or dynamic coding.\r\n * @returns \"PBRSubSurfaceConfiguration\"\r\n */\r\n public getClassName(): string {\r\n return \"PBRSubSurfaceConfiguration\";\r\n }\r\n\r\n /**\r\n * Add fallbacks to the effect fallbacks list.\r\n * @param defines defines the Base texture to use.\r\n * @param fallbacks defines the current fallback list.\r\n * @param currentRank defines the current fallback rank.\r\n * @returns the new fallback rank.\r\n */\r\n public static AddFallbacks(defines: IMaterialSubSurfaceDefines, fallbacks: EffectFallbacks, currentRank: number): number {\r\n if (defines.SS_SCATTERING) {\r\n fallbacks.addFallback(currentRank++, \"SS_SCATTERING\");\r\n }\r\n if (defines.SS_TRANSLUCENCY) {\r\n fallbacks.addFallback(currentRank++, \"SS_TRANSLUCENCY\");\r\n }\r\n return currentRank;\r\n }\r\n\r\n /**\r\n * Add the required uniforms to the current list.\r\n * @param uniforms defines the current uniform list.\r\n */\r\n public static AddUniforms(uniforms: string[]): void {\r\n uniforms.push(\r\n \"vDiffusionDistance\", \"vTintColor\", \"vSubSurfaceIntensity\",\r\n \"vRefractionMicrosurfaceInfos\", \"vRefractionFilteringInfo\",\r\n \"vRefractionInfos\", \"vThicknessInfos\", \"vRefractionIntensityInfos\", \"vTranslucencyIntensityInfos\", \"vThicknessParam\",\r\n \"vRefractionPosition\", \"vRefractionSize\",\r\n \"refractionMatrix\", \"thicknessMatrix\", \"refractionIntensityMatrix\", \"translucencyIntensityMatrix\", \"scatteringDiffusionProfile\");\r\n }\r\n\r\n /**\r\n * Add the required samplers to the current list.\r\n * @param samplers defines the current sampler list.\r\n */\r\n public static AddSamplers(samplers: string[]): void {\r\n samplers.push(\"thicknessSampler\", \"refractionIntensitySampler\", \"translucencyIntensitySampler\",\r\n \"refractionSampler\", \"refractionSamplerLow\", \"refractionSamplerHigh\");\r\n }\r\n\r\n /**\r\n * Add the required uniforms to the current buffer.\r\n * @param uniformBuffer defines the current uniform buffer.\r\n */\r\n public static PrepareUniformBuffer(uniformBuffer: UniformBuffer): void {\r\n uniformBuffer.addUniform(\"vRefractionMicrosurfaceInfos\", 4);\r\n uniformBuffer.addUniform(\"vRefractionFilteringInfo\", 2);\r\n uniformBuffer.addUniform(\"vTranslucencyIntensityInfos\", 2);\r\n uniformBuffer.addUniform(\"vRefractionInfos\", 4);\r\n uniformBuffer.addUniform(\"refractionMatrix\", 16);\r\n uniformBuffer.addUniform(\"vThicknessInfos\", 2);\r\n uniformBuffer.addUniform(\"vRefractionIntensityInfos\", 2);\r\n uniformBuffer.addUniform(\"thicknessMatrix\", 16);\r\n uniformBuffer.addUniform(\"refractionIntensityMatrix\", 16);\r\n uniformBuffer.addUniform(\"translucencyIntensityMatrix\", 16);\r\n uniformBuffer.addUniform(\"vThicknessParam\", 2);\r\n uniformBuffer.addUniform(\"vDiffusionDistance\", 3);\r\n uniformBuffer.addUniform(\"vTintColor\", 4);\r\n uniformBuffer.addUniform(\"vSubSurfaceIntensity\", 3);\r\n uniformBuffer.addUniform(\"vRefractionPosition\", 3);\r\n uniformBuffer.addUniform(\"vRefractionSize\", 3);\r\n uniformBuffer.addUniform(\"scatteringDiffusionProfile\", 1);\r\n }\r\n\r\n /**\r\n * Makes a duplicate of the current configuration into another one.\r\n * @param configuration define the config where to copy the info\r\n */\r\n public copyTo(configuration: PBRSubSurfaceConfiguration): void {\r\n SerializationHelper.Clone(() => configuration, this);\r\n }\r\n\r\n /**\r\n * Serializes this Sub Surface configuration.\r\n * @returns - An object with the serialized config.\r\n */\r\n public serialize(): any {\r\n return SerializationHelper.Serialize(this);\r\n }\r\n\r\n /**\r\n * Parses a anisotropy Configuration from a serialized object.\r\n * @param source - Serialized object.\r\n * @param scene Defines the scene we are parsing for\r\n * @param rootUrl Defines the rootUrl to load from\r\n */\r\n public parse(source: any, scene: Scene, rootUrl: string): void {\r\n SerializationHelper.Parse(() => this, source, scene, rootUrl);\r\n }\r\n}"]}
1
+ {"version":3,"file":"pbrSubSurfaceConfiguration.js","sourceRoot":"","sources":["../../../../sourceES6/core/Materials/PBR/pbrSubSurfaceConfiguration.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"../../types\";\r\nimport { IAnimatable } from '../../Animations/animatable.interface';\r\nimport { serialize, serializeAsTexture, expandToProperty, serializeAsColor3 } from \"../../Misc/decorators\";\r\nimport { Color3 } from '../../Maths/math.color';\r\nimport { SmartArray } from \"../../Misc/smartArray\";\r\nimport { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { RenderTargetTexture } from \"../../Materials/Textures/renderTargetTexture\";\r\nimport { MaterialFlags } from \"../materialFlags\";\r\nimport { UniformBuffer } from \"../../Materials/uniformBuffer\";\r\nimport { MaterialHelper } from \"../../Materials/materialHelper\";\r\nimport { EffectFallbacks } from '../effectFallbacks';\r\nimport { Scalar } from \"../../Maths/math.scalar\";\r\nimport { CubeTexture } from \"../Textures/cubeTexture\";\r\nimport { TmpVectors } from \"../../Maths/math.vector\";\r\nimport { SubMesh } from \"../../Meshes/subMesh\";\r\nimport { MaterialPluginBase } from \"../materialPluginBase\";\r\n\r\nimport { MaterialDefines } from \"../materialDefines\";\r\n\r\ndeclare type Engine = import(\"../../Engines/engine\").Engine;\r\ndeclare type Scene = import(\"../../scene\").Scene;\r\ndeclare type AbstractMesh = import(\"../../Meshes/abstractMesh\").AbstractMesh;\r\ndeclare type PBRBaseMaterial = import(\"./pbrBaseMaterial\").PBRBaseMaterial;\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class MaterialSubSurfaceDefines extends MaterialDefines {\r\n public SUBSURFACE = false;\r\n\r\n public SS_REFRACTION = false;\r\n public SS_REFRACTION_USE_INTENSITY_FROM_TEXTURE = false;\r\n public SS_TRANSLUCENCY = false;\r\n public SS_TRANSLUCENCY_USE_INTENSITY_FROM_TEXTURE = false;\r\n public SS_SCATTERING = false;\r\n\r\n public SS_THICKNESSANDMASK_TEXTURE = false;\r\n public SS_THICKNESSANDMASK_TEXTUREDIRECTUV = 0;\r\n public SS_HAS_THICKNESS = false;\r\n public SS_REFRACTIONINTENSITY_TEXTURE = false;\r\n public SS_REFRACTIONINTENSITY_TEXTUREDIRECTUV = 0;\r\n public SS_TRANSLUCENCYINTENSITY_TEXTURE = false;\r\n public SS_TRANSLUCENCYINTENSITY_TEXTUREDIRECTUV = 0;\r\n\r\n public SS_REFRACTIONMAP_3D = false;\r\n public SS_REFRACTIONMAP_OPPOSITEZ = false;\r\n public SS_LODINREFRACTIONALPHA = false;\r\n public SS_GAMMAREFRACTION = false;\r\n public SS_RGBDREFRACTION = false;\r\n public SS_LINEARSPECULARREFRACTION = false;\r\n public SS_LINKREFRACTIONTOTRANSPARENCY = false;\r\n public SS_ALBEDOFORREFRACTIONTINT = false;\r\n public SS_ALBEDOFORTRANSLUCENCYTINT = false;\r\n public SS_USE_LOCAL_REFRACTIONMAP_CUBIC = false;\r\n public SS_USE_THICKNESS_AS_DEPTH = false;\r\n\r\n public SS_MASK_FROM_THICKNESS_TEXTURE = false;\r\n public SS_USE_GLTF_TEXTURES = false;\r\n}\r\n\r\n/**\r\n * Plugin that implements the sub surface component of the PBR material\r\n */\r\nexport class PBRSubSurfaceConfiguration extends MaterialPluginBase {\r\n protected _material: PBRBaseMaterial;\r\n\r\n private _isRefractionEnabled = false;\r\n /**\r\n * Defines if the refraction is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public isRefractionEnabled = false;\r\n\r\n private _isTranslucencyEnabled = false;\r\n /**\r\n * Defines if the translucency is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public isTranslucencyEnabled = false;\r\n\r\n private _isScatteringEnabled = false;\r\n /**\r\n * Defines if the sub surface scattering is enabled in the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markScenePrePassDirty\")\r\n public isScatteringEnabled = false;\r\n\r\n @serialize()\r\n private _scatteringDiffusionProfileIndex = 0;\r\n\r\n /**\r\n * Diffusion profile for subsurface scattering.\r\n * Useful for better scattering in the skins or foliages.\r\n */\r\n public get scatteringDiffusionProfile(): Nullable<Color3> {\r\n if (!this._scene.subSurfaceConfiguration) {\r\n return null;\r\n }\r\n\r\n return this._scene.subSurfaceConfiguration.ssDiffusionProfileColors[this._scatteringDiffusionProfileIndex];\r\n }\r\n\r\n public set scatteringDiffusionProfile(c: Nullable<Color3>) {\r\n if (!this._scene.enableSubSurfaceForPrePass()) {\r\n // Not supported\r\n return;\r\n }\r\n\r\n // addDiffusionProfile automatically checks for doubles\r\n if (c) {\r\n this._scatteringDiffusionProfileIndex = this._scene.subSurfaceConfiguration!.addDiffusionProfile(c);\r\n }\r\n }\r\n\r\n /**\r\n * Defines the refraction intensity of the material.\r\n * The refraction when enabled replaces the Diffuse part of the material.\r\n * The intensity helps transitioning between diffuse and refraction.\r\n */\r\n @serialize()\r\n public refractionIntensity: number = 1;\r\n\r\n /**\r\n * Defines the translucency intensity of the material.\r\n * When translucency has been enabled, this defines how much of the \"translucency\"\r\n * is added to the diffuse part of the material.\r\n */\r\n @serialize()\r\n public translucencyIntensity: number = 1;\r\n\r\n /**\r\n * When enabled, transparent surfaces will be tinted with the albedo colour (independent of thickness)\r\n */\r\n @serialize()\r\n public useAlbedoToTintRefraction: boolean = false;\r\n\r\n /**\r\n * When enabled, translucent surfaces will be tinted with the albedo colour (independent of thickness)\r\n */\r\n @serialize()\r\n public useAlbedoToTintTranslucency: boolean = false;\r\n\r\n private _thicknessTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Stores the average thickness of a mesh in a texture (The texture is holding the values linearly).\r\n * The red (or green if useGltfStyleTextures=true) channel of the texture should contain the thickness remapped between 0 and 1.\r\n * 0 would mean minimumThickness\r\n * 1 would mean maximumThickness\r\n * The other channels might be use as a mask to vary the different effects intensity.\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public thicknessTexture: Nullable<BaseTexture> = null;\r\n\r\n private _refractionTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Defines the texture to use for refraction.\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public refractionTexture: Nullable<BaseTexture> = null;\r\n\r\n /** @hidden */\r\n public _indexOfRefraction = 1.5;\r\n /**\r\n * Index of refraction of the material base layer.\r\n * https://en.wikipedia.org/wiki/List_of_refractive_indices\r\n *\r\n * This does not only impact refraction but also the Base F0 of Dielectric Materials.\r\n *\r\n * From dielectric fresnel rules: F0 = square((iorT - iorI) / (iorT + iorI))\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public indexOfRefraction = 1.5;\r\n\r\n @serialize()\r\n private _volumeIndexOfRefraction = -1.0;\r\n\r\n /**\r\n * Index of refraction of the material's volume.\r\n * https://en.wikipedia.org/wiki/List_of_refractive_indices\r\n *\r\n * This ONLY impacts refraction. If not provided or given a non-valid value,\r\n * the volume will use the same IOR as the surface.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public get volumeIndexOfRefraction(): number {\r\n if (this._volumeIndexOfRefraction >= 1.0) {\r\n return this._volumeIndexOfRefraction;\r\n }\r\n return this._indexOfRefraction;\r\n }\r\n public set volumeIndexOfRefraction(value: number) {\r\n if (value >= 1.0) {\r\n this._volumeIndexOfRefraction = value;\r\n } else {\r\n this._volumeIndexOfRefraction = -1.0;\r\n }\r\n }\r\n\r\n private _invertRefractionY = false;\r\n /**\r\n * Controls if refraction needs to be inverted on Y. This could be useful for procedural texture.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public invertRefractionY = false;\r\n\r\n /** @hidden */\r\n public _linkRefractionWithTransparency = false;\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 @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public linkRefractionWithTransparency = false;\r\n\r\n /**\r\n * Defines the minimum thickness stored in the thickness map.\r\n * If no thickness map is defined, this value will be used to simulate thickness.\r\n */\r\n @serialize()\r\n public minimumThickness: number = 0;\r\n\r\n /**\r\n * Defines the maximum thickness stored in the thickness map.\r\n */\r\n @serialize()\r\n public maximumThickness: number = 1;\r\n\r\n /**\r\n * Defines that the thickness should be used as a measure of the depth volume.\r\n */\r\n @serialize()\r\n public useThicknessAsDepth = false;\r\n\r\n /**\r\n * Defines the volume tint of the material.\r\n * This is used for both translucency and scattering.\r\n */\r\n @serializeAsColor3()\r\n public tintColor = Color3.White();\r\n\r\n /**\r\n * Defines the distance at which the tint color should be found in the media.\r\n * This is used for refraction only.\r\n */\r\n @serialize()\r\n public tintColorAtDistance = 1;\r\n\r\n /**\r\n * Defines how far each channel transmit through the media.\r\n * It is defined as a color to simplify it selection.\r\n */\r\n @serializeAsColor3()\r\n public diffusionDistance = Color3.White();\r\n\r\n private _useMaskFromThicknessTexture = false;\r\n /**\r\n * Stores the intensity of the different subsurface effects in the thickness texture.\r\n * Note that if refractionIntensityTexture and/or translucencyIntensityTexture is provided it takes precedence over thicknessTexture + useMaskFromThicknessTexture\r\n * * the green (red if useGltfStyleTextures = true) channel is the refraction intensity.\r\n * * the blue channel is the translucency intensity.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useMaskFromThicknessTexture: boolean = false;\r\n\r\n private _refractionIntensityTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Stores the intensity of the refraction. If provided, it takes precedence over thicknessTexture + useMaskFromThicknessTexture\r\n * * the green (red if useGltfStyleTextures = true) channel is the refraction intensity.\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public refractionIntensityTexture: Nullable<BaseTexture> = null;\r\n\r\n private _translucencyIntensityTexture: Nullable<BaseTexture> = null;\r\n /**\r\n * Stores the intensity of the translucency. If provided, it takes precedence over thicknessTexture + useMaskFromThicknessTexture\r\n * * the blue channel is the translucency intensity.\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public translucencyIntensityTexture: Nullable<BaseTexture> = null;\r\n\r\n private _scene: Scene;\r\n private _useGltfStyleTextures = false;\r\n /**\r\n * Use channels layout used by glTF:\r\n * * thicknessTexture: the green (instead of red) channel is the thickness\r\n * * thicknessTexture/refractionIntensityTexture: the red (instead of green) channel is the refraction intensity\r\n * * thicknessTexture/translucencyIntensityTexture: no change, use the blue channel for the translucency intensity\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useGltfStyleTextures: boolean = false;\r\n\r\n /** @hidden */\r\n private _internalMarkAllSubMeshesAsTexturesDirty: () => void;\r\n private _internalMarkScenePrePassDirty: () => void;\r\n\r\n /** @hidden */\r\n public _markAllSubMeshesAsTexturesDirty(): void {\r\n this._enable(this._isRefractionEnabled || this._isTranslucencyEnabled || this._isScatteringEnabled);\r\n this._internalMarkAllSubMeshesAsTexturesDirty();\r\n }\r\n /** @hidden */\r\n public _markScenePrePassDirty(): void {\r\n this._internalMarkAllSubMeshesAsTexturesDirty();\r\n this._internalMarkScenePrePassDirty();\r\n }\r\n\r\n constructor(material: PBRBaseMaterial, addToPluginList = true) {\r\n super(material, \"PBRSubSurface\", 130, new MaterialSubSurfaceDefines(), addToPluginList);\r\n\r\n this._scene = material.getScene();\r\n this.registerForExtraEvents = true;\r\n\r\n this._internalMarkAllSubMeshesAsTexturesDirty = material._dirtyCallbacks[1];\r\n this._internalMarkScenePrePassDirty = material._dirtyCallbacks[32];\r\n }\r\n\r\n public isReadyForSubMesh(defines: MaterialSubSurfaceDefines, scene: Scene, engine: Engine): boolean {\r\n if (!this._isRefractionEnabled && !this._isTranslucencyEnabled && !this._isScatteringEnabled) {\r\n return true;\r\n }\r\n\r\n if (defines._areTexturesDirty) {\r\n if (scene.texturesEnabled) {\r\n if (this._thicknessTexture && MaterialFlags.ThicknessTextureEnabled) {\r\n if (!this._thicknessTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n var refractionTexture = this._getRefractionTexture(scene);\r\n if (refractionTexture && MaterialFlags.RefractionTextureEnabled) {\r\n if (!refractionTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public prepareDefines(defines: MaterialSubSurfaceDefines, scene: Scene, mesh: AbstractMesh): void {\r\n if (!this._isRefractionEnabled && !this._isTranslucencyEnabled && !this._isScatteringEnabled) {\r\n defines.SUBSURFACE = false;\r\n defines.SS_TRANSLUCENCY = false;\r\n defines.SS_SCATTERING = false;\r\n defines.SS_REFRACTION = false;\r\n return;\r\n }\r\n\r\n if (defines._areTexturesDirty) {\r\n defines.SUBSURFACE = true;\r\n\r\n defines.SS_TRANSLUCENCY = this._isTranslucencyEnabled;\r\n defines.SS_TRANSLUCENCY_USE_INTENSITY_FROM_TEXTURE = false;\r\n defines.SS_SCATTERING = this._isScatteringEnabled;\r\n defines.SS_THICKNESSANDMASK_TEXTURE = false;\r\n defines.SS_REFRACTIONINTENSITY_TEXTURE = false;\r\n defines.SS_TRANSLUCENCYINTENSITY_TEXTURE = false;\r\n defines.SS_HAS_THICKNESS = false;\r\n defines.SS_MASK_FROM_THICKNESS_TEXTURE = false;\r\n defines.SS_USE_GLTF_TEXTURES = false;\r\n defines.SS_REFRACTION = false;\r\n defines.SS_REFRACTION_USE_INTENSITY_FROM_TEXTURE = false;\r\n defines.SS_REFRACTIONMAP_3D = false;\r\n defines.SS_GAMMAREFRACTION = false;\r\n defines.SS_RGBDREFRACTION = false;\r\n defines.SS_LINEARSPECULARREFRACTION = false;\r\n defines.SS_REFRACTIONMAP_OPPOSITEZ = false;\r\n defines.SS_LODINREFRACTIONALPHA = false;\r\n defines.SS_LINKREFRACTIONTOTRANSPARENCY = false;\r\n defines.SS_ALBEDOFORREFRACTIONTINT = false;\r\n defines.SS_ALBEDOFORTRANSLUCENCYTINT = false;\r\n defines.SS_USE_LOCAL_REFRACTIONMAP_CUBIC = false;\r\n defines.SS_USE_THICKNESS_AS_DEPTH = false;\r\n\r\n const refractionIntensityTextureIsThicknessTexture =\r\n !!this._thicknessTexture &&\r\n !!this._refractionIntensityTexture &&\r\n this._refractionIntensityTexture.checkTransformsAreIdentical(this._thicknessTexture) && this._refractionIntensityTexture._texture === this._thicknessTexture._texture;\r\n\r\n const translucencyIntensityTextureIsThicknessTexture =\r\n !!this._thicknessTexture &&\r\n !!this._translucencyIntensityTexture &&\r\n this._translucencyIntensityTexture.checkTransformsAreIdentical(this._thicknessTexture) && this._translucencyIntensityTexture._texture === this._thicknessTexture._texture;\r\n\r\n // if true, it means the refraction/translucency textures are the same than the thickness texture so there's no need to pass them to the shader, only thicknessTexture\r\n const useOnlyThicknessTexture = (refractionIntensityTextureIsThicknessTexture || !this._refractionIntensityTexture) && (translucencyIntensityTextureIsThicknessTexture || !this._translucencyIntensityTexture);\r\n\r\n if (defines._areTexturesDirty) {\r\n if (scene.texturesEnabled) {\r\n if (this._thicknessTexture && MaterialFlags.ThicknessTextureEnabled) {\r\n MaterialHelper.PrepareDefinesForMergedUV(this._thicknessTexture, defines, \"SS_THICKNESSANDMASK_TEXTURE\");\r\n }\r\n\r\n if (this._refractionIntensityTexture && MaterialFlags.RefractionIntensityTextureEnabled && !useOnlyThicknessTexture) {\r\n MaterialHelper.PrepareDefinesForMergedUV(this._refractionIntensityTexture, defines, \"SS_REFRACTIONINTENSITY_TEXTURE\");\r\n }\r\n\r\n if (this._translucencyIntensityTexture && MaterialFlags.TranslucencyIntensityTextureEnabled && !useOnlyThicknessTexture) {\r\n MaterialHelper.PrepareDefinesForMergedUV(this._translucencyIntensityTexture, defines, \"SS_TRANSLUCENCYINTENSITY_TEXTURE\");\r\n }\r\n }\r\n }\r\n\r\n defines.SS_HAS_THICKNESS = (this.maximumThickness - this.minimumThickness) !== 0.0;\r\n defines.SS_MASK_FROM_THICKNESS_TEXTURE = (this._useMaskFromThicknessTexture || !!this._refractionIntensityTexture || !!this._translucencyIntensityTexture) && useOnlyThicknessTexture;\r\n defines.SS_USE_GLTF_TEXTURES = this._useGltfStyleTextures;\r\n defines.SS_REFRACTION_USE_INTENSITY_FROM_TEXTURE = (this._useMaskFromThicknessTexture || !!this._refractionIntensityTexture) && useOnlyThicknessTexture;\r\n defines.SS_TRANSLUCENCY_USE_INTENSITY_FROM_TEXTURE = (this._useMaskFromThicknessTexture || !!this._translucencyIntensityTexture) && useOnlyThicknessTexture;\r\n\r\n if (this._isRefractionEnabled) {\r\n if (scene.texturesEnabled) {\r\n var refractionTexture = this._getRefractionTexture(scene);\r\n if (refractionTexture && MaterialFlags.RefractionTextureEnabled) {\r\n defines.SS_REFRACTION = true;\r\n defines.SS_REFRACTIONMAP_3D = refractionTexture.isCube;\r\n defines.SS_GAMMAREFRACTION = refractionTexture.gammaSpace;\r\n defines.SS_RGBDREFRACTION = refractionTexture.isRGBD;\r\n defines.SS_LINEARSPECULARREFRACTION = refractionTexture.linearSpecularLOD;\r\n defines.SS_REFRACTIONMAP_OPPOSITEZ = refractionTexture.invertZ;\r\n defines.SS_LODINREFRACTIONALPHA = refractionTexture.lodLevelInAlpha;\r\n defines.SS_LINKREFRACTIONTOTRANSPARENCY = this._linkRefractionWithTransparency;\r\n defines.SS_ALBEDOFORREFRACTIONTINT = this.useAlbedoToTintRefraction;\r\n defines.SS_USE_LOCAL_REFRACTIONMAP_CUBIC = refractionTexture.isCube && (<any>refractionTexture).boundingBoxSize;\r\n defines.SS_USE_THICKNESS_AS_DEPTH = this.useThicknessAsDepth;\r\n }\r\n }\r\n }\r\n\r\n if (this._isTranslucencyEnabled) {\r\n defines.SS_ALBEDOFORTRANSLUCENCYTINT = this.useAlbedoToTintTranslucency;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Binds the material data (this function is called even if mustRebind() returns false)\r\n * @param uniformBuffer defines the Uniform buffer to fill in.\r\n * @param scene defines the scene the material belongs to.\r\n * @param engine defines the engine the material belongs to.\r\n * @param subMesh the submesh to bind data for\r\n */\r\n public hardBindForSubMesh(uniformBuffer: UniformBuffer, scene: Scene, engine: Engine, subMesh: SubMesh): void {\r\n if (!this._isRefractionEnabled && !this._isTranslucencyEnabled && !this._isScatteringEnabled) {\r\n return;\r\n }\r\n\r\n subMesh.getRenderingMesh().getWorldMatrix().decompose(TmpVectors.Vector3[0]);\r\n\r\n const thicknessScale = Math.max(Math.abs(TmpVectors.Vector3[0].x), Math.abs(TmpVectors.Vector3[0].y), Math.abs(TmpVectors.Vector3[0].z));\r\n\r\n uniformBuffer.updateFloat2(\"vThicknessParam\", this.minimumThickness * thicknessScale, (this.maximumThickness - this.minimumThickness) * thicknessScale);\r\n }\r\n\r\n public bindForSubMesh(uniformBuffer: UniformBuffer, scene: Scene, engine: Engine, subMesh: SubMesh): void {\r\n if (!this._isRefractionEnabled && !this._isTranslucencyEnabled && !this._isScatteringEnabled) {\r\n return;\r\n }\r\n\r\n const defines = subMesh!.materialDefines as unknown as MaterialSubSurfaceDefines;\r\n\r\n const isFrozen = this._material.isFrozen;\r\n const realTimeFiltering = this._material.realTimeFiltering;\r\n const lodBasedMicrosurface = defines.LODBASEDMICROSFURACE;\r\n\r\n var refractionTexture = this._getRefractionTexture(scene);\r\n\r\n if (!uniformBuffer.useUbo || !isFrozen || !uniformBuffer.isSync) {\r\n if (this._thicknessTexture && MaterialFlags.ThicknessTextureEnabled) {\r\n uniformBuffer.updateFloat2(\"vThicknessInfos\", this._thicknessTexture.coordinatesIndex, this._thicknessTexture.level);\r\n MaterialHelper.BindTextureMatrix(this._thicknessTexture, uniformBuffer, \"thickness\");\r\n }\r\n\r\n if (this._refractionIntensityTexture && MaterialFlags.RefractionIntensityTextureEnabled && defines.SS_REFRACTIONINTENSITY_TEXTURE) {\r\n uniformBuffer.updateFloat2(\"vRefractionIntensityInfos\", this._refractionIntensityTexture.coordinatesIndex, this._refractionIntensityTexture.level);\r\n MaterialHelper.BindTextureMatrix(this._refractionIntensityTexture, uniformBuffer, \"refractionIntensity\");\r\n }\r\n\r\n if (this._translucencyIntensityTexture && MaterialFlags.TranslucencyIntensityTextureEnabled && defines.SS_TRANSLUCENCYINTENSITY_TEXTURE) {\r\n uniformBuffer.updateFloat2(\"vTranslucencyIntensityInfos\", this._translucencyIntensityTexture.coordinatesIndex, this._translucencyIntensityTexture.level);\r\n MaterialHelper.BindTextureMatrix(this._translucencyIntensityTexture, uniformBuffer, \"translucencyIntensity\");\r\n }\r\n\r\n if (refractionTexture && MaterialFlags.RefractionTextureEnabled) {\r\n uniformBuffer.updateMatrix(\"refractionMatrix\", refractionTexture.getReflectionTextureMatrix());\r\n\r\n var 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 var width = refractionTexture.getSize().width;\r\n var refractionIor = this.volumeIndexOfRefraction;\r\n uniformBuffer.updateFloat4(\"vRefractionInfos\", refractionTexture.level, 1 / refractionIor, depth, this._invertRefractionY ? -1 : 1);\r\n uniformBuffer.updateFloat4(\"vRefractionMicrosurfaceInfos\",\r\n width,\r\n refractionTexture.lodGenerationScale,\r\n refractionTexture.lodGenerationOffset,\r\n 1.0 / this.indexOfRefraction);\r\n\r\n if (realTimeFiltering) {\r\n uniformBuffer.updateFloat2(\"vRefractionFilteringInfo\", width, Scalar.Log2(width));\r\n }\r\n\r\n if ((<any>refractionTexture).boundingBoxSize) {\r\n let cubeTexture = <CubeTexture>refractionTexture;\r\n\r\n uniformBuffer.updateVector3(\"vRefractionPosition\", cubeTexture.boundingBoxPosition);\r\n uniformBuffer.updateVector3(\"vRefractionSize\", cubeTexture.boundingBoxSize);\r\n }\r\n }\r\n\r\n if (this._isScatteringEnabled) {\r\n uniformBuffer.updateFloat(\"scatteringDiffusionProfile\", this._scatteringDiffusionProfileIndex);\r\n }\r\n uniformBuffer.updateColor3(\"vDiffusionDistance\", this.diffusionDistance);\r\n\r\n uniformBuffer.updateFloat4(\"vTintColor\", this.tintColor.r,\r\n this.tintColor.g,\r\n this.tintColor.b,\r\n Math.max(0.00001, this.tintColorAtDistance));\r\n\r\n uniformBuffer.updateFloat3(\"vSubSurfaceIntensity\", this.refractionIntensity, this.translucencyIntensity, 0);\r\n }\r\n\r\n // Textures\r\n if (scene.texturesEnabled) {\r\n if (this._thicknessTexture && MaterialFlags.ThicknessTextureEnabled) {\r\n uniformBuffer.setTexture(\"thicknessSampler\", this._thicknessTexture);\r\n }\r\n\r\n if (this._refractionIntensityTexture && MaterialFlags.RefractionIntensityTextureEnabled && defines.SS_REFRACTIONINTENSITY_TEXTURE) {\r\n uniformBuffer.setTexture(\"refractionIntensitySampler\", this._refractionIntensityTexture);\r\n }\r\n\r\n if (this._translucencyIntensityTexture && MaterialFlags.TranslucencyIntensityTextureEnabled && defines.SS_TRANSLUCENCYINTENSITY_TEXTURE) {\r\n uniformBuffer.setTexture(\"translucencyIntensitySampler\", this._translucencyIntensityTexture);\r\n }\r\n\r\n if (refractionTexture && MaterialFlags.RefractionTextureEnabled) {\r\n if (lodBasedMicrosurface) {\r\n uniformBuffer.setTexture(\"refractionSampler\", refractionTexture);\r\n }\r\n else {\r\n uniformBuffer.setTexture(\"refractionSampler\", refractionTexture._lodTextureMid || refractionTexture);\r\n uniformBuffer.setTexture(\"refractionSamplerLow\", refractionTexture._lodTextureLow || refractionTexture);\r\n uniformBuffer.setTexture(\"refractionSamplerHigh\", refractionTexture._lodTextureHigh || refractionTexture);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns the texture used for refraction or null if none is used.\r\n * @param scene defines the scene the material belongs to.\r\n * @returns - Refraction texture if present. If no refraction texture and refraction\r\n * is linked with transparency, returns environment texture. Otherwise, returns null.\r\n */\r\n private _getRefractionTexture(scene: Scene): Nullable<BaseTexture> {\r\n if (this._refractionTexture) {\r\n return this._refractionTexture;\r\n }\r\n\r\n if (this._isRefractionEnabled) {\r\n return scene.environmentTexture;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns true if alpha blending should be disabled.\r\n */\r\n public get disableAlphaBlending(): boolean {\r\n return this._isRefractionEnabled && this._linkRefractionWithTransparency;\r\n }\r\n\r\n /**\r\n * Fills the list of render target textures.\r\n * @param renderTargets the list of render targets to update\r\n */\r\n public fillRenderTargetTextures(renderTargets: SmartArray<RenderTargetTexture>): void {\r\n if (MaterialFlags.RefractionTextureEnabled && this._refractionTexture && this._refractionTexture.isRenderTarget) {\r\n renderTargets.push(<RenderTargetTexture>this._refractionTexture);\r\n }\r\n }\r\n\r\n public hasTexture(texture: BaseTexture): boolean {\r\n if (this._thicknessTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._refractionTexture === texture) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public hasRenderTargetTextures(): boolean {\r\n if (MaterialFlags.RefractionTextureEnabled && this._refractionTexture && this._refractionTexture.isRenderTarget) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public getActiveTextures(activeTextures: BaseTexture[]): void {\r\n if (this._thicknessTexture) {\r\n activeTextures.push(this._thicknessTexture);\r\n }\r\n\r\n if (this._refractionTexture) {\r\n activeTextures.push(this._refractionTexture);\r\n }\r\n }\r\n\r\n public getAnimatables(animatables: IAnimatable[]): void {\r\n if (this._thicknessTexture && this._thicknessTexture.animations && this._thicknessTexture.animations.length > 0) {\r\n animatables.push(this._thicknessTexture);\r\n }\r\n\r\n if (this._refractionTexture && this._refractionTexture.animations && this._refractionTexture.animations.length > 0) {\r\n animatables.push(this._refractionTexture);\r\n }\r\n }\r\n\r\n public dispose(forceDisposeTextures?: boolean): void {\r\n if (forceDisposeTextures) {\r\n if (this._thicknessTexture) {\r\n this._thicknessTexture.dispose();\r\n }\r\n\r\n if (this._refractionTexture) {\r\n this._refractionTexture.dispose();\r\n }\r\n }\r\n }\r\n\r\n public getClassName(): string {\r\n return \"PBRSubSurfaceConfiguration\";\r\n }\r\n\r\n public addFallbacks(defines: MaterialSubSurfaceDefines, fallbacks: EffectFallbacks, currentRank: number): number {\r\n if (defines.SS_SCATTERING) {\r\n fallbacks.addFallback(currentRank++, \"SS_SCATTERING\");\r\n }\r\n if (defines.SS_TRANSLUCENCY) {\r\n fallbacks.addFallback(currentRank++, \"SS_TRANSLUCENCY\");\r\n }\r\n return currentRank;\r\n }\r\n\r\n public getSamplers(samplers: string[]): void {\r\n samplers.push(\"thicknessSampler\", \"refractionIntensitySampler\", \"translucencyIntensitySampler\", \"refractionSampler\", \"refractionSamplerLow\", \"refractionSamplerHigh\");\r\n }\r\n\r\n public getUniforms(): { ubo?: Array<{ name: string; size: number; type: string }>; vertex?: string; fragment?: string } {\r\n return {\r\n ubo: [\r\n { name: \"vRefractionMicrosurfaceInfos\", size: 4, type: \"vec4\" },\r\n { name: \"vRefractionFilteringInfo\", size: 2, type: \"vec2\" },\r\n { name: \"vTranslucencyIntensityInfos\", size: 2, type: \"vec2\" },\r\n { name: \"vRefractionInfos\", size: 4, type: \"vec4\" },\r\n { name: \"refractionMatrix\", size: 16, type: \"mat4\" },\r\n { name: \"vThicknessInfos\", size: 2, type: \"vec2\" },\r\n { name: \"vRefractionIntensityInfos\", size: 2, type: \"vec2\" },\r\n { name: \"thicknessMatrix\", size: 16, type: \"mat4\" },\r\n { name: \"refractionIntensityMatrix\", size: 16, type: \"mat4\" },\r\n { name: \"translucencyIntensityMatrix\", size: 16, type: \"mat4\" },\r\n { name: \"vThicknessParam\", size: 2, type: \"vec2\" },\r\n { name: \"vDiffusionDistance\", size: 3, type: \"vec3\" },\r\n { name: \"vTintColor\", size: 4, type: \"vec4\" },\r\n { name: \"vSubSurfaceIntensity\", size: 3, type: \"vec3\" },\r\n { name: \"vRefractionPosition\", size: 3, type: \"vec3\" },\r\n { name: \"vRefractionSize\", size: 3, type: \"vec3\" },\r\n { name: \"scatteringDiffusionProfile\", size: 1, type: \"float\" },\r\n ],\r\n };\r\n }\r\n}\r\n"]}
@@ -5,7 +5,7 @@ import "../../Engines/Extensions/engine.dynamicTexture";
5
5
  import { ICanvasRenderingContext } from "../../Engines/ICanvas";
6
6
  /**
7
7
  * A class extending Texture allowing drawing on a texture
8
- * @see https://doc.babylonjs.com/how_to/dynamictexture
8
+ * @see https://doc.babylonjs.com/divingDeeper/materials/using/dynamicTexture
9
9
  */
10
10
  export declare class DynamicTexture extends Texture {
11
11
  private _generateMipMaps;
@@ -56,8 +56,9 @@ export declare class DynamicTexture extends Texture {
56
56
  * Updates the texture
57
57
  * @param invertY defines the direction for the Y axis (default is true - y increases downwards)
58
58
  * @param premulAlpha defines if alpha is stored as premultiplied (default is false)
59
+ * @param allowGPUOptimization true to allow some specific GPU optimizations (subject to engine feature "allowGPUOptimizationsForGUI" being true)
59
60
  */
60
- update(invertY?: boolean, premulAlpha?: boolean): void;
61
+ update(invertY?: boolean, premulAlpha?: boolean, allowGPUOptimization?: boolean): void;
61
62
  /**
62
63
  * Draws text onto the texture
63
64
  * @param text defines the text to be drawn
@@ -4,7 +4,7 @@ import { Texture } from "../../Materials/Textures/texture.js";
4
4
  import "../../Engines/Extensions/engine.dynamicTexture.js";
5
5
  /**
6
6
  * A class extending Texture allowing drawing on a texture
7
- * @see https://doc.babylonjs.com/how_to/dynamictexture
7
+ * @see https://doc.babylonjs.com/divingDeeper/materials/using/dynamicTexture
8
8
  */
9
9
  var DynamicTexture = /** @class */ (function (_super) {
10
10
  __extends(DynamicTexture, _super);
@@ -117,10 +117,12 @@ var DynamicTexture = /** @class */ (function (_super) {
117
117
  * Updates the texture
118
118
  * @param invertY defines the direction for the Y axis (default is true - y increases downwards)
119
119
  * @param premulAlpha defines if alpha is stored as premultiplied (default is false)
120
+ * @param allowGPUOptimization true to allow some specific GPU optimizations (subject to engine feature "allowGPUOptimizationsForGUI" being true)
120
121
  */
121
- DynamicTexture.prototype.update = function (invertY, premulAlpha) {
122
+ DynamicTexture.prototype.update = function (invertY, premulAlpha, allowGPUOptimization) {
122
123
  if (premulAlpha === void 0) { premulAlpha = false; }
123
- this._getEngine().updateDynamicTexture(this._texture, this._canvas, invertY === undefined ? true : invertY, premulAlpha, this._format || undefined);
124
+ if (allowGPUOptimization === void 0) { allowGPUOptimization = false; }
125
+ this._getEngine().updateDynamicTexture(this._texture, this._canvas, invertY === undefined ? true : invertY, premulAlpha, this._format || undefined, undefined, allowGPUOptimization);
124
126
  };
125
127
  /**
126
128
  * Draws text onto the texture
@@ -1 +1 @@
1
- {"version":3,"file":"dynamicTexture.js","sourceRoot":"","sources":["../../../../sourceES6/core/Materials/Textures/dynamicTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../../Misc/logger\";\r\nimport { Nullable } from \"../../types\";\r\nimport { Scene } from \"../../scene\";\r\nimport { ISize } from \"../../Maths/math.size\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\n\r\nimport \"../../Engines/Extensions/engine.dynamicTexture\";\r\nimport { ICanvas, ICanvasRenderingContext } from \"../../Engines/ICanvas\";\r\n\r\n/**\r\n * A class extending Texture allowing drawing on a texture\r\n * @see https://doc.babylonjs.com/how_to/dynamictexture\r\n */\r\nexport class DynamicTexture extends Texture {\r\n private _generateMipMaps: boolean;\r\n private _canvas: ICanvas;\r\n private _context: ICanvasRenderingContext;\r\n\r\n /**\r\n * Creates a DynamicTexture\r\n * @param name defines the name of the texture\r\n * @param options provides 3 alternatives for width and height of texture, a canvas, object with width and height properties, number for both width and height\r\n * @param scene defines the scene where you want the texture\r\n * @param generateMipMaps defines the use of MinMaps or not (default is false)\r\n * @param samplingMode defines the sampling mode to use (default is Texture.TRILINEAR_SAMPLINGMODE)\r\n * @param format defines the texture format to use (default is Engine.TEXTUREFORMAT_RGBA)\r\n * @param invertY defines if the texture needs to be inverted on the y axis during loading\r\n */\r\n\r\n constructor(name: string, options: any, scene: Nullable<Scene> = null, generateMipMaps: boolean = false, samplingMode: number = 3, format: number = 5, invertY?: boolean) {\r\n super(null, scene, !generateMipMaps, invertY, samplingMode, undefined, undefined, undefined, undefined, format);\r\n\r\n this.name = name;\r\n this.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n\r\n this._generateMipMaps = generateMipMaps;\r\n\r\n const engine = this._getEngine();\r\n if (!engine) {\r\n return;\r\n }\r\n\r\n if (options.getContext) {\r\n this._canvas = options;\r\n this._texture = engine.createDynamicTexture(options.width, options.height, generateMipMaps, samplingMode);\r\n } else {\r\n this._canvas = engine.createCanvas(1, 1);\r\n\r\n if (options.width || options.width === 0) {\r\n this._texture = engine.createDynamicTexture(options.width, options.height, generateMipMaps, samplingMode);\r\n } else {\r\n this._texture = engine.createDynamicTexture(options, options, generateMipMaps, samplingMode);\r\n }\r\n }\r\n\r\n var textureSize = this.getSize();\r\n\r\n if (this._canvas.width !== textureSize.width) {\r\n this._canvas.width = textureSize.width;\r\n }\r\n if (this._canvas.height !== textureSize.height) {\r\n this._canvas.height = textureSize.height;\r\n }\r\n this._context = this._canvas.getContext(\"2d\");\r\n }\r\n\r\n /**\r\n * Get the current class name of the texture useful for serialization or dynamic coding.\r\n * @returns \"DynamicTexture\"\r\n */\r\n public getClassName(): string {\r\n return \"DynamicTexture\";\r\n }\r\n\r\n /**\r\n * Gets the current state of canRescale\r\n */\r\n public get canRescale(): boolean {\r\n return true;\r\n }\r\n\r\n private _recreate(textureSize: ISize): void {\r\n this._canvas.width = textureSize.width;\r\n this._canvas.height = textureSize.height;\r\n\r\n this.releaseInternalTexture();\r\n\r\n this._texture = this._getEngine()!.createDynamicTexture(textureSize.width, textureSize.height, this._generateMipMaps, this.samplingMode);\r\n }\r\n\r\n /**\r\n * Scales the texture\r\n * @param ratio the scale factor to apply to both width and height\r\n */\r\n public scale(ratio: number): void {\r\n var textureSize = this.getSize();\r\n\r\n textureSize.width *= ratio;\r\n textureSize.height *= ratio;\r\n\r\n this._recreate(textureSize);\r\n }\r\n\r\n /**\r\n * Resizes the texture\r\n * @param width the new width\r\n * @param height the new height\r\n */\r\n public scaleTo(width: number, height: number): void {\r\n var textureSize = this.getSize();\r\n\r\n textureSize.width = width;\r\n textureSize.height = height;\r\n\r\n this._recreate(textureSize);\r\n }\r\n\r\n /**\r\n * Gets the context of the canvas used by the texture\r\n * @returns the canvas context of the dynamic texture\r\n */\r\n public getContext(): ICanvasRenderingContext {\r\n return this._context;\r\n }\r\n\r\n /**\r\n * Clears the texture\r\n */\r\n public clear(): void {\r\n var size = this.getSize();\r\n this._context.fillRect(0, 0, size.width, size.height);\r\n }\r\n\r\n /**\r\n * Updates the texture\r\n * @param invertY defines the direction for the Y axis (default is true - y increases downwards)\r\n * @param premulAlpha defines if alpha is stored as premultiplied (default is false)\r\n */\r\n public update(invertY?: boolean, premulAlpha = false): void {\r\n this._getEngine()!.updateDynamicTexture(this._texture, this._canvas, invertY === undefined ? true : invertY, premulAlpha, this._format || undefined);\r\n }\r\n\r\n /**\r\n * Draws text onto the texture\r\n * @param text defines the text to be drawn\r\n * @param x defines the placement of the text from the left\r\n * @param y defines the placement of the text from the top when invertY is true and from the bottom when false\r\n * @param font defines the font to be used with font-style, font-size, font-name\r\n * @param color defines the color used for the text\r\n * @param clearColor defines the color for the canvas, use null to not overwrite canvas\r\n * @param invertY defines the direction for the Y axis (default is true - y increases downwards)\r\n * @param update defines whether texture is immediately update (default is true)\r\n */\r\n public drawText(text: string, x: number | null | undefined, y: number | null | undefined, font: string, color: string | null, clearColor: string, invertY?: boolean, update = true) {\r\n var size = this.getSize();\r\n if (clearColor) {\r\n this._context.fillStyle = clearColor;\r\n this._context.fillRect(0, 0, size.width, size.height);\r\n }\r\n\r\n this._context.font = font;\r\n if (x === null || x === undefined) {\r\n var textSize = this._context.measureText(text);\r\n x = (size.width - textSize.width) / 2;\r\n }\r\n if (y === null || y === undefined) {\r\n var fontSize = parseInt((font.replace(/\\D/g, '')));\r\n y = (size.height / 2) + (fontSize / 3.65);\r\n }\r\n\r\n this._context.fillStyle = color || \"\";\r\n this._context.fillText(text, x, y);\r\n\r\n if (update) {\r\n this.update(invertY);\r\n }\r\n }\r\n\r\n /**\r\n * Clones the texture\r\n * @returns the clone of the texture.\r\n */\r\n public clone(): DynamicTexture {\r\n let scene = this.getScene();\r\n\r\n if (!scene) {\r\n return this;\r\n }\r\n\r\n var textureSize = this.getSize();\r\n var newTexture = new DynamicTexture(this.name, textureSize, scene, this._generateMipMaps);\r\n\r\n // Base texture\r\n newTexture.hasAlpha = this.hasAlpha;\r\n newTexture.level = this.level;\r\n\r\n // Dynamic Texture\r\n newTexture.wrapU = this.wrapU;\r\n newTexture.wrapV = this.wrapV;\r\n\r\n return newTexture;\r\n }\r\n\r\n /**\r\n * Serializes the dynamic texture. The scene should be ready before the dynamic texture is serialized\r\n * @returns a serialized dynamic texture object\r\n */\r\n public serialize(): any {\r\n const scene = this.getScene();\r\n if (scene && !scene.isReady()) {\r\n Logger.Warn(\"The scene must be ready before serializing the dynamic texture\");\r\n }\r\n\r\n const serializationObject = super.serialize();\r\n if (this._IsCanvasElement(this._canvas)) {\r\n serializationObject.base64String = this._canvas.toDataURL();\r\n }\r\n\r\n serializationObject.invertY = this._invertY;\r\n serializationObject.samplingMode = this.samplingMode;\r\n\r\n return serializationObject;\r\n }\r\n\r\n private _IsCanvasElement(canvas: HTMLCanvasElement | OffscreenCanvas | ICanvas): canvas is HTMLCanvasElement {\r\n return (canvas as HTMLCanvasElement).toDataURL !== undefined;\r\n }\r\n\r\n /** @hidden */\r\n public _rebuild(): void {\r\n this.update();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"dynamicTexture.js","sourceRoot":"","sources":["../../../../sourceES6/core/Materials/Textures/dynamicTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../../Misc/logger\";\r\nimport { Nullable } from \"../../types\";\r\nimport { Scene } from \"../../scene\";\r\nimport { ISize } from \"../../Maths/math.size\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\n\r\nimport \"../../Engines/Extensions/engine.dynamicTexture\";\r\nimport { ICanvas, ICanvasRenderingContext } from \"../../Engines/ICanvas\";\r\n\r\n/**\r\n * A class extending Texture allowing drawing on a texture\r\n * @see https://doc.babylonjs.com/divingDeeper/materials/using/dynamicTexture\r\n */\r\nexport class DynamicTexture extends Texture {\r\n private _generateMipMaps: boolean;\r\n private _canvas: ICanvas;\r\n private _context: ICanvasRenderingContext;\r\n\r\n /**\r\n * Creates a DynamicTexture\r\n * @param name defines the name of the texture\r\n * @param options provides 3 alternatives for width and height of texture, a canvas, object with width and height properties, number for both width and height\r\n * @param scene defines the scene where you want the texture\r\n * @param generateMipMaps defines the use of MinMaps or not (default is false)\r\n * @param samplingMode defines the sampling mode to use (default is Texture.TRILINEAR_SAMPLINGMODE)\r\n * @param format defines the texture format to use (default is Engine.TEXTUREFORMAT_RGBA)\r\n * @param invertY defines if the texture needs to be inverted on the y axis during loading\r\n */\r\n\r\n constructor(name: string, options: any, scene: Nullable<Scene> = null, generateMipMaps: boolean = false, samplingMode: number = 3, format: number = 5, invertY?: boolean) {\r\n super(null, scene, !generateMipMaps, invertY, samplingMode, undefined, undefined, undefined, undefined, format);\r\n\r\n this.name = name;\r\n this.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n\r\n this._generateMipMaps = generateMipMaps;\r\n\r\n const engine = this._getEngine();\r\n if (!engine) {\r\n return;\r\n }\r\n\r\n if (options.getContext) {\r\n this._canvas = options;\r\n this._texture = engine.createDynamicTexture(options.width, options.height, generateMipMaps, samplingMode);\r\n } else {\r\n this._canvas = engine.createCanvas(1, 1);\r\n\r\n if (options.width || options.width === 0) {\r\n this._texture = engine.createDynamicTexture(options.width, options.height, generateMipMaps, samplingMode);\r\n } else {\r\n this._texture = engine.createDynamicTexture(options, options, generateMipMaps, samplingMode);\r\n }\r\n }\r\n\r\n var textureSize = this.getSize();\r\n\r\n if (this._canvas.width !== textureSize.width) {\r\n this._canvas.width = textureSize.width;\r\n }\r\n if (this._canvas.height !== textureSize.height) {\r\n this._canvas.height = textureSize.height;\r\n }\r\n this._context = this._canvas.getContext(\"2d\");\r\n }\r\n\r\n /**\r\n * Get the current class name of the texture useful for serialization or dynamic coding.\r\n * @returns \"DynamicTexture\"\r\n */\r\n public getClassName(): string {\r\n return \"DynamicTexture\";\r\n }\r\n\r\n /**\r\n * Gets the current state of canRescale\r\n */\r\n public get canRescale(): boolean {\r\n return true;\r\n }\r\n\r\n private _recreate(textureSize: ISize): void {\r\n this._canvas.width = textureSize.width;\r\n this._canvas.height = textureSize.height;\r\n\r\n this.releaseInternalTexture();\r\n\r\n this._texture = this._getEngine()!.createDynamicTexture(textureSize.width, textureSize.height, this._generateMipMaps, this.samplingMode);\r\n }\r\n\r\n /**\r\n * Scales the texture\r\n * @param ratio the scale factor to apply to both width and height\r\n */\r\n public scale(ratio: number): void {\r\n var textureSize = this.getSize();\r\n\r\n textureSize.width *= ratio;\r\n textureSize.height *= ratio;\r\n\r\n this._recreate(textureSize);\r\n }\r\n\r\n /**\r\n * Resizes the texture\r\n * @param width the new width\r\n * @param height the new height\r\n */\r\n public scaleTo(width: number, height: number): void {\r\n var textureSize = this.getSize();\r\n\r\n textureSize.width = width;\r\n textureSize.height = height;\r\n\r\n this._recreate(textureSize);\r\n }\r\n\r\n /**\r\n * Gets the context of the canvas used by the texture\r\n * @returns the canvas context of the dynamic texture\r\n */\r\n public getContext(): ICanvasRenderingContext {\r\n return this._context;\r\n }\r\n\r\n /**\r\n * Clears the texture\r\n */\r\n public clear(): void {\r\n var size = this.getSize();\r\n this._context.fillRect(0, 0, size.width, size.height);\r\n }\r\n\r\n /**\r\n * Updates the texture\r\n * @param invertY defines the direction for the Y axis (default is true - y increases downwards)\r\n * @param premulAlpha defines if alpha is stored as premultiplied (default is false)\r\n * @param allowGPUOptimization true to allow some specific GPU optimizations (subject to engine feature \"allowGPUOptimizationsForGUI\" being true)\r\n */\r\n public update(invertY?: boolean, premulAlpha = false, allowGPUOptimization = false): void {\r\n this._getEngine()!.updateDynamicTexture(this._texture, this._canvas, invertY === undefined ? true : invertY, premulAlpha, this._format || undefined, undefined, allowGPUOptimization);\r\n }\r\n\r\n /**\r\n * Draws text onto the texture\r\n * @param text defines the text to be drawn\r\n * @param x defines the placement of the text from the left\r\n * @param y defines the placement of the text from the top when invertY is true and from the bottom when false\r\n * @param font defines the font to be used with font-style, font-size, font-name\r\n * @param color defines the color used for the text\r\n * @param clearColor defines the color for the canvas, use null to not overwrite canvas\r\n * @param invertY defines the direction for the Y axis (default is true - y increases downwards)\r\n * @param update defines whether texture is immediately update (default is true)\r\n */\r\n public drawText(text: string, x: number | null | undefined, y: number | null | undefined, font: string, color: string | null, clearColor: string, invertY?: boolean, update = true) {\r\n var size = this.getSize();\r\n if (clearColor) {\r\n this._context.fillStyle = clearColor;\r\n this._context.fillRect(0, 0, size.width, size.height);\r\n }\r\n\r\n this._context.font = font;\r\n if (x === null || x === undefined) {\r\n var textSize = this._context.measureText(text);\r\n x = (size.width - textSize.width) / 2;\r\n }\r\n if (y === null || y === undefined) {\r\n var fontSize = parseInt((font.replace(/\\D/g, '')));\r\n y = (size.height / 2) + (fontSize / 3.65);\r\n }\r\n\r\n this._context.fillStyle = color || \"\";\r\n this._context.fillText(text, x, y);\r\n\r\n if (update) {\r\n this.update(invertY);\r\n }\r\n }\r\n\r\n /**\r\n * Clones the texture\r\n * @returns the clone of the texture.\r\n */\r\n public clone(): DynamicTexture {\r\n let scene = this.getScene();\r\n\r\n if (!scene) {\r\n return this;\r\n }\r\n\r\n var textureSize = this.getSize();\r\n var newTexture = new DynamicTexture(this.name, textureSize, scene, this._generateMipMaps);\r\n\r\n // Base texture\r\n newTexture.hasAlpha = this.hasAlpha;\r\n newTexture.level = this.level;\r\n\r\n // Dynamic Texture\r\n newTexture.wrapU = this.wrapU;\r\n newTexture.wrapV = this.wrapV;\r\n\r\n return newTexture;\r\n }\r\n\r\n /**\r\n * Serializes the dynamic texture. The scene should be ready before the dynamic texture is serialized\r\n * @returns a serialized dynamic texture object\r\n */\r\n public serialize(): any {\r\n const scene = this.getScene();\r\n if (scene && !scene.isReady()) {\r\n Logger.Warn(\"The scene must be ready before serializing the dynamic texture\");\r\n }\r\n\r\n const serializationObject = super.serialize();\r\n if (this._IsCanvasElement(this._canvas)) {\r\n serializationObject.base64String = this._canvas.toDataURL();\r\n }\r\n\r\n serializationObject.invertY = this._invertY;\r\n serializationObject.samplingMode = this.samplingMode;\r\n\r\n return serializationObject;\r\n }\r\n\r\n private _IsCanvasElement(canvas: HTMLCanvasElement | OffscreenCanvas | ICanvas): canvas is HTMLCanvasElement {\r\n return (canvas as HTMLCanvasElement).toDataURL !== undefined;\r\n }\r\n\r\n /** @hidden */\r\n public _rebuild(): void {\r\n this.update();\r\n }\r\n}\r\n"]}
@@ -2,6 +2,7 @@ import { Nullable } from "../../types";
2
2
  import { Scene } from "../../scene";
3
3
  import { Matrix, Vector3 } from "../../Maths/math.vector";
4
4
  import { BaseTexture } from "../../Materials/Textures/baseTexture";
5
+ import { Observable } from "../../Misc/observable";
5
6
  import { ThinEngine } from '../../Engines/thinEngine';
6
7
  import "../../Engines/Extensions/engine.rawTexture";
7
8
  import "../../Materials/Textures/baseTexture.polynomial";
@@ -56,6 +57,10 @@ export declare class HDRCubeTexture extends BaseTexture {
56
57
  */
57
58
  set boundingBoxSize(value: Vector3);
58
59
  get boundingBoxSize(): Vector3;
60
+ /**
61
+ * Observable triggered once the texture has been loaded.
62
+ */
63
+ onLoadObservable: Observable<HDRCubeTexture>;
59
64
  /**
60
65
  * Instantiates an HDRTexture from the following parameters.
61
66
  *
@@ -89,6 +94,10 @@ export declare class HDRCubeTexture extends BaseTexture {
89
94
  * @param value Define the reflection matrix to set
90
95
  */
91
96
  setReflectionTextureMatrix(value: Matrix): void;
97
+ /**
98
+ * Dispose the texture and release its associated resources.
99
+ */
100
+ dispose(): void;
92
101
  /**
93
102
  * Parses a JSON representation of an HDR Texture in order to create the texture
94
103
  * @param parsedTexture Define the JSON representation
@@ -5,6 +5,7 @@ import { Texture } from "../../Materials/Textures/texture.js";
5
5
  import { HDRTools } from "../../Misc/HighDynamicRange/hdr.js";
6
6
  import { CubeMapToSphericalPolynomialTools } from "../../Misc/HighDynamicRange/cubemapToSphericalPolynomial.js";
7
7
  import { RegisterClass } from '../../Misc/typeStore.js';
8
+ import { Observable } from "../../Misc/observable.js";
8
9
  import { Tools } from '../../Misc/tools.js';
9
10
  import { ToGammaSpace } from '../../Maths/math.constants.js';
10
11
  import { HDRFiltering } from "../../Materials/Textures/Filtering/hdrFiltering.js";
@@ -40,7 +41,6 @@ var HDRCubeTexture = /** @class */ (function (_super) {
40
41
  var _a;
41
42
  var _this = _super.call(this, sceneOrEngine) || this;
42
43
  _this._generateHarmonics = true;
43
- _this._onLoad = null;
44
44
  _this._onError = null;
45
45
  _this._isBlocking = true;
46
46
  _this._rotationY = 0;
@@ -49,6 +49,10 @@ var HDRCubeTexture = /** @class */ (function (_super) {
49
49
  * It must define where the camera used to render the texture was set
50
50
  */
51
51
  _this.boundingBoxPosition = Vector3.Zero();
52
+ /**
53
+ * Observable triggered once the texture has been loaded.
54
+ */
55
+ _this.onLoadObservable = new Observable();
52
56
  if (!url) {
53
57
  return _this;
54
58
  }
@@ -59,7 +63,12 @@ var HDRCubeTexture = /** @class */ (function (_super) {
59
63
  _this.isCube = true;
60
64
  _this._textureMatrix = Matrix.Identity();
61
65
  _this._prefilterOnLoad = prefilterOnLoad;
62
- _this._onLoad = onLoad;
66
+ _this._onLoad = function () {
67
+ _this.onLoadObservable.notifyObservers(_this);
68
+ if (onLoad) {
69
+ onLoad();
70
+ }
71
+ };
63
72
  _this._onError = onError;
64
73
  _this.gammaSpace = gammaSpace;
65
74
  _this._noMipmap = noMipmap;
@@ -74,12 +83,12 @@ var HDRCubeTexture = /** @class */ (function (_super) {
74
83
  _this.delayLoadState = 4;
75
84
  }
76
85
  }
77
- else if (onLoad) {
86
+ else {
78
87
  if (_this._texture.isReady) {
79
- Tools.SetImmediate(function () { return onLoad(); });
88
+ Tools.SetImmediate(function () { return _this._onLoad(); });
80
89
  }
81
90
  else {
82
- _this._texture.onLoadedObservable.add(onLoad);
91
+ _this._texture.onLoadedObservable.add(_this._onLoad);
83
92
  }
84
93
  }
85
94
  return _this;
@@ -283,6 +292,13 @@ var HDRCubeTexture = /** @class */ (function (_super) {
283
292
  (_a = this.getScene()) === null || _a === void 0 ? void 0 : _a.markAllMaterialsAsDirty(1, function (mat) { return mat.getActiveTextures().indexOf(_this) !== -1; });
284
293
  }
285
294
  };
295
+ /**
296
+ * Dispose the texture and release its associated resources.
297
+ */
298
+ HDRCubeTexture.prototype.dispose = function () {
299
+ this.onLoadObservable.clear();
300
+ _super.prototype.dispose.call(this);
301
+ };
286
302
  /**
287
303
  * Parses a JSON representation of an HDR Texture in order to create the texture
288
304
  * @param parsedTexture Define the JSON representation
@@ -1 +1 @@
1
- {"version":3,"file":"hdrCubeTexture.js","sourceRoot":"","sources":["../../../../sourceES6/core/Materials/Textures/hdrCubeTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"../../types\";\r\nimport { Scene } from \"../../scene\";\r\nimport { Matrix, Vector3 } from \"../../Maths/math.vector\";\r\nimport { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\n\r\nimport { HDRTools } from \"../../Misc/HighDynamicRange/hdr\";\r\nimport { CubeMapToSphericalPolynomialTools } from \"../../Misc/HighDynamicRange/cubemapToSphericalPolynomial\";\r\nimport { RegisterClass } from '../../Misc/typeStore';\r\nimport { Tools } from '../../Misc/tools';\r\nimport { ToGammaSpace } from '../../Maths/math.constants';\r\nimport { ThinEngine } from '../../Engines/thinEngine';\r\nimport { HDRFiltering } from \"../../Materials/Textures/Filtering/hdrFiltering\";\r\nimport { ToHalfFloat } from \"../../Misc/textureTools\";\r\nimport \"../../Engines/Extensions/engine.rawTexture\";\r\nimport \"../../Materials/Textures/baseTexture.polynomial\";\r\n\r\n/**\r\n * This represents a texture coming from an HDR input.\r\n *\r\n * The only supported format is currently panorama picture stored in RGBE format.\r\n * Example of such files can be found on Poly Haven: https://polyhaven.com/hdris\r\n */\r\nexport class HDRCubeTexture extends BaseTexture {\r\n\r\n private static _facesMapping = [\r\n \"right\",\r\n \"left\",\r\n \"up\",\r\n \"down\",\r\n \"front\",\r\n \"back\"\r\n ];\r\n\r\n private _generateHarmonics = true;\r\n private _noMipmap: boolean;\r\n private _prefilterOnLoad: boolean;\r\n private _textureMatrix: Matrix;\r\n private _size: number;\r\n private _onLoad: Nullable<() => void> = null;\r\n private _onError: Nullable<() => void> = null;\r\n\r\n /**\r\n * The texture URL.\r\n */\r\n public url: string;\r\n\r\n protected _isBlocking: boolean = true;\r\n /**\r\n * Sets whether or not the texture is blocking during loading.\r\n */\r\n public set isBlocking(value: boolean) {\r\n this._isBlocking = value;\r\n }\r\n /**\r\n * Gets whether or not the texture is blocking during loading.\r\n */\r\n public get isBlocking(): boolean {\r\n return this._isBlocking;\r\n }\r\n\r\n protected _rotationY: number = 0;\r\n /**\r\n * Sets texture matrix rotation angle around Y axis in radians.\r\n */\r\n public set rotationY(value: number) {\r\n this._rotationY = value;\r\n this.setReflectionTextureMatrix(Matrix.RotationY(this._rotationY));\r\n }\r\n /**\r\n * Gets texture matrix rotation angle around Y axis radians.\r\n */\r\n public get rotationY(): number {\r\n return this._rotationY;\r\n }\r\n\r\n /**\r\n * Gets or sets the center of the bounding box associated with the cube texture\r\n * It must define where the camera used to render the texture was set\r\n */\r\n public boundingBoxPosition = Vector3.Zero();\r\n\r\n private _boundingBoxSize: Vector3;\r\n\r\n /**\r\n * Gets or sets the size of the bounding box associated with the cube texture\r\n * When defined, the cubemap will switch to local mode\r\n * @see https://community.arm.com/graphics/b/blog/posts/reflections-based-on-local-cubemaps-in-unity\r\n * @example https://www.babylonjs-playground.com/#RNASML\r\n */\r\n public set boundingBoxSize(value: Vector3) {\r\n if (this._boundingBoxSize && this._boundingBoxSize.equals(value)) {\r\n return;\r\n }\r\n this._boundingBoxSize = value;\r\n let scene = this.getScene();\r\n if (scene) {\r\n scene.markAllMaterialsAsDirty(1);\r\n }\r\n }\r\n public get boundingBoxSize(): Vector3 {\r\n return this._boundingBoxSize;\r\n }\r\n\r\n /**\r\n * Instantiates an HDRTexture from the following parameters.\r\n *\r\n * @param url The location of the HDR raw data (Panorama stored in RGBE format)\r\n * @param sceneOrEngine The scene or engine the texture will be used in\r\n * @param size The cubemap desired size (the more it increases the longer the generation will be)\r\n * @param noMipmap Forces to not generate the mipmap if true\r\n * @param generateHarmonics Specifies whether you want to extract the polynomial harmonics during the generation process\r\n * @param gammaSpace Specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space)\r\n * @param prefilterOnLoad Prefilters HDR texture to allow use of this texture as a PBR reflection texture.\r\n */\r\n constructor(url: string, sceneOrEngine: Scene | ThinEngine, size: number, noMipmap = false, generateHarmonics = true, gammaSpace = false, prefilterOnLoad = false, onLoad: Nullable<() => void> = null, onError: Nullable<(message?: string, exception?: any) => void> = null) {\r\n super(sceneOrEngine);\r\n\r\n if (!url) {\r\n return;\r\n }\r\n\r\n this._coordinatesMode = Texture.CUBIC_MODE;\r\n this.name = url;\r\n this.url = url;\r\n this.hasAlpha = false;\r\n this.isCube = true;\r\n this._textureMatrix = Matrix.Identity();\r\n this._prefilterOnLoad = prefilterOnLoad;\r\n this._onLoad = onLoad;\r\n this._onError = onError;\r\n this.gammaSpace = gammaSpace;\r\n\r\n this._noMipmap = noMipmap;\r\n this._size = size;\r\n this._generateHarmonics = generateHarmonics;\r\n\r\n this._texture = this._getFromCache(url, this._noMipmap);\r\n\r\n if (!this._texture) {\r\n if (!this.getScene()?.useDelayedTextureLoading) {\r\n this.loadTexture();\r\n } else {\r\n this.delayLoadState = 4;\r\n }\r\n } else if (onLoad) {\r\n if (this._texture.isReady) {\r\n Tools.SetImmediate(() => onLoad());\r\n } else {\r\n this._texture.onLoadedObservable.add(onLoad);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get the current class name of the texture useful for serialization or dynamic coding.\r\n * @returns \"HDRCubeTexture\"\r\n */\r\n public getClassName(): string {\r\n return \"HDRCubeTexture\";\r\n }\r\n\r\n /**\r\n * Occurs when the file is raw .hdr file.\r\n */\r\n private loadTexture() {\r\n const engine = this._getEngine()!;\r\n const caps = engine.getCaps();\r\n\r\n let textureType = 0;\r\n if (caps.textureFloat && caps.textureFloatLinearFiltering) {\r\n textureType = 1;\r\n } else if (caps.textureHalfFloat && caps.textureHalfFloatLinearFiltering) {\r\n textureType = 2;\r\n }\r\n\r\n const callback = (buffer: ArrayBuffer): Nullable<ArrayBufferView[]> => {\r\n\r\n this.lodGenerationOffset = 0.0;\r\n this.lodGenerationScale = 0.8;\r\n\r\n // Extract the raw linear data.\r\n const data = HDRTools.GetCubeMapTextureData(buffer, this._size);\r\n\r\n // Generate harmonics if needed.\r\n if (this._generateHarmonics) {\r\n var sphericalPolynomial = CubeMapToSphericalPolynomialTools.ConvertCubeMapToSphericalPolynomial(data);\r\n this.sphericalPolynomial = sphericalPolynomial;\r\n }\r\n\r\n const results = [];\r\n\r\n let byteArray: Nullable<Uint8Array> = null;\r\n let shortArray: Nullable<Uint16Array> = null;\r\n\r\n // Push each faces.\r\n for (let j = 0; j < 6; j++) {\r\n\r\n // Create fallback array\r\n if (textureType === 2) {\r\n shortArray = new Uint16Array(this._size * this._size * 3);\r\n } else if (textureType === 0) {\r\n // 3 channels of 1 bytes per pixel in bytes.\r\n byteArray = new Uint8Array(this._size * this._size * 3);\r\n }\r\n\r\n const dataFace = <Float32Array>((<any>data)[HDRCubeTexture._facesMapping[j]]);\r\n\r\n // If special cases.\r\n if (this.gammaSpace || shortArray || byteArray) {\r\n for (let i = 0; i < this._size * this._size; i++) {\r\n\r\n // Put in gamma space if requested.\r\n if (this.gammaSpace) {\r\n dataFace[(i * 3) + 0] = Math.pow(dataFace[(i * 3) + 0], ToGammaSpace);\r\n dataFace[(i * 3) + 1] = Math.pow(dataFace[(i * 3) + 1], ToGammaSpace);\r\n dataFace[(i * 3) + 2] = Math.pow(dataFace[(i * 3) + 2], ToGammaSpace);\r\n }\r\n\r\n // Convert to half float texture for fallback.\r\n if (shortArray) {\r\n shortArray[(i * 3) + 0] = ToHalfFloat(dataFace[(i * 3) + 0]);\r\n shortArray[(i * 3) + 1] = ToHalfFloat(dataFace[(i * 3) + 1]);\r\n shortArray[(i * 3) + 2] = ToHalfFloat(dataFace[(i * 3) + 2]);\r\n }\r\n\r\n // Convert to int texture for fallback.\r\n if (byteArray) {\r\n let r = Math.max(dataFace[(i * 3) + 0] * 255, 0);\r\n let g = Math.max(dataFace[(i * 3) + 1] * 255, 0);\r\n let b = Math.max(dataFace[(i * 3) + 2] * 255, 0);\r\n\r\n // May use luminance instead if the result is not accurate.\r\n const max = Math.max(Math.max(r, g), b);\r\n if (max > 255) {\r\n const scale = 255 / max;\r\n r *= scale;\r\n g *= scale;\r\n b *= scale;\r\n }\r\n\r\n byteArray[(i * 3) + 0] = r;\r\n byteArray[(i * 3) + 1] = g;\r\n byteArray[(i * 3) + 2] = b;\r\n }\r\n }\r\n }\r\n\r\n if (shortArray) {\r\n results.push(shortArray);\r\n }\r\n else if (byteArray) {\r\n results.push(byteArray);\r\n }\r\n else {\r\n results.push(dataFace);\r\n }\r\n }\r\n\r\n return results;\r\n };\r\n\r\n if (engine._features.allowTexturePrefiltering && this._prefilterOnLoad) {\r\n const previousOnLoad = this._onLoad;\r\n const hdrFiltering = new HDRFiltering(engine);\r\n this._onLoad = () => {\r\n hdrFiltering.prefilter(this, previousOnLoad);\r\n };\r\n }\r\n\r\n this._texture = engine.createRawCubeTextureFromUrl(this.url, this.getScene(), this._size,\r\n 4,\r\n textureType,\r\n this._noMipmap,\r\n callback,\r\n null, this._onLoad, this._onError);\r\n }\r\n\r\n public clone(): HDRCubeTexture {\r\n var newTexture = new HDRCubeTexture(this.url, this.getScene() || this._getEngine()!, this._size, this._noMipmap, this._generateHarmonics,\r\n this.gammaSpace);\r\n\r\n // Base texture\r\n newTexture.level = this.level;\r\n newTexture.wrapU = this.wrapU;\r\n newTexture.wrapV = this.wrapV;\r\n newTexture.coordinatesIndex = this.coordinatesIndex;\r\n newTexture.coordinatesMode = this.coordinatesMode;\r\n\r\n return newTexture;\r\n }\r\n\r\n // Methods\r\n public delayLoad(): void {\r\n if (this.delayLoadState !== 4) {\r\n return;\r\n }\r\n\r\n this.delayLoadState = 1;\r\n this._texture = this._getFromCache(this.url, this._noMipmap);\r\n\r\n if (!this._texture) {\r\n this.loadTexture();\r\n }\r\n }\r\n\r\n /**\r\n * Get the texture reflection matrix used to rotate/transform the reflection.\r\n * @returns the reflection matrix\r\n */\r\n public getReflectionTextureMatrix(): Matrix {\r\n return this._textureMatrix;\r\n }\r\n\r\n /**\r\n * Set the texture reflection matrix used to rotate/transform the reflection.\r\n * @param value Define the reflection matrix to set\r\n */\r\n public setReflectionTextureMatrix(value: Matrix): void {\r\n this._textureMatrix = value;\r\n\r\n if (value.updateFlag === this._textureMatrix.updateFlag) {\r\n return;\r\n }\r\n\r\n if (value.isIdentity() !== this._textureMatrix.isIdentity()) {\r\n this.getScene()?.markAllMaterialsAsDirty(1, (mat) => mat.getActiveTextures().indexOf(this) !== -1);\r\n }\r\n }\r\n\r\n /**\r\n * Parses a JSON representation of an HDR Texture in order to create the texture\r\n * @param parsedTexture Define the JSON representation\r\n * @param scene Define the scene the texture should be created in\r\n * @param rootUrl Define the root url in case we need to load relative dependencies\r\n * @returns the newly created texture after parsing\r\n */\r\n public static Parse(parsedTexture: any, scene: Scene, rootUrl: string): Nullable<HDRCubeTexture> {\r\n var texture = null;\r\n if (parsedTexture.name && !parsedTexture.isRenderTarget) {\r\n texture = new HDRCubeTexture(rootUrl + parsedTexture.name, scene, parsedTexture.size, parsedTexture.noMipmap,\r\n parsedTexture.generateHarmonics, parsedTexture.useInGammaSpace);\r\n texture.name = parsedTexture.name;\r\n texture.hasAlpha = parsedTexture.hasAlpha;\r\n texture.level = parsedTexture.level;\r\n texture.coordinatesMode = parsedTexture.coordinatesMode;\r\n texture.isBlocking = parsedTexture.isBlocking;\r\n }\r\n if (texture) {\r\n if (parsedTexture.boundingBoxPosition) {\r\n (<any>texture).boundingBoxPosition = Vector3.FromArray(parsedTexture.boundingBoxPosition);\r\n }\r\n if (parsedTexture.boundingBoxSize) {\r\n (<any>texture).boundingBoxSize = Vector3.FromArray(parsedTexture.boundingBoxSize);\r\n }\r\n if (parsedTexture.rotationY) {\r\n (<any>texture).rotationY = parsedTexture.rotationY;\r\n }\r\n }\r\n return texture;\r\n }\r\n\r\n public serialize(): any {\r\n if (!this.name) {\r\n return null;\r\n }\r\n\r\n var serializationObject: any = {};\r\n serializationObject.name = this.name;\r\n serializationObject.hasAlpha = this.hasAlpha;\r\n serializationObject.isCube = true;\r\n serializationObject.level = this.level;\r\n serializationObject.size = this._size;\r\n serializationObject.coordinatesMode = this.coordinatesMode;\r\n serializationObject.useInGammaSpace = this.gammaSpace;\r\n serializationObject.generateHarmonics = this._generateHarmonics;\r\n serializationObject.customType = \"BABYLON.HDRCubeTexture\";\r\n serializationObject.noMipmap = this._noMipmap;\r\n serializationObject.isBlocking = this._isBlocking;\r\n serializationObject.rotationY = this._rotationY;\r\n\r\n return serializationObject;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.HDRCubeTexture\", HDRCubeTexture);\r\n"]}
1
+ {"version":3,"file":"hdrCubeTexture.js","sourceRoot":"","sources":["../../../../sourceES6/core/Materials/Textures/hdrCubeTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"../../types\";\r\nimport { Scene } from \"../../scene\";\r\nimport { Matrix, Vector3 } from \"../../Maths/math.vector\";\r\nimport { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\n\r\nimport { HDRTools } from \"../../Misc/HighDynamicRange/hdr\";\r\nimport { CubeMapToSphericalPolynomialTools } from \"../../Misc/HighDynamicRange/cubemapToSphericalPolynomial\";\r\nimport { RegisterClass } from '../../Misc/typeStore';\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { Tools } from '../../Misc/tools';\r\nimport { ToGammaSpace } from '../../Maths/math.constants';\r\nimport { ThinEngine } from '../../Engines/thinEngine';\r\nimport { HDRFiltering } from \"../../Materials/Textures/Filtering/hdrFiltering\";\r\nimport { ToHalfFloat } from \"../../Misc/textureTools\";\r\nimport \"../../Engines/Extensions/engine.rawTexture\";\r\nimport \"../../Materials/Textures/baseTexture.polynomial\";\r\n\r\n/**\r\n * This represents a texture coming from an HDR input.\r\n *\r\n * The only supported format is currently panorama picture stored in RGBE format.\r\n * Example of such files can be found on Poly Haven: https://polyhaven.com/hdris\r\n */\r\nexport class HDRCubeTexture extends BaseTexture {\r\n\r\n private static _facesMapping = [\r\n \"right\",\r\n \"left\",\r\n \"up\",\r\n \"down\",\r\n \"front\",\r\n \"back\"\r\n ];\r\n\r\n private _generateHarmonics = true;\r\n private _noMipmap: boolean;\r\n private _prefilterOnLoad: boolean;\r\n private _textureMatrix: Matrix;\r\n private _size: number;\r\n private _onLoad: () => void;\r\n private _onError: Nullable<() => void> = null;\r\n\r\n /**\r\n * The texture URL.\r\n */\r\n public url: string;\r\n\r\n protected _isBlocking: boolean = true;\r\n /**\r\n * Sets whether or not the texture is blocking during loading.\r\n */\r\n public set isBlocking(value: boolean) {\r\n this._isBlocking = value;\r\n }\r\n /**\r\n * Gets whether or not the texture is blocking during loading.\r\n */\r\n public get isBlocking(): boolean {\r\n return this._isBlocking;\r\n }\r\n\r\n protected _rotationY: number = 0;\r\n /**\r\n * Sets texture matrix rotation angle around Y axis in radians.\r\n */\r\n public set rotationY(value: number) {\r\n this._rotationY = value;\r\n this.setReflectionTextureMatrix(Matrix.RotationY(this._rotationY));\r\n }\r\n /**\r\n * Gets texture matrix rotation angle around Y axis radians.\r\n */\r\n public get rotationY(): number {\r\n return this._rotationY;\r\n }\r\n\r\n /**\r\n * Gets or sets the center of the bounding box associated with the cube texture\r\n * It must define where the camera used to render the texture was set\r\n */\r\n public boundingBoxPosition = Vector3.Zero();\r\n\r\n private _boundingBoxSize: Vector3;\r\n\r\n /**\r\n * Gets or sets the size of the bounding box associated with the cube texture\r\n * When defined, the cubemap will switch to local mode\r\n * @see https://community.arm.com/graphics/b/blog/posts/reflections-based-on-local-cubemaps-in-unity\r\n * @example https://www.babylonjs-playground.com/#RNASML\r\n */\r\n public set boundingBoxSize(value: Vector3) {\r\n if (this._boundingBoxSize && this._boundingBoxSize.equals(value)) {\r\n return;\r\n }\r\n this._boundingBoxSize = value;\r\n let scene = this.getScene();\r\n if (scene) {\r\n scene.markAllMaterialsAsDirty(1);\r\n }\r\n }\r\n public get boundingBoxSize(): Vector3 {\r\n return this._boundingBoxSize;\r\n }\r\n\r\n /**\r\n * Observable triggered once the texture has been loaded.\r\n */\r\n public onLoadObservable: Observable<HDRCubeTexture> = new Observable<HDRCubeTexture>();\r\n\r\n /**\r\n * Instantiates an HDRTexture from the following parameters.\r\n *\r\n * @param url The location of the HDR raw data (Panorama stored in RGBE format)\r\n * @param sceneOrEngine The scene or engine the texture will be used in\r\n * @param size The cubemap desired size (the more it increases the longer the generation will be)\r\n * @param noMipmap Forces to not generate the mipmap if true\r\n * @param generateHarmonics Specifies whether you want to extract the polynomial harmonics during the generation process\r\n * @param gammaSpace Specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space)\r\n * @param prefilterOnLoad Prefilters HDR texture to allow use of this texture as a PBR reflection texture.\r\n */\r\n constructor(url: string, sceneOrEngine: Scene | ThinEngine, size: number, noMipmap = false, generateHarmonics = true, gammaSpace = false, prefilterOnLoad = false, onLoad: Nullable<() => void> = null, onError: Nullable<(message?: string, exception?: any) => void> = null) {\r\n super(sceneOrEngine);\r\n\r\n if (!url) {\r\n return;\r\n }\r\n\r\n this._coordinatesMode = Texture.CUBIC_MODE;\r\n this.name = url;\r\n this.url = url;\r\n this.hasAlpha = false;\r\n this.isCube = true;\r\n this._textureMatrix = Matrix.Identity();\r\n this._prefilterOnLoad = prefilterOnLoad;\r\n this._onLoad = () => {\r\n this.onLoadObservable.notifyObservers(this);\r\n if (onLoad) {\r\n onLoad();\r\n }\r\n };\r\n\r\n this._onError = onError;\r\n this.gammaSpace = gammaSpace;\r\n\r\n this._noMipmap = noMipmap;\r\n this._size = size;\r\n this._generateHarmonics = generateHarmonics;\r\n\r\n this._texture = this._getFromCache(url, this._noMipmap);\r\n\r\n if (!this._texture) {\r\n if (!this.getScene()?.useDelayedTextureLoading) {\r\n this.loadTexture();\r\n } else {\r\n this.delayLoadState = 4;\r\n }\r\n } else {\r\n if (this._texture.isReady) {\r\n Tools.SetImmediate(() => this._onLoad());\r\n } else {\r\n this._texture.onLoadedObservable.add(this._onLoad);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get the current class name of the texture useful for serialization or dynamic coding.\r\n * @returns \"HDRCubeTexture\"\r\n */\r\n public getClassName(): string {\r\n return \"HDRCubeTexture\";\r\n }\r\n\r\n /**\r\n * Occurs when the file is raw .hdr file.\r\n */\r\n private loadTexture() {\r\n const engine = this._getEngine()!;\r\n const caps = engine.getCaps();\r\n\r\n let textureType = 0;\r\n if (caps.textureFloat && caps.textureFloatLinearFiltering) {\r\n textureType = 1;\r\n } else if (caps.textureHalfFloat && caps.textureHalfFloatLinearFiltering) {\r\n textureType = 2;\r\n }\r\n\r\n const callback = (buffer: ArrayBuffer): Nullable<ArrayBufferView[]> => {\r\n\r\n this.lodGenerationOffset = 0.0;\r\n this.lodGenerationScale = 0.8;\r\n\r\n // Extract the raw linear data.\r\n const data = HDRTools.GetCubeMapTextureData(buffer, this._size);\r\n\r\n // Generate harmonics if needed.\r\n if (this._generateHarmonics) {\r\n var sphericalPolynomial = CubeMapToSphericalPolynomialTools.ConvertCubeMapToSphericalPolynomial(data);\r\n this.sphericalPolynomial = sphericalPolynomial;\r\n }\r\n\r\n const results = [];\r\n\r\n let byteArray: Nullable<Uint8Array> = null;\r\n let shortArray: Nullable<Uint16Array> = null;\r\n\r\n // Push each faces.\r\n for (let j = 0; j < 6; j++) {\r\n\r\n // Create fallback array\r\n if (textureType === 2) {\r\n shortArray = new Uint16Array(this._size * this._size * 3);\r\n } else if (textureType === 0) {\r\n // 3 channels of 1 bytes per pixel in bytes.\r\n byteArray = new Uint8Array(this._size * this._size * 3);\r\n }\r\n\r\n const dataFace = <Float32Array>((<any>data)[HDRCubeTexture._facesMapping[j]]);\r\n\r\n // If special cases.\r\n if (this.gammaSpace || shortArray || byteArray) {\r\n for (let i = 0; i < this._size * this._size; i++) {\r\n\r\n // Put in gamma space if requested.\r\n if (this.gammaSpace) {\r\n dataFace[(i * 3) + 0] = Math.pow(dataFace[(i * 3) + 0], ToGammaSpace);\r\n dataFace[(i * 3) + 1] = Math.pow(dataFace[(i * 3) + 1], ToGammaSpace);\r\n dataFace[(i * 3) + 2] = Math.pow(dataFace[(i * 3) + 2], ToGammaSpace);\r\n }\r\n\r\n // Convert to half float texture for fallback.\r\n if (shortArray) {\r\n shortArray[(i * 3) + 0] = ToHalfFloat(dataFace[(i * 3) + 0]);\r\n shortArray[(i * 3) + 1] = ToHalfFloat(dataFace[(i * 3) + 1]);\r\n shortArray[(i * 3) + 2] = ToHalfFloat(dataFace[(i * 3) + 2]);\r\n }\r\n\r\n // Convert to int texture for fallback.\r\n if (byteArray) {\r\n let r = Math.max(dataFace[(i * 3) + 0] * 255, 0);\r\n let g = Math.max(dataFace[(i * 3) + 1] * 255, 0);\r\n let b = Math.max(dataFace[(i * 3) + 2] * 255, 0);\r\n\r\n // May use luminance instead if the result is not accurate.\r\n const max = Math.max(Math.max(r, g), b);\r\n if (max > 255) {\r\n const scale = 255 / max;\r\n r *= scale;\r\n g *= scale;\r\n b *= scale;\r\n }\r\n\r\n byteArray[(i * 3) + 0] = r;\r\n byteArray[(i * 3) + 1] = g;\r\n byteArray[(i * 3) + 2] = b;\r\n }\r\n }\r\n }\r\n\r\n if (shortArray) {\r\n results.push(shortArray);\r\n }\r\n else if (byteArray) {\r\n results.push(byteArray);\r\n }\r\n else {\r\n results.push(dataFace);\r\n }\r\n }\r\n\r\n return results;\r\n };\r\n\r\n if (engine._features.allowTexturePrefiltering && this._prefilterOnLoad) {\r\n const previousOnLoad = this._onLoad;\r\n const hdrFiltering = new HDRFiltering(engine);\r\n this._onLoad = () => {\r\n hdrFiltering.prefilter(this, previousOnLoad);\r\n };\r\n }\r\n\r\n this._texture = engine.createRawCubeTextureFromUrl(this.url, this.getScene(), this._size,\r\n 4,\r\n textureType,\r\n this._noMipmap,\r\n callback,\r\n null, this._onLoad, this._onError);\r\n }\r\n\r\n public clone(): HDRCubeTexture {\r\n var newTexture = new HDRCubeTexture(this.url, this.getScene() || this._getEngine()!, this._size, this._noMipmap, this._generateHarmonics,\r\n this.gammaSpace);\r\n\r\n // Base texture\r\n newTexture.level = this.level;\r\n newTexture.wrapU = this.wrapU;\r\n newTexture.wrapV = this.wrapV;\r\n newTexture.coordinatesIndex = this.coordinatesIndex;\r\n newTexture.coordinatesMode = this.coordinatesMode;\r\n\r\n return newTexture;\r\n }\r\n\r\n // Methods\r\n public delayLoad(): void {\r\n if (this.delayLoadState !== 4) {\r\n return;\r\n }\r\n\r\n this.delayLoadState = 1;\r\n this._texture = this._getFromCache(this.url, this._noMipmap);\r\n\r\n if (!this._texture) {\r\n this.loadTexture();\r\n }\r\n }\r\n\r\n /**\r\n * Get the texture reflection matrix used to rotate/transform the reflection.\r\n * @returns the reflection matrix\r\n */\r\n public getReflectionTextureMatrix(): Matrix {\r\n return this._textureMatrix;\r\n }\r\n\r\n /**\r\n * Set the texture reflection matrix used to rotate/transform the reflection.\r\n * @param value Define the reflection matrix to set\r\n */\r\n public setReflectionTextureMatrix(value: Matrix): void {\r\n this._textureMatrix = value;\r\n\r\n if (value.updateFlag === this._textureMatrix.updateFlag) {\r\n return;\r\n }\r\n\r\n if (value.isIdentity() !== this._textureMatrix.isIdentity()) {\r\n this.getScene()?.markAllMaterialsAsDirty(1, (mat) => mat.getActiveTextures().indexOf(this) !== -1);\r\n }\r\n }\r\n\r\n /**\r\n * Dispose the texture and release its associated resources.\r\n */\r\n public dispose(): void {\r\n this.onLoadObservable.clear();\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Parses a JSON representation of an HDR Texture in order to create the texture\r\n * @param parsedTexture Define the JSON representation\r\n * @param scene Define the scene the texture should be created in\r\n * @param rootUrl Define the root url in case we need to load relative dependencies\r\n * @returns the newly created texture after parsing\r\n */\r\n public static Parse(parsedTexture: any, scene: Scene, rootUrl: string): Nullable<HDRCubeTexture> {\r\n var texture = null;\r\n if (parsedTexture.name && !parsedTexture.isRenderTarget) {\r\n texture = new HDRCubeTexture(rootUrl + parsedTexture.name, scene, parsedTexture.size, parsedTexture.noMipmap,\r\n parsedTexture.generateHarmonics, parsedTexture.useInGammaSpace);\r\n texture.name = parsedTexture.name;\r\n texture.hasAlpha = parsedTexture.hasAlpha;\r\n texture.level = parsedTexture.level;\r\n texture.coordinatesMode = parsedTexture.coordinatesMode;\r\n texture.isBlocking = parsedTexture.isBlocking;\r\n }\r\n if (texture) {\r\n if (parsedTexture.boundingBoxPosition) {\r\n (<any>texture).boundingBoxPosition = Vector3.FromArray(parsedTexture.boundingBoxPosition);\r\n }\r\n if (parsedTexture.boundingBoxSize) {\r\n (<any>texture).boundingBoxSize = Vector3.FromArray(parsedTexture.boundingBoxSize);\r\n }\r\n if (parsedTexture.rotationY) {\r\n (<any>texture).rotationY = parsedTexture.rotationY;\r\n }\r\n }\r\n return texture;\r\n }\r\n\r\n public serialize(): any {\r\n if (!this.name) {\r\n return null;\r\n }\r\n\r\n var serializationObject: any = {};\r\n serializationObject.name = this.name;\r\n serializationObject.hasAlpha = this.hasAlpha;\r\n serializationObject.isCube = true;\r\n serializationObject.level = this.level;\r\n serializationObject.size = this._size;\r\n serializationObject.coordinatesMode = this.coordinatesMode;\r\n serializationObject.useInGammaSpace = this.gammaSpace;\r\n serializationObject.generateHarmonics = this._generateHarmonics;\r\n serializationObject.customType = \"BABYLON.HDRCubeTexture\";\r\n serializationObject.noMipmap = this._noMipmap;\r\n serializationObject.isBlocking = this._isBlocking;\r\n serializationObject.rotationY = this._rotationY;\r\n\r\n return serializationObject;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.HDRCubeTexture\", HDRCubeTexture);\r\n"]}