@babylonjs/core 5.0.0-alpha.55 → 5.0.0-alpha.59

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 (377) hide show
  1. package/Bones/boneIKController.d.ts +1 -2
  2. package/Bones/boneIKController.js +12 -37
  3. package/Bones/boneIKController.js.map +1 -1
  4. package/Buffers/buffer.js +3 -2
  5. package/Buffers/buffer.js.map +1 -1
  6. package/Cameras/Inputs/BaseCameraPointersInput.d.ts +0 -1
  7. package/Cameras/Inputs/BaseCameraPointersInput.js +5 -5
  8. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  9. package/Cameras/Inputs/freeCameraMouseInput.d.ts +0 -1
  10. package/Cameras/Inputs/freeCameraMouseInput.js +27 -28
  11. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  12. package/Cameras/camera.d.ts +4 -0
  13. package/Cameras/camera.js +2 -0
  14. package/Cameras/camera.js.map +1 -1
  15. package/Culling/boundingBox.d.ts +7 -1
  16. package/Culling/boundingBox.js +4 -0
  17. package/Culling/boundingBox.js.map +1 -1
  18. package/DeviceInput/Helpers/eventFactory.js +1 -2
  19. package/DeviceInput/Helpers/eventFactory.js.map +1 -1
  20. package/DeviceInput/Implementations/webDeviceInputSystem.d.ts +1 -0
  21. package/DeviceInput/Implementations/webDeviceInputSystem.js +5 -12
  22. package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
  23. package/DeviceInput/InputDevices/deviceEnums.d.ts +1 -3
  24. package/DeviceInput/InputDevices/deviceEnums.js +0 -2
  25. package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
  26. package/Engines/Extensions/engine.alpha.js +11 -6
  27. package/Engines/Extensions/engine.alpha.js.map +1 -1
  28. package/Engines/Extensions/engine.cubeTexture.d.ts +1 -1
  29. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  30. package/Engines/Extensions/engine.multiRender.d.ts +2 -2
  31. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  32. package/Engines/Extensions/engine.renderTarget.d.ts +7 -15
  33. package/Engines/Extensions/engine.renderTarget.js +6 -63
  34. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  35. package/Engines/Extensions/engine.renderTargetCube.d.ts +1 -1
  36. package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
  37. package/Engines/IDrawContext.d.ts +4 -0
  38. package/Engines/IDrawContext.js.map +1 -1
  39. package/Engines/IMaterialContext.d.ts +1 -0
  40. package/Engines/IMaterialContext.js.map +1 -1
  41. package/Engines/WebGL/webGLRenderTargetWrapper.d.ts +24 -2
  42. package/Engines/WebGL/webGLRenderTargetWrapper.js +53 -0
  43. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  44. package/Engines/WebGPU/Extensions/engine.alpha.js +20 -31
  45. package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
  46. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  47. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  48. package/Engines/WebGPU/Extensions/engine.renderTarget.js +2 -40
  49. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  50. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
  51. package/Engines/WebGPU/Extensions/engine.storageBuffer.js +1 -1
  52. package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
  53. package/Engines/WebGPU/Extensions/engine.uniformBuffer.js +1 -1
  54. package/Engines/WebGPU/Extensions/engine.uniformBuffer.js.map +1 -1
  55. package/Engines/WebGPU/webgpuBufferManager.d.ts +1 -0
  56. package/Engines/WebGPU/webgpuBufferManager.js +3 -0
  57. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  58. package/Engines/WebGPU/webgpuCacheBindGroups.d.ts +3 -2
  59. package/Engines/WebGPU/webgpuCacheBindGroups.js +15 -14
  60. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  61. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +18 -18
  62. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  63. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +2 -0
  64. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +17 -0
  65. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
  66. package/Engines/WebGPU/webgpuDrawContext.d.ts +24 -2
  67. package/Engines/WebGPU/webgpuDrawContext.js +75 -1
  68. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  69. package/Engines/WebGPU/webgpuMaterialContext.d.ts +1 -6
  70. package/Engines/WebGPU/webgpuMaterialContext.js +11 -8
  71. package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
  72. package/Engines/WebGPU/webgpuShaderProcessor.d.ts +1 -0
  73. package/Engines/WebGPU/webgpuShaderProcessor.js +2 -1
  74. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  75. package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -0
  76. package/Engines/WebGPU/webgpuTextureHelper.js +67 -1
  77. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  78. package/Engines/constants.d.ts +46 -8
  79. package/Engines/constants.js +46 -8
  80. package/Engines/constants.js.map +1 -1
  81. package/Engines/engine.d.ts +37 -2
  82. package/Engines/engine.js +68 -0
  83. package/Engines/engine.js.map +1 -1
  84. package/Engines/engineFeatures.d.ts +2 -0
  85. package/Engines/engineFeatures.js.map +1 -1
  86. package/Engines/nativeEngine.d.ts +3 -5
  87. package/Engines/nativeEngine.js +2 -2
  88. package/Engines/nativeEngine.js.map +1 -1
  89. package/Engines/nullEngine.d.ts +1 -1
  90. package/Engines/nullEngine.js +2 -2
  91. package/Engines/nullEngine.js.map +1 -1
  92. package/Engines/renderTargetWrapper.d.ts +10 -3
  93. package/Engines/renderTargetWrapper.js +29 -10
  94. package/Engines/renderTargetWrapper.js.map +1 -1
  95. package/Engines/thinEngine.d.ts +16 -1
  96. package/Engines/thinEngine.js +82 -2
  97. package/Engines/thinEngine.js.map +1 -1
  98. package/Engines/webgpuEngine.d.ts +28 -7
  99. package/Engines/webgpuEngine.js +177 -58
  100. package/Engines/webgpuEngine.js.map +1 -1
  101. package/Inputs/scene.inputManager.js +2 -3
  102. package/Inputs/scene.inputManager.js.map +1 -1
  103. package/Layers/effectLayer.d.ts +0 -2
  104. package/Layers/effectLayer.js +12 -11
  105. package/Layers/effectLayer.js.map +1 -1
  106. package/Layers/effectLayerSceneComponent.js +5 -0
  107. package/Layers/effectLayerSceneComponent.js.map +1 -1
  108. package/Layers/glowLayer.js +2 -0
  109. package/Layers/glowLayer.js.map +1 -1
  110. package/Layers/highlightLayer.js +2 -0
  111. package/Layers/highlightLayer.js.map +1 -1
  112. package/LensFlares/lensFlare.d.ts +3 -0
  113. package/LensFlares/lensFlare.js +5 -0
  114. package/LensFlares/lensFlare.js.map +1 -1
  115. package/LensFlares/lensFlareSystem.d.ts +2 -1
  116. package/LensFlares/lensFlareSystem.js +15 -12
  117. package/LensFlares/lensFlareSystem.js.map +1 -1
  118. package/Lights/Shadows/cascadedShadowGenerator.d.ts +0 -2
  119. package/Lights/Shadows/cascadedShadowGenerator.js +3 -12
  120. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  121. package/Lights/Shadows/shadowGenerator.d.ts +0 -3
  122. package/Lights/Shadows/shadowGenerator.js +8 -14
  123. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  124. package/Lights/light.js +3 -0
  125. package/Lights/light.js.map +1 -1
  126. package/Loading/Plugins/babylonFileLoader.js +3 -0
  127. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  128. package/Materials/Background/backgroundMaterial.js +8 -11
  129. package/Materials/Background/backgroundMaterial.js.map +1 -1
  130. package/Materials/Node/Blocks/Dual/lightBlock.js +1 -1
  131. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  132. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +1 -1
  133. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  134. package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -1
  135. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  136. package/Materials/Node/Blocks/cloudBlock.d.ts +49 -0
  137. package/Materials/Node/Blocks/cloudBlock.js +154 -0
  138. package/Materials/Node/Blocks/cloudBlock.js.map +1 -0
  139. package/Materials/Node/Blocks/colorMergerBlock.d.ts +21 -0
  140. package/Materials/Node/Blocks/colorMergerBlock.js +48 -4
  141. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  142. package/Materials/Node/Blocks/index.d.ts +1 -0
  143. package/Materials/Node/Blocks/index.js +1 -0
  144. package/Materials/Node/Blocks/index.js.map +1 -1
  145. package/Materials/Node/Blocks/vectorMergerBlock.d.ts +25 -0
  146. package/Materials/Node/Blocks/vectorMergerBlock.js +93 -23
  147. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  148. package/Materials/Node/nodeMaterial.js +17 -7
  149. package/Materials/Node/nodeMaterial.js.map +1 -1
  150. package/Materials/Node/nodeMaterialBuildStateSharedData.d.ts +5 -1
  151. package/Materials/Node/nodeMaterialBuildStateSharedData.js +5 -1
  152. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  153. package/Materials/Node/nodeMaterialDecorator.d.ts +4 -2
  154. package/Materials/Node/nodeMaterialDecorator.js +4 -2
  155. package/Materials/Node/nodeMaterialDecorator.js.map +1 -1
  156. package/Materials/PBR/pbrBaseMaterial.d.ts +4 -2
  157. package/Materials/PBR/pbrBaseMaterial.js +23 -9
  158. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  159. package/Materials/PBR/pbrClearCoatConfiguration.js +1 -1
  160. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  161. package/Materials/PBR/pbrSheenConfiguration.js +1 -1
  162. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  163. package/Materials/PBR/pbrSubSurfaceConfiguration.js +1 -1
  164. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  165. package/Materials/Textures/Procedurals/proceduralTexture.d.ts +3 -3
  166. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  167. package/Materials/Textures/baseTexture.d.ts +2 -0
  168. package/Materials/Textures/baseTexture.js +2 -0
  169. package/Materials/Textures/baseTexture.js.map +1 -1
  170. package/Materials/Textures/multiRenderTarget.d.ts +6 -4
  171. package/Materials/Textures/multiRenderTarget.js +28 -12
  172. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  173. package/Materials/Textures/renderTargetTexture.d.ts +29 -3
  174. package/Materials/Textures/renderTargetTexture.js +127 -14
  175. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  176. package/Materials/Textures/texture.js +11 -4
  177. package/Materials/Textures/texture.js.map +1 -1
  178. package/Materials/Textures/textureCreationOptions.d.ts +57 -0
  179. package/Materials/Textures/textureCreationOptions.js +2 -0
  180. package/Materials/Textures/textureCreationOptions.js.map +1 -0
  181. package/Materials/Textures/thinRenderTargetTexture.d.ts +3 -4
  182. package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
  183. package/Materials/Textures/videoTexture.d.ts +10 -7
  184. package/Materials/Textures/videoTexture.js +17 -11
  185. package/Materials/Textures/videoTexture.js.map +1 -1
  186. package/Materials/drawWrapper.d.ts +2 -1
  187. package/Materials/drawWrapper.js +10 -1
  188. package/Materials/drawWrapper.js.map +1 -1
  189. package/Materials/effectRenderer.js +1 -1
  190. package/Materials/effectRenderer.js.map +1 -1
  191. package/Materials/material.d.ts +3 -1
  192. package/Materials/material.detailMapConfiguration.d.ts +1 -1
  193. package/Materials/material.detailMapConfiguration.js +2 -2
  194. package/Materials/material.detailMapConfiguration.js.map +1 -1
  195. package/Materials/material.js +18 -9
  196. package/Materials/material.js.map +1 -1
  197. package/Materials/materialHelper.d.ts +7 -0
  198. package/Materials/materialHelper.js +17 -2
  199. package/Materials/materialHelper.js.map +1 -1
  200. package/Materials/pushMaterial.js +1 -1
  201. package/Materials/pushMaterial.js.map +1 -1
  202. package/Materials/shaderMaterial.d.ts +1 -1
  203. package/Materials/shaderMaterial.js +5 -5
  204. package/Materials/shaderMaterial.js.map +1 -1
  205. package/Materials/shadowDepthWrapper.d.ts +4 -4
  206. package/Materials/shadowDepthWrapper.js +16 -15
  207. package/Materials/shadowDepthWrapper.js.map +1 -1
  208. package/Materials/standardMaterial.d.ts +4 -2
  209. package/Materials/standardMaterial.js +23 -9
  210. package/Materials/standardMaterial.js.map +1 -1
  211. package/Materials/uniformBuffer.d.ts +10 -2
  212. package/Materials/uniformBuffer.js +17 -11
  213. package/Materials/uniformBuffer.js.map +1 -1
  214. package/Meshes/Builders/capsuleBuilder.d.ts +5 -5
  215. package/Meshes/Builders/capsuleBuilder.js.map +1 -1
  216. package/Meshes/abstractMesh.d.ts +13 -0
  217. package/Meshes/abstractMesh.js +22 -2
  218. package/Meshes/abstractMesh.js.map +1 -1
  219. package/Meshes/buffer.d.ts +5 -0
  220. package/Meshes/buffer.js +6 -0
  221. package/Meshes/buffer.js.map +1 -0
  222. package/Meshes/geometry.d.ts +7 -0
  223. package/Meshes/geometry.js +16 -0
  224. package/Meshes/geometry.js.map +1 -1
  225. package/Meshes/linesMesh.js +1 -1
  226. package/Meshes/linesMesh.js.map +1 -1
  227. package/Meshes/mesh.js +16 -1
  228. package/Meshes/mesh.js.map +1 -1
  229. package/Meshes/mesh.lts.d.ts +5 -1
  230. package/Meshes/mesh.lts.js +1 -2
  231. package/Meshes/mesh.lts.js.map +1 -1
  232. package/Meshes/subMesh.d.ts +10 -9
  233. package/Meshes/subMesh.js +44 -43
  234. package/Meshes/subMesh.js.map +1 -1
  235. package/Misc/environmentTextureTools.js +1 -0
  236. package/Misc/environmentTextureTools.js.map +1 -1
  237. package/Misc/fileTools.d.ts +1 -3
  238. package/Misc/fileTools.js +12 -13
  239. package/Misc/fileTools.js.map +1 -1
  240. package/Misc/fileTools.lts.d.ts +16 -1
  241. package/Misc/fileTools.lts.js +1 -2
  242. package/Misc/fileTools.lts.js.map +1 -1
  243. package/Misc/rgbdTextureTools.js +1 -0
  244. package/Misc/rgbdTextureTools.js.map +1 -1
  245. package/Misc/sceneSerializer.js +17 -17
  246. package/Misc/sceneSerializer.js.map +1 -1
  247. package/Misc/textureTools.js +2 -0
  248. package/Misc/textureTools.js.map +1 -1
  249. package/Particles/gpuParticleSystem.d.ts +5 -1
  250. package/Particles/gpuParticleSystem.js +31 -5
  251. package/Particles/gpuParticleSystem.js.map +1 -1
  252. package/Particles/particleSystem.d.ts +5 -1
  253. package/Particles/particleSystem.js +35 -5
  254. package/Particles/particleSystem.js.map +1 -1
  255. package/Physics/Plugins/ammoJSPlugin.d.ts +1 -0
  256. package/Physics/Plugins/ammoJSPlugin.js +10 -0
  257. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  258. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +2 -0
  259. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
  260. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +1 -0
  261. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  262. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -0
  263. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  264. package/PostProcesses/bloomMergePostProcess.js +1 -0
  265. package/PostProcesses/bloomMergePostProcess.js.map +1 -1
  266. package/PostProcesses/depthOfFieldBlurPostProcess.js +1 -0
  267. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  268. package/PostProcesses/depthOfFieldMergePostProcess.js +1 -0
  269. package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
  270. package/PostProcesses/extractHighlightsPostProcess.js +1 -0
  271. package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
  272. package/PostProcesses/postProcess.d.ts +6 -0
  273. package/PostProcesses/postProcess.js +9 -1
  274. package/PostProcesses/postProcess.js.map +1 -1
  275. package/PostProcesses/screenSpaceReflectionPostProcess.js +2 -2
  276. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  277. package/PostProcesses/tonemapPostProcess.d.ts +2 -1
  278. package/PostProcesses/tonemapPostProcess.js +3 -2
  279. package/PostProcesses/tonemapPostProcess.js.map +1 -1
  280. package/Rendering/boundingBoxRenderer.d.ts +5 -3
  281. package/Rendering/boundingBoxRenderer.js +46 -14
  282. package/Rendering/boundingBoxRenderer.js.map +1 -1
  283. package/Rendering/depthPeelingRenderer.d.ts +85 -0
  284. package/Rendering/depthPeelingRenderer.js +390 -0
  285. package/Rendering/depthPeelingRenderer.js.map +1 -0
  286. package/Rendering/depthPeelingSceneComponent.d.ts +51 -0
  287. package/Rendering/depthPeelingSceneComponent.js +73 -0
  288. package/Rendering/depthPeelingSceneComponent.js.map +1 -0
  289. package/Rendering/depthRenderer.d.ts +9 -2
  290. package/Rendering/depthRenderer.js +77 -43
  291. package/Rendering/depthRenderer.js.map +1 -1
  292. package/Rendering/depthRendererSceneComponent.js +0 -1
  293. package/Rendering/depthRendererSceneComponent.js.map +1 -1
  294. package/Rendering/edgesRenderer.d.ts +2 -0
  295. package/Rendering/edgesRenderer.js +11 -0
  296. package/Rendering/edgesRenderer.js.map +1 -1
  297. package/Rendering/geometryBufferRenderer.js +4 -4
  298. package/Rendering/geometryBufferRenderer.js.map +1 -1
  299. package/Rendering/index.d.ts +2 -0
  300. package/Rendering/index.js +2 -0
  301. package/Rendering/index.js.map +1 -1
  302. package/Rendering/outlineRenderer.d.ts +5 -4
  303. package/Rendering/outlineRenderer.js +24 -19
  304. package/Rendering/outlineRenderer.js.map +1 -1
  305. package/Rendering/prePassRenderer.js +7 -2
  306. package/Rendering/prePassRenderer.js.map +1 -1
  307. package/Rendering/renderingGroup.js +7 -2
  308. package/Rendering/renderingGroup.js.map +1 -1
  309. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.d.ts +5 -0
  310. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js +7 -0
  311. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js.map +1 -0
  312. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.d.ts +5 -0
  313. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +7 -0
  314. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -0
  315. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.d.ts +5 -0
  316. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js +7 -0
  317. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js.map +1 -0
  318. package/Shaders/ShadersInclude/oitDeclaration.d.ts +5 -0
  319. package/Shaders/ShadersInclude/oitDeclaration.js +7 -0
  320. package/Shaders/ShadersInclude/oitDeclaration.js.map +1 -0
  321. package/Shaders/ShadersInclude/oitFragment.d.ts +5 -0
  322. package/Shaders/ShadersInclude/oitFragment.js +7 -0
  323. package/Shaders/ShadersInclude/oitFragment.js.map +1 -0
  324. package/Shaders/boundingBoxRenderer.fragment.d.ts +7 -0
  325. package/Shaders/boundingBoxRenderer.fragment.js +9 -0
  326. package/Shaders/boundingBoxRenderer.fragment.js.map +1 -0
  327. package/Shaders/boundingBoxRenderer.vertex.d.ts +7 -0
  328. package/Shaders/boundingBoxRenderer.vertex.js +9 -0
  329. package/Shaders/boundingBoxRenderer.vertex.js.map +1 -0
  330. package/Shaders/default.fragment.d.ts +2 -0
  331. package/Shaders/default.fragment.js +3 -1
  332. package/Shaders/default.fragment.js.map +1 -1
  333. package/Shaders/oitBackBlend.fragment.d.ts +5 -0
  334. package/Shaders/oitBackBlend.fragment.js +7 -0
  335. package/Shaders/oitBackBlend.fragment.js.map +1 -0
  336. package/Shaders/oitFinal.fragment.d.ts +5 -0
  337. package/Shaders/oitFinal.fragment.js +7 -0
  338. package/Shaders/oitFinal.fragment.js.map +1 -0
  339. package/Shaders/pbr.fragment.d.ts +2 -0
  340. package/Shaders/pbr.fragment.js +3 -1
  341. package/Shaders/pbr.fragment.js.map +1 -1
  342. package/Shaders/screenSpaceReflection.fragment.js +1 -1
  343. package/Shaders/screenSpaceReflection.fragment.js.map +1 -1
  344. package/Sprites/spriteManager.d.ts +3 -1
  345. package/Sprites/spriteManager.js +16 -5
  346. package/Sprites/spriteManager.js.map +1 -1
  347. package/Sprites/spriteRenderer.d.ts +1 -0
  348. package/Sprites/spriteRenderer.js +14 -0
  349. package/Sprites/spriteRenderer.js.map +1 -1
  350. package/States/alphaCullingState.js +1 -1
  351. package/States/alphaCullingState.js.map +1 -1
  352. package/XR/features/WebXRControllerPointerSelection.d.ts +4 -0
  353. package/XR/features/WebXRControllerPointerSelection.js +23 -1
  354. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  355. package/XR/features/WebXRNearInteraction.d.ts +5 -4
  356. package/XR/features/WebXRNearInteraction.js +15 -13
  357. package/XR/features/WebXRNearInteraction.js.map +1 -1
  358. package/XR/features/WebXRWalkingLocomotion.js +28 -13
  359. package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
  360. package/XR/webXRSessionManager.js +1 -3
  361. package/XR/webXRSessionManager.js.map +1 -1
  362. package/package.json +43 -7
  363. package/scene.d.ts +18 -4
  364. package/scene.js +101 -42
  365. package/scene.js.map +1 -1
  366. package/scene.lts.d.ts +6 -1
  367. package/scene.lts.js +1 -2
  368. package/scene.lts.js.map +1 -1
  369. package/sceneComponent.d.ts +1 -0
  370. package/sceneComponent.js +1 -0
  371. package/sceneComponent.js.map +1 -1
  372. package/Engines/depthTextureCreationOptions.d.ts +0 -17
  373. package/Engines/depthTextureCreationOptions.js +0 -10
  374. package/Engines/depthTextureCreationOptions.js.map +0 -1
  375. package/Materials/Textures/renderTargetCreationOptions.d.ts +0 -27
  376. package/Materials/Textures/renderTargetCreationOptions.js +0 -10
  377. package/Materials/Textures/renderTargetCreationOptions.js.map +0 -1
