@onerjs/core 8.26.3 → 8.26.4

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 (137) hide show
  1. package/Engines/abstractEngine.js +2 -2
  2. package/Engines/abstractEngine.js.map +1 -1
  3. package/FrameGraph/Tasks/Rendering/objectRendererTask.js +0 -6
  4. package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
  5. package/FrameGraph/frameGraphContext.d.ts +1 -2
  6. package/FrameGraph/frameGraphContext.js +1 -4
  7. package/FrameGraph/frameGraphContext.js.map +1 -1
  8. package/Lights/Clustered/clusteredLightContainer.d.ts +1 -1
  9. package/Lights/Clustered/clusteredLightContainer.js +5 -4
  10. package/Lights/Clustered/clusteredLightContainer.js.map +1 -1
  11. package/Lights/pointLight.js +4 -4
  12. package/Lights/pointLight.js.map +1 -1
  13. package/Lights/rectAreaLight.js +4 -4
  14. package/Lights/rectAreaLight.js.map +1 -1
  15. package/Lights/spotLight.js +2 -2
  16. package/Lights/spotLight.js.map +1 -1
  17. package/Materials/Background/backgroundMaterial.d.ts +91 -19
  18. package/Materials/Background/backgroundMaterial.js +245 -17
  19. package/Materials/Background/backgroundMaterial.js.map +1 -1
  20. package/Materials/Node/Blocks/Dual/lightBlock.js +4 -15
  21. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  22. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +5 -28
  23. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  24. package/Materials/Node/nodeMaterial.d.ts +69 -57
  25. package/Materials/Node/nodeMaterial.js +86 -9
  26. package/Materials/Node/nodeMaterial.js.map +1 -1
  27. package/Materials/Node/nodeMaterialBuildState.d.ts +1 -3
  28. package/Materials/Node/nodeMaterialBuildState.js +15 -35
  29. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  30. package/Materials/PBR/index.d.ts +0 -5
  31. package/Materials/PBR/index.js +0 -5
  32. package/Materials/PBR/index.js.map +1 -1
  33. package/Materials/PBR/pbrBaseMaterial.d.ts +43 -57
  34. package/Materials/PBR/pbrBaseMaterial.js +304 -21
  35. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  36. package/Materials/PBR/pbrMaterial.d.ts +78 -0
  37. package/Materials/PBR/pbrMaterial.js +110 -0
  38. package/Materials/PBR/pbrMaterial.js.map +1 -1
  39. package/Materials/imageProcessingConfiguration.defines.d.ts +0 -25
  40. package/Materials/imageProcessingConfiguration.defines.js +0 -27
  41. package/Materials/imageProcessingConfiguration.defines.js.map +1 -1
  42. package/Materials/index.d.ts +0 -2
  43. package/Materials/index.js +0 -2
  44. package/Materials/index.js.map +1 -1
  45. package/Materials/material.d.ts +0 -14
  46. package/Materials/material.js +0 -14
  47. package/Materials/material.js.map +1 -1
  48. package/Materials/materialHelper.functions.d.ts +0 -53
  49. package/Materials/materialHelper.functions.js +0 -297
  50. package/Materials/materialHelper.functions.js.map +1 -1
  51. package/Materials/standardMaterial.d.ts +121 -57
  52. package/Materials/standardMaterial.js +250 -21
  53. package/Materials/standardMaterial.js.map +1 -1
  54. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +0 -1
  55. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  56. package/Misc/decorators.d.ts +0 -7
  57. package/Misc/decorators.js +0 -34
  58. package/Misc/decorators.js.map +1 -1
  59. package/Particles/Node/Blocks/Emitters/createParticleBlock.js +1 -10
  60. package/Particles/Node/Blocks/Emitters/createParticleBlock.js.map +1 -1
  61. package/Particles/Node/Blocks/index.d.ts +0 -2
  62. package/Particles/Node/Blocks/index.js +0 -2
  63. package/Particles/Node/Blocks/index.js.map +1 -1
  64. package/Particles/Node/Blocks/particleInputBlock.js +1 -4
  65. package/Particles/Node/Blocks/particleInputBlock.js.map +1 -1
  66. package/Rendering/IBLShadows/iblShadowsPluginMaterial.d.ts +1 -2
  67. package/Rendering/IBLShadows/iblShadowsPluginMaterial.js +0 -45
  68. package/Rendering/IBLShadows/iblShadowsPluginMaterial.js.map +1 -1
  69. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js +1 -2
  70. package/Rendering/IBLShadows/iblShadowsRenderPipeline.js.map +1 -1
  71. package/Rendering/geometryBufferRenderer.js +4 -6
  72. package/Rendering/geometryBufferRenderer.js.map +1 -1
  73. package/Rendering/iblCdfGenerator.js +20 -28
  74. package/Rendering/iblCdfGenerator.js.map +1 -1
  75. package/Rendering/reflectiveShadowMap.d.ts +3 -3
  76. package/Shaders/ShadersInclude/backgroundUboDeclaration.js +1 -1
  77. package/Shaders/ShadersInclude/backgroundUboDeclaration.js.map +1 -1
  78. package/Shaders/ShadersInclude/clusteredLightingFunctions.js +1 -3
  79. package/Shaders/ShadersInclude/clusteredLightingFunctions.js.map +1 -1
  80. package/Shaders/ShadersInclude/defaultUboDeclaration.js +1 -1
  81. package/Shaders/ShadersInclude/defaultUboDeclaration.js.map +1 -1
  82. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +0 -34
  83. package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  84. package/Shaders/ShadersInclude/helperFunctions.js +1 -1
  85. package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
  86. package/Shaders/ShadersInclude/importanceSampling.js +0 -4
  87. package/Shaders/ShadersInclude/importanceSampling.js.map +1 -1
  88. package/Shaders/ShadersInclude/lightsFragmentFunctions.js +0 -1
  89. package/Shaders/ShadersInclude/lightsFragmentFunctions.js.map +1 -1
  90. package/Shaders/ShadersInclude/pbrBRDFFunctions.js +1 -1
  91. package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  92. package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js +0 -1
  93. package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js.map +1 -1
  94. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +1 -3
  95. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  96. package/Shaders/ShadersInclude/pbrHelperFunctions.js +0 -2
  97. package/Shaders/ShadersInclude/pbrHelperFunctions.js.map +1 -1
  98. package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
  99. package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  100. package/ShadersWGSL/ShadersInclude/backgroundUboDeclaration.js +1 -1
  101. package/ShadersWGSL/ShadersInclude/backgroundUboDeclaration.js.map +1 -1
  102. package/ShadersWGSL/ShadersInclude/defaultUboDeclaration.js +1 -1
  103. package/ShadersWGSL/ShadersInclude/defaultUboDeclaration.js.map +1 -1
  104. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +0 -28
  105. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  106. package/ShadersWGSL/ShadersInclude/importanceSampling.js +0 -4
  107. package/ShadersWGSL/ShadersInclude/importanceSampling.js.map +1 -1
  108. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js +1 -1
  109. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  110. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +1 -3
  111. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  112. package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.js +0 -2
  113. package/ShadersWGSL/ShadersInclude/pbrHelperFunctions.js.map +1 -1
  114. package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js +1 -1
  115. package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  116. package/package.json +1 -1
  117. package/scene.d.ts +0 -21
  118. package/scene.js +3 -29
  119. package/scene.js.map +1 -1
  120. package/Materials/PBR/openPbrMaterial.d.ts +0 -998
  121. package/Materials/PBR/openPbrMaterial.js +0 -2069
  122. package/Materials/PBR/openPbrMaterial.js.map +0 -1
  123. package/Materials/floatingOriginMatrixOverrides.d.ts +0 -3
  124. package/Materials/floatingOriginMatrixOverrides.js +0 -91
  125. package/Materials/floatingOriginMatrixOverrides.js.map +0 -1
  126. package/Materials/imageProcessing.d.ts +0 -65
  127. package/Materials/imageProcessing.js +0 -162
  128. package/Materials/imageProcessing.js.map +0 -1
  129. package/Materials/uv.defines.d.ts +0 -22
  130. package/Materials/uv.defines.js +0 -24
  131. package/Materials/uv.defines.js.map +0 -1
  132. package/Particles/Node/Blocks/particleLocalVariableBlock.d.ts +0 -38
  133. package/Particles/Node/Blocks/particleLocalVariableBlock.js +0 -108
  134. package/Particles/Node/Blocks/particleLocalVariableBlock.js.map +0 -1
  135. package/Particles/Node/Blocks/particleVectorLengthBlock.d.ts +0 -26
  136. package/Particles/Node/Blocks/particleVectorLengthBlock.js +0 -50
  137. package/Particles/Node/Blocks/particleVectorLengthBlock.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  import { __decorate } from "../../tslib.es6.js";
