@babylonjs/core 9.1.0 → 9.2.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 (206) hide show
  1. package/Animations/animation.js +2 -2
  2. package/Animations/animation.js.map +1 -1
  3. package/Animations/animationGroup.js +1 -1
  4. package/Animations/animationGroup.js.map +1 -1
  5. package/Animations/animatorAvatar.js +13 -12
  6. package/Animations/animatorAvatar.js.map +1 -1
  7. package/Animations/easing.js +1 -1
  8. package/Animations/easing.js.map +1 -1
  9. package/Animations/pathCursor.js +1 -2
  10. package/Animations/pathCursor.js.map +1 -1
  11. package/Cameras/geospatialCameraMovement.js +4 -5
  12. package/Cameras/geospatialCameraMovement.js.map +1 -1
  13. package/Engines/Extensions/engine.multiview.js +6 -0
  14. package/Engines/Extensions/engine.multiview.js.map +1 -1
  15. package/Engines/abstractEngine.js +2 -2
  16. package/Engines/abstractEngine.js.map +1 -1
  17. package/Engines/constants.d.ts +9 -4
  18. package/Engines/constants.js +9 -4
  19. package/Engines/constants.js.map +1 -1
  20. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +6 -0
  21. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +38 -11
  22. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
  23. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +4 -0
  24. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +4 -0
  25. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  26. package/Layers/selectionOutlineLayer.d.ts +7 -0
  27. package/Layers/selectionOutlineLayer.js +18 -1
  28. package/Layers/selectionOutlineLayer.js.map +1 -1
  29. package/Layers/thinSelectionOutlineLayer.d.ts +7 -0
  30. package/Layers/thinSelectionOutlineLayer.js +86 -36
  31. package/Layers/thinSelectionOutlineLayer.js.map +1 -1
  32. package/Lights/Clustered/clusteredLightContainer.d.ts +6 -0
  33. package/Lights/Clustered/clusteredLightContainer.js +42 -0
  34. package/Lights/Clustered/clusteredLightContainer.js.map +1 -1
  35. package/Lights/light.d.ts +7 -0
  36. package/Lights/light.js +10 -0
  37. package/Lights/light.js.map +1 -1
  38. package/Materials/GreasedLine/greasedLineSimpleMaterial.js +13 -3
  39. package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
  40. package/Materials/PBR/openpbrMaterial.d.ts +155 -53
  41. package/Materials/PBR/openpbrMaterial.js +149 -61
  42. package/Materials/PBR/openpbrMaterial.js.map +1 -1
  43. package/Materials/PBR/pbrBaseMaterial.d.ts +36 -31
  44. package/Materials/PBR/pbrBaseMaterial.js +2 -32
  45. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  46. package/Materials/Textures/cubeTexture.js +10 -0
  47. package/Materials/Textures/cubeTexture.js.map +1 -1
  48. package/Materials/environmentLighting.defines.d.ts +31 -0
  49. package/Materials/environmentLighting.defines.js +33 -0
  50. package/Materials/environmentLighting.defines.js.map +1 -0
  51. package/Materials/material.js +1 -0
  52. package/Materials/material.js.map +1 -1
  53. package/Materials/materialHelper.functions.js +8 -2
  54. package/Materials/materialHelper.functions.js.map +1 -1
  55. package/Materials/materialHelper.geometryrendering.js +10 -3
  56. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  57. package/Materials/prepass.defines.d.ts +43 -0
  58. package/Materials/prepass.defines.js +45 -0
  59. package/Materials/prepass.defines.js.map +1 -0
  60. package/Materials/standardMaterial.d.ts +36 -31
  61. package/Materials/standardMaterial.js +2 -32
  62. package/Materials/standardMaterial.js.map +1 -1
  63. package/Meshes/abstractMesh.d.ts +8 -1
  64. package/Meshes/abstractMesh.js +9 -2
  65. package/Meshes/abstractMesh.js.map +1 -1
  66. package/Meshes/mesh.js +31 -4
  67. package/Meshes/mesh.js.map +1 -1
  68. package/Misc/greasedLineTools.js +5 -0
  69. package/Misc/greasedLineTools.js.map +1 -1
  70. package/Misc/tools.js +1 -1
  71. package/Misc/tools.js.map +1 -1
  72. package/Particles/EmitterTypes/coneParticleEmitter.js +2 -4
  73. package/Particles/EmitterTypes/coneParticleEmitter.js.map +1 -1
  74. package/PostProcesses/subSurfaceScatteringPostProcess.js.map +1 -1
  75. package/Rendering/IBLShadows/iblShadowsPluginMaterial.d.ts +3 -9
  76. package/Rendering/IBLShadows/iblShadowsPluginMaterial.js +35 -12
  77. package/Rendering/IBLShadows/iblShadowsPluginMaterial.js.map +1 -1
  78. package/Rendering/geometryBufferRenderer.d.ts +20 -0
  79. package/Rendering/geometryBufferRenderer.js +203 -14
  80. package/Rendering/geometryBufferRenderer.js.map +1 -1
  81. package/Rendering/objectRenderer.js +1 -0
  82. package/Rendering/objectRenderer.js.map +1 -1
  83. package/Rendering/prePassRenderer.js +7 -1
  84. package/Rendering/prePassRenderer.js.map +1 -1
  85. package/Rendering/subSurfaceConfiguration.js.map +1 -1
  86. package/Shaders/ShadersInclude/helperFunctions.js +5 -0
  87. package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
  88. package/Shaders/ShadersInclude/openpbrBaseLayerData.js +1 -1
  89. package/Shaders/ShadersInclude/openpbrBaseLayerData.js.map +1 -1
  90. package/Shaders/ShadersInclude/openpbrBlockPrePass.d.ts +5 -0
  91. package/Shaders/ShadersInclude/openpbrBlockPrePass.js +77 -0
  92. package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -0
  93. package/Shaders/ShadersInclude/openpbrDirectLighting.js +37 -17
  94. package/Shaders/ShadersInclude/openpbrDirectLighting.js.map +1 -1
  95. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +43 -17
  96. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  97. package/Shaders/ShadersInclude/openpbrFragmentDeclaration.js +10 -1
  98. package/Shaders/ShadersInclude/openpbrFragmentDeclaration.js.map +1 -1
  99. package/Shaders/ShadersInclude/openpbrFragmentSamplersDeclaration.d.ts +1 -0
  100. package/Shaders/ShadersInclude/openpbrFragmentSamplersDeclaration.js +14 -38
  101. package/Shaders/ShadersInclude/openpbrFragmentSamplersDeclaration.js.map +1 -1
  102. package/Shaders/ShadersInclude/openpbrIblFunctions.js +4 -2
  103. package/Shaders/ShadersInclude/openpbrIblFunctions.js.map +1 -1
  104. package/Shaders/ShadersInclude/openpbrSubsurfaceLayerData.d.ts +5 -0
  105. package/Shaders/ShadersInclude/openpbrSubsurfaceLayerData.js +35 -0
  106. package/Shaders/ShadersInclude/openpbrSubsurfaceLayerData.js.map +1 -0
  107. package/Shaders/ShadersInclude/openpbrTransmissionLayerData.js +1 -1
  108. package/Shaders/ShadersInclude/openpbrTransmissionLayerData.js.map +1 -1
  109. package/Shaders/ShadersInclude/openpbrUboDeclaration.js +1 -1
  110. package/Shaders/ShadersInclude/openpbrUboDeclaration.js.map +1 -1
  111. package/Shaders/ShadersInclude/openpbrVertexDeclaration.js +9 -0
  112. package/Shaders/ShadersInclude/openpbrVertexDeclaration.js.map +1 -1
  113. package/Shaders/ShadersInclude/openpbrVolumeFunctions.d.ts +5 -0
  114. package/Shaders/ShadersInclude/openpbrVolumeFunctions.js +67 -0
  115. package/Shaders/ShadersInclude/openpbrVolumeFunctions.js.map +1 -0
  116. package/Shaders/ShadersInclude/pbrBlockPrePass.js +14 -3
  117. package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  118. package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js +1 -1
  119. package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js.map +1 -1
  120. package/Shaders/ShadersInclude/pbrFragmentReflectionDeclaration.d.ts +5 -0
  121. package/Shaders/ShadersInclude/pbrFragmentReflectionDeclaration.js +43 -0
  122. package/Shaders/ShadersInclude/pbrFragmentReflectionDeclaration.js.map +1 -0
  123. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.d.ts +1 -0
  124. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +2 -32
  125. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  126. package/Shaders/ShadersInclude/sceneFragmentDeclaration.js +1 -1
  127. package/Shaders/ShadersInclude/sceneFragmentDeclaration.js.map +1 -1
  128. package/Shaders/ShadersInclude/sceneUboDeclaration.js +1 -1
  129. package/Shaders/ShadersInclude/sceneUboDeclaration.js.map +1 -1
  130. package/Shaders/geometry.fragment.d.ts +12 -0
  131. package/Shaders/geometry.fragment.js +102 -1
  132. package/Shaders/geometry.fragment.js.map +1 -1
  133. package/Shaders/geometry.vertex.d.ts +1 -0
  134. package/Shaders/geometry.vertex.js +46 -2
  135. package/Shaders/geometry.vertex.js.map +1 -1
  136. package/Shaders/iblShadowVoxelTracing.fragment.d.ts +1 -0
  137. package/Shaders/iblShadowVoxelTracing.fragment.js +2 -5
  138. package/Shaders/iblShadowVoxelTracing.fragment.js.map +1 -1
  139. package/Shaders/openpbr.fragment.d.ts +3 -1
  140. package/Shaders/openpbr.fragment.js +69 -8
  141. package/Shaders/openpbr.fragment.js.map +1 -1
  142. package/Shaders/openpbr.vertex.js +11 -5
  143. package/Shaders/openpbr.vertex.js.map +1 -1
  144. package/ShadersWGSL/ShadersInclude/helperFunctions.js +5 -0
  145. package/ShadersWGSL/ShadersInclude/helperFunctions.js.map +1 -1
  146. package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js +3 -2
  147. package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js.map +1 -1
  148. package/ShadersWGSL/ShadersInclude/openpbrBaseLayerData.js +1 -1
  149. package/ShadersWGSL/ShadersInclude/openpbrBaseLayerData.js.map +1 -1
  150. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.d.ts +5 -0
  151. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +101 -0
  152. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -0
  153. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js +39 -19
  154. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js.map +1 -1
  155. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +39 -13
  156. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  157. package/ShadersWGSL/ShadersInclude/openpbrFragmentSamplersDeclaration.d.ts +1 -0
  158. package/ShadersWGSL/ShadersInclude/openpbrFragmentSamplersDeclaration.js +14 -34
  159. package/ShadersWGSL/ShadersInclude/openpbrFragmentSamplersDeclaration.js.map +1 -1
  160. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js +5 -3
  161. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js.map +1 -1
  162. package/ShadersWGSL/ShadersInclude/openpbrSubsurfaceLayerData.d.ts +5 -0
  163. package/ShadersWGSL/ShadersInclude/openpbrSubsurfaceLayerData.js +35 -0
  164. package/ShadersWGSL/ShadersInclude/openpbrSubsurfaceLayerData.js.map +1 -0
  165. package/ShadersWGSL/ShadersInclude/openpbrTransmissionLayerData.js +1 -1
  166. package/ShadersWGSL/ShadersInclude/openpbrTransmissionLayerData.js.map +1 -1
  167. package/ShadersWGSL/ShadersInclude/openpbrUboDeclaration.js +1 -1
  168. package/ShadersWGSL/ShadersInclude/openpbrUboDeclaration.js.map +1 -1
  169. package/ShadersWGSL/ShadersInclude/openpbrVolumeFunctions.d.ts +5 -0
  170. package/ShadersWGSL/ShadersInclude/openpbrVolumeFunctions.js +68 -0
  171. package/ShadersWGSL/ShadersInclude/openpbrVolumeFunctions.js.map +1 -0
  172. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +15 -4
  173. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  174. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js +2 -2
  175. package/ShadersWGSL/ShadersInclude/pbrBlockReflection.js.map +1 -1
  176. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +1 -1
  177. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  178. package/ShadersWGSL/ShadersInclude/pbrFragmentReflectionDeclaration.d.ts +5 -0
  179. package/ShadersWGSL/ShadersInclude/pbrFragmentReflectionDeclaration.js +39 -0
  180. package/ShadersWGSL/ShadersInclude/pbrFragmentReflectionDeclaration.js.map +1 -0
  181. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.d.ts +1 -0
  182. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js +2 -28
  183. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  184. package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js +2 -1
  185. package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js.map +1 -1
  186. package/ShadersWGSL/geometry.fragment.d.ts +11 -0
  187. package/ShadersWGSL/geometry.fragment.js +103 -1
  188. package/ShadersWGSL/geometry.fragment.js.map +1 -1
  189. package/ShadersWGSL/geometry.vertex.d.ts +1 -0
  190. package/ShadersWGSL/geometry.vertex.js +47 -3
  191. package/ShadersWGSL/geometry.vertex.js.map +1 -1
  192. package/ShadersWGSL/iblShadowVoxelTracing.fragment.d.ts +1 -0
  193. package/ShadersWGSL/iblShadowVoxelTracing.fragment.js +3 -7
  194. package/ShadersWGSL/iblShadowVoxelTracing.fragment.js.map +1 -1
  195. package/ShadersWGSL/openpbr.fragment.d.ts +3 -1
  196. package/ShadersWGSL/openpbr.fragment.js +70 -9
  197. package/ShadersWGSL/openpbr.fragment.js.map +1 -1
  198. package/ShadersWGSL/openpbr.vertex.js +6 -0
  199. package/ShadersWGSL/openpbr.vertex.js.map +1 -1
  200. package/XR/webXRSessionManager.js +7 -5
  201. package/XR/webXRSessionManager.js.map +1 -1
  202. package/package.json +1 -1
  203. package/readme.md +4 -0
  204. package/scene.d.ts +7 -0
  205. package/scene.js +13 -0
  206. package/scene.js.map +1 -1
