@babylonjs/core 8.28.1 → 8.28.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/Engines/abstractEngine.js +2 -2
  2. package/Engines/abstractEngine.js.map +1 -1
  3. package/FrameGraph/frameGraphContext.d.ts +2 -1
  4. package/FrameGraph/frameGraphContext.js +4 -1
  5. package/FrameGraph/frameGraphContext.js.map +1 -1
  6. package/Lights/Clustered/clusteredLightContainer.d.ts +1 -1
  7. package/Lights/Clustered/clusteredLightContainer.js +4 -5
  8. package/Lights/Clustered/clusteredLightContainer.js.map +1 -1
  9. package/Lights/pointLight.js +4 -4
  10. package/Lights/pointLight.js.map +1 -1
  11. package/Lights/rectAreaLight.js +4 -4
  12. package/Lights/rectAreaLight.js.map +1 -1
  13. package/Lights/spotLight.js +2 -2
  14. package/Lights/spotLight.js.map +1 -1
  15. package/Materials/Background/backgroundMaterial.d.ts +19 -91
  16. package/Materials/Background/backgroundMaterial.js +17 -245
  17. package/Materials/Background/backgroundMaterial.js.map +1 -1
  18. package/Materials/Node/Blocks/Dual/currentScreenBlock.d.ts +3 -1
  19. package/Materials/Node/Blocks/Dual/currentScreenBlock.js +15 -6
  20. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  21. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +1 -1
  22. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  23. package/Materials/Node/Blocks/Dual/lightBlock.js +15 -4
  24. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  25. package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.d.ts +20 -0
  26. package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js +41 -3
  27. package/Materials/Node/Blocks/Dual/smartFilterTextureBlock.js.map +1 -1
  28. package/Materials/Node/Blocks/Fragment/smartFilterFragmentOutputBlock.js +0 -1
  29. package/Materials/Node/Blocks/Fragment/smartFilterFragmentOutputBlock.js.map +1 -1
  30. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +28 -5
  31. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  32. package/Materials/Node/nodeMaterial.d.ts +57 -69
  33. package/Materials/Node/nodeMaterial.js +9 -86
  34. package/Materials/Node/nodeMaterial.js.map +1 -1
  35. package/Materials/Node/nodeMaterialBuildState.d.ts +3 -1
  36. package/Materials/Node/nodeMaterialBuildState.js +35 -15
  37. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  38. package/Materials/PBR/index.d.ts +5 -0
  39. package/Materials/PBR/index.js +5 -0
  40. package/Materials/PBR/index.js.map +1 -1
  41. package/Materials/PBR/openPbrMaterial.d.ts +998 -0
  42. package/Materials/PBR/openPbrMaterial.js +2069 -0
  43. package/Materials/PBR/openPbrMaterial.js.map +1 -0
  44. package/Materials/PBR/pbrBaseMaterial.d.ts +57 -43
  45. package/Materials/PBR/pbrBaseMaterial.js +21 -304
  46. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  47. package/Materials/PBR/pbrMaterial.d.ts +0 -78
  48. package/Materials/PBR/pbrMaterial.js +0 -110
  49. package/Materials/PBR/pbrMaterial.js.map +1 -1
  50. package/Materials/floatingOriginMatrixOverrides.d.ts +3 -0
  51. package/Materials/floatingOriginMatrixOverrides.js +91 -0
  52. package/Materials/floatingOriginMatrixOverrides.js.map +1 -0
  53. package/Materials/imageProcessing.d.ts +65 -0
  54. package/Materials/imageProcessing.js +162 -0
  55. package/Materials/imageProcessing.js.map +1 -0
  56. package/Materials/imageProcessingConfiguration.defines.d.ts +25 -0
  57. package/Materials/imageProcessingConfiguration.defines.js +27 -0
  58. package/Materials/imageProcessingConfiguration.defines.js.map +1 -1
  59. package/Materials/index.d.ts +2 -0
  60. package/Materials/index.js +2 -0
  61. package/Materials/index.js.map +1 -1
  62. package/Materials/material.d.ts +14 -0
  63. package/Materials/material.js +14 -0
  64. package/Materials/material.js.map +1 -1
  65. package/Materials/materialHelper.functions.d.ts +53 -0
  66. package/Materials/materialHelper.functions.js +297 -0
  67. package/Materials/materialHelper.functions.js.map +1 -1
  68. package/Materials/standardMaterial.d.ts +57 -121
  69. package/Materials/standardMaterial.js +21 -250
  70. package/Materials/standardMaterial.js.map +1 -1
  71. package/Materials/uv.defines.d.ts +22 -0
  72. package/Materials/uv.defines.js +24 -0
  73. package/Materials/uv.defines.js.map +1 -0
  74. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +1 -0
  75. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  76. package/Misc/decorators.d.ts +7 -0
  77. package/Misc/decorators.js +34 -0
  78. package/Misc/decorators.js.map +1 -1
  79. package/Particles/Node/Blocks/Emitters/createParticleBlock.js +10 -1
  80. package/Particles/Node/Blocks/Emitters/createParticleBlock.js.map +1 -1
  81. package/Particles/Node/Blocks/index.d.ts +2 -0
  82. package/Particles/Node/Blocks/index.js +2 -0
  83. package/Particles/Node/Blocks/index.js.map +1 -1
  84. package/Particles/Node/Blocks/particleInputBlock.js +4 -1
  85. package/Particles/Node/Blocks/particleInputBlock.js.map +1 -1
  86. package/Particles/Node/Blocks/particleLocalVariableBlock.d.ts +38 -0
  87. package/Particles/Node/Blocks/particleLocalVariableBlock.js +108 -0
  88. package/Particles/Node/Blocks/particleLocalVariableBlock.js.map +1 -0
  89. package/Particles/Node/Blocks/particleVectorLengthBlock.d.ts +26 -0
  90. package/Particles/Node/Blocks/particleVectorLengthBlock.js +50 -0
  91. package/Particles/Node/Blocks/particleVectorLengthBlock.js.map +1 -0
  92. package/Rendering/IBLShadows/iblShadowsPluginMaterial.d.ts +2 -1
  93. package/Rendering/IBLShadows/iblShadowsPluginMaterial.js +45 -0
  94. package/Rendering/IBLShadows/iblShadowsPluginMaterial.js.map +1 -1
  95. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +2 -1
  96. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  97. package/Rendering/geometryBufferRenderer.js +6 -4
  98. package/Rendering/geometryBufferRenderer.js.map +1 -1
  99. package/Rendering/reflectiveShadowMap.d.ts +3 -3
  100. package/Shaders/ShadersInclude/backgroundUboDeclaration.js +1 -1
  101. package/Shaders/ShadersInclude/backgroundUboDeclaration.js.map +1 -1
  102. package/Shaders/ShadersInclude/clusteredLightingFunctions.js +3 -1
  103. package/Shaders/ShadersInclude/clusteredLightingFunctions.js.map +1 -1
  104. package/Shaders/ShadersInclude/defaultUboDeclaration.js +1 -1
  105. package/Shaders/ShadersInclude/defaultUboDeclaration.js.map +1 -1
  106. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +34 -0
  107. package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  108. package/Shaders/ShadersInclude/helperFunctions.js +1 -1
  109. package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
  110. package/Shaders/ShadersInclude/importanceSampling.js +4 -0
  111. package/Shaders/ShadersInclude/importanceSampling.js.map +1 -1
  112. package/Shaders/ShadersInclude/lightsFragmentFunctions.js +1 -0
  113. package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
  114. package/Shaders/ShadersInclude/openpbrBaseLayerData.d.ts +5 -0
  115. package/Shaders/ShadersInclude/openpbrBaseLayerData.js +127 -0
  116. package/Shaders/ShadersInclude/openpbrBaseLayerData.js.map +1 -0
  117. package/Shaders/ShadersInclude/openpbrBlockAmbientOcclusion.d.ts +5 -0
  118. package/Shaders/ShadersInclude/openpbrBlockAmbientOcclusion.js +35 -0
  119. package/Shaders/ShadersInclude/openpbrBlockAmbientOcclusion.js.map +1 -0
  120. package/Shaders/ShadersInclude/openpbrBlockNormalFinal.d.ts +5 -0
  121. package/Shaders/ShadersInclude/openpbrBlockNormalFinal.js +25 -0
  122. package/Shaders/ShadersInclude/openpbrBlockNormalFinal.js.map +1 -0
  123. package/Shaders/ShadersInclude/openpbrCoatLayerData.d.ts +5 -0
  124. package/Shaders/ShadersInclude/openpbrCoatLayerData.js +59 -0
  125. package/Shaders/ShadersInclude/openpbrCoatLayerData.js.map +1 -0
  126. package/Shaders/ShadersInclude/openpbrConductorReflectance.d.ts +5 -0
  127. package/Shaders/ShadersInclude/openpbrConductorReflectance.js +19 -0
  128. package/Shaders/ShadersInclude/openpbrConductorReflectance.js.map +1 -0
  129. package/Shaders/ShadersInclude/openpbrDielectricReflectance.d.ts +5 -0
  130. package/Shaders/ShadersInclude/openpbrDielectricReflectance.js +30 -0
  131. package/Shaders/ShadersInclude/openpbrDielectricReflectance.js.map +1 -0
  132. package/Shaders/ShadersInclude/openpbrDirectLighting.d.ts +5 -0
  133. package/Shaders/ShadersInclude/openpbrDirectLighting.js +69 -0
  134. package/Shaders/ShadersInclude/openpbrDirectLighting.js.map +1 -0
  135. package/Shaders/ShadersInclude/openpbrDirectLightingInit.d.ts +5 -0
  136. package/Shaders/ShadersInclude/openpbrDirectLightingInit.js +80 -0
  137. package/Shaders/ShadersInclude/openpbrDirectLightingInit.js.map +1 -0
  138. package/Shaders/ShadersInclude/openpbrDirectLightingShadow.d.ts +5 -0
  139. package/Shaders/ShadersInclude/openpbrDirectLightingShadow.js +129 -0
  140. package/Shaders/ShadersInclude/openpbrDirectLightingShadow.js.map +1 -0
  141. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.d.ts +5 -0
  142. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +106 -0
  143. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -0
  144. package/Shaders/ShadersInclude/openpbrFragmentDeclaration.d.ts +6 -0
  145. package/Shaders/ShadersInclude/openpbrFragmentDeclaration.js +115 -0
  146. package/Shaders/ShadersInclude/openpbrFragmentDeclaration.js.map +1 -0
  147. package/Shaders/ShadersInclude/openpbrFragmentSamplersDeclaration.d.ts +6 -0
  148. package/Shaders/ShadersInclude/openpbrFragmentSamplersDeclaration.js +72 -0
  149. package/Shaders/ShadersInclude/openpbrFragmentSamplersDeclaration.js.map +1 -0
  150. package/Shaders/ShadersInclude/openpbrGeometryInfo.d.ts +5 -0
  151. package/Shaders/ShadersInclude/openpbrGeometryInfo.js +46 -0
  152. package/Shaders/ShadersInclude/openpbrGeometryInfo.js.map +1 -0
  153. package/Shaders/ShadersInclude/openpbrIblFunctions.d.ts +5 -0
  154. package/Shaders/ShadersInclude/openpbrIblFunctions.js +221 -0
  155. package/Shaders/ShadersInclude/openpbrIblFunctions.js.map +1 -0
  156. package/Shaders/ShadersInclude/openpbrNormalMapFragment.d.ts +5 -0
  157. package/Shaders/ShadersInclude/openpbrNormalMapFragment.js +64 -0
  158. package/Shaders/ShadersInclude/openpbrNormalMapFragment.js.map +1 -0
  159. package/Shaders/ShadersInclude/openpbrNormalMapFragmentFunctions.d.ts +6 -0
  160. package/Shaders/ShadersInclude/openpbrNormalMapFragmentFunctions.js +45 -0
  161. package/Shaders/ShadersInclude/openpbrNormalMapFragmentFunctions.js.map +1 -0
  162. package/Shaders/ShadersInclude/openpbrNormalMapFragmentMainFunctions.d.ts +5 -0
  163. package/Shaders/ShadersInclude/openpbrNormalMapFragmentMainFunctions.js +72 -0
  164. package/Shaders/ShadersInclude/openpbrNormalMapFragmentMainFunctions.js.map +1 -0
  165. package/Shaders/ShadersInclude/openpbrNormalMapVertex.d.ts +5 -0
  166. package/Shaders/ShadersInclude/openpbrNormalMapVertex.js +16 -0
  167. package/Shaders/ShadersInclude/openpbrNormalMapVertex.js.map +1 -0
  168. package/Shaders/ShadersInclude/openpbrNormalMapVertexDeclaration.d.ts +5 -0
  169. package/Shaders/ShadersInclude/openpbrNormalMapVertexDeclaration.js +16 -0
  170. package/Shaders/ShadersInclude/openpbrNormalMapVertexDeclaration.js.map +1 -0
  171. package/Shaders/ShadersInclude/openpbrUboDeclaration.d.ts +7 -0
  172. package/Shaders/ShadersInclude/openpbrUboDeclaration.js +18 -0
  173. package/Shaders/ShadersInclude/openpbrUboDeclaration.js.map +1 -0
  174. package/Shaders/ShadersInclude/openpbrVertexDeclaration.d.ts +6 -0
  175. package/Shaders/ShadersInclude/openpbrVertexDeclaration.js +103 -0
  176. package/Shaders/ShadersInclude/openpbrVertexDeclaration.js.map +1 -0
  177. package/Shaders/ShadersInclude/pbrBRDFFunctions.js +1 -1
  178. package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  179. package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js +1 -0
  180. package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js.map +1 -1
  181. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +3 -1
  182. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  183. package/Shaders/ShadersInclude/pbrHelperFunctions.js +2 -0
  184. package/Shaders/ShadersInclude/pbrHelperFunctions.js.map +1 -1
  185. package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
  186. package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  187. package/Shaders/openpbr.fragment.d.ts +54 -0
  188. package/Shaders/openpbr.fragment.js +206 -0
  189. package/Shaders/openpbr.fragment.js.map +1 -0
  190. package/Shaders/openpbr.vertex.d.ts +39 -0
  191. package/Shaders/openpbr.vertex.js +238 -0
  192. package/Shaders/openpbr.vertex.js.map +1 -0
  193. package/ShadersWGSL/ShadersInclude/backgroundUboDeclaration.js +1 -1
  194. package/ShadersWGSL/ShadersInclude/backgroundUboDeclaration.js.map +1 -1
  195. package/ShadersWGSL/ShadersInclude/defaultUboDeclaration.js +1 -1
  196. package/ShadersWGSL/ShadersInclude/defaultUboDeclaration.js.map +1 -1
  197. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +28 -0
  198. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  199. package/ShadersWGSL/ShadersInclude/importanceSampling.js +4 -0
  200. package/ShadersWGSL/ShadersInclude/importanceSampling.js.map +1 -1
  201. package/ShadersWGSL/ShadersInclude/openpbrBaseLayerData.d.ts +5 -0
  202. package/ShadersWGSL/ShadersInclude/openpbrBaseLayerData.js +126 -0
  203. package/ShadersWGSL/ShadersInclude/openpbrBaseLayerData.js.map +1 -0
  204. package/ShadersWGSL/ShadersInclude/openpbrBlockAmbientOcclusion.d.ts +5 -0
  205. package/ShadersWGSL/ShadersInclude/openpbrBlockAmbientOcclusion.js +36 -0
  206. package/ShadersWGSL/ShadersInclude/openpbrBlockAmbientOcclusion.js.map +1 -0
  207. package/ShadersWGSL/ShadersInclude/openpbrBlockNormalFinal.d.ts +5 -0
  208. package/ShadersWGSL/ShadersInclude/openpbrBlockNormalFinal.js +25 -0
  209. package/ShadersWGSL/ShadersInclude/openpbrBlockNormalFinal.js.map +1 -0
  210. package/ShadersWGSL/ShadersInclude/openpbrCoatLayerData.d.ts +5 -0
  211. package/ShadersWGSL/ShadersInclude/openpbrCoatLayerData.js +59 -0
  212. package/ShadersWGSL/ShadersInclude/openpbrCoatLayerData.js.map +1 -0
  213. package/ShadersWGSL/ShadersInclude/openpbrConductorReflectance.d.ts +5 -0
  214. package/ShadersWGSL/ShadersInclude/openpbrConductorReflectance.js +19 -0
  215. package/ShadersWGSL/ShadersInclude/openpbrConductorReflectance.js.map +1 -0
  216. package/ShadersWGSL/ShadersInclude/openpbrDielectricReflectance.d.ts +5 -0
  217. package/ShadersWGSL/ShadersInclude/openpbrDielectricReflectance.js +33 -0
  218. package/ShadersWGSL/ShadersInclude/openpbrDielectricReflectance.js.map +1 -0
  219. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.d.ts +5 -0
  220. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js +69 -0
  221. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js.map +1 -0
  222. package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.d.ts +5 -0
  223. package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js +80 -0
  224. package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js.map +1 -0
  225. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.d.ts +5 -0
  226. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +112 -0
  227. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -0
  228. package/ShadersWGSL/ShadersInclude/openpbrFragmentSamplersDeclaration.d.ts +6 -0
  229. package/ShadersWGSL/ShadersInclude/openpbrFragmentSamplersDeclaration.js +68 -0
  230. package/ShadersWGSL/ShadersInclude/openpbrFragmentSamplersDeclaration.js.map +1 -0
  231. package/ShadersWGSL/ShadersInclude/openpbrGeometryInfo.d.ts +5 -0
  232. package/ShadersWGSL/ShadersInclude/openpbrGeometryInfo.js +54 -0
  233. package/ShadersWGSL/ShadersInclude/openpbrGeometryInfo.js.map +1 -0
  234. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.d.ts +5 -0
  235. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js +218 -0
  236. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js.map +1 -0
  237. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragment.d.ts +5 -0
  238. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragment.js +64 -0
  239. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragment.js.map +1 -0
  240. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragmentFunctions.d.ts +6 -0
  241. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragmentFunctions.js +45 -0
  242. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragmentFunctions.js.map +1 -0
  243. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragmentMainFunctions.d.ts +5 -0
  244. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragmentMainFunctions.js +51 -0
  245. package/ShadersWGSL/ShadersInclude/openpbrNormalMapFragmentMainFunctions.js.map +1 -0
  246. package/ShadersWGSL/ShadersInclude/openpbrNormalMapVertex.d.ts +5 -0
  247. package/ShadersWGSL/ShadersInclude/openpbrNormalMapVertex.js +16 -0
  248. package/ShadersWGSL/ShadersInclude/openpbrNormalMapVertex.js.map +1 -0
  249. package/ShadersWGSL/ShadersInclude/openpbrNormalMapVertexDeclaration.d.ts +5 -0
  250. package/ShadersWGSL/ShadersInclude/openpbrNormalMapVertexDeclaration.js +16 -0
  251. package/ShadersWGSL/ShadersInclude/openpbrNormalMapVertexDeclaration.js.map +1 -0
  252. package/ShadersWGSL/ShadersInclude/openpbrUboDeclaration.d.ts +7 -0
  253. package/ShadersWGSL/ShadersInclude/openpbrUboDeclaration.js +17 -0
  254. package/ShadersWGSL/ShadersInclude/openpbrUboDeclaration.js.map +1 -0
  255. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js +1 -1
  256. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  257. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +3 -1
  258. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  259. package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.js +2 -0
  260. package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.js.map +1 -1
  261. package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js +1 -1
  262. package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  263. package/ShadersWGSL/openpbr.fragment.d.ts +52 -0
  264. package/ShadersWGSL/openpbr.fragment.js +193 -0
  265. package/ShadersWGSL/openpbr.fragment.js.map +1 -0
  266. package/ShadersWGSL/openpbr.vertex.d.ts +37 -0
  267. package/ShadersWGSL/openpbr.vertex.js +227 -0
  268. package/ShadersWGSL/openpbr.vertex.js.map +1 -0
  269. package/package.json +1 -1
  270. package/scene.d.ts +21 -0
  271. package/scene.js +29 -3
  272. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"geometryBufferRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/geometryBufferRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix } from \"../Maths/math.vector\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { SmartArray } from \"../Misc/smartArray\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport type { InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { MultiRenderTarget } from \"../Materials/Textures/multiRenderTarget\";\r\nimport type { PrePassRenderer } from \"../Rendering/prePassRenderer\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport { _WarnImport } from \"../Misc/devTools\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Material } from \"../Materials/material\";\r\n\r\nimport \"../Shaders/geometry.fragment\";\r\nimport \"../Shaders/geometry.vertex\";\r\nimport { MaterialFlags } from \"../Materials/materialFlags\";\r\nimport { AddClipPlaneUniforms, BindClipPlane, PrepareStringDefinesForClipPlanes } from \"../Materials/clipPlaneMaterialHelper\";\r\nimport { BindMorphTargetParameters, BindSceneUniformBuffer, PrepareDefinesAndAttributesForMorphTargets, PushAttributesForInstances } from \"../Materials/materialHelper.functions\";\r\n\r\nimport \"../Engines/Extensions/engine.multiRender\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/** @internal */\r\ninterface ISavedTransformationMatrix {\r\n world: Matrix;\r\n viewProjection: Matrix;\r\n}\r\n\r\n/** list the uniforms used by the geometry renderer */\r\nconst Uniforms = [\r\n \"world\",\r\n \"mBones\",\r\n \"viewProjection\",\r\n \"diffuseMatrix\",\r\n \"view\",\r\n \"previousWorld\",\r\n \"previousViewProjection\",\r\n \"mPreviousBones\",\r\n \"bumpMatrix\",\r\n \"reflectivityMatrix\",\r\n \"albedoMatrix\",\r\n \"reflectivityColor\",\r\n \"albedoColor\",\r\n \"metallic\",\r\n \"glossiness\",\r\n \"vTangentSpaceParams\",\r\n \"vBumpInfos\",\r\n \"morphTargetInfluences\",\r\n \"morphTargetCount\",\r\n \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\r\n \"boneTextureWidth\",\r\n];\r\nAddClipPlaneUniforms(Uniforms);\r\n\r\n/**\r\n * This renderer is helpful to fill one of the render target with a geometry buffer.\r\n */\r\nexport class GeometryBufferRenderer {\r\n /**\r\n * Force all the standard materials to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n /**\r\n * Constant used to retrieve the depth texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.DEPTH_TEXTURE_INDEX)\r\n */\r\n public static readonly DEPTH_TEXTURE_TYPE = 0;\r\n /**\r\n * Constant used to retrieve the normal texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.NORMAL_TEXTURE_INDEX)\r\n */\r\n public static readonly NORMAL_TEXTURE_TYPE = 1;\r\n /**\r\n * Constant used to retrieve the position texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.POSITION_TEXTURE_INDEX)\r\n */\r\n public static readonly POSITION_TEXTURE_TYPE = 2;\r\n /**\r\n * Constant used to retrieve the velocity texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.VELOCITY_TEXTURE_INDEX)\r\n */\r\n public static readonly VELOCITY_TEXTURE_TYPE = 3;\r\n /**\r\n * Constant used to retrieve the reflectivity texture index in the G-Buffer textures array\r\n * using the getIndex(GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE)\r\n */\r\n public static readonly REFLECTIVITY_TEXTURE_TYPE = 4;\r\n\r\n /**\r\n * Constant used to retrieve the screen-space depth texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE)\r\n */\r\n public static readonly SCREENSPACE_DEPTH_TEXTURE_TYPE = 5;\r\n\r\n /**\r\n * Constant used to retrieve the linear velocity texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE)\r\n */\r\n public static readonly VELOCITY_LINEAR_TEXTURE_TYPE = 6;\r\n\r\n /**\r\n * Dictionary used to store the previous transformation matrices of each rendered mesh\r\n * in order to compute objects velocities when enableVelocity is set to \"true\"\r\n * @internal\r\n */\r\n public _previousTransformationMatrices: { [index: number]: ISavedTransformationMatrix } = {};\r\n /**\r\n * Dictionary used to store the previous bones transformation matrices of each rendered mesh\r\n * in order to compute objects velocities when enableVelocity is set to \"true\"\r\n * @internal\r\n */\r\n public _previousBonesTransformationMatrices: { [index: number]: Float32Array } = {};\r\n /**\r\n * Array used to store the ignored skinned meshes while computing velocity map (typically used by the motion blur post-process).\r\n * Avoids computing bones velocities and computes only mesh's velocity itself (position, rotation, scaling).\r\n */\r\n public excludedSkinnedMeshesFromVelocity: AbstractMesh[] = [];\r\n\r\n /** Gets or sets a boolean indicating if transparent meshes should be rendered */\r\n public renderTransparentMeshes = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if normals should be generated in world space (default: false, meaning normals are generated in view space)\r\n */\r\n public generateNormalsInWorldSpace = false;\r\n\r\n private _normalsAreUnsigned = false;\r\n\r\n /**\r\n * Gets a boolean indicating if normals are encoded in the [0,1] range in the render target. If true, you should do `normal = normal_rt * 2.0 - 1.0` to get the right normal\r\n */\r\n public get normalsAreUnsigned() {\r\n return this._normalsAreUnsigned;\r\n }\r\n\r\n private _scene: Scene;\r\n private _resizeObserver: Nullable<Observer<AbstractEngine>> = null;\r\n private _multiRenderTarget: MultiRenderTarget;\r\n private _textureTypesAndFormats: { [key: number]: { textureType: number; textureFormat: number } };\r\n private _ratioOrDimensions: number | { width: number; height: number };\r\n private _enableDepth: boolean = true;\r\n private _enableNormal: boolean = true;\r\n private _enablePosition: boolean = false;\r\n private _enableVelocity: boolean = false;\r\n private _enableVelocityLinear: boolean = false;\r\n private _enableReflectivity: boolean = false;\r\n private _enableScreenspaceDepth: boolean = false;\r\n private _depthFormat: number;\r\n private _clearColor = new Color4(0, 0, 0, 0);\r\n private _clearDepthColor = new Color4(0, 0, 0, 1); // sets an invalid value by default - depth in the depth texture is view.z, so 0 is not possible because view.z can't be less than camera.minZ\r\n\r\n private _positionIndex: number = -1;\r\n private _velocityIndex: number = -1;\r\n private _velocityLinearIndex: number = -1;\r\n private _reflectivityIndex: number = -1;\r\n private _depthIndex: number = -1;\r\n private _normalIndex: number = -1;\r\n private _screenspaceDepthIndex: number = -1;\r\n\r\n private _linkedWithPrePass: boolean = false;\r\n private _prePassRenderer: PrePassRenderer;\r\n private _attachmentsFromPrePass: number[];\r\n private _useUbo: boolean;\r\n\r\n protected _cachedDefines: string;\r\n\r\n /**\r\n * @internal\r\n * Sets up internal structures to share outputs with PrePassRenderer\r\n * This method should only be called by the PrePassRenderer itself\r\n */\r\n public _linkPrePassRenderer(prePassRenderer: PrePassRenderer) {\r\n this._linkedWithPrePass = true;\r\n this._prePassRenderer = prePassRenderer;\r\n\r\n if (this._multiRenderTarget) {\r\n // prevents clearing of the RT since it's done by prepass\r\n this._multiRenderTarget.onClearObservable.clear();\r\n this._multiRenderTarget.onClearObservable.add(() => {\r\n // pass\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Separates internal structures from PrePassRenderer so the geometry buffer can now operate by itself.\r\n * This method should only be called by the PrePassRenderer itself\r\n */\r\n public _unlinkPrePassRenderer() {\r\n this._linkedWithPrePass = false;\r\n this._createRenderTargets();\r\n }\r\n\r\n /**\r\n * @internal\r\n * Resets the geometry buffer layout\r\n */\r\n public _resetLayout() {\r\n this._enableDepth = true;\r\n this._enableNormal = true;\r\n this._enablePosition = false;\r\n this._enableReflectivity = false;\r\n this._enableVelocity = false;\r\n this._enableVelocityLinear = false;\r\n this._enableScreenspaceDepth = false;\r\n this._attachmentsFromPrePass = [];\r\n }\r\n\r\n /**\r\n * @internal\r\n * Replaces a texture in the geometry buffer renderer\r\n * Useful when linking textures of the prepass renderer\r\n */\r\n public _forceTextureType(geometryBufferType: number, index: number) {\r\n if (geometryBufferType === GeometryBufferRenderer.POSITION_TEXTURE_TYPE) {\r\n this._positionIndex = index;\r\n this._enablePosition = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE) {\r\n this._velocityIndex = index;\r\n this._enableVelocity = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE) {\r\n this._velocityLinearIndex = index;\r\n this._enableVelocityLinear = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE) {\r\n this._reflectivityIndex = index;\r\n this._enableReflectivity = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.DEPTH_TEXTURE_TYPE) {\r\n this._depthIndex = index;\r\n this._enableDepth = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.NORMAL_TEXTURE_TYPE) {\r\n this._normalIndex = index;\r\n this._enableNormal = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE) {\r\n this._screenspaceDepthIndex = index;\r\n this._enableScreenspaceDepth = true;\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Sets texture attachments\r\n * Useful when linking textures of the prepass renderer\r\n */\r\n public _setAttachments(attachments: number[]) {\r\n this._attachmentsFromPrePass = attachments;\r\n }\r\n\r\n /**\r\n * @internal\r\n * Replaces the first texture which is hard coded as a depth texture in the geometry buffer\r\n * Useful when linking textures of the prepass renderer\r\n */\r\n public _linkInternalTexture(internalTexture: InternalTexture) {\r\n this._multiRenderTarget.setInternalTexture(internalTexture, 0, false);\r\n }\r\n\r\n /**\r\n * Gets the render list (meshes to be rendered) used in the G buffer.\r\n */\r\n public get renderList() {\r\n return this._multiRenderTarget.renderList;\r\n }\r\n\r\n /**\r\n * Set the render list (meshes to be rendered) used in the G buffer.\r\n */\r\n public set renderList(meshes: Nullable<AbstractMesh[]>) {\r\n this._multiRenderTarget.renderList = meshes;\r\n }\r\n\r\n /**\r\n * Gets whether or not G buffer are supported by the running hardware.\r\n * This requires draw buffer supports\r\n */\r\n public get isSupported(): boolean {\r\n return this._multiRenderTarget.isSupported;\r\n }\r\n\r\n /**\r\n * Returns the index of the given texture type in the G-Buffer textures array\r\n * @param textureType The texture type constant. For example GeometryBufferRenderer.POSITION_TEXTURE_INDEX\r\n * @returns the index of the given texture type in the G-Buffer textures array\r\n */\r\n public getTextureIndex(textureType: number): number {\r\n switch (textureType) {\r\n case GeometryBufferRenderer.POSITION_TEXTURE_TYPE:\r\n return this._positionIndex;\r\n case GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE:\r\n return this._velocityIndex;\r\n case GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE:\r\n return this._velocityLinearIndex;\r\n case GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE:\r\n return this._reflectivityIndex;\r\n case GeometryBufferRenderer.DEPTH_TEXTURE_TYPE:\r\n return this._depthIndex;\r\n case GeometryBufferRenderer.NORMAL_TEXTURE_TYPE:\r\n return this._normalIndex;\r\n case GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE:\r\n return this._screenspaceDepthIndex;\r\n default:\r\n return -1;\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if object's depths are enabled for the G buffer.\r\n */\r\n public get enableDepth(): boolean {\r\n return this._enableDepth;\r\n }\r\n\r\n /**\r\n * Sets whether or not object's depths are enabled for the G buffer.\r\n */\r\n public set enableDepth(enable: boolean) {\r\n this._enableDepth = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if object's normals are enabled for the G buffer.\r\n */\r\n public get enableNormal(): boolean {\r\n return this._enableNormal;\r\n }\r\n\r\n /**\r\n * Sets whether or not object's normals are enabled for the G buffer.\r\n */\r\n public set enableNormal(enable: boolean) {\r\n this._enableNormal = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if objects positions are enabled for the G buffer.\r\n */\r\n public get enablePosition(): boolean {\r\n return this._enablePosition;\r\n }\r\n\r\n /**\r\n * Sets whether or not objects positions are enabled for the G buffer.\r\n */\r\n public set enablePosition(enable: boolean) {\r\n this._enablePosition = enable;\r\n\r\n // PrePass handles index and texture links\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if objects velocities are enabled for the G buffer.\r\n */\r\n public get enableVelocity(): boolean {\r\n return this._enableVelocity;\r\n }\r\n\r\n /**\r\n * Sets whether or not objects velocities are enabled for the G buffer.\r\n */\r\n public set enableVelocity(enable: boolean) {\r\n this._enableVelocity = enable;\r\n\r\n if (!enable) {\r\n this._previousTransformationMatrices = {};\r\n }\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n\r\n this._scene.needsPreviousWorldMatrices = enable;\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if object's linear velocities are enabled for the G buffer.\r\n */\r\n public get enableVelocityLinear(): boolean {\r\n return this._enableVelocityLinear;\r\n }\r\n\r\n /**\r\n * Sets whether or not object's linear velocities are enabled for the G buffer.\r\n */\r\n public set enableVelocityLinear(enable: boolean) {\r\n this._enableVelocityLinear = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if objects reflectivity are enabled in the G buffer.\r\n */\r\n public get enableReflectivity(): boolean {\r\n return this._enableReflectivity;\r\n }\r\n\r\n /**\r\n * Sets whether or not objects reflectivity are enabled for the G buffer.\r\n * For Metallic-Roughness workflow with ORM texture, we assume that ORM texture is defined according to the default layout:\r\n * pbr.useRoughnessFromMetallicTextureAlpha = false;\r\n * pbr.useRoughnessFromMetallicTextureGreen = true;\r\n * pbr.useMetallnessFromMetallicTextureBlue = true;\r\n */\r\n public set enableReflectivity(enable: boolean) {\r\n this._enableReflectivity = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * Sets whether or not objects screenspace depth are enabled for the G buffer.\r\n */\r\n public get enableScreenspaceDepth(): boolean {\r\n return this._enableScreenspaceDepth;\r\n }\r\n\r\n public set enableScreenspaceDepth(enable: boolean) {\r\n this._enableScreenspaceDepth = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * If set to true (default: false), the depth texture will be cleared with the depth value corresponding to the far plane (1 in normal mode, 0 in reverse depth buffer mode)\r\n * If set to false, the depth texture is always cleared with 0.\r\n */\r\n public useSpecificClearForDepthTexture = false;\r\n\r\n /**\r\n * Gets the scene associated with the buffer.\r\n */\r\n public get scene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Gets the ratio used by the buffer during its creation.\r\n * How big is the buffer related to the main canvas.\r\n */\r\n public get ratio(): number {\r\n return typeof this._ratioOrDimensions === \"object\" ? 1 : this._ratioOrDimensions;\r\n }\r\n\r\n /** Shader language used by the material */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this material.\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _SceneComponentInitialization: (scene: Scene) => void = (_) => {\r\n throw _WarnImport(\"GeometryBufferRendererSceneComponent\");\r\n };\r\n\r\n /**\r\n * Creates a new G Buffer for the scene\r\n * @param scene The scene the buffer belongs to\r\n * @param ratioOrDimensions How big is the buffer related to the main canvas (default: 1). You can also directly pass a width and height for the generated textures\r\n * @param depthFormat Format of the depth texture (default: Constants.TEXTUREFORMAT_DEPTH16)\r\n * @param textureTypesAndFormats The types and formats of textures to create as render targets. If not provided, all textures will be RGBA and float or half float, depending on the engine capabilities.\r\n */\r\n constructor(\r\n scene: Scene,\r\n ratioOrDimensions: number | { width: number; height: number } = 1,\r\n depthFormat = Constants.TEXTUREFORMAT_DEPTH16,\r\n textureTypesAndFormats?: { [key: number]: { textureType: number; textureFormat: number } }\r\n ) {\r\n this._scene = scene;\r\n this._ratioOrDimensions = ratioOrDimensions;\r\n this._useUbo = scene.getEngine().supportsUniformBuffers;\r\n this._depthFormat = depthFormat;\r\n this._textureTypesAndFormats = textureTypesAndFormats || {};\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync();\r\n\r\n GeometryBufferRenderer._SceneComponentInitialization(this._scene);\r\n\r\n // Render target\r\n this._createRenderTargets();\r\n }\r\n\r\n private _shadersLoaded = false;\r\n\r\n private async _initShaderSourceAsync() {\r\n const engine = this._scene.getEngine();\r\n\r\n if (engine.isWebGPU && !GeometryBufferRenderer.ForceGLSL) {\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n\r\n await Promise.all([import(\"../ShadersWGSL/geometry.vertex\"), import(\"../ShadersWGSL/geometry.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../Shaders/geometry.vertex\"), import(\"../Shaders/geometry.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n }\r\n\r\n /**\r\n * Checks whether everything is ready to render a submesh to the G buffer.\r\n * @param subMesh the submesh to check readiness for\r\n * @param useInstances is the mesh drawn using instance or not\r\n * @returns true if ready otherwise false\r\n */\r\n public isReady(subMesh: SubMesh, useInstances: boolean): boolean {\r\n if (!this._shadersLoaded) {\r\n return false;\r\n }\r\n\r\n const material = <any>subMesh.getMaterial();\r\n\r\n if (material && material.disableDepthWrite) {\r\n return false;\r\n }\r\n\r\n const defines = [];\r\n const attribs = [VertexBuffer.PositionKind, VertexBuffer.NormalKind];\r\n const mesh = subMesh.getMesh();\r\n\r\n let uv1 = false;\r\n let uv2 = false;\r\n const color = false;\r\n\r\n if (material) {\r\n let needUv = false;\r\n // Alpha test\r\n if (material.needAlphaTestingForMesh(mesh) && material.getAlphaTestTexture()) {\r\n defines.push(\"#define ALPHATEST\");\r\n defines.push(`#define ALPHATEST_UV${material.getAlphaTestTexture().coordinatesIndex + 1}`);\r\n needUv = true;\r\n }\r\n\r\n // Normal map texture\r\n if ((material.bumpTexture || material.normalTexture) && MaterialFlags.BumpTextureEnabled) {\r\n const texture = material.bumpTexture || material.normalTexture;\r\n defines.push(\"#define BUMP\");\r\n defines.push(`#define BUMP_UV${texture.coordinatesIndex + 1}`);\r\n needUv = true;\r\n }\r\n\r\n if (this._enableReflectivity) {\r\n let metallicWorkflow = false;\r\n // for PBR materials: cf. https://doc.babylonjs.com/features/featuresDeepDive/materials/using/masterPBR\r\n if (material.getClassName() === \"PBRMetallicRoughnessMaterial\") {\r\n // if it is a PBR material in MetallicRoughness Mode:\r\n if (material.metallicRoughnessTexture) {\r\n defines.push(\"#define ORMTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.metallicRoughnessTexture.coordinatesIndex + 1}`);\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n needUv = true;\r\n metallicWorkflow = true;\r\n }\r\n // null or undefined\r\n if (material.metallic != null) {\r\n defines.push(\"#define METALLIC\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n // null or undefined\r\n if (material.roughness != null) {\r\n defines.push(\"#define ROUGHNESS\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n if (metallicWorkflow) {\r\n if (material.baseTexture) {\r\n defines.push(\"#define ALBEDOTEXTURE\");\r\n defines.push(`#define ALBEDO_UV${material.baseTexture.coordinatesIndex + 1}`);\r\n if (material.baseTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAALBEDO\");\r\n }\r\n needUv = true;\r\n }\r\n if (material.baseColor) {\r\n defines.push(\"#define ALBEDOCOLOR\");\r\n }\r\n }\r\n } else if (material.getClassName() === \"PBRSpecularGlossinessMaterial\") {\r\n // if it is a PBR material in Specular/Glossiness Mode:\r\n if (material.specularGlossinessTexture) {\r\n defines.push(\"#define SPECULARGLOSSINESSTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.specularGlossinessTexture.coordinatesIndex + 1}`);\r\n needUv = true;\r\n if (material.specularGlossinessTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAREFLECTIVITYTEXTURE\");\r\n }\r\n } else {\r\n if (material.specularColor) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n }\r\n // null or undefined\r\n if (material.glossiness != null) {\r\n defines.push(\"#define GLOSSINESS\");\r\n }\r\n } else if (material.getClassName() === \"PBRMaterial\") {\r\n // if it is the bigger PBRMaterial\r\n if (material.metallicTexture) {\r\n defines.push(\"#define ORMTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.metallicTexture.coordinatesIndex + 1}`);\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n needUv = true;\r\n metallicWorkflow = true;\r\n }\r\n // null or undefined\r\n if (material.metallic != null) {\r\n defines.push(\"#define METALLIC\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n\r\n // null or undefined\r\n if (material.roughness != null) {\r\n defines.push(\"#define ROUGHNESS\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n\r\n if (metallicWorkflow) {\r\n if (material.albedoTexture) {\r\n defines.push(\"#define ALBEDOTEXTURE\");\r\n defines.push(`#define ALBEDO_UV${material.albedoTexture.coordinatesIndex + 1}`);\r\n if (material.albedoTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAALBEDO\");\r\n }\r\n needUv = true;\r\n }\r\n if (material.albedoColor) {\r\n defines.push(\"#define ALBEDOCOLOR\");\r\n }\r\n } else {\r\n // SpecularGlossiness Model\r\n if (material.reflectivityTexture) {\r\n defines.push(\"#define SPECULARGLOSSINESSTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.reflectivityTexture.coordinatesIndex + 1}`);\r\n if (material.reflectivityTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAREFLECTIVITYTEXTURE\");\r\n }\r\n needUv = true;\r\n } else if (material.reflectivityColor) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n // null or undefined\r\n if (material.microSurface != null) {\r\n defines.push(\"#define GLOSSINESS\");\r\n }\r\n }\r\n } else if (material.getClassName() === \"StandardMaterial\") {\r\n // if StandardMaterial:\r\n if (material.specularTexture) {\r\n defines.push(\"#define REFLECTIVITYTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.specularTexture.coordinatesIndex + 1}`);\r\n if (material.specularTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAREFLECTIVITYTEXTURE\");\r\n }\r\n needUv = true;\r\n }\r\n if (material.specularColor) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n }\r\n }\r\n\r\n if (needUv) {\r\n defines.push(\"#define NEED_UV\");\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n attribs.push(VertexBuffer.UVKind);\r\n defines.push(\"#define UV1\");\r\n uv1 = true;\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n defines.push(\"#define UV2\");\r\n uv2 = true;\r\n }\r\n }\r\n }\r\n\r\n // Buffers\r\n if (this._enableDepth) {\r\n defines.push(\"#define DEPTH\");\r\n defines.push(\"#define DEPTH_INDEX \" + this._depthIndex);\r\n }\r\n\r\n if (this._enableNormal) {\r\n defines.push(\"#define NORMAL\");\r\n defines.push(\"#define NORMAL_INDEX \" + this._normalIndex);\r\n }\r\n\r\n if (this._enablePosition) {\r\n defines.push(\"#define POSITION\");\r\n defines.push(\"#define POSITION_INDEX \" + this._positionIndex);\r\n }\r\n\r\n if (this._enableVelocity) {\r\n defines.push(\"#define VELOCITY\");\r\n defines.push(\"#define VELOCITY_INDEX \" + this._velocityIndex);\r\n if (this.excludedSkinnedMeshesFromVelocity.indexOf(mesh) === -1) {\r\n defines.push(\"#define BONES_VELOCITY_ENABLED\");\r\n }\r\n }\r\n\r\n if (this._enableVelocityLinear) {\r\n defines.push(\"#define VELOCITY_LINEAR\");\r\n defines.push(\"#define VELOCITY_LINEAR_INDEX \" + this._velocityLinearIndex);\r\n if (this.excludedSkinnedMeshesFromVelocity.indexOf(mesh) === -1) {\r\n defines.push(\"#define BONES_VELOCITY_ENABLED\");\r\n }\r\n }\r\n\r\n if (this._enableReflectivity) {\r\n defines.push(\"#define REFLECTIVITY\");\r\n defines.push(\"#define REFLECTIVITY_INDEX \" + this._reflectivityIndex);\r\n }\r\n\r\n if (this._enableScreenspaceDepth) {\r\n if (this._screenspaceDepthIndex !== -1) {\r\n defines.push(\"#define SCREENSPACE_DEPTH_INDEX \" + this._screenspaceDepthIndex);\r\n defines.push(\"#define SCREENSPACE_DEPTH\");\r\n }\r\n }\r\n\r\n if (this.generateNormalsInWorldSpace) {\r\n defines.push(\"#define NORMAL_WORLDSPACE\");\r\n }\r\n\r\n if (this._normalsAreUnsigned) {\r\n defines.push(\"#define ENCODE_NORMAL\");\r\n }\r\n\r\n // Bones\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n attribs.push(VertexBuffer.MatricesIndicesKind);\r\n attribs.push(VertexBuffer.MatricesWeightsKind);\r\n if (mesh.numBoneInfluencers > 4) {\r\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\r\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\r\n }\r\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\r\n defines.push(\"#define BONETEXTURE \" + mesh.skeleton.isUsingTextureForMatrices);\r\n defines.push(\"#define BonesPerMesh \" + (mesh.skeleton.bones.length + 1));\r\n } else {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\r\n defines.push(\"#define BONETEXTURE false\");\r\n defines.push(\"#define BonesPerMesh 0\");\r\n }\r\n\r\n // Morph targets\r\n const numMorphInfluencers = mesh.morphTargetManager\r\n ? PrepareDefinesAndAttributesForMorphTargets(\r\n mesh.morphTargetManager,\r\n defines,\r\n attribs,\r\n mesh,\r\n true, // usePositionMorph\r\n true, // useNormalMorph\r\n false, // useTangentMorph\r\n uv1, // useUVMorph\r\n uv2, // useUV2Morph\r\n color // useColorMorph\r\n )\r\n : 0;\r\n\r\n // Instances\r\n if (useInstances) {\r\n defines.push(\"#define INSTANCES\");\r\n PushAttributesForInstances(attribs, this._enableVelocity || this._enableVelocityLinear);\r\n if (subMesh.getRenderingMesh().hasThinInstances) {\r\n defines.push(\"#define THIN_INSTANCES\");\r\n }\r\n }\r\n\r\n // Setup textures count\r\n if (this._linkedWithPrePass) {\r\n defines.push(\"#define SCENE_MRT_COUNT \" + this._attachmentsFromPrePass.length);\r\n } else {\r\n defines.push(\"#define SCENE_MRT_COUNT \" + this._multiRenderTarget.textures.length);\r\n }\r\n\r\n PrepareStringDefinesForClipPlanes(material, this._scene, defines);\r\n\r\n // Get correct effect\r\n const engine = this._scene.getEngine();\r\n const drawWrapper = subMesh._getDrawWrapper(undefined, true)!;\r\n const cachedDefines = drawWrapper.defines;\r\n const join = defines.join(\"\\n\");\r\n if (cachedDefines !== join) {\r\n drawWrapper.setEffect(\r\n engine.createEffect(\r\n \"geometry\",\r\n {\r\n attributes: attribs,\r\n uniformsNames: Uniforms,\r\n samplers: [\"diffuseSampler\", \"bumpSampler\", \"reflectivitySampler\", \"albedoSampler\", \"morphTargets\", \"boneSampler\"],\r\n defines: join,\r\n onCompiled: null,\r\n fallbacks: null,\r\n onError: null,\r\n uniformBuffersNames: [\"Scene\"],\r\n indexParameters: { buffersCount: this._multiRenderTarget.textures.length - 1, maxSimultaneousMorphTargets: numMorphInfluencers },\r\n shaderLanguage: this.shaderLanguage,\r\n },\r\n engine\r\n ),\r\n join\r\n );\r\n }\r\n\r\n return drawWrapper.effect!.isReady();\r\n }\r\n\r\n /**\r\n * Gets the current underlying G Buffer.\r\n * @returns the buffer\r\n */\r\n public getGBuffer(): MultiRenderTarget {\r\n return this._multiRenderTarget;\r\n }\r\n\r\n /**\r\n * Gets the number of samples used to render the buffer (anti aliasing).\r\n */\r\n public get samples(): number {\r\n return this._multiRenderTarget.samples;\r\n }\r\n\r\n /**\r\n * Sets the number of samples used to render the buffer (anti aliasing).\r\n */\r\n public set samples(value: number) {\r\n this._multiRenderTarget.samples = value;\r\n }\r\n\r\n /**\r\n * Disposes the renderer and frees up associated resources.\r\n */\r\n public dispose(): void {\r\n if (this._resizeObserver) {\r\n const engine = this._scene.getEngine();\r\n engine.onResizeObservable.remove(this._resizeObserver);\r\n this._resizeObserver = null;\r\n }\r\n this.getGBuffer().dispose();\r\n }\r\n\r\n private _assignRenderTargetIndices(): [number, string[], Array<{ textureType: number; textureFormat: number } | undefined>] {\r\n const textureNames: string[] = [];\r\n const textureTypesAndFormats: Array<{ textureType: number; textureFormat: number } | undefined> = [];\r\n let count = 0;\r\n\r\n if (this._enableDepth) {\r\n this._depthIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Depth\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.DEPTH_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableNormal) {\r\n this._normalIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Normal\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enablePosition) {\r\n this._positionIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Position\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.POSITION_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableVelocity) {\r\n this._velocityIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Velocity\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableVelocityLinear) {\r\n this._velocityLinearIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_VelocityLinear\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableReflectivity) {\r\n this._reflectivityIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Reflectivity\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableScreenspaceDepth) {\r\n this._screenspaceDepthIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_ScreenspaceDepth\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE]);\r\n }\r\n\r\n return [count, textureNames, textureTypesAndFormats];\r\n }\r\n\r\n protected _createRenderTargets(): void {\r\n const engine = this._scene.getEngine();\r\n const [count, textureNames, textureTypesAndFormat] = this._assignRenderTargetIndices();\r\n\r\n let type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n if (engine._caps.textureFloat && engine._caps.textureFloatLinearFiltering) {\r\n type = Constants.TEXTURETYPE_FLOAT;\r\n } else if (engine._caps.textureHalfFloat && engine._caps.textureHalfFloatLinearFiltering) {\r\n type = Constants.TEXTURETYPE_HALF_FLOAT;\r\n }\r\n\r\n const dimensions =\r\n (this._ratioOrDimensions as any).width !== undefined\r\n ? (this._ratioOrDimensions as { width: number; height: number })\r\n : { width: engine.getRenderWidth() * (this._ratioOrDimensions as number), height: engine.getRenderHeight() * (this._ratioOrDimensions as number) };\r\n\r\n const textureTypes: number[] = [];\r\n const textureFormats: number[] = [];\r\n\r\n for (const typeAndFormat of textureTypesAndFormat) {\r\n if (typeAndFormat) {\r\n textureTypes.push(typeAndFormat.textureType);\r\n textureFormats.push(typeAndFormat.textureFormat);\r\n } else {\r\n textureTypes.push(type);\r\n textureFormats.push(Constants.TEXTUREFORMAT_RGBA);\r\n }\r\n }\r\n\r\n this._normalsAreUnsigned =\r\n textureTypes[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE] === Constants.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV ||\r\n textureTypes[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE] === Constants.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV;\r\n\r\n this._multiRenderTarget = new MultiRenderTarget(\r\n \"gBuffer\",\r\n dimensions,\r\n count,\r\n this._scene,\r\n { generateMipMaps: false, generateDepthTexture: true, types: textureTypes, formats: textureFormats, depthTextureFormat: this._depthFormat },\r\n textureNames.concat(\"gBuffer_DepthBuffer\")\r\n );\r\n if (!this.isSupported) {\r\n return;\r\n }\r\n this._multiRenderTarget.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this._multiRenderTarget.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n this._multiRenderTarget.refreshRate = 1;\r\n this._multiRenderTarget.renderParticles = false;\r\n this._multiRenderTarget.renderList = null;\r\n\r\n // Depth is always the first texture in the geometry buffer renderer!\r\n const layoutAttachmentsAll = [true];\r\n const layoutAttachmentsAllButDepth = [false];\r\n const layoutAttachmentsDepthOnly = [true];\r\n\r\n for (let i = 1; i < count; ++i) {\r\n layoutAttachmentsAll.push(true);\r\n layoutAttachmentsDepthOnly.push(false);\r\n layoutAttachmentsAllButDepth.push(true);\r\n }\r\n\r\n const attachmentsAll = engine.buildTextureLayout(layoutAttachmentsAll);\r\n const attachmentsAllButDepth = engine.buildTextureLayout(layoutAttachmentsAllButDepth);\r\n const attachmentsDepthOnly = engine.buildTextureLayout(layoutAttachmentsDepthOnly);\r\n\r\n this._multiRenderTarget.onClearObservable.add((engine) => {\r\n engine.bindAttachments(this.useSpecificClearForDepthTexture ? attachmentsAllButDepth : attachmentsAll);\r\n engine.clear(this._clearColor, true, true, true);\r\n if (this.useSpecificClearForDepthTexture) {\r\n engine.bindAttachments(attachmentsDepthOnly);\r\n engine.clear(this._clearDepthColor, true, true, true);\r\n }\r\n engine.bindAttachments(attachmentsAll);\r\n });\r\n\r\n this._resizeObserver = engine.onResizeObservable.add(() => {\r\n if (this._multiRenderTarget) {\r\n const dimensions =\r\n (this._ratioOrDimensions as any).width !== undefined\r\n ? (this._ratioOrDimensions as { width: number; height: number })\r\n : { width: engine.getRenderWidth() * (this._ratioOrDimensions as number), height: engine.getRenderHeight() * (this._ratioOrDimensions as number) };\r\n this._multiRenderTarget.resize(dimensions);\r\n }\r\n });\r\n\r\n // Custom render function\r\n const renderSubMesh = (subMesh: SubMesh): void => {\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n const effectiveMesh = subMesh.getEffectiveMesh();\r\n const scene = this._scene;\r\n const engine = scene.getEngine();\r\n const material = <any>subMesh.getMaterial();\r\n\r\n if (!material) {\r\n return;\r\n }\r\n\r\n effectiveMesh._internalAbstractMeshDataInfo._isActiveIntermediate = false;\r\n\r\n // Velocity\r\n if ((this._enableVelocity || this._enableVelocityLinear) && !this._previousTransformationMatrices[effectiveMesh.uniqueId]) {\r\n this._previousTransformationMatrices[effectiveMesh.uniqueId] = {\r\n world: Matrix.Identity(),\r\n viewProjection: scene.getTransformMatrix(),\r\n };\r\n\r\n if (renderingMesh.skeleton) {\r\n const bonesTransformations = renderingMesh.skeleton.getTransformMatrices(renderingMesh);\r\n this._previousBonesTransformationMatrices[renderingMesh.uniqueId] = this._copyBonesTransformationMatrices(\r\n bonesTransformations,\r\n new Float32Array(bonesTransformations.length)\r\n );\r\n }\r\n }\r\n\r\n // Managing instances\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n\r\n if (batch.mustReturn) {\r\n return;\r\n }\r\n\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n const world = effectiveMesh.getWorldMatrix();\r\n\r\n if (this.isReady(subMesh, hardwareInstancedRendering)) {\r\n const drawWrapper = subMesh._getDrawWrapper();\r\n\r\n if (!drawWrapper) {\r\n return;\r\n }\r\n\r\n const effect = drawWrapper.effect!;\r\n\r\n engine.enableEffect(drawWrapper);\r\n if (!hardwareInstancedRendering) {\r\n renderingMesh._bind(subMesh, effect, material.fillMode);\r\n }\r\n\r\n if (!this._useUbo) {\r\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n effect.setMatrix(\"view\", scene.getViewMatrix());\r\n } else {\r\n BindSceneUniformBuffer(effect, this._scene.getSceneUniformBuffer());\r\n this._scene.finalizeSceneUbo();\r\n }\r\n\r\n let sideOrientation: Nullable<number>;\r\n const instanceDataStorage = renderingMesh._instanceDataStorage;\r\n\r\n if (!instanceDataStorage.isFrozen && (material.backFaceCulling || material.sideOrientation !== null)) {\r\n const mainDeterminant = effectiveMesh._getWorldMatrixDeterminant();\r\n sideOrientation = material._getEffectiveOrientation(renderingMesh);\r\n\r\n if (mainDeterminant < 0) {\r\n sideOrientation = sideOrientation === Material.ClockWiseSideOrientation ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;\r\n }\r\n } else {\r\n sideOrientation = renderingMesh._effectiveSideOrientation;\r\n }\r\n\r\n material._preBind(drawWrapper, sideOrientation);\r\n\r\n // Alpha test\r\n if (material.needAlphaTestingForMesh(effectiveMesh)) {\r\n const alphaTexture = material.getAlphaTestTexture();\r\n if (alphaTexture) {\r\n effect.setTexture(\"diffuseSampler\", alphaTexture);\r\n effect.setMatrix(\"diffuseMatrix\", alphaTexture.getTextureMatrix());\r\n }\r\n }\r\n\r\n // Bump\r\n if ((material.bumpTexture || material.normalTexture) && scene.getEngine().getCaps().standardDerivatives && MaterialFlags.BumpTextureEnabled) {\r\n const texture = material.bumpTexture || material.normalTexture;\r\n effect.setFloat3(\"vBumpInfos\", texture.coordinatesIndex, 1.0 / texture.level, material.parallaxScaleBias);\r\n effect.setMatrix(\"bumpMatrix\", texture.getTextureMatrix());\r\n effect.setTexture(\"bumpSampler\", texture);\r\n effect.setFloat2(\"vTangentSpaceParams\", material.invertNormalMapX ? -1.0 : 1.0, material.invertNormalMapY ? -1.0 : 1.0);\r\n }\r\n\r\n // Reflectivity\r\n if (this._enableReflectivity) {\r\n // for PBR materials: cf. https://doc.babylonjs.com/features/featuresDeepDive/materials/using/masterPBR\r\n if (material.getClassName() === \"PBRMetallicRoughnessMaterial\") {\r\n // if it is a PBR material in MetallicRoughness Mode:\r\n if (material.metallicRoughnessTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.metallicRoughnessTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.metallicRoughnessTexture.getTextureMatrix());\r\n }\r\n if (material.metallic !== null) {\r\n effect.setFloat(\"metallic\", material.metallic);\r\n }\r\n if (material.roughness !== null) {\r\n effect.setFloat(\"glossiness\", 1.0 - material.roughness);\r\n }\r\n if (material.baseTexture !== null) {\r\n effect.setTexture(\"albedoSampler\", material.baseTexture);\r\n effect.setMatrix(\"albedoMatrix\", material.baseTexture.getTextureMatrix());\r\n }\r\n if (material.baseColor !== null) {\r\n effect.setColor3(\"albedoColor\", material.baseColor);\r\n }\r\n } else if (material.getClassName() === \"PBRSpecularGlossinessMaterial\") {\r\n // if it is a PBR material in Specular/Glossiness Mode:\r\n if (material.specularGlossinessTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.specularGlossinessTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.specularGlossinessTexture.getTextureMatrix());\r\n } else {\r\n if (material.specularColor !== null) {\r\n effect.setColor3(\"reflectivityColor\", material.specularColor);\r\n }\r\n }\r\n if (material.glossiness !== null) {\r\n effect.setFloat(\"glossiness\", material.glossiness);\r\n }\r\n } else if (material.getClassName() === \"PBRMaterial\") {\r\n // if it is the bigger PBRMaterial\r\n if (material.metallicTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.metallicTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.metallicTexture.getTextureMatrix());\r\n }\r\n if (material.metallic !== null) {\r\n effect.setFloat(\"metallic\", material.metallic);\r\n }\r\n\r\n if (material.roughness !== null) {\r\n effect.setFloat(\"glossiness\", 1.0 - material.roughness);\r\n }\r\n\r\n if (material.roughness !== null || material.metallic !== null || material.metallicTexture !== null) {\r\n // MetallicRoughness Model\r\n if (material.albedoTexture !== null) {\r\n effect.setTexture(\"albedoSampler\", material.albedoTexture);\r\n effect.setMatrix(\"albedoMatrix\", material.albedoTexture.getTextureMatrix());\r\n }\r\n if (material.albedoColor !== null) {\r\n effect.setColor3(\"albedoColor\", material.albedoColor);\r\n }\r\n } else {\r\n // SpecularGlossiness Model\r\n if (material.reflectivityTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.reflectivityTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.reflectivityTexture.getTextureMatrix());\r\n } else if (material.reflectivityColor !== null) {\r\n effect.setColor3(\"reflectivityColor\", material.reflectivityColor);\r\n }\r\n if (material.microSurface !== null) {\r\n effect.setFloat(\"glossiness\", material.microSurface);\r\n }\r\n }\r\n } else if (material.getClassName() === \"StandardMaterial\") {\r\n // if StandardMaterial:\r\n if (material.specularTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.specularTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.specularTexture.getTextureMatrix());\r\n }\r\n if (material.specularColor !== null) {\r\n effect.setColor3(\"reflectivityColor\", material.specularColor);\r\n }\r\n }\r\n }\r\n\r\n // Clip plane\r\n BindClipPlane(effect, material, this._scene);\r\n\r\n // Bones\r\n if (renderingMesh.useBones && renderingMesh.computeBonesUsingShaders && renderingMesh.skeleton) {\r\n const skeleton = renderingMesh.skeleton;\r\n\r\n if (skeleton.isUsingTextureForMatrices && effect.getUniformIndex(\"boneTextureWidth\") > -1) {\r\n const boneTexture = skeleton.getTransformMatrixTexture(renderingMesh);\r\n effect.setTexture(\"boneSampler\", boneTexture);\r\n effect.setFloat(\"boneTextureWidth\", 4.0 * (skeleton.bones.length + 1));\r\n } else {\r\n effect.setMatrices(\"mBones\", renderingMesh.skeleton.getTransformMatrices(renderingMesh));\r\n }\r\n\r\n if (this._enableVelocity || this._enableVelocityLinear) {\r\n effect.setMatrices(\"mPreviousBones\", this._previousBonesTransformationMatrices[renderingMesh.uniqueId]);\r\n }\r\n }\r\n\r\n // Morph targets\r\n BindMorphTargetParameters(renderingMesh, effect);\r\n if (renderingMesh.morphTargetManager && renderingMesh.morphTargetManager.isUsingTextureForTargets) {\r\n renderingMesh.morphTargetManager._bind(effect);\r\n }\r\n\r\n // Velocity\r\n if (this._enableVelocity || this._enableVelocityLinear) {\r\n effect.setMatrix(\"previousWorld\", this._previousTransformationMatrices[effectiveMesh.uniqueId].world);\r\n effect.setMatrix(\"previousViewProjection\", this._previousTransformationMatrices[effectiveMesh.uniqueId].viewProjection);\r\n }\r\n\r\n if (hardwareInstancedRendering && renderingMesh.hasThinInstances) {\r\n effect.setMatrix(\"world\", world);\r\n }\r\n\r\n // Draw\r\n renderingMesh._processRendering(effectiveMesh, subMesh, effect, material.fillMode, batch, hardwareInstancedRendering, (isInstance, w) => {\r\n if (!isInstance) {\r\n effect.setMatrix(\"world\", w);\r\n }\r\n });\r\n }\r\n\r\n // Velocity\r\n if (this._enableVelocity || this._enableVelocityLinear) {\r\n this._previousTransformationMatrices[effectiveMesh.uniqueId].world = world.clone();\r\n this._previousTransformationMatrices[effectiveMesh.uniqueId].viewProjection = this._scene.getTransformMatrix().clone();\r\n if (renderingMesh.skeleton) {\r\n this._copyBonesTransformationMatrices(\r\n renderingMesh.skeleton.getTransformMatrices(renderingMesh),\r\n this._previousBonesTransformationMatrices[effectiveMesh.uniqueId]\r\n );\r\n }\r\n }\r\n };\r\n\r\n this._multiRenderTarget.customIsReadyFunction = (mesh: AbstractMesh, refreshRate: number, preWarm?: boolean) => {\r\n if ((preWarm || refreshRate === 0) && mesh.subMeshes) {\r\n for (let i = 0; i < mesh.subMeshes.length; ++i) {\r\n const subMesh = mesh.subMeshes[i];\r\n const material = subMesh.getMaterial();\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n\r\n if (!material) {\r\n continue;\r\n }\r\n\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n\r\n if (!this.isReady(subMesh, hardwareInstancedRendering)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n this._multiRenderTarget.customRenderFunction = (\r\n opaqueSubMeshes: SmartArray<SubMesh>,\r\n alphaTestSubMeshes: SmartArray<SubMesh>,\r\n transparentSubMeshes: SmartArray<SubMesh>,\r\n depthOnlySubMeshes: SmartArray<SubMesh>\r\n ): void => {\r\n let index;\r\n\r\n if (this._linkedWithPrePass) {\r\n if (!this._prePassRenderer.enabled) {\r\n return;\r\n }\r\n this._scene.getEngine().bindAttachments(this._attachmentsFromPrePass);\r\n }\r\n\r\n if (depthOnlySubMeshes.length) {\r\n engine.setColorWrite(false);\r\n for (index = 0; index < depthOnlySubMeshes.length; index++) {\r\n renderSubMesh(depthOnlySubMeshes.data[index]);\r\n }\r\n engine.setColorWrite(true);\r\n }\r\n\r\n for (index = 0; index < opaqueSubMeshes.length; index++) {\r\n renderSubMesh(opaqueSubMeshes.data[index]);\r\n }\r\n\r\n engine.setDepthWrite(false);\r\n for (index = 0; index < alphaTestSubMeshes.length; index++) {\r\n renderSubMesh(alphaTestSubMeshes.data[index]);\r\n }\r\n\r\n if (this.renderTransparentMeshes) {\r\n for (index = 0; index < transparentSubMeshes.length; index++) {\r\n renderSubMesh(transparentSubMeshes.data[index]);\r\n }\r\n }\r\n engine.setDepthWrite(true);\r\n };\r\n }\r\n\r\n // Copies the bones transformation matrices into the target array and returns the target's reference\r\n private _copyBonesTransformationMatrices(source: Float32Array, target: Float32Array): Float32Array {\r\n for (let i = 0; i < source.length; i++) {\r\n target[i] = source[i];\r\n }\r\n\r\n return target;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"geometryBufferRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Rendering/geometryBufferRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix } from \"../Maths/math.vector\";\r\nimport { VertexBuffer } from \"../Buffers/buffer\";\r\nimport type { SubMesh } from \"../Meshes/subMesh\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport type { SmartArray } from \"../Misc/smartArray\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport type { InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { MultiRenderTarget } from \"../Materials/Textures/multiRenderTarget\";\r\nimport type { PrePassRenderer } from \"../Rendering/prePassRenderer\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport { _WarnImport } from \"../Misc/devTools\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport type { Nullable } from \"../types\";\r\nimport { Material } from \"../Materials/material\";\r\n\r\nimport \"../Shaders/geometry.fragment\";\r\nimport \"../Shaders/geometry.vertex\";\r\nimport { MaterialFlags } from \"../Materials/materialFlags\";\r\nimport { AddClipPlaneUniforms, BindClipPlane, PrepareStringDefinesForClipPlanes } from \"../Materials/clipPlaneMaterialHelper\";\r\nimport { BindMorphTargetParameters, BindSceneUniformBuffer, PrepareDefinesAndAttributesForMorphTargets, PushAttributesForInstances } from \"../Materials/materialHelper.functions\";\r\n\r\nimport \"../Engines/Extensions/engine.multiRender\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\n\r\n/** @internal */\r\ninterface ISavedTransformationMatrix {\r\n world: Matrix;\r\n viewProjection: Matrix;\r\n}\r\n\r\n/** list the uniforms used by the geometry renderer */\r\nconst Uniforms = [\r\n \"world\",\r\n \"mBones\",\r\n \"viewProjection\",\r\n \"diffuseMatrix\",\r\n \"view\",\r\n \"previousWorld\",\r\n \"previousViewProjection\",\r\n \"mPreviousBones\",\r\n \"bumpMatrix\",\r\n \"reflectivityMatrix\",\r\n \"albedoMatrix\",\r\n \"reflectivityColor\",\r\n \"albedoColor\",\r\n \"metallic\",\r\n \"glossiness\",\r\n \"vTangentSpaceParams\",\r\n \"vBumpInfos\",\r\n \"morphTargetInfluences\",\r\n \"morphTargetCount\",\r\n \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\r\n \"boneTextureWidth\",\r\n];\r\nAddClipPlaneUniforms(Uniforms);\r\n\r\n/**\r\n * This renderer is helpful to fill one of the render target with a geometry buffer.\r\n */\r\nexport class GeometryBufferRenderer {\r\n /**\r\n * Force all the standard materials to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n /**\r\n * Constant used to retrieve the depth texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.DEPTH_TEXTURE_INDEX)\r\n */\r\n public static readonly DEPTH_TEXTURE_TYPE = 0;\r\n /**\r\n * Constant used to retrieve the normal texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.NORMAL_TEXTURE_INDEX)\r\n */\r\n public static readonly NORMAL_TEXTURE_TYPE = 1;\r\n /**\r\n * Constant used to retrieve the position texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.POSITION_TEXTURE_INDEX)\r\n */\r\n public static readonly POSITION_TEXTURE_TYPE = 2;\r\n /**\r\n * Constant used to retrieve the velocity texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.VELOCITY_TEXTURE_INDEX)\r\n */\r\n public static readonly VELOCITY_TEXTURE_TYPE = 3;\r\n /**\r\n * Constant used to retrieve the reflectivity texture index in the G-Buffer textures array\r\n * using the getIndex(GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE)\r\n */\r\n public static readonly REFLECTIVITY_TEXTURE_TYPE = 4;\r\n\r\n /**\r\n * Constant used to retrieve the screen-space depth texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE)\r\n */\r\n public static readonly SCREENSPACE_DEPTH_TEXTURE_TYPE = 5;\r\n\r\n /**\r\n * Constant used to retrieve the linear velocity texture index in the G-Buffer textures array\r\n * using getIndex(GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE)\r\n */\r\n public static readonly VELOCITY_LINEAR_TEXTURE_TYPE = 6;\r\n\r\n /**\r\n * Dictionary used to store the previous transformation matrices of each rendered mesh\r\n * in order to compute objects velocities when enableVelocity is set to \"true\"\r\n * @internal\r\n */\r\n public _previousTransformationMatrices: { [index: number]: ISavedTransformationMatrix } = {};\r\n /**\r\n * Dictionary used to store the previous bones transformation matrices of each rendered mesh\r\n * in order to compute objects velocities when enableVelocity is set to \"true\"\r\n * @internal\r\n */\r\n public _previousBonesTransformationMatrices: { [index: number]: Float32Array } = {};\r\n /**\r\n * Array used to store the ignored skinned meshes while computing velocity map (typically used by the motion blur post-process).\r\n * Avoids computing bones velocities and computes only mesh's velocity itself (position, rotation, scaling).\r\n */\r\n public excludedSkinnedMeshesFromVelocity: AbstractMesh[] = [];\r\n\r\n /** Gets or sets a boolean indicating if transparent meshes should be rendered */\r\n public renderTransparentMeshes = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if normals should be generated in world space (default: false, meaning normals are generated in view space)\r\n */\r\n public generateNormalsInWorldSpace = false;\r\n\r\n private _normalsAreUnsigned = false;\r\n\r\n /**\r\n * Gets a boolean indicating if normals are encoded in the [0,1] range in the render target. If true, you should do `normal = normal_rt * 2.0 - 1.0` to get the right normal\r\n */\r\n public get normalsAreUnsigned() {\r\n return this._normalsAreUnsigned;\r\n }\r\n\r\n private _scene: Scene;\r\n private _resizeObserver: Nullable<Observer<AbstractEngine>> = null;\r\n private _multiRenderTarget: MultiRenderTarget;\r\n private _textureTypesAndFormats: { [key: number]: { textureType: number; textureFormat: number } };\r\n private _ratioOrDimensions: number | { width: number; height: number };\r\n private _enableDepth: boolean = true;\r\n private _enableNormal: boolean = true;\r\n private _enablePosition: boolean = false;\r\n private _enableVelocity: boolean = false;\r\n private _enableVelocityLinear: boolean = false;\r\n private _enableReflectivity: boolean = false;\r\n private _enableScreenspaceDepth: boolean = false;\r\n private _depthFormat: number;\r\n private _clearColor = new Color4(0, 0, 0, 0);\r\n private _clearDepthColor = new Color4(0, 0, 0, 1); // sets an invalid value by default - depth in the depth texture is view.z, so 0 is not possible because view.z can't be less than camera.minZ\r\n\r\n private _positionIndex: number = -1;\r\n private _velocityIndex: number = -1;\r\n private _velocityLinearIndex: number = -1;\r\n private _reflectivityIndex: number = -1;\r\n private _depthIndex: number = -1;\r\n private _normalIndex: number = -1;\r\n private _screenspaceDepthIndex: number = -1;\r\n\r\n private _linkedWithPrePass: boolean = false;\r\n private _prePassRenderer: PrePassRenderer;\r\n private _attachmentsFromPrePass: number[];\r\n private _useUbo: boolean;\r\n\r\n protected _cachedDefines: string;\r\n\r\n /**\r\n * @internal\r\n * Sets up internal structures to share outputs with PrePassRenderer\r\n * This method should only be called by the PrePassRenderer itself\r\n */\r\n public _linkPrePassRenderer(prePassRenderer: PrePassRenderer) {\r\n this._linkedWithPrePass = true;\r\n this._prePassRenderer = prePassRenderer;\r\n\r\n if (this._multiRenderTarget) {\r\n // prevents clearing of the RT since it's done by prepass\r\n this._multiRenderTarget.onClearObservable.clear();\r\n this._multiRenderTarget.onClearObservable.add(() => {\r\n // pass\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Separates internal structures from PrePassRenderer so the geometry buffer can now operate by itself.\r\n * This method should only be called by the PrePassRenderer itself\r\n */\r\n public _unlinkPrePassRenderer() {\r\n this._linkedWithPrePass = false;\r\n this._createRenderTargets();\r\n }\r\n\r\n /**\r\n * @internal\r\n * Resets the geometry buffer layout\r\n */\r\n public _resetLayout() {\r\n this._enableDepth = true;\r\n this._enableNormal = true;\r\n this._enablePosition = false;\r\n this._enableReflectivity = false;\r\n this._enableVelocity = false;\r\n this._enableVelocityLinear = false;\r\n this._enableScreenspaceDepth = false;\r\n this._attachmentsFromPrePass = [];\r\n }\r\n\r\n /**\r\n * @internal\r\n * Replaces a texture in the geometry buffer renderer\r\n * Useful when linking textures of the prepass renderer\r\n */\r\n public _forceTextureType(geometryBufferType: number, index: number) {\r\n if (geometryBufferType === GeometryBufferRenderer.POSITION_TEXTURE_TYPE) {\r\n this._positionIndex = index;\r\n this._enablePosition = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE) {\r\n this._velocityIndex = index;\r\n this._enableVelocity = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE) {\r\n this._velocityLinearIndex = index;\r\n this._enableVelocityLinear = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE) {\r\n this._reflectivityIndex = index;\r\n this._enableReflectivity = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.DEPTH_TEXTURE_TYPE) {\r\n this._depthIndex = index;\r\n this._enableDepth = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.NORMAL_TEXTURE_TYPE) {\r\n this._normalIndex = index;\r\n this._enableNormal = true;\r\n } else if (geometryBufferType === GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE) {\r\n this._screenspaceDepthIndex = index;\r\n this._enableScreenspaceDepth = true;\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n * Sets texture attachments\r\n * Useful when linking textures of the prepass renderer\r\n */\r\n public _setAttachments(attachments: number[]) {\r\n this._attachmentsFromPrePass = attachments;\r\n }\r\n\r\n /**\r\n * @internal\r\n * Replaces the first texture which is hard coded as a depth texture in the geometry buffer\r\n * Useful when linking textures of the prepass renderer\r\n */\r\n public _linkInternalTexture(internalTexture: InternalTexture) {\r\n this._multiRenderTarget.setInternalTexture(internalTexture, 0, false);\r\n }\r\n\r\n /**\r\n * Gets the render list (meshes to be rendered) used in the G buffer.\r\n */\r\n public get renderList() {\r\n return this._multiRenderTarget.renderList;\r\n }\r\n\r\n /**\r\n * Set the render list (meshes to be rendered) used in the G buffer.\r\n */\r\n public set renderList(meshes: Nullable<AbstractMesh[]>) {\r\n this._multiRenderTarget.renderList = meshes;\r\n }\r\n\r\n /**\r\n * Gets whether or not G buffer are supported by the running hardware.\r\n * This requires draw buffer supports\r\n */\r\n public get isSupported(): boolean {\r\n return this._multiRenderTarget.isSupported;\r\n }\r\n\r\n /**\r\n * Returns the index of the given texture type in the G-Buffer textures array\r\n * @param textureType The texture type constant. For example GeometryBufferRenderer.POSITION_TEXTURE_INDEX\r\n * @returns the index of the given texture type in the G-Buffer textures array\r\n */\r\n public getTextureIndex(textureType: number): number {\r\n switch (textureType) {\r\n case GeometryBufferRenderer.POSITION_TEXTURE_TYPE:\r\n return this._positionIndex;\r\n case GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE:\r\n return this._velocityIndex;\r\n case GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE:\r\n return this._velocityLinearIndex;\r\n case GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE:\r\n return this._reflectivityIndex;\r\n case GeometryBufferRenderer.DEPTH_TEXTURE_TYPE:\r\n return this._depthIndex;\r\n case GeometryBufferRenderer.NORMAL_TEXTURE_TYPE:\r\n return this._normalIndex;\r\n case GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE:\r\n return this._screenspaceDepthIndex;\r\n default:\r\n return -1;\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if object's depths are enabled for the G buffer.\r\n */\r\n public get enableDepth(): boolean {\r\n return this._enableDepth;\r\n }\r\n\r\n /**\r\n * Sets whether or not object's depths are enabled for the G buffer.\r\n */\r\n public set enableDepth(enable: boolean) {\r\n this._enableDepth = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if object's normals are enabled for the G buffer.\r\n */\r\n public get enableNormal(): boolean {\r\n return this._enableNormal;\r\n }\r\n\r\n /**\r\n * Sets whether or not object's normals are enabled for the G buffer.\r\n */\r\n public set enableNormal(enable: boolean) {\r\n this._enableNormal = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if objects positions are enabled for the G buffer.\r\n */\r\n public get enablePosition(): boolean {\r\n return this._enablePosition;\r\n }\r\n\r\n /**\r\n * Sets whether or not objects positions are enabled for the G buffer.\r\n */\r\n public set enablePosition(enable: boolean) {\r\n this._enablePosition = enable;\r\n\r\n // PrePass handles index and texture links\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if objects velocities are enabled for the G buffer.\r\n */\r\n public get enableVelocity(): boolean {\r\n return this._enableVelocity;\r\n }\r\n\r\n /**\r\n * Sets whether or not objects velocities are enabled for the G buffer.\r\n */\r\n public set enableVelocity(enable: boolean) {\r\n this._enableVelocity = enable;\r\n\r\n if (!enable) {\r\n this._previousTransformationMatrices = {};\r\n }\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n\r\n this._scene.needsPreviousWorldMatrices = enable;\r\n }\r\n\r\n /**\r\n * @returns a boolean indicating if object's linear velocities are enabled for the G buffer.\r\n */\r\n public get enableVelocityLinear(): boolean {\r\n return this._enableVelocityLinear;\r\n }\r\n\r\n /**\r\n * Sets whether or not object's linear velocities are enabled for the G buffer.\r\n */\r\n public set enableVelocityLinear(enable: boolean) {\r\n this._enableVelocityLinear = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating if objects reflectivity are enabled in the G buffer.\r\n */\r\n public get enableReflectivity(): boolean {\r\n return this._enableReflectivity;\r\n }\r\n\r\n /**\r\n * Sets whether or not objects reflectivity are enabled for the G buffer.\r\n * For Metallic-Roughness workflow with ORM texture, we assume that ORM texture is defined according to the default layout:\r\n * pbr.useRoughnessFromMetallicTextureAlpha = false;\r\n * pbr.useRoughnessFromMetallicTextureGreen = true;\r\n * pbr.useMetallnessFromMetallicTextureBlue = true;\r\n */\r\n public set enableReflectivity(enable: boolean) {\r\n this._enableReflectivity = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * Sets whether or not objects screenspace depth are enabled for the G buffer.\r\n */\r\n public get enableScreenspaceDepth(): boolean {\r\n return this._enableScreenspaceDepth;\r\n }\r\n\r\n public set enableScreenspaceDepth(enable: boolean) {\r\n this._enableScreenspaceDepth = enable;\r\n\r\n if (!this._linkedWithPrePass) {\r\n this.dispose();\r\n this._createRenderTargets();\r\n }\r\n }\r\n\r\n /**\r\n * If set to true (default: false), the depth texture will be cleared with the depth value corresponding to the far plane (1 in normal mode, 0 in reverse depth buffer mode)\r\n * If set to false, the depth texture is always cleared with 0.\r\n */\r\n public useSpecificClearForDepthTexture = false;\r\n\r\n /**\r\n * Gets the scene associated with the buffer.\r\n */\r\n public get scene(): Scene {\r\n return this._scene;\r\n }\r\n\r\n /**\r\n * Gets the ratio used by the buffer during its creation.\r\n * How big is the buffer related to the main canvas.\r\n */\r\n public get ratio(): number {\r\n return typeof this._ratioOrDimensions === \"object\" ? 1 : this._ratioOrDimensions;\r\n }\r\n\r\n /** Shader language used by the material */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this material.\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _SceneComponentInitialization: (scene: Scene) => void = (_) => {\r\n throw _WarnImport(\"GeometryBufferRendererSceneComponent\");\r\n };\r\n\r\n /**\r\n * Creates a new G Buffer for the scene\r\n * @param scene The scene the buffer belongs to\r\n * @param ratioOrDimensions How big is the buffer related to the main canvas (default: 1). You can also directly pass a width and height for the generated textures\r\n * @param depthFormat Format of the depth texture (default: Constants.TEXTUREFORMAT_DEPTH16)\r\n * @param textureTypesAndFormats The types and formats of textures to create as render targets. If not provided, all textures will be RGBA and float or half float, depending on the engine capabilities.\r\n */\r\n constructor(\r\n scene: Scene,\r\n ratioOrDimensions: number | { width: number; height: number } = 1,\r\n depthFormat = Constants.TEXTUREFORMAT_DEPTH16,\r\n textureTypesAndFormats?: { [key: number]: { textureType: number; textureFormat: number } }\r\n ) {\r\n this._scene = scene;\r\n this._ratioOrDimensions = ratioOrDimensions;\r\n this._useUbo = scene.getEngine().supportsUniformBuffers;\r\n this._depthFormat = depthFormat;\r\n this._textureTypesAndFormats = textureTypesAndFormats || {};\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync();\r\n\r\n GeometryBufferRenderer._SceneComponentInitialization(this._scene);\r\n\r\n // Render target\r\n this._createRenderTargets();\r\n }\r\n\r\n private _shadersLoaded = false;\r\n\r\n private async _initShaderSourceAsync() {\r\n const engine = this._scene.getEngine();\r\n\r\n if (engine.isWebGPU && !GeometryBufferRenderer.ForceGLSL) {\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n\r\n await Promise.all([import(\"../ShadersWGSL/geometry.vertex\"), import(\"../ShadersWGSL/geometry.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../Shaders/geometry.vertex\"), import(\"../Shaders/geometry.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n }\r\n\r\n /**\r\n * Checks whether everything is ready to render a submesh to the G buffer.\r\n * @param subMesh the submesh to check readiness for\r\n * @param useInstances is the mesh drawn using instance or not\r\n * @returns true if ready otherwise false\r\n */\r\n public isReady(subMesh: SubMesh, useInstances: boolean): boolean {\r\n if (!this._shadersLoaded) {\r\n return false;\r\n }\r\n\r\n const material = <any>subMesh.getMaterial();\r\n\r\n if (material && material.disableDepthWrite) {\r\n return false;\r\n }\r\n\r\n const defines = [];\r\n const attribs = [VertexBuffer.PositionKind, VertexBuffer.NormalKind];\r\n const mesh = subMesh.getMesh();\r\n\r\n let uv1 = false;\r\n let uv2 = false;\r\n const color = false;\r\n\r\n if (material) {\r\n let needUv = false;\r\n // Alpha test\r\n if (material.needAlphaTestingForMesh(mesh) && material.getAlphaTestTexture()) {\r\n defines.push(\"#define ALPHATEST\");\r\n defines.push(`#define ALPHATEST_UV${material.getAlphaTestTexture().coordinatesIndex + 1}`);\r\n needUv = true;\r\n }\r\n\r\n // Normal map texture\r\n if ((material.bumpTexture || material.normalTexture || material.geometryNormalTexture) && MaterialFlags.BumpTextureEnabled) {\r\n const texture = material.bumpTexture || material.normalTexture || material.geometryNormalTexture;\r\n defines.push(\"#define BUMP\");\r\n defines.push(`#define BUMP_UV${texture.coordinatesIndex + 1}`);\r\n needUv = true;\r\n }\r\n\r\n if (this._enableReflectivity) {\r\n let metallicWorkflow = false;\r\n // for PBR materials: cf. https://doc.babylonjs.com/features/featuresDeepDive/materials/using/masterPBR\r\n if (material.getClassName() === \"PBRMetallicRoughnessMaterial\") {\r\n // if it is a PBR material in MetallicRoughness Mode:\r\n if (material.metallicRoughnessTexture) {\r\n defines.push(\"#define ORMTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.metallicRoughnessTexture.coordinatesIndex + 1}`);\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n needUv = true;\r\n metallicWorkflow = true;\r\n }\r\n // null or undefined\r\n if (material.metallic != null) {\r\n defines.push(\"#define METALLIC\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n // null or undefined\r\n if (material.roughness != null) {\r\n defines.push(\"#define ROUGHNESS\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n if (metallicWorkflow) {\r\n if (material.baseTexture) {\r\n defines.push(\"#define ALBEDOTEXTURE\");\r\n defines.push(`#define ALBEDO_UV${material.baseTexture.coordinatesIndex + 1}`);\r\n if (material.baseTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAALBEDO\");\r\n }\r\n needUv = true;\r\n }\r\n if (material.baseColor) {\r\n defines.push(\"#define ALBEDOCOLOR\");\r\n }\r\n }\r\n } else if (material.getClassName() === \"PBRSpecularGlossinessMaterial\") {\r\n // if it is a PBR material in Specular/Glossiness Mode:\r\n if (material.specularGlossinessTexture) {\r\n defines.push(\"#define SPECULARGLOSSINESSTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.specularGlossinessTexture.coordinatesIndex + 1}`);\r\n needUv = true;\r\n if (material.specularGlossinessTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAREFLECTIVITYTEXTURE\");\r\n }\r\n } else {\r\n if (material.specularColor) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n }\r\n // null or undefined\r\n if (material.glossiness != null) {\r\n defines.push(\"#define GLOSSINESS\");\r\n }\r\n } else if (material.getClassName() === \"PBRMaterial\") {\r\n // if it is the bigger PBRMaterial\r\n if (material.metallicTexture) {\r\n defines.push(\"#define ORMTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.metallicTexture.coordinatesIndex + 1}`);\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n needUv = true;\r\n metallicWorkflow = true;\r\n }\r\n // null or undefined\r\n if (material.metallic != null) {\r\n defines.push(\"#define METALLIC\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n\r\n // null or undefined\r\n if (material.roughness != null) {\r\n defines.push(\"#define ROUGHNESS\");\r\n defines.push(\"#define METALLICWORKFLOW\");\r\n metallicWorkflow = true;\r\n }\r\n\r\n if (metallicWorkflow) {\r\n if (material.albedoTexture) {\r\n defines.push(\"#define ALBEDOTEXTURE\");\r\n defines.push(`#define ALBEDO_UV${material.albedoTexture.coordinatesIndex + 1}`);\r\n if (material.albedoTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAALBEDO\");\r\n }\r\n needUv = true;\r\n }\r\n if (material.albedoColor) {\r\n defines.push(\"#define ALBEDOCOLOR\");\r\n }\r\n } else {\r\n // SpecularGlossiness Model\r\n if (material.reflectivityTexture) {\r\n defines.push(\"#define SPECULARGLOSSINESSTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.reflectivityTexture.coordinatesIndex + 1}`);\r\n if (material.reflectivityTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAREFLECTIVITYTEXTURE\");\r\n }\r\n needUv = true;\r\n } else if (material.reflectivityColor) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n // null or undefined\r\n if (material.microSurface != null) {\r\n defines.push(\"#define GLOSSINESS\");\r\n }\r\n }\r\n } else if (material.getClassName() === \"StandardMaterial\") {\r\n // if StandardMaterial:\r\n if (material.specularTexture) {\r\n defines.push(\"#define REFLECTIVITYTEXTURE\");\r\n defines.push(`#define REFLECTIVITY_UV${material.specularTexture.coordinatesIndex + 1}`);\r\n if (material.specularTexture.gammaSpace) {\r\n defines.push(\"#define GAMMAREFLECTIVITYTEXTURE\");\r\n }\r\n needUv = true;\r\n }\r\n if (material.specularColor) {\r\n defines.push(\"#define REFLECTIVITYCOLOR\");\r\n }\r\n }\r\n }\r\n\r\n if (needUv) {\r\n defines.push(\"#define NEED_UV\");\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UVKind)) {\r\n attribs.push(VertexBuffer.UVKind);\r\n defines.push(\"#define UV1\");\r\n uv1 = true;\r\n }\r\n if (mesh.isVerticesDataPresent(VertexBuffer.UV2Kind)) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n defines.push(\"#define UV2\");\r\n uv2 = true;\r\n }\r\n }\r\n }\r\n\r\n // Buffers\r\n if (this._enableDepth) {\r\n defines.push(\"#define DEPTH\");\r\n defines.push(\"#define DEPTH_INDEX \" + this._depthIndex);\r\n }\r\n\r\n if (this._enableNormal) {\r\n defines.push(\"#define NORMAL\");\r\n defines.push(\"#define NORMAL_INDEX \" + this._normalIndex);\r\n }\r\n\r\n if (this._enablePosition) {\r\n defines.push(\"#define POSITION\");\r\n defines.push(\"#define POSITION_INDEX \" + this._positionIndex);\r\n }\r\n\r\n if (this._enableVelocity) {\r\n defines.push(\"#define VELOCITY\");\r\n defines.push(\"#define VELOCITY_INDEX \" + this._velocityIndex);\r\n if (this.excludedSkinnedMeshesFromVelocity.indexOf(mesh) === -1) {\r\n defines.push(\"#define BONES_VELOCITY_ENABLED\");\r\n }\r\n }\r\n\r\n if (this._enableVelocityLinear) {\r\n defines.push(\"#define VELOCITY_LINEAR\");\r\n defines.push(\"#define VELOCITY_LINEAR_INDEX \" + this._velocityLinearIndex);\r\n if (this.excludedSkinnedMeshesFromVelocity.indexOf(mesh) === -1) {\r\n defines.push(\"#define BONES_VELOCITY_ENABLED\");\r\n }\r\n }\r\n\r\n if (this._enableReflectivity) {\r\n defines.push(\"#define REFLECTIVITY\");\r\n defines.push(\"#define REFLECTIVITY_INDEX \" + this._reflectivityIndex);\r\n }\r\n\r\n if (this._enableScreenspaceDepth) {\r\n if (this._screenspaceDepthIndex !== -1) {\r\n defines.push(\"#define SCREENSPACE_DEPTH_INDEX \" + this._screenspaceDepthIndex);\r\n defines.push(\"#define SCREENSPACE_DEPTH\");\r\n }\r\n }\r\n\r\n if (this.generateNormalsInWorldSpace) {\r\n defines.push(\"#define NORMAL_WORLDSPACE\");\r\n }\r\n\r\n if (this._normalsAreUnsigned) {\r\n defines.push(\"#define ENCODE_NORMAL\");\r\n }\r\n\r\n // Bones\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n attribs.push(VertexBuffer.MatricesIndicesKind);\r\n attribs.push(VertexBuffer.MatricesWeightsKind);\r\n if (mesh.numBoneInfluencers > 4) {\r\n attribs.push(VertexBuffer.MatricesIndicesExtraKind);\r\n attribs.push(VertexBuffer.MatricesWeightsExtraKind);\r\n }\r\n defines.push(\"#define NUM_BONE_INFLUENCERS \" + mesh.numBoneInfluencers);\r\n defines.push(\"#define BONETEXTURE \" + mesh.skeleton.isUsingTextureForMatrices);\r\n defines.push(\"#define BonesPerMesh \" + (mesh.skeleton.bones.length + 1));\r\n } else {\r\n defines.push(\"#define NUM_BONE_INFLUENCERS 0\");\r\n defines.push(\"#define BONETEXTURE false\");\r\n defines.push(\"#define BonesPerMesh 0\");\r\n }\r\n\r\n // Morph targets\r\n const numMorphInfluencers = mesh.morphTargetManager\r\n ? PrepareDefinesAndAttributesForMorphTargets(\r\n mesh.morphTargetManager,\r\n defines,\r\n attribs,\r\n mesh,\r\n true, // usePositionMorph\r\n true, // useNormalMorph\r\n false, // useTangentMorph\r\n uv1, // useUVMorph\r\n uv2, // useUV2Morph\r\n color // useColorMorph\r\n )\r\n : 0;\r\n\r\n // Instances\r\n if (useInstances) {\r\n defines.push(\"#define INSTANCES\");\r\n PushAttributesForInstances(attribs, this._enableVelocity || this._enableVelocityLinear);\r\n if (subMesh.getRenderingMesh().hasThinInstances) {\r\n defines.push(\"#define THIN_INSTANCES\");\r\n }\r\n }\r\n\r\n // Setup textures count\r\n if (this._linkedWithPrePass) {\r\n defines.push(\"#define SCENE_MRT_COUNT \" + this._attachmentsFromPrePass.length);\r\n } else {\r\n defines.push(\"#define SCENE_MRT_COUNT \" + this._multiRenderTarget.textures.length);\r\n }\r\n\r\n PrepareStringDefinesForClipPlanes(material, this._scene, defines);\r\n\r\n // Get correct effect\r\n const engine = this._scene.getEngine();\r\n const drawWrapper = subMesh._getDrawWrapper(undefined, true)!;\r\n const cachedDefines = drawWrapper.defines;\r\n const join = defines.join(\"\\n\");\r\n if (cachedDefines !== join) {\r\n drawWrapper.setEffect(\r\n engine.createEffect(\r\n \"geometry\",\r\n {\r\n attributes: attribs,\r\n uniformsNames: Uniforms,\r\n samplers: [\"diffuseSampler\", \"bumpSampler\", \"reflectivitySampler\", \"albedoSampler\", \"morphTargets\", \"boneSampler\"],\r\n defines: join,\r\n onCompiled: null,\r\n fallbacks: null,\r\n onError: null,\r\n uniformBuffersNames: [\"Scene\"],\r\n indexParameters: { buffersCount: this._multiRenderTarget.textures.length - 1, maxSimultaneousMorphTargets: numMorphInfluencers },\r\n shaderLanguage: this.shaderLanguage,\r\n },\r\n engine\r\n ),\r\n join\r\n );\r\n }\r\n\r\n return drawWrapper.effect!.isReady();\r\n }\r\n\r\n /**\r\n * Gets the current underlying G Buffer.\r\n * @returns the buffer\r\n */\r\n public getGBuffer(): MultiRenderTarget {\r\n return this._multiRenderTarget;\r\n }\r\n\r\n /**\r\n * Gets the number of samples used to render the buffer (anti aliasing).\r\n */\r\n public get samples(): number {\r\n return this._multiRenderTarget.samples;\r\n }\r\n\r\n /**\r\n * Sets the number of samples used to render the buffer (anti aliasing).\r\n */\r\n public set samples(value: number) {\r\n this._multiRenderTarget.samples = value;\r\n }\r\n\r\n /**\r\n * Disposes the renderer and frees up associated resources.\r\n */\r\n public dispose(): void {\r\n if (this._resizeObserver) {\r\n const engine = this._scene.getEngine();\r\n engine.onResizeObservable.remove(this._resizeObserver);\r\n this._resizeObserver = null;\r\n }\r\n this.getGBuffer().dispose();\r\n }\r\n\r\n private _assignRenderTargetIndices(): [number, string[], Array<{ textureType: number; textureFormat: number } | undefined>] {\r\n const textureNames: string[] = [];\r\n const textureTypesAndFormats: Array<{ textureType: number; textureFormat: number } | undefined> = [];\r\n let count = 0;\r\n\r\n if (this._enableDepth) {\r\n this._depthIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Depth\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.DEPTH_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableNormal) {\r\n this._normalIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Normal\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enablePosition) {\r\n this._positionIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Position\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.POSITION_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableVelocity) {\r\n this._velocityIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Velocity\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.VELOCITY_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableVelocityLinear) {\r\n this._velocityLinearIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_VelocityLinear\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.VELOCITY_LINEAR_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableReflectivity) {\r\n this._reflectivityIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_Reflectivity\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.REFLECTIVITY_TEXTURE_TYPE]);\r\n }\r\n\r\n if (this._enableScreenspaceDepth) {\r\n this._screenspaceDepthIndex = count;\r\n count++;\r\n textureNames.push(\"gBuffer_ScreenspaceDepth\");\r\n textureTypesAndFormats.push(this._textureTypesAndFormats[GeometryBufferRenderer.SCREENSPACE_DEPTH_TEXTURE_TYPE]);\r\n }\r\n\r\n return [count, textureNames, textureTypesAndFormats];\r\n }\r\n\r\n protected _createRenderTargets(): void {\r\n const engine = this._scene.getEngine();\r\n const [count, textureNames, textureTypesAndFormat] = this._assignRenderTargetIndices();\r\n\r\n let type = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n if (engine._caps.textureFloat && engine._caps.textureFloatLinearFiltering) {\r\n type = Constants.TEXTURETYPE_FLOAT;\r\n } else if (engine._caps.textureHalfFloat && engine._caps.textureHalfFloatLinearFiltering) {\r\n type = Constants.TEXTURETYPE_HALF_FLOAT;\r\n }\r\n\r\n const dimensions =\r\n (this._ratioOrDimensions as any).width !== undefined\r\n ? (this._ratioOrDimensions as { width: number; height: number })\r\n : { width: engine.getRenderWidth() * (this._ratioOrDimensions as number), height: engine.getRenderHeight() * (this._ratioOrDimensions as number) };\r\n\r\n const textureTypes: number[] = [];\r\n const textureFormats: number[] = [];\r\n\r\n for (const typeAndFormat of textureTypesAndFormat) {\r\n if (typeAndFormat) {\r\n textureTypes.push(typeAndFormat.textureType);\r\n textureFormats.push(typeAndFormat.textureFormat);\r\n } else {\r\n textureTypes.push(type);\r\n textureFormats.push(Constants.TEXTUREFORMAT_RGBA);\r\n }\r\n }\r\n\r\n this._normalsAreUnsigned =\r\n textureTypes[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE] === Constants.TEXTURETYPE_UNSIGNED_INT_2_10_10_10_REV ||\r\n textureTypes[GeometryBufferRenderer.NORMAL_TEXTURE_TYPE] === Constants.TEXTURETYPE_UNSIGNED_INT_10F_11F_11F_REV;\r\n\r\n this._multiRenderTarget = new MultiRenderTarget(\r\n \"gBuffer\",\r\n dimensions,\r\n count,\r\n this._scene,\r\n { generateMipMaps: false, generateDepthTexture: true, types: textureTypes, formats: textureFormats, depthTextureFormat: this._depthFormat },\r\n textureNames.concat(\"gBuffer_DepthBuffer\")\r\n );\r\n if (!this.isSupported) {\r\n return;\r\n }\r\n this._multiRenderTarget.wrapU = Texture.CLAMP_ADDRESSMODE;\r\n this._multiRenderTarget.wrapV = Texture.CLAMP_ADDRESSMODE;\r\n this._multiRenderTarget.refreshRate = 1;\r\n this._multiRenderTarget.renderParticles = false;\r\n this._multiRenderTarget.renderList = null;\r\n\r\n // Depth is always the first texture in the geometry buffer renderer!\r\n const layoutAttachmentsAll = [true];\r\n const layoutAttachmentsAllButDepth = [false];\r\n const layoutAttachmentsDepthOnly = [true];\r\n\r\n for (let i = 1; i < count; ++i) {\r\n layoutAttachmentsAll.push(true);\r\n layoutAttachmentsDepthOnly.push(false);\r\n layoutAttachmentsAllButDepth.push(true);\r\n }\r\n\r\n const attachmentsAll = engine.buildTextureLayout(layoutAttachmentsAll);\r\n const attachmentsAllButDepth = engine.buildTextureLayout(layoutAttachmentsAllButDepth);\r\n const attachmentsDepthOnly = engine.buildTextureLayout(layoutAttachmentsDepthOnly);\r\n\r\n this._multiRenderTarget.onClearObservable.add((engine) => {\r\n engine.bindAttachments(this.useSpecificClearForDepthTexture ? attachmentsAllButDepth : attachmentsAll);\r\n engine.clear(this._clearColor, true, true, true);\r\n if (this.useSpecificClearForDepthTexture) {\r\n engine.bindAttachments(attachmentsDepthOnly);\r\n engine.clear(this._clearDepthColor, true, true, true);\r\n }\r\n engine.bindAttachments(attachmentsAll);\r\n });\r\n\r\n this._resizeObserver = engine.onResizeObservable.add(() => {\r\n if (this._multiRenderTarget) {\r\n const dimensions =\r\n (this._ratioOrDimensions as any).width !== undefined\r\n ? (this._ratioOrDimensions as { width: number; height: number })\r\n : { width: engine.getRenderWidth() * (this._ratioOrDimensions as number), height: engine.getRenderHeight() * (this._ratioOrDimensions as number) };\r\n this._multiRenderTarget.resize(dimensions);\r\n }\r\n });\r\n\r\n // Custom render function\r\n const renderSubMesh = (subMesh: SubMesh): void => {\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n const effectiveMesh = subMesh.getEffectiveMesh();\r\n const scene = this._scene;\r\n const engine = scene.getEngine();\r\n const material = <any>subMesh.getMaterial();\r\n\r\n if (!material) {\r\n return;\r\n }\r\n\r\n effectiveMesh._internalAbstractMeshDataInfo._isActiveIntermediate = false;\r\n\r\n // Velocity\r\n if ((this._enableVelocity || this._enableVelocityLinear) && !this._previousTransformationMatrices[effectiveMesh.uniqueId]) {\r\n this._previousTransformationMatrices[effectiveMesh.uniqueId] = {\r\n world: Matrix.Identity(),\r\n viewProjection: scene.getTransformMatrix(),\r\n };\r\n\r\n if (renderingMesh.skeleton) {\r\n const bonesTransformations = renderingMesh.skeleton.getTransformMatrices(renderingMesh);\r\n this._previousBonesTransformationMatrices[renderingMesh.uniqueId] = this._copyBonesTransformationMatrices(\r\n bonesTransformations,\r\n new Float32Array(bonesTransformations.length)\r\n );\r\n }\r\n }\r\n\r\n // Managing instances\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n\r\n if (batch.mustReturn) {\r\n return;\r\n }\r\n\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n const world = effectiveMesh.getWorldMatrix();\r\n\r\n if (this.isReady(subMesh, hardwareInstancedRendering)) {\r\n const drawWrapper = subMesh._getDrawWrapper();\r\n\r\n if (!drawWrapper) {\r\n return;\r\n }\r\n\r\n const effect = drawWrapper.effect!;\r\n\r\n engine.enableEffect(drawWrapper);\r\n if (!hardwareInstancedRendering) {\r\n renderingMesh._bind(subMesh, effect, material.fillMode);\r\n }\r\n\r\n if (!this._useUbo) {\r\n effect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n effect.setMatrix(\"view\", scene.getViewMatrix());\r\n } else {\r\n BindSceneUniformBuffer(effect, this._scene.getSceneUniformBuffer());\r\n this._scene.finalizeSceneUbo();\r\n }\r\n\r\n let sideOrientation: Nullable<number>;\r\n const instanceDataStorage = renderingMesh._instanceDataStorage;\r\n\r\n if (!instanceDataStorage.isFrozen && (material.backFaceCulling || material.sideOrientation !== null)) {\r\n const mainDeterminant = effectiveMesh._getWorldMatrixDeterminant();\r\n sideOrientation = material._getEffectiveOrientation(renderingMesh);\r\n\r\n if (mainDeterminant < 0) {\r\n sideOrientation = sideOrientation === Material.ClockWiseSideOrientation ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;\r\n }\r\n } else {\r\n sideOrientation = renderingMesh._effectiveSideOrientation;\r\n }\r\n\r\n material._preBind(drawWrapper, sideOrientation);\r\n\r\n // Alpha test\r\n if (material.needAlphaTestingForMesh(effectiveMesh)) {\r\n const alphaTexture = material.getAlphaTestTexture();\r\n if (alphaTexture) {\r\n effect.setTexture(\"diffuseSampler\", alphaTexture);\r\n effect.setMatrix(\"diffuseMatrix\", alphaTexture.getTextureMatrix());\r\n }\r\n }\r\n\r\n // Bump\r\n if (\r\n (material.bumpTexture || material.normalTexture || material.geometryNormalTexture) &&\r\n scene.getEngine().getCaps().standardDerivatives &&\r\n MaterialFlags.BumpTextureEnabled\r\n ) {\r\n const texture = material.bumpTexture || material.normalTexture || material.geometryNormalTexture;\r\n effect.setFloat3(\"vBumpInfos\", texture.coordinatesIndex, 1.0 / texture.level, material.parallaxScaleBias);\r\n effect.setMatrix(\"bumpMatrix\", texture.getTextureMatrix());\r\n effect.setTexture(\"bumpSampler\", texture);\r\n effect.setFloat2(\"vTangentSpaceParams\", material.invertNormalMapX ? -1.0 : 1.0, material.invertNormalMapY ? -1.0 : 1.0);\r\n }\r\n\r\n // Reflectivity\r\n if (this._enableReflectivity) {\r\n // for PBR materials: cf. https://doc.babylonjs.com/features/featuresDeepDive/materials/using/masterPBR\r\n if (material.getClassName() === \"PBRMetallicRoughnessMaterial\") {\r\n // if it is a PBR material in MetallicRoughness Mode:\r\n if (material.metallicRoughnessTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.metallicRoughnessTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.metallicRoughnessTexture.getTextureMatrix());\r\n }\r\n if (material.metallic !== null) {\r\n effect.setFloat(\"metallic\", material.metallic);\r\n }\r\n if (material.roughness !== null) {\r\n effect.setFloat(\"glossiness\", 1.0 - material.roughness);\r\n }\r\n if (material.baseTexture !== null) {\r\n effect.setTexture(\"albedoSampler\", material.baseTexture);\r\n effect.setMatrix(\"albedoMatrix\", material.baseTexture.getTextureMatrix());\r\n }\r\n if (material.baseColor !== null) {\r\n effect.setColor3(\"albedoColor\", material.baseColor);\r\n }\r\n } else if (material.getClassName() === \"PBRSpecularGlossinessMaterial\") {\r\n // if it is a PBR material in Specular/Glossiness Mode:\r\n if (material.specularGlossinessTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.specularGlossinessTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.specularGlossinessTexture.getTextureMatrix());\r\n } else {\r\n if (material.specularColor !== null) {\r\n effect.setColor3(\"reflectivityColor\", material.specularColor);\r\n }\r\n }\r\n if (material.glossiness !== null) {\r\n effect.setFloat(\"glossiness\", material.glossiness);\r\n }\r\n } else if (material.getClassName() === \"PBRMaterial\") {\r\n // if it is the bigger PBRMaterial\r\n if (material.metallicTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.metallicTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.metallicTexture.getTextureMatrix());\r\n }\r\n if (material.metallic !== null) {\r\n effect.setFloat(\"metallic\", material.metallic);\r\n }\r\n\r\n if (material.roughness !== null) {\r\n effect.setFloat(\"glossiness\", 1.0 - material.roughness);\r\n }\r\n\r\n if (material.roughness !== null || material.metallic !== null || material.metallicTexture !== null) {\r\n // MetallicRoughness Model\r\n if (material.albedoTexture !== null) {\r\n effect.setTexture(\"albedoSampler\", material.albedoTexture);\r\n effect.setMatrix(\"albedoMatrix\", material.albedoTexture.getTextureMatrix());\r\n }\r\n if (material.albedoColor !== null) {\r\n effect.setColor3(\"albedoColor\", material.albedoColor);\r\n }\r\n } else {\r\n // SpecularGlossiness Model\r\n if (material.reflectivityTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.reflectivityTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.reflectivityTexture.getTextureMatrix());\r\n } else if (material.reflectivityColor !== null) {\r\n effect.setColor3(\"reflectivityColor\", material.reflectivityColor);\r\n }\r\n if (material.microSurface !== null) {\r\n effect.setFloat(\"glossiness\", material.microSurface);\r\n }\r\n }\r\n } else if (material.getClassName() === \"StandardMaterial\") {\r\n // if StandardMaterial:\r\n if (material.specularTexture !== null) {\r\n effect.setTexture(\"reflectivitySampler\", material.specularTexture);\r\n effect.setMatrix(\"reflectivityMatrix\", material.specularTexture.getTextureMatrix());\r\n }\r\n if (material.specularColor !== null) {\r\n effect.setColor3(\"reflectivityColor\", material.specularColor);\r\n }\r\n }\r\n }\r\n\r\n // Clip plane\r\n BindClipPlane(effect, material, this._scene);\r\n\r\n // Bones\r\n if (renderingMesh.useBones && renderingMesh.computeBonesUsingShaders && renderingMesh.skeleton) {\r\n const skeleton = renderingMesh.skeleton;\r\n\r\n if (skeleton.isUsingTextureForMatrices && effect.getUniformIndex(\"boneTextureWidth\") > -1) {\r\n const boneTexture = skeleton.getTransformMatrixTexture(renderingMesh);\r\n effect.setTexture(\"boneSampler\", boneTexture);\r\n effect.setFloat(\"boneTextureWidth\", 4.0 * (skeleton.bones.length + 1));\r\n } else {\r\n effect.setMatrices(\"mBones\", renderingMesh.skeleton.getTransformMatrices(renderingMesh));\r\n }\r\n\r\n if (this._enableVelocity || this._enableVelocityLinear) {\r\n effect.setMatrices(\"mPreviousBones\", this._previousBonesTransformationMatrices[renderingMesh.uniqueId]);\r\n }\r\n }\r\n\r\n // Morph targets\r\n BindMorphTargetParameters(renderingMesh, effect);\r\n if (renderingMesh.morphTargetManager && renderingMesh.morphTargetManager.isUsingTextureForTargets) {\r\n renderingMesh.morphTargetManager._bind(effect);\r\n }\r\n\r\n // Velocity\r\n if (this._enableVelocity || this._enableVelocityLinear) {\r\n effect.setMatrix(\"previousWorld\", this._previousTransformationMatrices[effectiveMesh.uniqueId].world);\r\n effect.setMatrix(\"previousViewProjection\", this._previousTransformationMatrices[effectiveMesh.uniqueId].viewProjection);\r\n }\r\n\r\n if (hardwareInstancedRendering && renderingMesh.hasThinInstances) {\r\n effect.setMatrix(\"world\", world);\r\n }\r\n\r\n // Draw\r\n renderingMesh._processRendering(effectiveMesh, subMesh, effect, material.fillMode, batch, hardwareInstancedRendering, (isInstance, w) => {\r\n if (!isInstance) {\r\n effect.setMatrix(\"world\", w);\r\n }\r\n });\r\n }\r\n\r\n // Velocity\r\n if (this._enableVelocity || this._enableVelocityLinear) {\r\n this._previousTransformationMatrices[effectiveMesh.uniqueId].world = world.clone();\r\n this._previousTransformationMatrices[effectiveMesh.uniqueId].viewProjection = this._scene.getTransformMatrix().clone();\r\n if (renderingMesh.skeleton) {\r\n this._copyBonesTransformationMatrices(\r\n renderingMesh.skeleton.getTransformMatrices(renderingMesh),\r\n this._previousBonesTransformationMatrices[effectiveMesh.uniqueId]\r\n );\r\n }\r\n }\r\n };\r\n\r\n this._multiRenderTarget.customIsReadyFunction = (mesh: AbstractMesh, refreshRate: number, preWarm?: boolean) => {\r\n if ((preWarm || refreshRate === 0) && mesh.subMeshes) {\r\n for (let i = 0; i < mesh.subMeshes.length; ++i) {\r\n const subMesh = mesh.subMeshes[i];\r\n const material = subMesh.getMaterial();\r\n const renderingMesh = subMesh.getRenderingMesh();\r\n\r\n if (!material) {\r\n continue;\r\n }\r\n\r\n const batch = renderingMesh._getInstancesRenderList(subMesh._id, !!subMesh.getReplacementMesh());\r\n const hardwareInstancedRendering = engine.getCaps().instancedArrays && (batch.visibleInstances[subMesh._id] !== null || renderingMesh.hasThinInstances);\r\n\r\n if (!this.isReady(subMesh, hardwareInstancedRendering)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n this._multiRenderTarget.customRenderFunction = (\r\n opaqueSubMeshes: SmartArray<SubMesh>,\r\n alphaTestSubMeshes: SmartArray<SubMesh>,\r\n transparentSubMeshes: SmartArray<SubMesh>,\r\n depthOnlySubMeshes: SmartArray<SubMesh>\r\n ): void => {\r\n let index;\r\n\r\n if (this._linkedWithPrePass) {\r\n if (!this._prePassRenderer.enabled) {\r\n return;\r\n }\r\n this._scene.getEngine().bindAttachments(this._attachmentsFromPrePass);\r\n }\r\n\r\n if (depthOnlySubMeshes.length) {\r\n engine.setColorWrite(false);\r\n for (index = 0; index < depthOnlySubMeshes.length; index++) {\r\n renderSubMesh(depthOnlySubMeshes.data[index]);\r\n }\r\n engine.setColorWrite(true);\r\n }\r\n\r\n for (index = 0; index < opaqueSubMeshes.length; index++) {\r\n renderSubMesh(opaqueSubMeshes.data[index]);\r\n }\r\n\r\n engine.setDepthWrite(false);\r\n for (index = 0; index < alphaTestSubMeshes.length; index++) {\r\n renderSubMesh(alphaTestSubMeshes.data[index]);\r\n }\r\n\r\n if (this.renderTransparentMeshes) {\r\n for (index = 0; index < transparentSubMeshes.length; index++) {\r\n renderSubMesh(transparentSubMeshes.data[index]);\r\n }\r\n }\r\n engine.setDepthWrite(true);\r\n };\r\n }\r\n\r\n // Copies the bones transformation matrices into the target array and returns the target's reference\r\n private _copyBonesTransformationMatrices(source: Float32Array, target: Float32Array): Float32Array {\r\n for (let i = 0; i < source.length; i++) {\r\n target[i] = source[i];\r\n }\r\n\r\n return target;\r\n }\r\n}\r\n"]}