2
2
  /* eslint-disable @typescript-eslint/naming-convention */
3
- import { expandToProperty } from "../../Misc/decorators.js";
3
+ import { serializeAsImageProcessingConfiguration, expandToProperty } from "../../Misc/decorators.js";
4
4
  import { Logger } from "../../Misc/logger.js";
5
5
  import { SmartArray } from "../../Misc/smartArray.js";
6
6
  import { GetEnvironmentBRDFTexture } from "../../Misc/brdfTextureTools.js";
@@ -10,11 +10,11 @@ import { VertexBuffer } from "../../Buffers/buffer.js";
10
10
  import { PBRBRDFConfiguration } from "./pbrBRDFConfiguration.js";
11
11
  import { PrePassConfiguration } from "../prePassConfiguration.js";
12
12
  import { Color3, TmpColors } from "../../Maths/math.color.js";
13
- import { ImageProcessingDefinesMixin } from "../../Materials/imageProcessingConfiguration.defines.js";
14
13
  import { ImageProcessingConfiguration } from "../../Materials/imageProcessingConfiguration.js";
15
14
  import { Material } from "../../Materials/material.js";
16
15
  import { MaterialDefines } from "../../Materials/materialDefines.js";
17
16
  import { PushMaterial } from "../../Materials/pushMaterial.js";
17
+ import { Texture } from "../../Materials/Textures/texture.js";
18
18
  import { MaterialFlags } from "../materialFlags.js";
19
19
 
20
20
  import "../../Materials/Textures/baseTexture.polynomial.js";
@@ -26,18 +26,14 @@ import { PBRSheenConfiguration } from "./pbrSheenConfiguration.js";
26
26
  import { PBRSubSurfaceConfiguration } from "./pbrSubSurfaceConfiguration.js";
27
27
  import { DetailMapConfiguration } from "../material.detailMapConfiguration.js";
28
28
  import { AddClipPlaneUniforms, BindClipPlane } from "../clipPlaneMaterialHelper.js";