@@ -374,12 +374,22 @@ export class CubeTexture extends BaseTexture {
374
374
  */
375
375
  clone() {
376
376
  let uniqueId = 0;
377
+ // Save the irradianceTexture before cloning. The irradianceTexture is
378
+ // stored on the InternalTexture (_texture._irradianceTexture), which may
379
+ // be shared between the source and clone when loaded from cache.
380
+ // BaseTexture.clone() returns null, so CopySource sets the shared
381
+ // irradianceTexture to null, losing it on both the original and the clone.
382
+ const savedIrradianceTexture = this.irradianceTexture;
377
383
  const newCubeTexture = SerializationHelper.Clone(() => {
378
384
  const cubeTexture = new CubeTexture(this.url, this.getScene() || this._getEngine(), this._extensions, this._noMipmap, this._files);
379
385
  uniqueId = cubeTexture.uniqueId;
380
386
  return cubeTexture;
381
387
  }, this);
382
388
  newCubeTexture.uniqueId = uniqueId;
389
+ // Restore the irradianceTexture if it was cleared during cloning.
390
+ if (savedIrradianceTexture && !this.irradianceTexture) {
391
+ this.irradianceTexture = savedIrradianceTexture;
392
+ }
383
393
  return newCubeTexture;
384
394
  }
385
395
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cubeTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/cubeTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { serialize, serializeAsMatrix, serializeAsVector3 } from \"../../Misc/decorators\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { type Nullable } from \"../../types\";\r\nimport { type Scene } from \"../../scene\";\r\nimport { Matrix, TmpVectors, Vector3 } from \"../../Maths/math.vector\";\r\nimport { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { GetClass, RegisterClass } from \"../../Misc/typeStore\";\r\nimport { type AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { SerializationHelper } from \"../../Misc/decorators.serialization\";\r\n\r\nimport \"../../Engines/AbstractEngine/abstractEngine.cubeTexture\";\r\n\r\n/**\r\n * Defines the available options when creating a cube texture\r\n */\r\nexport interface ICubeTextureCreationOptions {\r\n /** Defines the suffixes add to the picture name in case six images are in use like _px.jpg */\r\n extensions?: string[];\r\n\r\n /** noMipmap defines if mipmaps should be created or not */\r\n noMipmap?: boolean;\r\n\r\n /** files defines the six files to load for the different faces in that order: px, py, pz, nx, ny, nz */\r\n files?: string[];\r\n\r\n /** buffer to load instead of loading the data from the url */\r\n buffer?: ArrayBufferView;\r\n\r\n /** onLoad defines a callback triggered at the end of the file load if no errors occurred */\r\n onLoad?: () => void;\r\n\r\n /** onError defines a callback triggered in case of error during load */\r\n onError?: (message?: string, exception?: any) => void;\r\n\r\n /** format defines the internal format to use for the texture once loaded */\r\n format?: number;\r\n\r\n /** prefiltered defines whether or not the texture is created from prefiltered data */\r\n prefiltered?: boolean;\r\n\r\n /** forcedExtension defines the extensions to use (force a special type of file to load) in case it is different from the file name */\r\n forcedExtension?: any;\r\n\r\n /** createPolynomials defines whether or not to create polynomial harmonics from the texture data if necessary */\r\n createPolynomials?: boolean;\r\n\r\n /** lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness */\r\n lodScale?: number;\r\n\r\n /** lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness */\r\n lodOffset?: number;\r\n\r\n /** loaderOptions options to be passed to the loader */\r\n loaderOptions?: any;\r\n\r\n /** useSRGBBuffer Defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU) (default: false) */\r\n useSRGBBuffer?: boolean;\r\n\r\n /** Target face size for spherical polynomial computation. 0 = full resolution (default). */\r\n sphericalPolynomialTargetSize?: number;\r\n}\r\n\r\n// The default scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\r\nconst DefaultLodScale = 0.8;\r\n\r\n/**\r\n * Class for creating a cube texture\r\n */\r\nexport class CubeTexture extends BaseTexture {\r\n private _delayedOnLoad: Nullable<() => void>;\r\n private _delayedOnError: Nullable<(message?: string, exception?: any) => void>;\r\n private _lodScale: number;\r\n private _lodOffset: number;\r\n\r\n /**\r\n * Observable triggered once the texture has been loaded.\r\n */\r\n public onLoadObservable: Observable<CubeTexture> = new Observable<CubeTexture>();\r\n\r\n /**\r\n * The url of the texture\r\n */\r\n @serialize()\r\n public url: string;\r\n\r\n /**\r\n * Gets or sets the center of the bounding box associated with the cube texture.\r\n * It must define where the camera used to render the texture was set\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/reflectionTexture#using-local-cubemap-mode\r\n */\r\n @serializeAsVector3()\r\n public boundingBoxPosition = Vector3.Zero();\r\n\r\n private _boundingBoxSize: Vector3;\r\n\r\n /**\r\n * Gets or sets the size of the bounding box associated with the cube texture\r\n * When defined, the cubemap will switch to local mode\r\n * @see https://community.arm.com/graphics/b/blog/posts/reflections-based-on-local-cubemaps-in-unity\r\n * @example https://www.babylonjs-playground.com/#RNASML\r\n */\r\n public set boundingBoxSize(value: Vector3) {\r\n if (this._boundingBoxSize && this._boundingBoxSize.equals(value)) {\r\n return;\r\n }\r\n this._boundingBoxSize = value;\r\n const scene = this.getScene();\r\n if (scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n }\r\n /**\r\n * Returns the bounding box size\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/reflectionTexture#using-local-cubemap-mode\r\n */\r\n @serializeAsVector3()\r\n public get boundingBoxSize(): Vector3 {\r\n return this._boundingBoxSize;\r\n }\r\n\r\n protected _rotationY: number = 0;\r\n\r\n /**\r\n * Sets texture matrix rotation angle around Y axis in radians.\r\n */\r\n @serialize(\"rotationY\")\r\n public set rotationY(value: number) {\r\n this._rotationY = value;\r\n this.setReflectionTextureMatrix(Matrix.RotationY(this._rotationY));\r\n }\r\n /**\r\n * Gets texture matrix rotation angle around Y axis radians.\r\n */\r\n public get rotationY(): number {\r\n return this._rotationY;\r\n }\r\n\r\n /**\r\n * Are mip maps generated for this texture or not.\r\n */\r\n public override get noMipmap(): boolean {\r\n return this._noMipmap;\r\n }\r\n\r\n private _noMipmap: boolean;\r\n\r\n /** @internal */\r\n @serialize(\"files\")\r\n public _files: Nullable<string[]> = null;\r\n\r\n @serialize(\"forcedExtension\")\r\n protected _forcedExtension: Nullable<string> = null;\r\n\r\n /**\r\n * Gets the forced extension (if any)\r\n */\r\n public get forcedExtension(): Nullable<string> {\r\n return this._forcedExtension;\r\n }\r\n\r\n @serialize(\"extensions\")\r\n private _extensions: Nullable<string[]> = null;\r\n\r\n @serializeAsMatrix(\"textureMatrix\")\r\n private _textureMatrix: Matrix;\r\n\r\n @serializeAsMatrix(\"textureMatrixRefraction\")\r\n private _textureMatrixRefraction: Matrix = new Matrix();\r\n\r\n private _format: number;\r\n private _createPolynomials: boolean;\r\n private _loaderOptions: any;\r\n private _useSRGBBuffer?: boolean;\r\n private _buffer: Nullable<ArrayBufferView> = null;\r\n\r\n /**\r\n * Creates a cube texture from an array of image urls\r\n * @param files defines an array of image urls\r\n * @param scene defines the hosting scene\r\n * @param noMipmap specifies if mip maps are not used\r\n * @returns a cube texture\r\n */\r\n public static CreateFromImages(files: string[], scene: Scene, noMipmap?: boolean): CubeTexture {\r\n let rootUrlKey = \"\";\r\n\r\n for (const url of files) {\r\n rootUrlKey += url;\r\n }\r\n\r\n return new CubeTexture(rootUrlKey, scene, null, noMipmap, files);\r\n }\r\n\r\n /**\r\n * Creates and return a texture created from prefilterd data by tools like IBL Baker or Lys.\r\n * @param url defines the url of the prefiltered texture\r\n * @param scene defines the scene the texture is attached to\r\n * @param forcedExtension defines the extension of the file if different from the url\r\n * @param createPolynomials defines whether or not to create polynomial harmonics from the texture data if necessary\r\n * @returns the prefiltered texture\r\n */\r\n public static CreateFromPrefilteredData(url: string, scene: Scene, forcedExtension: any = null, createPolynomials: boolean = true) {\r\n const oldValue = scene.useDelayedTextureLoading;\r\n scene.useDelayedTextureLoading = false;\r\n\r\n const result = new CubeTexture(url, scene, null, false, null, null, null, undefined, true, forcedExtension, createPolynomials);\r\n\r\n scene.useDelayedTextureLoading = oldValue;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Creates a cube texture to use with reflection for instance. It can be based upon dds or six images as well\r\n * as prefiltered data.\r\n * @param rootUrl defines the url of the texture or the root name of the six images\r\n * @param sceneOrEngine defines the scene or engine the texture is attached to\r\n * @param extensionsOrOptions defines the suffixes add to the picture name in case six images are in use like _px.jpg or set of all options to create the cube texture\r\n * @param noMipmap defines if mipmaps should be created or not\r\n * @param files defines the six files to load for the different faces in that order: px, py, pz, nx, ny, nz\r\n * @param onLoad defines a callback triggered at the end of the file load if no errors occurred\r\n * @param onError defines a callback triggered in case of error during load\r\n * @param format defines the internal format to use for the texture once loaded\r\n * @param prefiltered defines whether or not the texture is created from prefiltered data\r\n * @param forcedExtension defines the extensions to use (force a special type of file to load) in case it is different from the file name\r\n * @param createPolynomials defines whether or not to create polynomial harmonics from the texture data if necessary\r\n * @param lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\r\n * @param lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness\r\n * @param loaderOptions options to be passed to the loader\r\n * @param useSRGBBuffer Defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU) (default: false)\r\n * @returns the cube texture\r\n */\r\n constructor(\r\n rootUrl: string,\r\n sceneOrEngine: Scene | AbstractEngine,\r\n extensionsOrOptions: Nullable<string[] | ICubeTextureCreationOptions> = null,\r\n noMipmap: boolean = false,\r\n files: Nullable<string[]> = null,\r\n onLoad: Nullable<() => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n format: number = Constants.TEXTUREFORMAT_RGBA,\r\n prefiltered = false,\r\n forcedExtension: any = null,\r\n createPolynomials: boolean = false,\r\n lodScale: number = DefaultLodScale,\r\n lodOffset: number = 0,\r\n loaderOptions?: any,\r\n useSRGBBuffer?: boolean\r\n ) {\r\n super(sceneOrEngine);\r\n\r\n this.name = rootUrl;\r\n this.url = rootUrl;\r\n this._noMipmap = noMipmap;\r\n this.hasAlpha = false;\r\n this.isCube = true;\r\n this._textureMatrix = Matrix.Identity();\r\n this.coordinatesMode = Texture.CUBIC_MODE;\r\n\r\n let extensions: Nullable<string[]>;\r\n let buffer: Nullable<ArrayBufferView> = null;\r\n\r\n if (extensionsOrOptions !== null && !Array.isArray(extensionsOrOptions)) {\r\n extensions = extensionsOrOptions.extensions ?? null;\r\n this._noMipmap = extensionsOrOptions.noMipmap ?? false;\r\n files = extensionsOrOptions.files ?? null;\r\n buffer = extensionsOrOptions.buffer ?? null;\r\n this._format = extensionsOrOptions.format ?? Constants.TEXTUREFORMAT_RGBA;\r\n prefiltered = extensionsOrOptions.prefiltered ?? false;\r\n forcedExtension = extensionsOrOptions.forcedExtension ?? null;\r\n this._createPolynomials = extensionsOrOptions.createPolynomials ?? false;\r\n this._lodScale = extensionsOrOptions.lodScale ?? DefaultLodScale;\r\n this._lodOffset = extensionsOrOptions.lodOffset ?? 0;\r\n this._loaderOptions = extensionsOrOptions.loaderOptions;\r\n this._useSRGBBuffer = extensionsOrOptions.useSRGBBuffer;\r\n this._sphericalPolynomialTargetSize = extensionsOrOptions.sphericalPolynomialTargetSize ?? 0;\r\n onLoad = extensionsOrOptions.onLoad ?? null;\r\n onError = extensionsOrOptions.onError ?? null;\r\n } else {\r\n this._noMipmap = noMipmap;\r\n this._format = format;\r\n this._createPolynomials = createPolynomials;\r\n extensions = extensionsOrOptions;\r\n this._loaderOptions = loaderOptions;\r\n this._useSRGBBuffer = useSRGBBuffer;\r\n this._lodScale = lodScale;\r\n this._lodOffset = lodOffset;\r\n }\r\n\r\n if (!rootUrl && !files) {\r\n return;\r\n }\r\n\r\n this.updateURL(rootUrl, forcedExtension, onLoad, prefiltered, onError, extensions, this.getScene()?.useDelayedTextureLoading, files, buffer);\r\n }\r\n\r\n /**\r\n * Get the current class name of the texture useful for serialization or dynamic coding.\r\n * @returns \"CubeTexture\"\r\n */\r\n public override getClassName(): string {\r\n return \"CubeTexture\";\r\n }\r\n\r\n /**\r\n * Update the url (and optional buffer) of this texture if url was null during construction.\r\n * @param url the url of the texture\r\n * @param forcedExtension defines the extension to use\r\n * @param onLoad callback called when the texture is loaded (defaults to null)\r\n * @param prefiltered Defines whether the updated texture is prefiltered or not\r\n * @param onError callback called if there was an error during the loading process (defaults to null)\r\n * @param extensions defines the suffixes add to the picture name in case six images are in use like _px.jpg...\r\n * @param delayLoad defines if the texture should be loaded now (false by default)\r\n * @param files defines the six files to load for the different faces in that order: px, py, pz, nx, ny, nz\r\n * @param buffer the buffer to use instead of loading from the url\r\n */\r\n public updateURL(\r\n url: string,\r\n forcedExtension: Nullable<string> = null,\r\n onLoad: Nullable<() => void> = null,\r\n prefiltered: boolean = false,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n extensions: Nullable<string[]> = null,\r\n delayLoad = false,\r\n files: Nullable<string[]> = null,\r\n buffer: Nullable<ArrayBufferView> = null\r\n ): void {\r\n if (!this.name || this.name.startsWith(\"data:\")) {\r\n this.name = url;\r\n }\r\n this.url = url;\r\n\r\n if (forcedExtension) {\r\n this._forcedExtension = forcedExtension;\r\n }\r\n\r\n const lastDot = url.lastIndexOf(\".\");\r\n const extension = forcedExtension ? forcedExtension : lastDot > -1 ? url.substring(lastDot).toLowerCase() : \"\";\r\n const isDDS = extension.indexOf(\".dds\") === 0;\r\n const isEnv = extension.indexOf(\".env\") === 0;\r\n const isBasis = extension.indexOf(\".basis\") === 0;\r\n\r\n if (isEnv) {\r\n this.gammaSpace = false;\r\n this._prefiltered = false;\r\n this.anisotropicFilteringLevel = 1;\r\n } else {\r\n this._prefiltered = prefiltered;\r\n\r\n if (prefiltered) {\r\n this.gammaSpace = false;\r\n this.anisotropicFilteringLevel = 1;\r\n }\r\n }\r\n\r\n if (files) {\r\n this._files = files;\r\n } else {\r\n if (!isBasis && !isEnv && !isDDS && !extensions) {\r\n extensions = [\"_px.jpg\", \"_py.jpg\", \"_pz.jpg\", \"_nx.jpg\", \"_ny.jpg\", \"_nz.jpg\"];\r\n }\r\n\r\n this._files = this._files || [];\r\n this._files.length = 0;\r\n\r\n if (extensions) {\r\n for (let index = 0; index < extensions.length; index++) {\r\n this._files.push(url + extensions[index]);\r\n }\r\n this._extensions = extensions;\r\n }\r\n }\r\n\r\n this._buffer = buffer;\r\n\r\n if (delayLoad) {\r\n this.delayLoadState = Constants.DELAYLOADSTATE_NOTLOADED;\r\n this._delayedOnLoad = onLoad;\r\n this._delayedOnError = onError;\r\n } else {\r\n this._loadTexture(onLoad, onError);\r\n }\r\n }\r\n\r\n /**\r\n * Delays loading of the cube texture\r\n * @param forcedExtension defines the extension to use\r\n */\r\n public override delayLoad(forcedExtension?: string): void {\r\n if (this.delayLoadState !== Constants.DELAYLOADSTATE_NOTLOADED) {\r\n return;\r\n }\r\n if (forcedExtension) {\r\n this._forcedExtension = forcedExtension;\r\n }\r\n\r\n this.delayLoadState = Constants.DELAYLOADSTATE_LOADED;\r\n this._loadTexture(this._delayedOnLoad, this._delayedOnError);\r\n }\r\n\r\n /**\r\n * Returns the reflection texture matrix\r\n * @returns the reflection texture matrix\r\n */\r\n public override getReflectionTextureMatrix(): Matrix {\r\n return this._textureMatrix;\r\n }\r\n\r\n /**\r\n * Sets the reflection texture matrix\r\n * @param value Reflection texture matrix\r\n */\r\n public setReflectionTextureMatrix(value: Matrix): void {\r\n if (value.updateFlag === this._textureMatrix.updateFlag) {\r\n return;\r\n }\r\n\r\n if (value.isIdentity() !== this._textureMatrix.isIdentity()) {\r\n this.getScene()?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => mat.getActiveTextures().indexOf(this) !== -1);\r\n }\r\n\r\n this._textureMatrix = value;\r\n\r\n if (!this.getScene()?.useRightHandedSystem) {\r\n return;\r\n }\r\n\r\n const scale = TmpVectors.Vector3[0];\r\n const quat = TmpVectors.Quaternion[0];\r\n const trans = TmpVectors.Vector3[1];\r\n\r\n this._textureMatrix.decompose(scale, quat, trans);\r\n\r\n quat.z *= -1; // these two operations correspond to negating the x and y euler angles\r\n quat.w *= -1;\r\n\r\n Matrix.ComposeToRef(scale, quat, trans, this._textureMatrixRefraction);\r\n }\r\n\r\n /**\r\n * Gets a suitable rotate/transform matrix when the texture is used for refraction.\r\n * There's a separate function from getReflectionTextureMatrix because refraction requires a special configuration of the matrix in right-handed mode.\r\n * @returns The refraction matrix\r\n */\r\n public override getRefractionTextureMatrix(): Matrix {\r\n return this.getScene()?.useRightHandedSystem ? this._textureMatrixRefraction : this._textureMatrix;\r\n }\r\n\r\n private _loadTexture(onLoad: Nullable<() => void> = null, onError: Nullable<(message?: string, exception?: any) => void> = null) {\r\n const scene = this.getScene();\r\n const oldTexture = this._texture;\r\n this._texture = this._getFromCache(this.url, this._noMipmap, undefined, undefined, this._useSRGBBuffer, this.isCube);\r\n\r\n const onLoadProcessing = () => {\r\n this.onLoadObservable.notifyObservers(this);\r\n if (oldTexture) {\r\n oldTexture.dispose();\r\n this.getScene()?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n if (onLoad) {\r\n onLoad();\r\n }\r\n };\r\n\r\n const errorHandler = (message?: string, exception?: any) => {\r\n this._loadingError = true;\r\n this._errorObject = { message, exception };\r\n if (onError) {\r\n onError(message, exception);\r\n }\r\n Texture.OnTextureLoadErrorObservable.notifyObservers(this);\r\n };\r\n\r\n if (!this._texture) {\r\n if (this._prefiltered) {\r\n this._texture = this._getEngine()!.createPrefilteredCubeTexture(\r\n this.url,\r\n scene,\r\n this._lodScale,\r\n this._lodOffset,\r\n onLoad,\r\n errorHandler,\r\n this._format,\r\n this._forcedExtension,\r\n this._createPolynomials\r\n );\r\n } else {\r\n this._texture = this._getEngine()!.createCubeTexture(\r\n this.url,\r\n scene,\r\n this._files,\r\n this._noMipmap,\r\n onLoad,\r\n errorHandler,\r\n this._format,\r\n this._forcedExtension,\r\n false,\r\n this._lodScale,\r\n this._lodOffset,\r\n null,\r\n this._loaderOptions,\r\n !!this._useSRGBBuffer,\r\n this._buffer\r\n );\r\n }\r\n\r\n this._texture?.onLoadedObservable.add(() => this.onLoadObservable.notifyObservers(this));\r\n } else {\r\n if (this._texture.isReady) {\r\n Tools.SetImmediate(() => onLoadProcessing());\r\n } else {\r\n this._texture.onLoadedObservable.add(() => onLoadProcessing());\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Parses text to create a cube texture\r\n * @param parsedTexture define the serialized text to read from\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root url of the cube texture\r\n * @returns a cube texture\r\n */\r\n public static Parse(parsedTexture: any, scene: Scene, rootUrl: string): CubeTexture {\r\n const texture = SerializationHelper.Parse(\r\n () => {\r\n let prefiltered: boolean = false;\r\n if (parsedTexture.prefiltered) {\r\n prefiltered = parsedTexture.prefiltered;\r\n }\r\n return new CubeTexture(\r\n rootUrl + (parsedTexture.url ?? parsedTexture.name),\r\n scene,\r\n parsedTexture.extensions,\r\n false,\r\n parsedTexture.files || null,\r\n null,\r\n null,\r\n undefined,\r\n prefiltered,\r\n parsedTexture.forcedExtension\r\n );\r\n },\r\n parsedTexture,\r\n scene\r\n );\r\n\r\n // Local Cubemaps\r\n if (parsedTexture.boundingBoxPosition) {\r\n texture.boundingBoxPosition = Vector3.FromArray(parsedTexture.boundingBoxPosition);\r\n }\r\n if (parsedTexture.boundingBoxSize) {\r\n texture.boundingBoxSize = Vector3.FromArray(parsedTexture.boundingBoxSize);\r\n }\r\n\r\n // Animations\r\n if (parsedTexture.animations) {\r\n for (let animationIndex = 0; animationIndex < parsedTexture.animations.length; animationIndex++) {\r\n const parsedAnimation = parsedTexture.animations[animationIndex];\r\n const internalClass = GetClass(\"BABYLON.Animation\");\r\n if (internalClass) {\r\n texture.animations.push(internalClass.Parse(parsedAnimation));\r\n }\r\n }\r\n }\r\n\r\n return texture;\r\n }\r\n\r\n /**\r\n * Makes a clone, or deep copy, of the cube texture\r\n * @returns a new cube texture\r\n */\r\n public override clone(): CubeTexture {\r\n let uniqueId = 0;\r\n\r\n const newCubeTexture = SerializationHelper.Clone(() => {\r\n const cubeTexture = new CubeTexture(this.url, this.getScene() || this._getEngine()!, this._extensions, this._noMipmap, this._files);\r\n uniqueId = cubeTexture.uniqueId;\r\n\r\n return cubeTexture;\r\n }, this);\r\n\r\n newCubeTexture.uniqueId = uniqueId;\r\n\r\n return newCubeTexture;\r\n }\r\n}\r\n\r\nTexture._CubeTextureParser = CubeTexture.Parse;\r\n// Some exporters relies on Tools.Instantiate\r\nRegisterClass(\"BABYLON.CubeTexture\", CubeTexture);\r\n"]}
1
+ {"version":3,"file":"cubeTexture.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/Textures/cubeTexture.ts"],"names":[],"mappings":"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","sourcesContent":["import { serialize, serializeAsMatrix, serializeAsVector3 } from \"../../Misc/decorators\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { type Nullable } from \"../../types\";\r\nimport { type Scene } from \"../../scene\";\r\nimport { Matrix, TmpVectors, Vector3 } from \"../../Maths/math.vector\";\r\nimport { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { GetClass, RegisterClass } from \"../../Misc/typeStore\";\r\nimport { type AbstractEngine } from \"../../Engines/abstractEngine\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { SerializationHelper } from \"../../Misc/decorators.serialization\";\r\n\r\nimport \"../../Engines/AbstractEngine/abstractEngine.cubeTexture\";\r\n\r\n/**\r\n * Defines the available options when creating a cube texture\r\n */\r\nexport interface ICubeTextureCreationOptions {\r\n /** Defines the suffixes add to the picture name in case six images are in use like _px.jpg */\r\n extensions?: string[];\r\n\r\n /** noMipmap defines if mipmaps should be created or not */\r\n noMipmap?: boolean;\r\n\r\n /** files defines the six files to load for the different faces in that order: px, py, pz, nx, ny, nz */\r\n files?: string[];\r\n\r\n /** buffer to load instead of loading the data from the url */\r\n buffer?: ArrayBufferView;\r\n\r\n /** onLoad defines a callback triggered at the end of the file load if no errors occurred */\r\n onLoad?: () => void;\r\n\r\n /** onError defines a callback triggered in case of error during load */\r\n onError?: (message?: string, exception?: any) => void;\r\n\r\n /** format defines the internal format to use for the texture once loaded */\r\n format?: number;\r\n\r\n /** prefiltered defines whether or not the texture is created from prefiltered data */\r\n prefiltered?: boolean;\r\n\r\n /** forcedExtension defines the extensions to use (force a special type of file to load) in case it is different from the file name */\r\n forcedExtension?: any;\r\n\r\n /** createPolynomials defines whether or not to create polynomial harmonics from the texture data if necessary */\r\n createPolynomials?: boolean;\r\n\r\n /** lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness */\r\n lodScale?: number;\r\n\r\n /** lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness */\r\n lodOffset?: number;\r\n\r\n /** loaderOptions options to be passed to the loader */\r\n loaderOptions?: any;\r\n\r\n /** useSRGBBuffer Defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU) (default: false) */\r\n useSRGBBuffer?: boolean;\r\n\r\n /** Target face size for spherical polynomial computation. 0 = full resolution (default). */\r\n sphericalPolynomialTargetSize?: number;\r\n}\r\n\r\n// The default scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\r\nconst DefaultLodScale = 0.8;\r\n\r\n/**\r\n * Class for creating a cube texture\r\n */\r\nexport class CubeTexture extends BaseTexture {\r\n private _delayedOnLoad: Nullable<() => void>;\r\n private _delayedOnError: Nullable<(message?: string, exception?: any) => void>;\r\n private _lodScale: number;\r\n private _lodOffset: number;\r\n\r\n /**\r\n * Observable triggered once the texture has been loaded.\r\n */\r\n public onLoadObservable: Observable<CubeTexture> = new Observable<CubeTexture>();\r\n\r\n /**\r\n * The url of the texture\r\n */\r\n @serialize()\r\n public url: string;\r\n\r\n /**\r\n * Gets or sets the center of the bounding box associated with the cube texture.\r\n * It must define where the camera used to render the texture was set\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/reflectionTexture#using-local-cubemap-mode\r\n */\r\n @serializeAsVector3()\r\n public boundingBoxPosition = Vector3.Zero();\r\n\r\n private _boundingBoxSize: Vector3;\r\n\r\n /**\r\n * Gets or sets the size of the bounding box associated with the cube texture\r\n * When defined, the cubemap will switch to local mode\r\n * @see https://community.arm.com/graphics/b/blog/posts/reflections-based-on-local-cubemaps-in-unity\r\n * @example https://www.babylonjs-playground.com/#RNASML\r\n */\r\n public set boundingBoxSize(value: Vector3) {\r\n if (this._boundingBoxSize && this._boundingBoxSize.equals(value)) {\r\n return;\r\n }\r\n this._boundingBoxSize = value;\r\n const scene = this.getScene();\r\n if (scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n }\r\n /**\r\n * Returns the bounding box size\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/using/reflectionTexture#using-local-cubemap-mode\r\n */\r\n @serializeAsVector3()\r\n public get boundingBoxSize(): Vector3 {\r\n return this._boundingBoxSize;\r\n }\r\n\r\n protected _rotationY: number = 0;\r\n\r\n /**\r\n * Sets texture matrix rotation angle around Y axis in radians.\r\n */\r\n @serialize(\"rotationY\")\r\n public set rotationY(value: number) {\r\n this._rotationY = value;\r\n this.setReflectionTextureMatrix(Matrix.RotationY(this._rotationY));\r\n }\r\n /**\r\n * Gets texture matrix rotation angle around Y axis radians.\r\n */\r\n public get rotationY(): number {\r\n return this._rotationY;\r\n }\r\n\r\n /**\r\n * Are mip maps generated for this texture or not.\r\n */\r\n public override get noMipmap(): boolean {\r\n return this._noMipmap;\r\n }\r\n\r\n private _noMipmap: boolean;\r\n\r\n /** @internal */\r\n @serialize(\"files\")\r\n public _files: Nullable<string[]> = null;\r\n\r\n @serialize(\"forcedExtension\")\r\n protected _forcedExtension: Nullable<string> = null;\r\n\r\n /**\r\n * Gets the forced extension (if any)\r\n */\r\n public get forcedExtension(): Nullable<string> {\r\n return this._forcedExtension;\r\n }\r\n\r\n @serialize(\"extensions\")\r\n private _extensions: Nullable<string[]> = null;\r\n\r\n @serializeAsMatrix(\"textureMatrix\")\r\n private _textureMatrix: Matrix;\r\n\r\n @serializeAsMatrix(\"textureMatrixRefraction\")\r\n private _textureMatrixRefraction: Matrix = new Matrix();\r\n\r\n private _format: number;\r\n private _createPolynomials: boolean;\r\n private _loaderOptions: any;\r\n private _useSRGBBuffer?: boolean;\r\n private _buffer: Nullable<ArrayBufferView> = null;\r\n\r\n /**\r\n * Creates a cube texture from an array of image urls\r\n * @param files defines an array of image urls\r\n * @param scene defines the hosting scene\r\n * @param noMipmap specifies if mip maps are not used\r\n * @returns a cube texture\r\n */\r\n public static CreateFromImages(files: string[], scene: Scene, noMipmap?: boolean): CubeTexture {\r\n let rootUrlKey = \"\";\r\n\r\n for (const url of files) {\r\n rootUrlKey += url;\r\n }\r\n\r\n return new CubeTexture(rootUrlKey, scene, null, noMipmap, files);\r\n }\r\n\r\n /**\r\n * Creates and return a texture created from prefilterd data by tools like IBL Baker or Lys.\r\n * @param url defines the url of the prefiltered texture\r\n * @param scene defines the scene the texture is attached to\r\n * @param forcedExtension defines the extension of the file if different from the url\r\n * @param createPolynomials defines whether or not to create polynomial harmonics from the texture data if necessary\r\n * @returns the prefiltered texture\r\n */\r\n public static CreateFromPrefilteredData(url: string, scene: Scene, forcedExtension: any = null, createPolynomials: boolean = true) {\r\n const oldValue = scene.useDelayedTextureLoading;\r\n scene.useDelayedTextureLoading = false;\r\n\r\n const result = new CubeTexture(url, scene, null, false, null, null, null, undefined, true, forcedExtension, createPolynomials);\r\n\r\n scene.useDelayedTextureLoading = oldValue;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Creates a cube texture to use with reflection for instance. It can be based upon dds or six images as well\r\n * as prefiltered data.\r\n * @param rootUrl defines the url of the texture or the root name of the six images\r\n * @param sceneOrEngine defines the scene or engine the texture is attached to\r\n * @param extensionsOrOptions defines the suffixes add to the picture name in case six images are in use like _px.jpg or set of all options to create the cube texture\r\n * @param noMipmap defines if mipmaps should be created or not\r\n * @param files defines the six files to load for the different faces in that order: px, py, pz, nx, ny, nz\r\n * @param onLoad defines a callback triggered at the end of the file load if no errors occurred\r\n * @param onError defines a callback triggered in case of error during load\r\n * @param format defines the internal format to use for the texture once loaded\r\n * @param prefiltered defines whether or not the texture is created from prefiltered data\r\n * @param forcedExtension defines the extensions to use (force a special type of file to load) in case it is different from the file name\r\n * @param createPolynomials defines whether or not to create polynomial harmonics from the texture data if necessary\r\n * @param lodScale defines the scale applied to environment texture. This manages the range of LOD level used for IBL according to the roughness\r\n * @param lodOffset defines the offset applied to environment texture. This manages first LOD level used for IBL according to the roughness\r\n * @param loaderOptions options to be passed to the loader\r\n * @param useSRGBBuffer Defines if the texture must be loaded in a sRGB GPU buffer (if supported by the GPU) (default: false)\r\n * @returns the cube texture\r\n */\r\n constructor(\r\n rootUrl: string,\r\n sceneOrEngine: Scene | AbstractEngine,\r\n extensionsOrOptions: Nullable<string[] | ICubeTextureCreationOptions> = null,\r\n noMipmap: boolean = false,\r\n files: Nullable<string[]> = null,\r\n onLoad: Nullable<() => void> = null,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n format: number = Constants.TEXTUREFORMAT_RGBA,\r\n prefiltered = false,\r\n forcedExtension: any = null,\r\n createPolynomials: boolean = false,\r\n lodScale: number = DefaultLodScale,\r\n lodOffset: number = 0,\r\n loaderOptions?: any,\r\n useSRGBBuffer?: boolean\r\n ) {\r\n super(sceneOrEngine);\r\n\r\n this.name = rootUrl;\r\n this.url = rootUrl;\r\n this._noMipmap = noMipmap;\r\n this.hasAlpha = false;\r\n this.isCube = true;\r\n this._textureMatrix = Matrix.Identity();\r\n this.coordinatesMode = Texture.CUBIC_MODE;\r\n\r\n let extensions: Nullable<string[]>;\r\n let buffer: Nullable<ArrayBufferView> = null;\r\n\r\n if (extensionsOrOptions !== null && !Array.isArray(extensionsOrOptions)) {\r\n extensions = extensionsOrOptions.extensions ?? null;\r\n this._noMipmap = extensionsOrOptions.noMipmap ?? false;\r\n files = extensionsOrOptions.files ?? null;\r\n buffer = extensionsOrOptions.buffer ?? null;\r\n this._format = extensionsOrOptions.format ?? Constants.TEXTUREFORMAT_RGBA;\r\n prefiltered = extensionsOrOptions.prefiltered ?? false;\r\n forcedExtension = extensionsOrOptions.forcedExtension ?? null;\r\n this._createPolynomials = extensionsOrOptions.createPolynomials ?? false;\r\n this._lodScale = extensionsOrOptions.lodScale ?? DefaultLodScale;\r\n this._lodOffset = extensionsOrOptions.lodOffset ?? 0;\r\n this._loaderOptions = extensionsOrOptions.loaderOptions;\r\n this._useSRGBBuffer = extensionsOrOptions.useSRGBBuffer;\r\n this._sphericalPolynomialTargetSize = extensionsOrOptions.sphericalPolynomialTargetSize ?? 0;\r\n onLoad = extensionsOrOptions.onLoad ?? null;\r\n onError = extensionsOrOptions.onError ?? null;\r\n } else {\r\n this._noMipmap = noMipmap;\r\n this._format = format;\r\n this._createPolynomials = createPolynomials;\r\n extensions = extensionsOrOptions;\r\n this._loaderOptions = loaderOptions;\r\n this._useSRGBBuffer = useSRGBBuffer;\r\n this._lodScale = lodScale;\r\n this._lodOffset = lodOffset;\r\n }\r\n\r\n if (!rootUrl && !files) {\r\n return;\r\n }\r\n\r\n this.updateURL(rootUrl, forcedExtension, onLoad, prefiltered, onError, extensions, this.getScene()?.useDelayedTextureLoading, files, buffer);\r\n }\r\n\r\n /**\r\n * Get the current class name of the texture useful for serialization or dynamic coding.\r\n * @returns \"CubeTexture\"\r\n */\r\n public override getClassName(): string {\r\n return \"CubeTexture\";\r\n }\r\n\r\n /**\r\n * Update the url (and optional buffer) of this texture if url was null during construction.\r\n * @param url the url of the texture\r\n * @param forcedExtension defines the extension to use\r\n * @param onLoad callback called when the texture is loaded (defaults to null)\r\n * @param prefiltered Defines whether the updated texture is prefiltered or not\r\n * @param onError callback called if there was an error during the loading process (defaults to null)\r\n * @param extensions defines the suffixes add to the picture name in case six images are in use like _px.jpg...\r\n * @param delayLoad defines if the texture should be loaded now (false by default)\r\n * @param files defines the six files to load for the different faces in that order: px, py, pz, nx, ny, nz\r\n * @param buffer the buffer to use instead of loading from the url\r\n */\r\n public updateURL(\r\n url: string,\r\n forcedExtension: Nullable<string> = null,\r\n onLoad: Nullable<() => void> = null,\r\n prefiltered: boolean = false,\r\n onError: Nullable<(message?: string, exception?: any) => void> = null,\r\n extensions: Nullable<string[]> = null,\r\n delayLoad = false,\r\n files: Nullable<string[]> = null,\r\n buffer: Nullable<ArrayBufferView> = null\r\n ): void {\r\n if (!this.name || this.name.startsWith(\"data:\")) {\r\n this.name = url;\r\n }\r\n this.url = url;\r\n\r\n if (forcedExtension) {\r\n this._forcedExtension = forcedExtension;\r\n }\r\n\r\n const lastDot = url.lastIndexOf(\".\");\r\n const extension = forcedExtension ? forcedExtension : lastDot > -1 ? url.substring(lastDot).toLowerCase() : \"\";\r\n const isDDS = extension.indexOf(\".dds\") === 0;\r\n const isEnv = extension.indexOf(\".env\") === 0;\r\n const isBasis = extension.indexOf(\".basis\") === 0;\r\n\r\n if (isEnv) {\r\n this.gammaSpace = false;\r\n this._prefiltered = false;\r\n this.anisotropicFilteringLevel = 1;\r\n } else {\r\n this._prefiltered = prefiltered;\r\n\r\n if (prefiltered) {\r\n this.gammaSpace = false;\r\n this.anisotropicFilteringLevel = 1;\r\n }\r\n }\r\n\r\n if (files) {\r\n this._files = files;\r\n } else {\r\n if (!isBasis && !isEnv && !isDDS && !extensions) {\r\n extensions = [\"_px.jpg\", \"_py.jpg\", \"_pz.jpg\", \"_nx.jpg\", \"_ny.jpg\", \"_nz.jpg\"];\r\n }\r\n\r\n this._files = this._files || [];\r\n this._files.length = 0;\r\n\r\n if (extensions) {\r\n for (let index = 0; index < extensions.length; index++) {\r\n this._files.push(url + extensions[index]);\r\n }\r\n this._extensions = extensions;\r\n }\r\n }\r\n\r\n this._buffer = buffer;\r\n\r\n if (delayLoad) {\r\n this.delayLoadState = Constants.DELAYLOADSTATE_NOTLOADED;\r\n this._delayedOnLoad = onLoad;\r\n this._delayedOnError = onError;\r\n } else {\r\n this._loadTexture(onLoad, onError);\r\n }\r\n }\r\n\r\n /**\r\n * Delays loading of the cube texture\r\n * @param forcedExtension defines the extension to use\r\n */\r\n public override delayLoad(forcedExtension?: string): void {\r\n if (this.delayLoadState !== Constants.DELAYLOADSTATE_NOTLOADED) {\r\n return;\r\n }\r\n if (forcedExtension) {\r\n this._forcedExtension = forcedExtension;\r\n }\r\n\r\n this.delayLoadState = Constants.DELAYLOADSTATE_LOADED;\r\n this._loadTexture(this._delayedOnLoad, this._delayedOnError);\r\n }\r\n\r\n /**\r\n * Returns the reflection texture matrix\r\n * @returns the reflection texture matrix\r\n */\r\n public override getReflectionTextureMatrix(): Matrix {\r\n return this._textureMatrix;\r\n }\r\n\r\n /**\r\n * Sets the reflection texture matrix\r\n * @param value Reflection texture matrix\r\n */\r\n public setReflectionTextureMatrix(value: Matrix): void {\r\n if (value.updateFlag === this._textureMatrix.updateFlag) {\r\n return;\r\n }\r\n\r\n if (value.isIdentity() !== this._textureMatrix.isIdentity()) {\r\n this.getScene()?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => mat.getActiveTextures().indexOf(this) !== -1);\r\n }\r\n\r\n this._textureMatrix = value;\r\n\r\n if (!this.getScene()?.useRightHandedSystem) {\r\n return;\r\n }\r\n\r\n const scale = TmpVectors.Vector3[0];\r\n const quat = TmpVectors.Quaternion[0];\r\n const trans = TmpVectors.Vector3[1];\r\n\r\n this._textureMatrix.decompose(scale, quat, trans);\r\n\r\n quat.z *= -1; // these two operations correspond to negating the x and y euler angles\r\n quat.w *= -1;\r\n\r\n Matrix.ComposeToRef(scale, quat, trans, this._textureMatrixRefraction);\r\n }\r\n\r\n /**\r\n * Gets a suitable rotate/transform matrix when the texture is used for refraction.\r\n * There's a separate function from getReflectionTextureMatrix because refraction requires a special configuration of the matrix in right-handed mode.\r\n * @returns The refraction matrix\r\n */\r\n public override getRefractionTextureMatrix(): Matrix {\r\n return this.getScene()?.useRightHandedSystem ? this._textureMatrixRefraction : this._textureMatrix;\r\n }\r\n\r\n private _loadTexture(onLoad: Nullable<() => void> = null, onError: Nullable<(message?: string, exception?: any) => void> = null) {\r\n const scene = this.getScene();\r\n const oldTexture = this._texture;\r\n this._texture = this._getFromCache(this.url, this._noMipmap, undefined, undefined, this._useSRGBBuffer, this.isCube);\r\n\r\n const onLoadProcessing = () => {\r\n this.onLoadObservable.notifyObservers(this);\r\n if (oldTexture) {\r\n oldTexture.dispose();\r\n this.getScene()?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n if (onLoad) {\r\n onLoad();\r\n }\r\n };\r\n\r\n const errorHandler = (message?: string, exception?: any) => {\r\n this._loadingError = true;\r\n this._errorObject = { message, exception };\r\n if (onError) {\r\n onError(message, exception);\r\n }\r\n Texture.OnTextureLoadErrorObservable.notifyObservers(this);\r\n };\r\n\r\n if (!this._texture) {\r\n if (this._prefiltered) {\r\n this._texture = this._getEngine()!.createPrefilteredCubeTexture(\r\n this.url,\r\n scene,\r\n this._lodScale,\r\n this._lodOffset,\r\n onLoad,\r\n errorHandler,\r\n this._format,\r\n this._forcedExtension,\r\n this._createPolynomials\r\n );\r\n } else {\r\n this._texture = this._getEngine()!.createCubeTexture(\r\n this.url,\r\n scene,\r\n this._files,\r\n this._noMipmap,\r\n onLoad,\r\n errorHandler,\r\n this._format,\r\n this._forcedExtension,\r\n false,\r\n this._lodScale,\r\n this._lodOffset,\r\n null,\r\n this._loaderOptions,\r\n !!this._useSRGBBuffer,\r\n this._buffer\r\n );\r\n }\r\n\r\n this._texture?.onLoadedObservable.add(() => this.onLoadObservable.notifyObservers(this));\r\n } else {\r\n if (this._texture.isReady) {\r\n Tools.SetImmediate(() => onLoadProcessing());\r\n } else {\r\n this._texture.onLoadedObservable.add(() => onLoadProcessing());\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Parses text to create a cube texture\r\n * @param parsedTexture define the serialized text to read from\r\n * @param scene defines the hosting scene\r\n * @param rootUrl defines the root url of the cube texture\r\n * @returns a cube texture\r\n */\r\n public static Parse(parsedTexture: any, scene: Scene, rootUrl: string): CubeTexture {\r\n const texture = SerializationHelper.Parse(\r\n () => {\r\n let prefiltered: boolean = false;\r\n if (parsedTexture.prefiltered) {\r\n prefiltered = parsedTexture.prefiltered;\r\n }\r\n return new CubeTexture(\r\n rootUrl + (parsedTexture.url ?? parsedTexture.name),\r\n scene,\r\n parsedTexture.extensions,\r\n false,\r\n parsedTexture.files || null,\r\n null,\r\n null,\r\n undefined,\r\n prefiltered,\r\n parsedTexture.forcedExtension\r\n );\r\n },\r\n parsedTexture,\r\n scene\r\n );\r\n\r\n // Local Cubemaps\r\n if (parsedTexture.boundingBoxPosition) {\r\n texture.boundingBoxPosition = Vector3.FromArray(parsedTexture.boundingBoxPosition);\r\n }\r\n if (parsedTexture.boundingBoxSize) {\r\n texture.boundingBoxSize = Vector3.FromArray(parsedTexture.boundingBoxSize);\r\n }\r\n\r\n // Animations\r\n if (parsedTexture.animations) {\r\n for (let animationIndex = 0; animationIndex < parsedTexture.animations.length; animationIndex++) {\r\n const parsedAnimation = parsedTexture.animations[animationIndex];\r\n const internalClass = GetClass(\"BABYLON.Animation\");\r\n if (internalClass) {\r\n texture.animations.push(internalClass.Parse(parsedAnimation));\r\n }\r\n }\r\n }\r\n\r\n return texture;\r\n }\r\n\r\n /**\r\n * Makes a clone, or deep copy, of the cube texture\r\n * @returns a new cube texture\r\n */\r\n public override clone(): CubeTexture {\r\n let uniqueId = 0;\r\n\r\n // Save the irradianceTexture before cloning. The irradianceTexture is\r\n // stored on the InternalTexture (_texture._irradianceTexture), which may\r\n // be shared between the source and clone when loaded from cache.\r\n // BaseTexture.clone() returns null, so CopySource sets the shared\r\n // irradianceTexture to null, losing it on both the original and the clone.\r\n const savedIrradianceTexture = this.irradianceTexture;\r\n\r\n const newCubeTexture = SerializationHelper.Clone(() => {\r\n const cubeTexture = new CubeTexture(this.url, this.getScene() || this._getEngine()!, this._extensions, this._noMipmap, this._files);\r\n uniqueId = cubeTexture.uniqueId;\r\n\r\n return cubeTexture;\r\n }, this);\r\n\r\n newCubeTexture.uniqueId = uniqueId;\r\n\r\n // Restore the irradianceTexture if it was cleared during cloning.\r\n if (savedIrradianceTexture && !this.irradianceTexture) {\r\n this.irradianceTexture = savedIrradianceTexture;\r\n }\r\n\r\n return newCubeTexture;\r\n }\r\n}\r\n\r\nTexture._CubeTextureParser = CubeTexture.Parse;\r\n// Some exporters relies on Tools.Instantiate\r\nRegisterClass(\"BABYLON.CubeTexture\", CubeTexture);\r\n"]}
@@ -0,0 +1,31 @@
1
+ type EnvironmentLightingDefinesMixinConstructor<T = {}> = new (...args: any[]) => T;
2
+ /**
3
+ * Mixin to add UV defines to your material defines
4
+ * @internal
5
+ */
6
+ export declare function EnvironmentLightingDefinesMixin<Tbase extends EnvironmentLightingDefinesMixinConstructor>(base: Tbase): {
7
+ new (...args: any[]): {
8
+ REFLECTION: boolean;
9
+ REFLECTIONMAP_3D: boolean;
10
+ REFLECTIONMAP_SPHERICAL: boolean;
11
+ REFLECTIONMAP_PLANAR: boolean;
12
+ REFLECTIONMAP_CUBIC: boolean;
13
+ USE_LOCAL_REFLECTIONMAP_CUBIC: boolean;
14
+ REFLECTIONMAP_PROJECTION: boolean;
15
+ REFLECTIONMAP_SKYBOX: boolean;
16
+ REFLECTIONMAP_EXPLICIT: boolean;
17
+ REFLECTIONMAP_EQUIRECTANGULAR: boolean;
18
+ REFLECTIONMAP_EQUIRECTANGULAR_FIXED: boolean;
19
+ REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED: boolean;
20
+ INVERTCUBICMAP: boolean;
21
+ USESPHERICALFROMREFLECTIONMAP: boolean;
22
+ USEIRRADIANCEMAP: boolean;
23
+ USE_IRRADIANCE_DOMINANT_DIRECTION: boolean;
24
+ USESPHERICALINVERTEX: boolean;
25
+ REFLECTIONMAP_OPPOSITEZ: boolean;
26
+ LODINREFLECTIONALPHA: boolean;
27
+ GAMMAREFLECTION: boolean;
28
+ RGBDREFLECTION: boolean;
29
+ };
30
+ } & Tbase;
31
+ export {};
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Mixin to add UV defines to your material defines
3
+ * @internal
4
+ */
5
+ export function EnvironmentLightingDefinesMixin(base) {
6
+ return class extends base {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.REFLECTION = false;
10
+ this.REFLECTIONMAP_3D = false;
11
+ this.REFLECTIONMAP_SPHERICAL = false;
12
+ this.REFLECTIONMAP_PLANAR = false;
13
+ this.REFLECTIONMAP_CUBIC = false;
14
+ this.USE_LOCAL_REFLECTIONMAP_CUBIC = false;
15
+ this.REFLECTIONMAP_PROJECTION = false;
16
+ this.REFLECTIONMAP_SKYBOX = false;
17
+ this.REFLECTIONMAP_EXPLICIT = false;
18
+ this.REFLECTIONMAP_EQUIRECTANGULAR = false;
19
+ this.REFLECTIONMAP_EQUIRECTANGULAR_FIXED = false;
20
+ this.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = false;
21
+ this.INVERTCUBICMAP = false;
22
+ this.USESPHERICALFROMREFLECTIONMAP = false;
23
+ this.USEIRRADIANCEMAP = false;
24
+ this.USE_IRRADIANCE_DOMINANT_DIRECTION = false;
25
+ this.USESPHERICALINVERTEX = false;
26
+ this.REFLECTIONMAP_OPPOSITEZ = false;
27
+ this.LODINREFLECTIONALPHA = false;
28
+ this.GAMMAREFLECTION = false;
29
+ this.RGBDREFLECTION = false;
30
+ }
31
+ };
32
+ }
33
+ //# sourceMappingURL=environmentLighting.defines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environmentLighting.defines.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/environmentLighting.defines.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,+BAA+B,CAA2D,IAAW;IACjH,OAAO,KAAM,SAAQ,IAAI;QAAlB;;YACI,eAAU,GAAG,KAAK,CAAC;YACnB,qBAAgB,GAAG,KAAK,CAAC;YACzB,4BAAuB,GAAG,KAAK,CAAC;YAChC,yBAAoB,GAAG,KAAK,CAAC;YAC7B,wBAAmB,GAAG,KAAK,CAAC;YAC5B,kCAA6B,GAAG,KAAK,CAAC;YACtC,6BAAwB,GAAG,KAAK,CAAC;YACjC,yBAAoB,GAAG,KAAK,CAAC;YAC7B,2BAAsB,GAAG,KAAK,CAAC;YAC/B,kCAA6B,GAAG,KAAK,CAAC;YACtC,wCAAmC,GAAG,KAAK,CAAC;YAC5C,gDAA2C,GAAG,KAAK,CAAC;YACpD,mBAAc,GAAG,KAAK,CAAC;YACvB,kCAA6B,GAAG,KAAK,CAAC;YACtC,qBAAgB,GAAG,KAAK,CAAC;YACzB,sCAAiC,GAAG,KAAK,CAAC;YAC1C,yBAAoB,GAAG,KAAK,CAAC;YAC7B,4BAAuB,GAAG,KAAK,CAAC;YAChC,yBAAoB,GAAG,KAAK,CAAC;YAC7B,oBAAe,GAAG,KAAK,CAAC;YACxB,mBAAc,GAAG,KAAK,CAAC;QAClC,CAAC;KAAA,CAAC;AACN,CAAC","sourcesContent":["type EnvironmentLightingDefinesMixinConstructor<T = {}> = new (...args: any[]) => T;\r\n\r\n/**\r\n * Mixin to add UV defines to your material defines\r\n * @internal\r\n */\r\nexport function EnvironmentLightingDefinesMixin<Tbase extends EnvironmentLightingDefinesMixinConstructor>(base: Tbase) {\r\n return class extends base {\r\n public REFLECTION = false;\r\n public REFLECTIONMAP_3D = false;\r\n public REFLECTIONMAP_SPHERICAL = false;\r\n public REFLECTIONMAP_PLANAR = false;\r\n public REFLECTIONMAP_CUBIC = false;\r\n public USE_LOCAL_REFLECTIONMAP_CUBIC = false;\r\n public REFLECTIONMAP_PROJECTION = false;\r\n public REFLECTIONMAP_SKYBOX = false;\r\n public REFLECTIONMAP_EXPLICIT = false;\r\n public REFLECTIONMAP_EQUIRECTANGULAR = false;\r\n public REFLECTIONMAP_EQUIRECTANGULAR_FIXED = false;\r\n public REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = false;\r\n public INVERTCUBICMAP = false;\r\n public USESPHERICALFROMREFLECTIONMAP = false;\r\n public USEIRRADIANCEMAP = false;\r\n public USE_IRRADIANCE_DOMINANT_DIRECTION = false;\r\n public USESPHERICALINVERTEX = false;\r\n public REFLECTIONMAP_OPPOSITEZ = false;\r\n public LODINREFLECTIONALPHA = false;\r\n public GAMMAREFLECTION = false;\r\n public RGBDREFLECTION = false;\r\n };\r\n}\r\n"]}
@@ -905,6 +905,7 @@ export class Material {
905
905
  if (!this._useUBO) {
906
906
  effect.setMatrix("viewProjection", this.getScene().getTransformMatrix());
907
907
  effect.setMatrix("projection", this.getScene().getProjectionMatrix());
908
+ effect.setMatrix("inverseProjection", this.getScene().getInverseProjectionMatrix());
908
909
  }
909
910
  else {
910
911
  this._needToBindSceneUbo = true;