@babylonjs/core 6.45.0 → 6.46.0

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 (235) hide show
  1. package/Animations/animation.js +1 -1
  2. package/Animations/animation.js.map +1 -1
  3. package/BakedVertexAnimation/bakedVertexAnimationManager.js +2 -1
  4. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
  5. package/Bones/skeleton.js +2 -2
  6. package/Bones/skeleton.js.map +1 -1
  7. package/Cameras/camera.d.ts +3 -3
  8. package/Cameras/camera.js +2 -1
  9. package/Cameras/camera.js.map +1 -1
  10. package/Cameras/cameraInputsManager.js +1 -1
  11. package/Cameras/cameraInputsManager.js.map +1 -1
  12. package/Cameras/targetCamera.js +4 -0
  13. package/Cameras/targetCamera.js.map +1 -1
  14. package/Compute/computeShader.d.ts +4 -2
  15. package/Compute/computeShader.js +7 -3
  16. package/Compute/computeShader.js.map +1 -1
  17. package/Debug/directionalLightFrustumViewer.js +6 -6
  18. package/Debug/directionalLightFrustumViewer.js.map +1 -1
  19. package/Engines/Extensions/engine.computeShader.d.ts +2 -1
  20. package/Engines/Extensions/engine.computeShader.js +1 -0
  21. package/Engines/Extensions/engine.computeShader.js.map +1 -1
  22. package/Engines/Extensions/engine.rawTexture.js +3 -3
  23. package/Engines/Extensions/engine.rawTexture.js.map +1 -1
  24. package/Engines/Native/nativePipelineContext.js +1 -1
  25. package/Engines/Native/nativePipelineContext.js.map +1 -1
  26. package/Engines/WebGL/webGLPipelineContext.js +1 -1
  27. package/Engines/WebGL/webGLPipelineContext.js.map +1 -1
  28. package/Engines/WebGPU/webgpuComputeContext.js +7 -3
  29. package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
  30. package/Engines/engine.d.ts +1 -1
  31. package/Engines/thinEngine.js +2 -2
  32. package/Engines/thinEngine.js.map +1 -1
  33. package/Engines/webgpuEngine.js +2 -15
  34. package/Engines/webgpuEngine.js.map +1 -1
  35. package/Layers/glowLayer.js +2 -1
  36. package/Layers/glowLayer.js.map +1 -1
  37. package/Layers/highlightLayer.js +2 -1
  38. package/Layers/highlightLayer.js.map +1 -1
  39. package/Lights/light.js +2 -1
  40. package/Lights/light.js.map +1 -1
  41. package/Loading/Plugins/babylonFileLoader.js +9 -0
  42. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  43. package/Loading/sceneLoader.d.ts +6 -1
  44. package/Loading/sceneLoader.js +6 -5
  45. package/Loading/sceneLoader.js.map +1 -1
  46. package/Materials/Background/backgroundMaterial.js +2 -1
  47. package/Materials/Background/backgroundMaterial.js.map +1 -1
  48. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +1 -1
  49. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  50. package/Materials/Node/nodeMaterial.d.ts +2 -1
  51. package/Materials/Node/nodeMaterial.js +5 -1
  52. package/Materials/Node/nodeMaterial.js.map +1 -1
  53. package/Materials/PBR/pbrBaseMaterial.d.ts +1 -1
  54. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  55. package/Materials/PBR/pbrMaterial.js +2 -1
  56. package/Materials/PBR/pbrMaterial.js.map +1 -1
  57. package/Materials/PBR/pbrMetallicRoughnessMaterial.js +2 -1
  58. package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
  59. package/Materials/PBR/pbrSpecularGlossinessMaterial.js +2 -1
  60. package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
  61. package/Materials/Textures/baseTexture.js +2 -1
  62. package/Materials/Textures/baseTexture.js.map +1 -1
  63. package/Materials/Textures/cubeTexture.js +2 -1
  64. package/Materials/Textures/cubeTexture.js.map +1 -1
  65. package/Materials/Textures/rawCubeTexture.js +1 -1
  66. package/Materials/Textures/rawCubeTexture.js.map +1 -1
  67. package/Materials/Textures/texture.js +2 -1
  68. package/Materials/Textures/texture.js.map +1 -1
  69. package/Materials/colorCurves.d.ts +1 -1
  70. package/Materials/colorCurves.functions.d.ts +5 -0
  71. package/Materials/colorCurves.functions.js +8 -0
  72. package/Materials/colorCurves.functions.js.map +1 -0
  73. package/Materials/colorCurves.js +8 -8
  74. package/Materials/colorCurves.js.map +1 -1
  75. package/Materials/fresnelParameters.js +1 -1
  76. package/Materials/fresnelParameters.js.map +1 -1
  77. package/Materials/imageProcessingConfiguration.d.ts +3 -48
  78. package/Materials/imageProcessingConfiguration.defines.d.ts +46 -0
  79. package/Materials/imageProcessingConfiguration.defines.js +27 -0
  80. package/Materials/imageProcessingConfiguration.defines.js.map +1 -0
  81. package/Materials/imageProcessingConfiguration.functions.d.ts +13 -0
  82. package/Materials/imageProcessingConfiguration.functions.js +41 -0
  83. package/Materials/imageProcessingConfiguration.functions.js.map +1 -0
  84. package/Materials/imageProcessingConfiguration.js +18 -69
  85. package/Materials/imageProcessingConfiguration.js.map +1 -1
  86. package/Materials/material.js +2 -1
  87. package/Materials/material.js.map +1 -1
  88. package/Materials/materialHelper.d.ts +33 -33
  89. package/Materials/materialHelper.js +244 -286
  90. package/Materials/materialHelper.js.map +1 -1
  91. package/Materials/materialPluginBase.js +2 -1
  92. package/Materials/materialPluginBase.js.map +1 -1
  93. package/Materials/materialStencilState.js +2 -1
  94. package/Materials/materialStencilState.js.map +1 -1
  95. package/Materials/shaderMaterial.js +1 -1
  96. package/Materials/shaderMaterial.js.map +1 -1
  97. package/Materials/standardMaterial.d.ts +1 -1
  98. package/Materials/standardMaterial.js +2 -1
  99. package/Materials/standardMaterial.js.map +1 -1
  100. package/Materials/uniformBuffer.js +2 -2
  101. package/Materials/uniformBuffer.js.map +1 -1
  102. package/Maths/math.color.d.ts +392 -66
  103. package/Maths/math.color.js +541 -65
  104. package/Maths/math.color.js.map +1 -1
  105. package/Maths/math.like.d.ts +17 -28
  106. package/Maths/math.like.js.map +1 -1
  107. package/Maths/math.plane.d.ts +2 -1
  108. package/Maths/math.plane.js.map +1 -1
  109. package/Maths/math.polar.d.ts +1 -1
  110. package/Maths/math.polar.js.map +1 -1
  111. package/Maths/math.scalar.d.ts +6 -6
  112. package/Maths/math.scalar.functions.d.ts +51 -0
  113. package/Maths/math.scalar.functions.js +80 -0
  114. package/Maths/math.scalar.functions.js.map +1 -0
  115. package/Maths/math.scalar.js +48 -73
  116. package/Maths/math.scalar.js.map +1 -1
  117. package/Maths/math.vector.d.ts +571 -72
  118. package/Maths/math.vector.js +917 -119
  119. package/Maths/math.vector.js.map +1 -1
  120. package/Maths/math.viewport.d.ts +2 -1
  121. package/Maths/math.viewport.js.map +1 -1
  122. package/Maths/tensor.d.ts +411 -0
  123. package/Maths/tensor.js +3 -0
  124. package/Maths/tensor.js.map +1 -0
  125. package/Meshes/Node/Blocks/Set/setColorsBlock.js +20 -4
  126. package/Meshes/Node/Blocks/Set/setColorsBlock.js.map +1 -1
  127. package/Meshes/Node/nodeGeometry.js +2 -1
  128. package/Meshes/Node/nodeGeometry.js.map +1 -1
  129. package/Meshes/mesh.js +2 -2
  130. package/Meshes/mesh.js.map +1 -1
  131. package/Meshes/mesh.vertexData.d.ts +4 -0
  132. package/Meshes/mesh.vertexData.js +10 -0
  133. package/Meshes/mesh.vertexData.js.map +1 -1
  134. package/Meshes/transformNode.js +2 -1
  135. package/Meshes/transformNode.js.map +1 -1
  136. package/Misc/arrayTools.d.ts +2 -19
  137. package/Misc/arrayTools.js.map +1 -1
  138. package/Misc/decorators.d.ts +0 -80
  139. package/Misc/decorators.functions.d.ts +7 -0
  140. package/Misc/decorators.functions.js +52 -0
  141. package/Misc/decorators.functions.js.map +1 -0
  142. package/Misc/decorators.js +2 -318
  143. package/Misc/decorators.js.map +1 -1
  144. package/Misc/decorators.serialization.d.ts +81 -0
  145. package/Misc/decorators.serialization.js +269 -0
  146. package/Misc/decorators.serialization.js.map +1 -0
  147. package/Misc/index.d.ts +1 -0
  148. package/Misc/index.js +1 -0
  149. package/Misc/index.js.map +1 -1
  150. package/Misc/sceneRecorder.js +1 -1
  151. package/Misc/sceneRecorder.js.map +1 -1
  152. package/Misc/sceneSerializer.js +8 -1
  153. package/Misc/sceneSerializer.js.map +1 -1
  154. package/Misc/tools.functions.d.ts +14 -0
  155. package/Misc/tools.functions.js +23 -0
  156. package/Misc/tools.functions.js.map +1 -0
  157. package/Misc/tools.js +5 -6
  158. package/Misc/tools.js.map +1 -1
  159. package/Morph/morphTarget.js +2 -1
  160. package/Morph/morphTarget.js.map +1 -1
  161. package/Particles/EmitterTypes/boxParticleEmitter.js +8 -8
  162. package/Particles/EmitterTypes/boxParticleEmitter.js.map +1 -1
  163. package/Particles/baseParticleSystem.d.ts +8 -11
  164. package/Particles/baseParticleSystem.js +9 -40
  165. package/Particles/baseParticleSystem.js.map +1 -1
  166. package/Particles/gpuParticleSystem.d.ts +71 -1
  167. package/Particles/gpuParticleSystem.js +102 -1
  168. package/Particles/gpuParticleSystem.js.map +1 -1
  169. package/Particles/particle.d.ts +3 -3
  170. package/Particles/particle.js +3 -3
  171. package/Particles/particle.js.map +1 -1
  172. package/Particles/particleSystem.d.ts +81 -455
  173. package/Particles/particleSystem.functions.d.ts +61 -0
  174. package/Particles/particleSystem.functions.js +79 -0
  175. package/Particles/particleSystem.functions.js.map +1 -0
  176. package/Particles/particleSystem.js +390 -1984
  177. package/Particles/particleSystem.js.map +1 -1
  178. package/Particles/thinParticleSystem.d.ts +485 -0
  179. package/Particles/thinParticleSystem.js +1768 -0
  180. package/Particles/thinParticleSystem.js.map +1 -0
  181. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js +2 -1
  182. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  183. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +2 -1
  184. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  185. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js +2 -1
  186. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  187. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +2 -1
  188. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  189. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js +2 -1
  190. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js.map +1 -1
  191. package/PostProcesses/blackAndWhitePostProcess.js +2 -1
  192. package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
  193. package/PostProcesses/blurPostProcess.js +2 -1
  194. package/PostProcesses/blurPostProcess.js.map +1 -1
  195. package/PostProcesses/chromaticAberrationPostProcess.js +2 -1
  196. package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
  197. package/PostProcesses/colorCorrectionPostProcess.js +2 -1
  198. package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
  199. package/PostProcesses/convolutionPostProcess.js +2 -1
  200. package/PostProcesses/convolutionPostProcess.js.map +1 -1
  201. package/PostProcesses/displayPassPostProcess.js +1 -1
  202. package/PostProcesses/displayPassPostProcess.js.map +1 -1
  203. package/PostProcesses/filterPostProcess.js +2 -1
  204. package/PostProcesses/filterPostProcess.js.map +1 -1
  205. package/PostProcesses/fxaaPostProcess.js +1 -1
  206. package/PostProcesses/fxaaPostProcess.js.map +1 -1
  207. package/PostProcesses/grainPostProcess.js +2 -1
  208. package/PostProcesses/grainPostProcess.js.map +1 -1
  209. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  210. package/PostProcesses/motionBlurPostProcess.js +2 -1
  211. package/PostProcesses/motionBlurPostProcess.js.map +1 -1
  212. package/PostProcesses/passPostProcess.js +1 -1
  213. package/PostProcesses/passPostProcess.js.map +1 -1
  214. package/PostProcesses/postProcess.js +2 -1
  215. package/PostProcesses/postProcess.js.map +1 -1
  216. package/PostProcesses/refractionPostProcess.js +2 -1
  217. package/PostProcesses/refractionPostProcess.js.map +1 -1
  218. package/PostProcesses/screenSpaceCurvaturePostProcess.js +2 -1
  219. package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
  220. package/PostProcesses/screenSpaceReflectionPostProcess.js +2 -1
  221. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  222. package/PostProcesses/sharpenPostProcess.js +2 -1
  223. package/PostProcesses/sharpenPostProcess.js.map +1 -1
  224. package/Probes/reflectionProbe.js +2 -1
  225. package/Probes/reflectionProbe.js.map +1 -1
  226. package/Sprites/spriteManager.d.ts +4 -0
  227. package/Sprites/spriteManager.js.map +1 -1
  228. package/XR/features/WebXRControllerTeleportation.d.ts +9 -0
  229. package/XR/features/WebXRControllerTeleportation.js +75 -31
  230. package/XR/features/WebXRControllerTeleportation.js.map +1 -1
  231. package/node.js +2 -1
  232. package/node.js.map +1 -1
  233. package/package.json +1 -1
  234. package/types.d.ts +105 -0
  235. package/types.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"colorCurves.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/colorCurves.ts"],"names":[],"mappings":"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","sourcesContent":["import { SerializationHelper, serialize } from \"../Misc/decorators\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport type { Effect } from \"../Materials/effect\";\r\n\r\n/**\r\n * The color grading curves provide additional color adjustment that is applied after any color grading transform (3D LUT).\r\n * They allow basic adjustment of saturation and small exposure adjustments, along with color filter tinting to provide white balance adjustment or more stylistic effects.\r\n * These are similar to controls found in many professional imaging or colorist software. The global controls are applied to the entire image. For advanced tuning, extra controls are provided to adjust the shadow, midtone and highlight areas of the image;\r\n * corresponding to low luminance, medium luminance, and high luminance areas respectively.\r\n */\r\nexport class ColorCurves {\r\n private _dirty = true;\r\n\r\n private _tempColor = new Color4(0, 0, 0, 0);\r\n\r\n private _globalCurve = new Color4(0, 0, 0, 0);\r\n private _highlightsCurve = new Color4(0, 0, 0, 0);\r\n private _midtonesCurve = new Color4(0, 0, 0, 0);\r\n private _shadowsCurve = new Color4(0, 0, 0, 0);\r\n\r\n private _positiveCurve = new Color4(0, 0, 0, 0);\r\n private _negativeCurve = new Color4(0, 0, 0, 0);\r\n\r\n @serialize()\r\n private _globalHue = 30;\r\n\r\n @serialize()\r\n private _globalDensity = 0;\r\n\r\n @serialize()\r\n private _globalSaturation = 0;\r\n\r\n @serialize()\r\n private _globalExposure = 0;\r\n\r\n /**\r\n * Gets the global Hue value.\r\n * The hue value is a standard HSB hue in the range [0,360] where 0=red, 120=green and 240=blue. The default value is 30 degrees (orange).\r\n */\r\n public get globalHue(): number {\r\n return this._globalHue;\r\n }\r\n /**\r\n * Sets the global Hue value.\r\n * The hue value is a standard HSB hue in the range [0,360] where 0=red, 120=green and 240=blue. The default value is 30 degrees (orange).\r\n */\r\n public set globalHue(value: number) {\r\n this._globalHue = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the global Density value.\r\n * The density value is in range [-100,+100] where 0 means the color filter has no effect and +100 means the color filter has maximum effect.\r\n * Values less than zero provide a filter of opposite hue.\r\n */\r\n public get globalDensity(): number {\r\n return this._globalDensity;\r\n }\r\n /**\r\n * Sets the global Density value.\r\n * The density value is in range [-100,+100] where 0 means the color filter has no effect and +100 means the color filter has maximum effect.\r\n * Values less than zero provide a filter of opposite hue.\r\n */\r\n public set globalDensity(value: number) {\r\n this._globalDensity = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the global Saturation value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase saturation and negative values decrease saturation.\r\n */\r\n public get globalSaturation(): number {\r\n return this._globalSaturation;\r\n }\r\n /**\r\n * Sets the global Saturation value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase saturation and negative values decrease saturation.\r\n */\r\n public set globalSaturation(value: number) {\r\n this._globalSaturation = value;\r\n this._dirty = true;\r\n }\r\n\r\n /**\r\n * Gets the global Exposure value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase exposure and negative values decrease exposure.\r\n */\r\n public get globalExposure(): number {\r\n return this._globalExposure;\r\n }\r\n /**\r\n * Sets the global Exposure value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase exposure and negative values decrease exposure.\r\n */\r\n public set globalExposure(value: number) {\r\n this._globalExposure = value;\r\n this._dirty = true;\r\n }\r\n\r\n @serialize()\r\n private _highlightsHue = 30;\r\n\r\n @serialize()\r\n private _highlightsDensity = 0;\r\n\r\n @serialize()\r\n private _highlightsSaturation = 0;\r\n\r\n @serialize()\r\n private _highlightsExposure = 0;\r\n\r\n /**\r\n * Gets the highlights Hue value.\r\n * The hue value is a standard HSB hue in the range [0,360] where 0=red, 120=green and 240=blue. The default value is 30 degrees (orange).\r\n */\r\n public get highlightsHue(): number {\r\n return this._highlightsHue;\r\n }\r\n /**\r\n * Sets the highlights Hue value.\r\n * The hue value is a standard HSB hue in the range [0,360] where 0=red, 120=green and 240=blue. The default value is 30 degrees (orange).\r\n */\r\n public set highlightsHue(value: number) {\r\n this._highlightsHue = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the highlights Density value.\r\n * The density value is in range [-100,+100] where 0 means the color filter has no effect and +100 means the color filter has maximum effect.\r\n * Values less than zero provide a filter of opposite hue.\r\n */\r\n public get highlightsDensity(): number {\r\n return this._highlightsDensity;\r\n }\r\n /**\r\n * Sets the highlights Density value.\r\n * The density value is in range [-100,+100] where 0 means the color filter has no effect and +100 means the color filter has maximum effect.\r\n * Values less than zero provide a filter of opposite hue.\r\n */\r\n public set highlightsDensity(value: number) {\r\n this._highlightsDensity = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the highlights Saturation value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase saturation and negative values decrease saturation.\r\n */\r\n public get highlightsSaturation(): number {\r\n return this._highlightsSaturation;\r\n }\r\n /**\r\n * Sets the highlights Saturation value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase saturation and negative values decrease saturation.\r\n */\r\n public set highlightsSaturation(value: number) {\r\n this._highlightsSaturation = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the highlights Exposure value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase exposure and negative values decrease exposure.\r\n */\r\n public get highlightsExposure(): number {\r\n return this._highlightsExposure;\r\n }\r\n /**\r\n * Sets the highlights Exposure value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase exposure and negative values decrease exposure.\r\n */\r\n public set highlightsExposure(value: number) {\r\n this._highlightsExposure = value;\r\n this._dirty = true;\r\n }\r\n\r\n @serialize()\r\n private _midtonesHue = 30;\r\n\r\n @serialize()\r\n private _midtonesDensity = 0;\r\n\r\n @serialize()\r\n private _midtonesSaturation = 0;\r\n\r\n @serialize()\r\n private _midtonesExposure = 0;\r\n\r\n /**\r\n * Gets the midtones Hue value.\r\n * The hue value is a standard HSB hue in the range [0,360] where 0=red, 120=green and 240=blue. The default value is 30 degrees (orange).\r\n */\r\n public get midtonesHue(): number {\r\n return this._midtonesHue;\r\n }\r\n /**\r\n * Sets the midtones Hue value.\r\n * The hue value is a standard HSB hue in the range [0,360] where 0=red, 120=green and 240=blue. The default value is 30 degrees (orange).\r\n */\r\n public set midtonesHue(value: number) {\r\n this._midtonesHue = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the midtones Density value.\r\n * The density value is in range [-100,+100] where 0 means the color filter has no effect and +100 means the color filter has maximum effect.\r\n * Values less than zero provide a filter of opposite hue.\r\n */\r\n public get midtonesDensity(): number {\r\n return this._midtonesDensity;\r\n }\r\n /**\r\n * Sets the midtones Density value.\r\n * The density value is in range [-100,+100] where 0 means the color filter has no effect and +100 means the color filter has maximum effect.\r\n * Values less than zero provide a filter of opposite hue.\r\n */\r\n public set midtonesDensity(value: number) {\r\n this._midtonesDensity = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the midtones Saturation value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase saturation and negative values decrease saturation.\r\n */\r\n public get midtonesSaturation(): number {\r\n return this._midtonesSaturation;\r\n }\r\n /**\r\n * Sets the midtones Saturation value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase saturation and negative values decrease saturation.\r\n */\r\n public set midtonesSaturation(value: number) {\r\n this._midtonesSaturation = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the midtones Exposure value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase exposure and negative values decrease exposure.\r\n */\r\n public get midtonesExposure(): number {\r\n return this._midtonesExposure;\r\n }\r\n /**\r\n * Sets the midtones Exposure value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase exposure and negative values decrease exposure.\r\n */\r\n public set midtonesExposure(value: number) {\r\n this._midtonesExposure = value;\r\n this._dirty = true;\r\n }\r\n\r\n private _shadowsHue = 30;\r\n private _shadowsDensity = 0;\r\n private _shadowsSaturation = 0;\r\n private _shadowsExposure = 0;\r\n\r\n /**\r\n * Gets the shadows Hue value.\r\n * The hue value is a standard HSB hue in the range [0,360] where 0=red, 120=green and 240=blue. The default value is 30 degrees (orange).\r\n */\r\n public get shadowsHue(): number {\r\n return this._shadowsHue;\r\n }\r\n /**\r\n * Sets the shadows Hue value.\r\n * The hue value is a standard HSB hue in the range [0,360] where 0=red, 120=green and 240=blue. The default value is 30 degrees (orange).\r\n */\r\n public set shadowsHue(value: number) {\r\n this._shadowsHue = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the shadows Density value.\r\n * The density value is in range [-100,+100] where 0 means the color filter has no effect and +100 means the color filter has maximum effect.\r\n * Values less than zero provide a filter of opposite hue.\r\n */\r\n public get shadowsDensity(): number {\r\n return this._shadowsDensity;\r\n }\r\n /**\r\n * Sets the shadows Density value.\r\n * The density value is in range [-100,+100] where 0 means the color filter has no effect and +100 means the color filter has maximum effect.\r\n * Values less than zero provide a filter of opposite hue.\r\n */\r\n public set shadowsDensity(value: number) {\r\n this._shadowsDensity = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the shadows Saturation value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase saturation and negative values decrease saturation.\r\n */\r\n public get shadowsSaturation(): number {\r\n return this._shadowsSaturation;\r\n }\r\n /**\r\n * Sets the shadows Saturation value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase saturation and negative values decrease saturation.\r\n */\r\n public set shadowsSaturation(value: number) {\r\n this._shadowsSaturation = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the shadows Exposure value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase exposure and negative values decrease exposure.\r\n */\r\n public get shadowsExposure(): number {\r\n return this._shadowsExposure;\r\n }\r\n /**\r\n * Sets the shadows Exposure value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase exposure and negative values decrease exposure.\r\n */\r\n public set shadowsExposure(value: number) {\r\n this._shadowsExposure = value;\r\n this._dirty = true;\r\n }\r\n\r\n /**\r\n * Returns the class name\r\n * @returns The class name\r\n */\r\n public getClassName(): string {\r\n return \"ColorCurves\";\r\n }\r\n\r\n /**\r\n * Binds the color curves to the shader.\r\n * @param colorCurves The color curve to bind\r\n * @param effect The effect to bind to\r\n * @param positiveUniform The positive uniform shader parameter\r\n * @param neutralUniform The neutral uniform shader parameter\r\n * @param negativeUniform The negative uniform shader parameter\r\n */\r\n public static Bind(\r\n colorCurves: ColorCurves,\r\n effect: Effect,\r\n positiveUniform = \"vCameraColorCurvePositive\",\r\n neutralUniform = \"vCameraColorCurveNeutral\",\r\n negativeUniform = \"vCameraColorCurveNegative\"\r\n ): void {\r\n if (colorCurves._dirty) {\r\n colorCurves._dirty = false;\r\n\r\n // Fill in global info.\r\n colorCurves._getColorGradingDataToRef(\r\n colorCurves._globalHue,\r\n colorCurves._globalDensity,\r\n colorCurves._globalSaturation,\r\n colorCurves._globalExposure,\r\n colorCurves._globalCurve\r\n );\r\n\r\n // Compute highlights info.\r\n colorCurves._getColorGradingDataToRef(\r\n colorCurves._highlightsHue,\r\n colorCurves._highlightsDensity,\r\n colorCurves._highlightsSaturation,\r\n colorCurves._highlightsExposure,\r\n colorCurves._tempColor\r\n );\r\n colorCurves._tempColor.multiplyToRef(colorCurves._globalCurve, colorCurves._highlightsCurve);\r\n\r\n // Compute midtones info.\r\n colorCurves._getColorGradingDataToRef(\r\n colorCurves._midtonesHue,\r\n colorCurves._midtonesDensity,\r\n colorCurves._midtonesSaturation,\r\n colorCurves._midtonesExposure,\r\n colorCurves._tempColor\r\n );\r\n colorCurves._tempColor.multiplyToRef(colorCurves._globalCurve, colorCurves._midtonesCurve);\r\n\r\n // Compute shadows info.\r\n colorCurves._getColorGradingDataToRef(\r\n colorCurves._shadowsHue,\r\n colorCurves._shadowsDensity,\r\n colorCurves._shadowsSaturation,\r\n colorCurves._shadowsExposure,\r\n colorCurves._tempColor\r\n );\r\n colorCurves._tempColor.multiplyToRef(colorCurves._globalCurve, colorCurves._shadowsCurve);\r\n\r\n // Compute deltas (neutral is midtones).\r\n colorCurves._highlightsCurve.subtractToRef(colorCurves._midtonesCurve, colorCurves._positiveCurve);\r\n colorCurves._midtonesCurve.subtractToRef(colorCurves._shadowsCurve, colorCurves._negativeCurve);\r\n }\r\n\r\n if (effect) {\r\n effect.setFloat4(positiveUniform, colorCurves._positiveCurve.r, colorCurves._positiveCurve.g, colorCurves._positiveCurve.b, colorCurves._positiveCurve.a);\r\n effect.setFloat4(neutralUniform, colorCurves._midtonesCurve.r, colorCurves._midtonesCurve.g, colorCurves._midtonesCurve.b, colorCurves._midtonesCurve.a);\r\n effect.setFloat4(negativeUniform, colorCurves._negativeCurve.r, colorCurves._negativeCurve.g, colorCurves._negativeCurve.b, colorCurves._negativeCurve.a);\r\n }\r\n }\r\n\r\n /**\r\n * Prepare the list of uniforms associated with the ColorCurves effects.\r\n * @param uniformsList The list of uniforms used in the effect\r\n */\r\n public static PrepareUniforms(uniformsList: string[]): void {\r\n uniformsList.push(\"vCameraColorCurveNeutral\", \"vCameraColorCurvePositive\", \"vCameraColorCurveNegative\");\r\n }\r\n\r\n /**\r\n * Returns color grading data based on a hue, density, saturation and exposure value.\r\n * @param hue\r\n * @param density\r\n * @param saturation The saturation.\r\n * @param exposure The exposure.\r\n * @param result The result data container.\r\n */\r\n private _getColorGradingDataToRef(hue: number, density: number, saturation: number, exposure: number, result: Color4): void {\r\n if (hue == null) {\r\n return;\r\n }\r\n\r\n hue = ColorCurves._Clamp(hue, 0, 360);\r\n density = ColorCurves._Clamp(density, -100, 100);\r\n saturation = ColorCurves._Clamp(saturation, -100, 100);\r\n exposure = ColorCurves._Clamp(exposure, -100, 100);\r\n\r\n // Remap the slider/config filter density with non-linear mapping and also scale by half\r\n // so that the maximum filter density is only 50% control. This provides fine control\r\n // for small values and reasonable range.\r\n density = ColorCurves._ApplyColorGradingSliderNonlinear(density);\r\n density *= 0.5;\r\n\r\n exposure = ColorCurves._ApplyColorGradingSliderNonlinear(exposure);\r\n\r\n if (density < 0) {\r\n density *= -1;\r\n hue = (hue + 180) % 360;\r\n }\r\n\r\n ColorCurves._FromHSBToRef(hue, density, 50 + 0.25 * exposure, result);\r\n result.scaleToRef(2, result);\r\n result.a = 1 + 0.01 * saturation;\r\n }\r\n\r\n /**\r\n * Takes an input slider value and returns an adjusted value that provides extra control near the centre.\r\n * @param value The input slider value in range [-100,100].\r\n * @returns Adjusted value.\r\n */\r\n private static _ApplyColorGradingSliderNonlinear(value: number): number {\r\n value /= 100;\r\n\r\n let x: number = Math.abs(value);\r\n x = Math.pow(x, 2);\r\n\r\n if (value < 0) {\r\n x *= -1;\r\n }\r\n\r\n x *= 100;\r\n\r\n return x;\r\n }\r\n\r\n /**\r\n * Returns an RGBA Color4 based on Hue, Saturation and Brightness (also referred to as value, HSV).\r\n * @param hue The hue (H) input.\r\n * @param saturation The saturation (S) input.\r\n * @param brightness The brightness (B) input.\r\n * @param result\r\n * @result An RGBA color represented as Vector4.\r\n */\r\n private static _FromHSBToRef(hue: number, saturation: number, brightness: number, result: Color4): void {\r\n let h: number = ColorCurves._Clamp(hue, 0, 360);\r\n const s: number = ColorCurves._Clamp(saturation / 100, 0, 1);\r\n const v: number = ColorCurves._Clamp(brightness / 100, 0, 1);\r\n\r\n if (s === 0) {\r\n result.r = v;\r\n result.g = v;\r\n result.b = v;\r\n } else {\r\n // sector 0 to 5\r\n h /= 60;\r\n const i = Math.floor(h);\r\n\r\n // fractional part of h\r\n const f = h - i;\r\n const p = v * (1 - s);\r\n const q = v * (1 - s * f);\r\n const t = v * (1 - s * (1 - f));\r\n\r\n switch (i) {\r\n case 0:\r\n result.r = v;\r\n result.g = t;\r\n result.b = p;\r\n break;\r\n case 1:\r\n result.r = q;\r\n result.g = v;\r\n result.b = p;\r\n break;\r\n case 2:\r\n result.r = p;\r\n result.g = v;\r\n result.b = t;\r\n break;\r\n case 3:\r\n result.r = p;\r\n result.g = q;\r\n result.b = v;\r\n break;\r\n case 4:\r\n result.r = t;\r\n result.g = p;\r\n result.b = v;\r\n break;\r\n default:\r\n // case 5:\r\n result.r = v;\r\n result.g = p;\r\n result.b = q;\r\n break;\r\n }\r\n }\r\n\r\n result.a = 1;\r\n }\r\n\r\n /**\r\n * Returns a value clamped between min and max\r\n * @param value The value to clamp\r\n * @param min The minimum of value\r\n * @param max The maximum of value\r\n * @returns The clamped value.\r\n */\r\n private static _Clamp(value: number, min: number, max: number): number {\r\n return Math.min(Math.max(value, min), max);\r\n }\r\n\r\n /**\r\n * Clones the current color curve instance.\r\n * @returns The cloned curves\r\n */\r\n public clone(): ColorCurves {\r\n return SerializationHelper.Clone(() => new ColorCurves(), this);\r\n }\r\n\r\n /**\r\n * Serializes the current color curve 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 /**\r\n * Parses the color curve from a json representation.\r\n * @param source the JSON source to parse\r\n * @returns The parsed curves\r\n */\r\n public static Parse(source: any): ColorCurves {\r\n return SerializationHelper.Parse(() => new ColorCurves(), source, null, null);\r\n }\r\n}\r\n\r\n// References the dependencies.\r\nSerializationHelper._ColorCurvesParser = ColorCurves.Parse;\r\n"]}
