@onerjs/core 8.55.9 → 8.56.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. package/AudioV2/webAudio/webAudioEngine.d.ts +7 -0
  2. package/AudioV2/webAudio/webAudioEngine.js +6 -5
  3. package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
  4. package/Cameras/arcRotateCamera.pure.js +24 -0
  5. package/Cameras/arcRotateCamera.pure.js.map +1 -1
  6. package/Culling/Helper/boundingInfoHelper.js +8 -4
  7. package/Culling/Helper/boundingInfoHelper.js.map +1 -1
  8. package/Engines/AbstractEngine/abstractEngine.textureLoaders.d.ts +5 -1
  9. package/Engines/AbstractEngine/abstractEngine.textureLoaders.js +7 -3
  10. package/Engines/AbstractEngine/abstractEngine.textureLoaders.js.map +1 -1
  11. package/Engines/AbstractEngine/abstractEngine.textureLoaders.pure.d.ts +6 -0
  12. package/Engines/AbstractEngine/abstractEngine.textureLoaders.pure.js +16 -0
  13. package/Engines/AbstractEngine/abstractEngine.textureLoaders.pure.js.map +1 -0
  14. package/Engines/AbstractEngine/pure.d.ts +1 -0
  15. package/Engines/AbstractEngine/pure.js +1 -0
  16. package/Engines/AbstractEngine/pure.js.map +1 -1
  17. package/Engines/IDrawContext.d.ts +2 -0
  18. package/Engines/IDrawContext.js.map +1 -1
  19. package/Engines/WebGPU/webgpuDrawContext.d.ts +8 -0
  20. package/Engines/WebGPU/webgpuDrawContext.js +15 -0
  21. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  22. package/Engines/abstractEngine.pure.js +2 -2
  23. package/Engines/abstractEngine.pure.js.map +1 -1
  24. package/Engines/constants.d.ts +5 -0
  25. package/Engines/constants.js +5 -0
  26. package/Engines/constants.js.map +1 -1
  27. package/Engines/engine.d.ts +11 -3
  28. package/Engines/webgpuEngine.d.ts +1 -0
  29. package/Engines/webgpuEngine.js +1 -0
  30. package/Engines/webgpuEngine.js.map +1 -1
  31. package/Engines/webgpuEngine.pure.d.ts +10 -0
  32. package/Engines/webgpuEngine.pure.js +15 -1
  33. package/Engines/webgpuEngine.pure.js.map +1 -1
  34. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.d.ts +4 -0
  35. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +12 -0
  36. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
  37. package/FrameGraph/Node/Blocks/inputBlock.pure.js +2 -1
  38. package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
  39. package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +2 -0
  40. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +2 -0
  41. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
  42. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +21 -0
  43. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +45 -0
  44. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  45. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js +2 -5
  46. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js.map +1 -1
  47. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.d.ts +1 -0
  48. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +18 -3
  49. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
  50. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js +2 -0
  51. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js.map +1 -1
  52. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +5 -21
  53. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
  54. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js +1 -0
  55. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js.map +1 -1
  56. package/Materials/Node/Blocks/powBlock.pure.js +2 -1
  57. package/Materials/Node/Blocks/powBlock.pure.js.map +1 -1
  58. package/Materials/Node/Blocks/triPlanarBlock.pure.js +14 -12
  59. package/Materials/Node/Blocks/triPlanarBlock.pure.js.map +1 -1
  60. package/Materials/Node/nodeMaterial.pure.d.ts +11 -0
  61. package/Materials/Node/nodeMaterial.pure.js +11 -0
  62. package/Materials/Node/nodeMaterial.pure.js.map +1 -1
  63. package/Materials/Node/nodeMaterialBuildState.d.ts +4 -3
  64. package/Materials/Node/nodeMaterialBuildState.js +7 -1
  65. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  66. package/Materials/PBR/openpbrMaterial.pure.d.ts +4 -0
  67. package/Materials/PBR/pbrBaseMaterial.pure.d.ts +4 -0
  68. package/Materials/Textures/index.d.ts +1 -0
  69. package/Materials/Textures/index.js +1 -0
  70. package/Materials/Textures/index.js.map +1 -1
  71. package/Materials/Textures/textureProcessor.d.ts +29 -6
  72. package/Materials/Textures/textureProcessor.js +22 -16
  73. package/Materials/Textures/textureProcessor.js.map +1 -1
  74. package/Materials/drawWrapper.js +3 -0
  75. package/Materials/drawWrapper.js.map +1 -1
  76. package/Materials/imageProcessingConfiguration.defines.d.ts +3 -0
  77. package/Materials/imageProcessingConfiguration.defines.js +2 -0
  78. package/Materials/imageProcessingConfiguration.defines.js.map +1 -1
  79. package/Materials/imageProcessingConfiguration.functions.js +3 -0
  80. package/Materials/imageProcessingConfiguration.functions.js.map +1 -1
  81. package/Materials/imageProcessingConfiguration.pure.d.ts +58 -0
  82. package/Materials/imageProcessingConfiguration.pure.js +123 -2
  83. package/Materials/imageProcessingConfiguration.pure.js.map +1 -1
  84. package/Materials/materialHelper.geometryrendering.d.ts +19 -0
  85. package/Materials/materialHelper.geometryrendering.js +29 -1
  86. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  87. package/Materials/prepass.defines.d.ts +3 -0
  88. package/Materials/prepass.defines.js +3 -0
  89. package/Materials/prepass.defines.js.map +1 -1
  90. package/Materials/standardMaterial.pure.d.ts +4 -0
  91. package/Materials/uniformBuffer.d.ts +29 -0
  92. package/Materials/uniformBuffer.js +146 -0
  93. package/Materials/uniformBuffer.js.map +1 -1
  94. package/Maths/colorTemperature.functions.d.ts +29 -0
  95. package/Maths/colorTemperature.functions.js +196 -0
  96. package/Maths/colorTemperature.functions.js.map +1 -0
  97. package/Maths/index.d.ts +1 -0
  98. package/Maths/index.js +1 -0
  99. package/Maths/index.js.map +1 -1
  100. package/Maths/math.vector.pure.d.ts +1 -5
  101. package/Maths/math.vector.pure.js.map +1 -1
  102. package/Maths/pure.d.ts +1 -0
  103. package/Maths/pure.js +1 -0
  104. package/Maths/pure.js.map +1 -1
  105. package/Misc/filesInput.d.ts +15 -0
  106. package/Misc/filesInput.js +156 -74
  107. package/Misc/filesInput.js.map +1 -1
  108. package/Misc/observable.pure.js +1 -3
  109. package/Misc/observable.pure.js.map +1 -1
  110. package/Misc/tools.pure.js +1 -1
  111. package/Misc/tools.pure.js.map +1 -1
  112. package/PostProcesses/imageProcessingPostProcess.d.ts +41 -1
  113. package/PostProcesses/imageProcessingPostProcess.js +41 -1
  114. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  115. package/PostProcesses/thinImageProcessingPostProcess.d.ts +50 -0
  116. package/PostProcesses/thinImageProcessingPostProcess.js +65 -0
  117. package/PostProcesses/thinImageProcessingPostProcess.js.map +1 -1
  118. package/Rendering/IBLShadows/iblShadowsMaterialCompatibility.pure.d.ts +12 -0
  119. package/Rendering/IBLShadows/iblShadowsMaterialCompatibility.pure.js +22 -0
  120. package/Rendering/IBLShadows/iblShadowsMaterialCompatibility.pure.js.map +1 -0
  121. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.d.ts +1 -0
  122. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js +39 -0
  123. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js.map +1 -1
  124. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +2 -4
  125. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
  126. package/Rendering/IBLShadows/pure.d.ts +1 -0
  127. package/Rendering/IBLShadows/pure.js +1 -0
  128. package/Rendering/IBLShadows/pure.js.map +1 -1
  129. package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +11 -0
  130. package/Rendering/fluidRenderer/fluidRenderingObject.js +36 -14
  131. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
  132. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.d.ts +5 -0
  133. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +16 -3
  134. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
  135. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +5 -0
  136. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +12 -0
  137. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
  138. package/Rendering/geometryBufferRenderer.pure.d.ts +30 -0
  139. package/Rendering/geometryBufferRenderer.pure.js +84 -0
  140. package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
  141. package/Rendering/iblCdfGenerator.js +10 -1
  142. package/Rendering/iblCdfGenerator.js.map +1 -1
  143. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +1 -1
  144. package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  145. package/Shaders/ShadersInclude/helperFunctions.js +2 -2
  146. package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
  147. package/Shaders/ShadersInclude/imageProcessingDeclaration.js +3 -0
  148. package/Shaders/ShadersInclude/imageProcessingDeclaration.js.map +1 -1
  149. package/Shaders/ShadersInclude/imageProcessingFunctions.js +3 -0
  150. package/Shaders/ShadersInclude/imageProcessingFunctions.js.map +1 -1
  151. package/Shaders/ShadersInclude/objectIdFunctions.d.ts +5 -0
  152. package/Shaders/ShadersInclude/objectIdFunctions.js +22 -0
  153. package/Shaders/ShadersInclude/objectIdFunctions.js.map +1 -0
  154. package/Shaders/ShadersInclude/openpbrBlockPrePass.js +3 -0
  155. package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
  156. package/Shaders/ShadersInclude/openpbrDirectLighting.js +34 -4
  157. package/Shaders/ShadersInclude/openpbrDirectLighting.js.map +1 -1
  158. package/Shaders/ShadersInclude/openpbrIblFunctions.js +8 -2
  159. package/Shaders/ShadersInclude/openpbrIblFunctions.js.map +1 -1
  160. package/Shaders/ShadersInclude/pbrBlockPrePass.js +3 -0
  161. package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  162. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +5 -0
  163. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  164. package/Shaders/ShadersInclude/prePassDeclaration.d.ts +1 -0
  165. package/Shaders/ShadersInclude/prePassDeclaration.js +5 -0
  166. package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
  167. package/Shaders/default.fragment.js +5 -1
  168. package/Shaders/default.fragment.js.map +1 -1
  169. package/Shaders/fluidRenderingParticleDepth.vertex.js +7 -1
  170. package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -1
  171. package/Shaders/fluidRenderingParticleDiffuse.vertex.js +7 -1
  172. package/Shaders/fluidRenderingParticleDiffuse.vertex.js.map +1 -1
  173. package/Shaders/fluidRenderingParticleThickness.vertex.js +7 -1
  174. package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -1
  175. package/Shaders/geometry.fragment.js +9 -1
  176. package/Shaders/geometry.fragment.js.map +1 -1
  177. package/Shaders/openpbr.fragment.js +2 -1
  178. package/Shaders/openpbr.fragment.js.map +1 -1
  179. package/Shaders/pbr.fragment.js +2 -1
  180. package/Shaders/pbr.fragment.js.map +1 -1
  181. package/ShadersWGSL/ShadersInclude/imageProcessingDeclaration.js +3 -0
  182. package/ShadersWGSL/ShadersInclude/imageProcessingDeclaration.js.map +1 -1
  183. package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js +3 -0
  184. package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js.map +1 -1
  185. package/ShadersWGSL/ShadersInclude/objectIdFunctions.d.ts +5 -0
  186. package/ShadersWGSL/ShadersInclude/objectIdFunctions.js +22 -0
  187. package/ShadersWGSL/ShadersInclude/objectIdFunctions.js.map +1 -0
  188. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +3 -0
  189. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
  190. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js +35 -5
  191. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js.map +1 -1
  192. package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js +1 -1
  193. package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js.map +1 -1
  194. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js +8 -2
  195. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js.map +1 -1
  196. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +3 -0
  197. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  198. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +5 -0
  199. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  200. package/ShadersWGSL/ShadersInclude/prePassDeclaration.d.ts +1 -0
  201. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +5 -0
  202. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -1
  203. package/ShadersWGSL/default.fragment.js +5 -1
  204. package/ShadersWGSL/default.fragment.js.map +1 -1
  205. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +16 -4
  206. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
  207. package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js +15 -3
  208. package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js.map +1 -1
  209. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +15 -3
  210. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
  211. package/ShadersWGSL/geometry.fragment.js +9 -1
  212. package/ShadersWGSL/geometry.fragment.js.map +1 -1
  213. package/ShadersWGSL/openpbr.fragment.js +2 -1
  214. package/ShadersWGSL/openpbr.fragment.js.map +1 -1
  215. package/ShadersWGSL/pbr.fragment.js +2 -1
  216. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  217. package/XR/features/Layers/WebXRCompositionLayer.d.ts +52 -0
  218. package/XR/features/Layers/WebXRCompositionLayer.js +80 -0
  219. package/XR/features/Layers/WebXRCompositionLayer.js.map +1 -1
  220. package/XR/features/WebXRControllerPointerSelection.pure.js +2 -1
  221. package/XR/features/WebXRControllerPointerSelection.pure.js.map +1 -1
  222. package/XR/features/WebXRControllerTeleportation.pure.js +2 -1
  223. package/XR/features/WebXRControllerTeleportation.pure.js.map +1 -1
  224. package/XR/features/WebXRDepthSensing.pure.d.ts +21 -0
  225. package/XR/features/WebXRDepthSensing.pure.js +42 -0
  226. package/XR/features/WebXRDepthSensing.pure.js.map +1 -1
  227. package/XR/features/WebXRHandTracking.pure.js +2 -0
  228. package/XR/features/WebXRHandTracking.pure.js.map +1 -1
  229. package/XR/features/WebXRLayers.pure.d.ts +12 -0
  230. package/XR/features/WebXRLayers.pure.js +31 -1
  231. package/XR/features/WebXRLayers.pure.js.map +1 -1
  232. package/XR/features/WebXRTrackedSources.d.ts +5 -0
  233. package/XR/features/WebXRTrackedSources.js +8 -0
  234. package/XR/features/WebXRTrackedSources.js.map +1 -0
  235. package/XR/features/WebXRTrackedSources.pure.d.ts +70 -0
  236. package/XR/features/WebXRTrackedSources.pure.js +153 -0
  237. package/XR/features/WebXRTrackedSources.pure.js.map +1 -0
  238. package/XR/features/index.d.ts +1 -0
  239. package/XR/features/index.js +1 -0
  240. package/XR/features/index.js.map +1 -1
  241. package/XR/features/pure.d.ts +1 -0
  242. package/XR/features/pure.js +1 -0
  243. package/XR/features/pure.js.map +1 -1
  244. package/XR/motionController/webXRAbstractMotionController.d.ts +53 -1
  245. package/XR/motionController/webXRAbstractMotionController.js +61 -0
  246. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  247. package/XR/webXRDefaultExperience.js +8 -4
  248. package/XR/webXRDefaultExperience.js.map +1 -1
  249. package/XR/webXRExperienceHelper.js +86 -44
  250. package/XR/webXRExperienceHelper.js.map +1 -1
  251. package/XR/webXRFeaturesManager.d.ts +9 -0
  252. package/XR/webXRFeaturesManager.js +4 -0
  253. package/XR/webXRFeaturesManager.js.map +1 -1
  254. package/XR/webXRGraphicsBinding.d.ts +29 -0
  255. package/XR/webXRGraphicsBinding.js +40 -0
  256. package/XR/webXRGraphicsBinding.js.map +1 -1
  257. package/XR/webXRInputSource.js +1 -1
  258. package/XR/webXRInputSource.js.map +1 -1
  259. package/XR/webXRLayerWrapper.d.ts +7 -5
  260. package/XR/webXRLayerWrapper.js +10 -7
  261. package/XR/webXRLayerWrapper.js.map +1 -1
  262. package/XR/webXRSessionManager.d.ts +45 -0
  263. package/XR/webXRSessionManager.js +174 -29
  264. package/XR/webXRSessionManager.js.map +1 -1
  265. package/package.json +1 -1