@@ -86,18 +86,18 @@ var ShadowDepthWrapper = /** @class */ (function () {
86
86
  * Gets the effect to use to generate the depth map
87
87
  * @param subMesh subMesh to get the effect for
88
88
  * @param shadowGenerator shadow generator to get the effect for
89
- * @param nameForDrawWrapper Name of the draw wrapper to retrieve the effect from
89
+ * @param passIdForDrawWrapper Id of the pass for which the effect from the draw wrapper must be retrieved from
90
90
  * @returns the effect to use to generate the depth map for the subMesh + shadow generator specified
91
91
  */
92
- ShadowDepthWrapper.prototype.getEffect = function (subMesh, shadowGenerator, nameForDrawWrapper) {
92
+ ShadowDepthWrapper.prototype.getEffect = function (subMesh, shadowGenerator, passIdForDrawWrapper) {
93
93
  var _a;
94
94
  var entry = (_a = this._subMeshToDepthWrapper.mm.get(subMesh)) === null || _a === void 0 ? void 0 : _a.get(shadowGenerator);
95
95
  if (!entry) {
96
96
  return null;
97
97
  }
98
- var drawWrapper = entry.drawWrapper[nameForDrawWrapper];
98
+ var drawWrapper = entry.drawWrapper[passIdForDrawWrapper];
99
99
  if (!drawWrapper) {
100
- drawWrapper = entry.drawWrapper[nameForDrawWrapper] = new DrawWrapper(this._scene.getEngine());
100
+ drawWrapper = entry.drawWrapper[passIdForDrawWrapper] = new DrawWrapper(this._scene.getEngine());
101
101
  drawWrapper.setEffect(entry.mainDrawWrapper.effect, entry.mainDrawWrapper.defines);
102
102
  }
103
103
  return drawWrapper;
@@ -108,10 +108,10 @@ var ShadowDepthWrapper = /** @class */ (function () {
108
108
  * @param defines the list of defines to take into account when checking the effect
109
109
  * @param shadowGenerator combined with subMesh, it defines the effect to check
110
110
  * @param useInstances specifies that instances should be used
111
- * @param nameForDrawWrapper Name to use to create the draw wrapper
111
+ * @param passIdForDrawWrapper Id of the pass for which the draw wrapper should be created
112
112
  * @returns a boolean indicating that the submesh is ready or not
113
113
  */
114
- ShadowDepthWrapper.prototype.isReadyForSubMesh = function (subMesh, defines, shadowGenerator, useInstances, nameForDrawWrapper) {
114
+ ShadowDepthWrapper.prototype.isReadyForSubMesh = function (subMesh, defines, shadowGenerator, useInstances, passIdForDrawWrapper) {
115
115
  var _a, _b;
116
116
  if (this.standalone) {
117
117
  // will ensure the effect is (re)created for the base material
@@ -119,7 +119,7 @@ var ShadowDepthWrapper = /** @class */ (function () {
119
119
  return false;
120
120
  }
121
121
  }
122
- return (_b = (_a = this._makeEffect(subMesh, defines, shadowGenerator, nameForDrawWrapper)) === null || _a === void 0 ? void 0 : _a.isReady()) !== null && _b !== void 0 ? _b : false;
122
+ return (_b = (_a = this._makeEffect(subMesh, defines, shadowGenerator, passIdForDrawWrapper)) === null || _a === void 0 ? void 0 : _a.isReady()) !== null && _b !== void 0 ? _b : false;
123
123
  };
124
124
  /**
125
125
  * Disposes the resources
@@ -133,8 +133,8 @@ var ShadowDepthWrapper = /** @class */ (function () {
133
133
  mesh.onDisposeObservable.remove(observer);
134
134
  }
135
135
  };
136
- ShadowDepthWrapper.prototype._makeEffect = function (subMesh, defines, shadowGenerator, nameForDrawWrapper) {
137
- var _a;
136
+ ShadowDepthWrapper.prototype._makeEffect = function (subMesh, defines, shadowGenerator, passIdForDrawWrapper) {
137
+ var _a, _b, _c, _d, _e, _f, _g, _h;
138
138
  var engine = this._scene.getEngine();
139
139
  var origEffect = this._subMeshToEffect.get(subMesh);
140
140
  if (!origEffect) {
@@ -143,14 +143,15 @@ var ShadowDepthWrapper = /** @class */ (function () {
143
143
  var params = this._subMeshToDepthWrapper.get(subMesh, shadowGenerator);
144
144
  if (!params) {
145
145
  var mainDrawWrapper = new DrawWrapper(engine);
146
- mainDrawWrapper.defines = subMesh._materialDefines;
146
+ var renderPassId = (_e = (_c = (_b = (_a = this._scene.activeCameras) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.renderPassId) !== null && _c !== void 0 ? _c : (_d = this._scene.activeCamera) === null || _d === void 0 ? void 0 : _d.renderPassId) !== null && _e !== void 0 ? _e : 0;
147
+ mainDrawWrapper.defines = (_g = (_f = subMesh._getDrawWrapper(renderPassId)) === null || _f === void 0 ? void 0 : _f.defines) !== null && _g !== void 0 ? _g : null;
147
148
  params = {
148
- drawWrapper: {},
149
+ drawWrapper: [],
149
150
  mainDrawWrapper: mainDrawWrapper,
150
151
  depthDefines: "",
151
152
  token: RandomGUID()
152
153
  };
153
- params.drawWrapper[nameForDrawWrapper] = mainDrawWrapper;
154
+ params.drawWrapper[passIdForDrawWrapper] = mainDrawWrapper;
154
155
  this._subMeshToDepthWrapper.set(subMesh, shadowGenerator, params);
155
156
  }
156
157
  var join = defines.join("\n");
@@ -210,9 +211,9 @@ var ShadowDepthWrapper = /** @class */ (function () {
210
211
  defines: join + "\n" + origEffect.defines.replace("#define SHADOWS", "").replace(/#define SHADOW\d/g, ""),
211
212
  indexParameters: origEffect.getIndexParameters(),
212
213
  }, engine);
213
- for (var name_1 in params.drawWrapper) {
214
- if (name_1 !== nameForDrawWrapper) {
215
- (_a = params.drawWrapper[name_1]) === null || _a === void 0 ? void 0 : _a.setEffect(params.mainDrawWrapper.effect, params.mainDrawWrapper.defines);
214
+ for (var id = 0; id < params.drawWrapper.length; ++id) {
215
+ if (id !== passIdForDrawWrapper) {
216
+ (_h = params.drawWrapper[id]) === null || _h === void 0 ? void 0 : _h.setEffect(params.mainDrawWrapper.effect, params.mainDrawWrapper.defines);
216
217
  }
217
218
  }
218
219
  return params.mainDrawWrapper.effect;
@@ -1 +1 @@
1
- {"version":3,"file":"shadowDepthWrapper.js","sourceRoot":"","sources":["../../../sourceES6/core/Materials/shadowDepthWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observer } from \"../Misc/observable\";\r\nimport { Nullable } from \"../types\";\r\nimport { Scene } from \"../scene\";\r\nimport { SubMesh } from \"../Meshes/subMesh\";\r\nimport { Material } from \"./material\";\r\nimport { Effect, IEffectCreationOptions } from './effect';\r\nimport { AbstractMesh } from '../Meshes/abstractMesh';\r\nimport { Node } from '../node';\r\nimport { ShadowGenerator } from '../Lights/Shadows/shadowGenerator';\r\nimport { RandomGUID } from '../Misc/guid';\r\nimport { DrawWrapper } from \"./drawWrapper\";\r\nimport { Engine } from \"../Engines/engine\";\r\n\r\n/**\r\n * Options to be used when creating a shadow depth material\r\n */\r\nexport interface IIOptionShadowDepthMaterial {\r\n /** Variables in the vertex shader code that need to have their names remapped.\r\n * The format is: [\"var_name\", \"var_remapped_name\", \"var_name\", \"var_remapped_name\", ...]\r\n * \"var_name\" should be either: worldPos or vNormalW\r\n * So, if the variable holding the world position in your vertex shader is not named worldPos, you must tell the system\r\n * the name to use instead by using: [\"worldPos\", \"myWorldPosVar\"] assuming the variable is named myWorldPosVar in your code.\r\n * If the normal must also be remapped: [\"worldPos\", \"myWorldPosVar\", \"vNormalW\", \"myWorldNormal\"]\r\n */\r\n remappedVariables?: string[];\r\n\r\n /** Set standalone to true if the base material wrapped by ShadowDepthMaterial is not used for a regular object but for depth shadow generation only */\r\n standalone?: boolean;\r\n}\r\n\r\nclass MapMap<Ka, Kb, V> {\r\n readonly mm = new Map<Ka, Map<Kb, V>>();\r\n\r\n get(a: Ka, b: Kb): V | undefined {\r\n const m = this.mm.get(a);\r\n if (m !== undefined) {\r\n return m.get(b);\r\n }\r\n return undefined;\r\n }\r\n\r\n set(a: Ka, b: Kb, v: V): void {\r\n let m = this.mm.get(a);\r\n if (m === undefined) {\r\n this.mm.set(a, (m = new Map()));\r\n }\r\n m.set(b, v);\r\n }\r\n}\r\n\r\n/**\r\n * Class that can be used to wrap a base material to generate accurate shadows when using custom vertex/fragment code in the base material\r\n */\r\nexport class ShadowDepthWrapper {\r\n\r\n private _scene: Scene;\r\n private _options?: IIOptionShadowDepthMaterial;\r\n private _baseMaterial: Material;\r\n private _onEffectCreatedObserver: Nullable<Observer<{ effect: Effect, subMesh: Nullable<SubMesh> }>>;\r\n private _subMeshToEffect: Map<Nullable<SubMesh>, Effect>;\r\n private _subMeshToDepthWrapper: MapMap<Nullable<SubMesh>, ShadowGenerator, { drawWrapper: { [name: string]: Nullable<DrawWrapper> }, mainDrawWrapper: DrawWrapper, depthDefines: string, token: string }>; // key is (subMesh + shadowGenerator)\r\n private _meshes: Map<AbstractMesh, Nullable<Observer<Node>>>;\r\n\r\n /** Gets the standalone status of the wrapper */\r\n public get standalone(): boolean {\r\n return this._options?.standalone ?? false;\r\n }\r\n\r\n /** Gets the base material the wrapper is built upon */\r\n public get baseMaterial(): Material {\r\n return this._baseMaterial;\r\n }\r\n\r\n /**\r\n * Instantiate a new shadow depth wrapper.\r\n * It works by injecting some specific code in the vertex/fragment shaders of the base material and is used by a shadow generator to\r\n * generate the shadow depth map. For more information, please refer to the documentation:\r\n * https://doc.babylonjs.com/babylon101/shadows\r\n * @param baseMaterial Material to wrap\r\n * @param scene Define the scene the material belongs to\r\n * @param options Options used to create the wrapper\r\n */\r\n constructor(baseMaterial: Material, scene: Scene, options?: IIOptionShadowDepthMaterial) {\r\n this._baseMaterial = baseMaterial;\r\n this._scene = scene ?? Engine.LastCreatedScene;\r\n this._options = options;\r\n\r\n this._subMeshToEffect = new Map();\r\n this._subMeshToDepthWrapper = new MapMap();\r\n this._meshes = new Map();\r\n\r\n // Register for onEffectCreated to store the effect of the base material when it is (re)generated. This effect will be used\r\n // to create the depth effect later on\r\n this._onEffectCreatedObserver = this._baseMaterial.onEffectCreatedObservable.add((params: { effect: Effect, subMesh: Nullable<SubMesh> }) => {\r\n const mesh = params.subMesh?.getMesh();\r\n\r\n if (mesh && !this._meshes.has(mesh)) {\r\n // Register for mesh onDispose to clean up our internal maps when a mesh is disposed\r\n this._meshes.set(mesh,\r\n mesh.onDisposeObservable.add((mesh: Node) => {\r\n const iterator = this._subMeshToEffect.keys();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const subMesh = key.value;\r\n if (subMesh?.getMesh() === mesh as AbstractMesh) {\r\n this._subMeshToEffect.delete(subMesh);\r\n this._subMeshToDepthWrapper.mm.delete(subMesh);\r\n }\r\n }\r\n })\r\n );\r\n }\r\n\r\n this._subMeshToEffect.set(params.subMesh, params.effect);\r\n this._subMeshToDepthWrapper.mm.delete(params.subMesh); // trigger a depth effect recreation\r\n });\r\n }\r\n\r\n /**\r\n * Gets the effect to use to generate the depth map\r\n * @param subMesh subMesh to get the effect for\r\n * @param shadowGenerator shadow generator to get the effect for\r\n * @param nameForDrawWrapper Name of the draw wrapper to retrieve the effect from\r\n * @returns the effect to use to generate the depth map for the subMesh + shadow generator specified\r\n */\r\n public getEffect(subMesh: Nullable<SubMesh>, shadowGenerator: ShadowGenerator, nameForDrawWrapper: string): Nullable<DrawWrapper> {\r\n const entry = this._subMeshToDepthWrapper.mm.get(subMesh)?.get(shadowGenerator);\r\n if (!entry) {\r\n return null;\r\n }\r\n let drawWrapper = entry.drawWrapper[nameForDrawWrapper];\r\n if (!drawWrapper) {\r\n drawWrapper = entry.drawWrapper[nameForDrawWrapper] = new DrawWrapper(this._scene.getEngine());\r\n drawWrapper.setEffect(entry.mainDrawWrapper.effect, entry.mainDrawWrapper.defines);\r\n }\r\n\r\n return drawWrapper;\r\n }\r\n\r\n /**\r\n * Specifies that the submesh is ready to be used for depth rendering\r\n * @param subMesh submesh to check\r\n * @param defines the list of defines to take into account when checking the effect\r\n * @param shadowGenerator combined with subMesh, it defines the effect to check\r\n * @param useInstances specifies that instances should be used\r\n * @param nameForDrawWrapper Name to use to create the draw wrapper\r\n * @returns a boolean indicating that the submesh is ready or not\r\n */\r\n public isReadyForSubMesh(subMesh: SubMesh, defines: string[], shadowGenerator: ShadowGenerator, useInstances: boolean, nameForDrawWrapper: string): boolean {\r\n if (this.standalone) {\r\n // will ensure the effect is (re)created for the base material\r\n if (!this._baseMaterial.isReadyForSubMesh(subMesh.getMesh(), subMesh, useInstances)) {\r\n return false;\r\n }\r\n }\r\n\r\n return this._makeEffect(subMesh, defines, shadowGenerator, nameForDrawWrapper)?.isReady() ?? false;\r\n }\r\n\r\n /**\r\n * Disposes the resources\r\n */\r\n public dispose(): void {\r\n this._baseMaterial.onEffectCreatedObservable.remove(this._onEffectCreatedObserver);\r\n this._onEffectCreatedObserver = null;\r\n\r\n const iterator = this._meshes.entries();\r\n for (let entry = iterator.next(); entry.done !== true; entry = iterator.next()) {\r\n const [mesh, observer] = entry.value;\r\n\r\n mesh.onDisposeObservable.remove(observer);\r\n }\r\n }\r\n\r\n private _makeEffect(subMesh: SubMesh, defines: string[], shadowGenerator: ShadowGenerator, nameForDrawWrapper: string): Nullable<Effect> {\r\n const engine = this._scene.getEngine();\r\n const origEffect = this._subMeshToEffect.get(subMesh);\r\n\r\n if (!origEffect) {\r\n return null;\r\n }\r\n\r\n let params = this._subMeshToDepthWrapper.get(subMesh, shadowGenerator);\r\n if (!params) {\r\n const mainDrawWrapper = new DrawWrapper(engine);\r\n mainDrawWrapper.defines = subMesh._materialDefines;\r\n\r\n params = {\r\n drawWrapper: {},\r\n mainDrawWrapper,\r\n depthDefines: \"\",\r\n token: RandomGUID()\r\n };\r\n params.drawWrapper[nameForDrawWrapper] = mainDrawWrapper;\r\n this._subMeshToDepthWrapper.set(subMesh, shadowGenerator, params);\r\n }\r\n\r\n let join = defines.join(\"\\n\");\r\n\r\n if (params.mainDrawWrapper.effect) {\r\n if (join === params.depthDefines) {\r\n // we already created the depth effect and it is still up to date for this submesh + shadow generator\r\n return params.mainDrawWrapper.effect;\r\n }\r\n }\r\n\r\n params.depthDefines = join;\r\n\r\n // the depth effect is either out of date or has not been created yet\r\n let vertexCode = origEffect.rawVertexSourceCode,\r\n fragmentCode = origEffect.rawFragmentSourceCode;\r\n\r\n // vertex code\r\n const vertexNormalBiasCode = this._options && this._options.remappedVariables ? `#include<shadowMapVertexNormalBias>(${this._options.remappedVariables.join(\",\")})` : Effect.IncludesShadersStore[\"shadowMapVertexNormalBias\"],\r\n vertexMetricCode = this._options && this._options.remappedVariables ? `#include<shadowMapVertexMetric>(${this._options.remappedVariables.join(\",\")})` : Effect.IncludesShadersStore[\"shadowMapVertexMetric\"],\r\n fragmentSoftTransparentShadow = this._options && this._options.remappedVariables ? `#include<shadowMapFragmentSoftTransparentShadow>(${this._options.remappedVariables.join(\",\")})` : Effect.IncludesShadersStore[\"shadowMapFragmentSoftTransparentShadow\"],\r\n fragmentBlockCode = Effect.IncludesShadersStore[\"shadowMapFragment\"];\r\n\r\n vertexCode = vertexCode.replace(/void\\s+?main/g, Effect.IncludesShadersStore[\"shadowMapVertexExtraDeclaration\"] + \"\\r\\nvoid main\");\r\n vertexCode = vertexCode.replace(/#define SHADOWDEPTH_NORMALBIAS|#define CUSTOM_VERTEX_UPDATE_WORLDPOS/g, vertexNormalBiasCode);\r\n\r\n if (vertexCode.indexOf(\"#define SHADOWDEPTH_METRIC\") !== -1) {\r\n vertexCode = vertexCode.replace(/#define SHADOWDEPTH_METRIC/g, vertexMetricCode);\r\n } else {\r\n vertexCode = vertexCode.replace(/}\\s*$/g, vertexMetricCode + \"\\r\\n}\");\r\n }\r\n vertexCode = vertexCode.replace(/#define SHADER_NAME.*?\\n|out vec4 glFragColor;\\n/g, \"\");\r\n\r\n // fragment code\r\n const hasLocationForSoftTransparentShadow = fragmentCode.indexOf(\"#define SHADOWDEPTH_SOFTTRANSPARENTSHADOW\") >= 0 || fragmentCode.indexOf(\"#define CUSTOM_FRAGMENT_BEFORE_FOG\") >= 0;\r\n const hasLocationForFragment = fragmentCode.indexOf(\"#define SHADOWDEPTH_FRAGMENT\") !== -1;\r\n\r\n let fragmentCodeToInjectAtEnd = \"\";\r\n\r\n if (!hasLocationForSoftTransparentShadow) {\r\n fragmentCodeToInjectAtEnd = fragmentSoftTransparentShadow + \"\\r\\n\";\r\n } else {\r\n fragmentCode = fragmentCode.replace(/#define SHADOWDEPTH_SOFTTRANSPARENTSHADOW|#define CUSTOM_FRAGMENT_BEFORE_FOG/g, fragmentSoftTransparentShadow);\r\n }\r\n\r\n fragmentCode = fragmentCode.replace(/void\\s+?main/g, Effect.IncludesShadersStore[\"shadowMapFragmentExtraDeclaration\"] + \"\\r\\nvoid main\");\r\n\r\n if (hasLocationForFragment) {\r\n fragmentCode = fragmentCode.replace(/#define SHADOWDEPTH_FRAGMENT/g, fragmentBlockCode);\r\n } else {\r\n fragmentCodeToInjectAtEnd += fragmentBlockCode + \"\\r\\n\";\r\n }\r\n if (fragmentCodeToInjectAtEnd) {\r\n fragmentCode = fragmentCode.replace(/}\\s*$/g, fragmentCodeToInjectAtEnd + \"}\");\r\n }\r\n\r\n fragmentCode = fragmentCode.replace(/#define SHADER_NAME.*?\\n|out vec4 glFragColor;\\n/g, \"\");\r\n\r\n const uniforms = origEffect.getUniformNames().slice();\r\n\r\n uniforms.push(\"biasAndScaleSM\", \"depthValuesSM\", \"lightDataSM\", \"softTransparentShadowSM\");\r\n\r\n params.mainDrawWrapper.effect = engine.createEffect({\r\n vertexSource: vertexCode,\r\n fragmentSource: fragmentCode,\r\n vertexToken: params.token,\r\n fragmentToken: params.token,\r\n }, <IEffectCreationOptions>{\r\n attributes: origEffect.getAttributesNames(),\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: origEffect.getUniformBuffersNames(),\r\n samplers: origEffect.getSamplers(),\r\n defines: join + \"\\n\" + origEffect.defines.replace(\"#define SHADOWS\", \"\").replace(/#define SHADOW\\d/g, \"\"),\r\n indexParameters: origEffect.getIndexParameters(),\r\n }, engine);\r\n\r\n for (const name in params.drawWrapper) {\r\n if (name !== nameForDrawWrapper) {\r\n params.drawWrapper[name]?.setEffect(params.mainDrawWrapper.effect, params.mainDrawWrapper.defines);\r\n }\r\n }\r\n return params.mainDrawWrapper.effect;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"shadowDepthWrapper.js","sourceRoot":"","sources":["../../../sourceES6/core/Materials/shadowDepthWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observer } from \"../Misc/observable\";\r\nimport { Nullable } from \"../types\";\r\nimport { Scene } from \"../scene\";\r\nimport { SubMesh } from \"../Meshes/subMesh\";\r\nimport { Material } from \"./material\";\r\nimport { Effect, IEffectCreationOptions } from './effect';\r\nimport { AbstractMesh } from '../Meshes/abstractMesh';\r\nimport { Node } from '../node';\r\nimport { ShadowGenerator } from '../Lights/Shadows/shadowGenerator';\r\nimport { RandomGUID } from '../Misc/guid';\r\nimport { DrawWrapper } from \"./drawWrapper\";\r\nimport { Engine } from \"../Engines/engine\";\r\n\r\n\r\n/**\r\n * Options to be used when creating a shadow depth material\r\n */\r\nexport interface IIOptionShadowDepthMaterial {\r\n /** Variables in the vertex shader code that need to have their names remapped.\r\n * The format is: [\"var_name\", \"var_remapped_name\", \"var_name\", \"var_remapped_name\", ...]\r\n * \"var_name\" should be either: worldPos or vNormalW\r\n * So, if the variable holding the world position in your vertex shader is not named worldPos, you must tell the system\r\n * the name to use instead by using: [\"worldPos\", \"myWorldPosVar\"] assuming the variable is named myWorldPosVar in your code.\r\n * If the normal must also be remapped: [\"worldPos\", \"myWorldPosVar\", \"vNormalW\", \"myWorldNormal\"]\r\n */\r\n remappedVariables?: string[];\r\n\r\n /** Set standalone to true if the base material wrapped by ShadowDepthMaterial is not used for a regular object but for depth shadow generation only */\r\n standalone?: boolean;\r\n}\r\n\r\nclass MapMap<Ka, Kb, V> {\r\n readonly mm = new Map<Ka, Map<Kb, V>>();\r\n\r\n get(a: Ka, b: Kb): V | undefined {\r\n const m = this.mm.get(a);\r\n if (m !== undefined) {\r\n return m.get(b);\r\n }\r\n return undefined;\r\n }\r\n\r\n set(a: Ka, b: Kb, v: V): void {\r\n let m = this.mm.get(a);\r\n if (m === undefined) {\r\n this.mm.set(a, (m = new Map()));\r\n }\r\n m.set(b, v);\r\n }\r\n}\r\n\r\n/**\r\n * Class that can be used to wrap a base material to generate accurate shadows when using custom vertex/fragment code in the base material\r\n */\r\nexport class ShadowDepthWrapper {\r\n\r\n private _scene: Scene;\r\n private _options?: IIOptionShadowDepthMaterial;\r\n private _baseMaterial: Material;\r\n private _onEffectCreatedObserver: Nullable<Observer<{ effect: Effect, subMesh: Nullable<SubMesh> }>>;\r\n private _subMeshToEffect: Map<Nullable<SubMesh>, Effect>;\r\n private _subMeshToDepthWrapper: MapMap<Nullable<SubMesh>, ShadowGenerator, { drawWrapper: Array<Nullable<DrawWrapper>>, mainDrawWrapper: DrawWrapper, depthDefines: string, token: string }>; // key is (subMesh + shadowGenerator)\r\n private _meshes: Map<AbstractMesh, Nullable<Observer<Node>>>;\r\n\r\n /** Gets the standalone status of the wrapper */\r\n public get standalone(): boolean {\r\n return this._options?.standalone ?? false;\r\n }\r\n\r\n /** Gets the base material the wrapper is built upon */\r\n public get baseMaterial(): Material {\r\n return this._baseMaterial;\r\n }\r\n\r\n /**\r\n * Instantiate a new shadow depth wrapper.\r\n * It works by injecting some specific code in the vertex/fragment shaders of the base material and is used by a shadow generator to\r\n * generate the shadow depth map. For more information, please refer to the documentation:\r\n * https://doc.babylonjs.com/babylon101/shadows\r\n * @param baseMaterial Material to wrap\r\n * @param scene Define the scene the material belongs to\r\n * @param options Options used to create the wrapper\r\n */\r\n constructor(baseMaterial: Material, scene: Scene, options?: IIOptionShadowDepthMaterial) {\r\n this._baseMaterial = baseMaterial;\r\n this._scene = scene ?? Engine.LastCreatedScene;\r\n this._options = options;\r\n\r\n this._subMeshToEffect = new Map();\r\n this._subMeshToDepthWrapper = new MapMap();\r\n this._meshes = new Map();\r\n\r\n // Register for onEffectCreated to store the effect of the base material when it is (re)generated. This effect will be used\r\n // to create the depth effect later on\r\n this._onEffectCreatedObserver = this._baseMaterial.onEffectCreatedObservable.add((params: { effect: Effect, subMesh: Nullable<SubMesh> }) => {\r\n const mesh = params.subMesh?.getMesh();\r\n\r\n if (mesh && !this._meshes.has(mesh)) {\r\n // Register for mesh onDispose to clean up our internal maps when a mesh is disposed\r\n this._meshes.set(mesh,\r\n mesh.onDisposeObservable.add((mesh: Node) => {\r\n const iterator = this._subMeshToEffect.keys();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const subMesh = key.value;\r\n if (subMesh?.getMesh() === mesh as AbstractMesh) {\r\n this._subMeshToEffect.delete(subMesh);\r\n this._subMeshToDepthWrapper.mm.delete(subMesh);\r\n }\r\n }\r\n })\r\n );\r\n }\r\n\r\n this._subMeshToEffect.set(params.subMesh, params.effect);\r\n this._subMeshToDepthWrapper.mm.delete(params.subMesh); // trigger a depth effect recreation\r\n });\r\n }\r\n\r\n /**\r\n * Gets the effect to use to generate the depth map\r\n * @param subMesh subMesh to get the effect for\r\n * @param shadowGenerator shadow generator to get the effect for\r\n * @param passIdForDrawWrapper Id of the pass for which the effect from the draw wrapper must be retrieved from\r\n * @returns the effect to use to generate the depth map for the subMesh + shadow generator specified\r\n */\r\n public getEffect(subMesh: Nullable<SubMesh>, shadowGenerator: ShadowGenerator, passIdForDrawWrapper: number): Nullable<DrawWrapper> {\r\n const entry = this._subMeshToDepthWrapper.mm.get(subMesh)?.get(shadowGenerator);\r\n if (!entry) {\r\n return null;\r\n }\r\n let drawWrapper = entry.drawWrapper[passIdForDrawWrapper];\r\n if (!drawWrapper) {\r\n drawWrapper = entry.drawWrapper[passIdForDrawWrapper] = new DrawWrapper(this._scene.getEngine());\r\n drawWrapper.setEffect(entry.mainDrawWrapper.effect, entry.mainDrawWrapper.defines);\r\n }\r\n\r\n return drawWrapper;\r\n }\r\n\r\n /**\r\n * Specifies that the submesh is ready to be used for depth rendering\r\n * @param subMesh submesh to check\r\n * @param defines the list of defines to take into account when checking the effect\r\n * @param shadowGenerator combined with subMesh, it defines the effect to check\r\n * @param useInstances specifies that instances should be used\r\n * @param passIdForDrawWrapper Id of the pass for which the draw wrapper should be created\r\n * @returns a boolean indicating that the submesh is ready or not\r\n */\r\n public isReadyForSubMesh(subMesh: SubMesh, defines: string[], shadowGenerator: ShadowGenerator, useInstances: boolean, passIdForDrawWrapper: number): boolean {\r\n if (this.standalone) {\r\n // will ensure the effect is (re)created for the base material\r\n if (!this._baseMaterial.isReadyForSubMesh(subMesh.getMesh(), subMesh, useInstances)) {\r\n return false;\r\n }\r\n }\r\n\r\n return this._makeEffect(subMesh, defines, shadowGenerator, passIdForDrawWrapper)?.isReady() ?? false;\r\n }\r\n\r\n /**\r\n * Disposes the resources\r\n */\r\n public dispose(): void {\r\n this._baseMaterial.onEffectCreatedObservable.remove(this._onEffectCreatedObserver);\r\n this._onEffectCreatedObserver = null;\r\n\r\n const iterator = this._meshes.entries();\r\n for (let entry = iterator.next(); entry.done !== true; entry = iterator.next()) {\r\n const [mesh, observer] = entry.value;\r\n\r\n mesh.onDisposeObservable.remove(observer);\r\n }\r\n }\r\n\r\n private _makeEffect(subMesh: SubMesh, defines: string[], shadowGenerator: ShadowGenerator, passIdForDrawWrapper: number): Nullable<Effect> {\r\n const engine = this._scene.getEngine();\r\n const origEffect = this._subMeshToEffect.get(subMesh);\r\n\r\n if (!origEffect) {\r\n return null;\r\n }\r\n\r\n let params = this._subMeshToDepthWrapper.get(subMesh, shadowGenerator);\r\n if (!params) {\r\n const mainDrawWrapper = new DrawWrapper(engine);\r\n const renderPassId = this._scene.activeCameras?.[0]?.renderPassId ?? this._scene.activeCamera?.renderPassId ?? 0;\r\n mainDrawWrapper.defines = subMesh._getDrawWrapper(renderPassId)?.defines ?? null;\r\n\r\n params = {\r\n drawWrapper: [],\r\n mainDrawWrapper,\r\n depthDefines: \"\",\r\n token: RandomGUID()\r\n };\r\n params.drawWrapper[passIdForDrawWrapper] = mainDrawWrapper;\r\n this._subMeshToDepthWrapper.set(subMesh, shadowGenerator, params);\r\n }\r\n\r\n let join = defines.join(\"\\n\");\r\n\r\n if (params.mainDrawWrapper.effect) {\r\n if (join === params.depthDefines) {\r\n // we already created the depth effect and it is still up to date for this submesh + shadow generator\r\n return params.mainDrawWrapper.effect;\r\n }\r\n }\r\n\r\n params.depthDefines = join;\r\n\r\n // the depth effect is either out of date or has not been created yet\r\n let vertexCode = origEffect.rawVertexSourceCode,\r\n fragmentCode = origEffect.rawFragmentSourceCode;\r\n\r\n // vertex code\r\n const vertexNormalBiasCode = this._options && this._options.remappedVariables ? `#include<shadowMapVertexNormalBias>(${this._options.remappedVariables.join(\",\")})` : Effect.IncludesShadersStore[\"shadowMapVertexNormalBias\"],\r\n vertexMetricCode = this._options && this._options.remappedVariables ? `#include<shadowMapVertexMetric>(${this._options.remappedVariables.join(\",\")})` : Effect.IncludesShadersStore[\"shadowMapVertexMetric\"],\r\n fragmentSoftTransparentShadow = this._options && this._options.remappedVariables ? `#include<shadowMapFragmentSoftTransparentShadow>(${this._options.remappedVariables.join(\",\")})` : Effect.IncludesShadersStore[\"shadowMapFragmentSoftTransparentShadow\"],\r\n fragmentBlockCode = Effect.IncludesShadersStore[\"shadowMapFragment\"];\r\n\r\n vertexCode = vertexCode.replace(/void\\s+?main/g, Effect.IncludesShadersStore[\"shadowMapVertexExtraDeclaration\"] + \"\\r\\nvoid main\");\r\n vertexCode = vertexCode.replace(/#define SHADOWDEPTH_NORMALBIAS|#define CUSTOM_VERTEX_UPDATE_WORLDPOS/g, vertexNormalBiasCode);\r\n\r\n if (vertexCode.indexOf(\"#define SHADOWDEPTH_METRIC\") !== -1) {\r\n vertexCode = vertexCode.replace(/#define SHADOWDEPTH_METRIC/g, vertexMetricCode);\r\n } else {\r\n vertexCode = vertexCode.replace(/}\\s*$/g, vertexMetricCode + \"\\r\\n}\");\r\n }\r\n vertexCode = vertexCode.replace(/#define SHADER_NAME.*?\\n|out vec4 glFragColor;\\n/g, \"\");\r\n\r\n // fragment code\r\n const hasLocationForSoftTransparentShadow = fragmentCode.indexOf(\"#define SHADOWDEPTH_SOFTTRANSPARENTSHADOW\") >= 0 || fragmentCode.indexOf(\"#define CUSTOM_FRAGMENT_BEFORE_FOG\") >= 0;\r\n const hasLocationForFragment = fragmentCode.indexOf(\"#define SHADOWDEPTH_FRAGMENT\") !== -1;\r\n\r\n let fragmentCodeToInjectAtEnd = \"\";\r\n\r\n if (!hasLocationForSoftTransparentShadow) {\r\n fragmentCodeToInjectAtEnd = fragmentSoftTransparentShadow + \"\\r\\n\";\r\n } else {\r\n fragmentCode = fragmentCode.replace(/#define SHADOWDEPTH_SOFTTRANSPARENTSHADOW|#define CUSTOM_FRAGMENT_BEFORE_FOG/g, fragmentSoftTransparentShadow);\r\n }\r\n\r\n fragmentCode = fragmentCode.replace(/void\\s+?main/g, Effect.IncludesShadersStore[\"shadowMapFragmentExtraDeclaration\"] + \"\\r\\nvoid main\");\r\n\r\n if (hasLocationForFragment) {\r\n fragmentCode = fragmentCode.replace(/#define SHADOWDEPTH_FRAGMENT/g, fragmentBlockCode);\r\n } else {\r\n fragmentCodeToInjectAtEnd += fragmentBlockCode + \"\\r\\n\";\r\n }\r\n if (fragmentCodeToInjectAtEnd) {\r\n fragmentCode = fragmentCode.replace(/}\\s*$/g, fragmentCodeToInjectAtEnd + \"}\");\r\n }\r\n\r\n fragmentCode = fragmentCode.replace(/#define SHADER_NAME.*?\\n|out vec4 glFragColor;\\n/g, \"\");\r\n\r\n const uniforms = origEffect.getUniformNames().slice();\r\n\r\n uniforms.push(\"biasAndScaleSM\", \"depthValuesSM\", \"lightDataSM\", \"softTransparentShadowSM\");\r\n\r\n params.mainDrawWrapper.effect = engine.createEffect({\r\n vertexSource: vertexCode,\r\n fragmentSource: fragmentCode,\r\n vertexToken: params.token,\r\n fragmentToken: params.token,\r\n }, <IEffectCreationOptions>{\r\n attributes: origEffect.getAttributesNames(),\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: origEffect.getUniformBuffersNames(),\r\n samplers: origEffect.getSamplers(),\r\n defines: join + \"\\n\" + origEffect.defines.replace(\"#define SHADOWS\", \"\").replace(/#define SHADOW\\d/g, \"\"),\r\n indexParameters: origEffect.getIndexParameters(),\r\n }, engine);\r\n\r\n for (let id = 0; id < params.drawWrapper.length; ++id) {\r\n if (id !== passIdForDrawWrapper) {\r\n params.drawWrapper[id]?.setEffect(params.mainDrawWrapper.effect, params.mainDrawWrapper.defines);\r\n }\r\n }\r\n return params.mainDrawWrapper.effect;\r\n }\r\n}\r\n"]}
@@ -122,8 +122,8 @@ export declare class StandardMaterialDefines extends MaterialDefines implements
122
122
  PREPASS: boolean;
123
123
  PREPASS_IRRADIANCE: boolean;
124
124
  PREPASS_IRRADIANCE_INDEX: number;
125
- PREPASS_ALBEDO: boolean;
126
- PREPASS_ALBEDO_INDEX: number;
125
+ PREPASS_ALBEDO_SQRT: boolean;
126
+ PREPASS_ALBEDO_SQRT_INDEX: number;
127
127
  PREPASS_DEPTH: boolean;
128
128
  PREPASS_DEPTH_INDEX: number;
129
129
  PREPASS_NORMAL: boolean;
@@ -152,6 +152,8 @@ export declare class StandardMaterialDefines extends MaterialDefines implements
152
152
  SAMPLER3DBGRMAP: boolean;
153
153
  IMAGEPROCESSINGPOSTPROCESS: boolean;
154
154
  MULTIVIEW: boolean;
155
+ ORDER_INDEPENDENT_TRANSPARENCY: boolean;
156
+ ORDER_INDEPENDENT_TRANSPARENCY_16BITS: boolean;
155
157
  /**
156
158
  * If the reflection texture on this material is in linear color space
157
159
  * @hidden
@@ -126,8 +126,8 @@ var StandardMaterialDefines = /** @class */ (function (_super) {
126
126
  _this.PREPASS = false;
127
127
  _this.PREPASS_IRRADIANCE = false;
128
128
  _this.PREPASS_IRRADIANCE_INDEX = -1;
129
- _this.PREPASS_ALBEDO = false;
130
- _this.PREPASS_ALBEDO_INDEX = -1;
129
+ _this.PREPASS_ALBEDO_SQRT = false;
130
+ _this.PREPASS_ALBEDO_SQRT_INDEX = -1;
131
131
  _this.PREPASS_DEPTH = false;
132
132
  _this.PREPASS_DEPTH_INDEX = -1;
133
133
  _this.PREPASS_NORMAL = false;
@@ -156,6 +156,8 @@ var StandardMaterialDefines = /** @class */ (function (_super) {
156
156
  _this.SAMPLER3DBGRMAP = false;
157
157
  _this.IMAGEPROCESSINGPOSTPROCESS = false;
158
158
  _this.MULTIVIEW = false;
159
+ _this.ORDER_INDEPENDENT_TRANSPARENCY = false;
160
+ _this.ORDER_INDEPENDENT_TRANSPARENCY_16BITS = false;
159
161
  /**
160
162
  * If the reflection texture on this material is in linear color space
161
163
  * @hidden
@@ -278,6 +280,7 @@ var StandardMaterial = /** @class */ (function (_super) {
278
280
  _this._renderTargets = new SmartArray(16);
279
281
  _this._worldViewProjectionMatrix = Matrix.Zero();
280
282
  _this._globalAmbientColor = new Color3(0, 0, 0);
283
+ _this.buildUniformLayout();
281
284
  // Setup the default processing configuration to the scene.
282
285
  _this._attachImageProcessingConfiguration(null);
283
286
  _this.prePassConfiguration = new PrePassConfiguration();
@@ -576,11 +579,11 @@ var StandardMaterial = /** @class */ (function (_super) {
576
579
  return true;
577
580
  }
578
581
  }
579
- if (!subMesh._materialDefines) {
582
+ if (!subMesh.materialDefines) {
580
583
  subMesh.materialDefines = new StandardMaterialDefines();
581
584
  }
582
585
  var scene = this.getScene();
583
- var defines = subMesh._materialDefines;
586
+ var defines = subMesh.materialDefines;
584
587
  if (this._isReadyForSubMesh(subMesh)) {
585
588
  return true;
586
589
  }
@@ -590,7 +593,10 @@ var StandardMaterial = /** @class */ (function (_super) {
590
593
  // Multiview
591
594
  MaterialHelper.PrepareDefinesForMultiview(scene, defines);
592
595
  // PrePass
593
- MaterialHelper.PrepareDefinesForPrePass(scene, defines, this.canRenderToMRT);
596
+ var oit = this.needAlphaBlendingForMesh(mesh) && this.getScene().useOrderIndependentTransparency;
597
+ MaterialHelper.PrepareDefinesForPrePass(scene, defines, this.canRenderToMRT && !oit);
598
+ // Order independant transparency
599
+ MaterialHelper.PrepareDefinesForOIT(scene, defines, oit);
594
600
  // Textures
595
601
  if (defines._areTexturesDirty) {
596
602
  defines._needUVs = false;
@@ -895,7 +901,8 @@ var StandardMaterial = /** @class */ (function (_super) {
895
901
  ];
896
902
  var samplers = ["diffuseSampler", "ambientSampler", "opacitySampler", "reflectionCubeSampler",
897
903
  "reflection2DSampler", "emissiveSampler", "specularSampler", "bumpSampler", "lightmapSampler",
898
- "refractionCubeSampler", "refraction2DSampler", "boneSampler", "morphTargets"];
904
+ "refractionCubeSampler", "refraction2DSampler", "boneSampler", "morphTargets", "oitDepthSampler",
905
+ "oitFrontColorSampler"];
899
906
  var uniformBuffers = ["Material", "Scene", "Mesh"];
900
907
  DetailMapConfiguration.AddUniforms(uniforms);
901
908
  DetailMapConfiguration.AddSamplers(samplers);
@@ -950,7 +957,6 @@ var StandardMaterial = /** @class */ (function (_super) {
950
957
  else {
951
958
  scene.resetCachedMaterial();
952
959
  subMesh.setEffect(effect, defines, this._materialContext);
953
- this.buildUniformLayout();
954
960
  }
955
961
  }
956
962
  }
@@ -1013,7 +1019,7 @@ var StandardMaterial = /** @class */ (function (_super) {
1013
1019
  * Unbinds the material from the mesh
1014
1020
  */
1015
1021
  StandardMaterial.prototype.unbind = function () {
1016
- if (this._activeEffect) {
1022
+ if (this._activeEffect && !this.getScene().getEngine()._features.needToAlwaysBindUniformBuffers) {
1017
1023
  var needFlag = false;
1018
1024
  if (this._reflectionTexture && this._reflectionTexture.isRenderTarget) {
1019
1025
  this._activeEffect.setTexture("reflection2DSampler", null);
@@ -1037,7 +1043,7 @@ var StandardMaterial = /** @class */ (function (_super) {
1037
1043
  */
1038
1044
  StandardMaterial.prototype.bindForSubMesh = function (world, mesh, subMesh) {
1039
1045
  var scene = this.getScene();
1040
- var defines = subMesh._materialDefines;
1046
+ var defines = subMesh.materialDefines;
1041
1047
  if (!defines) {
1042
1048
  return;
1043
1049
  }
@@ -1203,12 +1209,20 @@ var StandardMaterial = /** @class */ (function (_super) {
1203
1209
  }
1204
1210
  }
1205
1211
  }
1212
+ // OIT with depth peeling
1213
+ if (this.getScene().useOrderIndependentTransparency && this.needAlphaBlendingForMesh(mesh)) {
1214
+ this.getScene().depthPeelingRenderer.bind(effect);
1215
+ }
1206
1216
  this.detailMap.bindForSubMesh(ubo, scene, this.isFrozen);
1207
1217
  // Clip plane
1208
1218
  MaterialHelper.BindClipPlane(effect, scene);
1209
1219
  // Colors
1210
1220
  this.bindEyePosition(effect);
1211
1221
  }
1222
+ else if (scene.getEngine()._features.needToAlwaysBindUniformBuffers) {
1223
+ ubo.bindToEffect(effect, "Material");
1224
+ this._needToBindSceneUbo = true;
1225
+ }
1212
1226
  if (mustRebind || !this.isFrozen) {
1213
1227
  // Lights
1214
1228
  if (scene.lightsEnabled && !this._disableLighting) {