1
+ {"version":3,"file":"colorCurves.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/colorCurves.ts"],"names":[],"mappings":"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","sourcesContent":["import { serialize } from \"../Misc/decorators\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport type { Effect } from \"../Materials/effect\";\r\nimport { SerializationHelper } from \"../Misc/decorators.serialization\";\r\nimport { PrepareUniformsForColorCurves } from \"./colorCurves.functions\";\r\n\r\n/**\r\n * The color grading curves provide additional color adjustment that is applied after any color grading transform (3D LUT).\r\n * They allow basic adjustment of saturation and small exposure adjustments, along with color filter tinting to provide white balance adjustment or more stylistic effects.\r\n * These are similar to controls found in many professional imaging or colorist software. The global controls are applied to the entire image. For advanced tuning, extra controls are provided to adjust the shadow, midtone and highlight areas of the image;\r\n * corresponding to low luminance, medium luminance, and high luminance areas respectively.\r\n */\r\nexport class ColorCurves {\r\n private _dirty = true;\r\n\r\n private _tempColor = new Color4(0, 0, 0, 0);\r\n\r\n private _globalCurve = new Color4(0, 0, 0, 0);\r\n private _highlightsCurve = new Color4(0, 0, 0, 0);\r\n private _midtonesCurve = new Color4(0, 0, 0, 0);\r\n private _shadowsCurve = new Color4(0, 0, 0, 0);\r\n\r\n private _positiveCurve = new Color4(0, 0, 0, 0);\r\n private _negativeCurve = new Color4(0, 0, 0, 0);\r\n\r\n @serialize()\r\n private _globalHue = 30;\r\n\r\n @serialize()\r\n private _globalDensity = 0;\r\n\r\n @serialize()\r\n private _globalSaturation = 0;\r\n\r\n @serialize()\r\n private _globalExposure = 0;\r\n\r\n /**\r\n * Gets the global Hue value.\r\n * The hue value is a standard HSB hue in the range [0,360] where 0=red, 120=green and 240=blue. The default value is 30 degrees (orange).\r\n */\r\n public get globalHue(): number {\r\n return this._globalHue;\r\n }\r\n /**\r\n * Sets the global Hue value.\r\n * The hue value is a standard HSB hue in the range [0,360] where 0=red, 120=green and 240=blue. The default value is 30 degrees (orange).\r\n */\r\n public set globalHue(value: number) {\r\n this._globalHue = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the global Density value.\r\n * The density value is in range [-100,+100] where 0 means the color filter has no effect and +100 means the color filter has maximum effect.\r\n * Values less than zero provide a filter of opposite hue.\r\n */\r\n public get globalDensity(): number {\r\n return this._globalDensity;\r\n }\r\n /**\r\n * Sets the global Density value.\r\n * The density value is in range [-100,+100] where 0 means the color filter has no effect and +100 means the color filter has maximum effect.\r\n * Values less than zero provide a filter of opposite hue.\r\n */\r\n public set globalDensity(value: number) {\r\n this._globalDensity = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the global Saturation value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase saturation and negative values decrease saturation.\r\n */\r\n public get globalSaturation(): number {\r\n return this._globalSaturation;\r\n }\r\n /**\r\n * Sets the global Saturation value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase saturation and negative values decrease saturation.\r\n */\r\n public set globalSaturation(value: number) {\r\n this._globalSaturation = value;\r\n this._dirty = true;\r\n }\r\n\r\n /**\r\n * Gets the global Exposure value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase exposure and negative values decrease exposure.\r\n */\r\n public get globalExposure(): number {\r\n return this._globalExposure;\r\n }\r\n /**\r\n * Sets the global Exposure value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase exposure and negative values decrease exposure.\r\n */\r\n public set globalExposure(value: number) {\r\n this._globalExposure = value;\r\n this._dirty = true;\r\n }\r\n\r\n @serialize()\r\n private _highlightsHue = 30;\r\n\r\n @serialize()\r\n private _highlightsDensity = 0;\r\n\r\n @serialize()\r\n private _highlightsSaturation = 0;\r\n\r\n @serialize()\r\n private _highlightsExposure = 0;\r\n\r\n /**\r\n * Gets the highlights Hue value.\r\n * The hue value is a standard HSB hue in the range [0,360] where 0=red, 120=green and 240=blue. The default value is 30 degrees (orange).\r\n */\r\n public get highlightsHue(): number {\r\n return this._highlightsHue;\r\n }\r\n /**\r\n * Sets the highlights Hue value.\r\n * The hue value is a standard HSB hue in the range [0,360] where 0=red, 120=green and 240=blue. The default value is 30 degrees (orange).\r\n */\r\n public set highlightsHue(value: number) {\r\n this._highlightsHue = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the highlights Density value.\r\n * The density value is in range [-100,+100] where 0 means the color filter has no effect and +100 means the color filter has maximum effect.\r\n * Values less than zero provide a filter of opposite hue.\r\n */\r\n public get highlightsDensity(): number {\r\n return this._highlightsDensity;\r\n }\r\n /**\r\n * Sets the highlights Density value.\r\n * The density value is in range [-100,+100] where 0 means the color filter has no effect and +100 means the color filter has maximum effect.\r\n * Values less than zero provide a filter of opposite hue.\r\n */\r\n public set highlightsDensity(value: number) {\r\n this._highlightsDensity = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the highlights Saturation value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase saturation and negative values decrease saturation.\r\n */\r\n public get highlightsSaturation(): number {\r\n return this._highlightsSaturation;\r\n }\r\n /**\r\n * Sets the highlights Saturation value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase saturation and negative values decrease saturation.\r\n */\r\n public set highlightsSaturation(value: number) {\r\n this._highlightsSaturation = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the highlights Exposure value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase exposure and negative values decrease exposure.\r\n */\r\n public get highlightsExposure(): number {\r\n return this._highlightsExposure;\r\n }\r\n /**\r\n * Sets the highlights Exposure value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase exposure and negative values decrease exposure.\r\n */\r\n public set highlightsExposure(value: number) {\r\n this._highlightsExposure = value;\r\n this._dirty = true;\r\n }\r\n\r\n @serialize()\r\n private _midtonesHue = 30;\r\n\r\n @serialize()\r\n private _midtonesDensity = 0;\r\n\r\n @serialize()\r\n private _midtonesSaturation = 0;\r\n\r\n @serialize()\r\n private _midtonesExposure = 0;\r\n\r\n /**\r\n * Gets the midtones Hue value.\r\n * The hue value is a standard HSB hue in the range [0,360] where 0=red, 120=green and 240=blue. The default value is 30 degrees (orange).\r\n */\r\n public get midtonesHue(): number {\r\n return this._midtonesHue;\r\n }\r\n /**\r\n * Sets the midtones Hue value.\r\n * The hue value is a standard HSB hue in the range [0,360] where 0=red, 120=green and 240=blue. The default value is 30 degrees (orange).\r\n */\r\n public set midtonesHue(value: number) {\r\n this._midtonesHue = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the midtones Density value.\r\n * The density value is in range [-100,+100] where 0 means the color filter has no effect and +100 means the color filter has maximum effect.\r\n * Values less than zero provide a filter of opposite hue.\r\n */\r\n public get midtonesDensity(): number {\r\n return this._midtonesDensity;\r\n }\r\n /**\r\n * Sets the midtones Density value.\r\n * The density value is in range [-100,+100] where 0 means the color filter has no effect and +100 means the color filter has maximum effect.\r\n * Values less than zero provide a filter of opposite hue.\r\n */\r\n public set midtonesDensity(value: number) {\r\n this._midtonesDensity = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the midtones Saturation value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase saturation and negative values decrease saturation.\r\n */\r\n public get midtonesSaturation(): number {\r\n return this._midtonesSaturation;\r\n }\r\n /**\r\n * Sets the midtones Saturation value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase saturation and negative values decrease saturation.\r\n */\r\n public set midtonesSaturation(value: number) {\r\n this._midtonesSaturation = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the midtones Exposure value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase exposure and negative values decrease exposure.\r\n */\r\n public get midtonesExposure(): number {\r\n return this._midtonesExposure;\r\n }\r\n /**\r\n * Sets the midtones Exposure value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase exposure and negative values decrease exposure.\r\n */\r\n public set midtonesExposure(value: number) {\r\n this._midtonesExposure = value;\r\n this._dirty = true;\r\n }\r\n\r\n private _shadowsHue = 30;\r\n private _shadowsDensity = 0;\r\n private _shadowsSaturation = 0;\r\n private _shadowsExposure = 0;\r\n\r\n /**\r\n * Gets the shadows Hue value.\r\n * The hue value is a standard HSB hue in the range [0,360] where 0=red, 120=green and 240=blue. The default value is 30 degrees (orange).\r\n */\r\n public get shadowsHue(): number {\r\n return this._shadowsHue;\r\n }\r\n /**\r\n * Sets the shadows Hue value.\r\n * The hue value is a standard HSB hue in the range [0,360] where 0=red, 120=green and 240=blue. The default value is 30 degrees (orange).\r\n */\r\n public set shadowsHue(value: number) {\r\n this._shadowsHue = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the shadows Density value.\r\n * The density value is in range [-100,+100] where 0 means the color filter has no effect and +100 means the color filter has maximum effect.\r\n * Values less than zero provide a filter of opposite hue.\r\n */\r\n public get shadowsDensity(): number {\r\n return this._shadowsDensity;\r\n }\r\n /**\r\n * Sets the shadows Density value.\r\n * The density value is in range [-100,+100] where 0 means the color filter has no effect and +100 means the color filter has maximum effect.\r\n * Values less than zero provide a filter of opposite hue.\r\n */\r\n public set shadowsDensity(value: number) {\r\n this._shadowsDensity = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the shadows Saturation value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase saturation and negative values decrease saturation.\r\n */\r\n public get shadowsSaturation(): number {\r\n return this._shadowsSaturation;\r\n }\r\n /**\r\n * Sets the shadows Saturation value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase saturation and negative values decrease saturation.\r\n */\r\n public set shadowsSaturation(value: number) {\r\n this._shadowsSaturation = value;\r\n this._dirty = true;\r\n }\r\n /**\r\n * Gets the shadows Exposure value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase exposure and negative values decrease exposure.\r\n */\r\n public get shadowsExposure(): number {\r\n return this._shadowsExposure;\r\n }\r\n /**\r\n * Sets the shadows Exposure value.\r\n * This is an adjustment value in the range [-100,+100], where the default value of 0.0 makes no adjustment, positive values increase exposure and negative values decrease exposure.\r\n */\r\n public set shadowsExposure(value: number) {\r\n this._shadowsExposure = value;\r\n this._dirty = true;\r\n }\r\n\r\n /**\r\n * Returns the class name\r\n * @returns The class name\r\n */\r\n public getClassName(): string {\r\n return \"ColorCurves\";\r\n }\r\n\r\n /**\r\n * Binds the color curves to the shader.\r\n * @param colorCurves The color curve to bind\r\n * @param effect The effect to bind to\r\n * @param positiveUniform The positive uniform shader parameter\r\n * @param neutralUniform The neutral uniform shader parameter\r\n * @param negativeUniform The negative uniform shader parameter\r\n */\r\n public static Bind(\r\n colorCurves: ColorCurves,\r\n effect: Effect,\r\n positiveUniform = \"vCameraColorCurvePositive\",\r\n neutralUniform = \"vCameraColorCurveNeutral\",\r\n negativeUniform = \"vCameraColorCurveNegative\"\r\n ): void {\r\n if (colorCurves._dirty) {\r\n colorCurves._dirty = false;\r\n\r\n // Fill in global info.\r\n colorCurves._getColorGradingDataToRef(\r\n colorCurves._globalHue,\r\n colorCurves._globalDensity,\r\n colorCurves._globalSaturation,\r\n colorCurves._globalExposure,\r\n colorCurves._globalCurve\r\n );\r\n\r\n // Compute highlights info.\r\n colorCurves._getColorGradingDataToRef(\r\n colorCurves._highlightsHue,\r\n colorCurves._highlightsDensity,\r\n colorCurves._highlightsSaturation,\r\n colorCurves._highlightsExposure,\r\n colorCurves._tempColor\r\n );\r\n colorCurves._tempColor.multiplyToRef(colorCurves._globalCurve, colorCurves._highlightsCurve);\r\n\r\n // Compute midtones info.\r\n colorCurves._getColorGradingDataToRef(\r\n colorCurves._midtonesHue,\r\n colorCurves._midtonesDensity,\r\n colorCurves._midtonesSaturation,\r\n colorCurves._midtonesExposure,\r\n colorCurves._tempColor\r\n );\r\n colorCurves._tempColor.multiplyToRef(colorCurves._globalCurve, colorCurves._midtonesCurve);\r\n\r\n // Compute shadows info.\r\n colorCurves._getColorGradingDataToRef(\r\n colorCurves._shadowsHue,\r\n colorCurves._shadowsDensity,\r\n colorCurves._shadowsSaturation,\r\n colorCurves._shadowsExposure,\r\n colorCurves._tempColor\r\n );\r\n colorCurves._tempColor.multiplyToRef(colorCurves._globalCurve, colorCurves._shadowsCurve);\r\n\r\n // Compute deltas (neutral is midtones).\r\n colorCurves._highlightsCurve.subtractToRef(colorCurves._midtonesCurve, colorCurves._positiveCurve);\r\n colorCurves._midtonesCurve.subtractToRef(colorCurves._shadowsCurve, colorCurves._negativeCurve);\r\n }\r\n\r\n if (effect) {\r\n effect.setFloat4(positiveUniform, colorCurves._positiveCurve.r, colorCurves._positiveCurve.g, colorCurves._positiveCurve.b, colorCurves._positiveCurve.a);\r\n effect.setFloat4(neutralUniform, colorCurves._midtonesCurve.r, colorCurves._midtonesCurve.g, colorCurves._midtonesCurve.b, colorCurves._midtonesCurve.a);\r\n effect.setFloat4(negativeUniform, colorCurves._negativeCurve.r, colorCurves._negativeCurve.g, colorCurves._negativeCurve.b, colorCurves._negativeCurve.a);\r\n }\r\n }\r\n\r\n /**\r\n * Prepare the list of uniforms associated with the ColorCurves effects.\r\n * @param uniformsList The list of uniforms used in the effect\r\n */\r\n public static PrepareUniforms: (uniformsList: string[]) => void = PrepareUniformsForColorCurves;\r\n\r\n /**\r\n * Returns color grading data based on a hue, density, saturation and exposure value.\r\n * @param hue\r\n * @param density\r\n * @param saturation The saturation.\r\n * @param exposure The exposure.\r\n * @param result The result data container.\r\n */\r\n private _getColorGradingDataToRef(hue: number, density: number, saturation: number, exposure: number, result: Color4): void {\r\n if (hue == null) {\r\n return;\r\n }\r\n\r\n hue = ColorCurves._Clamp(hue, 0, 360);\r\n density = ColorCurves._Clamp(density, -100, 100);\r\n saturation = ColorCurves._Clamp(saturation, -100, 100);\r\n exposure = ColorCurves._Clamp(exposure, -100, 100);\r\n\r\n // Remap the slider/config filter density with non-linear mapping and also scale by half\r\n // so that the maximum filter density is only 50% control. This provides fine control\r\n // for small values and reasonable range.\r\n density = ColorCurves._ApplyColorGradingSliderNonlinear(density);\r\n density *= 0.5;\r\n\r\n exposure = ColorCurves._ApplyColorGradingSliderNonlinear(exposure);\r\n\r\n if (density < 0) {\r\n density *= -1;\r\n hue = (hue + 180) % 360;\r\n }\r\n\r\n ColorCurves._FromHSBToRef(hue, density, 50 + 0.25 * exposure, result);\r\n result.scaleToRef(2, result);\r\n result.a = 1 + 0.01 * saturation;\r\n }\r\n\r\n /**\r\n * Takes an input slider value and returns an adjusted value that provides extra control near the centre.\r\n * @param value The input slider value in range [-100,100].\r\n * @returns Adjusted value.\r\n */\r\n private static _ApplyColorGradingSliderNonlinear(value: number): number {\r\n value /= 100;\r\n\r\n let x: number = Math.abs(value);\r\n x = Math.pow(x, 2);\r\n\r\n if (value < 0) {\r\n x *= -1;\r\n }\r\n\r\n x *= 100;\r\n\r\n return x;\r\n }\r\n\r\n /**\r\n * Returns an RGBA Color4 based on Hue, Saturation and Brightness (also referred to as value, HSV).\r\n * @param hue The hue (H) input.\r\n * @param saturation The saturation (S) input.\r\n * @param brightness The brightness (B) input.\r\n * @param result\r\n * @result An RGBA color represented as Vector4.\r\n */\r\n private static _FromHSBToRef(hue: number, saturation: number, brightness: number, result: Color4): void {\r\n let h: number = ColorCurves._Clamp(hue, 0, 360);\r\n const s: number = ColorCurves._Clamp(saturation / 100, 0, 1);\r\n const v: number = ColorCurves._Clamp(brightness / 100, 0, 1);\r\n\r\n if (s === 0) {\r\n result.r = v;\r\n result.g = v;\r\n result.b = v;\r\n } else {\r\n // sector 0 to 5\r\n h /= 60;\r\n const i = Math.floor(h);\r\n\r\n // fractional part of h\r\n const f = h - i;\r\n const p = v * (1 - s);\r\n const q = v * (1 - s * f);\r\n const t = v * (1 - s * (1 - f));\r\n\r\n switch (i) {\r\n case 0:\r\n result.r = v;\r\n result.g = t;\r\n result.b = p;\r\n break;\r\n case 1:\r\n result.r = q;\r\n result.g = v;\r\n result.b = p;\r\n break;\r\n case 2:\r\n result.r = p;\r\n result.g = v;\r\n result.b = t;\r\n break;\r\n case 3:\r\n result.r = p;\r\n result.g = q;\r\n result.b = v;\r\n break;\r\n case 4:\r\n result.r = t;\r\n result.g = p;\r\n result.b = v;\r\n break;\r\n default:\r\n // case 5:\r\n result.r = v;\r\n result.g = p;\r\n result.b = q;\r\n break;\r\n }\r\n }\r\n\r\n result.a = 1;\r\n }\r\n\r\n /**\r\n * Returns a value clamped between min and max\r\n * @param value The value to clamp\r\n * @param min The minimum of value\r\n * @param max The maximum of value\r\n * @returns The clamped value.\r\n */\r\n private static _Clamp(value: number, min: number, max: number): number {\r\n return Math.min(Math.max(value, min), max);\r\n }\r\n\r\n /**\r\n * Clones the current color curve instance.\r\n * @returns The cloned curves\r\n */\r\n public clone(): ColorCurves {\r\n return SerializationHelper.Clone(() => new ColorCurves(), this);\r\n }\r\n\r\n /**\r\n * Serializes the current color curve 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 /**\r\n * Parses the color curve from a json representation.\r\n * @param source the JSON source to parse\r\n * @returns The parsed curves\r\n */\r\n public static Parse(source: any): ColorCurves {\r\n return SerializationHelper.Parse(() => new ColorCurves(), source, null, null);\r\n }\r\n}\r\n\r\n// References the dependencies.\r\nSerializationHelper._ColorCurvesParser = ColorCurves.Parse;\r\n"]}
@@ -1,7 +1,7 @@
1
1
  import { DeepCopier } from "../Misc/deepCopier.js";