@@ -112,6 +112,64 @@ export declare class ImageProcessingConfiguration {
112
112
  * Sets the contrast used in the effect.
113
113
  */
114
114
  set contrast(value: number);
115
+ private _whiteBalanceEnabled;
116
+ /**
117
+ * Gets whether the white balance effect is enabled.
118
+ */
119
+ get whiteBalanceEnabled(): boolean;
120
+ /**
121
+ * Sets whether the white balance effect is enabled.
122
+ */
123
+ set whiteBalanceEnabled(value: boolean);
124
+ private _temperature;
125
+ /**
126
+ * Gets the correlated color temperature, in Kelvin, of the illuminant to neutralize when whiteBalanceEnabled
127
+ * is set to true - i.e. the light the scene is assumed to have been lit with, not a "warm"/"cool" creative
128
+ * adjustment. Lower values (e.g. ~2000-3500 K) correspond to warm/orange sources such as tungsten or candle
129
+ * light; higher values (e.g. ~7000-10000 K) correspond to cool/blue sources such as shade or overcast sky.
130
+ * Clamped to the tabulated range (roughly 1667 K and above) - the getter reflects the clamped value. Default is 6500.
131
+ */
132
+ get temperature(): number;
133
+ /**
134
+ * Sets the correlated color temperature, in Kelvin, of the illuminant to neutralize when whiteBalanceEnabled
135
+ * is set to true - i.e. the light the scene is assumed to have been lit with, not a "warm"/"cool" creative
136
+ * adjustment. Lower values (e.g. ~2000-3500 K) correspond to warm/orange sources such as tungsten or candle
137
+ * light; higher values (e.g. ~7000-10000 K) correspond to cool/blue sources such as shade or overcast sky.
138
+ * Clamped to the tabulated range (roughly 1667 K and above) - the getter reflects the clamped value. Default is 6500.
139
+ */
140
+ set temperature(value: number);
141
+ private _tint;
142
+ /**
143
+ * Gets the white balance tint offset used in the effect if whiteBalanceEnabled is set to true, on the
144
+ * green/magenta axis perpendicular to temperature - e.g. to correct for illuminants (such as some
145
+ * fluorescent lights) that a color temperature alone can't fully neutralize. Positive values shift the
146
+ * corrected image toward magenta (compensating a green-tinted illuminant); negative values shift it toward
147
+ * green (compensating a magenta-tinted illuminant). Clamped to [-150, 150] - the getter reflects the clamped value. Default is 0 (no tint offset).
148
+ */
149
+ get tint(): number;
150
+ /**
151
+ * Sets the white balance tint offset used in the effect if whiteBalanceEnabled is set to true, on the
152
+ * green/magenta axis perpendicular to temperature - e.g. to correct for illuminants (such as some
153
+ * fluorescent lights) that a color temperature alone can't fully neutralize. Positive values shift the
154
+ * corrected image toward magenta (compensating a green-tinted illuminant); negative values shift it toward
155
+ * green (compensating a magenta-tinted illuminant). Clamped to [-150, 150] - the getter reflects the clamped value. Default is 0 (no tint offset).
156
+ */
157
+ set tint(value: number);
158
+ private _whiteBalanceMatrix;
159
+ private _whiteBalanceMatrixTemperature;
160
+ private _whiteBalanceMatrixTint;
161
+ /**
162
+ * Returns the white balance matrix for the current temperature/tint, computing it on first use and
163
+ * recomputing it if either value has changed since it was last computed. Deliberately lazy: white balance is
164
+ * disabled by default, and every `ImageProcessingConfiguration` instance (created per scene, per material,
165
+ * per post process) would otherwise pay this matrix's construction cost even when never enabled. Checking
166
+ * here (rather than eagerly refreshing from the temperature/tint setters) also means paths that set the
167
+ * private backing fields directly - such as SerializationHelper.Clone/Parse, which assign serialized
168
+ * properties without going through their setters - still end up with a matrix that matches the current
169
+ * temperature/tint.
170
+ * @returns the column-major white balance matrix for the current temperature/tint
171
+ */
172
+ private _getWhiteBalanceMatrix;
115
173
  /**
116
174
  * Vignette stretch size.
117
175
  */
@@ -3,6 +3,8 @@ import { __esDecorate, __runInitializers } from "../tslib.es6.js";
3
3
  import { serialize, serializeAsTexture, serializeAsColorCurves, serializeAsColor4 } from "../Misc/decorators.js";
4
4
  import { Observable } from "../Misc/observable.pure.js";
5
5
  import { Color4 } from "../Maths/math.color.pure.js";
6
+ import { GetWhiteBalanceMatrix, MaxTintMagnitude, MinTemperatureKelvin } from "../Maths/colorTemperature.functions.js";
7
+ import { Clamp } from "../Maths/math.scalar.functions.js";
6
8
  import { ColorCurves, ColorCurvesBind } from "../Materials/colorCurves.pure.js";
7
9
  import { Mix } from "../Misc/tools.functions.js";
8
10
  import { SerializationHelper } from "../Misc/decorators.serialization.js";
@@ -45,6 +47,15 @@ let ImageProcessingConfiguration = (() => {
45
47
  let __contrast_decorators;
46
48
  let __contrast_initializers = [];
47
49
  let __contrast_extraInitializers = [];
50
+ let __whiteBalanceEnabled_decorators;
51
+ let __whiteBalanceEnabled_initializers = [];
52
+ let __whiteBalanceEnabled_extraInitializers = [];
53
+ let __temperature_decorators;
54
+ let __temperature_initializers = [];
55
+ let __temperature_extraInitializers = [];
56
+ let __tint_decorators;
57
+ let __tint_initializers = [];
58
+ let __tint_extraInitializers = [];
48
59
  let _vignetteStretch_decorators;
49
60
  let _vignetteStretch_initializers = [];
50
61
  let _vignetteStretch_extraInitializers = [];
@@ -106,10 +117,16 @@ let ImageProcessingConfiguration = (() => {
106
117
  this._toneMappingEnabled = (__runInitializers(this, __exposure_extraInitializers), __runInitializers(this, __toneMappingEnabled_initializers, false));
107
118
  this._toneMappingType = (__runInitializers(this, __toneMappingEnabled_extraInitializers), __runInitializers(this, __toneMappingType_initializers, _a.TONEMAPPING_STANDARD));
108
119
  this._contrast = (__runInitializers(this, __toneMappingType_extraInitializers), __runInitializers(this, __contrast_initializers, 1.0));
120
+ this._whiteBalanceEnabled = (__runInitializers(this, __contrast_extraInitializers), __runInitializers(this, __whiteBalanceEnabled_initializers, false));
121
+ this._temperature = (__runInitializers(this, __whiteBalanceEnabled_extraInitializers), __runInitializers(this, __temperature_initializers, 6500));
122
+ this._tint = (__runInitializers(this, __temperature_extraInitializers), __runInitializers(this, __tint_initializers, 0));
123
+ this._whiteBalanceMatrix = (__runInitializers(this, __tint_extraInitializers), null);
124
+ this._whiteBalanceMatrixTemperature = null;
125
+ this._whiteBalanceMatrixTint = null;
109
126
  /**
110
127
  * Vignette stretch size.
111
128
  */
112
- this.vignetteStretch = (__runInitializers(this, __contrast_extraInitializers), __runInitializers(this, _vignetteStretch_initializers, 0));
129
+ this.vignetteStretch = __runInitializers(this, _vignetteStretch_initializers, 0);
113
130
  /**
114
131
  * Vignette center X Offset.
115
132
  */
@@ -297,6 +314,91 @@ let ImageProcessingConfiguration = (() => {
297
314
  this._contrast = value;
298
315
  this._updateParameters();
299
316
  }
317
+ /**
318
+ * Gets whether the white balance effect is enabled.
319
+ */
320
+ get whiteBalanceEnabled() {
321
+ return this._whiteBalanceEnabled;
322
+ }
323
+ /**
324
+ * Sets whether the white balance effect is enabled.
325
+ */
326
+ set whiteBalanceEnabled(value) {
327
+ if (this._whiteBalanceEnabled === value) {
328
+ return;
329
+ }
330
+ this._whiteBalanceEnabled = value;
331
+ this._updateParameters();
332
+ }
333
+ /**
334
+ * Gets the correlated color temperature, in Kelvin, of the illuminant to neutralize when whiteBalanceEnabled
335
+ * is set to true - i.e. the light the scene is assumed to have been lit with, not a "warm"/"cool" creative
336
+ * adjustment. Lower values (e.g. ~2000-3500 K) correspond to warm/orange sources such as tungsten or candle
337
+ * light; higher values (e.g. ~7000-10000 K) correspond to cool/blue sources such as shade or overcast sky.
338
+ * Clamped to the tabulated range (roughly 1667 K and above) - the getter reflects the clamped value. Default is 6500.
339
+ */
340
+ get temperature() {
341
+ return this._temperature;
342
+ }
343
+ /**
344
+ * Sets the correlated color temperature, in Kelvin, of the illuminant to neutralize when whiteBalanceEnabled
345
+ * is set to true - i.e. the light the scene is assumed to have been lit with, not a "warm"/"cool" creative
346
+ * adjustment. Lower values (e.g. ~2000-3500 K) correspond to warm/orange sources such as tungsten or candle
347
+ * light; higher values (e.g. ~7000-10000 K) correspond to cool/blue sources such as shade or overcast sky.
348
+ * Clamped to the tabulated range (roughly 1667 K and above) - the getter reflects the clamped value. Default is 6500.
349
+ */
350
+ set temperature(value) {
351
+ value = Number.isNaN(value) ? MinTemperatureKelvin : Math.max(value, MinTemperatureKelvin);
352
+ if (this._temperature === value) {
353
+ return;
354
+ }
355
+ this._temperature = value;
356
+ this._updateParameters();
357
+ }
358
+ /**
359
+ * Gets the white balance tint offset used in the effect if whiteBalanceEnabled is set to true, on the
360
+ * green/magenta axis perpendicular to temperature - e.g. to correct for illuminants (such as some
361
+ * fluorescent lights) that a color temperature alone can't fully neutralize. Positive values shift the
362
+ * corrected image toward magenta (compensating a green-tinted illuminant); negative values shift it toward
363
+ * green (compensating a magenta-tinted illuminant). Clamped to [-150, 150] - the getter reflects the clamped value. Default is 0 (no tint offset).
364
+ */
365
+ get tint() {
366
+ return this._tint;
367
+ }
368
+ /**
369
+ * Sets the white balance tint offset used in the effect if whiteBalanceEnabled is set to true, on the
370
+ * green/magenta axis perpendicular to temperature - e.g. to correct for illuminants (such as some
371
+ * fluorescent lights) that a color temperature alone can't fully neutralize. Positive values shift the
372
+ * corrected image toward magenta (compensating a green-tinted illuminant); negative values shift it toward
373
+ * green (compensating a magenta-tinted illuminant). Clamped to [-150, 150] - the getter reflects the clamped value. Default is 0 (no tint offset).
374
+ */
375
+ set tint(value) {
376
+ value = Clamp(value, -MaxTintMagnitude, MaxTintMagnitude);
377
+ if (this._tint === value) {
378
+ return;
379
+ }
380
+ this._tint = value;
381
+ this._updateParameters();
382
+ }
383
+ /**
384
+ * Returns the white balance matrix for the current temperature/tint, computing it on first use and
385
+ * recomputing it if either value has changed since it was last computed. Deliberately lazy: white balance is
386
+ * disabled by default, and every `ImageProcessingConfiguration` instance (created per scene, per material,
387
+ * per post process) would otherwise pay this matrix's construction cost even when never enabled. Checking
388
+ * here (rather than eagerly refreshing from the temperature/tint setters) also means paths that set the
389
+ * private backing fields directly - such as SerializationHelper.Clone/Parse, which assign serialized
390
+ * properties without going through their setters - still end up with a matrix that matches the current
391
+ * temperature/tint.
392
+ * @returns the column-major white balance matrix for the current temperature/tint
393
+ */
394
+ _getWhiteBalanceMatrix() {
395
+ if (this._whiteBalanceMatrix === null || this._whiteBalanceMatrixTemperature !== this._temperature || this._whiteBalanceMatrixTint !== this._tint) {
396
+ this._whiteBalanceMatrixTemperature = this._temperature;
397
+ this._whiteBalanceMatrixTint = this._tint;
398
+ this._whiteBalanceMatrix = GetWhiteBalanceMatrix(this._temperature, this._tint);
399
+ }
400
+ return this._whiteBalanceMatrix;
401
+ }
300
402
  /**
301
403
  * Back Compat: Vignette center Y Offset.
302
404
  * @deprecated use vignetteCenterY instead
@@ -453,6 +555,7 @@ let ImageProcessingConfiguration = (() => {
453
555
  */
454
556
  prepareDefines(defines, forPostProcess = false) {
455
557
  if (forPostProcess !== this.applyByPostProcess || !this._isEnabled) {
558
+ defines.WHITEBALANCE = false;
456
559
  defines.VIGNETTE = false;
457
560
  defines.TONEMAPPING = 0;
458
561
  defines.CONTRAST = false;
@@ -466,6 +569,7 @@ let ImageProcessingConfiguration = (() => {
466
569
  defines.IMAGEPROCESSINGPOSTPROCESS = this.applyByPostProcess && this._isEnabled;
467
570
  return;
468
571
  }
572
+ defines.WHITEBALANCE = this._whiteBalanceEnabled;
469
573
  defines.VIGNETTE = this.vignetteEnabled;
470
574
  defines.VIGNETTEBLENDMODEMULTIPLY = this.vignetteBlendMode === _a._VIGNETTEMODE_MULTIPLY;
471
575
  defines.VIGNETTEBLENDMODEOPAQUE = !defines.VIGNETTEBLENDMODEMULTIPLY;
@@ -501,7 +605,14 @@ let ImageProcessingConfiguration = (() => {
501
605
  defines.IMAGEPROCESSINGPOSTPROCESS = this.applyByPostProcess;
502
606
  defines.SKIPFINALCOLORCLAMP = this.skipFinalColorClamp;
503
607
  defines.IMAGEPROCESSING =
504
- defines.VIGNETTE || !!defines.TONEMAPPING || defines.CONTRAST || defines.EXPOSURE || defines.COLORCURVES || defines.COLORGRADING || defines.DITHER;
608
+ defines.WHITEBALANCE ||
609
+ defines.VIGNETTE ||
610
+ !!defines.TONEMAPPING ||
611
+ defines.CONTRAST ||
612
+ defines.EXPOSURE ||
613
+ defines.COLORCURVES ||
614
+ defines.COLORGRADING ||
615
+ defines.DITHER;
505
616
  }
506
617
  /**
507
618
  * Returns true if all the image processing information are ready.
@@ -517,6 +628,10 @@ let ImageProcessingConfiguration = (() => {
517
628
  * @param overrideAspectRatio Override the aspect ratio of the effect
518
629
  */
519
630
  bind(effect, overrideAspectRatio) {
631
+ // White Balance
632
+ if (this._whiteBalanceEnabled) {
633
+ effect.setMatrix3x3("whiteBalanceMatrix", this._getWhiteBalanceMatrix());
634
+ }
520
635
  // Color Curves
521
636
  if (this._colorCurvesEnabled && this.colorCurves) {
522
637
  ColorCurvesBind(this.colorCurves, effect);
@@ -595,6 +710,9 @@ let ImageProcessingConfiguration = (() => {
595
710
  __toneMappingEnabled_decorators = [serialize()];
596
711
  __toneMappingType_decorators = [serialize()];
597
712
  __contrast_decorators = [serialize()];
713
+ __whiteBalanceEnabled_decorators = [serialize()];
714
+ __temperature_decorators = [serialize()];
715
+ __tint_decorators = [serialize()];
598
716
  _vignetteStretch_decorators = [serialize()];
599
717
  _vignetteCenterX_decorators = [serialize()];
600
718
  _vignetteCenterY_decorators = [serialize()];
@@ -620,6 +738,9 @@ let ImageProcessingConfiguration = (() => {
620
738
  __esDecorate(null, null, __toneMappingEnabled_decorators, { kind: "field", name: "_toneMappingEnabled", static: false, private: false, access: { has: obj => "_toneMappingEnabled" in obj, get: obj => obj._toneMappingEnabled, set: (obj, value) => { obj._toneMappingEnabled = value; } }, metadata: _metadata }, __toneMappingEnabled_initializers, __toneMappingEnabled_extraInitializers);
621
739
  __esDecorate(null, null, __toneMappingType_decorators, { kind: "field", name: "_toneMappingType", static: false, private: false, access: { has: obj => "_toneMappingType" in obj, get: obj => obj._toneMappingType, set: (obj, value) => { obj._toneMappingType = value; } }, metadata: _metadata }, __toneMappingType_initializers, __toneMappingType_extraInitializers);
622
740
  __esDecorate(null, null, __contrast_decorators, { kind: "field", name: "_contrast", static: false, private: false, access: { has: obj => "_contrast" in obj, get: obj => obj._contrast, set: (obj, value) => { obj._contrast = value; } }, metadata: _metadata }, __contrast_initializers, __contrast_extraInitializers);
741
+ __esDecorate(null, null, __whiteBalanceEnabled_decorators, { kind: "field", name: "_whiteBalanceEnabled", static: false, private: false, access: { has: obj => "_whiteBalanceEnabled" in obj, get: obj => obj._whiteBalanceEnabled, set: (obj, value) => { obj._whiteBalanceEnabled = value; } }, metadata: _metadata }, __whiteBalanceEnabled_initializers, __whiteBalanceEnabled_extraInitializers);
742
+ __esDecorate(null, null, __temperature_decorators, { kind: "field", name: "_temperature", static: false, private: false, access: { has: obj => "_temperature" in obj, get: obj => obj._temperature, set: (obj, value) => { obj._temperature = value; } }, metadata: _metadata }, __temperature_initializers, __temperature_extraInitializers);
743
+ __esDecorate(null, null, __tint_decorators, { kind: "field", name: "_tint", static: false, private: false, access: { has: obj => "_tint" in obj, get: obj => obj._tint, set: (obj, value) => { obj._tint = value; } }, metadata: _metadata }, __tint_initializers, __tint_extraInitializers);
623
744
  __esDecorate(null, null, _vignetteStretch_decorators, { kind: "field", name: "vignetteStretch", static: false, private: false, access: { has: obj => "vignetteStretch" in obj, get: obj => obj.vignetteStretch, set: (obj, value) => { obj.vignetteStretch = value; } }, metadata: _metadata }, _vignetteStretch_initializers, _vignetteStretch_extraInitializers);
624
745
  __esDecorate(null, null, _vignetteCenterX_decorators, { kind: "field", name: "vignetteCenterX", static: false, private: false, access: { has: obj => "vignetteCenterX" in obj, get: obj => obj.vignetteCenterX, set: (obj, value) => { obj.vignetteCenterX = value; } }, metadata: _metadata }, _vignetteCenterX_initializers, _vignetteCenterX_extraInitializers);
625
746
  __esDecorate(null, null, _vignetteCenterY_decorators, { kind: "field", name: "vignetteCenterY", static: false, private: false, access: { has: obj => "vignetteCenterY" in obj, get: obj => obj.vignetteCenterY, set: (obj, value) => { obj.vignetteCenterY = value; } }, metadata: _metadata }, _vignetteCenterY_initializers, _vignetteCenterY_extraInitializers);
@@ -1 +1 @@
1
- {"version":3,"file":"imageProcessingConfiguration.pure.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/imageProcessingConfiguration.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { serialize, serializeAsTexture, serializeAsColorCurves, serializeAsColor4 } from \"../Misc/decorators\";\r\nimport { Observable } from \"../Misc/observable.pure\";\r\nimport { type Nullable } from \"../types\";\r\nimport { Color4 } from \"../Maths/math.color.pure\";\r\nimport { ColorCurves, ColorCurvesBind } from \"../Materials/colorCurves.pure\";\r\nimport { type BaseTexture } from \"../Materials/Textures/baseTexture.pure\";\r\nimport { type Effect } from \"../Materials/effect.pure\";\r\nimport { Mix } from \"../Misc/tools.functions\";\r\nimport { SerializationHelper } from \"../Misc/decorators.serialization\";\r\nimport { type IImageProcessingConfigurationDefines } from \"./imageProcessingConfiguration.defines\";\r\nimport { PrepareSamplersForImageProcessing, PrepareUniformsForImageProcessing } from \"./imageProcessingConfiguration.functions\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\n\r\n/**\r\n * This groups together the common properties used for image processing either in direct forward pass\r\n * or through post processing effect depending on the use of the image processing pipeline in your scene\r\n * or not.\r\n */\r\nexport class ImageProcessingConfiguration {\r\n /**\r\n * Default tone mapping applied in BabylonJS.\r\n */\r\n public static readonly TONEMAPPING_STANDARD = 0;\r\n\r\n /**\r\n * ACES Tone mapping (used by default in unreal and unity). This can help getting closer\r\n * to other engines rendering to increase portability.\r\n */\r\n public static readonly TONEMAPPING_ACES = 1;\r\n\r\n /**\r\n * Neutral Tone mapping developped by the Khronos group in order to constrain\r\n * values between 0 and 1 without shifting Hue.\r\n */\r\n public static readonly TONEMAPPING_KHR_PBR_NEUTRAL = 2;\r\n\r\n /**\r\n * Color curves setup used in the effect if colorCurvesEnabled is set to true\r\n */\r\n @serializeAsColorCurves()\r\n public colorCurves: Nullable<ColorCurves> = new ColorCurves();\r\n\r\n @serialize()\r\n private _colorCurvesEnabled = false;\r\n /**\r\n * Gets whether the color curves effect is enabled.\r\n */\r\n public get colorCurvesEnabled(): boolean {\r\n return this._colorCurvesEnabled;\r\n }\r\n /**\r\n * Sets whether the color curves effect is enabled.\r\n */\r\n public set colorCurvesEnabled(value: boolean) {\r\n if (this._colorCurvesEnabled === value) {\r\n return;\r\n }\r\n\r\n this._colorCurvesEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serializeAsTexture(\"colorGradingTexture\")\r\n private _colorGradingTexture: Nullable<BaseTexture>;\r\n /**\r\n * Color grading LUT texture used in the effect if colorGradingEnabled is set to true\r\n */\r\n public get colorGradingTexture(): Nullable<BaseTexture> {\r\n return this._colorGradingTexture;\r\n }\r\n /**\r\n * Color grading LUT texture used in the effect if colorGradingEnabled is set to true\r\n */\r\n public set colorGradingTexture(value: Nullable<BaseTexture>) {\r\n if (this._colorGradingTexture === value) {\r\n return;\r\n }\r\n\r\n this._colorGradingTexture = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _colorGradingEnabled = false;\r\n /**\r\n * Gets whether the color grading effect is enabled.\r\n */\r\n public get colorGradingEnabled(): boolean {\r\n return this._colorGradingEnabled;\r\n }\r\n /**\r\n * Sets whether the color grading effect is enabled.\r\n */\r\n public set colorGradingEnabled(value: boolean) {\r\n if (this._colorGradingEnabled === value) {\r\n return;\r\n }\r\n\r\n this._colorGradingEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _colorGradingWithGreenDepth = true;\r\n /**\r\n * Gets whether the color grading effect is using a green depth for the 3d Texture.\r\n */\r\n public get colorGradingWithGreenDepth(): boolean {\r\n return this._colorGradingWithGreenDepth;\r\n }\r\n /**\r\n * Sets whether the color grading effect is using a green depth for the 3d Texture.\r\n */\r\n public set colorGradingWithGreenDepth(value: boolean) {\r\n if (this._colorGradingWithGreenDepth === value) {\r\n return;\r\n }\r\n\r\n this._colorGradingWithGreenDepth = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _colorGradingBGR = true;\r\n /**\r\n * Gets whether the color grading texture contains BGR values.\r\n */\r\n public get colorGradingBGR(): boolean {\r\n return this._colorGradingBGR;\r\n }\r\n /**\r\n * Sets whether the color grading texture contains BGR values.\r\n */\r\n public set colorGradingBGR(value: boolean) {\r\n if (this._colorGradingBGR === value) {\r\n return;\r\n }\r\n\r\n this._colorGradingBGR = value;\r\n this._updateParameters();\r\n }\r\n\r\n /** @internal */\r\n @serialize()\r\n public _exposure = 1.0;\r\n /**\r\n * Gets the Exposure used in the effect.\r\n */\r\n public get exposure(): number {\r\n return this._exposure;\r\n }\r\n /**\r\n * Sets the Exposure used in the effect.\r\n */\r\n public set exposure(value: number) {\r\n if (this._exposure === value) {\r\n return;\r\n }\r\n\r\n this._exposure = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _toneMappingEnabled = false;\r\n /**\r\n * Gets whether the tone mapping effect is enabled.\r\n */\r\n public get toneMappingEnabled(): boolean {\r\n return this._toneMappingEnabled;\r\n }\r\n /**\r\n * Sets whether the tone mapping effect is enabled.\r\n */\r\n public set toneMappingEnabled(value: boolean) {\r\n if (this._toneMappingEnabled === value) {\r\n return;\r\n }\r\n\r\n this._toneMappingEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _toneMappingType = ImageProcessingConfiguration.TONEMAPPING_STANDARD;\r\n /**\r\n * Gets the type of tone mapping effect.\r\n */\r\n public get toneMappingType(): number {\r\n return this._toneMappingType;\r\n }\r\n /**\r\n * Sets the type of tone mapping effect used in BabylonJS.\r\n */\r\n public set toneMappingType(value: number) {\r\n if (this._toneMappingType === value) {\r\n return;\r\n }\r\n\r\n this._toneMappingType = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n protected _contrast = 1.0;\r\n /**\r\n * Gets the contrast used in the effect.\r\n */\r\n public get contrast(): number {\r\n return this._contrast;\r\n }\r\n /**\r\n * Sets the contrast used in the effect.\r\n */\r\n public set contrast(value: number) {\r\n if (this._contrast === value) {\r\n return;\r\n }\r\n\r\n this._contrast = value;\r\n this._updateParameters();\r\n }\r\n\r\n /**\r\n * Vignette stretch size.\r\n */\r\n @serialize()\r\n public vignetteStretch = 0;\r\n\r\n /**\r\n * Vignette center X Offset.\r\n */\r\n @serialize()\r\n public vignetteCenterX = 0;\r\n\r\n /**\r\n * Vignette center Y Offset.\r\n */\r\n @serialize()\r\n public vignetteCenterY = 0;\r\n\r\n /**\r\n * Back Compat: Vignette center Y Offset.\r\n * @deprecated use vignetteCenterY instead\r\n */\r\n public get vignetteCentreY(): number {\r\n return this.vignetteCenterY;\r\n }\r\n public set vignetteCentreY(value: number) {\r\n this.vignetteCenterY = value;\r\n }\r\n\r\n /**\r\n * Back Compat: Vignette center X Offset.\r\n * @deprecated use vignetteCenterX instead\r\n */\r\n public get vignetteCentreX(): number {\r\n return this.vignetteCenterX;\r\n }\r\n public set vignetteCentreX(value: number) {\r\n this.vignetteCenterX = value;\r\n }\r\n\r\n /**\r\n * Vignette weight or intensity of the vignette effect.\r\n */\r\n @serialize()\r\n public vignetteWeight = 1.5;\r\n\r\n /**\r\n * Color of the vignette applied on the screen through the chosen blend mode (vignetteBlendMode)\r\n * if vignetteEnabled is set to true.\r\n */\r\n @serializeAsColor4()\r\n public vignetteColor: Color4 = new Color4(0, 0, 0, 0);\r\n\r\n /**\r\n * Camera field of view used by the Vignette effect.\r\n */\r\n @serialize()\r\n public vignetteCameraFov = 0.5;\r\n\r\n @serialize()\r\n private _vignetteBlendMode = ImageProcessingConfiguration.VIGNETTEMODE_MULTIPLY;\r\n /**\r\n * Gets the vignette blend mode allowing different kind of effect.\r\n */\r\n public get vignetteBlendMode(): number {\r\n return this._vignetteBlendMode;\r\n }\r\n /**\r\n * Sets the vignette blend mode allowing different kind of effect.\r\n */\r\n public set vignetteBlendMode(value: number) {\r\n if (this._vignetteBlendMode === value) {\r\n return;\r\n }\r\n\r\n this._vignetteBlendMode = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _vignetteEnabled = false;\r\n /**\r\n * Gets whether the vignette effect is enabled.\r\n */\r\n public get vignetteEnabled(): boolean {\r\n return this._vignetteEnabled;\r\n }\r\n /**\r\n * Sets whether the vignette effect is enabled.\r\n */\r\n public set vignetteEnabled(value: boolean) {\r\n if (this._vignetteEnabled === value) {\r\n return;\r\n }\r\n\r\n this._vignetteEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _ditheringEnabled = false;\r\n /**\r\n * Gets whether the dithering effect is enabled.\r\n * The dithering effect can be used to reduce banding.\r\n */\r\n public get ditheringEnabled(): boolean {\r\n return this._ditheringEnabled;\r\n }\r\n /**\r\n * Sets whether the dithering effect is enabled.\r\n * The dithering effect can be used to reduce banding.\r\n */\r\n public set ditheringEnabled(value: boolean) {\r\n if (this._ditheringEnabled === value) {\r\n return;\r\n }\r\n\r\n this._ditheringEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _ditheringIntensity = 1.0 / 255.0;\r\n /**\r\n * Gets the dithering intensity. 0 is no dithering. Default is 1.0 / 255.0.\r\n */\r\n public get ditheringIntensity(): number {\r\n return this._ditheringIntensity;\r\n }\r\n /**\r\n * Sets the dithering intensity. 0 is no dithering. Default is 1.0 / 255.0.\r\n */\r\n public set ditheringIntensity(value: number) {\r\n if (this._ditheringIntensity === value) {\r\n return;\r\n }\r\n\r\n this._ditheringIntensity = value;\r\n this._updateParameters();\r\n }\r\n\r\n /** @internal */\r\n @serialize()\r\n public _skipFinalColorClamp = false;\r\n /**\r\n * If apply by post process is set to true, setting this to true will skip the final color clamp step in the fragment shader\r\n * Applies to PBR materials.\r\n */\r\n public get skipFinalColorClamp(): boolean {\r\n return this._skipFinalColorClamp;\r\n }\r\n /**\r\n * If apply by post process is set to true, setting this to true will skip the final color clamp step in the fragment shader\r\n * Applies to PBR materials.\r\n */\r\n public set skipFinalColorClamp(value: boolean) {\r\n if (this._skipFinalColorClamp === value) {\r\n return;\r\n }\r\n\r\n this._skipFinalColorClamp = value;\r\n this._updateParameters();\r\n }\r\n\r\n /** @internal */\r\n @serialize()\r\n public _applyByPostProcess = false;\r\n /**\r\n * Gets whether the image processing is applied through a post process or not.\r\n */\r\n public get applyByPostProcess(): boolean {\r\n return this._applyByPostProcess;\r\n }\r\n /**\r\n * Sets whether the image processing is applied through a post process or not.\r\n */\r\n public set applyByPostProcess(value: boolean) {\r\n if (this._applyByPostProcess === value) {\r\n return;\r\n }\r\n\r\n this._applyByPostProcess = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _isEnabled = true;\r\n /**\r\n * Gets whether the image processing is enabled or not.\r\n */\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n /**\r\n * Sets whether the image processing is enabled or not.\r\n */\r\n public set isEnabled(value: boolean) {\r\n if (this._isEnabled === value) {\r\n return;\r\n }\r\n\r\n this._isEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n /**\r\n * Width of the output texture used in the post process. If not provided, uses the width of the screen.\r\n */\r\n @serialize()\r\n public outputTextureWidth = 0;\r\n\r\n /**\r\n * Height of the output texture used in the post process. If not provided, uses the height of the screen.\r\n */\r\n @serialize()\r\n public outputTextureHeight = 0;\r\n\r\n /**\r\n * An event triggered when the configuration changes and requires Shader to Update some parameters.\r\n */\r\n public onUpdateParameters = new Observable<ImageProcessingConfiguration>();\r\n\r\n /**\r\n * Method called each time the image processing information changes requires to recompile the effect.\r\n */\r\n protected _updateParameters(): void {\r\n this.onUpdateParameters.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Gets the current class name.\r\n * @returns \"ImageProcessingConfiguration\"\r\n */\r\n public getClassName(): string {\r\n return \"ImageProcessingConfiguration\";\r\n }\r\n\r\n /**\r\n * Prepare the list of uniforms associated with the Image Processing effects.\r\n * @param uniforms The list of uniforms used in the effect\r\n * @param defines the list of defines currently in use\r\n */\r\n public static PrepareUniforms: (uniforms: string[], defines: IImageProcessingConfigurationDefines) => void = PrepareUniformsForImageProcessing;\r\n\r\n /**\r\n * Prepare the list of samplers associated with the Image Processing effects.\r\n * @param samplersList The list of uniforms used in the effect\r\n * @param defines the list of defines currently in use\r\n */\r\n public static PrepareSamplers: (samplersList: string[], defines: IImageProcessingConfigurationDefines) => void = PrepareSamplersForImageProcessing;\r\n\r\n /**\r\n * Prepare the list of defines associated to the shader.\r\n * @param defines the list of defines to complete\r\n * @param forPostProcess Define if we are currently in post process mode or not\r\n */\r\n public prepareDefines(defines: IImageProcessingConfigurationDefines, forPostProcess = false): void {\r\n if (forPostProcess !== this.applyByPostProcess || !this._isEnabled) {\r\n defines.VIGNETTE = false;\r\n defines.TONEMAPPING = 0;\r\n defines.CONTRAST = false;\r\n defines.EXPOSURE = false;\r\n defines.COLORCURVES = false;\r\n defines.COLORGRADING = false;\r\n defines.COLORGRADING3D = false;\r\n defines.DITHER = false;\r\n defines.IMAGEPROCESSING = false;\r\n defines.SKIPFINALCOLORCLAMP = this.skipFinalColorClamp;\r\n defines.IMAGEPROCESSINGPOSTPROCESS = this.applyByPostProcess && this._isEnabled;\r\n return;\r\n }\r\n\r\n defines.VIGNETTE = this.vignetteEnabled;\r\n defines.VIGNETTEBLENDMODEMULTIPLY = this.vignetteBlendMode === ImageProcessingConfiguration._VIGNETTEMODE_MULTIPLY;\r\n defines.VIGNETTEBLENDMODEOPAQUE = !defines.VIGNETTEBLENDMODEMULTIPLY;\r\n\r\n if (!this._toneMappingEnabled) {\r\n defines.TONEMAPPING = 0;\r\n } else {\r\n switch (this._toneMappingType) {\r\n case ImageProcessingConfiguration.TONEMAPPING_KHR_PBR_NEUTRAL:\r\n defines.TONEMAPPING = 3;\r\n break;\r\n case ImageProcessingConfiguration.TONEMAPPING_ACES:\r\n defines.TONEMAPPING = 2;\r\n break;\r\n default:\r\n defines.TONEMAPPING = 1;\r\n break;\r\n }\r\n }\r\n\r\n defines.CONTRAST = this.contrast !== 1.0;\r\n defines.EXPOSURE = this.exposure !== 1.0;\r\n defines.COLORCURVES = this.colorCurvesEnabled && !!this.colorCurves;\r\n defines.COLORGRADING = this.colorGradingEnabled && !!this.colorGradingTexture;\r\n if (defines.COLORGRADING) {\r\n defines.COLORGRADING3D = this.colorGradingTexture!.is3D;\r\n } else {\r\n defines.COLORGRADING3D = false;\r\n }\r\n defines.SAMPLER3DGREENDEPTH = this.colorGradingWithGreenDepth;\r\n defines.SAMPLER3DBGRMAP = this.colorGradingBGR;\r\n defines.DITHER = this._ditheringEnabled;\r\n defines.IMAGEPROCESSINGPOSTPROCESS = this.applyByPostProcess;\r\n defines.SKIPFINALCOLORCLAMP = this.skipFinalColorClamp;\r\n defines.IMAGEPROCESSING =\r\n defines.VIGNETTE || !!defines.TONEMAPPING || defines.CONTRAST || defines.EXPOSURE || defines.COLORCURVES || defines.COLORGRADING || defines.DITHER;\r\n }\r\n\r\n /**\r\n * Returns true if all the image processing information are ready.\r\n * @returns True if ready, otherwise, false\r\n */\r\n public isReady() {\r\n // Color Grading texture can not be none blocking.\r\n return !this.colorGradingEnabled || !this.colorGradingTexture || this.colorGradingTexture.isReady();\r\n }\r\n\r\n /**\r\n * Binds the image processing to the shader.\r\n * @param effect The effect to bind to\r\n * @param overrideAspectRatio Override the aspect ratio of the effect\r\n */\r\n public bind(effect: Effect, overrideAspectRatio?: number): void {\r\n // Color Curves\r\n if (this._colorCurvesEnabled && this.colorCurves) {\r\n ColorCurvesBind(this.colorCurves, effect);\r\n }\r\n\r\n // Vignette and dither handled together due to common uniform.\r\n if (this._vignetteEnabled || this._ditheringEnabled) {\r\n const inverseWidth = 1 / (this.outputTextureWidth || effect.getEngine().getRenderWidth());\r\n const inverseHeight = 1 / (this.outputTextureHeight || effect.getEngine().getRenderHeight());\r\n effect.setFloat2(\"vInverseScreenSize\", inverseWidth, inverseHeight);\r\n\r\n if (this._ditheringEnabled) {\r\n effect.setFloat(\"ditherIntensity\", 0.5 * this._ditheringIntensity);\r\n }\r\n\r\n if (this._vignetteEnabled) {\r\n const aspectRatio = overrideAspectRatio != null ? overrideAspectRatio : inverseHeight / inverseWidth;\r\n\r\n let vignetteScaleY = Math.tan(this.vignetteCameraFov * 0.5);\r\n let vignetteScaleX = vignetteScaleY * aspectRatio;\r\n\r\n const vignetteScaleGeometricMean = Math.sqrt(vignetteScaleX * vignetteScaleY);\r\n vignetteScaleX = Mix(vignetteScaleX, vignetteScaleGeometricMean, this.vignetteStretch);\r\n vignetteScaleY = Mix(vignetteScaleY, vignetteScaleGeometricMean, this.vignetteStretch);\r\n\r\n effect.setFloat4(\"vignetteSettings1\", vignetteScaleX, vignetteScaleY, -vignetteScaleX * this.vignetteCenterX, -vignetteScaleY * this.vignetteCenterY);\r\n\r\n const vignettePower = -2.0 * this.vignetteWeight;\r\n effect.setFloat4(\"vignetteSettings2\", this.vignetteColor.r, this.vignetteColor.g, this.vignetteColor.b, vignettePower);\r\n }\r\n }\r\n\r\n // Exposure\r\n effect.setFloat(\"exposureLinear\", this.exposure);\r\n\r\n // Contrast\r\n effect.setFloat(\"contrast\", this.contrast);\r\n\r\n // Color transform settings\r\n if (this.colorGradingTexture) {\r\n effect.setTexture(\"txColorTransform\", this.colorGradingTexture);\r\n const textureSize = this.colorGradingTexture.getSize().height;\r\n\r\n effect.setFloat4(\r\n \"colorTransformSettings\",\r\n (textureSize - 1) / textureSize, // textureScale\r\n 0.5 / textureSize, // textureOffset\r\n textureSize, // textureSize\r\n this.colorGradingTexture.level // weight\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Clones the current image processing instance.\r\n * @returns The cloned image processing\r\n */\r\n public clone(): ImageProcessingConfiguration {\r\n return SerializationHelper.Clone(() => new ImageProcessingConfiguration(), this);\r\n }\r\n\r\n /**\r\n * Serializes the current image processing instance to a json representation.\r\n * @returns a JSON representation\r\n */\r\n public serialize(): any {\r\n return SerializationHelper.Serialize(this);\r\n }\r\n\r\n // Static constants associated to the image processing.\r\n private static _VIGNETTEMODE_MULTIPLY = 0;\r\n private static _VIGNETTEMODE_OPAQUE = 1;\r\n\r\n /**\r\n * Used to apply the vignette as a mix with the pixel color.\r\n */\r\n public static get VIGNETTEMODE_MULTIPLY(): number {\r\n return this._VIGNETTEMODE_MULTIPLY;\r\n }\r\n\r\n /**\r\n * Used to apply the vignette as a replacement of the pixel color.\r\n */\r\n public static get VIGNETTEMODE_OPAQUE(): number {\r\n return this._VIGNETTEMODE_OPAQUE;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n\r\n/**\r\n * Parses the image processing from a json representation.\r\n * @param source the JSON source to parse\r\n * @returns The parsed image processing\r\n */\r\nexport function ImageProcessingConfigurationParse(source: any): ImageProcessingConfiguration {\r\n const parsed = SerializationHelper.Parse(() => new ImageProcessingConfiguration(), source, null, null);\r\n // Backward compatibility\r\n if (source.vignetteCentreX !== undefined) {\r\n parsed.vignetteCenterX = source.vignetteCentreX;\r\n }\r\n if (source.vignetteCentreY !== undefined) {\r\n parsed.vignetteCenterY = source.vignetteCentreY;\r\n }\r\n\r\n return parsed;\r\n}\r\n\r\n/**\r\n * Register side effects for imageProcessingConfiguration.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterImageProcessingConfiguration(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n // References the dependencies.\r\n ImageProcessingConfiguration.Parse = ImageProcessingConfigurationParse;\r\n\r\n SerializationHelper._ImageProcessingConfigurationParser = ImageProcessingConfigurationParse;\r\n\r\n // Register Class Name\r\n RegisterClass(\"BABYLON.ImageProcessingConfiguration\", ImageProcessingConfiguration);\r\n}\r\n"]}
1
+ {"version":3,"file":"imageProcessingConfiguration.pure.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/imageProcessingConfiguration.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { serialize, serializeAsTexture, serializeAsColorCurves, serializeAsColor4 } from \"../Misc/decorators\";\r\nimport { Observable } from \"../Misc/observable.pure\";\r\nimport { type Nullable } from \"../types\";\r\nimport { Color4 } from \"../Maths/math.color.pure\";\r\nimport { GetWhiteBalanceMatrix, MaxTintMagnitude, MinTemperatureKelvin } from \"../Maths/colorTemperature.functions\";\r\nimport { Clamp } from \"../Maths/math.scalar.functions\";\r\nimport { ColorCurves, ColorCurvesBind } from \"../Materials/colorCurves.pure\";\r\nimport { type BaseTexture } from \"../Materials/Textures/baseTexture.pure\";\r\nimport { type Effect } from \"../Materials/effect.pure\";\r\nimport { Mix } from \"../Misc/tools.functions\";\r\nimport { SerializationHelper } from \"../Misc/decorators.serialization\";\r\nimport { type IImageProcessingConfigurationDefines } from \"./imageProcessingConfiguration.defines\";\r\nimport { PrepareSamplersForImageProcessing, PrepareUniformsForImageProcessing } from \"./imageProcessingConfiguration.functions\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\n\r\n/**\r\n * This groups together the common properties used for image processing either in direct forward pass\r\n * or through post processing effect depending on the use of the image processing pipeline in your scene\r\n * or not.\r\n */\r\nexport class ImageProcessingConfiguration {\r\n /**\r\n * Default tone mapping applied in BabylonJS.\r\n */\r\n public static readonly TONEMAPPING_STANDARD = 0;\r\n\r\n /**\r\n * ACES Tone mapping (used by default in unreal and unity). This can help getting closer\r\n * to other engines rendering to increase portability.\r\n */\r\n public static readonly TONEMAPPING_ACES = 1;\r\n\r\n /**\r\n * Neutral Tone mapping developped by the Khronos group in order to constrain\r\n * values between 0 and 1 without shifting Hue.\r\n */\r\n public static readonly TONEMAPPING_KHR_PBR_NEUTRAL = 2;\r\n\r\n /**\r\n * Color curves setup used in the effect if colorCurvesEnabled is set to true\r\n */\r\n @serializeAsColorCurves()\r\n public colorCurves: Nullable<ColorCurves> = new ColorCurves();\r\n\r\n @serialize()\r\n private _colorCurvesEnabled = false;\r\n /**\r\n * Gets whether the color curves effect is enabled.\r\n */\r\n public get colorCurvesEnabled(): boolean {\r\n return this._colorCurvesEnabled;\r\n }\r\n /**\r\n * Sets whether the color curves effect is enabled.\r\n */\r\n public set colorCurvesEnabled(value: boolean) {\r\n if (this._colorCurvesEnabled === value) {\r\n return;\r\n }\r\n\r\n this._colorCurvesEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serializeAsTexture(\"colorGradingTexture\")\r\n private _colorGradingTexture: Nullable<BaseTexture>;\r\n /**\r\n * Color grading LUT texture used in the effect if colorGradingEnabled is set to true\r\n */\r\n public get colorGradingTexture(): Nullable<BaseTexture> {\r\n return this._colorGradingTexture;\r\n }\r\n /**\r\n * Color grading LUT texture used in the effect if colorGradingEnabled is set to true\r\n */\r\n public set colorGradingTexture(value: Nullable<BaseTexture>) {\r\n if (this._colorGradingTexture === value) {\r\n return;\r\n }\r\n\r\n this._colorGradingTexture = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _colorGradingEnabled = false;\r\n /**\r\n * Gets whether the color grading effect is enabled.\r\n */\r\n public get colorGradingEnabled(): boolean {\r\n return this._colorGradingEnabled;\r\n }\r\n /**\r\n * Sets whether the color grading effect is enabled.\r\n */\r\n public set colorGradingEnabled(value: boolean) {\r\n if (this._colorGradingEnabled === value) {\r\n return;\r\n }\r\n\r\n this._colorGradingEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _colorGradingWithGreenDepth = true;\r\n /**\r\n * Gets whether the color grading effect is using a green depth for the 3d Texture.\r\n */\r\n public get colorGradingWithGreenDepth(): boolean {\r\n return this._colorGradingWithGreenDepth;\r\n }\r\n /**\r\n * Sets whether the color grading effect is using a green depth for the 3d Texture.\r\n */\r\n public set colorGradingWithGreenDepth(value: boolean) {\r\n if (this._colorGradingWithGreenDepth === value) {\r\n return;\r\n }\r\n\r\n this._colorGradingWithGreenDepth = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _colorGradingBGR = true;\r\n /**\r\n * Gets whether the color grading texture contains BGR values.\r\n */\r\n public get colorGradingBGR(): boolean {\r\n return this._colorGradingBGR;\r\n }\r\n /**\r\n * Sets whether the color grading texture contains BGR values.\r\n */\r\n public set colorGradingBGR(value: boolean) {\r\n if (this._colorGradingBGR === value) {\r\n return;\r\n }\r\n\r\n this._colorGradingBGR = value;\r\n this._updateParameters();\r\n }\r\n\r\n /** @internal */\r\n @serialize()\r\n public _exposure = 1.0;\r\n /**\r\n * Gets the Exposure used in the effect.\r\n */\r\n public get exposure(): number {\r\n return this._exposure;\r\n }\r\n /**\r\n * Sets the Exposure used in the effect.\r\n */\r\n public set exposure(value: number) {\r\n if (this._exposure === value) {\r\n return;\r\n }\r\n\r\n this._exposure = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _toneMappingEnabled = false;\r\n /**\r\n * Gets whether the tone mapping effect is enabled.\r\n */\r\n public get toneMappingEnabled(): boolean {\r\n return this._toneMappingEnabled;\r\n }\r\n /**\r\n * Sets whether the tone mapping effect is enabled.\r\n */\r\n public set toneMappingEnabled(value: boolean) {\r\n if (this._toneMappingEnabled === value) {\r\n return;\r\n }\r\n\r\n this._toneMappingEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _toneMappingType = ImageProcessingConfiguration.TONEMAPPING_STANDARD;\r\n /**\r\n * Gets the type of tone mapping effect.\r\n */\r\n public get toneMappingType(): number {\r\n return this._toneMappingType;\r\n }\r\n /**\r\n * Sets the type of tone mapping effect used in BabylonJS.\r\n */\r\n public set toneMappingType(value: number) {\r\n if (this._toneMappingType === value) {\r\n return;\r\n }\r\n\r\n this._toneMappingType = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n protected _contrast = 1.0;\r\n /**\r\n * Gets the contrast used in the effect.\r\n */\r\n public get contrast(): number {\r\n return this._contrast;\r\n }\r\n /**\r\n * Sets the contrast used in the effect.\r\n */\r\n public set contrast(value: number) {\r\n if (this._contrast === value) {\r\n return;\r\n }\r\n\r\n this._contrast = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _whiteBalanceEnabled = false;\r\n /**\r\n * Gets whether the white balance effect is enabled.\r\n */\r\n public get whiteBalanceEnabled(): boolean {\r\n return this._whiteBalanceEnabled;\r\n }\r\n /**\r\n * Sets whether the white balance effect is enabled.\r\n */\r\n public set whiteBalanceEnabled(value: boolean) {\r\n if (this._whiteBalanceEnabled === value) {\r\n return;\r\n }\r\n\r\n this._whiteBalanceEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _temperature = 6500;\r\n /**\r\n * Gets the correlated color temperature, in Kelvin, of the illuminant to neutralize when whiteBalanceEnabled\r\n * is set to true - i.e. the light the scene is assumed to have been lit with, not a \"warm\"/\"cool\" creative\r\n * adjustment. Lower values (e.g. ~2000-3500 K) correspond to warm/orange sources such as tungsten or candle\r\n * light; higher values (e.g. ~7000-10000 K) correspond to cool/blue sources such as shade or overcast sky.\r\n * Clamped to the tabulated range (roughly 1667 K and above) - the getter reflects the clamped value. Default is 6500.\r\n */\r\n public get temperature(): number {\r\n return this._temperature;\r\n }\r\n /**\r\n * Sets the correlated color temperature, in Kelvin, of the illuminant to neutralize when whiteBalanceEnabled\r\n * is set to true - i.e. the light the scene is assumed to have been lit with, not a \"warm\"/\"cool\" creative\r\n * adjustment. Lower values (e.g. ~2000-3500 K) correspond to warm/orange sources such as tungsten or candle\r\n * light; higher values (e.g. ~7000-10000 K) correspond to cool/blue sources such as shade or overcast sky.\r\n * Clamped to the tabulated range (roughly 1667 K and above) - the getter reflects the clamped value. Default is 6500.\r\n */\r\n public set temperature(value: number) {\r\n value = Number.isNaN(value) ? MinTemperatureKelvin : Math.max(value, MinTemperatureKelvin);\r\n\r\n if (this._temperature === value) {\r\n return;\r\n }\r\n\r\n this._temperature = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _tint = 0;\r\n /**\r\n * Gets the white balance tint offset used in the effect if whiteBalanceEnabled is set to true, on the\r\n * green/magenta axis perpendicular to temperature - e.g. to correct for illuminants (such as some\r\n * fluorescent lights) that a color temperature alone can't fully neutralize. Positive values shift the\r\n * corrected image toward magenta (compensating a green-tinted illuminant); negative values shift it toward\r\n * green (compensating a magenta-tinted illuminant). Clamped to [-150, 150] - the getter reflects the clamped value. Default is 0 (no tint offset).\r\n */\r\n public get tint(): number {\r\n return this._tint;\r\n }\r\n /**\r\n * Sets the white balance tint offset used in the effect if whiteBalanceEnabled is set to true, on the\r\n * green/magenta axis perpendicular to temperature - e.g. to correct for illuminants (such as some\r\n * fluorescent lights) that a color temperature alone can't fully neutralize. Positive values shift the\r\n * corrected image toward magenta (compensating a green-tinted illuminant); negative values shift it toward\r\n * green (compensating a magenta-tinted illuminant). Clamped to [-150, 150] - the getter reflects the clamped value. Default is 0 (no tint offset).\r\n */\r\n public set tint(value: number) {\r\n value = Clamp(value, -MaxTintMagnitude, MaxTintMagnitude);\r\n\r\n if (this._tint === value) {\r\n return;\r\n }\r\n\r\n this._tint = value;\r\n this._updateParameters();\r\n }\r\n\r\n private _whiteBalanceMatrix: Nullable<Float32Array | Array<number>> = null;\r\n private _whiteBalanceMatrixTemperature: Nullable<number> = null;\r\n private _whiteBalanceMatrixTint: Nullable<number> = null;\r\n\r\n /**\r\n * Returns the white balance matrix for the current temperature/tint, computing it on first use and\r\n * recomputing it if either value has changed since it was last computed. Deliberately lazy: white balance is\r\n * disabled by default, and every `ImageProcessingConfiguration` instance (created per scene, per material,\r\n * per post process) would otherwise pay this matrix's construction cost even when never enabled. Checking\r\n * here (rather than eagerly refreshing from the temperature/tint setters) also means paths that set the\r\n * private backing fields directly - such as SerializationHelper.Clone/Parse, which assign serialized\r\n * properties without going through their setters - still end up with a matrix that matches the current\r\n * temperature/tint.\r\n * @returns the column-major white balance matrix for the current temperature/tint\r\n */\r\n private _getWhiteBalanceMatrix(): Float32Array | Array<number> {\r\n if (this._whiteBalanceMatrix === null || this._whiteBalanceMatrixTemperature !== this._temperature || this._whiteBalanceMatrixTint !== this._tint) {\r\n this._whiteBalanceMatrixTemperature = this._temperature;\r\n this._whiteBalanceMatrixTint = this._tint;\r\n this._whiteBalanceMatrix = GetWhiteBalanceMatrix(this._temperature, this._tint);\r\n }\r\n return this._whiteBalanceMatrix;\r\n }\r\n\r\n /**\r\n * Vignette stretch size.\r\n */\r\n @serialize()\r\n public vignetteStretch = 0;\r\n\r\n /**\r\n * Vignette center X Offset.\r\n */\r\n @serialize()\r\n public vignetteCenterX = 0;\r\n\r\n /**\r\n * Vignette center Y Offset.\r\n */\r\n @serialize()\r\n public vignetteCenterY = 0;\r\n\r\n /**\r\n * Back Compat: Vignette center Y Offset.\r\n * @deprecated use vignetteCenterY instead\r\n */\r\n public get vignetteCentreY(): number {\r\n return this.vignetteCenterY;\r\n }\r\n public set vignetteCentreY(value: number) {\r\n this.vignetteCenterY = value;\r\n }\r\n\r\n /**\r\n * Back Compat: Vignette center X Offset.\r\n * @deprecated use vignetteCenterX instead\r\n */\r\n public get vignetteCentreX(): number {\r\n return this.vignetteCenterX;\r\n }\r\n public set vignetteCentreX(value: number) {\r\n this.vignetteCenterX = value;\r\n }\r\n\r\n /**\r\n * Vignette weight or intensity of the vignette effect.\r\n */\r\n @serialize()\r\n public vignetteWeight = 1.5;\r\n\r\n /**\r\n * Color of the vignette applied on the screen through the chosen blend mode (vignetteBlendMode)\r\n * if vignetteEnabled is set to true.\r\n */\r\n @serializeAsColor4()\r\n public vignetteColor: Color4 = new Color4(0, 0, 0, 0);\r\n\r\n /**\r\n * Camera field of view used by the Vignette effect.\r\n */\r\n @serialize()\r\n public vignetteCameraFov = 0.5;\r\n\r\n @serialize()\r\n private _vignetteBlendMode = ImageProcessingConfiguration.VIGNETTEMODE_MULTIPLY;\r\n /**\r\n * Gets the vignette blend mode allowing different kind of effect.\r\n */\r\n public get vignetteBlendMode(): number {\r\n return this._vignetteBlendMode;\r\n }\r\n /**\r\n * Sets the vignette blend mode allowing different kind of effect.\r\n */\r\n public set vignetteBlendMode(value: number) {\r\n if (this._vignetteBlendMode === value) {\r\n return;\r\n }\r\n\r\n this._vignetteBlendMode = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _vignetteEnabled = false;\r\n /**\r\n * Gets whether the vignette effect is enabled.\r\n */\r\n public get vignetteEnabled(): boolean {\r\n return this._vignetteEnabled;\r\n }\r\n /**\r\n * Sets whether the vignette effect is enabled.\r\n */\r\n public set vignetteEnabled(value: boolean) {\r\n if (this._vignetteEnabled === value) {\r\n return;\r\n }\r\n\r\n this._vignetteEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _ditheringEnabled = false;\r\n /**\r\n * Gets whether the dithering effect is enabled.\r\n * The dithering effect can be used to reduce banding.\r\n */\r\n public get ditheringEnabled(): boolean {\r\n return this._ditheringEnabled;\r\n }\r\n /**\r\n * Sets whether the dithering effect is enabled.\r\n * The dithering effect can be used to reduce banding.\r\n */\r\n public set ditheringEnabled(value: boolean) {\r\n if (this._ditheringEnabled === value) {\r\n return;\r\n }\r\n\r\n this._ditheringEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _ditheringIntensity = 1.0 / 255.0;\r\n /**\r\n * Gets the dithering intensity. 0 is no dithering. Default is 1.0 / 255.0.\r\n */\r\n public get ditheringIntensity(): number {\r\n return this._ditheringIntensity;\r\n }\r\n /**\r\n * Sets the dithering intensity. 0 is no dithering. Default is 1.0 / 255.0.\r\n */\r\n public set ditheringIntensity(value: number) {\r\n if (this._ditheringIntensity === value) {\r\n return;\r\n }\r\n\r\n this._ditheringIntensity = value;\r\n this._updateParameters();\r\n }\r\n\r\n /** @internal */\r\n @serialize()\r\n public _skipFinalColorClamp = false;\r\n /**\r\n * If apply by post process is set to true, setting this to true will skip the final color clamp step in the fragment shader\r\n * Applies to PBR materials.\r\n */\r\n public get skipFinalColorClamp(): boolean {\r\n return this._skipFinalColorClamp;\r\n }\r\n /**\r\n * If apply by post process is set to true, setting this to true will skip the final color clamp step in the fragment shader\r\n * Applies to PBR materials.\r\n */\r\n public set skipFinalColorClamp(value: boolean) {\r\n if (this._skipFinalColorClamp === value) {\r\n return;\r\n }\r\n\r\n this._skipFinalColorClamp = value;\r\n this._updateParameters();\r\n }\r\n\r\n /** @internal */\r\n @serialize()\r\n public _applyByPostProcess = false;\r\n /**\r\n * Gets whether the image processing is applied through a post process or not.\r\n */\r\n public get applyByPostProcess(): boolean {\r\n return this._applyByPostProcess;\r\n }\r\n /**\r\n * Sets whether the image processing is applied through a post process or not.\r\n */\r\n public set applyByPostProcess(value: boolean) {\r\n if (this._applyByPostProcess === value) {\r\n return;\r\n }\r\n\r\n this._applyByPostProcess = value;\r\n this._updateParameters();\r\n }\r\n\r\n @serialize()\r\n private _isEnabled = true;\r\n /**\r\n * Gets whether the image processing is enabled or not.\r\n */\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n /**\r\n * Sets whether the image processing is enabled or not.\r\n */\r\n public set isEnabled(value: boolean) {\r\n if (this._isEnabled === value) {\r\n return;\r\n }\r\n\r\n this._isEnabled = value;\r\n this._updateParameters();\r\n }\r\n\r\n /**\r\n * Width of the output texture used in the post process. If not provided, uses the width of the screen.\r\n */\r\n @serialize()\r\n public outputTextureWidth = 0;\r\n\r\n /**\r\n * Height of the output texture used in the post process. If not provided, uses the height of the screen.\r\n */\r\n @serialize()\r\n public outputTextureHeight = 0;\r\n\r\n /**\r\n * An event triggered when the configuration changes and requires Shader to Update some parameters.\r\n */\r\n public onUpdateParameters = new Observable<ImageProcessingConfiguration>();\r\n\r\n /**\r\n * Method called each time the image processing information changes requires to recompile the effect.\r\n */\r\n protected _updateParameters(): void {\r\n this.onUpdateParameters.notifyObservers(this);\r\n }\r\n\r\n /**\r\n * Gets the current class name.\r\n * @returns \"ImageProcessingConfiguration\"\r\n */\r\n public getClassName(): string {\r\n return \"ImageProcessingConfiguration\";\r\n }\r\n\r\n /**\r\n * Prepare the list of uniforms associated with the Image Processing effects.\r\n * @param uniforms The list of uniforms used in the effect\r\n * @param defines the list of defines currently in use\r\n */\r\n public static PrepareUniforms: (uniforms: string[], defines: IImageProcessingConfigurationDefines) => void = PrepareUniformsForImageProcessing;\r\n\r\n /**\r\n * Prepare the list of samplers associated with the Image Processing effects.\r\n * @param samplersList The list of uniforms used in the effect\r\n * @param defines the list of defines currently in use\r\n */\r\n public static PrepareSamplers: (samplersList: string[], defines: IImageProcessingConfigurationDefines) => void = PrepareSamplersForImageProcessing;\r\n\r\n /**\r\n * Prepare the list of defines associated to the shader.\r\n * @param defines the list of defines to complete\r\n * @param forPostProcess Define if we are currently in post process mode or not\r\n */\r\n public prepareDefines(defines: IImageProcessingConfigurationDefines, forPostProcess = false): void {\r\n if (forPostProcess !== this.applyByPostProcess || !this._isEnabled) {\r\n defines.WHITEBALANCE = false;\r\n defines.VIGNETTE = false;\r\n defines.TONEMAPPING = 0;\r\n defines.CONTRAST = false;\r\n defines.EXPOSURE = false;\r\n defines.COLORCURVES = false;\r\n defines.COLORGRADING = false;\r\n defines.COLORGRADING3D = false;\r\n defines.DITHER = false;\r\n defines.IMAGEPROCESSING = false;\r\n defines.SKIPFINALCOLORCLAMP = this.skipFinalColorClamp;\r\n defines.IMAGEPROCESSINGPOSTPROCESS = this.applyByPostProcess && this._isEnabled;\r\n return;\r\n }\r\n\r\n defines.WHITEBALANCE = this._whiteBalanceEnabled;\r\n defines.VIGNETTE = this.vignetteEnabled;\r\n defines.VIGNETTEBLENDMODEMULTIPLY = this.vignetteBlendMode === ImageProcessingConfiguration._VIGNETTEMODE_MULTIPLY;\r\n defines.VIGNETTEBLENDMODEOPAQUE = !defines.VIGNETTEBLENDMODEMULTIPLY;\r\n\r\n if (!this._toneMappingEnabled) {\r\n defines.TONEMAPPING = 0;\r\n } else {\r\n switch (this._toneMappingType) {\r\n case ImageProcessingConfiguration.TONEMAPPING_KHR_PBR_NEUTRAL:\r\n defines.TONEMAPPING = 3;\r\n break;\r\n case ImageProcessingConfiguration.TONEMAPPING_ACES:\r\n defines.TONEMAPPING = 2;\r\n break;\r\n default:\r\n defines.TONEMAPPING = 1;\r\n break;\r\n }\r\n }\r\n\r\n defines.CONTRAST = this.contrast !== 1.0;\r\n defines.EXPOSURE = this.exposure !== 1.0;\r\n defines.COLORCURVES = this.colorCurvesEnabled && !!this.colorCurves;\r\n defines.COLORGRADING = this.colorGradingEnabled && !!this.colorGradingTexture;\r\n if (defines.COLORGRADING) {\r\n defines.COLORGRADING3D = this.colorGradingTexture!.is3D;\r\n } else {\r\n defines.COLORGRADING3D = false;\r\n }\r\n defines.SAMPLER3DGREENDEPTH = this.colorGradingWithGreenDepth;\r\n defines.SAMPLER3DBGRMAP = this.colorGradingBGR;\r\n defines.DITHER = this._ditheringEnabled;\r\n defines.IMAGEPROCESSINGPOSTPROCESS = this.applyByPostProcess;\r\n defines.SKIPFINALCOLORCLAMP = this.skipFinalColorClamp;\r\n defines.IMAGEPROCESSING =\r\n defines.WHITEBALANCE ||\r\n defines.VIGNETTE ||\r\n !!defines.TONEMAPPING ||\r\n defines.CONTRAST ||\r\n defines.EXPOSURE ||\r\n defines.COLORCURVES ||\r\n defines.COLORGRADING ||\r\n defines.DITHER;\r\n }\r\n\r\n /**\r\n * Returns true if all the image processing information are ready.\r\n * @returns True if ready, otherwise, false\r\n */\r\n public isReady() {\r\n // Color Grading texture can not be none blocking.\r\n return !this.colorGradingEnabled || !this.colorGradingTexture || this.colorGradingTexture.isReady();\r\n }\r\n\r\n /**\r\n * Binds the image processing to the shader.\r\n * @param effect The effect to bind to\r\n * @param overrideAspectRatio Override the aspect ratio of the effect\r\n */\r\n public bind(effect: Effect, overrideAspectRatio?: number): void {\r\n // White Balance\r\n if (this._whiteBalanceEnabled) {\r\n effect.setMatrix3x3(\"whiteBalanceMatrix\", this._getWhiteBalanceMatrix());\r\n }\r\n\r\n // Color Curves\r\n if (this._colorCurvesEnabled && this.colorCurves) {\r\n ColorCurvesBind(this.colorCurves, effect);\r\n }\r\n\r\n // Vignette and dither handled together due to common uniform.\r\n if (this._vignetteEnabled || this._ditheringEnabled) {\r\n const inverseWidth = 1 / (this.outputTextureWidth || effect.getEngine().getRenderWidth());\r\n const inverseHeight = 1 / (this.outputTextureHeight || effect.getEngine().getRenderHeight());\r\n effect.setFloat2(\"vInverseScreenSize\", inverseWidth, inverseHeight);\r\n\r\n if (this._ditheringEnabled) {\r\n effect.setFloat(\"ditherIntensity\", 0.5 * this._ditheringIntensity);\r\n }\r\n\r\n if (this._vignetteEnabled) {\r\n const aspectRatio = overrideAspectRatio != null ? overrideAspectRatio : inverseHeight / inverseWidth;\r\n\r\n let vignetteScaleY = Math.tan(this.vignetteCameraFov * 0.5);\r\n let vignetteScaleX = vignetteScaleY * aspectRatio;\r\n\r\n const vignetteScaleGeometricMean = Math.sqrt(vignetteScaleX * vignetteScaleY);\r\n vignetteScaleX = Mix(vignetteScaleX, vignetteScaleGeometricMean, this.vignetteStretch);\r\n vignetteScaleY = Mix(vignetteScaleY, vignetteScaleGeometricMean, this.vignetteStretch);\r\n\r\n effect.setFloat4(\"vignetteSettings1\", vignetteScaleX, vignetteScaleY, -vignetteScaleX * this.vignetteCenterX, -vignetteScaleY * this.vignetteCenterY);\r\n\r\n const vignettePower = -2.0 * this.vignetteWeight;\r\n effect.setFloat4(\"vignetteSettings2\", this.vignetteColor.r, this.vignetteColor.g, this.vignetteColor.b, vignettePower);\r\n }\r\n }\r\n\r\n // Exposure\r\n effect.setFloat(\"exposureLinear\", this.exposure);\r\n\r\n // Contrast\r\n effect.setFloat(\"contrast\", this.contrast);\r\n\r\n // Color transform settings\r\n if (this.colorGradingTexture) {\r\n effect.setTexture(\"txColorTransform\", this.colorGradingTexture);\r\n const textureSize = this.colorGradingTexture.getSize().height;\r\n\r\n effect.setFloat4(\r\n \"colorTransformSettings\",\r\n (textureSize - 1) / textureSize, // textureScale\r\n 0.5 / textureSize, // textureOffset\r\n textureSize, // textureSize\r\n this.colorGradingTexture.level // weight\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Clones the current image processing instance.\r\n * @returns The cloned image processing\r\n */\r\n public clone(): ImageProcessingConfiguration {\r\n return SerializationHelper.Clone(() => new ImageProcessingConfiguration(), this);\r\n }\r\n\r\n /**\r\n * Serializes the current image processing instance to a json representation.\r\n * @returns a JSON representation\r\n */\r\n public serialize(): any {\r\n return SerializationHelper.Serialize(this);\r\n }\r\n\r\n // Static constants associated to the image processing.\r\n private static _VIGNETTEMODE_MULTIPLY = 0;\r\n private static _VIGNETTEMODE_OPAQUE = 1;\r\n\r\n /**\r\n * Used to apply the vignette as a mix with the pixel color.\r\n */\r\n public static get VIGNETTEMODE_MULTIPLY(): number {\r\n return this._VIGNETTEMODE_MULTIPLY;\r\n }\r\n\r\n /**\r\n * Used to apply the vignette as a replacement of the pixel color.\r\n */\r\n public static get VIGNETTEMODE_OPAQUE(): number {\r\n return this._VIGNETTEMODE_OPAQUE;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n\r\n/**\r\n * Parses the image processing from a json representation.\r\n * @param source the JSON source to parse\r\n * @returns The parsed image processing\r\n */\r\nexport function ImageProcessingConfigurationParse(source: any): ImageProcessingConfiguration {\r\n const parsed = SerializationHelper.Parse(() => new ImageProcessingConfiguration(), source, null, null);\r\n // Backward compatibility\r\n if (source.vignetteCentreX !== undefined) {\r\n parsed.vignetteCenterX = source.vignetteCentreX;\r\n }\r\n if (source.vignetteCentreY !== undefined) {\r\n parsed.vignetteCenterY = source.vignetteCentreY;\r\n }\r\n\r\n return parsed;\r\n}\r\n\r\n/**\r\n * Register side effects for imageProcessingConfiguration.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterImageProcessingConfiguration(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n // References the dependencies.\r\n ImageProcessingConfiguration.Parse = ImageProcessingConfigurationParse;\r\n\r\n SerializationHelper._ImageProcessingConfigurationParser = ImageProcessingConfigurationParse;\r\n\r\n // Register Class Name\r\n RegisterClass(\"BABYLON.ImageProcessingConfiguration\", ImageProcessingConfiguration);\r\n}\r\n"]}
@@ -1,5 +1,16 @@
1
1
  import { type MaterialDefines, type Effect, type Mesh, type AbstractMesh, type Material } from "../index.js";
2
2
  import { Matrix } from "../Maths/math.vector.pure.js";
3
+ /**
4
+ * Provides the object ID written by geometry rendering for a mesh.
5
+ *
6
+ * IDs must be unsigned integers supported by the object ID texture format. ID 0 is reserved for background or excluded meshes.
7
+ * RGBA textures support IDs up to 0xFFFFFF, while RED textures support IDs up to 0xFF.
8
+ * This callback runs in the render hot path and may be called multiple times for the same mesh in a frame.
9
+ * It should avoid allocations and return a consistent value for a mesh during a render.
10
+ */
11
+ export type GeometryRenderingObjectIdProvider = (mesh: AbstractMesh) => number;
12
+ /** @internal */
13
+ export declare function _GetGeometryRenderingObjectId(mesh: AbstractMesh, provider: GeometryRenderingObjectIdProvider, maxObjectId?: number): number;
3
14
  /**
4
15
  * Type of clear operation to perform on a geometry texture.
5
16
  */
@@ -64,6 +75,14 @@ export type GeometryRenderingConfiguration = {
64
75
  * Whether to reverse culling for the geometry rendering (meaning, if back faces should be culled, front faces are culled instead, and the other way around).
65
76
  */
66
77
  reverseCulling: boolean;
78
+ /**
79
+ * Provides the object ID written for each rendered mesh.
80
+ */
81
+ objectIdProvider?: GeometryRenderingObjectIdProvider;
82
+ /**
83
+ * Whether the object ID texture uses the RED format.
84
+ */
85
+ objectIdIsRedFormat: boolean;
67
86
  };
68
87
  /**
69
88
  * Helper class to manage geometry rendering.
@@ -1,5 +1,13 @@
1
1
 
2
2
  import { Matrix } from "../Maths/math.vector.pure.js";
3
+ /** @internal */
4
+ export function _GetGeometryRenderingObjectId(mesh, provider, maxObjectId = 0xffffff) {
5
+ const objectId = provider(mesh);
6
+ if (!Number.isInteger(objectId) || objectId < 0 || objectId > maxObjectId) {
7
+ throw new Error(`Invalid geometry object ID ${objectId} for mesh "${mesh.name}". Object IDs must be integers between 0 and 0x${maxObjectId.toString(16).toUpperCase()}.`);
8
+ }
9
+ return objectId;
10
+ }
3
11
  /**
4
12
  * Type of clear operation to perform on a geometry texture.
5
13
  */
@@ -41,6 +49,7 @@ export class MaterialHelperGeometryRendering {
41
49
  lastUpdateFrameId: -1,
42
50
  excludedSkinnedMesh: [],
43
51
  reverseCulling: false,
52
+ objectIdIsRedFormat: false,
44
53
  };
45
54
  return MaterialHelperGeometryRendering._Configurations[renderPassId];
46
55
  }
@@ -65,7 +74,7 @@ export class MaterialHelperGeometryRendering {
65
74
  * @param _samplers The array of samplers to add to.
66
75
  */
67
76
  static AddUniformsAndSamplers(uniforms, _samplers) {
68
- uniforms.push("previousWorld", "previousViewProjection", "mPreviousBones");
77
+ uniforms.push("previousWorld", "previousViewProjection", "mPreviousBones", "objectId");
69
78
  }
70
79
  /**
71
80
  * Marks a list of meshes as dirty for geometry rendering.
@@ -113,6 +122,7 @@ export class MaterialHelperGeometryRendering {
113
122
  delete defines[defineIndex];
114
123
  }
115
124
  }
125
+ defines["PREPASS_OBJECT_ID_R8"] = configuration.objectIdIsRedFormat;
116
126
  defines["SCENE_MRT_COUNT"] = numMRT;
117
127
  defines["BONES_VELOCITY_ENABLED"] =
118
128
  mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton && !mesh.skeleton.isUsingTextureForMatrices && configuration.excludedSkinnedMesh.indexOf(mesh) === -1;
@@ -135,6 +145,17 @@ export class MaterialHelperGeometryRendering {
135
145
  if (configuration.reverseCulling) {
136
146
  engine.setStateCullFaceType(scene._mirroredCameraPosition ? material.cullBackFaces : !material.cullBackFaces);
137
147
  }
148
+ if (configuration.defines["PREPASS_OBJECT_ID_INDEX"] !== undefined) {
149
+ const maxObjectId = configuration.objectIdIsRedFormat ? 0xff : 0xffffff;
150
+ let objectId = mesh.uniqueId;
151
+ if (configuration.objectIdProvider) {
152
+ objectId = _GetGeometryRenderingObjectId(mesh, configuration.objectIdProvider, maxObjectId);
153
+ }
154
+ else if (objectId > maxObjectId) {
155
+ throw new Error(`Invalid geometry object ID ${objectId} for mesh "${mesh.name}". Object IDs must be integers between 0 and 0x${maxObjectId.toString(16).toUpperCase()}.`);
156
+ }
157
+ effect.setFloat("objectId", objectId);
158
+ }
138
159
  if (configuration.defines["PREPASS_VELOCITY_INDEX"] !== undefined || configuration.defines["PREPASS_VELOCITY_LINEAR_INDEX"] !== undefined) {
139
160
  if (!configuration.previousWorldMatrices[mesh.uniqueId]) {
140
161
  configuration.previousWorldMatrices[mesh.uniqueId] = world.clone();
@@ -282,6 +303,13 @@ MaterialHelperGeometryRendering.GeometryTextureDescriptions = [
282
303
  define: "PREPASS_IRRADIANCE",
283
304
  defineIndex: "PREPASS_IRRADIANCE_INDEX",
284
305
  },
306
+ {
307
+ type: 15,
308
+ name: "ObjectId",
309
+ clearType: 0 /* GeometryRenderingTextureClearType.Zero */,
310
+ define: "PREPASS_OBJECT_ID",
311
+ defineIndex: "PREPASS_OBJECT_ID_INDEX",
312
+ },
285
313
  ];
286
314
  MaterialHelperGeometryRendering._Configurations = {};
287
315
  //# sourceMappingURL=materialHelper.geometryrendering.js.map