@onerjs/core 8.33.3 → 8.33.5
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.
- package/AudioV2/webAudio/components/webAudioParameterComponent.js +17 -5
- package/AudioV2/webAudio/components/webAudioParameterComponent.js.map +1 -1
- package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +2 -2
- package/Cameras/Inputs/geospatialCameraPointersInput.js +3 -12
- package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
- package/Cameras/cameraMovement.d.ts +4 -4
- package/Cameras/cameraMovement.js +13 -14
- package/Cameras/cameraMovement.js.map +1 -1
- package/Cameras/geospatialCamera.d.ts +1 -2
- package/Cameras/geospatialCamera.js +22 -19
- package/Cameras/geospatialCamera.js.map +1 -1
- package/Cameras/geospatialCameraMovement.d.ts +0 -5
- package/Cameras/geospatialCameraMovement.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +1 -2
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/frameGraph.d.ts +6 -0
- package/FrameGraph/frameGraph.js +10 -0
- package/FrameGraph/frameGraph.js.map +1 -1
- package/Layers/glowLayer.d.ts +8 -0
- package/Layers/glowLayer.js +11 -0
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/thinGlowLayer.d.ts +17 -0
- package/Layers/thinGlowLayer.js +18 -0
- package/Layers/thinGlowLayer.js.map +1 -1
- package/Lights/Clustered/clusteredLightContainer.js +7 -2
- package/Lights/Clustered/clusteredLightContainer.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js +2 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +2 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +2 -2
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
- package/Materials/PBR/pbrBaseMaterial.js +1 -0
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/envCubeTexture.js +4 -0
- package/Materials/Textures/envCubeTexture.js.map +1 -1
- package/Materials/materialHelper.functions.js +1 -0
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/standardMaterial.d.ts +1 -0
- package/Materials/standardMaterial.js +1 -0
- package/Materials/standardMaterial.js.map +1 -1
- package/Rendering/depthPeelingRenderer.d.ts +1 -0
- package/Rendering/depthPeelingRenderer.js +7 -0
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/thinDepthPeelingRenderer.d.ts +1 -0
- package/Rendering/thinDepthPeelingRenderer.js +2 -0
- package/Rendering/thinDepthPeelingRenderer.js.map +1 -1
- package/Shaders/default.vertex.js +4 -0
- package/Shaders/default.vertex.js.map +1 -1
- package/Shaders/lightProxy.vertex.js +7 -1
- package/Shaders/lightProxy.vertex.js.map +1 -1
- package/Shaders/pbr.vertex.js +4 -0
- package/Shaders/pbr.vertex.js.map +1 -1
- package/ShadersWGSL/default.vertex.js +4 -0
- package/ShadersWGSL/default.vertex.js.map +1 -1
- package/ShadersWGSL/lightProxy.vertex.js +7 -1
- package/ShadersWGSL/lightProxy.vertex.js.map +1 -1
- package/ShadersWGSL/pbr.vertex.js +4 -0
- package/ShadersWGSL/pbr.vertex.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +2 -3
- package/scene.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pbrBaseMaterial.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/PBR/pbrBaseMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { expandToProperty } from \"../../Misc/decorators\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { SmartArray } from \"../../Misc/smartArray\";\r\nimport { GetEnvironmentBRDFTexture } from \"../../Misc/brdfTextureTools\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Scene } from \"../../scene\";\r\nimport type { Matrix } from \"../../Maths/math.vector\";\r\nimport { Vector4 } from \"../../Maths/math.vector\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../../Meshes/mesh\";\r\nimport { PBRBRDFConfiguration } from \"./pbrBRDFConfiguration\";\r\nimport { PrePassConfiguration } from \"../prePassConfiguration\";\r\nimport { Color3, TmpColors } from \"../../Maths/math.color\";\r\n\r\nimport { ImageProcessingDefinesMixin } from \"../../Materials/imageProcessingConfiguration.defines\";\r\nimport { ImageProcessingConfiguration } from \"../../Materials/imageProcessingConfiguration\";\r\nimport type { Effect, IEffectCreationOptions } from \"../../Materials/effect\";\r\nimport type { IMaterialCompilationOptions, ICustomShaderNameResolveOptions } from \"../../Materials/material\";\r\nimport { Material } from \"../../Materials/material\";\r\nimport { MaterialPluginEvent } from \"../materialPluginEvent\";\r\nimport { MaterialDefines } from \"../../Materials/materialDefines\";\r\nimport { PushMaterial } from \"../../Materials/pushMaterial\";\r\n\r\nimport type { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport type { RenderTargetTexture } from \"../../Materials/Textures/renderTargetTexture\";\r\n\r\nimport { MaterialFlags } from \"../materialFlags\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport type { IAnimatable } from \"../../Animations/animatable.interface\";\r\n\r\nimport \"../../Materials/Textures/baseTexture.polynomial\";\r\n\r\nimport { EffectFallbacks } from \"../effectFallbacks\";\r\nimport { PBRClearCoatConfiguration } from \"./pbrClearCoatConfiguration\";\r\nimport { PBRIridescenceConfiguration } from \"./pbrIridescenceConfiguration\";\r\nimport { PBRAnisotropicConfiguration } from \"./pbrAnisotropicConfiguration\";\r\nimport { PBRSheenConfiguration } from \"./pbrSheenConfiguration\";\r\nimport { PBRSubSurfaceConfiguration } from \"./pbrSubSurfaceConfiguration\";\r\nimport { DetailMapConfiguration } from \"../material.detailMapConfiguration\";\r\nimport { AddClipPlaneUniforms, BindClipPlane } from \"../clipPlaneMaterialHelper\";\r\nimport {\r\n BindBonesParameters,\r\n BindFogParameters,\r\n BindLights,\r\n BindLogDepth,\r\n BindMorphTargetParameters,\r\n BindTextureMatrix,\r\n BindIBLParameters,\r\n BindIBLSamplers,\r\n HandleFallbacksForShadows,\r\n PrepareAttributesForBakedVertexAnimation,\r\n PrepareAttributesForBones,\r\n PrepareAttributesForInstances,\r\n PrepareAttributesForMorphTargets,\r\n PrepareDefinesForAttributes,\r\n PrepareDefinesForFrameBoundValues,\r\n PrepareDefinesForLights,\r\n PrepareDefinesForIBL,\r\n PrepareDefinesForMergedUV,\r\n PrepareDefinesForMisc,\r\n PrepareDefinesForMultiview,\r\n PrepareDefinesForOIT,\r\n PrepareDefinesForPrePass,\r\n PrepareUniformsAndSamplersList,\r\n PrepareUniformsAndSamplersForIBL,\r\n PrepareUniformLayoutForIBL,\r\n} from \"../materialHelper.functions\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { MaterialHelperGeometryRendering } from \"../materialHelper.geometryrendering\";\r\nimport { UVDefinesMixin } from \"../uv.defines\";\r\nimport { ImageProcessingMixin } from \"../imageProcessing\";\r\n\r\nconst onCreatedEffectParameters = { effect: null as unknown as Effect, subMesh: null as unknown as Nullable<SubMesh> };\r\n\r\nclass PBRMaterialDefinesBase extends UVDefinesMixin(MaterialDefines) {}\r\n\r\n/**\r\n * Manages the defines for the PBR Material.\r\n * @internal\r\n */\r\nexport class PBRMaterialDefines extends ImageProcessingDefinesMixin(PBRMaterialDefinesBase) {\r\n public PBR = true;\r\n\r\n public NUM_SAMPLES = \"0\";\r\n public REALTIME_FILTERING = false;\r\n public IBL_CDF_FILTERING = false;\r\n\r\n public ALBEDO = false;\r\n public GAMMAALBEDO = false;\r\n public ALBEDODIRECTUV = 0;\r\n public VERTEXCOLOR = false;\r\n\r\n public BASE_WEIGHT = false;\r\n public BASE_WEIGHTDIRECTUV = 0;\r\n public BASE_DIFFUSE_ROUGHNESS = false;\r\n public BASE_DIFFUSE_ROUGHNESSDIRECTUV = 0;\r\n\r\n public BAKED_VERTEX_ANIMATION_TEXTURE = false;\r\n\r\n public AMBIENT = false;\r\n public AMBIENTDIRECTUV = 0;\r\n public AMBIENTINGRAYSCALE = false;\r\n\r\n public OPACITY = false;\r\n public VERTEXALPHA = false;\r\n public OPACITYDIRECTUV = 0;\r\n public OPACITYRGB = false;\r\n public ALPHATEST = false;\r\n public DEPTHPREPASS = false;\r\n public ALPHABLEND = false;\r\n public ALPHAFROMALBEDO = false;\r\n public ALPHATESTVALUE = \"0.5\";\r\n public SPECULAROVERALPHA = false;\r\n public RADIANCEOVERALPHA = false;\r\n public ALPHAFRESNEL = false;\r\n public LINEARALPHAFRESNEL = false;\r\n public PREMULTIPLYALPHA = false;\r\n\r\n public EMISSIVE = false;\r\n public EMISSIVEDIRECTUV = 0;\r\n public GAMMAEMISSIVE = false;\r\n\r\n public REFLECTIVITY = false;\r\n public REFLECTIVITY_GAMMA = false;\r\n public REFLECTIVITYDIRECTUV = 0;\r\n public SPECULARTERM = false;\r\n\r\n public MICROSURFACEFROMREFLECTIVITYMAP = false;\r\n public MICROSURFACEAUTOMATIC = false;\r\n public LODBASEDMICROSFURACE = false;\r\n public MICROSURFACEMAP = false;\r\n public MICROSURFACEMAPDIRECTUV = 0;\r\n\r\n public METALLICWORKFLOW = false;\r\n public ROUGHNESSSTOREINMETALMAPALPHA = false;\r\n public ROUGHNESSSTOREINMETALMAPGREEN = false;\r\n public METALLNESSSTOREINMETALMAPBLUE = false;\r\n public AOSTOREINMETALMAPRED = false;\r\n public METALLIC_REFLECTANCE = false;\r\n public METALLIC_REFLECTANCE_GAMMA = false;\r\n public METALLIC_REFLECTANCEDIRECTUV = 0;\r\n public METALLIC_REFLECTANCE_USE_ALPHA_ONLY = false;\r\n public REFLECTANCE = false;\r\n public REFLECTANCE_GAMMA = false;\r\n public REFLECTANCEDIRECTUV = 0;\r\n\r\n public ENVIRONMENTBRDF = false;\r\n public ENVIRONMENTBRDF_RGBD = false;\r\n\r\n public NORMAL = false;\r\n public TANGENT = false;\r\n public BUMP = false;\r\n public BUMPDIRECTUV = 0;\r\n public OBJECTSPACE_NORMALMAP = false;\r\n public PARALLAX = false;\r\n public PARALLAX_RHS = false;\r\n public PARALLAXOCCLUSION = false;\r\n public NORMALXYSCALE = true;\r\n\r\n public LIGHTMAP = false;\r\n public LIGHTMAPDIRECTUV = 0;\r\n public USELIGHTMAPASSHADOWMAP = false;\r\n public GAMMALIGHTMAP = false;\r\n public RGBDLIGHTMAP = false;\r\n\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 public LINEARSPECULARREFLECTION = false;\r\n public RADIANCEOCCLUSION = false;\r\n public HORIZONOCCLUSION = false;\r\n\r\n public INSTANCES = false;\r\n public THIN_INSTANCES = false;\r\n public INSTANCESCOLOR = false;\r\n\r\n public PREPASS = false;\r\n public PREPASS_COLOR = false;\r\n public PREPASS_COLOR_INDEX = -1;\r\n public PREPASS_IRRADIANCE = false;\r\n public PREPASS_IRRADIANCE_INDEX = -1;\r\n public PREPASS_ALBEDO = false;\r\n public PREPASS_ALBEDO_INDEX = -1;\r\n public PREPASS_ALBEDO_SQRT = false;\r\n public PREPASS_ALBEDO_SQRT_INDEX = -1;\r\n public PREPASS_DEPTH = false;\r\n public PREPASS_DEPTH_INDEX = -1;\r\n public PREPASS_SCREENSPACE_DEPTH = false;\r\n public PREPASS_SCREENSPACE_DEPTH_INDEX = -1;\r\n public PREPASS_NORMALIZED_VIEW_DEPTH = false;\r\n public PREPASS_NORMALIZED_VIEW_DEPTH_INDEX = -1;\r\n public PREPASS_NORMAL = false;\r\n public PREPASS_NORMAL_INDEX = -1;\r\n public PREPASS_NORMAL_WORLDSPACE = false;\r\n public PREPASS_WORLD_NORMAL = false;\r\n public PREPASS_WORLD_NORMAL_INDEX = -1;\r\n public PREPASS_POSITION = false;\r\n public PREPASS_POSITION_INDEX = -1;\r\n public PREPASS_LOCAL_POSITION = false;\r\n public PREPASS_LOCAL_POSITION_INDEX = -1;\r\n public PREPASS_VELOCITY = false;\r\n public PREPASS_VELOCITY_INDEX = -1;\r\n public PREPASS_VELOCITY_LINEAR = false;\r\n public PREPASS_VELOCITY_LINEAR_INDEX = -1;\r\n public PREPASS_REFLECTIVITY = false;\r\n public PREPASS_REFLECTIVITY_INDEX = -1;\r\n public SCENE_MRT_COUNT = 0;\r\n\r\n public NUM_BONE_INFLUENCERS = 0;\r\n public BonesPerMesh = 0;\r\n public BONETEXTURE = false;\r\n public BONES_VELOCITY_ENABLED = false;\r\n\r\n public NONUNIFORMSCALING = false;\r\n\r\n public MORPHTARGETS = false;\r\n public MORPHTARGETS_POSITION = false;\r\n public MORPHTARGETS_NORMAL = false;\r\n public MORPHTARGETS_TANGENT = false;\r\n public MORPHTARGETS_UV = false;\r\n public MORPHTARGETS_UV2 = false;\r\n public MORPHTARGETS_COLOR = false;\r\n public MORPHTARGETTEXTURE_HASPOSITIONS = false;\r\n public MORPHTARGETTEXTURE_HASNORMALS = false;\r\n public MORPHTARGETTEXTURE_HASTANGENTS = false;\r\n public MORPHTARGETTEXTURE_HASUVS = false;\r\n public MORPHTARGETTEXTURE_HASUV2S = false;\r\n public MORPHTARGETTEXTURE_HASCOLORS = false;\r\n public NUM_MORPH_INFLUENCERS = 0;\r\n public MORPHTARGETS_TEXTURE = false;\r\n\r\n public MULTIVIEW = false;\r\n public ORDER_INDEPENDENT_TRANSPARENCY = false;\r\n public ORDER_INDEPENDENT_TRANSPARENCY_16BITS = false;\r\n\r\n public USEPHYSICALLIGHTFALLOFF = false;\r\n public USEGLTFLIGHTFALLOFF = false;\r\n public TWOSIDEDLIGHTING = false;\r\n public MIRRORED = false;\r\n public SHADOWFLOAT = false;\r\n public CLIPPLANE = false;\r\n public CLIPPLANE2 = false;\r\n public CLIPPLANE3 = false;\r\n public CLIPPLANE4 = false;\r\n public CLIPPLANE5 = false;\r\n public CLIPPLANE6 = false;\r\n public POINTSIZE = false;\r\n public FOG = false;\r\n public LOGARITHMICDEPTH = false;\r\n public CAMERA_ORTHOGRAPHIC = false;\r\n public CAMERA_PERSPECTIVE = false;\r\n public AREALIGHTSUPPORTED = true;\r\n\r\n public FORCENORMALFORWARD = false;\r\n\r\n public SPECULARAA = false;\r\n\r\n public UNLIT = false;\r\n\r\n public DECAL_AFTER_DETAIL = false;\r\n\r\n public DEBUGMODE = 0;\r\n public USE_VERTEX_PULLING = false;\r\n\r\n public CLUSTLIGHT_SLICES = 0;\r\n public CLUSTLIGHT_BATCH = 0;\r\n\r\n /**\r\n * Initializes the PBR Material defines.\r\n * @param externalProperties The external properties\r\n */\r\n constructor(externalProperties?: { [name: string]: { type: string; default: any } }) {\r\n super(externalProperties);\r\n this.rebuild();\r\n }\r\n\r\n /**\r\n * Resets the PBR Material defines.\r\n */\r\n public override reset(): void {\r\n super.reset();\r\n this.ALPHATESTVALUE = \"0.5\";\r\n this.PBR = true;\r\n this.NORMALXYSCALE = true;\r\n }\r\n}\r\n\r\nclass PBRBaseMaterialBase extends ImageProcessingMixin(PushMaterial) {}\r\n/**\r\n * The Physically based material base class of BJS.\r\n *\r\n * This offers the main features of a standard PBR material.\r\n * For more information, please refer to the documentation :\r\n * https://doc.babylonjs.com/features/featuresDeepDive/materials/using/introToPBR\r\n * @see [WebGL](https://playground.babylonjs.com/#CGHTSM#1)\r\n * @see [WebGPU](https://playground.babylonjs.com/#CGHTSM#2)\r\n */\r\nexport abstract class PBRBaseMaterial extends PBRBaseMaterialBase {\r\n /**\r\n * PBRMaterialTransparencyMode: No transparency mode, Alpha channel is not use.\r\n */\r\n public static readonly PBRMATERIAL_OPAQUE = Material.MATERIAL_OPAQUE;\r\n\r\n /**\r\n * PBRMaterialTransparencyMode: Alpha Test mode, pixel are discarded below a certain threshold defined by the alpha cutoff value.\r\n */\r\n public static readonly PBRMATERIAL_ALPHATEST = Material.MATERIAL_ALPHATEST;\r\n\r\n /**\r\n * PBRMaterialTransparencyMode: Pixels are blended (according to the alpha mode) with the already drawn pixels in the current frame buffer.\r\n */\r\n public static readonly PBRMATERIAL_ALPHABLEND = Material.MATERIAL_ALPHABLEND;\r\n\r\n /**\r\n * PBRMaterialTransparencyMode: Pixels are blended (according to the alpha mode) with the already drawn pixels in the current frame buffer.\r\n * They are also discarded below the alpha cutoff threshold to improve performances.\r\n */\r\n public static readonly PBRMATERIAL_ALPHATESTANDBLEND = Material.MATERIAL_ALPHATESTANDBLEND;\r\n\r\n /**\r\n * Defines the default value of how much AO map is occluding the analytical lights\r\n * (point spot...).\r\n */\r\n public static DEFAULT_AO_ON_ANALYTICAL_LIGHTS = 0;\r\n\r\n /**\r\n * PBRMaterialLightFalloff Physical: light is falling off following the inverse squared distance law.\r\n */\r\n public static override readonly LIGHTFALLOFF_PHYSICAL = 0;\r\n\r\n /**\r\n * PBRMaterialLightFalloff gltf: light is falling off as described in the gltf moving to PBR document\r\n * to enhance interoperability with other engines.\r\n */\r\n public static override readonly LIGHTFALLOFF_GLTF = 1;\r\n\r\n /**\r\n * PBRMaterialLightFalloff Standard: light is falling off like in the standard material\r\n * to enhance interoperability with other materials.\r\n */\r\n public static override readonly LIGHTFALLOFF_STANDARD = 2;\r\n\r\n /**\r\n * Force all the PBR materials to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n\r\n /**\r\n * Intensity of the direct lights e.g. the four lights available in your scene.\r\n * This impacts both the direct diffuse and specular highlights.\r\n * @internal\r\n */\r\n public _directIntensity: number = 1.0;\r\n\r\n /**\r\n * Intensity of the emissive part of the material.\r\n * This helps controlling the emissive effect without modifying the emissive color.\r\n * @internal\r\n */\r\n public _emissiveIntensity: number = 1.0;\r\n\r\n /**\r\n * Intensity of the environment e.g. how much the environment will light the object\r\n * either through harmonics for rough material or through the reflection for shiny ones.\r\n * @internal\r\n */\r\n public _environmentIntensity: number = 1.0;\r\n\r\n /**\r\n * This is a special control allowing the reduction of the specular highlights coming from the\r\n * four lights of the scene. Those highlights may not be needed in full environment lighting.\r\n * @internal\r\n */\r\n public _specularIntensity: number = 1.0;\r\n\r\n /**\r\n * This stores the direct, emissive, environment, and specular light intensities into a Vector4.\r\n */\r\n private _lightingInfos: Vector4 = new Vector4(this._directIntensity, this._emissiveIntensity, this._environmentIntensity, this._specularIntensity);\r\n\r\n /**\r\n * Debug Control allowing disabling the bump map on this material.\r\n * @internal\r\n */\r\n public _disableBumpMap: boolean = false;\r\n\r\n /**\r\n * AKA Diffuse Texture in standard nomenclature.\r\n * @internal\r\n */\r\n public _albedoTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Base Weight texture (multiplier to the diffuse and metal lobes).\r\n * @internal\r\n */\r\n public _baseWeightTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Base Diffuse Roughness texture (roughness of the diffuse lobe).\r\n * @internal\r\n */\r\n public _baseDiffuseRoughnessTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * AKA Occlusion Texture in other nomenclature.\r\n * @internal\r\n */\r\n public _ambientTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * AKA Occlusion Texture Intensity in other nomenclature.\r\n * @internal\r\n */\r\n public _ambientTextureStrength: number = 1.0;\r\n\r\n /**\r\n * Defines how much the AO map is occluding the analytical lights (point spot...).\r\n * 1 means it completely occludes it\r\n * 0 mean it has no impact\r\n * @internal\r\n */\r\n public _ambientTextureImpactOnAnalyticalLights: number = PBRBaseMaterial.DEFAULT_AO_ON_ANALYTICAL_LIGHTS;\r\n\r\n /**\r\n * Stores the alpha values in a texture.\r\n * @internal\r\n */\r\n public _opacityTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Stores the reflection values in a texture.\r\n * @internal\r\n */\r\n public _reflectionTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Stores the emissive values in a texture.\r\n * @internal\r\n */\r\n public _emissiveTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * AKA Specular texture in other nomenclature.\r\n * @internal\r\n */\r\n public _reflectivityTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Used to switch from specular/glossiness to metallic/roughness workflow.\r\n * @internal\r\n */\r\n public _metallicTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Specifies the metallic scalar of the metallic/roughness workflow.\r\n * Can also be used to scale the metalness values of the metallic texture.\r\n * @internal\r\n */\r\n public _metallic: Nullable<number> = null;\r\n\r\n /**\r\n * Specifies the roughness scalar of the metallic/roughness workflow.\r\n * Can also be used to scale the roughness values of the metallic texture.\r\n * @internal\r\n */\r\n public _roughness: Nullable<number> = null;\r\n\r\n /**\r\n * In metallic workflow, specifies an F0 factor to help configuring the material F0.\r\n * By default the indexOfrefraction is used to compute F0;\r\n *\r\n * This is used as a factor against the default reflectance at normal incidence to tweak it.\r\n *\r\n * F0 = defaultF0 * metallicF0Factor * metallicReflectanceColor;\r\n * F90 = metallicReflectanceColor;\r\n * @internal\r\n */\r\n public _metallicF0Factor = 1;\r\n\r\n /**\r\n * In metallic workflow, specifies an F0 color.\r\n * By default the F90 is always 1;\r\n *\r\n * Please note that this factor is also used as a factor against the default reflectance at normal incidence.\r\n *\r\n * F0 = defaultF0_from_IOR * metallicF0Factor * metallicReflectanceColor\r\n * F90 = metallicF0Factor;\r\n * @internal\r\n */\r\n public _metallicReflectanceColor = Color3.White();\r\n\r\n /**\r\n * Specifies that only the A channel from _metallicReflectanceTexture should be used.\r\n * If false, both RGB and A channels will be used\r\n * @internal\r\n */\r\n public _useOnlyMetallicFromMetallicReflectanceTexture = false;\r\n\r\n /**\r\n * Defines to store metallicReflectanceColor in RGB and metallicF0Factor in A\r\n * This is multiply against the scalar values defined in the material.\r\n * @internal\r\n */\r\n public _metallicReflectanceTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Defines to store reflectanceColor in RGB\r\n * This is multiplied against the scalar values defined in the material.\r\n * If both _reflectanceTexture and _metallicReflectanceTexture textures are provided and _useOnlyMetallicFromMetallicReflectanceTexture\r\n * is false, _metallicReflectanceTexture takes precedence and _reflectanceTexture is not used\r\n * @internal\r\n */\r\n public _reflectanceTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Used to enable roughness/glossiness fetch from a separate channel depending on the current mode.\r\n * Gray Scale represents roughness in metallic mode and glossiness in specular mode.\r\n * @internal\r\n */\r\n public _microSurfaceTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Stores surface normal data used to displace a mesh in a texture.\r\n * @internal\r\n */\r\n public _bumpTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Stores the pre-calculated light information of a mesh in a texture.\r\n * @internal\r\n */\r\n public _lightmapTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * The color of a material in ambient lighting.\r\n * @internal\r\n */\r\n public _ambientColor = new Color3(0, 0, 0);\r\n\r\n /**\r\n * AKA Diffuse Color in other nomenclature.\r\n * @internal\r\n */\r\n public _albedoColor = new Color3(1, 1, 1);\r\n\r\n /**\r\n * Base Weight (multiplier to the diffuse and metal lobes).\r\n * @internal\r\n */\r\n public _baseWeight = 1;\r\n\r\n /**\r\n * Base Diffuse Roughness (roughness of the diffuse lobe).\r\n * Can also be used to scale the corresponding texture.\r\n * @internal\r\n */\r\n public _baseDiffuseRoughness: Nullable<number> = null;\r\n\r\n /**\r\n * AKA Specular Color in other nomenclature.\r\n * @internal\r\n */\r\n public _reflectivityColor = new Color3(1, 1, 1);\r\n\r\n /**\r\n * The color applied when light is reflected from a material.\r\n * @internal\r\n */\r\n public _reflectionColor = new Color3(1, 1, 1);\r\n\r\n /**\r\n * The color applied when light is emitted from a material.\r\n * @internal\r\n */\r\n public _emissiveColor = new Color3(0, 0, 0);\r\n\r\n /**\r\n * AKA Glossiness in other nomenclature.\r\n * @internal\r\n */\r\n public _microSurface = 0.9;\r\n\r\n /**\r\n * Specifies that the material will use the light map as a show map.\r\n * @internal\r\n */\r\n public _useLightmapAsShadowmap = false;\r\n\r\n /**\r\n * This parameters will enable/disable Horizon occlusion to prevent normal maps to look shiny when the normal\r\n * makes the reflect vector face the model (under horizon).\r\n * @internal\r\n */\r\n public _useHorizonOcclusion = true;\r\n\r\n /**\r\n * This parameters will enable/disable radiance occlusion by preventing the radiance to lit\r\n * too much the area relying on ambient texture to define their ambient occlusion.\r\n * @internal\r\n */\r\n public _useRadianceOcclusion = true;\r\n\r\n /**\r\n * Specifies that the alpha is coming form the albedo channel alpha channel for alpha blending.\r\n * @internal\r\n */\r\n public _useAlphaFromAlbedoTexture = false;\r\n\r\n /**\r\n * Specifies that the material will keeps the specular highlights over a transparent surface (only the most luminous ones).\r\n * A car glass is a good example of that. When sun reflects on it you can not see what is behind.\r\n * @internal\r\n */\r\n public _useSpecularOverAlpha = true;\r\n\r\n /**\r\n * Specifies if the reflectivity texture contains the glossiness information in its alpha channel.\r\n * @internal\r\n */\r\n public _useMicroSurfaceFromReflectivityMapAlpha = false;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the roughness information in its alpha channel.\r\n * @internal\r\n */\r\n public _useRoughnessFromMetallicTextureAlpha = true;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the roughness information in its green channel.\r\n * @internal\r\n */\r\n public _useRoughnessFromMetallicTextureGreen = false;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the metallness information in its blue channel.\r\n * @internal\r\n */\r\n public _useMetallnessFromMetallicTextureBlue = false;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the ambient occlusion information in its red channel.\r\n * @internal\r\n */\r\n public _useAmbientOcclusionFromMetallicTextureRed = false;\r\n\r\n /**\r\n * Specifies if the ambient texture contains the ambient occlusion information in its red channel only.\r\n * @internal\r\n */\r\n public _useAmbientInGrayScale = false;\r\n\r\n /**\r\n * In case the reflectivity map does not contain the microsurface information in its alpha channel,\r\n * The material will try to infer what glossiness each pixel should be.\r\n * @internal\r\n */\r\n public _useAutoMicroSurfaceFromReflectivityMap = false;\r\n\r\n /**\r\n * Defines the falloff type used in this material.\r\n * It by default is Physical.\r\n * @internal\r\n */\r\n public _lightFalloff = PBRBaseMaterial.LIGHTFALLOFF_PHYSICAL;\r\n\r\n /**\r\n * Specifies that the material will keeps the reflection highlights over a transparent surface (only the most luminous ones).\r\n * A car glass is a good example of that. When the street lights reflects on it you can not see what is behind.\r\n * @internal\r\n */\r\n public _useRadianceOverAlpha = true;\r\n\r\n /**\r\n * Allows using an object space normal map (instead of tangent space).\r\n * @internal\r\n */\r\n public _useObjectSpaceNormalMap = false;\r\n\r\n /**\r\n * Allows using the bump map in parallax mode.\r\n * @internal\r\n */\r\n public _useParallax = false;\r\n\r\n /**\r\n * Allows using the bump map in parallax occlusion mode.\r\n * @internal\r\n */\r\n public _useParallaxOcclusion = false;\r\n\r\n /**\r\n * Controls the scale bias of the parallax mode.\r\n * @internal\r\n */\r\n public _parallaxScaleBias = 0.05;\r\n\r\n /**\r\n * If sets to true, disables all the lights affecting the material.\r\n * @internal\r\n */\r\n public _disableLighting = false;\r\n\r\n /**\r\n * Number of Simultaneous lights allowed on the material.\r\n * @internal\r\n */\r\n public _maxSimultaneousLights = 4;\r\n\r\n /**\r\n * If sets to true, x component of normal map value will be inverted (x = 1.0 - x).\r\n * @internal\r\n */\r\n public _invertNormalMapX = false;\r\n\r\n /**\r\n * If sets to true, y component of normal map value will be inverted (y = 1.0 - y).\r\n * @internal\r\n */\r\n public _invertNormalMapY = false;\r\n\r\n /**\r\n * If sets to true and backfaceCulling is false, normals will be flipped on the backside.\r\n * @internal\r\n */\r\n public _twoSidedLighting = false;\r\n\r\n /**\r\n * Defines the alpha limits in alpha test mode.\r\n * @internal\r\n */\r\n public _alphaCutOff = 0.4;\r\n\r\n /**\r\n * A fresnel is applied to the alpha of the model to ensure grazing angles edges are not alpha tested.\r\n * And/Or occlude the blended part. (alpha is converted to gamma to compute the fresnel)\r\n * @internal\r\n */\r\n public _useAlphaFresnel = false;\r\n\r\n /**\r\n * A fresnel is applied to the alpha of the model to ensure grazing angles edges are not alpha tested.\r\n * And/Or occlude the blended part. (alpha stays linear to compute the fresnel)\r\n * @internal\r\n */\r\n public _useLinearAlphaFresnel = false;\r\n\r\n /**\r\n * Specifies the environment BRDF texture used to compute the scale and offset roughness values\r\n * from cos theta and roughness:\r\n * http://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_notes_v2.pdf\r\n * @internal\r\n */\r\n public _environmentBRDFTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Force the shader to compute irradiance in the fragment shader in order to take bump in account.\r\n * @internal\r\n */\r\n public _forceIrradianceInFragment = false;\r\n\r\n private _systemRealTimeFiltering: boolean | undefined = undefined;\r\n /* Realtime filtering system control */\r\n public get systemRealTimeFiltering() {\r\n return this._systemRealTimeFiltering;\r\n }\r\n public set systemRealTimeFiltering(value: boolean | undefined) {\r\n this._systemRealTimeFiltering = value;\r\n this.markAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n\r\n private _realTimeFiltering: boolean | undefined = undefined;\r\n /**\r\n * Enables realtime filtering on the texture.\r\n */\r\n public get realTimeFiltering() {\r\n return (this._realTimeFiltering ?? false) || !!this.systemRealTimeFiltering;\r\n }\r\n public set realTimeFiltering(b: boolean) {\r\n this._realTimeFiltering = b;\r\n this.markAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Checks if the real-time filtering setting is explicitly set by the user.\r\n */\r\n public get isUserSetRealTimeFiltering() {\r\n return typeof this._realTimeFiltering === \"boolean\";\r\n }\r\n\r\n private _realTimeFilteringQuality: number | undefined = undefined;\r\n /**\r\n * Quality switch for realtime filtering\r\n */\r\n public get realTimeFilteringQuality(): number {\r\n return this._realTimeFilteringQuality ?? Constants.TEXTURE_FILTERING_QUALITY_MIN;\r\n }\r\n public set realTimeFilteringQuality(n: number) {\r\n this._realTimeFilteringQuality = n;\r\n this.markAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Checks if the real-time filtering quality has been set by the user.\r\n */\r\n public get isUserSetRealTimeFilteringQuality() {\r\n return typeof this._realTimeFilteringQuality === \"number\";\r\n }\r\n\r\n /**\r\n * Can this material render to several textures at once\r\n */\r\n public override get canRenderToMRT() {\r\n return true;\r\n }\r\n\r\n /**\r\n * Force normal to face away from face.\r\n * @internal\r\n */\r\n public _forceNormalForward = false;\r\n\r\n /**\r\n * Enables specular anti aliasing in the PBR shader.\r\n * It will both interacts on the Geometry for analytical and IBL lighting.\r\n * It also prefilter the roughness map based on the bump values.\r\n * @internal\r\n */\r\n public _enableSpecularAntiAliasing = false;\r\n\r\n /**\r\n * Stores the available render targets.\r\n */\r\n private _renderTargets = new SmartArray<RenderTargetTexture>(16);\r\n\r\n /**\r\n * Sets the global ambient color for the material used in lighting calculations.\r\n */\r\n private _globalAmbientColor = new Color3(0, 0, 0);\r\n\r\n /**\r\n * If set to true, no lighting calculations will be applied.\r\n */\r\n private _unlit = false;\r\n\r\n /**\r\n * If sets to true, the decal map will be applied after the detail map. Else, it is applied before (default: false)\r\n */\r\n private _applyDecalMapAfterDetailMap = false;\r\n\r\n private _debugMode = 0;\r\n\r\n private _shadersLoaded = false;\r\n private _breakShaderLoadedCheck = false;\r\n\r\n /**\r\n * @internal\r\n * This is reserved for the inspector.\r\n * Defines the material debug mode.\r\n * It helps seeing only some components of the material while troubleshooting.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public debugMode = 0;\r\n\r\n /**\r\n * @internal\r\n * This is reserved for the inspector.\r\n * Specify from where on screen the debug mode should start.\r\n * The value goes from -1 (full screen) to 1 (not visible)\r\n * It helps with side by side comparison against the final render\r\n * This defaults to -1\r\n */\r\n public debugLimit = -1;\r\n\r\n /**\r\n * @internal\r\n * This is reserved for the inspector.\r\n * As the default viewing range might not be enough (if the ambient is really small for instance)\r\n * You can use the factor to better multiply the final value.\r\n */\r\n public debugFactor = 1;\r\n\r\n /**\r\n * Defines the clear coat layer parameters for the material.\r\n */\r\n public readonly clearCoat: PBRClearCoatConfiguration;\r\n\r\n /**\r\n * Defines the iridescence layer parameters for the material.\r\n */\r\n public readonly iridescence: PBRIridescenceConfiguration;\r\n\r\n /**\r\n * Defines the anisotropic parameters for the material.\r\n */\r\n public readonly anisotropy: PBRAnisotropicConfiguration;\r\n\r\n /**\r\n * Defines the BRDF parameters for the material.\r\n */\r\n public readonly brdf: PBRBRDFConfiguration;\r\n\r\n /**\r\n * Defines the Sheen parameters for the material.\r\n */\r\n public readonly sheen: PBRSheenConfiguration;\r\n\r\n /**\r\n * Defines the SubSurface parameters for the material.\r\n */\r\n public readonly subSurface: PBRSubSurfaceConfiguration;\r\n\r\n /**\r\n * Defines additional PrePass parameters for the material.\r\n */\r\n public readonly prePassConfiguration: PrePassConfiguration;\r\n\r\n /**\r\n * Defines the detail map parameters for the material.\r\n */\r\n public readonly detailMap: DetailMapConfiguration;\r\n\r\n protected _cacheHasRenderTargetTextures = false;\r\n\r\n /**\r\n * Instantiates a new PBRMaterial instance.\r\n *\r\n * @param name The material name\r\n * @param scene The scene the material will be use in.\r\n * @param forceGLSL Use the GLSL code generation for the shader (even on WebGPU). Default is false\r\n */\r\n constructor(name: string, scene?: Scene, forceGLSL = false) {\r\n super(name, scene, undefined, forceGLSL || PBRBaseMaterial.ForceGLSL);\r\n\r\n this.brdf = new PBRBRDFConfiguration(this);\r\n this.clearCoat = new PBRClearCoatConfiguration(this);\r\n this.iridescence = new PBRIridescenceConfiguration(this);\r\n this.anisotropy = new PBRAnisotropicConfiguration(this);\r\n this.sheen = new PBRSheenConfiguration(this);\r\n this.subSurface = new PBRSubSurfaceConfiguration(this);\r\n this.detailMap = new DetailMapConfiguration(this);\r\n\r\n // Setup the default processing configuration to the scene.\r\n this._attachImageProcessingConfiguration(null);\r\n\r\n this.getRenderTargetTextures = (): SmartArray<RenderTargetTexture> => {\r\n this._renderTargets.reset();\r\n\r\n if (MaterialFlags.ReflectionTextureEnabled && this._reflectionTexture && this._reflectionTexture.isRenderTarget) {\r\n this._renderTargets.push(<RenderTargetTexture>this._reflectionTexture);\r\n }\r\n\r\n this._eventInfo.renderTargets = this._renderTargets;\r\n this._callbackPluginEventFillRenderTargetTextures(this._eventInfo);\r\n\r\n return this._renderTargets;\r\n };\r\n\r\n this._environmentBRDFTexture = GetEnvironmentBRDFTexture(this.getScene());\r\n this.prePassConfiguration = new PrePassConfiguration();\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that current material needs to register RTT\r\n */\r\n public override get hasRenderTargetTextures(): boolean {\r\n if (MaterialFlags.ReflectionTextureEnabled && this._reflectionTexture && this._reflectionTexture.isRenderTarget) {\r\n return true;\r\n }\r\n\r\n return this._cacheHasRenderTargetTextures;\r\n }\r\n\r\n /**\r\n * Can this material render to prepass\r\n */\r\n public override get isPrePassCapable(): boolean {\r\n return !this.disableDepthWrite;\r\n }\r\n\r\n /**\r\n * @returns the name of the material class.\r\n */\r\n public override getClassName(): string {\r\n return \"PBRBaseMaterial\";\r\n }\r\n\r\n /**\r\n * Returns true if alpha blending should be disabled.\r\n */\r\n protected override get _disableAlphaBlending(): boolean {\r\n return (\r\n this._transparencyMode === PBRBaseMaterial.PBRMATERIAL_OPAQUE ||\r\n this._transparencyMode === PBRBaseMaterial.PBRMATERIAL_ALPHATEST ||\r\n this.subSurface?.disableAlphaBlending\r\n );\r\n }\r\n\r\n /**\r\n * @returns whether or not this material should be rendered in alpha blend mode.\r\n */\r\n public override needAlphaBlending(): boolean {\r\n if (this._hasTransparencyMode) {\r\n return this._transparencyModeIsBlend;\r\n }\r\n\r\n if (this._disableAlphaBlending) {\r\n return false;\r\n }\r\n\r\n return this.alpha < 1.0 || this._opacityTexture != null || this._shouldUseAlphaFromAlbedoTexture();\r\n }\r\n\r\n /**\r\n * @returns whether or not this material should be rendered in alpha test mode.\r\n */\r\n public override needAlphaTesting(): boolean {\r\n if (this._hasTransparencyMode) {\r\n return this._transparencyModeIsTest;\r\n }\r\n\r\n if (this.subSurface?.disableAlphaBlending) {\r\n return false;\r\n }\r\n\r\n return this._hasAlphaChannel() && (this._transparencyMode == null || this._transparencyMode === PBRBaseMaterial.PBRMATERIAL_ALPHATEST);\r\n }\r\n\r\n /**\r\n * @returns whether or not the alpha value of the albedo texture should be used for alpha blending.\r\n */\r\n protected _shouldUseAlphaFromAlbedoTexture(): boolean {\r\n return this._albedoTexture != null && this._albedoTexture.hasAlpha && this._useAlphaFromAlbedoTexture && this._transparencyMode !== PBRBaseMaterial.PBRMATERIAL_OPAQUE;\r\n }\r\n\r\n /**\r\n * @returns whether or not there is a usable alpha channel for transparency.\r\n */\r\n protected _hasAlphaChannel(): boolean {\r\n return (this._albedoTexture != null && this._albedoTexture.hasAlpha) || this._opacityTexture != null;\r\n }\r\n\r\n /**\r\n * @returns the texture used for the alpha test.\r\n */\r\n public override getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return this._albedoTexture;\r\n }\r\n\r\n /**\r\n * Specifies that the submesh is ready to be used.\r\n * @param mesh - BJS mesh.\r\n * @param subMesh - A submesh of the BJS mesh. Used to check if it is ready.\r\n * @param useInstances - Specifies that instances should be used.\r\n * @returns - boolean indicating that the submesh is ready or not.\r\n */\r\n public override isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\r\n if (!this._uniformBufferLayoutBuilt) {\r\n this.buildUniformLayout();\r\n }\r\n\r\n const drawWrapper = subMesh._drawWrapper;\r\n\r\n if (drawWrapper.effect && this.isFrozen) {\r\n if (drawWrapper._wasPreviouslyReady && drawWrapper._wasPreviouslyUsingInstances === useInstances) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.GetDefineNames, this._eventInfo);\r\n subMesh.materialDefines = new PBRMaterialDefines(this._eventInfo.defineNames);\r\n }\r\n\r\n const defines = <PBRMaterialDefines>subMesh.materialDefines;\r\n if (this._isReadyForSubMesh(subMesh)) {\r\n return true;\r\n }\r\n\r\n const scene = this.getScene();\r\n const engine = scene.getEngine();\r\n\r\n if (defines._areTexturesDirty) {\r\n this._eventInfo.hasRenderTargetTextures = false;\r\n this._callbackPluginEventHasRenderTargetTextures(this._eventInfo);\r\n this._cacheHasRenderTargetTextures = this._eventInfo.hasRenderTargetTextures;\r\n if (scene.texturesEnabled) {\r\n if (this._albedoTexture && MaterialFlags.DiffuseTextureEnabled) {\r\n if (!this._albedoTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._baseWeightTexture && MaterialFlags.BaseWeightTextureEnabled) {\r\n if (!this._baseWeightTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._baseDiffuseRoughnessTexture && MaterialFlags.BaseDiffuseRoughnessTextureEnabled) {\r\n if (!this._baseDiffuseRoughnessTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._ambientTexture && MaterialFlags.AmbientTextureEnabled) {\r\n if (!this._ambientTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._opacityTexture && MaterialFlags.OpacityTextureEnabled) {\r\n if (!this._opacityTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n const reflectionTexture = this._getReflectionTexture();\r\n if (reflectionTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n if (!reflectionTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n if (reflectionTexture.irradianceTexture) {\r\n if (!reflectionTexture.irradianceTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n } else {\r\n // Not ready until spherical are ready too.\r\n if (!reflectionTexture.sphericalPolynomial && reflectionTexture.getInternalTexture()?._sphericalPolynomialPromise) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n if (this._lightmapTexture && MaterialFlags.LightmapTextureEnabled) {\r\n if (!this._lightmapTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._emissiveTexture && MaterialFlags.EmissiveTextureEnabled) {\r\n if (!this._emissiveTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (MaterialFlags.SpecularTextureEnabled) {\r\n if (this._metallicTexture) {\r\n if (!this._metallicTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n } else if (this._reflectivityTexture) {\r\n if (!this._reflectivityTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._metallicReflectanceTexture) {\r\n if (!this._metallicReflectanceTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._reflectanceTexture) {\r\n if (!this._reflectanceTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._microSurfaceTexture) {\r\n if (!this._microSurfaceTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n if (engine.getCaps().standardDerivatives && this._bumpTexture && MaterialFlags.BumpTextureEnabled && !this._disableBumpMap) {\r\n // Bump texture cannot be not blocking.\r\n if (!this._bumpTexture.isReady()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._environmentBRDFTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n // This is blocking.\r\n if (!this._environmentBRDFTexture.isReady()) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._eventInfo.isReadyForSubMesh = true;\r\n this._eventInfo.defines = defines;\r\n this._eventInfo.subMesh = subMesh;\r\n this._callbackPluginEventIsReadyForSubMesh(this._eventInfo);\r\n\r\n if (!this._eventInfo.isReadyForSubMesh) {\r\n return false;\r\n }\r\n\r\n if (defines._areImageProcessingDirty && this._imageProcessingConfiguration) {\r\n if (!this._imageProcessingConfiguration.isReady()) {\r\n return false;\r\n }\r\n }\r\n\r\n // Check if Area Lights have LTC texture.\r\n if (defines[\"AREALIGHTUSED\"] || defines[\"CLUSTLIGHT_BATCH\"]) {\r\n for (let index = 0; index < mesh.lightSources.length; index++) {\r\n if (!mesh.lightSources[index]._isReady()) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n if (!engine.getCaps().standardDerivatives && !mesh.isVerticesDataPresent(VertexBuffer.NormalKind)) {\r\n mesh.createNormals(true);\r\n Logger.Warn(\"PBRMaterial: Normals have been created for the mesh: \" + mesh.name);\r\n }\r\n\r\n const previousEffect = subMesh.effect;\r\n const lightDisposed = defines._areLightsDisposed;\r\n let effect = this._prepareEffect(mesh, subMesh.getRenderingMesh(), defines, this.onCompiled, this.onError, useInstances, null);\r\n\r\n let forceWasNotReadyPreviously = false;\r\n\r\n if (effect) {\r\n if (this._onEffectCreatedObservable) {\r\n onCreatedEffectParameters.effect = effect;\r\n onCreatedEffectParameters.subMesh = subMesh;\r\n this._onEffectCreatedObservable.notifyObservers(onCreatedEffectParameters);\r\n }\r\n\r\n // Use previous effect while new one is compiling\r\n if (this.allowShaderHotSwapping && previousEffect && !effect.isReady()) {\r\n effect = previousEffect;\r\n defines.markAsUnprocessed();\r\n\r\n forceWasNotReadyPreviously = this.isFrozen;\r\n\r\n if (lightDisposed) {\r\n // re register in case it takes more than one frame.\r\n defines._areLightsDisposed = true;\r\n return false;\r\n }\r\n } else {\r\n scene.resetCachedMaterial();\r\n subMesh.setEffect(effect, defines, this._materialContext);\r\n }\r\n }\r\n\r\n if (!subMesh.effect || !subMesh.effect.isReady()) {\r\n return false;\r\n }\r\n\r\n defines._renderId = scene.getRenderId();\r\n drawWrapper._wasPreviouslyReady = forceWasNotReadyPreviously ? false : true;\r\n drawWrapper._wasPreviouslyUsingInstances = !!useInstances;\r\n\r\n this._checkScenePerformancePriority();\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Specifies if the material uses metallic roughness workflow.\r\n * @returns boolean specifying if the material uses metallic roughness workflow.\r\n */\r\n public isMetallicWorkflow(): boolean {\r\n if (this._metallic != null || this._roughness != null || this._metallicTexture) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _prepareEffect(\r\n mesh: AbstractMesh,\r\n renderingMesh: AbstractMesh,\r\n defines: PBRMaterialDefines,\r\n onCompiled: Nullable<(effect: Effect) => void> = null,\r\n onError: Nullable<(effect: Effect, errors: string) => void> = null,\r\n useInstances: Nullable<boolean> = null,\r\n useClipPlane: Nullable<boolean> = null\r\n ): Nullable<Effect> {\r\n this._prepareDefines(mesh, renderingMesh, defines, useInstances, useClipPlane);\r\n\r\n if (!defines.isDirty) {\r\n return null;\r\n }\r\n\r\n defines.markAsProcessed();\r\n\r\n const scene = this.getScene();\r\n const engine = scene.getEngine();\r\n\r\n // Fallbacks\r\n const fallbacks = new EffectFallbacks();\r\n let fallbackRank = 0;\r\n if (defines.USESPHERICALINVERTEX) {\r\n fallbacks.addFallback(fallbackRank++, \"USESPHERICALINVERTEX\");\r\n }\r\n\r\n if (defines.FOG) {\r\n fallbacks.addFallback(fallbackRank, \"FOG\");\r\n }\r\n if (defines.SPECULARAA) {\r\n fallbacks.addFallback(fallbackRank, \"SPECULARAA\");\r\n }\r\n if (defines.POINTSIZE) {\r\n fallbacks.addFallback(fallbackRank, \"POINTSIZE\");\r\n }\r\n if (defines.LOGARITHMICDEPTH) {\r\n fallbacks.addFallback(fallbackRank, \"LOGARITHMICDEPTH\");\r\n }\r\n if (defines.PARALLAX) {\r\n fallbacks.addFallback(fallbackRank, \"PARALLAX\");\r\n }\r\n if (defines.PARALLAX_RHS) {\r\n fallbacks.addFallback(fallbackRank, \"PARALLAX_RHS\");\r\n }\r\n if (defines.PARALLAXOCCLUSION) {\r\n fallbacks.addFallback(fallbackRank++, \"PARALLAXOCCLUSION\");\r\n }\r\n\r\n if (defines.ENVIRONMENTBRDF) {\r\n fallbacks.addFallback(fallbackRank++, \"ENVIRONMENTBRDF\");\r\n }\r\n\r\n if (defines.TANGENT) {\r\n fallbacks.addFallback(fallbackRank++, \"TANGENT\");\r\n }\r\n\r\n if (defines.BUMP) {\r\n fallbacks.addFallback(fallbackRank++, \"BUMP\");\r\n }\r\n\r\n fallbackRank = HandleFallbacksForShadows(defines, fallbacks, this._maxSimultaneousLights, fallbackRank++);\r\n\r\n if (defines.SPECULARTERM) {\r\n fallbacks.addFallback(fallbackRank++, \"SPECULARTERM\");\r\n }\r\n\r\n if (defines.USESPHERICALFROMREFLECTIONMAP) {\r\n fallbacks.addFallback(fallbackRank++, \"USESPHERICALFROMREFLECTIONMAP\");\r\n }\r\n\r\n if (defines.USEIRRADIANCEMAP) {\r\n fallbacks.addFallback(fallbackRank++, \"USEIRRADIANCEMAP\");\r\n }\r\n\r\n if (defines.LIGHTMAP) {\r\n fallbacks.addFallback(fallbackRank++, \"LIGHTMAP\");\r\n }\r\n\r\n if (defines.NORMAL) {\r\n fallbacks.addFallback(fallbackRank++, \"NORMAL\");\r\n }\r\n\r\n if (defines.AMBIENT) {\r\n fallbacks.addFallback(fallbackRank++, \"AMBIENT\");\r\n }\r\n\r\n if (defines.EMISSIVE) {\r\n fallbacks.addFallback(fallbackRank++, \"EMISSIVE\");\r\n }\r\n\r\n if (defines.VERTEXCOLOR) {\r\n fallbacks.addFallback(fallbackRank++, \"VERTEXCOLOR\");\r\n }\r\n\r\n if (defines.MORPHTARGETS) {\r\n fallbacks.addFallback(fallbackRank++, \"MORPHTARGETS\");\r\n }\r\n\r\n if (defines.MULTIVIEW) {\r\n fallbacks.addFallback(0, \"MULTIVIEW\");\r\n }\r\n\r\n //Attributes\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n if (defines.NORMAL) {\r\n attribs.push(VertexBuffer.NormalKind);\r\n }\r\n\r\n if (defines.TANGENT) {\r\n attribs.push(VertexBuffer.TangentKind);\r\n }\r\n\r\n for (let i = 1; i <= Constants.MAX_SUPPORTED_UV_SETS; ++i) {\r\n if (defines[\"UV\" + i]) {\r\n attribs.push(`uv${i === 1 ? \"\" : i}`);\r\n }\r\n }\r\n\r\n if (defines.VERTEXCOLOR) {\r\n attribs.push(VertexBuffer.ColorKind);\r\n }\r\n\r\n PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\r\n PrepareAttributesForInstances(attribs, defines);\r\n PrepareAttributesForMorphTargets(attribs, mesh, defines);\r\n PrepareAttributesForBakedVertexAnimation(attribs, mesh, defines);\r\n\r\n let shaderName = \"pbr\";\r\n\r\n const uniforms = [\r\n \"world\",\r\n \"view\",\r\n \"viewProjection\",\r\n \"vEyePosition\",\r\n \"vLightsType\",\r\n \"vAmbientColor\",\r\n \"vAlbedoColor\",\r\n \"baseWeight\",\r\n \"baseDiffuseRoughness\",\r\n \"vReflectivityColor\",\r\n \"vMetallicReflectanceFactors\",\r\n \"vEmissiveColor\",\r\n \"visibility\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"pointSize\",\r\n \"vAlbedoInfos\",\r\n \"vBaseWeightInfos\",\r\n \"vBaseDiffuseRoughnessInfos\",\r\n \"vAmbientInfos\",\r\n \"vOpacityInfos\",\r\n \"vEmissiveInfos\",\r\n \"vReflectivityInfos\",\r\n \"vMetallicReflectanceInfos\",\r\n \"vReflectanceInfos\",\r\n \"vMicroSurfaceSamplerInfos\",\r\n \"vBumpInfos\",\r\n \"vLightmapInfos\",\r\n \"mBones\",\r\n \"albedoMatrix\",\r\n \"baseWeightMatrix\",\r\n \"baseDiffuseRoughnessMatrix\",\r\n \"ambientMatrix\",\r\n \"opacityMatrix\",\r\n \"emissiveMatrix\",\r\n \"reflectivityMatrix\",\r\n \"normalMatrix\",\r\n \"microSurfaceSamplerMatrix\",\r\n \"bumpMatrix\",\r\n \"lightmapMatrix\",\r\n \"metallicReflectanceMatrix\",\r\n \"reflectanceMatrix\",\r\n \"vLightingIntensity\",\r\n \"logarithmicDepthConstant\",\r\n \"vTangentSpaceParams\",\r\n \"boneTextureWidth\",\r\n \"vDebugMode\",\r\n \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\r\n \"cameraInfo\",\r\n ];\r\n\r\n const samplers = [\r\n \"albedoSampler\",\r\n \"baseWeightSampler\",\r\n \"baseDiffuseRoughnessSampler\",\r\n \"reflectivitySampler\",\r\n \"ambientSampler\",\r\n \"emissiveSampler\",\r\n \"bumpSampler\",\r\n \"lightmapSampler\",\r\n \"opacitySampler\",\r\n \"microSurfaceSampler\",\r\n \"environmentBrdfSampler\",\r\n \"boneSampler\",\r\n \"metallicReflectanceSampler\",\r\n \"reflectanceSampler\",\r\n \"morphTargets\",\r\n \"oitDepthSampler\",\r\n \"oitFrontColorSampler\",\r\n \"areaLightsLTC1Sampler\",\r\n \"areaLightsLTC2Sampler\",\r\n ];\r\n\r\n PrepareUniformsAndSamplersForIBL(uniforms, samplers, true);\r\n\r\n const uniformBuffers = [\"Material\", \"Scene\", \"Mesh\"];\r\n\r\n const indexParameters = { maxSimultaneousLights: this._maxSimultaneousLights, maxSimultaneousMorphTargets: defines.NUM_MORPH_INFLUENCERS };\r\n\r\n this._eventInfo.fallbacks = fallbacks;\r\n this._eventInfo.fallbackRank = fallbackRank;\r\n this._eventInfo.defines = defines;\r\n this._eventInfo.uniforms = uniforms;\r\n this._eventInfo.attributes = attribs;\r\n this._eventInfo.samplers = samplers;\r\n this._eventInfo.uniformBuffersNames = uniformBuffers;\r\n this._eventInfo.customCode = undefined;\r\n this._eventInfo.mesh = mesh;\r\n this._eventInfo.indexParameters = indexParameters;\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.PrepareEffect, this._eventInfo);\r\n\r\n MaterialHelperGeometryRendering.AddUniformsAndSamplers(uniforms, samplers);\r\n\r\n PrePassConfiguration.AddUniforms(uniforms);\r\n PrePassConfiguration.AddSamplers(samplers);\r\n AddClipPlaneUniforms(uniforms);\r\n\r\n if (ImageProcessingConfiguration) {\r\n ImageProcessingConfiguration.PrepareUniforms(uniforms, defines);\r\n ImageProcessingConfiguration.PrepareSamplers(samplers, defines);\r\n }\r\n\r\n PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: defines,\r\n maxSimultaneousLights: this._maxSimultaneousLights,\r\n });\r\n\r\n const csnrOptions: ICustomShaderNameResolveOptions = {};\r\n\r\n if (this.customShaderNameResolve) {\r\n shaderName = this.customShaderNameResolve(shaderName, uniforms, uniformBuffers, samplers, defines, attribs, csnrOptions);\r\n }\r\n\r\n const join = defines.toString();\r\n const effect = engine.createEffect(\r\n shaderName,\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: onCompiled,\r\n onError: onError,\r\n indexParameters,\r\n processFinalCode: csnrOptions.processFinalCode,\r\n processCodeAfterIncludes: this._eventInfo.customCode,\r\n multiTarget: defines.PREPASS,\r\n shaderLanguage: this._shaderLanguage,\r\n extraInitializationsAsync: this._shadersLoaded\r\n ? undefined\r\n : async () => {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([import(\"../../ShadersWGSL/pbr.vertex\"), import(\"../../ShadersWGSL/pbr.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../../Shaders/pbr.vertex\"), import(\"../../Shaders/pbr.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n },\r\n },\r\n engine\r\n );\r\n\r\n this._eventInfo.customCode = undefined;\r\n\r\n return effect;\r\n }\r\n\r\n private _prepareDefines(\r\n mesh: AbstractMesh,\r\n renderingMesh: AbstractMesh,\r\n defines: PBRMaterialDefines,\r\n useInstances: Nullable<boolean> = null,\r\n useClipPlane: Nullable<boolean> = null\r\n ): void {\r\n const useThinInstances = renderingMesh.hasThinInstances;\r\n\r\n const scene = this.getScene();\r\n const engine = scene.getEngine();\r\n\r\n // Lights\r\n PrepareDefinesForLights(scene, mesh, defines, true, this._maxSimultaneousLights, this._disableLighting);\r\n defines._needNormals = true;\r\n\r\n // Multiview\r\n PrepareDefinesForMultiview(scene, defines);\r\n\r\n // PrePass\r\n const oit = this.needAlphaBlendingForMesh(mesh) && this.getScene().useOrderIndependentTransparency;\r\n PrepareDefinesForPrePass(scene, defines, this.canRenderToMRT && !oit);\r\n\r\n // Order independant transparency\r\n PrepareDefinesForOIT(scene, defines, oit);\r\n\r\n MaterialHelperGeometryRendering.PrepareDefines(engine.currentRenderPassId, mesh, defines);\r\n\r\n // Textures\r\n defines.METALLICWORKFLOW = this.isMetallicWorkflow();\r\n if (defines._areTexturesDirty) {\r\n defines._needUVs = false;\r\n for (let i = 1; i <= Constants.MAX_SUPPORTED_UV_SETS; ++i) {\r\n defines[\"MAINUV\" + i] = false;\r\n }\r\n if (scene.texturesEnabled) {\r\n defines.ALBEDODIRECTUV = 0;\r\n defines.BASE_WEIGHTDIRECTUV = 0;\r\n defines.BASE_DIFFUSE_ROUGHNESSDIRECTUV = 0;\r\n defines.AMBIENTDIRECTUV = 0;\r\n defines.OPACITYDIRECTUV = 0;\r\n defines.EMISSIVEDIRECTUV = 0;\r\n defines.REFLECTIVITYDIRECTUV = 0;\r\n defines.MICROSURFACEMAPDIRECTUV = 0;\r\n defines.METALLIC_REFLECTANCEDIRECTUV = 0;\r\n defines.REFLECTANCEDIRECTUV = 0;\r\n defines.BUMPDIRECTUV = 0;\r\n defines.LIGHTMAPDIRECTUV = 0;\r\n\r\n if (engine.getCaps().textureLOD) {\r\n defines.LODBASEDMICROSFURACE = true;\r\n }\r\n\r\n if (this._albedoTexture && MaterialFlags.DiffuseTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._albedoTexture, defines, \"ALBEDO\");\r\n defines.GAMMAALBEDO = this._albedoTexture.gammaSpace;\r\n } else {\r\n defines.ALBEDO = false;\r\n }\r\n\r\n if (this._baseWeightTexture && MaterialFlags.BaseWeightTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._baseWeightTexture, defines, \"BASE_WEIGHT\");\r\n } else {\r\n defines.BASE_WEIGHT = false;\r\n }\r\n\r\n if (this._baseDiffuseRoughnessTexture && MaterialFlags.BaseDiffuseRoughnessTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._baseDiffuseRoughnessTexture, defines, \"BASE_DIFFUSE_ROUGHNESS\");\r\n } else {\r\n defines.BASE_DIFFUSE_ROUGHNESS = false;\r\n }\r\n\r\n if (this._ambientTexture && MaterialFlags.AmbientTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._ambientTexture, defines, \"AMBIENT\");\r\n defines.AMBIENTINGRAYSCALE = this._useAmbientInGrayScale;\r\n } else {\r\n defines.AMBIENT = false;\r\n }\r\n\r\n if (this._opacityTexture && MaterialFlags.OpacityTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._opacityTexture, defines, \"OPACITY\");\r\n defines.OPACITYRGB = this._opacityTexture.getAlphaFromRGB;\r\n } else {\r\n defines.OPACITY = false;\r\n }\r\n\r\n const reflectionTexture = this._getReflectionTexture();\r\n const useSHInFragment: boolean =\r\n this._forceIrradianceInFragment ||\r\n this.realTimeFiltering ||\r\n this._twoSidedLighting ||\r\n engine.getCaps().maxVaryingVectors <= 8 ||\r\n this._baseDiffuseRoughnessTexture != null;\r\n PrepareDefinesForIBL(scene, reflectionTexture, defines, this.realTimeFiltering, this.realTimeFilteringQuality, !useSHInFragment);\r\n\r\n if (this._lightmapTexture && MaterialFlags.LightmapTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._lightmapTexture, defines, \"LIGHTMAP\");\r\n defines.USELIGHTMAPASSHADOWMAP = this._useLightmapAsShadowmap;\r\n defines.GAMMALIGHTMAP = this._lightmapTexture.gammaSpace;\r\n defines.RGBDLIGHTMAP = this._lightmapTexture.isRGBD;\r\n } else {\r\n defines.LIGHTMAP = false;\r\n }\r\n\r\n if (this._emissiveTexture && MaterialFlags.EmissiveTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._emissiveTexture, defines, \"EMISSIVE\");\r\n defines.GAMMAEMISSIVE = this._emissiveTexture.gammaSpace;\r\n } else {\r\n defines.EMISSIVE = false;\r\n }\r\n\r\n if (MaterialFlags.SpecularTextureEnabled) {\r\n if (this._metallicTexture) {\r\n PrepareDefinesForMergedUV(this._metallicTexture, defines, \"REFLECTIVITY\");\r\n defines.ROUGHNESSSTOREINMETALMAPALPHA = this._useRoughnessFromMetallicTextureAlpha;\r\n defines.ROUGHNESSSTOREINMETALMAPGREEN = !this._useRoughnessFromMetallicTextureAlpha && this._useRoughnessFromMetallicTextureGreen;\r\n defines.METALLNESSSTOREINMETALMAPBLUE = this._useMetallnessFromMetallicTextureBlue;\r\n defines.AOSTOREINMETALMAPRED = this._useAmbientOcclusionFromMetallicTextureRed;\r\n defines.REFLECTIVITY_GAMMA = false;\r\n } else if (this._reflectivityTexture) {\r\n PrepareDefinesForMergedUV(this._reflectivityTexture, defines, \"REFLECTIVITY\");\r\n defines.MICROSURFACEFROMREFLECTIVITYMAP = this._useMicroSurfaceFromReflectivityMapAlpha;\r\n defines.MICROSURFACEAUTOMATIC = this._useAutoMicroSurfaceFromReflectivityMap;\r\n defines.REFLECTIVITY_GAMMA = this._reflectivityTexture.gammaSpace;\r\n } else {\r\n defines.REFLECTIVITY = false;\r\n }\r\n\r\n if (this._metallicReflectanceTexture || this._reflectanceTexture) {\r\n defines.METALLIC_REFLECTANCE_USE_ALPHA_ONLY = this._useOnlyMetallicFromMetallicReflectanceTexture;\r\n if (this._metallicReflectanceTexture) {\r\n PrepareDefinesForMergedUV(this._metallicReflectanceTexture, defines, \"METALLIC_REFLECTANCE\");\r\n defines.METALLIC_REFLECTANCE_GAMMA = this._metallicReflectanceTexture.gammaSpace;\r\n } else {\r\n defines.METALLIC_REFLECTANCE = false;\r\n }\r\n if (\r\n this._reflectanceTexture &&\r\n (!this._metallicReflectanceTexture || (this._metallicReflectanceTexture && this._useOnlyMetallicFromMetallicReflectanceTexture))\r\n ) {\r\n PrepareDefinesForMergedUV(this._reflectanceTexture, defines, \"REFLECTANCE\");\r\n defines.REFLECTANCE_GAMMA = this._reflectanceTexture.gammaSpace;\r\n } else {\r\n defines.REFLECTANCE = false;\r\n }\r\n } else {\r\n defines.METALLIC_REFLECTANCE = false;\r\n defines.REFLECTANCE = false;\r\n }\r\n\r\n if (this._microSurfaceTexture) {\r\n PrepareDefinesForMergedUV(this._microSurfaceTexture, defines, \"MICROSURFACEMAP\");\r\n } else {\r\n defines.MICROSURFACEMAP = false;\r\n }\r\n } else {\r\n defines.REFLECTIVITY = false;\r\n defines.MICROSURFACEMAP = false;\r\n }\r\n\r\n if (engine.getCaps().standardDerivatives && this._bumpTexture && MaterialFlags.BumpTextureEnabled && !this._disableBumpMap) {\r\n PrepareDefinesForMergedUV(this._bumpTexture, defines, \"BUMP\");\r\n\r\n if (this._useParallax && this._albedoTexture && MaterialFlags.DiffuseTextureEnabled) {\r\n defines.PARALLAX = true;\r\n defines.PARALLAX_RHS = scene.useRightHandedSystem;\r\n defines.PARALLAXOCCLUSION = !!this._useParallaxOcclusion;\r\n } else {\r\n defines.PARALLAX = false;\r\n }\r\n\r\n defines.OBJECTSPACE_NORMALMAP = this._useObjectSpaceNormalMap;\r\n } else {\r\n defines.BUMP = false;\r\n defines.PARALLAX = false;\r\n defines.PARALLAX_RHS = false;\r\n defines.PARALLAXOCCLUSION = false;\r\n defines.OBJECTSPACE_NORMALMAP = false;\r\n }\r\n\r\n if (this._environmentBRDFTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n defines.ENVIRONMENTBRDF = true;\r\n defines.ENVIRONMENTBRDF_RGBD = this._environmentBRDFTexture.isRGBD;\r\n } else {\r\n defines.ENVIRONMENTBRDF = false;\r\n defines.ENVIRONMENTBRDF_RGBD = false;\r\n }\r\n\r\n if (this._shouldUseAlphaFromAlbedoTexture()) {\r\n defines.ALPHAFROMALBEDO = true;\r\n } else {\r\n defines.ALPHAFROMALBEDO = false;\r\n }\r\n }\r\n\r\n defines.SPECULAROVERALPHA = this._useSpecularOverAlpha;\r\n\r\n if (this._lightFalloff === PBRBaseMaterial.LIGHTFALLOFF_STANDARD) {\r\n defines.USEPHYSICALLIGHTFALLOFF = false;\r\n defines.USEGLTFLIGHTFALLOFF = false;\r\n } else if (this._lightFalloff === PBRBaseMaterial.LIGHTFALLOFF_GLTF) {\r\n defines.USEPHYSICALLIGHTFALLOFF = false;\r\n defines.USEGLTFLIGHTFALLOFF = true;\r\n } else {\r\n defines.USEPHYSICALLIGHTFALLOFF = true;\r\n defines.USEGLTFLIGHTFALLOFF = false;\r\n }\r\n\r\n defines.RADIANCEOVERALPHA = this._useRadianceOverAlpha;\r\n\r\n if (!this.backFaceCulling && this._twoSidedLighting) {\r\n defines.TWOSIDEDLIGHTING = true;\r\n } else {\r\n defines.TWOSIDEDLIGHTING = false;\r\n }\r\n\r\n // We need it to not invert normals in two sided lighting mode (based on the winding of the face)\r\n defines.MIRRORED = !!scene._mirroredCameraPosition;\r\n\r\n defines.SPECULARAA = engine.getCaps().standardDerivatives && this._enableSpecularAntiAliasing;\r\n }\r\n\r\n if (defines._areTexturesDirty || defines._areMiscDirty) {\r\n defines.ALPHATESTVALUE = `${this._alphaCutOff}${this._alphaCutOff % 1 === 0 ? \".\" : \"\"}`;\r\n defines.PREMULTIPLYALPHA = this.alphaMode === Constants.ALPHA_PREMULTIPLIED || this.alphaMode === Constants.ALPHA_PREMULTIPLIED_PORTERDUFF;\r\n defines.ALPHABLEND = this.needAlphaBlendingForMesh(mesh);\r\n defines.ALPHAFRESNEL = this._useAlphaFresnel || this._useLinearAlphaFresnel;\r\n defines.LINEARALPHAFRESNEL = this._useLinearAlphaFresnel;\r\n }\r\n\r\n if (defines._areImageProcessingDirty && this._imageProcessingConfiguration) {\r\n this._imageProcessingConfiguration.prepareDefines(defines);\r\n }\r\n\r\n defines.FORCENORMALFORWARD = this._forceNormalForward;\r\n\r\n defines.RADIANCEOCCLUSION = this._useRadianceOcclusion;\r\n\r\n defines.HORIZONOCCLUSION = this._useHorizonOcclusion;\r\n\r\n // Misc.\r\n if (defines._areMiscDirty) {\r\n PrepareDefinesForMisc(\r\n mesh,\r\n scene,\r\n this._useLogarithmicDepth,\r\n this.pointsCloud,\r\n this.fogEnabled,\r\n this.needAlphaTestingForMesh(mesh),\r\n defines,\r\n this._applyDecalMapAfterDetailMap,\r\n this._useVertexPulling,\r\n renderingMesh,\r\n this._isVertexOutputInvariant\r\n );\r\n defines.UNLIT = this._unlit || ((this.pointsCloud || this.wireframe) && !mesh.isVerticesDataPresent(VertexBuffer.NormalKind));\r\n defines.DEBUGMODE = this._debugMode;\r\n }\r\n\r\n // Values that need to be evaluated on every frame\r\n PrepareDefinesForFrameBoundValues(scene, engine, this, defines, useInstances ? true : false, useClipPlane, useThinInstances);\r\n\r\n // External config\r\n this._eventInfo.defines = defines;\r\n this._eventInfo.mesh = mesh;\r\n this._callbackPluginEventPrepareDefinesBeforeAttributes(this._eventInfo);\r\n\r\n // Attribs\r\n PrepareDefinesForAttributes(mesh, defines, true, true, true, this._transparencyMode !== PBRBaseMaterial.PBRMATERIAL_OPAQUE);\r\n\r\n // External config\r\n this._callbackPluginEventPrepareDefines(this._eventInfo);\r\n }\r\n\r\n /**\r\n * Force shader compilation\r\n * @param mesh - Define the mesh we want to force the compilation for\r\n * @param onCompiled - Define a callback triggered when the compilation completes\r\n * @param options - Define the options used to create the compilation\r\n */\r\n public override forceCompilation(mesh: AbstractMesh, onCompiled?: (material: Material) => void, options?: Partial<IMaterialCompilationOptions>): void {\r\n const localOptions = {\r\n clipPlane: false,\r\n useInstances: false,\r\n ...options,\r\n };\r\n\r\n if (!this._uniformBufferLayoutBuilt) {\r\n this.buildUniformLayout();\r\n }\r\n\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.GetDefineNames, this._eventInfo);\r\n const checkReady = () => {\r\n if (this._breakShaderLoadedCheck) {\r\n return;\r\n }\r\n const defines = new PBRMaterialDefines(this._eventInfo.defineNames);\r\n const effect = this._prepareEffect(mesh, mesh, defines, undefined, undefined, localOptions.useInstances, localOptions.clipPlane)!;\r\n if (this._onEffectCreatedObservable) {\r\n onCreatedEffectParameters.effect = effect;\r\n onCreatedEffectParameters.subMesh = null;\r\n this._onEffectCreatedObservable.notifyObservers(onCreatedEffectParameters);\r\n }\r\n if (effect.isReady()) {\r\n if (onCompiled) {\r\n onCompiled(this);\r\n }\r\n } else {\r\n effect.onCompileObservable.add(() => {\r\n if (onCompiled) {\r\n onCompiled(this);\r\n }\r\n });\r\n }\r\n };\r\n checkReady();\r\n }\r\n\r\n /**\r\n * Initializes the uniform buffer layout for the shader.\r\n */\r\n public override buildUniformLayout(): void {\r\n // Order is important !\r\n const ubo = this._uniformBuffer;\r\n ubo.addUniform(\"vAlbedoInfos\", 2);\r\n ubo.addUniform(\"vBaseWeightInfos\", 2);\r\n ubo.addUniform(\"vBaseDiffuseRoughnessInfos\", 2);\r\n ubo.addUniform(\"vAmbientInfos\", 4);\r\n ubo.addUniform(\"vOpacityInfos\", 2);\r\n ubo.addUniform(\"vEmissiveInfos\", 2);\r\n ubo.addUniform(\"vLightmapInfos\", 2);\r\n ubo.addUniform(\"vReflectivityInfos\", 3);\r\n ubo.addUniform(\"vMicroSurfaceSamplerInfos\", 2);\r\n ubo.addUniform(\"vBumpInfos\", 3);\r\n ubo.addUniform(\"albedoMatrix\", 16);\r\n ubo.addUniform(\"baseWeightMatrix\", 16);\r\n ubo.addUniform(\"baseDiffuseRoughnessMatrix\", 16);\r\n ubo.addUniform(\"ambientMatrix\", 16);\r\n ubo.addUniform(\"opacityMatrix\", 16);\r\n ubo.addUniform(\"emissiveMatrix\", 16);\r\n ubo.addUniform(\"lightmapMatrix\", 16);\r\n ubo.addUniform(\"reflectivityMatrix\", 16);\r\n ubo.addUniform(\"microSurfaceSamplerMatrix\", 16);\r\n ubo.addUniform(\"bumpMatrix\", 16);\r\n ubo.addUniform(\"vTangentSpaceParams\", 2);\r\n ubo.addUniform(\"vAlbedoColor\", 4);\r\n ubo.addUniform(\"baseWeight\", 1);\r\n ubo.addUniform(\"baseDiffuseRoughness\", 1);\r\n ubo.addUniform(\"vLightingIntensity\", 4);\r\n\r\n ubo.addUniform(\"pointSize\", 1);\r\n ubo.addUniform(\"vReflectivityColor\", 4);\r\n ubo.addUniform(\"vEmissiveColor\", 3);\r\n ubo.addUniform(\"vAmbientColor\", 3);\r\n\r\n ubo.addUniform(\"vDebugMode\", 2);\r\n\r\n ubo.addUniform(\"vMetallicReflectanceFactors\", 4);\r\n ubo.addUniform(\"vMetallicReflectanceInfos\", 2);\r\n ubo.addUniform(\"metallicReflectanceMatrix\", 16);\r\n ubo.addUniform(\"vReflectanceInfos\", 2);\r\n ubo.addUniform(\"reflectanceMatrix\", 16);\r\n\r\n ubo.addUniform(\"cameraInfo\", 4);\r\n PrepareUniformLayoutForIBL(ubo, true, true, true, true, true);\r\n super.buildUniformLayout();\r\n }\r\n\r\n /**\r\n * Binds the submesh data.\r\n * @param world - The world matrix.\r\n * @param mesh - The BJS mesh.\r\n * @param subMesh - A submesh of the BJS mesh.\r\n */\r\n public override bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const scene = this.getScene();\r\n\r\n const defines = <PBRMaterialDefines>subMesh.materialDefines;\r\n if (!defines) {\r\n return;\r\n }\r\n\r\n const effect = subMesh.effect;\r\n\r\n if (!effect) {\r\n return;\r\n }\r\n\r\n this._activeEffect = effect;\r\n\r\n // Matrices Mesh.\r\n mesh.getMeshUniformBuffer().bindToEffect(effect, \"Mesh\");\r\n mesh.transferToEffect(world);\r\n\r\n const engine = scene.getEngine();\r\n\r\n // Binding unconditionally\r\n this._uniformBuffer.bindToEffect(effect, \"Material\");\r\n\r\n this.prePassConfiguration.bindForSubMesh(this._activeEffect, scene, mesh, world, this.isFrozen);\r\n\r\n MaterialHelperGeometryRendering.Bind(engine.currentRenderPassId, this._activeEffect, mesh, world, this);\r\n\r\n const camera = scene.activeCamera;\r\n if (camera) {\r\n this._uniformBuffer.updateFloat4(\"cameraInfo\", camera.minZ, camera.maxZ, 0, 0);\r\n } else {\r\n this._uniformBuffer.updateFloat4(\"cameraInfo\", 0, 0, 0, 0);\r\n }\r\n\r\n this._eventInfo.subMesh = subMesh;\r\n this._callbackPluginEventHardBindForSubMesh(this._eventInfo);\r\n\r\n // Normal Matrix\r\n if (defines.OBJECTSPACE_NORMALMAP) {\r\n world.toNormalMatrix(this._normalMatrix);\r\n this.bindOnlyNormalMatrix(this._normalMatrix);\r\n }\r\n\r\n const mustRebind = this._mustRebind(scene, effect, subMesh, mesh.visibility);\r\n\r\n // Bones\r\n BindBonesParameters(mesh, this._activeEffect, this.prePassConfiguration);\r\n\r\n let reflectionTexture: Nullable<BaseTexture> = null;\r\n const ubo = this._uniformBuffer;\r\n if (mustRebind) {\r\n this.bindViewProjection(effect);\r\n reflectionTexture = this._getReflectionTexture();\r\n\r\n if (!ubo.useUbo || !this.isFrozen || !ubo.isSync || subMesh._drawWrapper._forceRebindOnNextCall) {\r\n // Texture uniforms\r\n if (scene.texturesEnabled) {\r\n if (this._albedoTexture && MaterialFlags.DiffuseTextureEnabled) {\r\n ubo.updateFloat2(\"vAlbedoInfos\", this._albedoTexture.coordinatesIndex, this._albedoTexture.level);\r\n BindTextureMatrix(this._albedoTexture, ubo, \"albedo\");\r\n }\r\n\r\n if (this._baseWeightTexture && MaterialFlags.BaseWeightTextureEnabled) {\r\n ubo.updateFloat2(\"vBaseWeightInfos\", this._baseWeightTexture.coordinatesIndex, this._baseWeightTexture.level);\r\n BindTextureMatrix(this._baseWeightTexture, ubo, \"baseWeight\");\r\n }\r\n\r\n if (this._baseDiffuseRoughnessTexture && MaterialFlags.BaseDiffuseRoughnessTextureEnabled) {\r\n ubo.updateFloat2(\"vBaseDiffuseRoughnessInfos\", this._baseDiffuseRoughnessTexture.coordinatesIndex, this._baseDiffuseRoughnessTexture.level);\r\n BindTextureMatrix(this._baseDiffuseRoughnessTexture, ubo, \"baseDiffuseRoughness\");\r\n }\r\n\r\n if (this._ambientTexture && MaterialFlags.AmbientTextureEnabled) {\r\n ubo.updateFloat4(\r\n \"vAmbientInfos\",\r\n this._ambientTexture.coordinatesIndex,\r\n this._ambientTexture.level,\r\n this._ambientTextureStrength,\r\n this._ambientTextureImpactOnAnalyticalLights\r\n );\r\n BindTextureMatrix(this._ambientTexture, ubo, \"ambient\");\r\n }\r\n\r\n if (this._opacityTexture && MaterialFlags.OpacityTextureEnabled) {\r\n ubo.updateFloat2(\"vOpacityInfos\", this._opacityTexture.coordinatesIndex, this._opacityTexture.level);\r\n BindTextureMatrix(this._opacityTexture, ubo, \"opacity\");\r\n }\r\n\r\n if (this._emissiveTexture && MaterialFlags.EmissiveTextureEnabled) {\r\n ubo.updateFloat2(\"vEmissiveInfos\", this._emissiveTexture.coordinatesIndex, this._emissiveTexture.level);\r\n BindTextureMatrix(this._emissiveTexture, ubo, \"emissive\");\r\n }\r\n\r\n if (this._lightmapTexture && MaterialFlags.LightmapTextureEnabled) {\r\n ubo.updateFloat2(\"vLightmapInfos\", this._lightmapTexture.coordinatesIndex, this._lightmapTexture.level);\r\n BindTextureMatrix(this._lightmapTexture, ubo, \"lightmap\");\r\n }\r\n\r\n if (MaterialFlags.SpecularTextureEnabled) {\r\n if (this._metallicTexture) {\r\n ubo.updateFloat3(\"vReflectivityInfos\", this._metallicTexture.coordinatesIndex, this._metallicTexture.level, this._ambientTextureStrength);\r\n BindTextureMatrix(this._metallicTexture, ubo, \"reflectivity\");\r\n } else if (this._reflectivityTexture) {\r\n ubo.updateFloat3(\"vReflectivityInfos\", this._reflectivityTexture.coordinatesIndex, this._reflectivityTexture.level, 1.0);\r\n BindTextureMatrix(this._reflectivityTexture, ubo, \"reflectivity\");\r\n }\r\n\r\n if (this._metallicReflectanceTexture) {\r\n ubo.updateFloat2(\"vMetallicReflectanceInfos\", this._metallicReflectanceTexture.coordinatesIndex, this._metallicReflectanceTexture.level);\r\n BindTextureMatrix(this._metallicReflectanceTexture, ubo, \"metallicReflectance\");\r\n }\r\n\r\n if (this._reflectanceTexture && defines.REFLECTANCE) {\r\n ubo.updateFloat2(\"vReflectanceInfos\", this._reflectanceTexture.coordinatesIndex, this._reflectanceTexture.level);\r\n BindTextureMatrix(this._reflectanceTexture, ubo, \"reflectance\");\r\n }\r\n\r\n if (this._microSurfaceTexture) {\r\n ubo.updateFloat2(\"vMicroSurfaceSamplerInfos\", this._microSurfaceTexture.coordinatesIndex, this._microSurfaceTexture.level);\r\n BindTextureMatrix(this._microSurfaceTexture, ubo, \"microSurfaceSampler\");\r\n }\r\n }\r\n\r\n if (this._bumpTexture && engine.getCaps().standardDerivatives && MaterialFlags.BumpTextureEnabled && !this._disableBumpMap) {\r\n ubo.updateFloat3(\"vBumpInfos\", this._bumpTexture.coordinatesIndex, this._bumpTexture.level, this._parallaxScaleBias);\r\n BindTextureMatrix(this._bumpTexture, ubo, \"bump\");\r\n\r\n if (scene._mirroredCameraPosition) {\r\n ubo.updateFloat2(\"vTangentSpaceParams\", this._invertNormalMapX ? 1.0 : -1.0, this._invertNormalMapY ? 1.0 : -1.0);\r\n } else {\r\n ubo.updateFloat2(\"vTangentSpaceParams\", this._invertNormalMapX ? -1.0 : 1.0, this._invertNormalMapY ? -1.0 : 1.0);\r\n }\r\n }\r\n\r\n BindIBLParameters(scene, defines, ubo, this._reflectionColor, reflectionTexture, this.realTimeFiltering, true, true, true, true, true);\r\n }\r\n\r\n // Point size\r\n if (this.pointsCloud) {\r\n ubo.updateFloat(\"pointSize\", this.pointSize);\r\n }\r\n\r\n // Colors\r\n if (defines.METALLICWORKFLOW) {\r\n TmpColors.Color4[0].r = this._metallic === undefined || this._metallic === null ? 1 : this._metallic;\r\n TmpColors.Color4[0].g = this._roughness === undefined || this._roughness === null ? 1 : this._roughness;\r\n const ior = this.subSurface?._indexOfRefraction ?? 1.5;\r\n const outsideIOR = 1; // consider air as clear coat and other layers would remap in the shader.\r\n TmpColors.Color4[0].b = ior;\r\n // We are here deriving our default reflectance from a common value for none metallic surface.\r\n // Based of the schlick fresnel approximation model\r\n // for dielectrics.\r\n const f0 = Math.pow((ior - outsideIOR) / (ior + outsideIOR), 2);\r\n TmpColors.Color4[0].a = f0;\r\n ubo.updateDirectColor4(\"vReflectivityColor\", TmpColors.Color4[0]);\r\n ubo.updateColor4(\"vMetallicReflectanceFactors\", this._metallicReflectanceColor, this._metallicF0Factor);\r\n } else {\r\n ubo.updateColor4(\"vReflectivityColor\", this._reflectivityColor, this._microSurface);\r\n }\r\n\r\n ubo.updateColor3(\"vEmissiveColor\", MaterialFlags.EmissiveTextureEnabled ? this._emissiveColor : Color3.BlackReadOnly);\r\n\r\n if (!defines.SS_REFRACTION && this.subSurface?._linkRefractionWithTransparency) {\r\n ubo.updateColor4(\"vAlbedoColor\", this._albedoColor, 1);\r\n } else {\r\n ubo.updateColor4(\"vAlbedoColor\", this._albedoColor, this.alpha);\r\n }\r\n\r\n ubo.updateFloat(\"baseWeight\", this._baseWeight);\r\n ubo.updateFloat(\"baseDiffuseRoughness\", this._baseDiffuseRoughness || 0.0);\r\n\r\n // Misc\r\n this._lightingInfos.x = this._directIntensity;\r\n this._lightingInfos.y = this._emissiveIntensity;\r\n this._lightingInfos.z = this._environmentIntensity * scene.environmentIntensity;\r\n this._lightingInfos.w = this._specularIntensity;\r\n\r\n ubo.updateVector4(\"vLightingIntensity\", this._lightingInfos);\r\n\r\n // Colors\r\n scene.ambientColor.multiplyToRef(this._ambientColor, this._globalAmbientColor);\r\n\r\n ubo.updateColor3(\"vAmbientColor\", this._globalAmbientColor);\r\n\r\n ubo.updateFloat2(\"vDebugMode\", this.debugLimit, this.debugFactor);\r\n }\r\n\r\n // Textures\r\n if (scene.texturesEnabled) {\r\n if (this._albedoTexture && MaterialFlags.DiffuseTextureEnabled) {\r\n ubo.setTexture(\"albedoSampler\", this._albedoTexture);\r\n }\r\n\r\n if (this._baseWeightTexture && MaterialFlags.BaseWeightTextureEnabled) {\r\n ubo.setTexture(\"baseWeightSampler\", this._baseWeightTexture);\r\n }\r\n\r\n if (this._baseDiffuseRoughnessTexture && MaterialFlags.BaseDiffuseRoughnessTextureEnabled) {\r\n ubo.setTexture(\"baseDiffuseRoughnessSampler\", this._baseDiffuseRoughnessTexture);\r\n }\r\n\r\n if (this._ambientTexture && MaterialFlags.AmbientTextureEnabled) {\r\n ubo.setTexture(\"ambientSampler\", this._ambientTexture);\r\n }\r\n\r\n if (this._opacityTexture && MaterialFlags.OpacityTextureEnabled) {\r\n ubo.setTexture(\"opacitySampler\", this._opacityTexture);\r\n }\r\n\r\n BindIBLSamplers(scene, defines, ubo, reflectionTexture, this.realTimeFiltering);\r\n\r\n if (defines.ENVIRONMENTBRDF) {\r\n ubo.setTexture(\"environmentBrdfSampler\", this._environmentBRDFTexture);\r\n }\r\n\r\n if (this._emissiveTexture && MaterialFlags.EmissiveTextureEnabled) {\r\n ubo.setTexture(\"emissiveSampler\", this._emissiveTexture);\r\n }\r\n\r\n if (this._lightmapTexture && MaterialFlags.LightmapTextureEnabled) {\r\n ubo.setTexture(\"lightmapSampler\", this._lightmapTexture);\r\n }\r\n\r\n if (MaterialFlags.SpecularTextureEnabled) {\r\n if (this._metallicTexture) {\r\n ubo.setTexture(\"reflectivitySampler\", this._metallicTexture);\r\n } else if (this._reflectivityTexture) {\r\n ubo.setTexture(\"reflectivitySampler\", this._reflectivityTexture);\r\n }\r\n\r\n if (this._metallicReflectanceTexture) {\r\n ubo.setTexture(\"metallicReflectanceSampler\", this._metallicReflectanceTexture);\r\n }\r\n\r\n if (this._reflectanceTexture && defines.REFLECTANCE) {\r\n ubo.setTexture(\"reflectanceSampler\", this._reflectanceTexture);\r\n }\r\n\r\n if (this._microSurfaceTexture) {\r\n ubo.setTexture(\"microSurfaceSampler\", this._microSurfaceTexture);\r\n }\r\n }\r\n\r\n if (this._bumpTexture && engine.getCaps().standardDerivatives && MaterialFlags.BumpTextureEnabled && !this._disableBumpMap) {\r\n ubo.setTexture(\"bumpSampler\", this._bumpTexture);\r\n }\r\n }\r\n\r\n // OIT with depth peeling\r\n if (this.getScene().useOrderIndependentTransparency && this.needAlphaBlendingForMesh(mesh)) {\r\n this.getScene().depthPeelingRenderer!.bind(effect);\r\n }\r\n\r\n this._eventInfo.subMesh = subMesh;\r\n this._callbackPluginEventBindForSubMesh(this._eventInfo);\r\n\r\n // Clip plane\r\n BindClipPlane(this._activeEffect, this, scene);\r\n\r\n this.bindEyePosition(effect);\r\n } else if (scene.getEngine()._features.needToAlwaysBindUniformBuffers) {\r\n this._needToBindSceneUbo = true;\r\n }\r\n\r\n if (mustRebind || !this.isFrozen) {\r\n // Lights\r\n if (scene.lightsEnabled && !this._disableLighting) {\r\n BindLights(scene, mesh, this._activeEffect, defines, this._maxSimultaneousLights);\r\n }\r\n\r\n // View\r\n if (\r\n (scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) ||\r\n reflectionTexture ||\r\n this.subSurface.refractionTexture ||\r\n mesh.receiveShadows ||\r\n defines.PREPASS ||\r\n defines[\"CLUSTLIGHT_BATCH\"]\r\n ) {\r\n this.bindView(effect);\r\n }\r\n\r\n // Fog\r\n BindFogParameters(scene, mesh, this._activeEffect, true);\r\n\r\n // Morph targets\r\n if (defines.NUM_MORPH_INFLUENCERS) {\r\n BindMorphTargetParameters(mesh, this._activeEffect);\r\n }\r\n\r\n if (defines.BAKED_VERTEX_ANIMATION_TEXTURE) {\r\n mesh.bakedVertexAnimationManager?.bind(effect, defines.INSTANCES);\r\n }\r\n\r\n // image processing\r\n this._imageProcessingConfiguration.bind(this._activeEffect);\r\n\r\n // Log. depth\r\n BindLogDepth(defines, this._activeEffect, scene);\r\n }\r\n\r\n this._afterBind(mesh, this._activeEffect, subMesh);\r\n\r\n ubo.update();\r\n }\r\n\r\n /**\r\n * Returns the animatable textures.\r\n * If material have animatable metallic texture, then reflectivity texture will not be returned, even if it has animations.\r\n * @returns - Array of animatable textures.\r\n */\r\n public override getAnimatables(): IAnimatable[] {\r\n const results = super.getAnimatables();\r\n\r\n if (this._albedoTexture && this._albedoTexture.animations && this._albedoTexture.animations.length > 0) {\r\n results.push(this._albedoTexture);\r\n }\r\n\r\n if (this._baseWeightTexture && this._baseWeightTexture.animations && this._baseWeightTexture.animations.length > 0) {\r\n results.push(this._baseWeightTexture);\r\n }\r\n\r\n if (this._baseDiffuseRoughnessTexture && this._baseDiffuseRoughnessTexture.animations && this._baseDiffuseRoughnessTexture.animations.length > 0) {\r\n results.push(this._baseDiffuseRoughnessTexture);\r\n }\r\n\r\n if (this._ambientTexture && this._ambientTexture.animations && this._ambientTexture.animations.length > 0) {\r\n results.push(this._ambientTexture);\r\n }\r\n\r\n if (this._opacityTexture && this._opacityTexture.animations && this._opacityTexture.animations.length > 0) {\r\n results.push(this._opacityTexture);\r\n }\r\n\r\n if (this._reflectionTexture && this._reflectionTexture.animations && this._reflectionTexture.animations.length > 0) {\r\n results.push(this._reflectionTexture);\r\n }\r\n\r\n if (this._emissiveTexture && this._emissiveTexture.animations && this._emissiveTexture.animations.length > 0) {\r\n results.push(this._emissiveTexture);\r\n }\r\n\r\n if (this._metallicTexture && this._metallicTexture.animations && this._metallicTexture.animations.length > 0) {\r\n results.push(this._metallicTexture);\r\n } else if (this._reflectivityTexture && this._reflectivityTexture.animations && this._reflectivityTexture.animations.length > 0) {\r\n results.push(this._reflectivityTexture);\r\n }\r\n\r\n if (this._bumpTexture && this._bumpTexture.animations && this._bumpTexture.animations.length > 0) {\r\n results.push(this._bumpTexture);\r\n }\r\n\r\n if (this._lightmapTexture && this._lightmapTexture.animations && this._lightmapTexture.animations.length > 0) {\r\n results.push(this._lightmapTexture);\r\n }\r\n\r\n if (this._metallicReflectanceTexture && this._metallicReflectanceTexture.animations && this._metallicReflectanceTexture.animations.length > 0) {\r\n results.push(this._metallicReflectanceTexture);\r\n }\r\n\r\n if (this._reflectanceTexture && this._reflectanceTexture.animations && this._reflectanceTexture.animations.length > 0) {\r\n results.push(this._reflectanceTexture);\r\n }\r\n\r\n if (this._microSurfaceTexture && this._microSurfaceTexture.animations && this._microSurfaceTexture.animations.length > 0) {\r\n results.push(this._microSurfaceTexture);\r\n }\r\n\r\n return results;\r\n }\r\n\r\n /**\r\n * Returns the texture used for reflections.\r\n * @returns - Reflection texture if present. Otherwise, returns the environment texture.\r\n */\r\n private _getReflectionTexture(): Nullable<BaseTexture> {\r\n if (this._reflectionTexture) {\r\n return this._reflectionTexture;\r\n }\r\n\r\n return this.getScene().environmentTexture;\r\n }\r\n\r\n /**\r\n * Returns an array of the actively used textures.\r\n * @returns - Array of BaseTextures\r\n */\r\n public override getActiveTextures(): BaseTexture[] {\r\n const activeTextures = super.getActiveTextures();\r\n\r\n if (this._albedoTexture) {\r\n activeTextures.push(this._albedoTexture);\r\n }\r\n\r\n if (this._baseWeightTexture) {\r\n activeTextures.push(this._baseWeightTexture);\r\n }\r\n\r\n if (this._baseDiffuseRoughnessTexture) {\r\n activeTextures.push(this._baseDiffuseRoughnessTexture);\r\n }\r\n\r\n if (this._ambientTexture) {\r\n activeTextures.push(this._ambientTexture);\r\n }\r\n\r\n if (this._opacityTexture) {\r\n activeTextures.push(this._opacityTexture);\r\n }\r\n\r\n if (this._reflectionTexture) {\r\n activeTextures.push(this._reflectionTexture);\r\n }\r\n\r\n if (this._emissiveTexture) {\r\n activeTextures.push(this._emissiveTexture);\r\n }\r\n\r\n if (this._reflectivityTexture) {\r\n activeTextures.push(this._reflectivityTexture);\r\n }\r\n\r\n if (this._metallicTexture) {\r\n activeTextures.push(this._metallicTexture);\r\n }\r\n\r\n if (this._metallicReflectanceTexture) {\r\n activeTextures.push(this._metallicReflectanceTexture);\r\n }\r\n\r\n if (this._reflectanceTexture) {\r\n activeTextures.push(this._reflectanceTexture);\r\n }\r\n\r\n if (this._microSurfaceTexture) {\r\n activeTextures.push(this._microSurfaceTexture);\r\n }\r\n\r\n if (this._bumpTexture) {\r\n activeTextures.push(this._bumpTexture);\r\n }\r\n\r\n if (this._lightmapTexture) {\r\n activeTextures.push(this._lightmapTexture);\r\n }\r\n\r\n return activeTextures;\r\n }\r\n\r\n /**\r\n * Checks to see if a texture is used in the material.\r\n * @param texture - Base texture to use.\r\n * @returns - Boolean specifying if a texture is used in the material.\r\n */\r\n public override hasTexture(texture: BaseTexture): boolean {\r\n if (super.hasTexture(texture)) {\r\n return true;\r\n }\r\n\r\n if (this._albedoTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._baseWeightTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._baseDiffuseRoughnessTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._ambientTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._opacityTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._reflectionTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._emissiveTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._reflectivityTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._metallicTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._metallicReflectanceTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._reflectanceTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._microSurfaceTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._bumpTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._lightmapTexture === texture) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Sets the required values to the prepass renderer.\r\n * It can't be sets when subsurface scattering of this material is disabled.\r\n * When scene have ability to enable subsurface prepass effect, it will enable.\r\n * @returns - If prepass is enabled or not.\r\n */\r\n public override setPrePassRenderer(): boolean {\r\n if (!this.subSurface?.isScatteringEnabled) {\r\n return false;\r\n }\r\n\r\n const subSurfaceConfiguration = this.getScene().enableSubSurfaceForPrePass();\r\n if (subSurfaceConfiguration) {\r\n subSurfaceConfiguration.enabled = true;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Disposes the resources of the material.\r\n * @param forceDisposeEffect - Forces the disposal of effects.\r\n * @param forceDisposeTextures - Forces the disposal of all textures.\r\n */\r\n public override dispose(forceDisposeEffect?: boolean, forceDisposeTextures?: boolean): void {\r\n this._breakShaderLoadedCheck = true;\r\n if (forceDisposeTextures) {\r\n if (this._environmentBRDFTexture && this.getScene().environmentBRDFTexture !== this._environmentBRDFTexture) {\r\n this._environmentBRDFTexture.dispose();\r\n }\r\n\r\n this._albedoTexture?.dispose();\r\n this._baseWeightTexture?.dispose();\r\n this._baseDiffuseRoughnessTexture?.dispose();\r\n this._ambientTexture?.dispose();\r\n this._opacityTexture?.dispose();\r\n this._reflectionTexture?.dispose();\r\n this._emissiveTexture?.dispose();\r\n this._metallicTexture?.dispose();\r\n this._reflectivityTexture?.dispose();\r\n this._bumpTexture?.dispose();\r\n this._lightmapTexture?.dispose();\r\n this._metallicReflectanceTexture?.dispose();\r\n this._reflectanceTexture?.dispose();\r\n this._microSurfaceTexture?.dispose();\r\n }\r\n\r\n this._renderTargets.dispose();\r\n\r\n if (this._imageProcessingConfiguration && this._imageProcessingObserver) {\r\n this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver);\r\n }\r\n\r\n super.dispose(forceDisposeEffect, forceDisposeTextures);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"pbrBaseMaterial.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/PBR/pbrBaseMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { expandToProperty } from \"../../Misc/decorators\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { SmartArray } from \"../../Misc/smartArray\";\r\nimport { GetEnvironmentBRDFTexture } from \"../../Misc/brdfTextureTools\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Scene } from \"../../scene\";\r\nimport type { Matrix } from \"../../Maths/math.vector\";\r\nimport { Vector4 } from \"../../Maths/math.vector\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../../Meshes/mesh\";\r\nimport { PBRBRDFConfiguration } from \"./pbrBRDFConfiguration\";\r\nimport { PrePassConfiguration } from \"../prePassConfiguration\";\r\nimport { Color3, TmpColors } from \"../../Maths/math.color\";\r\n\r\nimport { ImageProcessingDefinesMixin } from \"../../Materials/imageProcessingConfiguration.defines\";\r\nimport { ImageProcessingConfiguration } from \"../../Materials/imageProcessingConfiguration\";\r\nimport type { Effect, IEffectCreationOptions } from \"../../Materials/effect\";\r\nimport type { IMaterialCompilationOptions, ICustomShaderNameResolveOptions } from \"../../Materials/material\";\r\nimport { Material } from \"../../Materials/material\";\r\nimport { MaterialPluginEvent } from \"../materialPluginEvent\";\r\nimport { MaterialDefines } from \"../../Materials/materialDefines\";\r\nimport { PushMaterial } from \"../../Materials/pushMaterial\";\r\n\r\nimport type { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport type { RenderTargetTexture } from \"../../Materials/Textures/renderTargetTexture\";\r\n\r\nimport { MaterialFlags } from \"../materialFlags\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport type { IAnimatable } from \"../../Animations/animatable.interface\";\r\n\r\nimport \"../../Materials/Textures/baseTexture.polynomial\";\r\n\r\nimport { EffectFallbacks } from \"../effectFallbacks\";\r\nimport { PBRClearCoatConfiguration } from \"./pbrClearCoatConfiguration\";\r\nimport { PBRIridescenceConfiguration } from \"./pbrIridescenceConfiguration\";\r\nimport { PBRAnisotropicConfiguration } from \"./pbrAnisotropicConfiguration\";\r\nimport { PBRSheenConfiguration } from \"./pbrSheenConfiguration\";\r\nimport { PBRSubSurfaceConfiguration } from \"./pbrSubSurfaceConfiguration\";\r\nimport { DetailMapConfiguration } from \"../material.detailMapConfiguration\";\r\nimport { AddClipPlaneUniforms, BindClipPlane } from \"../clipPlaneMaterialHelper\";\r\nimport {\r\n BindBonesParameters,\r\n BindFogParameters,\r\n BindLights,\r\n BindLogDepth,\r\n BindMorphTargetParameters,\r\n BindTextureMatrix,\r\n BindIBLParameters,\r\n BindIBLSamplers,\r\n HandleFallbacksForShadows,\r\n PrepareAttributesForBakedVertexAnimation,\r\n PrepareAttributesForBones,\r\n PrepareAttributesForInstances,\r\n PrepareAttributesForMorphTargets,\r\n PrepareDefinesForAttributes,\r\n PrepareDefinesForFrameBoundValues,\r\n PrepareDefinesForLights,\r\n PrepareDefinesForIBL,\r\n PrepareDefinesForMergedUV,\r\n PrepareDefinesForMisc,\r\n PrepareDefinesForMultiview,\r\n PrepareDefinesForOIT,\r\n PrepareDefinesForPrePass,\r\n PrepareUniformsAndSamplersList,\r\n PrepareUniformsAndSamplersForIBL,\r\n PrepareUniformLayoutForIBL,\r\n} from \"../materialHelper.functions\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { MaterialHelperGeometryRendering } from \"../materialHelper.geometryrendering\";\r\nimport { UVDefinesMixin } from \"../uv.defines\";\r\nimport { ImageProcessingMixin } from \"../imageProcessing\";\r\n\r\nconst onCreatedEffectParameters = { effect: null as unknown as Effect, subMesh: null as unknown as Nullable<SubMesh> };\r\n\r\nclass PBRMaterialDefinesBase extends UVDefinesMixin(MaterialDefines) {}\r\n\r\n/**\r\n * Manages the defines for the PBR Material.\r\n * @internal\r\n */\r\nexport class PBRMaterialDefines extends ImageProcessingDefinesMixin(PBRMaterialDefinesBase) {\r\n public PBR = true;\r\n\r\n public NUM_SAMPLES = \"0\";\r\n public REALTIME_FILTERING = false;\r\n public IBL_CDF_FILTERING = false;\r\n\r\n public ALBEDO = false;\r\n public GAMMAALBEDO = false;\r\n public ALBEDODIRECTUV = 0;\r\n public VERTEXCOLOR = false;\r\n\r\n public BASE_WEIGHT = false;\r\n public BASE_WEIGHTDIRECTUV = 0;\r\n public BASE_DIFFUSE_ROUGHNESS = false;\r\n public BASE_DIFFUSE_ROUGHNESSDIRECTUV = 0;\r\n\r\n public BAKED_VERTEX_ANIMATION_TEXTURE = false;\r\n\r\n public AMBIENT = false;\r\n public AMBIENTDIRECTUV = 0;\r\n public AMBIENTINGRAYSCALE = false;\r\n\r\n public OPACITY = false;\r\n public VERTEXALPHA = false;\r\n public OPACITYDIRECTUV = 0;\r\n public OPACITYRGB = false;\r\n public ALPHATEST = false;\r\n public DEPTHPREPASS = false;\r\n public ALPHABLEND = false;\r\n public ALPHAFROMALBEDO = false;\r\n public ALPHATESTVALUE = \"0.5\";\r\n public SPECULAROVERALPHA = false;\r\n public RADIANCEOVERALPHA = false;\r\n public ALPHAFRESNEL = false;\r\n public LINEARALPHAFRESNEL = false;\r\n public PREMULTIPLYALPHA = false;\r\n\r\n public EMISSIVE = false;\r\n public EMISSIVEDIRECTUV = 0;\r\n public GAMMAEMISSIVE = false;\r\n\r\n public REFLECTIVITY = false;\r\n public REFLECTIVITY_GAMMA = false;\r\n public REFLECTIVITYDIRECTUV = 0;\r\n public SPECULARTERM = false;\r\n\r\n public MICROSURFACEFROMREFLECTIVITYMAP = false;\r\n public MICROSURFACEAUTOMATIC = false;\r\n public LODBASEDMICROSFURACE = false;\r\n public MICROSURFACEMAP = false;\r\n public MICROSURFACEMAPDIRECTUV = 0;\r\n\r\n public METALLICWORKFLOW = false;\r\n public ROUGHNESSSTOREINMETALMAPALPHA = false;\r\n public ROUGHNESSSTOREINMETALMAPGREEN = false;\r\n public METALLNESSSTOREINMETALMAPBLUE = false;\r\n public AOSTOREINMETALMAPRED = false;\r\n public METALLIC_REFLECTANCE = false;\r\n public METALLIC_REFLECTANCE_GAMMA = false;\r\n public METALLIC_REFLECTANCEDIRECTUV = 0;\r\n public METALLIC_REFLECTANCE_USE_ALPHA_ONLY = false;\r\n public REFLECTANCE = false;\r\n public REFLECTANCE_GAMMA = false;\r\n public REFLECTANCEDIRECTUV = 0;\r\n\r\n public ENVIRONMENTBRDF = false;\r\n public ENVIRONMENTBRDF_RGBD = false;\r\n\r\n public NORMAL = false;\r\n public TANGENT = false;\r\n public BUMP = false;\r\n public BUMPDIRECTUV = 0;\r\n public OBJECTSPACE_NORMALMAP = false;\r\n public PARALLAX = false;\r\n public PARALLAX_RHS = false;\r\n public PARALLAXOCCLUSION = false;\r\n public NORMALXYSCALE = true;\r\n\r\n public LIGHTMAP = false;\r\n public LIGHTMAPDIRECTUV = 0;\r\n public USELIGHTMAPASSHADOWMAP = false;\r\n public GAMMALIGHTMAP = false;\r\n public RGBDLIGHTMAP = false;\r\n\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 public LINEARSPECULARREFLECTION = false;\r\n public RADIANCEOCCLUSION = false;\r\n public HORIZONOCCLUSION = false;\r\n\r\n public INSTANCES = false;\r\n public THIN_INSTANCES = false;\r\n public INSTANCESCOLOR = false;\r\n\r\n public PREPASS = false;\r\n public PREPASS_COLOR = false;\r\n public PREPASS_COLOR_INDEX = -1;\r\n public PREPASS_IRRADIANCE = false;\r\n public PREPASS_IRRADIANCE_INDEX = -1;\r\n public PREPASS_ALBEDO = false;\r\n public PREPASS_ALBEDO_INDEX = -1;\r\n public PREPASS_ALBEDO_SQRT = false;\r\n public PREPASS_ALBEDO_SQRT_INDEX = -1;\r\n public PREPASS_DEPTH = false;\r\n public PREPASS_DEPTH_INDEX = -1;\r\n public PREPASS_SCREENSPACE_DEPTH = false;\r\n public PREPASS_SCREENSPACE_DEPTH_INDEX = -1;\r\n public PREPASS_NORMALIZED_VIEW_DEPTH = false;\r\n public PREPASS_NORMALIZED_VIEW_DEPTH_INDEX = -1;\r\n public PREPASS_NORMAL = false;\r\n public PREPASS_NORMAL_INDEX = -1;\r\n public PREPASS_NORMAL_WORLDSPACE = false;\r\n public PREPASS_WORLD_NORMAL = false;\r\n public PREPASS_WORLD_NORMAL_INDEX = -1;\r\n public PREPASS_POSITION = false;\r\n public PREPASS_POSITION_INDEX = -1;\r\n public PREPASS_LOCAL_POSITION = false;\r\n public PREPASS_LOCAL_POSITION_INDEX = -1;\r\n public PREPASS_VELOCITY = false;\r\n public PREPASS_VELOCITY_INDEX = -1;\r\n public PREPASS_VELOCITY_LINEAR = false;\r\n public PREPASS_VELOCITY_LINEAR_INDEX = -1;\r\n public PREPASS_REFLECTIVITY = false;\r\n public PREPASS_REFLECTIVITY_INDEX = -1;\r\n public SCENE_MRT_COUNT = 0;\r\n\r\n public NUM_BONE_INFLUENCERS = 0;\r\n public BonesPerMesh = 0;\r\n public BONETEXTURE = false;\r\n public BONES_VELOCITY_ENABLED = false;\r\n\r\n public NONUNIFORMSCALING = false;\r\n\r\n public MORPHTARGETS = false;\r\n public MORPHTARGETS_POSITION = false;\r\n public MORPHTARGETS_NORMAL = false;\r\n public MORPHTARGETS_TANGENT = false;\r\n public MORPHTARGETS_UV = false;\r\n public MORPHTARGETS_UV2 = false;\r\n public MORPHTARGETS_COLOR = false;\r\n public MORPHTARGETTEXTURE_HASPOSITIONS = false;\r\n public MORPHTARGETTEXTURE_HASNORMALS = false;\r\n public MORPHTARGETTEXTURE_HASTANGENTS = false;\r\n public MORPHTARGETTEXTURE_HASUVS = false;\r\n public MORPHTARGETTEXTURE_HASUV2S = false;\r\n public MORPHTARGETTEXTURE_HASCOLORS = false;\r\n public NUM_MORPH_INFLUENCERS = 0;\r\n public MORPHTARGETS_TEXTURE = false;\r\n\r\n public MULTIVIEW = false;\r\n public ORDER_INDEPENDENT_TRANSPARENCY = false;\r\n public ORDER_INDEPENDENT_TRANSPARENCY_16BITS = false;\r\n\r\n public USEPHYSICALLIGHTFALLOFF = false;\r\n public USEGLTFLIGHTFALLOFF = false;\r\n public TWOSIDEDLIGHTING = false;\r\n public MIRRORED = false;\r\n public SHADOWFLOAT = false;\r\n public CLIPPLANE = false;\r\n public CLIPPLANE2 = false;\r\n public CLIPPLANE3 = false;\r\n public CLIPPLANE4 = false;\r\n public CLIPPLANE5 = false;\r\n public CLIPPLANE6 = false;\r\n public POINTSIZE = false;\r\n public FOG = false;\r\n public LOGARITHMICDEPTH = false;\r\n public CAMERA_ORTHOGRAPHIC = false;\r\n public CAMERA_PERSPECTIVE = false;\r\n public AREALIGHTSUPPORTED = true;\r\n\r\n public FORCENORMALFORWARD = false;\r\n\r\n public SPECULARAA = false;\r\n\r\n public UNLIT = false;\r\n\r\n public DECAL_AFTER_DETAIL = false;\r\n\r\n public DEBUGMODE = 0;\r\n public USE_VERTEX_PULLING = false;\r\n public RIGHT_HANDED = false;\r\n\r\n public CLUSTLIGHT_SLICES = 0;\r\n public CLUSTLIGHT_BATCH = 0;\r\n\r\n /**\r\n * Initializes the PBR Material defines.\r\n * @param externalProperties The external properties\r\n */\r\n constructor(externalProperties?: { [name: string]: { type: string; default: any } }) {\r\n super(externalProperties);\r\n this.rebuild();\r\n }\r\n\r\n /**\r\n * Resets the PBR Material defines.\r\n */\r\n public override reset(): void {\r\n super.reset();\r\n this.ALPHATESTVALUE = \"0.5\";\r\n this.PBR = true;\r\n this.NORMALXYSCALE = true;\r\n }\r\n}\r\n\r\nclass PBRBaseMaterialBase extends ImageProcessingMixin(PushMaterial) {}\r\n/**\r\n * The Physically based material base class of BJS.\r\n *\r\n * This offers the main features of a standard PBR material.\r\n * For more information, please refer to the documentation :\r\n * https://doc.babylonjs.com/features/featuresDeepDive/materials/using/introToPBR\r\n * @see [WebGL](https://playground.babylonjs.com/#CGHTSM#1)\r\n * @see [WebGPU](https://playground.babylonjs.com/#CGHTSM#2)\r\n */\r\nexport abstract class PBRBaseMaterial extends PBRBaseMaterialBase {\r\n /**\r\n * PBRMaterialTransparencyMode: No transparency mode, Alpha channel is not use.\r\n */\r\n public static readonly PBRMATERIAL_OPAQUE = Material.MATERIAL_OPAQUE;\r\n\r\n /**\r\n * PBRMaterialTransparencyMode: Alpha Test mode, pixel are discarded below a certain threshold defined by the alpha cutoff value.\r\n */\r\n public static readonly PBRMATERIAL_ALPHATEST = Material.MATERIAL_ALPHATEST;\r\n\r\n /**\r\n * PBRMaterialTransparencyMode: Pixels are blended (according to the alpha mode) with the already drawn pixels in the current frame buffer.\r\n */\r\n public static readonly PBRMATERIAL_ALPHABLEND = Material.MATERIAL_ALPHABLEND;\r\n\r\n /**\r\n * PBRMaterialTransparencyMode: Pixels are blended (according to the alpha mode) with the already drawn pixels in the current frame buffer.\r\n * They are also discarded below the alpha cutoff threshold to improve performances.\r\n */\r\n public static readonly PBRMATERIAL_ALPHATESTANDBLEND = Material.MATERIAL_ALPHATESTANDBLEND;\r\n\r\n /**\r\n * Defines the default value of how much AO map is occluding the analytical lights\r\n * (point spot...).\r\n */\r\n public static DEFAULT_AO_ON_ANALYTICAL_LIGHTS = 0;\r\n\r\n /**\r\n * PBRMaterialLightFalloff Physical: light is falling off following the inverse squared distance law.\r\n */\r\n public static override readonly LIGHTFALLOFF_PHYSICAL = 0;\r\n\r\n /**\r\n * PBRMaterialLightFalloff gltf: light is falling off as described in the gltf moving to PBR document\r\n * to enhance interoperability with other engines.\r\n */\r\n public static override readonly LIGHTFALLOFF_GLTF = 1;\r\n\r\n /**\r\n * PBRMaterialLightFalloff Standard: light is falling off like in the standard material\r\n * to enhance interoperability with other materials.\r\n */\r\n public static override readonly LIGHTFALLOFF_STANDARD = 2;\r\n\r\n /**\r\n * Force all the PBR materials to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n\r\n /**\r\n * Intensity of the direct lights e.g. the four lights available in your scene.\r\n * This impacts both the direct diffuse and specular highlights.\r\n * @internal\r\n */\r\n public _directIntensity: number = 1.0;\r\n\r\n /**\r\n * Intensity of the emissive part of the material.\r\n * This helps controlling the emissive effect without modifying the emissive color.\r\n * @internal\r\n */\r\n public _emissiveIntensity: number = 1.0;\r\n\r\n /**\r\n * Intensity of the environment e.g. how much the environment will light the object\r\n * either through harmonics for rough material or through the reflection for shiny ones.\r\n * @internal\r\n */\r\n public _environmentIntensity: number = 1.0;\r\n\r\n /**\r\n * This is a special control allowing the reduction of the specular highlights coming from the\r\n * four lights of the scene. Those highlights may not be needed in full environment lighting.\r\n * @internal\r\n */\r\n public _specularIntensity: number = 1.0;\r\n\r\n /**\r\n * This stores the direct, emissive, environment, and specular light intensities into a Vector4.\r\n */\r\n private _lightingInfos: Vector4 = new Vector4(this._directIntensity, this._emissiveIntensity, this._environmentIntensity, this._specularIntensity);\r\n\r\n /**\r\n * Debug Control allowing disabling the bump map on this material.\r\n * @internal\r\n */\r\n public _disableBumpMap: boolean = false;\r\n\r\n /**\r\n * AKA Diffuse Texture in standard nomenclature.\r\n * @internal\r\n */\r\n public _albedoTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Base Weight texture (multiplier to the diffuse and metal lobes).\r\n * @internal\r\n */\r\n public _baseWeightTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Base Diffuse Roughness texture (roughness of the diffuse lobe).\r\n * @internal\r\n */\r\n public _baseDiffuseRoughnessTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * AKA Occlusion Texture in other nomenclature.\r\n * @internal\r\n */\r\n public _ambientTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * AKA Occlusion Texture Intensity in other nomenclature.\r\n * @internal\r\n */\r\n public _ambientTextureStrength: number = 1.0;\r\n\r\n /**\r\n * Defines how much the AO map is occluding the analytical lights (point spot...).\r\n * 1 means it completely occludes it\r\n * 0 mean it has no impact\r\n * @internal\r\n */\r\n public _ambientTextureImpactOnAnalyticalLights: number = PBRBaseMaterial.DEFAULT_AO_ON_ANALYTICAL_LIGHTS;\r\n\r\n /**\r\n * Stores the alpha values in a texture.\r\n * @internal\r\n */\r\n public _opacityTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Stores the reflection values in a texture.\r\n * @internal\r\n */\r\n public _reflectionTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Stores the emissive values in a texture.\r\n * @internal\r\n */\r\n public _emissiveTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * AKA Specular texture in other nomenclature.\r\n * @internal\r\n */\r\n public _reflectivityTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Used to switch from specular/glossiness to metallic/roughness workflow.\r\n * @internal\r\n */\r\n public _metallicTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Specifies the metallic scalar of the metallic/roughness workflow.\r\n * Can also be used to scale the metalness values of the metallic texture.\r\n * @internal\r\n */\r\n public _metallic: Nullable<number> = null;\r\n\r\n /**\r\n * Specifies the roughness scalar of the metallic/roughness workflow.\r\n * Can also be used to scale the roughness values of the metallic texture.\r\n * @internal\r\n */\r\n public _roughness: Nullable<number> = null;\r\n\r\n /**\r\n * In metallic workflow, specifies an F0 factor to help configuring the material F0.\r\n * By default the indexOfrefraction is used to compute F0;\r\n *\r\n * This is used as a factor against the default reflectance at normal incidence to tweak it.\r\n *\r\n * F0 = defaultF0 * metallicF0Factor * metallicReflectanceColor;\r\n * F90 = metallicReflectanceColor;\r\n * @internal\r\n */\r\n public _metallicF0Factor = 1;\r\n\r\n /**\r\n * In metallic workflow, specifies an F0 color.\r\n * By default the F90 is always 1;\r\n *\r\n * Please note that this factor is also used as a factor against the default reflectance at normal incidence.\r\n *\r\n * F0 = defaultF0_from_IOR * metallicF0Factor * metallicReflectanceColor\r\n * F90 = metallicF0Factor;\r\n * @internal\r\n */\r\n public _metallicReflectanceColor = Color3.White();\r\n\r\n /**\r\n * Specifies that only the A channel from _metallicReflectanceTexture should be used.\r\n * If false, both RGB and A channels will be used\r\n * @internal\r\n */\r\n public _useOnlyMetallicFromMetallicReflectanceTexture = false;\r\n\r\n /**\r\n * Defines to store metallicReflectanceColor in RGB and metallicF0Factor in A\r\n * This is multiply against the scalar values defined in the material.\r\n * @internal\r\n */\r\n public _metallicReflectanceTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Defines to store reflectanceColor in RGB\r\n * This is multiplied against the scalar values defined in the material.\r\n * If both _reflectanceTexture and _metallicReflectanceTexture textures are provided and _useOnlyMetallicFromMetallicReflectanceTexture\r\n * is false, _metallicReflectanceTexture takes precedence and _reflectanceTexture is not used\r\n * @internal\r\n */\r\n public _reflectanceTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Used to enable roughness/glossiness fetch from a separate channel depending on the current mode.\r\n * Gray Scale represents roughness in metallic mode and glossiness in specular mode.\r\n * @internal\r\n */\r\n public _microSurfaceTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Stores surface normal data used to displace a mesh in a texture.\r\n * @internal\r\n */\r\n public _bumpTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Stores the pre-calculated light information of a mesh in a texture.\r\n * @internal\r\n */\r\n public _lightmapTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * The color of a material in ambient lighting.\r\n * @internal\r\n */\r\n public _ambientColor = new Color3(0, 0, 0);\r\n\r\n /**\r\n * AKA Diffuse Color in other nomenclature.\r\n * @internal\r\n */\r\n public _albedoColor = new Color3(1, 1, 1);\r\n\r\n /**\r\n * Base Weight (multiplier to the diffuse and metal lobes).\r\n * @internal\r\n */\r\n public _baseWeight = 1;\r\n\r\n /**\r\n * Base Diffuse Roughness (roughness of the diffuse lobe).\r\n * Can also be used to scale the corresponding texture.\r\n * @internal\r\n */\r\n public _baseDiffuseRoughness: Nullable<number> = null;\r\n\r\n /**\r\n * AKA Specular Color in other nomenclature.\r\n * @internal\r\n */\r\n public _reflectivityColor = new Color3(1, 1, 1);\r\n\r\n /**\r\n * The color applied when light is reflected from a material.\r\n * @internal\r\n */\r\n public _reflectionColor = new Color3(1, 1, 1);\r\n\r\n /**\r\n * The color applied when light is emitted from a material.\r\n * @internal\r\n */\r\n public _emissiveColor = new Color3(0, 0, 0);\r\n\r\n /**\r\n * AKA Glossiness in other nomenclature.\r\n * @internal\r\n */\r\n public _microSurface = 0.9;\r\n\r\n /**\r\n * Specifies that the material will use the light map as a show map.\r\n * @internal\r\n */\r\n public _useLightmapAsShadowmap = false;\r\n\r\n /**\r\n * This parameters will enable/disable Horizon occlusion to prevent normal maps to look shiny when the normal\r\n * makes the reflect vector face the model (under horizon).\r\n * @internal\r\n */\r\n public _useHorizonOcclusion = true;\r\n\r\n /**\r\n * This parameters will enable/disable radiance occlusion by preventing the radiance to lit\r\n * too much the area relying on ambient texture to define their ambient occlusion.\r\n * @internal\r\n */\r\n public _useRadianceOcclusion = true;\r\n\r\n /**\r\n * Specifies that the alpha is coming form the albedo channel alpha channel for alpha blending.\r\n * @internal\r\n */\r\n public _useAlphaFromAlbedoTexture = false;\r\n\r\n /**\r\n * Specifies that the material will keeps the specular highlights over a transparent surface (only the most luminous ones).\r\n * A car glass is a good example of that. When sun reflects on it you can not see what is behind.\r\n * @internal\r\n */\r\n public _useSpecularOverAlpha = true;\r\n\r\n /**\r\n * Specifies if the reflectivity texture contains the glossiness information in its alpha channel.\r\n * @internal\r\n */\r\n public _useMicroSurfaceFromReflectivityMapAlpha = false;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the roughness information in its alpha channel.\r\n * @internal\r\n */\r\n public _useRoughnessFromMetallicTextureAlpha = true;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the roughness information in its green channel.\r\n * @internal\r\n */\r\n public _useRoughnessFromMetallicTextureGreen = false;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the metallness information in its blue channel.\r\n * @internal\r\n */\r\n public _useMetallnessFromMetallicTextureBlue = false;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the ambient occlusion information in its red channel.\r\n * @internal\r\n */\r\n public _useAmbientOcclusionFromMetallicTextureRed = false;\r\n\r\n /**\r\n * Specifies if the ambient texture contains the ambient occlusion information in its red channel only.\r\n * @internal\r\n */\r\n public _useAmbientInGrayScale = false;\r\n\r\n /**\r\n * In case the reflectivity map does not contain the microsurface information in its alpha channel,\r\n * The material will try to infer what glossiness each pixel should be.\r\n * @internal\r\n */\r\n public _useAutoMicroSurfaceFromReflectivityMap = false;\r\n\r\n /**\r\n * Defines the falloff type used in this material.\r\n * It by default is Physical.\r\n * @internal\r\n */\r\n public _lightFalloff = PBRBaseMaterial.LIGHTFALLOFF_PHYSICAL;\r\n\r\n /**\r\n * Specifies that the material will keeps the reflection highlights over a transparent surface (only the most luminous ones).\r\n * A car glass is a good example of that. When the street lights reflects on it you can not see what is behind.\r\n * @internal\r\n */\r\n public _useRadianceOverAlpha = true;\r\n\r\n /**\r\n * Allows using an object space normal map (instead of tangent space).\r\n * @internal\r\n */\r\n public _useObjectSpaceNormalMap = false;\r\n\r\n /**\r\n * Allows using the bump map in parallax mode.\r\n * @internal\r\n */\r\n public _useParallax = false;\r\n\r\n /**\r\n * Allows using the bump map in parallax occlusion mode.\r\n * @internal\r\n */\r\n public _useParallaxOcclusion = false;\r\n\r\n /**\r\n * Controls the scale bias of the parallax mode.\r\n * @internal\r\n */\r\n public _parallaxScaleBias = 0.05;\r\n\r\n /**\r\n * If sets to true, disables all the lights affecting the material.\r\n * @internal\r\n */\r\n public _disableLighting = false;\r\n\r\n /**\r\n * Number of Simultaneous lights allowed on the material.\r\n * @internal\r\n */\r\n public _maxSimultaneousLights = 4;\r\n\r\n /**\r\n * If sets to true, x component of normal map value will be inverted (x = 1.0 - x).\r\n * @internal\r\n */\r\n public _invertNormalMapX = false;\r\n\r\n /**\r\n * If sets to true, y component of normal map value will be inverted (y = 1.0 - y).\r\n * @internal\r\n */\r\n public _invertNormalMapY = false;\r\n\r\n /**\r\n * If sets to true and backfaceCulling is false, normals will be flipped on the backside.\r\n * @internal\r\n */\r\n public _twoSidedLighting = false;\r\n\r\n /**\r\n * Defines the alpha limits in alpha test mode.\r\n * @internal\r\n */\r\n public _alphaCutOff = 0.4;\r\n\r\n /**\r\n * A fresnel is applied to the alpha of the model to ensure grazing angles edges are not alpha tested.\r\n * And/Or occlude the blended part. (alpha is converted to gamma to compute the fresnel)\r\n * @internal\r\n */\r\n public _useAlphaFresnel = false;\r\n\r\n /**\r\n * A fresnel is applied to the alpha of the model to ensure grazing angles edges are not alpha tested.\r\n * And/Or occlude the blended part. (alpha stays linear to compute the fresnel)\r\n * @internal\r\n */\r\n public _useLinearAlphaFresnel = false;\r\n\r\n /**\r\n * Specifies the environment BRDF texture used to compute the scale and offset roughness values\r\n * from cos theta and roughness:\r\n * http://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_notes_v2.pdf\r\n * @internal\r\n */\r\n public _environmentBRDFTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Force the shader to compute irradiance in the fragment shader in order to take bump in account.\r\n * @internal\r\n */\r\n public _forceIrradianceInFragment = false;\r\n\r\n private _systemRealTimeFiltering: boolean | undefined = undefined;\r\n /* Realtime filtering system control */\r\n public get systemRealTimeFiltering() {\r\n return this._systemRealTimeFiltering;\r\n }\r\n public set systemRealTimeFiltering(value: boolean | undefined) {\r\n this._systemRealTimeFiltering = value;\r\n this.markAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n\r\n private _realTimeFiltering: boolean | undefined = undefined;\r\n /**\r\n * Enables realtime filtering on the texture.\r\n */\r\n public get realTimeFiltering() {\r\n return (this._realTimeFiltering ?? false) || !!this.systemRealTimeFiltering;\r\n }\r\n public set realTimeFiltering(b: boolean) {\r\n this._realTimeFiltering = b;\r\n this.markAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Checks if the real-time filtering setting is explicitly set by the user.\r\n */\r\n public get isUserSetRealTimeFiltering() {\r\n return typeof this._realTimeFiltering === \"boolean\";\r\n }\r\n\r\n private _realTimeFilteringQuality: number | undefined = undefined;\r\n /**\r\n * Quality switch for realtime filtering\r\n */\r\n public get realTimeFilteringQuality(): number {\r\n return this._realTimeFilteringQuality ?? Constants.TEXTURE_FILTERING_QUALITY_MIN;\r\n }\r\n public set realTimeFilteringQuality(n: number) {\r\n this._realTimeFilteringQuality = n;\r\n this.markAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Checks if the real-time filtering quality has been set by the user.\r\n */\r\n public get isUserSetRealTimeFilteringQuality() {\r\n return typeof this._realTimeFilteringQuality === \"number\";\r\n }\r\n\r\n /**\r\n * Can this material render to several textures at once\r\n */\r\n public override get canRenderToMRT() {\r\n return true;\r\n }\r\n\r\n /**\r\n * Force normal to face away from face.\r\n * @internal\r\n */\r\n public _forceNormalForward = false;\r\n\r\n /**\r\n * Enables specular anti aliasing in the PBR shader.\r\n * It will both interacts on the Geometry for analytical and IBL lighting.\r\n * It also prefilter the roughness map based on the bump values.\r\n * @internal\r\n */\r\n public _enableSpecularAntiAliasing = false;\r\n\r\n /**\r\n * Stores the available render targets.\r\n */\r\n private _renderTargets = new SmartArray<RenderTargetTexture>(16);\r\n\r\n /**\r\n * Sets the global ambient color for the material used in lighting calculations.\r\n */\r\n private _globalAmbientColor = new Color3(0, 0, 0);\r\n\r\n /**\r\n * If set to true, no lighting calculations will be applied.\r\n */\r\n private _unlit = false;\r\n\r\n /**\r\n * If sets to true, the decal map will be applied after the detail map. Else, it is applied before (default: false)\r\n */\r\n private _applyDecalMapAfterDetailMap = false;\r\n\r\n private _debugMode = 0;\r\n\r\n private _shadersLoaded = false;\r\n private _breakShaderLoadedCheck = false;\r\n\r\n /**\r\n * @internal\r\n * This is reserved for the inspector.\r\n * Defines the material debug mode.\r\n * It helps seeing only some components of the material while troubleshooting.\r\n */\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public debugMode = 0;\r\n\r\n /**\r\n * @internal\r\n * This is reserved for the inspector.\r\n * Specify from where on screen the debug mode should start.\r\n * The value goes from -1 (full screen) to 1 (not visible)\r\n * It helps with side by side comparison against the final render\r\n * This defaults to -1\r\n */\r\n public debugLimit = -1;\r\n\r\n /**\r\n * @internal\r\n * This is reserved for the inspector.\r\n * As the default viewing range might not be enough (if the ambient is really small for instance)\r\n * You can use the factor to better multiply the final value.\r\n */\r\n public debugFactor = 1;\r\n\r\n /**\r\n * Defines the clear coat layer parameters for the material.\r\n */\r\n public readonly clearCoat: PBRClearCoatConfiguration;\r\n\r\n /**\r\n * Defines the iridescence layer parameters for the material.\r\n */\r\n public readonly iridescence: PBRIridescenceConfiguration;\r\n\r\n /**\r\n * Defines the anisotropic parameters for the material.\r\n */\r\n public readonly anisotropy: PBRAnisotropicConfiguration;\r\n\r\n /**\r\n * Defines the BRDF parameters for the material.\r\n */\r\n public readonly brdf: PBRBRDFConfiguration;\r\n\r\n /**\r\n * Defines the Sheen parameters for the material.\r\n */\r\n public readonly sheen: PBRSheenConfiguration;\r\n\r\n /**\r\n * Defines the SubSurface parameters for the material.\r\n */\r\n public readonly subSurface: PBRSubSurfaceConfiguration;\r\n\r\n /**\r\n * Defines additional PrePass parameters for the material.\r\n */\r\n public readonly prePassConfiguration: PrePassConfiguration;\r\n\r\n /**\r\n * Defines the detail map parameters for the material.\r\n */\r\n public readonly detailMap: DetailMapConfiguration;\r\n\r\n protected _cacheHasRenderTargetTextures = false;\r\n\r\n /**\r\n * Instantiates a new PBRMaterial instance.\r\n *\r\n * @param name The material name\r\n * @param scene The scene the material will be use in.\r\n * @param forceGLSL Use the GLSL code generation for the shader (even on WebGPU). Default is false\r\n */\r\n constructor(name: string, scene?: Scene, forceGLSL = false) {\r\n super(name, scene, undefined, forceGLSL || PBRBaseMaterial.ForceGLSL);\r\n\r\n this.brdf = new PBRBRDFConfiguration(this);\r\n this.clearCoat = new PBRClearCoatConfiguration(this);\r\n this.iridescence = new PBRIridescenceConfiguration(this);\r\n this.anisotropy = new PBRAnisotropicConfiguration(this);\r\n this.sheen = new PBRSheenConfiguration(this);\r\n this.subSurface = new PBRSubSurfaceConfiguration(this);\r\n this.detailMap = new DetailMapConfiguration(this);\r\n\r\n // Setup the default processing configuration to the scene.\r\n this._attachImageProcessingConfiguration(null);\r\n\r\n this.getRenderTargetTextures = (): SmartArray<RenderTargetTexture> => {\r\n this._renderTargets.reset();\r\n\r\n if (MaterialFlags.ReflectionTextureEnabled && this._reflectionTexture && this._reflectionTexture.isRenderTarget) {\r\n this._renderTargets.push(<RenderTargetTexture>this._reflectionTexture);\r\n }\r\n\r\n this._eventInfo.renderTargets = this._renderTargets;\r\n this._callbackPluginEventFillRenderTargetTextures(this._eventInfo);\r\n\r\n return this._renderTargets;\r\n };\r\n\r\n this._environmentBRDFTexture = GetEnvironmentBRDFTexture(this.getScene());\r\n this.prePassConfiguration = new PrePassConfiguration();\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that current material needs to register RTT\r\n */\r\n public override get hasRenderTargetTextures(): boolean {\r\n if (MaterialFlags.ReflectionTextureEnabled && this._reflectionTexture && this._reflectionTexture.isRenderTarget) {\r\n return true;\r\n }\r\n\r\n return this._cacheHasRenderTargetTextures;\r\n }\r\n\r\n /**\r\n * Can this material render to prepass\r\n */\r\n public override get isPrePassCapable(): boolean {\r\n return !this.disableDepthWrite;\r\n }\r\n\r\n /**\r\n * @returns the name of the material class.\r\n */\r\n public override getClassName(): string {\r\n return \"PBRBaseMaterial\";\r\n }\r\n\r\n /**\r\n * Returns true if alpha blending should be disabled.\r\n */\r\n protected override get _disableAlphaBlending(): boolean {\r\n return (\r\n this._transparencyMode === PBRBaseMaterial.PBRMATERIAL_OPAQUE ||\r\n this._transparencyMode === PBRBaseMaterial.PBRMATERIAL_ALPHATEST ||\r\n this.subSurface?.disableAlphaBlending\r\n );\r\n }\r\n\r\n /**\r\n * @returns whether or not this material should be rendered in alpha blend mode.\r\n */\r\n public override needAlphaBlending(): boolean {\r\n if (this._hasTransparencyMode) {\r\n return this._transparencyModeIsBlend;\r\n }\r\n\r\n if (this._disableAlphaBlending) {\r\n return false;\r\n }\r\n\r\n return this.alpha < 1.0 || this._opacityTexture != null || this._shouldUseAlphaFromAlbedoTexture();\r\n }\r\n\r\n /**\r\n * @returns whether or not this material should be rendered in alpha test mode.\r\n */\r\n public override needAlphaTesting(): boolean {\r\n if (this._hasTransparencyMode) {\r\n return this._transparencyModeIsTest;\r\n }\r\n\r\n if (this.subSurface?.disableAlphaBlending) {\r\n return false;\r\n }\r\n\r\n return this._hasAlphaChannel() && (this._transparencyMode == null || this._transparencyMode === PBRBaseMaterial.PBRMATERIAL_ALPHATEST);\r\n }\r\n\r\n /**\r\n * @returns whether or not the alpha value of the albedo texture should be used for alpha blending.\r\n */\r\n protected _shouldUseAlphaFromAlbedoTexture(): boolean {\r\n return this._albedoTexture != null && this._albedoTexture.hasAlpha && this._useAlphaFromAlbedoTexture && this._transparencyMode !== PBRBaseMaterial.PBRMATERIAL_OPAQUE;\r\n }\r\n\r\n /**\r\n * @returns whether or not there is a usable alpha channel for transparency.\r\n */\r\n protected _hasAlphaChannel(): boolean {\r\n return (this._albedoTexture != null && this._albedoTexture.hasAlpha) || this._opacityTexture != null;\r\n }\r\n\r\n /**\r\n * @returns the texture used for the alpha test.\r\n */\r\n public override getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return this._albedoTexture;\r\n }\r\n\r\n /**\r\n * Specifies that the submesh is ready to be used.\r\n * @param mesh - BJS mesh.\r\n * @param subMesh - A submesh of the BJS mesh. Used to check if it is ready.\r\n * @param useInstances - Specifies that instances should be used.\r\n * @returns - boolean indicating that the submesh is ready or not.\r\n */\r\n public override isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\r\n if (!this._uniformBufferLayoutBuilt) {\r\n this.buildUniformLayout();\r\n }\r\n\r\n const drawWrapper = subMesh._drawWrapper;\r\n\r\n if (drawWrapper.effect && this.isFrozen) {\r\n if (drawWrapper._wasPreviouslyReady && drawWrapper._wasPreviouslyUsingInstances === useInstances) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.GetDefineNames, this._eventInfo);\r\n subMesh.materialDefines = new PBRMaterialDefines(this._eventInfo.defineNames);\r\n }\r\n\r\n const defines = <PBRMaterialDefines>subMesh.materialDefines;\r\n if (this._isReadyForSubMesh(subMesh)) {\r\n return true;\r\n }\r\n\r\n const scene = this.getScene();\r\n const engine = scene.getEngine();\r\n\r\n if (defines._areTexturesDirty) {\r\n this._eventInfo.hasRenderTargetTextures = false;\r\n this._callbackPluginEventHasRenderTargetTextures(this._eventInfo);\r\n this._cacheHasRenderTargetTextures = this._eventInfo.hasRenderTargetTextures;\r\n if (scene.texturesEnabled) {\r\n if (this._albedoTexture && MaterialFlags.DiffuseTextureEnabled) {\r\n if (!this._albedoTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._baseWeightTexture && MaterialFlags.BaseWeightTextureEnabled) {\r\n if (!this._baseWeightTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._baseDiffuseRoughnessTexture && MaterialFlags.BaseDiffuseRoughnessTextureEnabled) {\r\n if (!this._baseDiffuseRoughnessTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._ambientTexture && MaterialFlags.AmbientTextureEnabled) {\r\n if (!this._ambientTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._opacityTexture && MaterialFlags.OpacityTextureEnabled) {\r\n if (!this._opacityTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n const reflectionTexture = this._getReflectionTexture();\r\n if (reflectionTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n if (!reflectionTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n if (reflectionTexture.irradianceTexture) {\r\n if (!reflectionTexture.irradianceTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n } else {\r\n // Not ready until spherical are ready too.\r\n if (!reflectionTexture.sphericalPolynomial && reflectionTexture.getInternalTexture()?._sphericalPolynomialPromise) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n if (this._lightmapTexture && MaterialFlags.LightmapTextureEnabled) {\r\n if (!this._lightmapTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._emissiveTexture && MaterialFlags.EmissiveTextureEnabled) {\r\n if (!this._emissiveTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (MaterialFlags.SpecularTextureEnabled) {\r\n if (this._metallicTexture) {\r\n if (!this._metallicTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n } else if (this._reflectivityTexture) {\r\n if (!this._reflectivityTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._metallicReflectanceTexture) {\r\n if (!this._metallicReflectanceTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._reflectanceTexture) {\r\n if (!this._reflectanceTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._microSurfaceTexture) {\r\n if (!this._microSurfaceTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n if (engine.getCaps().standardDerivatives && this._bumpTexture && MaterialFlags.BumpTextureEnabled && !this._disableBumpMap) {\r\n // Bump texture cannot be not blocking.\r\n if (!this._bumpTexture.isReady()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this._environmentBRDFTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n // This is blocking.\r\n if (!this._environmentBRDFTexture.isReady()) {\r\n return false;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._eventInfo.isReadyForSubMesh = true;\r\n this._eventInfo.defines = defines;\r\n this._eventInfo.subMesh = subMesh;\r\n this._callbackPluginEventIsReadyForSubMesh(this._eventInfo);\r\n\r\n if (!this._eventInfo.isReadyForSubMesh) {\r\n return false;\r\n }\r\n\r\n if (defines._areImageProcessingDirty && this._imageProcessingConfiguration) {\r\n if (!this._imageProcessingConfiguration.isReady()) {\r\n return false;\r\n }\r\n }\r\n\r\n // Check if Area Lights have LTC texture.\r\n if (defines[\"AREALIGHTUSED\"] || defines[\"CLUSTLIGHT_BATCH\"]) {\r\n for (let index = 0; index < mesh.lightSources.length; index++) {\r\n if (!mesh.lightSources[index]._isReady()) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n if (!engine.getCaps().standardDerivatives && !mesh.isVerticesDataPresent(VertexBuffer.NormalKind)) {\r\n mesh.createNormals(true);\r\n Logger.Warn(\"PBRMaterial: Normals have been created for the mesh: \" + mesh.name);\r\n }\r\n\r\n const previousEffect = subMesh.effect;\r\n const lightDisposed = defines._areLightsDisposed;\r\n let effect = this._prepareEffect(mesh, subMesh.getRenderingMesh(), defines, this.onCompiled, this.onError, useInstances, null);\r\n\r\n let forceWasNotReadyPreviously = false;\r\n\r\n if (effect) {\r\n if (this._onEffectCreatedObservable) {\r\n onCreatedEffectParameters.effect = effect;\r\n onCreatedEffectParameters.subMesh = subMesh;\r\n this._onEffectCreatedObservable.notifyObservers(onCreatedEffectParameters);\r\n }\r\n\r\n // Use previous effect while new one is compiling\r\n if (this.allowShaderHotSwapping && previousEffect && !effect.isReady()) {\r\n effect = previousEffect;\r\n defines.markAsUnprocessed();\r\n\r\n forceWasNotReadyPreviously = this.isFrozen;\r\n\r\n if (lightDisposed) {\r\n // re register in case it takes more than one frame.\r\n defines._areLightsDisposed = true;\r\n return false;\r\n }\r\n } else {\r\n scene.resetCachedMaterial();\r\n subMesh.setEffect(effect, defines, this._materialContext);\r\n }\r\n }\r\n\r\n if (!subMesh.effect || !subMesh.effect.isReady()) {\r\n return false;\r\n }\r\n\r\n defines._renderId = scene.getRenderId();\r\n drawWrapper._wasPreviouslyReady = forceWasNotReadyPreviously ? false : true;\r\n drawWrapper._wasPreviouslyUsingInstances = !!useInstances;\r\n\r\n this._checkScenePerformancePriority();\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Specifies if the material uses metallic roughness workflow.\r\n * @returns boolean specifying if the material uses metallic roughness workflow.\r\n */\r\n public isMetallicWorkflow(): boolean {\r\n if (this._metallic != null || this._roughness != null || this._metallicTexture) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private _prepareEffect(\r\n mesh: AbstractMesh,\r\n renderingMesh: AbstractMesh,\r\n defines: PBRMaterialDefines,\r\n onCompiled: Nullable<(effect: Effect) => void> = null,\r\n onError: Nullable<(effect: Effect, errors: string) => void> = null,\r\n useInstances: Nullable<boolean> = null,\r\n useClipPlane: Nullable<boolean> = null\r\n ): Nullable<Effect> {\r\n this._prepareDefines(mesh, renderingMesh, defines, useInstances, useClipPlane);\r\n\r\n if (!defines.isDirty) {\r\n return null;\r\n }\r\n\r\n defines.markAsProcessed();\r\n\r\n const scene = this.getScene();\r\n const engine = scene.getEngine();\r\n\r\n // Fallbacks\r\n const fallbacks = new EffectFallbacks();\r\n let fallbackRank = 0;\r\n if (defines.USESPHERICALINVERTEX) {\r\n fallbacks.addFallback(fallbackRank++, \"USESPHERICALINVERTEX\");\r\n }\r\n\r\n if (defines.FOG) {\r\n fallbacks.addFallback(fallbackRank, \"FOG\");\r\n }\r\n if (defines.SPECULARAA) {\r\n fallbacks.addFallback(fallbackRank, \"SPECULARAA\");\r\n }\r\n if (defines.POINTSIZE) {\r\n fallbacks.addFallback(fallbackRank, \"POINTSIZE\");\r\n }\r\n if (defines.LOGARITHMICDEPTH) {\r\n fallbacks.addFallback(fallbackRank, \"LOGARITHMICDEPTH\");\r\n }\r\n if (defines.PARALLAX) {\r\n fallbacks.addFallback(fallbackRank, \"PARALLAX\");\r\n }\r\n if (defines.PARALLAX_RHS) {\r\n fallbacks.addFallback(fallbackRank, \"PARALLAX_RHS\");\r\n }\r\n if (defines.PARALLAXOCCLUSION) {\r\n fallbacks.addFallback(fallbackRank++, \"PARALLAXOCCLUSION\");\r\n }\r\n\r\n if (defines.ENVIRONMENTBRDF) {\r\n fallbacks.addFallback(fallbackRank++, \"ENVIRONMENTBRDF\");\r\n }\r\n\r\n if (defines.TANGENT) {\r\n fallbacks.addFallback(fallbackRank++, \"TANGENT\");\r\n }\r\n\r\n if (defines.BUMP) {\r\n fallbacks.addFallback(fallbackRank++, \"BUMP\");\r\n }\r\n\r\n fallbackRank = HandleFallbacksForShadows(defines, fallbacks, this._maxSimultaneousLights, fallbackRank++);\r\n\r\n if (defines.SPECULARTERM) {\r\n fallbacks.addFallback(fallbackRank++, \"SPECULARTERM\");\r\n }\r\n\r\n if (defines.USESPHERICALFROMREFLECTIONMAP) {\r\n fallbacks.addFallback(fallbackRank++, \"USESPHERICALFROMREFLECTIONMAP\");\r\n }\r\n\r\n if (defines.USEIRRADIANCEMAP) {\r\n fallbacks.addFallback(fallbackRank++, \"USEIRRADIANCEMAP\");\r\n }\r\n\r\n if (defines.LIGHTMAP) {\r\n fallbacks.addFallback(fallbackRank++, \"LIGHTMAP\");\r\n }\r\n\r\n if (defines.NORMAL) {\r\n fallbacks.addFallback(fallbackRank++, \"NORMAL\");\r\n }\r\n\r\n if (defines.AMBIENT) {\r\n fallbacks.addFallback(fallbackRank++, \"AMBIENT\");\r\n }\r\n\r\n if (defines.EMISSIVE) {\r\n fallbacks.addFallback(fallbackRank++, \"EMISSIVE\");\r\n }\r\n\r\n if (defines.VERTEXCOLOR) {\r\n fallbacks.addFallback(fallbackRank++, \"VERTEXCOLOR\");\r\n }\r\n\r\n if (defines.MORPHTARGETS) {\r\n fallbacks.addFallback(fallbackRank++, \"MORPHTARGETS\");\r\n }\r\n\r\n if (defines.MULTIVIEW) {\r\n fallbacks.addFallback(0, \"MULTIVIEW\");\r\n }\r\n\r\n //Attributes\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n if (defines.NORMAL) {\r\n attribs.push(VertexBuffer.NormalKind);\r\n }\r\n\r\n if (defines.TANGENT) {\r\n attribs.push(VertexBuffer.TangentKind);\r\n }\r\n\r\n for (let i = 1; i <= Constants.MAX_SUPPORTED_UV_SETS; ++i) {\r\n if (defines[\"UV\" + i]) {\r\n attribs.push(`uv${i === 1 ? \"\" : i}`);\r\n }\r\n }\r\n\r\n if (defines.VERTEXCOLOR) {\r\n attribs.push(VertexBuffer.ColorKind);\r\n }\r\n\r\n PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\r\n PrepareAttributesForInstances(attribs, defines);\r\n PrepareAttributesForMorphTargets(attribs, mesh, defines);\r\n PrepareAttributesForBakedVertexAnimation(attribs, mesh, defines);\r\n\r\n let shaderName = \"pbr\";\r\n\r\n const uniforms = [\r\n \"world\",\r\n \"view\",\r\n \"viewProjection\",\r\n \"vEyePosition\",\r\n \"vLightsType\",\r\n \"vAmbientColor\",\r\n \"vAlbedoColor\",\r\n \"baseWeight\",\r\n \"baseDiffuseRoughness\",\r\n \"vReflectivityColor\",\r\n \"vMetallicReflectanceFactors\",\r\n \"vEmissiveColor\",\r\n \"visibility\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"pointSize\",\r\n \"vAlbedoInfos\",\r\n \"vBaseWeightInfos\",\r\n \"vBaseDiffuseRoughnessInfos\",\r\n \"vAmbientInfos\",\r\n \"vOpacityInfos\",\r\n \"vEmissiveInfos\",\r\n \"vReflectivityInfos\",\r\n \"vMetallicReflectanceInfos\",\r\n \"vReflectanceInfos\",\r\n \"vMicroSurfaceSamplerInfos\",\r\n \"vBumpInfos\",\r\n \"vLightmapInfos\",\r\n \"mBones\",\r\n \"albedoMatrix\",\r\n \"baseWeightMatrix\",\r\n \"baseDiffuseRoughnessMatrix\",\r\n \"ambientMatrix\",\r\n \"opacityMatrix\",\r\n \"emissiveMatrix\",\r\n \"reflectivityMatrix\",\r\n \"normalMatrix\",\r\n \"microSurfaceSamplerMatrix\",\r\n \"bumpMatrix\",\r\n \"lightmapMatrix\",\r\n \"metallicReflectanceMatrix\",\r\n \"reflectanceMatrix\",\r\n \"vLightingIntensity\",\r\n \"logarithmicDepthConstant\",\r\n \"vTangentSpaceParams\",\r\n \"boneTextureWidth\",\r\n \"vDebugMode\",\r\n \"morphTargetTextureInfo\",\r\n \"morphTargetTextureIndices\",\r\n \"cameraInfo\",\r\n ];\r\n\r\n const samplers = [\r\n \"albedoSampler\",\r\n \"baseWeightSampler\",\r\n \"baseDiffuseRoughnessSampler\",\r\n \"reflectivitySampler\",\r\n \"ambientSampler\",\r\n \"emissiveSampler\",\r\n \"bumpSampler\",\r\n \"lightmapSampler\",\r\n \"opacitySampler\",\r\n \"microSurfaceSampler\",\r\n \"environmentBrdfSampler\",\r\n \"boneSampler\",\r\n \"metallicReflectanceSampler\",\r\n \"reflectanceSampler\",\r\n \"morphTargets\",\r\n \"oitDepthSampler\",\r\n \"oitFrontColorSampler\",\r\n \"areaLightsLTC1Sampler\",\r\n \"areaLightsLTC2Sampler\",\r\n ];\r\n\r\n PrepareUniformsAndSamplersForIBL(uniforms, samplers, true);\r\n\r\n const uniformBuffers = [\"Material\", \"Scene\", \"Mesh\"];\r\n\r\n const indexParameters = { maxSimultaneousLights: this._maxSimultaneousLights, maxSimultaneousMorphTargets: defines.NUM_MORPH_INFLUENCERS };\r\n\r\n this._eventInfo.fallbacks = fallbacks;\r\n this._eventInfo.fallbackRank = fallbackRank;\r\n this._eventInfo.defines = defines;\r\n this._eventInfo.uniforms = uniforms;\r\n this._eventInfo.attributes = attribs;\r\n this._eventInfo.samplers = samplers;\r\n this._eventInfo.uniformBuffersNames = uniformBuffers;\r\n this._eventInfo.customCode = undefined;\r\n this._eventInfo.mesh = mesh;\r\n this._eventInfo.indexParameters = indexParameters;\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.PrepareEffect, this._eventInfo);\r\n\r\n MaterialHelperGeometryRendering.AddUniformsAndSamplers(uniforms, samplers);\r\n\r\n PrePassConfiguration.AddUniforms(uniforms);\r\n PrePassConfiguration.AddSamplers(samplers);\r\n AddClipPlaneUniforms(uniforms);\r\n\r\n if (ImageProcessingConfiguration) {\r\n ImageProcessingConfiguration.PrepareUniforms(uniforms, defines);\r\n ImageProcessingConfiguration.PrepareSamplers(samplers, defines);\r\n }\r\n\r\n PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: defines,\r\n maxSimultaneousLights: this._maxSimultaneousLights,\r\n });\r\n\r\n const csnrOptions: ICustomShaderNameResolveOptions = {};\r\n\r\n if (this.customShaderNameResolve) {\r\n shaderName = this.customShaderNameResolve(shaderName, uniforms, uniformBuffers, samplers, defines, attribs, csnrOptions);\r\n }\r\n\r\n const join = defines.toString();\r\n const effect = engine.createEffect(\r\n shaderName,\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: onCompiled,\r\n onError: onError,\r\n indexParameters,\r\n processFinalCode: csnrOptions.processFinalCode,\r\n processCodeAfterIncludes: this._eventInfo.customCode,\r\n multiTarget: defines.PREPASS,\r\n shaderLanguage: this._shaderLanguage,\r\n extraInitializationsAsync: this._shadersLoaded\r\n ? undefined\r\n : async () => {\r\n if (this.shaderLanguage === ShaderLanguage.WGSL) {\r\n await Promise.all([import(\"../../ShadersWGSL/pbr.vertex\"), import(\"../../ShadersWGSL/pbr.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../../Shaders/pbr.vertex\"), import(\"../../Shaders/pbr.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n },\r\n },\r\n engine\r\n );\r\n\r\n this._eventInfo.customCode = undefined;\r\n\r\n return effect;\r\n }\r\n\r\n private _prepareDefines(\r\n mesh: AbstractMesh,\r\n renderingMesh: AbstractMesh,\r\n defines: PBRMaterialDefines,\r\n useInstances: Nullable<boolean> = null,\r\n useClipPlane: Nullable<boolean> = null\r\n ): void {\r\n const useThinInstances = renderingMesh.hasThinInstances;\r\n\r\n const scene = this.getScene();\r\n const engine = scene.getEngine();\r\n\r\n // Lights\r\n PrepareDefinesForLights(scene, mesh, defines, true, this._maxSimultaneousLights, this._disableLighting);\r\n defines._needNormals = true;\r\n\r\n // Multiview\r\n PrepareDefinesForMultiview(scene, defines);\r\n\r\n // PrePass\r\n const oit = this.needAlphaBlendingForMesh(mesh) && this.getScene().useOrderIndependentTransparency;\r\n PrepareDefinesForPrePass(scene, defines, this.canRenderToMRT && !oit);\r\n\r\n // Order independant transparency\r\n PrepareDefinesForOIT(scene, defines, oit);\r\n\r\n MaterialHelperGeometryRendering.PrepareDefines(engine.currentRenderPassId, mesh, defines);\r\n\r\n // Textures\r\n defines.METALLICWORKFLOW = this.isMetallicWorkflow();\r\n if (defines._areTexturesDirty) {\r\n defines._needUVs = false;\r\n for (let i = 1; i <= Constants.MAX_SUPPORTED_UV_SETS; ++i) {\r\n defines[\"MAINUV\" + i] = false;\r\n }\r\n if (scene.texturesEnabled) {\r\n defines.ALBEDODIRECTUV = 0;\r\n defines.BASE_WEIGHTDIRECTUV = 0;\r\n defines.BASE_DIFFUSE_ROUGHNESSDIRECTUV = 0;\r\n defines.AMBIENTDIRECTUV = 0;\r\n defines.OPACITYDIRECTUV = 0;\r\n defines.EMISSIVEDIRECTUV = 0;\r\n defines.REFLECTIVITYDIRECTUV = 0;\r\n defines.MICROSURFACEMAPDIRECTUV = 0;\r\n defines.METALLIC_REFLECTANCEDIRECTUV = 0;\r\n defines.REFLECTANCEDIRECTUV = 0;\r\n defines.BUMPDIRECTUV = 0;\r\n defines.LIGHTMAPDIRECTUV = 0;\r\n\r\n if (engine.getCaps().textureLOD) {\r\n defines.LODBASEDMICROSFURACE = true;\r\n }\r\n\r\n if (this._albedoTexture && MaterialFlags.DiffuseTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._albedoTexture, defines, \"ALBEDO\");\r\n defines.GAMMAALBEDO = this._albedoTexture.gammaSpace;\r\n } else {\r\n defines.ALBEDO = false;\r\n }\r\n\r\n if (this._baseWeightTexture && MaterialFlags.BaseWeightTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._baseWeightTexture, defines, \"BASE_WEIGHT\");\r\n } else {\r\n defines.BASE_WEIGHT = false;\r\n }\r\n\r\n if (this._baseDiffuseRoughnessTexture && MaterialFlags.BaseDiffuseRoughnessTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._baseDiffuseRoughnessTexture, defines, \"BASE_DIFFUSE_ROUGHNESS\");\r\n } else {\r\n defines.BASE_DIFFUSE_ROUGHNESS = false;\r\n }\r\n\r\n if (this._ambientTexture && MaterialFlags.AmbientTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._ambientTexture, defines, \"AMBIENT\");\r\n defines.AMBIENTINGRAYSCALE = this._useAmbientInGrayScale;\r\n } else {\r\n defines.AMBIENT = false;\r\n }\r\n\r\n if (this._opacityTexture && MaterialFlags.OpacityTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._opacityTexture, defines, \"OPACITY\");\r\n defines.OPACITYRGB = this._opacityTexture.getAlphaFromRGB;\r\n } else {\r\n defines.OPACITY = false;\r\n }\r\n\r\n const reflectionTexture = this._getReflectionTexture();\r\n const useSHInFragment: boolean =\r\n this._forceIrradianceInFragment ||\r\n this.realTimeFiltering ||\r\n this._twoSidedLighting ||\r\n engine.getCaps().maxVaryingVectors <= 8 ||\r\n this._baseDiffuseRoughnessTexture != null;\r\n PrepareDefinesForIBL(scene, reflectionTexture, defines, this.realTimeFiltering, this.realTimeFilteringQuality, !useSHInFragment);\r\n\r\n if (this._lightmapTexture && MaterialFlags.LightmapTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._lightmapTexture, defines, \"LIGHTMAP\");\r\n defines.USELIGHTMAPASSHADOWMAP = this._useLightmapAsShadowmap;\r\n defines.GAMMALIGHTMAP = this._lightmapTexture.gammaSpace;\r\n defines.RGBDLIGHTMAP = this._lightmapTexture.isRGBD;\r\n } else {\r\n defines.LIGHTMAP = false;\r\n }\r\n\r\n if (this._emissiveTexture && MaterialFlags.EmissiveTextureEnabled) {\r\n PrepareDefinesForMergedUV(this._emissiveTexture, defines, \"EMISSIVE\");\r\n defines.GAMMAEMISSIVE = this._emissiveTexture.gammaSpace;\r\n } else {\r\n defines.EMISSIVE = false;\r\n }\r\n\r\n if (MaterialFlags.SpecularTextureEnabled) {\r\n if (this._metallicTexture) {\r\n PrepareDefinesForMergedUV(this._metallicTexture, defines, \"REFLECTIVITY\");\r\n defines.ROUGHNESSSTOREINMETALMAPALPHA = this._useRoughnessFromMetallicTextureAlpha;\r\n defines.ROUGHNESSSTOREINMETALMAPGREEN = !this._useRoughnessFromMetallicTextureAlpha && this._useRoughnessFromMetallicTextureGreen;\r\n defines.METALLNESSSTOREINMETALMAPBLUE = this._useMetallnessFromMetallicTextureBlue;\r\n defines.AOSTOREINMETALMAPRED = this._useAmbientOcclusionFromMetallicTextureRed;\r\n defines.REFLECTIVITY_GAMMA = false;\r\n } else if (this._reflectivityTexture) {\r\n PrepareDefinesForMergedUV(this._reflectivityTexture, defines, \"REFLECTIVITY\");\r\n defines.MICROSURFACEFROMREFLECTIVITYMAP = this._useMicroSurfaceFromReflectivityMapAlpha;\r\n defines.MICROSURFACEAUTOMATIC = this._useAutoMicroSurfaceFromReflectivityMap;\r\n defines.REFLECTIVITY_GAMMA = this._reflectivityTexture.gammaSpace;\r\n } else {\r\n defines.REFLECTIVITY = false;\r\n }\r\n\r\n if (this._metallicReflectanceTexture || this._reflectanceTexture) {\r\n defines.METALLIC_REFLECTANCE_USE_ALPHA_ONLY = this._useOnlyMetallicFromMetallicReflectanceTexture;\r\n if (this._metallicReflectanceTexture) {\r\n PrepareDefinesForMergedUV(this._metallicReflectanceTexture, defines, \"METALLIC_REFLECTANCE\");\r\n defines.METALLIC_REFLECTANCE_GAMMA = this._metallicReflectanceTexture.gammaSpace;\r\n } else {\r\n defines.METALLIC_REFLECTANCE = false;\r\n }\r\n if (\r\n this._reflectanceTexture &&\r\n (!this._metallicReflectanceTexture || (this._metallicReflectanceTexture && this._useOnlyMetallicFromMetallicReflectanceTexture))\r\n ) {\r\n PrepareDefinesForMergedUV(this._reflectanceTexture, defines, \"REFLECTANCE\");\r\n defines.REFLECTANCE_GAMMA = this._reflectanceTexture.gammaSpace;\r\n } else {\r\n defines.REFLECTANCE = false;\r\n }\r\n } else {\r\n defines.METALLIC_REFLECTANCE = false;\r\n defines.REFLECTANCE = false;\r\n }\r\n\r\n if (this._microSurfaceTexture) {\r\n PrepareDefinesForMergedUV(this._microSurfaceTexture, defines, \"MICROSURFACEMAP\");\r\n } else {\r\n defines.MICROSURFACEMAP = false;\r\n }\r\n } else {\r\n defines.REFLECTIVITY = false;\r\n defines.MICROSURFACEMAP = false;\r\n }\r\n\r\n if (engine.getCaps().standardDerivatives && this._bumpTexture && MaterialFlags.BumpTextureEnabled && !this._disableBumpMap) {\r\n PrepareDefinesForMergedUV(this._bumpTexture, defines, \"BUMP\");\r\n\r\n if (this._useParallax && this._albedoTexture && MaterialFlags.DiffuseTextureEnabled) {\r\n defines.PARALLAX = true;\r\n defines.PARALLAX_RHS = scene.useRightHandedSystem;\r\n defines.PARALLAXOCCLUSION = !!this._useParallaxOcclusion;\r\n } else {\r\n defines.PARALLAX = false;\r\n }\r\n\r\n defines.OBJECTSPACE_NORMALMAP = this._useObjectSpaceNormalMap;\r\n } else {\r\n defines.BUMP = false;\r\n defines.PARALLAX = false;\r\n defines.PARALLAX_RHS = false;\r\n defines.PARALLAXOCCLUSION = false;\r\n defines.OBJECTSPACE_NORMALMAP = false;\r\n }\r\n\r\n if (this._environmentBRDFTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n defines.ENVIRONMENTBRDF = true;\r\n defines.ENVIRONMENTBRDF_RGBD = this._environmentBRDFTexture.isRGBD;\r\n } else {\r\n defines.ENVIRONMENTBRDF = false;\r\n defines.ENVIRONMENTBRDF_RGBD = false;\r\n }\r\n\r\n if (this._shouldUseAlphaFromAlbedoTexture()) {\r\n defines.ALPHAFROMALBEDO = true;\r\n } else {\r\n defines.ALPHAFROMALBEDO = false;\r\n }\r\n }\r\n\r\n defines.SPECULAROVERALPHA = this._useSpecularOverAlpha;\r\n\r\n if (this._lightFalloff === PBRBaseMaterial.LIGHTFALLOFF_STANDARD) {\r\n defines.USEPHYSICALLIGHTFALLOFF = false;\r\n defines.USEGLTFLIGHTFALLOFF = false;\r\n } else if (this._lightFalloff === PBRBaseMaterial.LIGHTFALLOFF_GLTF) {\r\n defines.USEPHYSICALLIGHTFALLOFF = false;\r\n defines.USEGLTFLIGHTFALLOFF = true;\r\n } else {\r\n defines.USEPHYSICALLIGHTFALLOFF = true;\r\n defines.USEGLTFLIGHTFALLOFF = false;\r\n }\r\n\r\n defines.RADIANCEOVERALPHA = this._useRadianceOverAlpha;\r\n\r\n if (!this.backFaceCulling && this._twoSidedLighting) {\r\n defines.TWOSIDEDLIGHTING = true;\r\n } else {\r\n defines.TWOSIDEDLIGHTING = false;\r\n }\r\n\r\n // We need it to not invert normals in two sided lighting mode (based on the winding of the face)\r\n defines.MIRRORED = !!scene._mirroredCameraPosition;\r\n\r\n defines.SPECULARAA = engine.getCaps().standardDerivatives && this._enableSpecularAntiAliasing;\r\n }\r\n\r\n if (defines._areTexturesDirty || defines._areMiscDirty) {\r\n defines.ALPHATESTVALUE = `${this._alphaCutOff}${this._alphaCutOff % 1 === 0 ? \".\" : \"\"}`;\r\n defines.PREMULTIPLYALPHA = this.alphaMode === Constants.ALPHA_PREMULTIPLIED || this.alphaMode === Constants.ALPHA_PREMULTIPLIED_PORTERDUFF;\r\n defines.ALPHABLEND = this.needAlphaBlendingForMesh(mesh);\r\n defines.ALPHAFRESNEL = this._useAlphaFresnel || this._useLinearAlphaFresnel;\r\n defines.LINEARALPHAFRESNEL = this._useLinearAlphaFresnel;\r\n }\r\n\r\n if (defines._areImageProcessingDirty && this._imageProcessingConfiguration) {\r\n this._imageProcessingConfiguration.prepareDefines(defines);\r\n }\r\n\r\n defines.FORCENORMALFORWARD = this._forceNormalForward;\r\n\r\n defines.RADIANCEOCCLUSION = this._useRadianceOcclusion;\r\n\r\n defines.HORIZONOCCLUSION = this._useHorizonOcclusion;\r\n\r\n // Misc.\r\n if (defines._areMiscDirty) {\r\n PrepareDefinesForMisc(\r\n mesh,\r\n scene,\r\n this._useLogarithmicDepth,\r\n this.pointsCloud,\r\n this.fogEnabled,\r\n this.needAlphaTestingForMesh(mesh),\r\n defines,\r\n this._applyDecalMapAfterDetailMap,\r\n this._useVertexPulling,\r\n renderingMesh,\r\n this._isVertexOutputInvariant\r\n );\r\n defines.UNLIT = this._unlit || ((this.pointsCloud || this.wireframe) && !mesh.isVerticesDataPresent(VertexBuffer.NormalKind));\r\n defines.DEBUGMODE = this._debugMode;\r\n }\r\n\r\n // Values that need to be evaluated on every frame\r\n PrepareDefinesForFrameBoundValues(scene, engine, this, defines, useInstances ? true : false, useClipPlane, useThinInstances);\r\n\r\n // External config\r\n this._eventInfo.defines = defines;\r\n this._eventInfo.mesh = mesh;\r\n this._callbackPluginEventPrepareDefinesBeforeAttributes(this._eventInfo);\r\n\r\n // Attribs\r\n PrepareDefinesForAttributes(mesh, defines, true, true, true, this._transparencyMode !== PBRBaseMaterial.PBRMATERIAL_OPAQUE);\r\n\r\n // External config\r\n this._callbackPluginEventPrepareDefines(this._eventInfo);\r\n }\r\n\r\n /**\r\n * Force shader compilation\r\n * @param mesh - Define the mesh we want to force the compilation for\r\n * @param onCompiled - Define a callback triggered when the compilation completes\r\n * @param options - Define the options used to create the compilation\r\n */\r\n public override forceCompilation(mesh: AbstractMesh, onCompiled?: (material: Material) => void, options?: Partial<IMaterialCompilationOptions>): void {\r\n const localOptions = {\r\n clipPlane: false,\r\n useInstances: false,\r\n ...options,\r\n };\r\n\r\n if (!this._uniformBufferLayoutBuilt) {\r\n this.buildUniformLayout();\r\n }\r\n\r\n this._callbackPluginEventGeneric(MaterialPluginEvent.GetDefineNames, this._eventInfo);\r\n const checkReady = () => {\r\n if (this._breakShaderLoadedCheck) {\r\n return;\r\n }\r\n const defines = new PBRMaterialDefines(this._eventInfo.defineNames);\r\n const effect = this._prepareEffect(mesh, mesh, defines, undefined, undefined, localOptions.useInstances, localOptions.clipPlane)!;\r\n if (this._onEffectCreatedObservable) {\r\n onCreatedEffectParameters.effect = effect;\r\n onCreatedEffectParameters.subMesh = null;\r\n this._onEffectCreatedObservable.notifyObservers(onCreatedEffectParameters);\r\n }\r\n if (effect.isReady()) {\r\n if (onCompiled) {\r\n onCompiled(this);\r\n }\r\n } else {\r\n effect.onCompileObservable.add(() => {\r\n if (onCompiled) {\r\n onCompiled(this);\r\n }\r\n });\r\n }\r\n };\r\n checkReady();\r\n }\r\n\r\n /**\r\n * Initializes the uniform buffer layout for the shader.\r\n */\r\n public override buildUniformLayout(): void {\r\n // Order is important !\r\n const ubo = this._uniformBuffer;\r\n ubo.addUniform(\"vAlbedoInfos\", 2);\r\n ubo.addUniform(\"vBaseWeightInfos\", 2);\r\n ubo.addUniform(\"vBaseDiffuseRoughnessInfos\", 2);\r\n ubo.addUniform(\"vAmbientInfos\", 4);\r\n ubo.addUniform(\"vOpacityInfos\", 2);\r\n ubo.addUniform(\"vEmissiveInfos\", 2);\r\n ubo.addUniform(\"vLightmapInfos\", 2);\r\n ubo.addUniform(\"vReflectivityInfos\", 3);\r\n ubo.addUniform(\"vMicroSurfaceSamplerInfos\", 2);\r\n ubo.addUniform(\"vBumpInfos\", 3);\r\n ubo.addUniform(\"albedoMatrix\", 16);\r\n ubo.addUniform(\"baseWeightMatrix\", 16);\r\n ubo.addUniform(\"baseDiffuseRoughnessMatrix\", 16);\r\n ubo.addUniform(\"ambientMatrix\", 16);\r\n ubo.addUniform(\"opacityMatrix\", 16);\r\n ubo.addUniform(\"emissiveMatrix\", 16);\r\n ubo.addUniform(\"lightmapMatrix\", 16);\r\n ubo.addUniform(\"reflectivityMatrix\", 16);\r\n ubo.addUniform(\"microSurfaceSamplerMatrix\", 16);\r\n ubo.addUniform(\"bumpMatrix\", 16);\r\n ubo.addUniform(\"vTangentSpaceParams\", 2);\r\n ubo.addUniform(\"vAlbedoColor\", 4);\r\n ubo.addUniform(\"baseWeight\", 1);\r\n ubo.addUniform(\"baseDiffuseRoughness\", 1);\r\n ubo.addUniform(\"vLightingIntensity\", 4);\r\n\r\n ubo.addUniform(\"pointSize\", 1);\r\n ubo.addUniform(\"vReflectivityColor\", 4);\r\n ubo.addUniform(\"vEmissiveColor\", 3);\r\n ubo.addUniform(\"vAmbientColor\", 3);\r\n\r\n ubo.addUniform(\"vDebugMode\", 2);\r\n\r\n ubo.addUniform(\"vMetallicReflectanceFactors\", 4);\r\n ubo.addUniform(\"vMetallicReflectanceInfos\", 2);\r\n ubo.addUniform(\"metallicReflectanceMatrix\", 16);\r\n ubo.addUniform(\"vReflectanceInfos\", 2);\r\n ubo.addUniform(\"reflectanceMatrix\", 16);\r\n\r\n ubo.addUniform(\"cameraInfo\", 4);\r\n PrepareUniformLayoutForIBL(ubo, true, true, true, true, true);\r\n super.buildUniformLayout();\r\n }\r\n\r\n /**\r\n * Binds the submesh data.\r\n * @param world - The world matrix.\r\n * @param mesh - The BJS mesh.\r\n * @param subMesh - A submesh of the BJS mesh.\r\n */\r\n public override bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const scene = this.getScene();\r\n\r\n const defines = <PBRMaterialDefines>subMesh.materialDefines;\r\n if (!defines) {\r\n return;\r\n }\r\n\r\n const effect = subMesh.effect;\r\n\r\n if (!effect) {\r\n return;\r\n }\r\n\r\n this._activeEffect = effect;\r\n\r\n // Matrices Mesh.\r\n mesh.getMeshUniformBuffer().bindToEffect(effect, \"Mesh\");\r\n mesh.transferToEffect(world);\r\n\r\n const engine = scene.getEngine();\r\n\r\n // Binding unconditionally\r\n this._uniformBuffer.bindToEffect(effect, \"Material\");\r\n\r\n this.prePassConfiguration.bindForSubMesh(this._activeEffect, scene, mesh, world, this.isFrozen);\r\n\r\n MaterialHelperGeometryRendering.Bind(engine.currentRenderPassId, this._activeEffect, mesh, world, this);\r\n\r\n const camera = scene.activeCamera;\r\n if (camera) {\r\n this._uniformBuffer.updateFloat4(\"cameraInfo\", camera.minZ, camera.maxZ, 0, 0);\r\n } else {\r\n this._uniformBuffer.updateFloat4(\"cameraInfo\", 0, 0, 0, 0);\r\n }\r\n\r\n this._eventInfo.subMesh = subMesh;\r\n this._callbackPluginEventHardBindForSubMesh(this._eventInfo);\r\n\r\n // Normal Matrix\r\n if (defines.OBJECTSPACE_NORMALMAP) {\r\n world.toNormalMatrix(this._normalMatrix);\r\n this.bindOnlyNormalMatrix(this._normalMatrix);\r\n }\r\n\r\n const mustRebind = this._mustRebind(scene, effect, subMesh, mesh.visibility);\r\n\r\n // Bones\r\n BindBonesParameters(mesh, this._activeEffect, this.prePassConfiguration);\r\n\r\n let reflectionTexture: Nullable<BaseTexture> = null;\r\n const ubo = this._uniformBuffer;\r\n if (mustRebind) {\r\n this.bindViewProjection(effect);\r\n reflectionTexture = this._getReflectionTexture();\r\n\r\n if (!ubo.useUbo || !this.isFrozen || !ubo.isSync || subMesh._drawWrapper._forceRebindOnNextCall) {\r\n // Texture uniforms\r\n if (scene.texturesEnabled) {\r\n if (this._albedoTexture && MaterialFlags.DiffuseTextureEnabled) {\r\n ubo.updateFloat2(\"vAlbedoInfos\", this._albedoTexture.coordinatesIndex, this._albedoTexture.level);\r\n BindTextureMatrix(this._albedoTexture, ubo, \"albedo\");\r\n }\r\n\r\n if (this._baseWeightTexture && MaterialFlags.BaseWeightTextureEnabled) {\r\n ubo.updateFloat2(\"vBaseWeightInfos\", this._baseWeightTexture.coordinatesIndex, this._baseWeightTexture.level);\r\n BindTextureMatrix(this._baseWeightTexture, ubo, \"baseWeight\");\r\n }\r\n\r\n if (this._baseDiffuseRoughnessTexture && MaterialFlags.BaseDiffuseRoughnessTextureEnabled) {\r\n ubo.updateFloat2(\"vBaseDiffuseRoughnessInfos\", this._baseDiffuseRoughnessTexture.coordinatesIndex, this._baseDiffuseRoughnessTexture.level);\r\n BindTextureMatrix(this._baseDiffuseRoughnessTexture, ubo, \"baseDiffuseRoughness\");\r\n }\r\n\r\n if (this._ambientTexture && MaterialFlags.AmbientTextureEnabled) {\r\n ubo.updateFloat4(\r\n \"vAmbientInfos\",\r\n this._ambientTexture.coordinatesIndex,\r\n this._ambientTexture.level,\r\n this._ambientTextureStrength,\r\n this._ambientTextureImpactOnAnalyticalLights\r\n );\r\n BindTextureMatrix(this._ambientTexture, ubo, \"ambient\");\r\n }\r\n\r\n if (this._opacityTexture && MaterialFlags.OpacityTextureEnabled) {\r\n ubo.updateFloat2(\"vOpacityInfos\", this._opacityTexture.coordinatesIndex, this._opacityTexture.level);\r\n BindTextureMatrix(this._opacityTexture, ubo, \"opacity\");\r\n }\r\n\r\n if (this._emissiveTexture && MaterialFlags.EmissiveTextureEnabled) {\r\n ubo.updateFloat2(\"vEmissiveInfos\", this._emissiveTexture.coordinatesIndex, this._emissiveTexture.level);\r\n BindTextureMatrix(this._emissiveTexture, ubo, \"emissive\");\r\n }\r\n\r\n if (this._lightmapTexture && MaterialFlags.LightmapTextureEnabled) {\r\n ubo.updateFloat2(\"vLightmapInfos\", this._lightmapTexture.coordinatesIndex, this._lightmapTexture.level);\r\n BindTextureMatrix(this._lightmapTexture, ubo, \"lightmap\");\r\n }\r\n\r\n if (MaterialFlags.SpecularTextureEnabled) {\r\n if (this._metallicTexture) {\r\n ubo.updateFloat3(\"vReflectivityInfos\", this._metallicTexture.coordinatesIndex, this._metallicTexture.level, this._ambientTextureStrength);\r\n BindTextureMatrix(this._metallicTexture, ubo, \"reflectivity\");\r\n } else if (this._reflectivityTexture) {\r\n ubo.updateFloat3(\"vReflectivityInfos\", this._reflectivityTexture.coordinatesIndex, this._reflectivityTexture.level, 1.0);\r\n BindTextureMatrix(this._reflectivityTexture, ubo, \"reflectivity\");\r\n }\r\n\r\n if (this._metallicReflectanceTexture) {\r\n ubo.updateFloat2(\"vMetallicReflectanceInfos\", this._metallicReflectanceTexture.coordinatesIndex, this._metallicReflectanceTexture.level);\r\n BindTextureMatrix(this._metallicReflectanceTexture, ubo, \"metallicReflectance\");\r\n }\r\n\r\n if (this._reflectanceTexture && defines.REFLECTANCE) {\r\n ubo.updateFloat2(\"vReflectanceInfos\", this._reflectanceTexture.coordinatesIndex, this._reflectanceTexture.level);\r\n BindTextureMatrix(this._reflectanceTexture, ubo, \"reflectance\");\r\n }\r\n\r\n if (this._microSurfaceTexture) {\r\n ubo.updateFloat2(\"vMicroSurfaceSamplerInfos\", this._microSurfaceTexture.coordinatesIndex, this._microSurfaceTexture.level);\r\n BindTextureMatrix(this._microSurfaceTexture, ubo, \"microSurfaceSampler\");\r\n }\r\n }\r\n\r\n if (this._bumpTexture && engine.getCaps().standardDerivatives && MaterialFlags.BumpTextureEnabled && !this._disableBumpMap) {\r\n ubo.updateFloat3(\"vBumpInfos\", this._bumpTexture.coordinatesIndex, this._bumpTexture.level, this._parallaxScaleBias);\r\n BindTextureMatrix(this._bumpTexture, ubo, \"bump\");\r\n\r\n if (scene._mirroredCameraPosition) {\r\n ubo.updateFloat2(\"vTangentSpaceParams\", this._invertNormalMapX ? 1.0 : -1.0, this._invertNormalMapY ? 1.0 : -1.0);\r\n } else {\r\n ubo.updateFloat2(\"vTangentSpaceParams\", this._invertNormalMapX ? -1.0 : 1.0, this._invertNormalMapY ? -1.0 : 1.0);\r\n }\r\n }\r\n\r\n BindIBLParameters(scene, defines, ubo, this._reflectionColor, reflectionTexture, this.realTimeFiltering, true, true, true, true, true);\r\n }\r\n\r\n // Point size\r\n if (this.pointsCloud) {\r\n ubo.updateFloat(\"pointSize\", this.pointSize);\r\n }\r\n\r\n // Colors\r\n if (defines.METALLICWORKFLOW) {\r\n TmpColors.Color4[0].r = this._metallic === undefined || this._metallic === null ? 1 : this._metallic;\r\n TmpColors.Color4[0].g = this._roughness === undefined || this._roughness === null ? 1 : this._roughness;\r\n const ior = this.subSurface?._indexOfRefraction ?? 1.5;\r\n const outsideIOR = 1; // consider air as clear coat and other layers would remap in the shader.\r\n TmpColors.Color4[0].b = ior;\r\n // We are here deriving our default reflectance from a common value for none metallic surface.\r\n // Based of the schlick fresnel approximation model\r\n // for dielectrics.\r\n const f0 = Math.pow((ior - outsideIOR) / (ior + outsideIOR), 2);\r\n TmpColors.Color4[0].a = f0;\r\n ubo.updateDirectColor4(\"vReflectivityColor\", TmpColors.Color4[0]);\r\n ubo.updateColor4(\"vMetallicReflectanceFactors\", this._metallicReflectanceColor, this._metallicF0Factor);\r\n } else {\r\n ubo.updateColor4(\"vReflectivityColor\", this._reflectivityColor, this._microSurface);\r\n }\r\n\r\n ubo.updateColor3(\"vEmissiveColor\", MaterialFlags.EmissiveTextureEnabled ? this._emissiveColor : Color3.BlackReadOnly);\r\n\r\n if (!defines.SS_REFRACTION && this.subSurface?._linkRefractionWithTransparency) {\r\n ubo.updateColor4(\"vAlbedoColor\", this._albedoColor, 1);\r\n } else {\r\n ubo.updateColor4(\"vAlbedoColor\", this._albedoColor, this.alpha);\r\n }\r\n\r\n ubo.updateFloat(\"baseWeight\", this._baseWeight);\r\n ubo.updateFloat(\"baseDiffuseRoughness\", this._baseDiffuseRoughness || 0.0);\r\n\r\n // Misc\r\n this._lightingInfos.x = this._directIntensity;\r\n this._lightingInfos.y = this._emissiveIntensity;\r\n this._lightingInfos.z = this._environmentIntensity * scene.environmentIntensity;\r\n this._lightingInfos.w = this._specularIntensity;\r\n\r\n ubo.updateVector4(\"vLightingIntensity\", this._lightingInfos);\r\n\r\n // Colors\r\n scene.ambientColor.multiplyToRef(this._ambientColor, this._globalAmbientColor);\r\n\r\n ubo.updateColor3(\"vAmbientColor\", this._globalAmbientColor);\r\n\r\n ubo.updateFloat2(\"vDebugMode\", this.debugLimit, this.debugFactor);\r\n }\r\n\r\n // Textures\r\n if (scene.texturesEnabled) {\r\n if (this._albedoTexture && MaterialFlags.DiffuseTextureEnabled) {\r\n ubo.setTexture(\"albedoSampler\", this._albedoTexture);\r\n }\r\n\r\n if (this._baseWeightTexture && MaterialFlags.BaseWeightTextureEnabled) {\r\n ubo.setTexture(\"baseWeightSampler\", this._baseWeightTexture);\r\n }\r\n\r\n if (this._baseDiffuseRoughnessTexture && MaterialFlags.BaseDiffuseRoughnessTextureEnabled) {\r\n ubo.setTexture(\"baseDiffuseRoughnessSampler\", this._baseDiffuseRoughnessTexture);\r\n }\r\n\r\n if (this._ambientTexture && MaterialFlags.AmbientTextureEnabled) {\r\n ubo.setTexture(\"ambientSampler\", this._ambientTexture);\r\n }\r\n\r\n if (this._opacityTexture && MaterialFlags.OpacityTextureEnabled) {\r\n ubo.setTexture(\"opacitySampler\", this._opacityTexture);\r\n }\r\n\r\n BindIBLSamplers(scene, defines, ubo, reflectionTexture, this.realTimeFiltering);\r\n\r\n if (defines.ENVIRONMENTBRDF) {\r\n ubo.setTexture(\"environmentBrdfSampler\", this._environmentBRDFTexture);\r\n }\r\n\r\n if (this._emissiveTexture && MaterialFlags.EmissiveTextureEnabled) {\r\n ubo.setTexture(\"emissiveSampler\", this._emissiveTexture);\r\n }\r\n\r\n if (this._lightmapTexture && MaterialFlags.LightmapTextureEnabled) {\r\n ubo.setTexture(\"lightmapSampler\", this._lightmapTexture);\r\n }\r\n\r\n if (MaterialFlags.SpecularTextureEnabled) {\r\n if (this._metallicTexture) {\r\n ubo.setTexture(\"reflectivitySampler\", this._metallicTexture);\r\n } else if (this._reflectivityTexture) {\r\n ubo.setTexture(\"reflectivitySampler\", this._reflectivityTexture);\r\n }\r\n\r\n if (this._metallicReflectanceTexture) {\r\n ubo.setTexture(\"metallicReflectanceSampler\", this._metallicReflectanceTexture);\r\n }\r\n\r\n if (this._reflectanceTexture && defines.REFLECTANCE) {\r\n ubo.setTexture(\"reflectanceSampler\", this._reflectanceTexture);\r\n }\r\n\r\n if (this._microSurfaceTexture) {\r\n ubo.setTexture(\"microSurfaceSampler\", this._microSurfaceTexture);\r\n }\r\n }\r\n\r\n if (this._bumpTexture && engine.getCaps().standardDerivatives && MaterialFlags.BumpTextureEnabled && !this._disableBumpMap) {\r\n ubo.setTexture(\"bumpSampler\", this._bumpTexture);\r\n }\r\n }\r\n\r\n // OIT with depth peeling\r\n if (this.getScene().useOrderIndependentTransparency && this.needAlphaBlendingForMesh(mesh)) {\r\n this.getScene().depthPeelingRenderer!.bind(effect);\r\n }\r\n\r\n this._eventInfo.subMesh = subMesh;\r\n this._callbackPluginEventBindForSubMesh(this._eventInfo);\r\n\r\n // Clip plane\r\n BindClipPlane(this._activeEffect, this, scene);\r\n\r\n this.bindEyePosition(effect);\r\n } else if (scene.getEngine()._features.needToAlwaysBindUniformBuffers) {\r\n this._needToBindSceneUbo = true;\r\n }\r\n\r\n if (mustRebind || !this.isFrozen) {\r\n // Lights\r\n if (scene.lightsEnabled && !this._disableLighting) {\r\n BindLights(scene, mesh, this._activeEffect, defines, this._maxSimultaneousLights);\r\n }\r\n\r\n // View\r\n if (\r\n (scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) ||\r\n reflectionTexture ||\r\n this.subSurface.refractionTexture ||\r\n mesh.receiveShadows ||\r\n defines.PREPASS ||\r\n defines[\"CLUSTLIGHT_BATCH\"]\r\n ) {\r\n this.bindView(effect);\r\n }\r\n\r\n // Fog\r\n BindFogParameters(scene, mesh, this._activeEffect, true);\r\n\r\n // Morph targets\r\n if (defines.NUM_MORPH_INFLUENCERS) {\r\n BindMorphTargetParameters(mesh, this._activeEffect);\r\n }\r\n\r\n if (defines.BAKED_VERTEX_ANIMATION_TEXTURE) {\r\n mesh.bakedVertexAnimationManager?.bind(effect, defines.INSTANCES);\r\n }\r\n\r\n // image processing\r\n this._imageProcessingConfiguration.bind(this._activeEffect);\r\n\r\n // Log. depth\r\n BindLogDepth(defines, this._activeEffect, scene);\r\n }\r\n\r\n this._afterBind(mesh, this._activeEffect, subMesh);\r\n\r\n ubo.update();\r\n }\r\n\r\n /**\r\n * Returns the animatable textures.\r\n * If material have animatable metallic texture, then reflectivity texture will not be returned, even if it has animations.\r\n * @returns - Array of animatable textures.\r\n */\r\n public override getAnimatables(): IAnimatable[] {\r\n const results = super.getAnimatables();\r\n\r\n if (this._albedoTexture && this._albedoTexture.animations && this._albedoTexture.animations.length > 0) {\r\n results.push(this._albedoTexture);\r\n }\r\n\r\n if (this._baseWeightTexture && this._baseWeightTexture.animations && this._baseWeightTexture.animations.length > 0) {\r\n results.push(this._baseWeightTexture);\r\n }\r\n\r\n if (this._baseDiffuseRoughnessTexture && this._baseDiffuseRoughnessTexture.animations && this._baseDiffuseRoughnessTexture.animations.length > 0) {\r\n results.push(this._baseDiffuseRoughnessTexture);\r\n }\r\n\r\n if (this._ambientTexture && this._ambientTexture.animations && this._ambientTexture.animations.length > 0) {\r\n results.push(this._ambientTexture);\r\n }\r\n\r\n if (this._opacityTexture && this._opacityTexture.animations && this._opacityTexture.animations.length > 0) {\r\n results.push(this._opacityTexture);\r\n }\r\n\r\n if (this._reflectionTexture && this._reflectionTexture.animations && this._reflectionTexture.animations.length > 0) {\r\n results.push(this._reflectionTexture);\r\n }\r\n\r\n if (this._emissiveTexture && this._emissiveTexture.animations && this._emissiveTexture.animations.length > 0) {\r\n results.push(this._emissiveTexture);\r\n }\r\n\r\n if (this._metallicTexture && this._metallicTexture.animations && this._metallicTexture.animations.length > 0) {\r\n results.push(this._metallicTexture);\r\n } else if (this._reflectivityTexture && this._reflectivityTexture.animations && this._reflectivityTexture.animations.length > 0) {\r\n results.push(this._reflectivityTexture);\r\n }\r\n\r\n if (this._bumpTexture && this._bumpTexture.animations && this._bumpTexture.animations.length > 0) {\r\n results.push(this._bumpTexture);\r\n }\r\n\r\n if (this._lightmapTexture && this._lightmapTexture.animations && this._lightmapTexture.animations.length > 0) {\r\n results.push(this._lightmapTexture);\r\n }\r\n\r\n if (this._metallicReflectanceTexture && this._metallicReflectanceTexture.animations && this._metallicReflectanceTexture.animations.length > 0) {\r\n results.push(this._metallicReflectanceTexture);\r\n }\r\n\r\n if (this._reflectanceTexture && this._reflectanceTexture.animations && this._reflectanceTexture.animations.length > 0) {\r\n results.push(this._reflectanceTexture);\r\n }\r\n\r\n if (this._microSurfaceTexture && this._microSurfaceTexture.animations && this._microSurfaceTexture.animations.length > 0) {\r\n results.push(this._microSurfaceTexture);\r\n }\r\n\r\n return results;\r\n }\r\n\r\n /**\r\n * Returns the texture used for reflections.\r\n * @returns - Reflection texture if present. Otherwise, returns the environment texture.\r\n */\r\n private _getReflectionTexture(): Nullable<BaseTexture> {\r\n if (this._reflectionTexture) {\r\n return this._reflectionTexture;\r\n }\r\n\r\n return this.getScene().environmentTexture;\r\n }\r\n\r\n /**\r\n * Returns an array of the actively used textures.\r\n * @returns - Array of BaseTextures\r\n */\r\n public override getActiveTextures(): BaseTexture[] {\r\n const activeTextures = super.getActiveTextures();\r\n\r\n if (this._albedoTexture) {\r\n activeTextures.push(this._albedoTexture);\r\n }\r\n\r\n if (this._baseWeightTexture) {\r\n activeTextures.push(this._baseWeightTexture);\r\n }\r\n\r\n if (this._baseDiffuseRoughnessTexture) {\r\n activeTextures.push(this._baseDiffuseRoughnessTexture);\r\n }\r\n\r\n if (this._ambientTexture) {\r\n activeTextures.push(this._ambientTexture);\r\n }\r\n\r\n if (this._opacityTexture) {\r\n activeTextures.push(this._opacityTexture);\r\n }\r\n\r\n if (this._reflectionTexture) {\r\n activeTextures.push(this._reflectionTexture);\r\n }\r\n\r\n if (this._emissiveTexture) {\r\n activeTextures.push(this._emissiveTexture);\r\n }\r\n\r\n if (this._reflectivityTexture) {\r\n activeTextures.push(this._reflectivityTexture);\r\n }\r\n\r\n if (this._metallicTexture) {\r\n activeTextures.push(this._metallicTexture);\r\n }\r\n\r\n if (this._metallicReflectanceTexture) {\r\n activeTextures.push(this._metallicReflectanceTexture);\r\n }\r\n\r\n if (this._reflectanceTexture) {\r\n activeTextures.push(this._reflectanceTexture);\r\n }\r\n\r\n if (this._microSurfaceTexture) {\r\n activeTextures.push(this._microSurfaceTexture);\r\n }\r\n\r\n if (this._bumpTexture) {\r\n activeTextures.push(this._bumpTexture);\r\n }\r\n\r\n if (this._lightmapTexture) {\r\n activeTextures.push(this._lightmapTexture);\r\n }\r\n\r\n return activeTextures;\r\n }\r\n\r\n /**\r\n * Checks to see if a texture is used in the material.\r\n * @param texture - Base texture to use.\r\n * @returns - Boolean specifying if a texture is used in the material.\r\n */\r\n public override hasTexture(texture: BaseTexture): boolean {\r\n if (super.hasTexture(texture)) {\r\n return true;\r\n }\r\n\r\n if (this._albedoTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._baseWeightTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._baseDiffuseRoughnessTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._ambientTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._opacityTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._reflectionTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._emissiveTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._reflectivityTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._metallicTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._metallicReflectanceTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._reflectanceTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._microSurfaceTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._bumpTexture === texture) {\r\n return true;\r\n }\r\n\r\n if (this._lightmapTexture === texture) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Sets the required values to the prepass renderer.\r\n * It can't be sets when subsurface scattering of this material is disabled.\r\n * When scene have ability to enable subsurface prepass effect, it will enable.\r\n * @returns - If prepass is enabled or not.\r\n */\r\n public override setPrePassRenderer(): boolean {\r\n if (!this.subSurface?.isScatteringEnabled) {\r\n return false;\r\n }\r\n\r\n const subSurfaceConfiguration = this.getScene().enableSubSurfaceForPrePass();\r\n if (subSurfaceConfiguration) {\r\n subSurfaceConfiguration.enabled = true;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Disposes the resources of the material.\r\n * @param forceDisposeEffect - Forces the disposal of effects.\r\n * @param forceDisposeTextures - Forces the disposal of all textures.\r\n */\r\n public override dispose(forceDisposeEffect?: boolean, forceDisposeTextures?: boolean): void {\r\n this._breakShaderLoadedCheck = true;\r\n if (forceDisposeTextures) {\r\n if (this._environmentBRDFTexture && this.getScene().environmentBRDFTexture !== this._environmentBRDFTexture) {\r\n this._environmentBRDFTexture.dispose();\r\n }\r\n\r\n this._albedoTexture?.dispose();\r\n this._baseWeightTexture?.dispose();\r\n this._baseDiffuseRoughnessTexture?.dispose();\r\n this._ambientTexture?.dispose();\r\n this._opacityTexture?.dispose();\r\n this._reflectionTexture?.dispose();\r\n this._emissiveTexture?.dispose();\r\n this._metallicTexture?.dispose();\r\n this._reflectivityTexture?.dispose();\r\n this._bumpTexture?.dispose();\r\n this._lightmapTexture?.dispose();\r\n this._metallicReflectanceTexture?.dispose();\r\n this._reflectanceTexture?.dispose();\r\n this._microSurfaceTexture?.dispose();\r\n }\r\n\r\n this._renderTargets.dispose();\r\n\r\n if (this._imageProcessingConfiguration && this._imageProcessingObserver) {\r\n this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver);\r\n }\r\n\r\n super.dispose(forceDisposeEffect, forceDisposeTextures);\r\n }\r\n}\r\n"]}
|