2
2
  import { Color3 } from "../Maths/math.color.js";
3
3
  import { Engine } from "../Engines/engine.js";
4
- import { SerializationHelper } from "../Misc/decorators.js";
4
+ import { SerializationHelper } from "../Misc/decorators.serialization.js";
5
5
 
6
6
  /**
7
7
  * This represents all the required information to add a fresnel effect on a material:
@@ -1 +1 @@
1
- {"version":3,"file":"fresnelParameters.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/fresnelParameters.ts"],"names":[],"mappings":"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","sourcesContent":["import { DeepCopier } from \"../Misc/deepCopier\";\r\nimport type { DeepImmutable } from \"../types\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { SerializationHelper } from \"../Misc/decorators\";\r\nimport { Constants } from \"../Engines/constants\";\r\n\r\n/**\r\n * Options to be used when creating a FresnelParameters.\r\n */\r\nexport type IFresnelParametersCreationOptions = {\r\n /**\r\n * Define the color used on edges (grazing angle)\r\n */\r\n leftColor?: Color3;\r\n\r\n /**\r\n * Define the color used on center\r\n */\r\n rightColor?: Color3;\r\n\r\n /**\r\n * Define bias applied to computed fresnel term\r\n */\r\n bias?: number;\r\n\r\n /**\r\n * Defined the power exponent applied to fresnel term\r\n */\r\n power?: number;\r\n\r\n /**\r\n * Define if the fresnel effect is enable or not.\r\n */\r\n isEnabled?: boolean;\r\n};\r\n\r\n/**\r\n * Serialized format for FresnelParameters.\r\n */\r\nexport type IFresnelParametersSerialized = {\r\n /**\r\n * Define the color used on edges (grazing angle) [as an array]\r\n */\r\n leftColor: number[];\r\n\r\n /**\r\n * Define the color used on center [as an array]\r\n */\r\n rightColor: number[];\r\n\r\n /**\r\n * Define bias applied to computed fresnel term\r\n */\r\n bias: number;\r\n\r\n /**\r\n * Defined the power exponent applied to fresnel term\r\n */\r\n power?: number;\r\n\r\n /**\r\n * Define if the fresnel effect is enable or not.\r\n */\r\n isEnabled: boolean;\r\n};\r\n\r\n/**\r\n * This represents all the required information to add a fresnel effect on a material:\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/fresnelParameters\r\n */\r\nexport class FresnelParameters {\r\n private _isEnabled = true;\r\n /**\r\n * Define if the fresnel effect is enable or not.\r\n */\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\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 Engine.MarkAllMaterialsAsDirty(Constants.MATERIAL_FresnelDirtyFlag | Constants.MATERIAL_MiscDirtyFlag);\r\n }\r\n\r\n /**\r\n * Define the color used on edges (grazing angle)\r\n */\r\n public leftColor: Color3;\r\n\r\n /**\r\n * Define the color used on center\r\n */\r\n public rightColor: Color3;\r\n\r\n /**\r\n * Define bias applied to computed fresnel term\r\n */\r\n public bias: number;\r\n\r\n /**\r\n * Defined the power exponent applied to fresnel term\r\n */\r\n public power: number;\r\n\r\n /**\r\n * Creates a new FresnelParameters object.\r\n *\r\n * @param options provide your own settings to optionally to override defaults\r\n */\r\n public constructor(options: IFresnelParametersCreationOptions = {}) {\r\n this.bias = options.bias === undefined ? 0 : options.bias;\r\n this.power = options.power === undefined ? 1 : options.power;\r\n this.leftColor = options.leftColor || Color3.White();\r\n this.rightColor = options.rightColor || Color3.Black();\r\n if (options.isEnabled === false) {\r\n this.isEnabled = false;\r\n }\r\n }\r\n\r\n /**\r\n * Clones the current fresnel and its values\r\n * @returns a clone fresnel configuration\r\n */\r\n public clone(): FresnelParameters {\r\n const newFresnelParameters = new FresnelParameters();\r\n\r\n DeepCopier.DeepCopy(this, newFresnelParameters);\r\n\r\n return newFresnelParameters;\r\n }\r\n\r\n /**\r\n * Determines equality between FresnelParameters objects\r\n * @param otherFresnelParameters defines the second operand\r\n * @returns true if the power, bias, leftColor, rightColor and isEnabled values are equal to the given ones\r\n */\r\n public equals(otherFresnelParameters: DeepImmutable<FresnelParameters>): boolean {\r\n return (\r\n otherFresnelParameters &&\r\n this.bias === otherFresnelParameters.bias &&\r\n this.power === otherFresnelParameters.power &&\r\n this.leftColor.equals(otherFresnelParameters.leftColor) &&\r\n this.rightColor.equals(otherFresnelParameters.rightColor) &&\r\n this.isEnabled === otherFresnelParameters.isEnabled\r\n );\r\n }\r\n\r\n /**\r\n * Serializes the current fresnel parameters to a JSON representation.\r\n * @returns the JSON serialization\r\n */\r\n public serialize(): IFresnelParametersSerialized {\r\n return {\r\n isEnabled: this.isEnabled,\r\n leftColor: this.leftColor.asArray(),\r\n rightColor: this.rightColor.asArray(),\r\n bias: this.bias,\r\n power: this.power,\r\n };\r\n }\r\n\r\n /**\r\n * Parse a JSON object and deserialize it to a new Fresnel parameter object.\r\n * @param parsedFresnelParameters Define the JSON representation\r\n * @returns the parsed parameters\r\n */\r\n public static Parse(parsedFresnelParameters: IFresnelParametersSerialized): FresnelParameters {\r\n return new FresnelParameters({\r\n isEnabled: parsedFresnelParameters.isEnabled,\r\n leftColor: Color3.FromArray(parsedFresnelParameters.leftColor),\r\n rightColor: Color3.FromArray(parsedFresnelParameters.rightColor),\r\n bias: parsedFresnelParameters.bias,\r\n power: parsedFresnelParameters.power || 1.0,\r\n });\r\n }\r\n}\r\n\r\n// References the dependencies.\r\nSerializationHelper._FresnelParametersParser = FresnelParameters.Parse;\r\n"]}
1
+ {"version":3,"file":"fresnelParameters.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/fresnelParameters.ts"],"names":[],"mappings":"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","sourcesContent":["import { DeepCopier } from \"../Misc/deepCopier\";\r\nimport type { DeepImmutable } from \"../types\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { SerializationHelper } from \"../Misc/decorators.serialization\";\r\nimport { Constants } from \"../Engines/constants\";\r\n\r\n/**\r\n * Options to be used when creating a FresnelParameters.\r\n */\r\nexport type IFresnelParametersCreationOptions = {\r\n /**\r\n * Define the color used on edges (grazing angle)\r\n */\r\n leftColor?: Color3;\r\n\r\n /**\r\n * Define the color used on center\r\n */\r\n rightColor?: Color3;\r\n\r\n /**\r\n * Define bias applied to computed fresnel term\r\n */\r\n bias?: number;\r\n\r\n /**\r\n * Defined the power exponent applied to fresnel term\r\n */\r\n power?: number;\r\n\r\n /**\r\n * Define if the fresnel effect is enable or not.\r\n */\r\n isEnabled?: boolean;\r\n};\r\n\r\n/**\r\n * Serialized format for FresnelParameters.\r\n */\r\nexport type IFresnelParametersSerialized = {\r\n /**\r\n * Define the color used on edges (grazing angle) [as an array]\r\n */\r\n leftColor: number[];\r\n\r\n /**\r\n * Define the color used on center [as an array]\r\n */\r\n rightColor: number[];\r\n\r\n /**\r\n * Define bias applied to computed fresnel term\r\n */\r\n bias: number;\r\n\r\n /**\r\n * Defined the power exponent applied to fresnel term\r\n */\r\n power?: number;\r\n\r\n /**\r\n * Define if the fresnel effect is enable or not.\r\n */\r\n isEnabled: boolean;\r\n};\r\n\r\n/**\r\n * This represents all the required information to add a fresnel effect on a material:\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/fresnelParameters\r\n */\r\nexport class FresnelParameters {\r\n private _isEnabled = true;\r\n /**\r\n * Define if the fresnel effect is enable or not.\r\n */\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\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 Engine.MarkAllMaterialsAsDirty(Constants.MATERIAL_FresnelDirtyFlag | Constants.MATERIAL_MiscDirtyFlag);\r\n }\r\n\r\n /**\r\n * Define the color used on edges (grazing angle)\r\n */\r\n public leftColor: Color3;\r\n\r\n /**\r\n * Define the color used on center\r\n */\r\n public rightColor: Color3;\r\n\r\n /**\r\n * Define bias applied to computed fresnel term\r\n */\r\n public bias: number;\r\n\r\n /**\r\n * Defined the power exponent applied to fresnel term\r\n */\r\n public power: number;\r\n\r\n /**\r\n * Creates a new FresnelParameters object.\r\n *\r\n * @param options provide your own settings to optionally to override defaults\r\n */\r\n public constructor(options: IFresnelParametersCreationOptions = {}) {\r\n this.bias = options.bias === undefined ? 0 : options.bias;\r\n this.power = options.power === undefined ? 1 : options.power;\r\n this.leftColor = options.leftColor || Color3.White();\r\n this.rightColor = options.rightColor || Color3.Black();\r\n if (options.isEnabled === false) {\r\n this.isEnabled = false;\r\n }\r\n }\r\n\r\n /**\r\n * Clones the current fresnel and its values\r\n * @returns a clone fresnel configuration\r\n */\r\n public clone(): FresnelParameters {\r\n const newFresnelParameters = new FresnelParameters();\r\n\r\n DeepCopier.DeepCopy(this, newFresnelParameters);\r\n\r\n return newFresnelParameters;\r\n }\r\n\r\n /**\r\n * Determines equality between FresnelParameters objects\r\n * @param otherFresnelParameters defines the second operand\r\n * @returns true if the power, bias, leftColor, rightColor and isEnabled values are equal to the given ones\r\n */\r\n public equals(otherFresnelParameters: DeepImmutable<FresnelParameters>): boolean {\r\n return (\r\n otherFresnelParameters &&\r\n this.bias === otherFresnelParameters.bias &&\r\n this.power === otherFresnelParameters.power &&\r\n this.leftColor.equals(otherFresnelParameters.leftColor) &&\r\n this.rightColor.equals(otherFresnelParameters.rightColor) &&\r\n this.isEnabled === otherFresnelParameters.isEnabled\r\n );\r\n }\r\n\r\n /**\r\n * Serializes the current fresnel parameters to a JSON representation.\r\n * @returns the JSON serialization\r\n */\r\n public serialize(): IFresnelParametersSerialized {\r\n return {\r\n isEnabled: this.isEnabled,\r\n leftColor: this.leftColor.asArray(),\r\n rightColor: this.rightColor.asArray(),\r\n bias: this.bias,\r\n power: this.power,\r\n };\r\n }\r\n\r\n /**\r\n * Parse a JSON object and deserialize it to a new Fresnel parameter object.\r\n * @param parsedFresnelParameters Define the JSON representation\r\n * @returns the parsed parameters\r\n */\r\n public static Parse(parsedFresnelParameters: IFresnelParametersSerialized): FresnelParameters {\r\n return new FresnelParameters({\r\n isEnabled: parsedFresnelParameters.isEnabled,\r\n leftColor: Color3.FromArray(parsedFresnelParameters.leftColor),\r\n rightColor: Color3.FromArray(parsedFresnelParameters.rightColor),\r\n bias: parsedFresnelParameters.bias,\r\n power: parsedFresnelParameters.power || 1.0,\r\n });\r\n }\r\n}\r\n\r\n// References the dependencies.\r\nSerializationHelper._FresnelParametersParser = FresnelParameters.Parse;\r\n"]}
@@ -1,55 +1,10 @@
1
1
  import { Observable } from "../Misc/observable";