29
- import { BindBonesParameters, BindFogParameters, BindLights, BindLogDepth, BindMorphTargetParameters, BindTextureMatrix, BindIBLParameters, BindIBLSamplers, HandleFallbacksForShadows, PrepareAttributesForBakedVertexAnimation, PrepareAttributesForBones, PrepareAttributesForInstances, PrepareAttributesForMorphTargets, PrepareDefinesForAttributes, PrepareDefinesForFrameBoundValues, PrepareDefinesForLights, PrepareDefinesForIBL, PrepareDefinesForMergedUV, PrepareDefinesForMisc, PrepareDefinesForMultiview, PrepareDefinesForOIT, PrepareDefinesForPrePass, PrepareUniformsAndSamplersList, PrepareUniformsAndSamplersForIBL, PrepareUniformLayoutForIBL, } from "../materialHelper.functions.js";
29
+ import { BindBonesParameters, BindFogParameters, BindLights, BindLogDepth, BindMorphTargetParameters, BindTextureMatrix, HandleFallbacksForShadows, PrepareAttributesForBakedVertexAnimation, PrepareAttributesForBones, PrepareAttributesForInstances, PrepareAttributesForMorphTargets, PrepareDefinesForAttributes, PrepareDefinesForFrameBoundValues, PrepareDefinesForLights, PrepareDefinesForMergedUV, PrepareDefinesForMisc, PrepareDefinesForMultiview, PrepareDefinesForOIT, PrepareDefinesForPrePass, PrepareUniformsAndSamplersList, } from "../materialHelper.functions.js";
30
30
  import { MaterialHelperGeometryRendering } from "../materialHelper.geometryrendering.js";
31
- import { UVDefinesMixin } from "../uv.defines.js";
32
- import { ImageProcessingMixin } from "../imageProcessing.js";
33
31
  const onCreatedEffectParameters = { effect: null, subMesh: null };
34
- class PBRMaterialDefinesBase extends UVDefinesMixin(MaterialDefines) {
35
- }
36
32
  /**
37
33
  * Manages the defines for the PBR Material.
38
34
  * @internal
39
35
  */