@@ -32,15 +32,15 @@ export declare class ReflectiveShadowMap {
32
32
  /**
33
33
  * Gets the position texture generated by the RSM process.
34
34
  */
35
- get positionWorldTexture(): import("..").Texture;
35
+ get positionWorldTexture(): import("../index.js").Texture;
36
36
  /**
37
37
  * Gets the normal texture generated by the RSM process.
38
38
  */
39
- get normalWorldTexture(): import("..").Texture;
39
+ get normalWorldTexture(): import("../index.js").Texture;
40
40
  /**
41
41
  * Gets the flux texture generated by the RSM process.
42
42
  */
43
- get fluxTexture(): import("..").Texture;
43
+ get fluxTexture(): import("../index.js").Texture;
44
44
  /**
45
45
  * Gets the render list used to generate the RSM textures.
46
46
  */
@@ -3,7 +3,7 @@ import { ShaderStore } from "../../Engines/shaderStore.js";
3
3
  import "./sceneUboDeclaration.js";
4
4
  const name = "backgroundUboDeclaration";
5
5
  const shader = `layout(std140,column_major) uniform;uniform Material
6
- {uniform vec4 vPrimaryColor;uniform vec4 vPrimaryColorShadow;uniform vec2 vDiffuseInfos;uniform vec2 vReflectionInfos;uniform mat4 diffuseMatrix;uniform mat4 reflectionMatrix;uniform vec3 vReflectionMicrosurfaceInfos;uniform float fFovMultiplier;uniform float pointSize;uniform float shadowLevel;uniform float alpha;uniform vec3 vBackgroundCenter;uniform vec4 vReflectionControl;uniform vec2 projectedGroundInfos;};
6
+ {uniform vec4 vPrimaryColor;uniform vec4 vPrimaryColorShadow;uniform vec2 vDiffuseInfos;uniform mat4 diffuseMatrix;uniform float fFovMultiplier;uniform float pointSize;uniform float shadowLevel;uniform float alpha;uniform vec3 vBackgroundCenter;uniform vec4 vReflectionControl;uniform vec2 projectedGroundInfos;uniform vec2 vReflectionInfos;uniform mat4 reflectionMatrix;uniform vec3 vReflectionMicrosurfaceInfos;};
7
7
  #include<sceneUboDeclaration>
8
8
  `;
9
9
  // Sideeffect
@@ -1 +1 @@
1
- {"version":3,"file":"backgroundUboDeclaration.js","sourceRoot":"","sources":["../../../../../dev/core/src/Shaders/ShadersInclude/backgroundUboDeclaration.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,uBAAuB,CAAC;AAE/B,MAAM,IAAI,GAAG,0BAA0B,CAAC;AACxC,MAAM,MAAM,GAAG;;;CAGd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1C,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACpD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\nimport \"./sceneUboDeclaration\";\n\nconst name = \"backgroundUboDeclaration\";\nconst shader = `layout(std140,column_major) uniform;uniform Material\n{uniform vec4 vPrimaryColor;uniform vec4 vPrimaryColorShadow;uniform vec2 vDiffuseInfos;uniform vec2 vReflectionInfos;uniform mat4 diffuseMatrix;uniform mat4 reflectionMatrix;uniform vec3 vReflectionMicrosurfaceInfos;uniform float fFovMultiplier;uniform float pointSize;uniform float shadowLevel;uniform float alpha;uniform vec3 vBackgroundCenter;uniform vec4 vReflectionControl;uniform vec2 projectedGroundInfos;};\n#include<sceneUboDeclaration>\n`;\n// Sideeffect\nif (!ShaderStore.IncludesShadersStore[name]) {\n ShaderStore.IncludesShadersStore[name] = shader;\n}\n/** @internal */\nexport const backgroundUboDeclaration = { name, shader };\n"]}
1
+ {"version":3,"file":"backgroundUboDeclaration.js","sourceRoot":"","sources":["../../../../../dev/core/src/Shaders/ShadersInclude/backgroundUboDeclaration.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,uBAAuB,CAAC;AAE/B,MAAM,IAAI,GAAG,0BAA0B,CAAC;AACxC,MAAM,MAAM,GAAG;;;CAGd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1C,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACpD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\nimport \"./sceneUboDeclaration\";\n\nconst name = \"backgroundUboDeclaration\";\nconst shader = `layout(std140,column_major) uniform;uniform Material\n{uniform vec4 vPrimaryColor;uniform vec4 vPrimaryColorShadow;uniform vec2 vDiffuseInfos;uniform mat4 diffuseMatrix;uniform float fFovMultiplier;uniform float pointSize;uniform float shadowLevel;uniform float alpha;uniform vec3 vBackgroundCenter;uniform vec4 vReflectionControl;uniform vec2 projectedGroundInfos;uniform vec2 vReflectionInfos;uniform mat4 reflectionMatrix;uniform vec3 vReflectionMicrosurfaceInfos;};\n#include<sceneUboDeclaration>\n`;\n// Sideeffect\nif (!ShaderStore.IncludesShadersStore[name]) {\n ShaderStore.IncludesShadersStore[name] = shader;\n}\n/** @internal */\nexport const backgroundUboDeclaration = { name, shader };\n"]}
@@ -1,7 +1,9 @@
1
1
  // Do not edit.
2
2
  import { ShaderStore } from "../../Engines/shaderStore.js";
3
3
  const name = "clusteredLightingFunctions";
4
- const shader = `struct ClusteredLight {vec4 vLightData;vec4 vLightDiffuse;vec4 vLightSpecular;vec4 vLightDirection;vec4 vLightFalloff;};ClusteredLight getClusteredLight(sampler2D lightDataTexture,int index) {return ClusteredLight(
4
+ const shader = `struct ClusteredLight {vec4 vLightData;vec4 vLightDiffuse;vec4 vLightSpecular;vec4 vLightDirection;vec4 vLightFalloff;};
5
+ #define inline
6
+ ClusteredLight getClusteredLight(sampler2D lightDataTexture,int index) {return ClusteredLight(
5
7
  texelFetch(lightDataTexture,ivec2(0,index),0),
6
8
  texelFetch(lightDataTexture,ivec2(1,index),0),
7
9
  texelFetch(lightDataTexture,ivec2(2,index),0),
@@ -1 +1 @@
1
- {"version":3,"file":"clusteredLightingFunctions.js","sourceRoot":"","sources":["../../../../../dev/core/src/Shaders/ShadersInclude/clusteredLightingFunctions.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,IAAI,GAAG,4BAA4B,CAAC;AAC1C,MAAM,MAAM,GAAG;;;;;;;;CAQd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1C,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACpD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\n\nconst name = \"clusteredLightingFunctions\";\nconst shader = `struct ClusteredLight {vec4 vLightData;vec4 vLightDiffuse;vec4 vLightSpecular;vec4 vLightDirection;vec4 vLightFalloff;};ClusteredLight getClusteredLight(sampler2D lightDataTexture,int index) {return ClusteredLight(\ntexelFetch(lightDataTexture,ivec2(0,index),0),\ntexelFetch(lightDataTexture,ivec2(1,index),0),\ntexelFetch(lightDataTexture,ivec2(2,index),0),\ntexelFetch(lightDataTexture,ivec2(3,index),0),\ntexelFetch(lightDataTexture,ivec2(4,index),0)\n);}\nint getClusteredSliceIndex(vec2 sliceData,float viewDepth) {return int(log(viewDepth)*sliceData.x+sliceData.y);}\n`;\n// Sideeffect\nif (!ShaderStore.IncludesShadersStore[name]) {\n ShaderStore.IncludesShadersStore[name] = shader;\n}\n/** @internal */\nexport const clusteredLightingFunctions = { name, shader };\n"]}
1
+ {"version":3,"file":"clusteredLightingFunctions.js","sourceRoot":"","sources":["../../../../../dev/core/src/Shaders/ShadersInclude/clusteredLightingFunctions.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,IAAI,GAAG,4BAA4B,CAAC;AAC1C,MAAM,MAAM,GAAG;;;;;;;;;;CAUd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1C,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACpD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\n\nconst name = \"clusteredLightingFunctions\";\nconst shader = `struct ClusteredLight {vec4 vLightData;vec4 vLightDiffuse;vec4 vLightSpecular;vec4 vLightDirection;vec4 vLightFalloff;};\n#define inline\nClusteredLight getClusteredLight(sampler2D lightDataTexture,int index) {return ClusteredLight(\ntexelFetch(lightDataTexture,ivec2(0,index),0),\ntexelFetch(lightDataTexture,ivec2(1,index),0),\ntexelFetch(lightDataTexture,ivec2(2,index),0),\ntexelFetch(lightDataTexture,ivec2(3,index),0),\ntexelFetch(lightDataTexture,ivec2(4,index),0)\n);}\nint getClusteredSliceIndex(vec2 sliceData,float viewDepth) {return int(log(viewDepth)*sliceData.x+sliceData.y);}\n`;\n// Sideeffect\nif (!ShaderStore.IncludesShadersStore[name]) {\n ShaderStore.IncludesShadersStore[name] = shader;\n}\n/** @internal */\nexport const clusteredLightingFunctions = { name, shader };\n"]}
@@ -4,7 +4,7 @@ import "./sceneUboDeclaration.js";
4
4
  import "./meshUboDeclaration.js";
5
5
  const name = "defaultUboDeclaration";
6
6
  const shader = `layout(std140,column_major) uniform;uniform Material
7
- {vec4 diffuseLeftColor;vec4 diffuseRightColor;vec4 opacityParts;vec4 reflectionLeftColor;vec4 reflectionRightColor;vec4 refractionLeftColor;vec4 refractionRightColor;vec4 emissiveLeftColor;vec4 emissiveRightColor;vec2 vDiffuseInfos;vec2 vAmbientInfos;vec2 vOpacityInfos;vec2 vReflectionInfos;vec3 vReflectionPosition;vec3 vReflectionSize;vec2 vEmissiveInfos;vec2 vLightmapInfos;vec2 vSpecularInfos;vec3 vBumpInfos;mat4 diffuseMatrix;mat4 ambientMatrix;mat4 opacityMatrix;mat4 reflectionMatrix;mat4 emissiveMatrix;mat4 lightmapMatrix;mat4 specularMatrix;mat4 bumpMatrix;vec2 vTangentSpaceParams;float pointSize;float alphaCutOff;mat4 refractionMatrix;vec4 vRefractionInfos;vec3 vRefractionPosition;vec3 vRefractionSize;vec4 vSpecularColor;vec3 vEmissiveColor;vec4 vDiffuseColor;vec3 vAmbientColor;vec4 cameraInfo;
7
+ {vec4 diffuseLeftColor;vec4 diffuseRightColor;vec4 opacityParts;vec4 reflectionLeftColor;vec4 reflectionRightColor;vec4 refractionLeftColor;vec4 refractionRightColor;vec4 emissiveLeftColor;vec4 emissiveRightColor;vec2 vDiffuseInfos;vec2 vAmbientInfos;vec2 vOpacityInfos;vec2 vEmissiveInfos;vec2 vLightmapInfos;vec2 vSpecularInfos;vec3 vBumpInfos;mat4 diffuseMatrix;mat4 ambientMatrix;mat4 opacityMatrix;mat4 emissiveMatrix;mat4 lightmapMatrix;mat4 specularMatrix;mat4 bumpMatrix;vec2 vTangentSpaceParams;float pointSize;float alphaCutOff;mat4 refractionMatrix;vec4 vRefractionInfos;vec3 vRefractionPosition;vec3 vRefractionSize;vec4 vSpecularColor;vec3 vEmissiveColor;vec4 vDiffuseColor;vec3 vAmbientColor;vec4 cameraInfo;vec2 vReflectionInfos;mat4 reflectionMatrix;vec3 vReflectionPosition;vec3 vReflectionSize;
8
8
  #define ADDITIONAL_UBO_DECLARATION
9
9
  };
10
10
  #include<sceneUboDeclaration>
@@ -1 +1 @@
1
- {"version":3,"file":"defaultUboDeclaration.js","sourceRoot":"","sources":["../../../../../dev/core/src/Shaders/ShadersInclude/defaultUboDeclaration.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,uBAAuB,CAAC;AAC/B,OAAO,sBAAsB,CAAC;AAE9B,MAAM,IAAI,GAAG,uBAAuB,CAAC;AACrC,MAAM,MAAM,GAAG;;;;;;CAMd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1C,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACpD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\nimport \"./sceneUboDeclaration\";\nimport \"./meshUboDeclaration\";\n\nconst name = \"defaultUboDeclaration\";\nconst shader = `layout(std140,column_major) uniform;uniform Material\n{vec4 diffuseLeftColor;vec4 diffuseRightColor;vec4 opacityParts;vec4 reflectionLeftColor;vec4 reflectionRightColor;vec4 refractionLeftColor;vec4 refractionRightColor;vec4 emissiveLeftColor;vec4 emissiveRightColor;vec2 vDiffuseInfos;vec2 vAmbientInfos;vec2 vOpacityInfos;vec2 vReflectionInfos;vec3 vReflectionPosition;vec3 vReflectionSize;vec2 vEmissiveInfos;vec2 vLightmapInfos;vec2 vSpecularInfos;vec3 vBumpInfos;mat4 diffuseMatrix;mat4 ambientMatrix;mat4 opacityMatrix;mat4 reflectionMatrix;mat4 emissiveMatrix;mat4 lightmapMatrix;mat4 specularMatrix;mat4 bumpMatrix;vec2 vTangentSpaceParams;float pointSize;float alphaCutOff;mat4 refractionMatrix;vec4 vRefractionInfos;vec3 vRefractionPosition;vec3 vRefractionSize;vec4 vSpecularColor;vec3 vEmissiveColor;vec4 vDiffuseColor;vec3 vAmbientColor;vec4 cameraInfo;\n#define ADDITIONAL_UBO_DECLARATION\n};\n#include<sceneUboDeclaration>\n#include<meshUboDeclaration>\n`;\n// Sideeffect\nif (!ShaderStore.IncludesShadersStore[name]) {\n ShaderStore.IncludesShadersStore[name] = shader;\n}\n/** @internal */\nexport const defaultUboDeclaration = { name, shader };\n"]}
1
+ {"version":3,"file":"defaultUboDeclaration.js","sourceRoot":"","sources":["../../../../../dev/core/src/Shaders/ShadersInclude/defaultUboDeclaration.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,uBAAuB,CAAC;AAC/B,OAAO,sBAAsB,CAAC;AAE9B,MAAM,IAAI,GAAG,uBAAuB,CAAC;AACrC,MAAM,MAAM,GAAG;;;;;;CAMd,CAAC;AACF,aAAa;AACb,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1C,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACpD,CAAC;AACD,gBAAgB;AAChB,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC","sourcesContent":["// Do not edit.\nimport { ShaderStore } from \"../../Engines/shaderStore\";\nimport \"./sceneUboDeclaration\";\nimport \"./meshUboDeclaration\";\n\nconst name = \"defaultUboDeclaration\";\nconst shader = `layout(std140,column_major) uniform;uniform Material\n{vec4 diffuseLeftColor;vec4 diffuseRightColor;vec4 opacityParts;vec4 reflectionLeftColor;vec4 reflectionRightColor;vec4 refractionLeftColor;vec4 refractionRightColor;vec4 emissiveLeftColor;vec4 emissiveRightColor;vec2 vDiffuseInfos;vec2 vAmbientInfos;vec2 vOpacityInfos;vec2 vEmissiveInfos;vec2 vLightmapInfos;vec2 vSpecularInfos;vec3 vBumpInfos;mat4 diffuseMatrix;mat4 ambientMatrix;mat4 opacityMatrix;mat4 emissiveMatrix;mat4 lightmapMatrix;mat4 specularMatrix;mat4 bumpMatrix;vec2 vTangentSpaceParams;float pointSize;float alphaCutOff;mat4 refractionMatrix;vec4 vRefractionInfos;vec3 vRefractionPosition;vec3 vRefractionSize;vec4 vSpecularColor;vec3 vEmissiveColor;vec4 vDiffuseColor;vec3 vAmbientColor;vec4 cameraInfo;vec2 vReflectionInfos;mat4 reflectionMatrix;vec3 vReflectionPosition;vec3 vReflectionSize;\n#define ADDITIONAL_UBO_DECLARATION\n};\n#include<sceneUboDeclaration>\n#include<meshUboDeclaration>\n`;\n// Sideeffect\nif (!ShaderStore.IncludesShadersStore[name]) {\n ShaderStore.IncludesShadersStore[name] = shader;\n}\n/** @internal */\nexport const defaultUboDeclaration = { name, shader };\n"]}
@@ -112,6 +112,40 @@ c=toLinearSpace(c);
112
112
  #endif
113
113
  result+=c*NoL;}}
114
114
  result=result/weight;return result;}}
115
+ #ifdef ANISOTROPIC
116
+ #define inline
117
+ vec3 radianceAnisotropic(
118
+ float alphaTangent,
119
+ float alphaBitangent,
120
+ samplerCube inputTexture,
121
+ vec3 inputView,
122
+ vec3 inputTangent,
123
+ vec3 inputBitangent,
124
+ vec3 inputNormal,
125
+ vec2 filteringInfo,
126
+ vec2 noiseInput
127
+ )
128
+ {vec3 V=inputView;vec3 N=inputNormal;vec3 T=inputTangent;vec3 B=inputBitangent;vec3 R=reflect(-V,N);if (alphaTangent==0. && alphaBitangent==0.) {vec3 c=textureCube(inputTexture,R).rgb;
129
+ #if GAMMA_INPUT
130
+ c=toLinearSpace(c);
131
+ #endif
132
+ return c;}
133
+ vec3 result=vec3(0.);float maxLevel=filteringInfo.y;float dim0=filteringInfo.x;float effectiveDim=dim0*sqrt(alphaTangent*alphaBitangent);float omegaP=(4.*PI)/(6.*effectiveDim*effectiveDim);const float noiseScale=clamp(log2(float(NUM_SAMPLES))/12.0f,0.0f,1.0f);float weight=0.;
134
+ #if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
135
+ for(uint i=0u; i<NUM_SAMPLES; ++i)
136
+ #else
137
+ for(int i=0; i<NUM_SAMPLES; ++i)
138
+ #endif
139
+ {vec2 Xi=hammersley(i,NUM_SAMPLES);Xi=fract(Xi+noiseInput*mix(0.5f,0.015f,noiseScale));
140
+ vec3 H_tangent=hemisphereImportanceSampleDggxAnisotropic(Xi,alphaTangent,alphaBitangent);vec3 H=normalize(H_tangent.x*T+H_tangent.y*B+H_tangent.z*N);vec3 L=normalize(2.0*dot(V,H)*H-V);float NoH=max(dot(N,H),0.001);float VoH=max(dot(V,H),0.001);float NoL=max(dot(N,L),0.001);if (NoL>0.) {float pdf_inversed=4./normalDistributionFunction_BurleyGGX_Anisotropic(
141
+ H_tangent.z,H_tangent.x,H_tangent.y,vec2(alphaTangent,alphaBitangent)
142
+ );float omegaS=NUM_SAMPLES_FLOAT_INVERSED*pdf_inversed;float l=log4(omegaS)-log4(omegaP)+log4(K);float mipLevel=clamp(float(l),0.0,maxLevel);weight+=NoL;vec3 c=textureCubeLodEXT(inputTexture,L,mipLevel).rgb;
143
+ #if GAMMA_INPUT
144
+ c=toLinearSpace(c);
145
+ #endif
146
+ result+=c*NoL;}}
147
+ result=result/weight;return result;}
148
+ #endif
115
149
  #endif
116
150
  #endif
117
151
  `;