2
2
  import type { Nullable } from "../types";
3
3
  import { Color4 } from "../Maths/math.color";
4
- import { MaterialDefines } from "../Materials/materialDefines";
5
4
  import { ColorCurves } from "../Materials/colorCurves";
6
5
  import type { BaseTexture } from "../Materials/Textures/baseTexture";
7
6
  import type { Effect } from "../Materials/effect";
8
- /**
9
- * Interface to follow in your material defines to integrate easily the
10
- * Image processing functions.
11
- * @internal
12
- */
13
- export interface IImageProcessingConfigurationDefines {
14
- IMAGEPROCESSING: boolean;
15
- VIGNETTE: boolean;
16
- VIGNETTEBLENDMODEMULTIPLY: boolean;
17
- VIGNETTEBLENDMODEOPAQUE: boolean;
18
- TONEMAPPING: boolean;
19
- TONEMAPPING_ACES: boolean;
20
- CONTRAST: boolean;
21
- EXPOSURE: boolean;
22
- COLORCURVES: boolean;
23
- COLORGRADING: boolean;
24
- COLORGRADING3D: boolean;
25
- SAMPLER3DGREENDEPTH: boolean;
26
- SAMPLER3DBGRMAP: boolean;
27
- DITHER: boolean;
28
- IMAGEPROCESSINGPOSTPROCESS: boolean;
29
- SKIPFINALCOLORCLAMP: boolean;
30
- }
31
- /**
32
- * @internal
33
- */
34
- export declare class ImageProcessingConfigurationDefines extends MaterialDefines implements IImageProcessingConfigurationDefines {
35
- IMAGEPROCESSING: boolean;
36
- VIGNETTE: boolean;
37
- VIGNETTEBLENDMODEMULTIPLY: boolean;
38
- VIGNETTEBLENDMODEOPAQUE: boolean;
39
- TONEMAPPING: boolean;
40
- TONEMAPPING_ACES: boolean;
41
- CONTRAST: boolean;
42
- COLORCURVES: boolean;
43
- COLORGRADING: boolean;
44
- COLORGRADING3D: boolean;
45
- SAMPLER3DGREENDEPTH: boolean;
46
- SAMPLER3DBGRMAP: boolean;
47
- DITHER: boolean;
48
- IMAGEPROCESSINGPOSTPROCESS: boolean;
49
- EXPOSURE: boolean;
50
- SKIPFINALCOLORCLAMP: boolean;
51
- constructor();
52
- }
7
+ import type { IImageProcessingConfigurationDefines } from "./imageProcessingConfiguration.defines";
53
8
  /**
54
9
  * This groups together the common properties used for image processing either in direct forward pass
55
10
  * or through post processing effect depending on the use of the image processing pipeline in your scene
@@ -275,13 +230,13 @@ export declare class ImageProcessingConfiguration {
275
230
  * @param uniforms The list of uniforms used in the effect
276
231
  * @param defines the list of defines currently in use
277
232
  */