40
- export class PBRMaterialDefines extends ImageProcessingDefinesMixin(PBRMaterialDefinesBase) {
36
+ export class PBRMaterialDefines extends MaterialDefines {
41
37
  /**
42
38
  * Initializes the PBR Material defines.
43
39
  * @param externalProperties The external properties
@@ -48,6 +44,18 @@ export class PBRMaterialDefines extends ImageProcessingDefinesMixin(PBRMaterialD
48
44
  this.NUM_SAMPLES = "0";
49
45
  this.REALTIME_FILTERING = false;
50
46
  this.IBL_CDF_FILTERING = false;
47
+ this.MAINUV1 = false;
48
+ this.MAINUV2 = false;
49
+ this.MAINUV3 = false;
50
+ this.MAINUV4 = false;
51
+ this.MAINUV5 = false;
52
+ this.MAINUV6 = false;
53
+ this.UV1 = false;
54
+ this.UV2 = false;
55
+ this.UV3 = false;
56
+ this.UV4 = false;
57
+ this.UV5 = false;
58
+ this.UV6 = false;
51
59
  this.ALBEDO = false;
52
60
  this.GAMMAALBEDO = false;
53
61
  this.ALBEDODIRECTUV = 0;
@@ -192,6 +200,21 @@ export class PBRMaterialDefines extends ImageProcessingDefinesMixin(PBRMaterialD
192
200
  this.MORPHTARGETTEXTURE_HASCOLORS = false;
193
201
  this.NUM_MORPH_INFLUENCERS = 0;
194
202
  this.MORPHTARGETS_TEXTURE = false;
203
+ this.IMAGEPROCESSING = false;
204
+ this.VIGNETTE = false;
205
+ this.VIGNETTEBLENDMODEMULTIPLY = false;
206
+ this.VIGNETTEBLENDMODEOPAQUE = false;
207
+ this.TONEMAPPING = 0;
208
+ this.CONTRAST = false;
209
+ this.COLORCURVES = false;
210
+ this.COLORGRADING = false;
211
+ this.COLORGRADING3D = false;
212
+ this.SAMPLER3DGREENDEPTH = false;
213
+ this.SAMPLER3DBGRMAP = false;
214
+ this.DITHER = false;
215
+ this.IMAGEPROCESSINGPOSTPROCESS = false;
216
+ this.SKIPFINALCOLORCLAMP = false;
217
+ this.EXPOSURE = false;
195
218
  this.MULTIVIEW = false;
196
219
  this.ORDER_INDEPENDENT_TRANSPARENCY = false;
197
220
  this.ORDER_INDEPENDENT_TRANSPARENCY_16BITS = false;
@@ -230,8 +253,6 @@ export class PBRMaterialDefines extends ImageProcessingDefinesMixin(PBRMaterialD
230
253
  this.NORMALXYSCALE = true;
231
254
  }
232
255
  }
233
- class PBRBaseMaterialBase extends ImageProcessingMixin(PushMaterial) {
234
- }
235
256
  /**
236
257
  * The Physically based material base class of BJS.
237
258
  *
@@ -241,7 +262,7 @@ class PBRBaseMaterialBase extends ImageProcessingMixin(PushMaterial) {
241
262
  * @see [WebGL](https://playground.babylonjs.com/#CGHTSM#1)
242
263
  * @see [WebGPU](https://playground.babylonjs.com/#CGHTSM#2)
243
264
  */
244
- export class PBRBaseMaterial extends PBRBaseMaterialBase {
265
+ export class PBRBaseMaterial extends PushMaterial {
245
266
  /**
246
267
  * Enables realtime filtering on the texture.
247
268
  */
@@ -268,6 +289,32 @@ export class PBRBaseMaterial extends PBRBaseMaterialBase {
268
289
  get canRenderToMRT() {
269
290
  return true;
270
291
  }
292
+ /**
293
+ * Attaches a new image processing configuration to the PBR Material.
294
+ * @param configuration
295
+ */
296
+ _attachImageProcessingConfiguration(configuration) {
297
+ if (configuration === this._imageProcessingConfiguration) {
298
+ return;
299
+ }
300
+ // Detaches observer.
301
+ if (this._imageProcessingConfiguration && this._imageProcessingObserver) {
302
+ this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver);
303
+ }
304
+ // Pick the scene configuration if needed.
305
+ if (!configuration) {
306
+ this._imageProcessingConfiguration = this.getScene().imageProcessingConfiguration;
307
+ }
308
+ else {
309
+ this._imageProcessingConfiguration = configuration;
310
+ }
311
+ // Attaches observer.
312
+ if (this._imageProcessingConfiguration) {
313
+ this._imageProcessingObserver = this._imageProcessingConfiguration.onUpdateParameters.add(() => {
314
+ this._markAllSubMeshesAsImageProcessingDirty();
315
+ });
316
+ }
317
+ }
271
318
  /**
272
319
  * Instantiates a new PBRMaterial instance.
273
320
  *
@@ -642,6 +689,10 @@ export class PBRBaseMaterial extends PBRBaseMaterialBase {
642
689
  * @internal
643
690
  */
644
691
  this._enableSpecularAntiAliasing = false;
692
+ /**
693
+ * Keep track of the image processing observer to allow dispose and replace.
694
+ */
695
+ this._imageProcessingObserver = null;
645
696
  /**
646
697
  * Stores the available render targets.
647
698
  */
@@ -1081,6 +1132,7 @@ export class PBRBaseMaterial extends PBRBaseMaterialBase {
1081
1132
  "vMetallicReflectanceFactors",
1082
1133
  "vEmissiveColor",
1083
1134
  "visibility",
1135
+ "vReflectionColor",
1084
1136
  "vFogInfos",
1085
1137
  "vFogColor",
1086
1138
  "pointSize",
@@ -1089,8 +1141,12 @@ export class PBRBaseMaterial extends PBRBaseMaterialBase {
1089
1141
  "vBaseDiffuseRoughnessInfos",
1090
1142
  "vAmbientInfos",
1091
1143
  "vOpacityInfos",
1144
+ "vReflectionInfos",
1145
+ "vReflectionPosition",
1146
+ "vReflectionSize",
1092
1147
  "vEmissiveInfos",
1093
1148
  "vReflectivityInfos",
1149
+ "vReflectionFilteringInfo",
1094
1150
  "vMetallicReflectanceInfos",
1095
1151
  "vReflectanceInfos",
1096
1152
  "vMicroSurfaceSamplerInfos",
@@ -1102,6 +1158,7 @@ export class PBRBaseMaterial extends PBRBaseMaterialBase {
1102
1158
  "baseDiffuseRoughnessMatrix",
1103
1159
  "ambientMatrix",
1104
1160
  "opacityMatrix",
1161
+ "reflectionMatrix",
1105
1162
  "emissiveMatrix",
1106
1163
  "reflectivityMatrix",
1107
1164
  "normalMatrix",
@@ -1112,6 +1169,26 @@ export class PBRBaseMaterial extends PBRBaseMaterialBase {
1112
1169
  "reflectanceMatrix",
1113
1170
  "vLightingIntensity",
1114
1171
  "logarithmicDepthConstant",
1172
+ "vSphericalX",
1173
+ "vSphericalY",
1174
+ "vSphericalZ",
1175
+ "vSphericalXX_ZZ",
1176
+ "vSphericalYY_ZZ",
1177
+ "vSphericalZZ",
1178
+ "vSphericalXY",
1179
+ "vSphericalYZ",
1180
+ "vSphericalZX",
1181
+ "vSphericalL00",
1182
+ "vSphericalL1_1",
1183
+ "vSphericalL10",
1184
+ "vSphericalL11",
1185
+ "vSphericalL2_2",
1186
+ "vSphericalL2_1",
1187
+ "vSphericalL20",
1188
+ "vSphericalL21",
1189
+ "vSphericalL22",
1190
+ "vReflectionMicrosurfaceInfos",
1191
+ "vReflectionDominantDirection",
1115
1192
  "vTangentSpaceParams",
1116
1193
  "boneTextureWidth",
1117
1194
  "vDebugMode",
@@ -1129,6 +1206,10 @@ export class PBRBaseMaterial extends PBRBaseMaterialBase {
1129
1206
  "bumpSampler",
1130
1207
  "lightmapSampler",
1131
1208
  "opacitySampler",
1209
+ "reflectionSampler",
1210
+ "reflectionSamplerLow",
1211
+ "reflectionSamplerHigh",
1212
+ "irradianceSampler",
1132
1213
  "microSurfaceSampler",
1133
1214
  "environmentBrdfSampler",
1134
1215
  "boneSampler",
@@ -1137,10 +1218,10 @@ export class PBRBaseMaterial extends PBRBaseMaterialBase {
1137
1218
  "morphTargets",
1138
1219
  "oitDepthSampler",
1139
1220
  "oitFrontColorSampler",
1221
+ "icdfSampler",
1140
1222
  "areaLightsLTC1Sampler",
1141
1223
  "areaLightsLTC2Sampler",
1142
1224
  ];
1143
- PrepareUniformsAndSamplersForIBL(uniforms, samplers, true);
1144
1225
  const uniformBuffers = ["Material", "Scene", "Mesh"];
1145
1226
  const indexParameters = { maxSimultaneousLights: this._maxSimultaneousLights, maxSimultaneousMorphTargets: defines.NUM_MORPH_INFLUENCERS };
1146
1227
  this._eventInfo.fallbacks = fallbacks;
@@ -1275,12 +1356,121 @@ export class PBRBaseMaterial extends PBRBaseMaterialBase {
1275
1356
  defines.OPACITY = false;
1276
1357
  }
1277
1358
  const reflectionTexture = this._getReflectionTexture();
1278
- const useSHInFragment = this._forceIrradianceInFragment ||
1279
- this.realTimeFiltering ||
1280
- this._twoSidedLighting ||
1281
- engine.getCaps().maxVaryingVectors <= 8 ||
1282
- this._baseDiffuseRoughnessTexture != null;
1283
- PrepareDefinesForIBL(scene, reflectionTexture, defines, this.realTimeFiltering, this.realTimeFilteringQuality, !useSHInFragment);
1359
+ if (reflectionTexture && MaterialFlags.ReflectionTextureEnabled) {
1360
+ defines.REFLECTION = true;
1361
+ defines.GAMMAREFLECTION = reflectionTexture.gammaSpace;
1362
+ defines.RGBDREFLECTION = reflectionTexture.isRGBD;
1363
+ defines.LODINREFLECTIONALPHA = reflectionTexture.lodLevelInAlpha;
1364
+ defines.LINEARSPECULARREFLECTION = reflectionTexture.linearSpecularLOD;
1365
+ defines.USEIRRADIANCEMAP = false;
1366
+ if (this.realTimeFiltering && this.realTimeFilteringQuality > 0) {
1367
+ defines.NUM_SAMPLES = "" + this.realTimeFilteringQuality;
1368
+ if (engine._features.needTypeSuffixInShaderConstants) {
1369
+ defines.NUM_SAMPLES = defines.NUM_SAMPLES + "u";
1370
+ }
1371
+ defines.REALTIME_FILTERING = true;
1372
+ if (this.getScene().iblCdfGenerator) {
1373
+ defines.IBL_CDF_FILTERING = true;
1374
+ }
1375
+ }
1376
+ else {
1377
+ defines.REALTIME_FILTERING = false;
1378
+ }
1379
+ defines.INVERTCUBICMAP = reflectionTexture.coordinatesMode === Texture.INVCUBIC_MODE;
1380
+ defines.REFLECTIONMAP_3D = reflectionTexture.isCube;
1381
+ defines.REFLECTIONMAP_OPPOSITEZ = defines.REFLECTIONMAP_3D && this.getScene().useRightHandedSystem ? !reflectionTexture.invertZ : reflectionTexture.invertZ;
1382
+ defines.REFLECTIONMAP_CUBIC = false;
1383
+ defines.REFLECTIONMAP_EXPLICIT = false;
1384
+ defines.REFLECTIONMAP_PLANAR = false;
1385
+ defines.REFLECTIONMAP_PROJECTION = false;
1386
+ defines.REFLECTIONMAP_SKYBOX = false;
1387
+ defines.REFLECTIONMAP_SPHERICAL = false;
1388
+ defines.REFLECTIONMAP_EQUIRECTANGULAR = false;
1389
+ defines.REFLECTIONMAP_EQUIRECTANGULAR_FIXED = false;
1390
+ defines.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = false;
1391
+ switch (reflectionTexture.coordinatesMode) {
1392
+ case Texture.EXPLICIT_MODE:
1393
+ defines.REFLECTIONMAP_EXPLICIT = true;
1394
+ break;
1395
+ case Texture.PLANAR_MODE:
1396
+ defines.REFLECTIONMAP_PLANAR = true;
1397
+ break;
1398
+ case Texture.PROJECTION_MODE:
1399
+ defines.REFLECTIONMAP_PROJECTION = true;
1400
+ break;
1401
+ case Texture.SKYBOX_MODE:
1402
+ defines.REFLECTIONMAP_SKYBOX = true;
1403
+ break;
1404
+ case Texture.SPHERICAL_MODE:
1405
+ defines.REFLECTIONMAP_SPHERICAL = true;
1406
+ break;
1407
+ case Texture.EQUIRECTANGULAR_MODE:
1408
+ defines.REFLECTIONMAP_EQUIRECTANGULAR = true;
1409
+ break;
1410
+ case Texture.FIXED_EQUIRECTANGULAR_MODE:
1411
+ defines.REFLECTIONMAP_EQUIRECTANGULAR_FIXED = true;
1412
+ break;
1413
+ case Texture.FIXED_EQUIRECTANGULAR_MIRRORED_MODE:
1414
+ defines.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = true;
1415
+ break;
1416
+ case Texture.CUBIC_MODE:
1417
+ case Texture.INVCUBIC_MODE:
1418
+ default:
1419
+ defines.REFLECTIONMAP_CUBIC = true;
1420
+ defines.USE_LOCAL_REFLECTIONMAP_CUBIC = reflectionTexture.boundingBoxSize ? true : false;
1421
+ break;
1422
+ }
1423
+ if (reflectionTexture.coordinatesMode !== Texture.SKYBOX_MODE) {
1424
+ if (reflectionTexture.irradianceTexture) {
1425
+ defines.USEIRRADIANCEMAP = true;
1426
+ defines.USESPHERICALFROMREFLECTIONMAP = false;
1427
+ defines.USESPHERICALINVERTEX = false;
1428
+ if (reflectionTexture.irradianceTexture._dominantDirection) {
1429
+ defines.USE_IRRADIANCE_DOMINANT_DIRECTION = true;
1430
+ }
1431
+ }
1432
+ // Assume using spherical polynomial if the reflection texture is a cube map
1433
+ else if (reflectionTexture.isCube) {
1434
+ defines.USESPHERICALFROMREFLECTIONMAP = true;
1435
+ defines.USEIRRADIANCEMAP = false;
1436
+ defines.USE_IRRADIANCE_DOMINANT_DIRECTION = false;
1437
+ if (this._forceIrradianceInFragment ||
1438
+ this.realTimeFiltering ||
1439
+ this._twoSidedLighting ||
1440
+ engine.getCaps().maxVaryingVectors <= 8 ||
1441
+ this._baseDiffuseRoughnessTexture) {
1442
+ defines.USESPHERICALINVERTEX = false;
1443
+ }
1444
+ else {
1445
+ defines.USESPHERICALINVERTEX = true;
1446
+ }
1447
+ }
1448
+ }
1449
+ }
1450
+ else {
1451
+ defines.REFLECTION = false;
1452
+ defines.REFLECTIONMAP_3D = false;
1453
+ defines.REFLECTIONMAP_SPHERICAL = false;
1454
+ defines.REFLECTIONMAP_PLANAR = false;
1455
+ defines.REFLECTIONMAP_CUBIC = false;
1456
+ defines.USE_LOCAL_REFLECTIONMAP_CUBIC = false;
1457
+ defines.REFLECTIONMAP_PROJECTION = false;
1458
+ defines.REFLECTIONMAP_SKYBOX = false;
1459
+ defines.REFLECTIONMAP_EXPLICIT = false;
1460
+ defines.REFLECTIONMAP_EQUIRECTANGULAR = false;
1461
+ defines.REFLECTIONMAP_EQUIRECTANGULAR_FIXED = false;
1462
+ defines.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = false;
1463
+ defines.INVERTCUBICMAP = false;
1464
+ defines.USESPHERICALFROMREFLECTIONMAP = false;
1465
+ defines.USEIRRADIANCEMAP = false;
1466
+ defines.USE_IRRADIANCE_DOMINANT_DIRECTION = false;
1467
+ defines.USESPHERICALINVERTEX = false;
1468
+ defines.REFLECTIONMAP_OPPOSITEZ = false;
1469
+ defines.LODINREFLECTIONALPHA = false;
1470
+ defines.GAMMAREFLECTION = false;
1471
+ defines.RGBDREFLECTION = false;
1472
+ defines.LINEARSPECULARREFLECTION = false;
1473
+ }
1284
1474
  if (this._lightmapTexture && MaterialFlags.LightmapTextureEnabled) {
1285
1475
  PrepareDefinesForMergedUV(this._lightmapTexture, defines, "LIGHTMAP");
1286
1476
  defines.USELIGHTMAPASSHADOWMAP = this._useLightmapAsShadowmap;
@@ -1493,6 +1683,10 @@ export class PBRBaseMaterial extends PBRBaseMaterialBase {
1493
1683
  ubo.addUniform("vLightmapInfos", 2);
1494
1684
  ubo.addUniform("vReflectivityInfos", 3);
1495
1685
  ubo.addUniform("vMicroSurfaceSamplerInfos", 2);
1686
+ ubo.addUniform("vReflectionInfos", 2);
1687
+ ubo.addUniform("vReflectionFilteringInfo", 2);
1688
+ ubo.addUniform("vReflectionPosition", 3);
1689
+ ubo.addUniform("vReflectionSize", 3);
1496
1690
  ubo.addUniform("vBumpInfos", 3);
1497
1691
  ubo.addUniform("albedoMatrix", 16);
1498
1692
  ubo.addUniform("baseWeightMatrix", 16);
@@ -1505,10 +1699,14 @@ export class PBRBaseMaterial extends PBRBaseMaterialBase {
1505
1699
  ubo.addUniform("microSurfaceSamplerMatrix", 16);
1506
1700
  ubo.addUniform("bumpMatrix", 16);
1507
1701
  ubo.addUniform("vTangentSpaceParams", 2);
1702
+ ubo.addUniform("reflectionMatrix", 16);
1703
+ ubo.addUniform("vReflectionColor", 3);
1508
1704
  ubo.addUniform("vAlbedoColor", 4);
1509
1705
  ubo.addUniform("baseWeight", 1);
1510
1706
  ubo.addUniform("baseDiffuseRoughness", 1);
1511
1707
  ubo.addUniform("vLightingIntensity", 4);
1708
+ ubo.addUniform("vReflectionMicrosurfaceInfos", 3);
1709
+ ubo.addUniform("vReflectionDominantDirection", 3);
1512
1710
  ubo.addUniform("pointSize", 1);
1513
1711
  ubo.addUniform("vReflectivityColor", 4);
1514
1712
  ubo.addUniform("vEmissiveColor", 3);
@@ -1519,8 +1717,25 @@ export class PBRBaseMaterial extends PBRBaseMaterialBase {
1519
1717
  ubo.addUniform("metallicReflectanceMatrix", 16);
1520
1718
  ubo.addUniform("vReflectanceInfos", 2);
1521
1719
  ubo.addUniform("reflectanceMatrix", 16);
1720
+ ubo.addUniform("vSphericalL00", 3);
1721
+ ubo.addUniform("vSphericalL1_1", 3);
1722
+ ubo.addUniform("vSphericalL10", 3);
1723
+ ubo.addUniform("vSphericalL11", 3);
1724
+ ubo.addUniform("vSphericalL2_2", 3);
1725
+ ubo.addUniform("vSphericalL2_1", 3);
1726
+ ubo.addUniform("vSphericalL20", 3);
1727
+ ubo.addUniform("vSphericalL21", 3);
1728
+ ubo.addUniform("vSphericalL22", 3);
1729
+ ubo.addUniform("vSphericalX", 3);
1730
+ ubo.addUniform("vSphericalY", 3);
1731
+ ubo.addUniform("vSphericalZ", 3);
1732
+ ubo.addUniform("vSphericalXX_ZZ", 3);
1733
+ ubo.addUniform("vSphericalYY_ZZ", 3);
1734
+ ubo.addUniform("vSphericalZZ", 3);
1735
+ ubo.addUniform("vSphericalXY", 3);
1736
+ ubo.addUniform("vSphericalYZ", 3);
1737
+ ubo.addUniform("vSphericalZX", 3);
1522
1738
  ubo.addUniform("cameraInfo", 4);
1523
- PrepareUniformLayoutForIBL(ubo, true, true, true, true, true);
1524
1739
  super.buildUniformLayout();
1525
1740
  }
1526
1741
  /**
@@ -1593,6 +1808,54 @@ export class PBRBaseMaterial extends PBRBaseMaterialBase {
1593
1808
  ubo.updateFloat2("vOpacityInfos", this._opacityTexture.coordinatesIndex, this._opacityTexture.level);
1594
1809
  BindTextureMatrix(this._opacityTexture, ubo, "opacity");
1595
1810
  }
1811
+ if (reflectionTexture && MaterialFlags.ReflectionTextureEnabled) {
1812
+ ubo.updateMatrix("reflectionMatrix", reflectionTexture.getReflectionTextureMatrix());
1813
+ ubo.updateFloat2("vReflectionInfos", reflectionTexture.level * scene.iblIntensity, 0);
1814
+ if (reflectionTexture.boundingBoxSize) {
1815
+ const cubeTexture = reflectionTexture;
1816
+ ubo.updateVector3("vReflectionPosition", cubeTexture.boundingBoxPosition);
1817
+ ubo.updateVector3("vReflectionSize", cubeTexture.boundingBoxSize);
1818
+ }
1819
+ if (this.realTimeFiltering) {
1820
+ const width = reflectionTexture.getSize().width;
1821
+ ubo.updateFloat2("vReflectionFilteringInfo", width, Math.log2(width));
1822
+ }
1823
+ if (!defines.USEIRRADIANCEMAP) {
1824
+ const polynomials = reflectionTexture.sphericalPolynomial;
1825
+ if (defines.USESPHERICALFROMREFLECTIONMAP && polynomials) {
1826
+ if (defines.SPHERICAL_HARMONICS) {
1827
+ const preScaledHarmonics = polynomials.preScaledHarmonics;
1828
+ ubo.updateVector3("vSphericalL00", preScaledHarmonics.l00);
1829
+ ubo.updateVector3("vSphericalL1_1", preScaledHarmonics.l1_1);
1830
+ ubo.updateVector3("vSphericalL10", preScaledHarmonics.l10);
1831
+ ubo.updateVector3("vSphericalL11", preScaledHarmonics.l11);
1832
+ ubo.updateVector3("vSphericalL2_2", preScaledHarmonics.l2_2);
1833
+ ubo.updateVector3("vSphericalL2_1", preScaledHarmonics.l2_1);
1834
+ ubo.updateVector3("vSphericalL20", preScaledHarmonics.l20);
1835
+ ubo.updateVector3("vSphericalL21", preScaledHarmonics.l21);
1836
+ ubo.updateVector3("vSphericalL22", preScaledHarmonics.l22);
1837
+ }
1838
+ else {
1839
+ ubo.updateFloat3("vSphericalX", polynomials.x.x, polynomials.x.y, polynomials.x.z);
1840
+ ubo.updateFloat3("vSphericalY", polynomials.y.x, polynomials.y.y, polynomials.y.z);
1841
+ ubo.updateFloat3("vSphericalZ", polynomials.z.x, polynomials.z.y, polynomials.z.z);
1842
+ ubo.updateFloat3("vSphericalXX_ZZ", polynomials.xx.x - polynomials.zz.x, polynomials.xx.y - polynomials.zz.y, polynomials.xx.z - polynomials.zz.z);
1843
+ ubo.updateFloat3("vSphericalYY_ZZ", polynomials.yy.x - polynomials.zz.x, polynomials.yy.y - polynomials.zz.y, polynomials.yy.z - polynomials.zz.z);
1844
+ ubo.updateFloat3("vSphericalZZ", polynomials.zz.x, polynomials.zz.y, polynomials.zz.z);
1845
+ ubo.updateFloat3("vSphericalXY", polynomials.xy.x, polynomials.xy.y, polynomials.xy.z);
1846
+ ubo.updateFloat3("vSphericalYZ", polynomials.yz.x, polynomials.yz.y, polynomials.yz.z);
1847
+ ubo.updateFloat3("vSphericalZX", polynomials.zx.x, polynomials.zx.y, polynomials.zx.z);
1848
+ }
1849
+ }
1850
+ }
1851
+ else {
1852
+ // If we're using an irradiance map with a dominant direction assigned, set it.
1853
+ if (defines.USEIRRADIANCEMAP && defines.USE_IRRADIANCE_DOMINANT_DIRECTION) {
1854
+ ubo.updateVector3("vReflectionDominantDirection", reflectionTexture.irradianceTexture._dominantDirection);
1855
+ }
1856
+ }
1857
+ ubo.updateFloat3("vReflectionMicrosurfaceInfos", reflectionTexture.getSize().width, reflectionTexture.lodGenerationScale, reflectionTexture.lodGenerationOffset);
1858
+ }
1596
1859
  if (this._emissiveTexture && MaterialFlags.EmissiveTextureEnabled) {
1597
1860
  ubo.updateFloat2("vEmissiveInfos", this._emissiveTexture.coordinatesIndex, this._emissiveTexture.level);
1598
1861
  BindTextureMatrix(this._emissiveTexture, ubo, "emissive");
@@ -1633,7 +1896,6 @@ export class PBRBaseMaterial extends PBRBaseMaterialBase {
1633
1896
  ubo.updateFloat2("vTangentSpaceParams", this._invertNormalMapX ? -1.0 : 1.0, this._invertNormalMapY ? -1.0 : 1.0);
1634
1897
  }
1635
1898
  }
1636
- BindIBLParameters(scene, defines, ubo, reflectionTexture, this.realTimeFiltering, true, true, true, true, true, this._reflectionColor);
1637
1899
  }
1638
1900
  // Point size
1639
1901
  if (this.pointsCloud) {
@@ -1658,6 +1920,7 @@ export class PBRBaseMaterial extends PBRBaseMaterialBase {
1658
1920
  ubo.updateColor4("vReflectivityColor", this._reflectivityColor, this._microSurface);
1659
1921
  }
1660
1922
  ubo.updateColor3("vEmissiveColor", MaterialFlags.EmissiveTextureEnabled ? this._emissiveColor : Color3.BlackReadOnly);
1923
+ ubo.updateColor3("vReflectionColor", this._reflectionColor);
1661
1924
  if (!defines.SS_REFRACTION && this.subSurface?._linkRefractionWithTransparency) {
1662
1925
  ubo.updateColor4("vAlbedoColor", this._albedoColor, 1);
1663
1926
  }
@@ -1694,7 +1957,24 @@ export class PBRBaseMaterial extends PBRBaseMaterialBase {
1694
1957
  if (this._opacityTexture && MaterialFlags.OpacityTextureEnabled) {
1695
1958
  ubo.setTexture("opacitySampler", this._opacityTexture);
1696
1959
  }
1697
- BindIBLSamplers(scene, defines, ubo, reflectionTexture, this.realTimeFiltering);
1960
+ if (reflectionTexture && MaterialFlags.ReflectionTextureEnabled) {
1961
+ if (defines.LODBASEDMICROSFURACE) {
1962
+ ubo.setTexture("reflectionSampler", reflectionTexture);
1963
+ }
1964
+ else {
1965
+ ubo.setTexture("reflectionSampler", reflectionTexture._lodTextureMid || reflectionTexture);
1966
+ ubo.setTexture("reflectionSamplerLow", reflectionTexture._lodTextureLow || reflectionTexture);
1967
+ ubo.setTexture("reflectionSamplerHigh", reflectionTexture._lodTextureHigh || reflectionTexture);
1968
+ }
1969
+ if (defines.USEIRRADIANCEMAP) {
1970
+ ubo.setTexture("irradianceSampler", reflectionTexture.irradianceTexture);
1971
+ }
1972
+ //if realtime filtering and using CDF maps, set them.
1973
+ const cdfGenerator = this.getScene().iblCdfGenerator;
1974
+ if (this.realTimeFiltering && cdfGenerator) {
1975
+ ubo.setTexture("icdfSampler", cdfGenerator.getIcdfTexture());
1976
+ }
1977
+ }
1698
1978
  if (defines.ENVIRONMENTBRDF) {
1699
1979
  ubo.setTexture("environmentBrdfSampler", this._environmentBRDFTexture);
1700
1980
  }
@@ -2023,6 +2303,9 @@ PBRBaseMaterial.LIGHTFALLOFF_STANDARD = 2;
2023
2303
  * False by default. This is mostly meant for backward compatibility.
2024
2304
  */
2025
2305
  PBRBaseMaterial.ForceGLSL = false;
2306
+ __decorate([
2307
+ serializeAsImageProcessingConfiguration()
2308
+ ], PBRBaseMaterial.prototype, "_imageProcessingConfiguration", void 0);
2026
2309
  __decorate([
2027
2310
  expandToProperty("_markAllSubMeshesAsMiscDirty")
2028
2311
  ], PBRBaseMaterial.prototype, "debugMode", void 0);