278
- static PrepareUniforms(uniforms: string[], defines: IImageProcessingConfigurationDefines): void;
233
+ static PrepareUniforms: (uniforms: string[], defines: IImageProcessingConfigurationDefines) => void;
279
234
  /**
280
235
  * Prepare the list of samplers associated with the Image Processing effects.
281
236
  * @param samplersList The list of uniforms used in the effect
282
237
  * @param defines the list of defines currently in use
283
238
  */
284
- static PrepareSamplers(samplersList: string[], defines: IImageProcessingConfigurationDefines): void;
239
+ static PrepareSamplers: (samplersList: string[], defines: IImageProcessingConfigurationDefines) => void;
285
240
  /**
286
241
  * Prepare the list of defines associated to the shader.
287
242
  * @param defines the list of defines to complete
@@ -0,0 +1,46 @@
1
+ import { MaterialDefines } from "./materialDefines";
2
+ /**
3
+ * Interface to follow in your material defines to integrate easily the
4
+ * Image processing functions.
5
+ * @internal
6
+ */
7
+ export interface IImageProcessingConfigurationDefines {
8
+ IMAGEPROCESSING: boolean;
9
+ VIGNETTE: boolean;
10
+ VIGNETTEBLENDMODEMULTIPLY: boolean;
11
+ VIGNETTEBLENDMODEOPAQUE: boolean;
12
+ TONEMAPPING: boolean;
13
+ TONEMAPPING_ACES: boolean;
14
+ CONTRAST: boolean;
15
+ EXPOSURE: boolean;
16
+ COLORCURVES: boolean;
17
+ COLORGRADING: boolean;
18
+ COLORGRADING3D: boolean;
19
+ SAMPLER3DGREENDEPTH: boolean;
20
+ SAMPLER3DBGRMAP: boolean;
21
+ DITHER: boolean;
22
+ IMAGEPROCESSINGPOSTPROCESS: boolean;
23
+ SKIPFINALCOLORCLAMP: boolean;
24
+ }
25
+ /**
26
+ * @internal
27
+ */
28
+ export declare class ImageProcessingConfigurationDefines extends MaterialDefines implements IImageProcessingConfigurationDefines {
29
+ IMAGEPROCESSING: boolean;
30
+ VIGNETTE: boolean;
31
+ VIGNETTEBLENDMODEMULTIPLY: boolean;
32
+ VIGNETTEBLENDMODEOPAQUE: boolean;
33
+ TONEMAPPING: boolean;
34
+ TONEMAPPING_ACES: boolean;
35
+ CONTRAST: boolean;
36
+ COLORCURVES: boolean;
37
+ COLORGRADING: boolean;
38
+ COLORGRADING3D: boolean;
39
+ SAMPLER3DGREENDEPTH: boolean;
40
+ SAMPLER3DBGRMAP: boolean;
41
+ DITHER: boolean;
42
+ IMAGEPROCESSINGPOSTPROCESS: boolean;
43
+ EXPOSURE: boolean;
44
+ SKIPFINALCOLORCLAMP: boolean;
45
+ constructor();
46
+ }
@@ -0,0 +1,27 @@
1
+ import { MaterialDefines } from "./materialDefines.js";
2
+ /**
3
+ * @internal
4
+ */
5
+ export class ImageProcessingConfigurationDefines extends MaterialDefines {
6
+ constructor() {
7
+ super();
8
+ this.IMAGEPROCESSING = false;
9
+ this.VIGNETTE = false;
10
+ this.VIGNETTEBLENDMODEMULTIPLY = false;
11
+ this.VIGNETTEBLENDMODEOPAQUE = false;
12
+ this.TONEMAPPING = false;
13
+ this.TONEMAPPING_ACES = false;
14
+ this.CONTRAST = false;
15
+ this.COLORCURVES = false;
16
+ this.COLORGRADING = false;
17
+ this.COLORGRADING3D = false;
18
+ this.SAMPLER3DGREENDEPTH = false;
19
+ this.SAMPLER3DBGRMAP = false;
20
+ this.DITHER = false;
21
+ this.IMAGEPROCESSINGPOSTPROCESS = false;
22
+ this.EXPOSURE = false;
23
+ this.SKIPFINALCOLORCLAMP = false;
24
+ this.rebuild();
25
+ }
26
+ }
27
+ //# sourceMappingURL=imageProcessingConfiguration.defines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageProcessingConfiguration.defines.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/imageProcessingConfiguration.defines.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAyBpD;;GAEG;AACH,MAAM,OAAO,mCAAoC,SAAQ,eAAe;IAkBpE;QACI,KAAK,EAAE,CAAC;QAlBL,oBAAe,GAAG,KAAK,CAAC;QACxB,aAAQ,GAAG,KAAK,CAAC;QACjB,8BAAyB,GAAG,KAAK,CAAC;QAClC,4BAAuB,GAAG,KAAK,CAAC;QAChC,gBAAW,GAAG,KAAK,CAAC;QACpB,qBAAgB,GAAG,KAAK,CAAC;QACzB,aAAQ,GAAG,KAAK,CAAC;QACjB,gBAAW,GAAG,KAAK,CAAC;QACpB,iBAAY,GAAG,KAAK,CAAC;QACrB,mBAAc,GAAG,KAAK,CAAC;QACvB,wBAAmB,GAAG,KAAK,CAAC;QAC5B,oBAAe,GAAG,KAAK,CAAC;QACxB,WAAM,GAAG,KAAK,CAAC;QACf,+BAA0B,GAAG,KAAK,CAAC;QACnC,aAAQ,GAAG,KAAK,CAAC;QACjB,wBAAmB,GAAG,KAAK,CAAC;QAI/B,IAAI,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;CACJ","sourcesContent":["import { MaterialDefines } from \"./materialDefines\";\r\n/**\r\n * Interface to follow in your material defines to integrate easily the\r\n * Image processing functions.\r\n * @internal\r\n */\r\nexport interface IImageProcessingConfigurationDefines {\r\n IMAGEPROCESSING: boolean;\r\n VIGNETTE: boolean;\r\n VIGNETTEBLENDMODEMULTIPLY: boolean;\r\n VIGNETTEBLENDMODEOPAQUE: boolean;\r\n TONEMAPPING: boolean;\r\n TONEMAPPING_ACES: boolean;\r\n CONTRAST: boolean;\r\n EXPOSURE: boolean;\r\n COLORCURVES: boolean;\r\n COLORGRADING: boolean;\r\n COLORGRADING3D: boolean;\r\n SAMPLER3DGREENDEPTH: boolean;\r\n SAMPLER3DBGRMAP: boolean;\r\n DITHER: boolean;\r\n IMAGEPROCESSINGPOSTPROCESS: boolean;\r\n SKIPFINALCOLORCLAMP: boolean;\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class ImageProcessingConfigurationDefines extends MaterialDefines implements IImageProcessingConfigurationDefines {\r\n public IMAGEPROCESSING = false;\r\n public VIGNETTE = false;\r\n public VIGNETTEBLENDMODEMULTIPLY = false;\r\n public VIGNETTEBLENDMODEOPAQUE = false;\r\n public TONEMAPPING = false;\r\n public TONEMAPPING_ACES = false;\r\n public CONTRAST = false;\r\n public COLORCURVES = false;\r\n public COLORGRADING = false;\r\n public COLORGRADING3D = false;\r\n public SAMPLER3DGREENDEPTH = false;\r\n public SAMPLER3DBGRMAP = false;\r\n public DITHER = false;\r\n public IMAGEPROCESSINGPOSTPROCESS = false;\r\n public EXPOSURE = false;\r\n public SKIPFINALCOLORCLAMP = false;\r\n\r\n constructor() {\r\n super();\r\n this.rebuild();\r\n }\r\n}\r\n"]}
@@ -0,0 +1,13 @@
1
+ import type { IImageProcessingConfigurationDefines } from "./imageProcessingConfiguration.defines";
2
+ /**
3
+ * Prepare the list of uniforms associated with the Image Processing effects.
4
+ * @param uniforms The list of uniforms used in the effect
5
+ * @param defines the list of defines currently in use
6
+ */
7
+ export declare function PrepareUniformsForImageProcessing(uniforms: string[], defines: IImageProcessingConfigurationDefines): void;
8
+ /**
9
+ * Prepare the list of samplers associated with the Image Processing effects.
10
+ * @param samplersList The list of uniforms used in the effect
11
+ * @param defines the list of defines currently in use
12
+ */
13
+ export declare function PrepareSamplersForImageProcessing(samplersList: string[], defines: IImageProcessingConfigurationDefines): void;
@@ -0,0 +1,41 @@
1
+ import { PrepareUniformsForColorCurves } from "./colorCurves.functions.js";
2
+ /**
3
+ * Prepare the list of uniforms associated with the Image Processing effects.
4
+ * @param uniforms The list of uniforms used in the effect
5
+ * @param defines the list of defines currently in use
6
+ */
7
+ export function PrepareUniformsForImageProcessing(uniforms, defines) {
8
+ if (defines.EXPOSURE) {
9
+ uniforms.push("exposureLinear");
10
+ }
11
+ if (defines.CONTRAST) {
12
+ uniforms.push("contrast");
13
+ }
14
+ if (defines.COLORGRADING) {
15
+ uniforms.push("colorTransformSettings");
16
+ }
17
+ if (defines.VIGNETTE || defines.DITHER) {
18
+ uniforms.push("vInverseScreenSize");
19
+ }
20
+ if (defines.VIGNETTE) {
21
+ uniforms.push("vignetteSettings1");
22
+ uniforms.push("vignetteSettings2");
23
+ }
24
+ if (defines.COLORCURVES) {
25
+ PrepareUniformsForColorCurves(uniforms);
26
+ }
27
+ if (defines.DITHER) {
28
+ uniforms.push("ditherIntensity");
29
+ }
30
+ }
31
+ /**
32
+ * Prepare the list of samplers associated with the Image Processing effects.
33
+ * @param samplersList The list of uniforms used in the effect
34
+ * @param defines the list of defines currently in use
35
+ */
36
+ export function PrepareSamplersForImageProcessing(samplersList, defines) {
37
+ if (defines.COLORGRADING) {
38
+ samplersList.push("txColorTransform");
39
+ }
40
+ }
41
+ //# sourceMappingURL=imageProcessingConfiguration.functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageProcessingConfiguration.functions.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/imageProcessingConfiguration.functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAGxE;;;;GAIG;AACH,MAAM,UAAU,iCAAiC,CAAC,QAAkB,EAAE,OAA6C;IAC/G,IAAI,OAAO,CAAC,QAAQ,EAAE;QAClB,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACnC;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE;QAClB,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC7B;IACD,IAAI,OAAO,CAAC,YAAY,EAAE;QACtB,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;KAC3C;IACD,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE;QACpC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;KACvC;IACD,IAAI,OAAO,CAAC,QAAQ,EAAE;QAClB,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACnC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;KACtC;IACD,IAAI,OAAO,CAAC,WAAW,EAAE;QACrB,6BAA6B,CAAC,QAAQ,CAAC,CAAC;KAC3C;IACD,IAAI,OAAO,CAAC,MAAM,EAAE;QAChB,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;KACpC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iCAAiC,CAAC,YAAsB,EAAE,OAA6C;IACnH,IAAI,OAAO,CAAC,YAAY,EAAE;QACtB,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;KACzC;AACL,CAAC","sourcesContent":["import { PrepareUniformsForColorCurves } from \"./colorCurves.functions\";\r\nimport type { IImageProcessingConfigurationDefines } from \"./imageProcessingConfiguration.defines\";\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\nexport function PrepareUniformsForImageProcessing(uniforms: string[], defines: IImageProcessingConfigurationDefines): void {\r\n if (defines.EXPOSURE) {\r\n uniforms.push(\"exposureLinear\");\r\n }\r\n if (defines.CONTRAST) {\r\n uniforms.push(\"contrast\");\r\n }\r\n if (defines.COLORGRADING) {\r\n uniforms.push(\"colorTransformSettings\");\r\n }\r\n if (defines.VIGNETTE || defines.DITHER) {\r\n uniforms.push(\"vInverseScreenSize\");\r\n }\r\n if (defines.VIGNETTE) {\r\n uniforms.push(\"vignetteSettings1\");\r\n uniforms.push(\"vignetteSettings2\");\r\n }\r\n if (defines.COLORCURVES) {\r\n PrepareUniformsForColorCurves(uniforms);\r\n }\r\n if (defines.DITHER) {\r\n uniforms.push(\"ditherIntensity\");\r\n }\r\n}\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\nexport function PrepareSamplersForImageProcessing(samplersList: string[], defines: IImageProcessingConfigurationDefines): void {\r\n if (defines.COLORGRADING) {\r\n samplersList.push(\"txColorTransform\");\r\n }\r\n}\r\n"]}
@@ -1,36 +1,12 @@
1
1
  import { __decorate } from "../tslib.es6.js";
2
2
  /* eslint-disable @typescript-eslint/naming-convention */
3
- import { serialize, SerializationHelper, serializeAsTexture, serializeAsColorCurves, serializeAsColor4 } from "../Misc/decorators.js";
3
+ import { serialize, serializeAsTexture, serializeAsColorCurves, serializeAsColor4 } from "../Misc/decorators.js";
4
4
  import { Observable } from "../Misc/observable.js";
5
- import { Tools } from "../Misc/tools.js";
6
5
  import { Color4 } from "../Maths/math.color.js";
7
- import { MaterialDefines } from "../Materials/materialDefines.js";
8
6
  import { ColorCurves } from "../Materials/colorCurves.js";
9
- /**
10
- * @internal
11
- */
12
- export class ImageProcessingConfigurationDefines extends MaterialDefines {
13
- constructor() {
14
- super();
15
- this.IMAGEPROCESSING = false;
16
- this.VIGNETTE = false;
17
- this.VIGNETTEBLENDMODEMULTIPLY = false;
18
- this.VIGNETTEBLENDMODEOPAQUE = false;
19
- this.TONEMAPPING = false;
20
- this.TONEMAPPING_ACES = false;
21
- this.CONTRAST = false;
22
- this.COLORCURVES = false;
23
- this.COLORGRADING = false;
24
- this.COLORGRADING3D = false;
25
- this.SAMPLER3DGREENDEPTH = false;
26
- this.SAMPLER3DBGRMAP = false;
27
- this.DITHER = false;
28
- this.IMAGEPROCESSINGPOSTPROCESS = false;
29
- this.EXPOSURE = false;
30
- this.SKIPFINALCOLORCLAMP = false;
31
- this.rebuild();
32
- }
33
- }
7
+ import { Mix } from "../Misc/tools.functions.js";
8
+ import { SerializationHelper } from "../Misc/decorators.serialization.js";
9
+ import { PrepareSamplersForImageProcessing, PrepareUniformsForImageProcessing } from "./imageProcessingConfiguration.functions.js";
34
10
  /**
35
11
  * This groups together the common properties used for image processing either in direct forward pass
36
12
  * or through post processing effect depending on the use of the image processing pipeline in your scene
@@ -383,45 +359,6 @@ export class ImageProcessingConfiguration {
383
359
  getClassName() {
384
360
  return "ImageProcessingConfiguration";
385
361
  }
386
- /**
387
- * Prepare the list of uniforms associated with the Image Processing effects.
388
- * @param uniforms The list of uniforms used in the effect
389
- * @param defines the list of defines currently in use
390
- */
391
- static PrepareUniforms(uniforms, defines) {
392
- if (defines.EXPOSURE) {
393
- uniforms.push("exposureLinear");
394
- }
395
- if (defines.CONTRAST) {
396
- uniforms.push("contrast");
397
- }
398
- if (defines.COLORGRADING) {
399
- uniforms.push("colorTransformSettings");
400
- }
401
- if (defines.VIGNETTE || defines.DITHER) {
402
- uniforms.push("vInverseScreenSize");
403
- }
404
- if (defines.VIGNETTE) {
405
- uniforms.push("vignetteSettings1");
406
- uniforms.push("vignetteSettings2");
407
- }
408
- if (defines.COLORCURVES) {
409
- ColorCurves.PrepareUniforms(uniforms);
410
- }
411
- if (defines.DITHER) {
412
- uniforms.push("ditherIntensity");
413
- }
414
- }
415
- /**
416
- * Prepare the list of samplers associated with the Image Processing effects.
417
- * @param samplersList The list of uniforms used in the effect
418
- * @param defines the list of defines currently in use
419
- */
420
- static PrepareSamplers(samplersList, defines) {
421
- if (defines.COLORGRADING) {
422
- samplersList.push("txColorTransform");
423
- }
424
- }
425
362
  /**
426
363
  * Prepare the list of defines associated to the shader.
427
364
  * @param defines the list of defines to complete
@@ -503,8 +440,8 @@ export class ImageProcessingConfiguration {
503
440
  let vignetteScaleY = Math.tan(this.vignetteCameraFov * 0.5);
504
441
  let vignetteScaleX = vignetteScaleY * aspectRatio;
505
442
  const vignetteScaleGeometricMean = Math.sqrt(vignetteScaleX * vignetteScaleY);
506
- vignetteScaleX = Tools.Mix(vignetteScaleX, vignetteScaleGeometricMean, this.vignetteStretch);
507
- vignetteScaleY = Tools.Mix(vignetteScaleY, vignetteScaleGeometricMean, this.vignetteStretch);
443
+ vignetteScaleX = Mix(vignetteScaleX, vignetteScaleGeometricMean, this.vignetteStretch);
444
+ vignetteScaleY = Mix(vignetteScaleY, vignetteScaleGeometricMean, this.vignetteStretch);
508
445
  effect.setFloat4("vignetteSettings1", vignetteScaleX, vignetteScaleY, -vignetteScaleX * this.vignetteCenterX, -vignetteScaleY * this.vignetteCenterY);
509
446
  const vignettePower = -2.0 * this.vignetteWeight;
510
447
  effect.setFloat4("vignetteSettings2", this.vignetteColor.r, this.vignetteColor.g, this.vignetteColor.b, vignettePower);
@@ -577,6 +514,18 @@ ImageProcessingConfiguration.TONEMAPPING_STANDARD = 0;
577
514
  * to other engines rendering to increase portability.
578
515
  */
579
516
  ImageProcessingConfiguration.TONEMAPPING_ACES = 1;
517
+ /**
518
+ * Prepare the list of uniforms associated with the Image Processing effects.
519
+ * @param uniforms The list of uniforms used in the effect
520
+ * @param defines the list of defines currently in use
521
+ */
522
+ ImageProcessingConfiguration.PrepareUniforms = PrepareUniformsForImageProcessing;
523
+ /**
524
+ * Prepare the list of samplers associated with the Image Processing effects.
525
+ * @param samplersList The list of uniforms used in the effect
526
+ * @param defines the list of defines currently in use
527
+ */
528
+ ImageProcessingConfiguration.PrepareSamplers = PrepareSamplersForImageProcessing;
580
529
  // Static constants associated to the image processing.
581
530
  ImageProcessingConfiguration._VIGNETTEMODE_MULTIPLY = 0;
582
531
  ImageProcessingConfiguration._VIGNETTEMODE_OPAQUE = 1;