@onerjs/core 8.28.7 → 8.28.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/Engines/abstractEngine.js +2 -2
  2. package/Engines/abstractEngine.js.map +1 -1
  3. package/Lights/Clustered/clusteredLightContainer.js +4 -3
  4. package/Lights/Clustered/clusteredLightContainer.js.map +1 -1
  5. package/Lights/pointLight.js +6 -4
  6. package/Lights/pointLight.js.map +1 -1
  7. package/Lights/rectAreaLight.js +6 -4
  8. package/Lights/rectAreaLight.js.map +1 -1
  9. package/Lights/spotLight.js +3 -2
  10. package/Lights/spotLight.js.map +1 -1
  11. package/Materials/GaussianSplatting/gaussianSplattingMaterial.d.ts +11 -0
  12. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +73 -26
  13. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  14. package/Materials/PBR/openpbrMaterial.js +1 -1
  15. package/Materials/PBR/openpbrMaterial.js.map +1 -1
  16. package/Meshes/mesh.js +7 -6
  17. package/Meshes/mesh.js.map +1 -1
  18. package/PostProcesses/thinTAAPostProcess.js +1 -1
  19. package/PostProcesses/thinTAAPostProcess.js.map +1 -1
  20. package/Rendering/boundingBoxRenderer.js +4 -3
  21. package/Rendering/boundingBoxRenderer.js.map +1 -1
  22. package/Rendering/edgesRenderer.js +4 -3
  23. package/Rendering/edgesRenderer.js.map +1 -1
  24. package/Shaders/ShadersInclude/gaussianSplatting.js +10 -2
  25. package/Shaders/ShadersInclude/gaussianSplatting.js.map +1 -1
  26. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js +2 -2
  27. package/Shaders/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  28. package/Shaders/gaussianSplattingDepth.fragment.d.ts +5 -0
  29. package/Shaders/gaussianSplattingDepth.fragment.js +11 -0
  30. package/Shaders/gaussianSplattingDepth.fragment.js.map +1 -0
  31. package/Shaders/gaussianSplattingDepth.vertex.d.ts +8 -0
  32. package/Shaders/gaussianSplattingDepth.vertex.js +17 -0
  33. package/Shaders/gaussianSplattingDepth.vertex.js.map +1 -0
  34. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js +7 -1
  35. package/ShadersWGSL/ShadersInclude/gaussianSplatting.js.map +1 -1
  36. package/ShadersWGSL/ShadersInclude/openpbrBaseLayerData.js +1 -1
  37. package/ShadersWGSL/ShadersInclude/openpbrBaseLayerData.js.map +1 -1
  38. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js +2 -2
  39. package/ShadersWGSL/ShadersInclude/openpbrEnvironmentLighting.js.map +1 -1
  40. package/ShadersWGSL/ShadersInclude/openpbrFragmentSamplersDeclaration.js +1 -1
  41. package/ShadersWGSL/ShadersInclude/openpbrFragmentSamplersDeclaration.js.map +1 -1
  42. package/ShadersWGSL/gaussianSplattingDepth.fragment.d.ts +6 -0
  43. package/ShadersWGSL/gaussianSplattingDepth.fragment.js +17 -0
  44. package/ShadersWGSL/gaussianSplattingDepth.fragment.js.map +1 -0
  45. package/ShadersWGSL/gaussianSplattingDepth.vertex.d.ts +8 -0
  46. package/ShadersWGSL/gaussianSplattingDepth.vertex.js +19 -0
  47. package/ShadersWGSL/gaussianSplattingDepth.vertex.js.map +1 -0
  48. package/package.json +1 -1
  49. package/scene.js +6 -5
  50. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"openpbrMaterial.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/PBR/openpbrMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { serialize, expandToProperty, addAccessorsForMaterialProperty, serializeAsTexture, serializeAsColor3, serializeAsVector2 } from \"../../Misc/decorators\";\r\nimport { GetEnvironmentBRDFTexture, GetEnvironmentFuzzBRDFTexture } from \"../../Misc/brdfTextureTools\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Scene } from \"../../scene\";\r\nimport type { Color4 } from \"../../Maths/math.color\";\r\nimport { Color3 } from \"../../Maths/math.color\";\r\nimport { ImageProcessingConfiguration } from \"../imageProcessingConfiguration\";\r\nimport type { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { Texture } from \"../Textures/texture\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { Material } from \"../material\";\r\nimport { SerializationHelper } from \"../../Misc/decorators.serialization\";\r\nimport type { Engine } from \"../../Engines/engine\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Effect, IEffectCreationOptions } from \"../../Materials/effect\";\r\nimport { MaterialDefines } from \"../materialDefines\";\r\nimport { ImageProcessingDefinesMixin } from \"../imageProcessingConfiguration.defines\";\r\nimport { EffectFallbacks } from \"../effectFallbacks\";\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 { Constants } from \"../../Engines/constants\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport { MaterialPluginEvent } from \"../materialPluginEvent\";\r\nimport { MaterialHelperGeometryRendering } from \"../materialHelper.geometryrendering\";\r\nimport { PrePassConfiguration } from \"../prePassConfiguration\";\r\nimport type { IMaterialCompilationOptions, ICustomShaderNameResolveOptions } from \"../../Materials/material\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { MaterialFlags } from \"../materialFlags\";\r\nimport type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { UVDefinesMixin } from \"../uv.defines\";\r\nimport { Vector2, Vector4, TmpVectors } from \"core/Maths/math.vector\";\r\nimport type { Vector3, Matrix } from \"core/Maths/math.vector\";\r\nimport type { Mesh } from \"../../Meshes/mesh\";\r\nimport { ImageProcessingMixin } from \"../imageProcessing\";\r\nimport { PushMaterial } from \"../pushMaterial\";\r\nimport { SmartArray } from \"../../Misc/smartArray\";\r\nimport type { RenderTargetTexture } from \"../Textures/renderTargetTexture\";\r\nimport type { IAnimatable } from \"../../Animations/animatable.interface\";\r\n\r\nconst onCreatedEffectParameters = { effect: null as unknown as Effect, subMesh: null as unknown as Nullable<SubMesh> };\r\n\r\nclass Uniform {\r\n public name: string;\r\n public numComponents: number;\r\n public linkedProperties: { [name: string]: Property<PropertyType> } = {};\r\n public populateVectorFromLinkedProperties(vector: Vector4 | Vector3 | Vector2): void {\r\n const destinationSize = vector.dimension[0];\r\n for (const propKey in this.linkedProperties) {\r\n const prop = this.linkedProperties[propKey];\r\n const sourceSize = prop.numComponents;\r\n if (destinationSize < sourceSize || prop.targetUniformComponentOffset > destinationSize - sourceSize) {\r\n if (sourceSize == 1) {\r\n Logger.Error(`Float property ${prop.name} has an offset that is too large.`);\r\n } else {\r\n Logger.Error(`Vector${sourceSize} property ${prop.name} won't fit in Vector${destinationSize} or has an offset that is too large.`);\r\n }\r\n return;\r\n }\r\n if (typeof prop.value === \"number\") {\r\n Uniform._tmpArray[prop.targetUniformComponentOffset] = prop.value;\r\n } else {\r\n prop.value.toArray(Uniform._tmpArray, prop.targetUniformComponentOffset);\r\n }\r\n }\r\n vector.fromArray(Uniform._tmpArray);\r\n }\r\n public constructor(name: string, componentNum: number) {\r\n this.name = name;\r\n this.numComponents = componentNum;\r\n }\r\n private static _tmpArray: number[] = [0, 0, 0, 0];\r\n}\r\n\r\ntype PropertyType = Vector2 | Vector3 | Vector4 | number | Color3 | Color4;\r\n\r\n/**\r\n * Defines a property for the OpenPBRMaterial.\r\n */\r\nclass Property<T extends PropertyType> {\r\n public name: string;\r\n public targetUniformName: string;\r\n public defaultValue: T;\r\n public value: T;\r\n // public includeAlphaFromProp: string = \"\";\r\n\r\n /**\r\n * If not given a type, there will be no uniform defined for this property and\r\n * it will be assumed that the value will be packed into the already existing \"uniformName\" uniform.\r\n */\r\n public targetUniformComponentNum: number = 4; // Default to vec4\r\n public targetUniformComponentOffset: number = 0;\r\n\r\n /**\r\n * Creates a new Property instance.\r\n * @param name The name of the property in the shader\r\n * @param defaultValue The default value of the property\r\n * @param targetUniformName The name of the property in the shader uniform block\r\n * @param targetUniformComponentNum The number of components in the target uniform. All properties that are\r\n * packed into the same uniform must agree on the size of the target uniform.\r\n * @param targetUniformComponentOffset The offset in the uniform where this property will be packed.\r\n */\r\n constructor(name: string, defaultValue: T, targetUniformName: string, targetUniformComponentNum: number, targetUniformComponentOffset: number = 0) {\r\n this.name = name;\r\n this.targetUniformName = targetUniformName;\r\n this.defaultValue = defaultValue;\r\n this.value = defaultValue;\r\n this.targetUniformComponentNum = targetUniformComponentNum;\r\n this.targetUniformComponentOffset = targetUniformComponentOffset;\r\n }\r\n\r\n /**\r\n * Returns the number of components of the property based on its default value type.\r\n */\r\n public get numComponents(): number {\r\n if (typeof this.defaultValue === \"number\") {\r\n return 1;\r\n }\r\n return this.defaultValue.dimension[0];\r\n }\r\n}\r\n\r\nclass Sampler {\r\n public name: string;\r\n public value: Nullable<BaseTexture> = null; // Texture value, default to null\r\n public samplerPrefix: string = \"\"; // The name of the sampler in the shader\r\n public textureDefine: string = \"\"; // The define used in the shader for this sampler\r\n\r\n /**\r\n * The name of the sampler used in the shader.\r\n * If this naming changes, we'll also need to change:\r\n * - samplerFragmentDeclaration.fx\r\n * - openpbr.fragment.fx\r\n */\r\n public get samplerName(): string {\r\n return this.samplerPrefix + \"Sampler\";\r\n }\r\n /**\r\n * The name of the sampler info used in the shader.\r\n * If this naming changes, we'll also need to change:\r\n * - openpbr.vertex.fx\r\n * - openpbr.fragment.fx\r\n */\r\n public get samplerInfoName(): string {\r\n return \"v\" + this.samplerPrefix.charAt(0).toUpperCase() + this.samplerPrefix.slice(1) + \"Infos\";\r\n }\r\n /**\r\n * The name of the matrix used for this sampler in the shader.\r\n * If this naming changes, we'll also need to change:\r\n * - materialHelper.functions.BindTextureMatrix\r\n * - samplerVertexImplementation.fx\r\n * - openpbr.fragment.fx\r\n */\r\n public get samplerMatrixName(): string {\r\n return this.samplerPrefix + \"Matrix\";\r\n }\r\n /**\r\n * Creates a new Sampler instance.\r\n * @param name The name of the texture property\r\n * @param samplerPrefix The prefix used for the name of the sampler in the shader\r\n * @param textureDefine The define used in the shader for this sampler\r\n */\r\n constructor(name: string, samplerPrefix: string, textureDefine: string) {\r\n this.name = name;\r\n this.samplerPrefix = samplerPrefix;\r\n this.textureDefine = textureDefine;\r\n }\r\n}\r\n\r\nclass OpenPBRMaterialDefinesBase extends UVDefinesMixin(MaterialDefines) {}\r\n/**\r\n * Manages the defines for the PBR Material.\r\n * @internal\r\n */\r\nexport class OpenPBRMaterialDefines extends ImageProcessingDefinesMixin(OpenPBRMaterialDefinesBase) {\r\n public NUM_SAMPLES = \"0\";\r\n public REALTIME_FILTERING = false;\r\n public IBL_CDF_FILTERING = false;\r\n\r\n public VERTEXCOLOR = false;\r\n\r\n public BAKED_VERTEX_ANIMATION_TEXTURE = false;\r\n\r\n public VERTEXALPHA = false;\r\n public ALPHATEST = false;\r\n public DEPTHPREPASS = false;\r\n public ALPHABLEND = false;\r\n public ALPHA_FROM_BASE_COLOR_TEXTURE = false;\r\n public ALPHATESTVALUE = \"0.5\";\r\n public PREMULTIPLYALPHA = false;\r\n\r\n public REFLECTIVITY_GAMMA = false;\r\n public REFLECTIVITYDIRECTUV = 0;\r\n public SPECULARTERM = false;\r\n\r\n public LODBASEDMICROSFURACE = true;\r\n\r\n public METALLICWORKFLOW = true;\r\n public ROUGHNESSSTOREINMETALMAPALPHA = false;\r\n public ROUGHNESSSTOREINMETALMAPGREEN = false;\r\n public METALLNESSSTOREINMETALMAPBLUE = false;\r\n public AOSTOREINMETALMAPRED = false;\r\n public SPECULAR_WEIGHT_IN_ALPHA = false;\r\n public SPECULAR_WEIGHT_FROM_SPECULAR_COLOR_TEXTURE = false;\r\n public SPECULAR_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE = false;\r\n public COAT_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE = false;\r\n public USE_GLTF_STYLE_ANISOTROPY = false;\r\n public THIN_FILM_THICKNESS_FROM_THIN_FILM_TEXTURE = false;\r\n\r\n public ENVIRONMENTBRDF = false;\r\n public ENVIRONMENTBRDF_RGBD = false;\r\n public FUZZENVIRONMENTBRDF = false;\r\n\r\n public NORMAL = false;\r\n public TANGENT = false;\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 * Enables anisotropic logic. Still needed because it's used in pbrHelperFunctions\r\n */\r\n public ANISOTROPIC = false;\r\n /**\r\n * Tells the shader to use OpenPBR's anisotropic roughness remapping\r\n */\r\n public ANISOTROPIC_OPENPBR = true;\r\n /**\r\n * Tells the shader to apply anisotropy to the base layer\r\n */\r\n public ANISOTROPIC_BASE = false;\r\n /**\r\n * Tells the shader to apply anisotropy to the coat layer\r\n */\r\n public ANISOTROPIC_COAT = false;\r\n /**\r\n * Number of samples to use for the fuzz IBL lighting calculations\r\n */\r\n public FUZZ_IBL_SAMPLES = 4;\r\n /**\r\n * Tells the shader to enable the fuzz layer\r\n */\r\n public FUZZ = false;\r\n\r\n /**\r\n * Tells the shader to enable the thin film layer\r\n */\r\n public THIN_FILM = false;\r\n\r\n /**\r\n * Tells the shader to enable the legacy iridescence code\r\n * Iridescence is the name of thin film interference in the PBR material.\r\n */\r\n public IRIDESCENCE = 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 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 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\r\n public CLUSTLIGHT_SLICES = 0;\r\n public CLUSTLIGHT_BATCH = 0;\r\n\r\n // BRDF defines\r\n BRDF_V_HEIGHT_CORRELATED = true;\r\n MS_BRDF_ENERGY_CONSERVATION = true;\r\n SPHERICAL_HARMONICS = true;\r\n SPECULAR_GLOSSINESS_ENERGY_CONSERVATION = true;\r\n MIX_IBL_RADIANCE_WITH_IRRADIANCE = true;\r\n LEGACY_SPECULAR_ENERGY_CONSERVATION = false;\r\n BASE_DIFFUSE_MODEL = Constants.MATERIAL_DIFFUSE_MODEL_E_OREN_NAYAR;\r\n DIELECTRIC_SPECULAR_MODEL = Constants.MATERIAL_DIELECTRIC_SPECULAR_MODEL_OPENPBR;\r\n CONDUCTOR_SPECULAR_MODEL = Constants.MATERIAL_CONDUCTOR_SPECULAR_MODEL_OPENPBR;\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.NORMALXYSCALE = true;\r\n }\r\n}\r\n\r\nclass OpenPBRMaterialBase extends ImageProcessingMixin(PushMaterial) {}\r\n/**\r\n * A Physically based material that follows the specification of OpenPBR.\r\n *\r\n * For more information, please refer to the documentation :\r\n * https://academysoftwarefoundation.github.io/OpenPBR/index.html\r\n */\r\nexport class OpenPBRMaterial extends OpenPBRMaterialBase {\r\n /**\r\n * Base Weight is a multiplier on the diffuse and metal lobes.\r\n * See OpenPBR's specs for base_weight\r\n */\r\n @serialize()\r\n public baseWeight: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseWeight\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseWeight: Property<number> = new Property<number>(\"base_weight\", 1, \"vBaseWeight\", 1);\r\n\r\n /**\r\n * Base Weight is a multiplier on the diffuse and metal lobes.\r\n * See OpenPBR's specs for base_weight\r\n */\r\n @serializeAsTexture()\r\n public baseWeightTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseWeightTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseWeightTexture: Sampler = new Sampler(\"base_weight\", \"baseWeight\", \"BASE_WEIGHT\");\r\n\r\n /**\r\n * Color of the base diffuse lobe.\r\n * See OpenPBR's specs for base_color\r\n */\r\n @serializeAsColor3()\r\n public baseColor: Color3;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseColor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseColor: Property<Color3> = new Property<Color3>(\"base_color\", Color3.White(), \"vBaseColor\", 4);\r\n\r\n /**\r\n * Base Color Texture property.\r\n * See OpenPBR's specs for base_color\r\n */\r\n @serializeAsTexture()\r\n public baseColorTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseColorTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseColorTexture: Sampler = new Sampler(\"base_color\", \"baseColor\", \"BASE_COLOR\");\r\n\r\n /**\r\n * Roughness of the diffuse lobe.\r\n * See OpenPBR's specs for base_diffuse_roughness\r\n */\r\n @serialize()\r\n public baseDiffuseRoughness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseDiffuseRoughness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseDiffuseRoughness: Property<number> = new Property<number>(\"base_diffuse_roughness\", 0, \"vBaseDiffuseRoughness\", 1);\r\n\r\n /**\r\n * Roughness texture of the diffuse lobe.\r\n * See OpenPBR's specs for base_diffuse_roughness\r\n */\r\n @serializeAsTexture()\r\n public baseDiffuseRoughnessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseDiffuseRoughnessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseDiffuseRoughnessTexture: Sampler = new Sampler(\"base_diffuse_roughness\", \"baseDiffuseRoughness\", \"BASE_DIFFUSE_ROUGHNESS\");\r\n\r\n /**\r\n * Metalness of the base lobe.\r\n * See OpenPBR's specs for base_metalness\r\n */\r\n @serialize()\r\n public baseMetalness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseMetalness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseMetalness: Property<number> = new Property<number>(\"base_metalness\", 0, \"vReflectanceInfo\", 4, 0);\r\n\r\n /**\r\n * Metalness texture.\r\n * See OpenPBR's specs for base_metalness\r\n */\r\n @serializeAsTexture()\r\n public baseMetalnessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseMetalnessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseMetalnessTexture: Sampler = new Sampler(\"base_metalness\", \"baseMetalness\", \"BASE_METALNESS\");\r\n\r\n /**\r\n * Weight of the specular lobe.\r\n * See OpenPBR's specs for specular_weight\r\n */\r\n @serialize()\r\n public specularWeight: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularWeight\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularWeight: Property<number> = new Property<number>(\"specular_weight\", 1, \"vReflectanceInfo\", 4, 3);\r\n\r\n /**\r\n * Weight texture of the specular lobe.\r\n * See OpenPBR's specs for specular_weight\r\n */\r\n @serializeAsTexture()\r\n public specularWeightTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularWeightTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularWeightTexture: Sampler = new Sampler(\"specular_weight\", \"specularWeight\", \"SPECULAR_WEIGHT\");\r\n\r\n /**\r\n * Color of the specular lobe.\r\n * See OpenPBR's specs for specular_color\r\n */\r\n @serializeAsColor3()\r\n public specularColor: Color3;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularColor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularColor: Property<Color3> = new Property<Color3>(\"specular_color\", Color3.White(), \"vSpecularColor\", 4);\r\n\r\n /**\r\n * Specular Color Texture property.\r\n * See OpenPBR's specs for specular_color\r\n */\r\n @serializeAsTexture()\r\n public specularColorTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularColorTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularColorTexture: Sampler = new Sampler(\"specular_color\", \"specularColor\", \"SPECULAR_COLOR\");\r\n\r\n /**\r\n * Roughness of the specular lobe.\r\n * See OpenPBR's specs for specular_roughness\r\n */\r\n @serialize()\r\n public specularRoughness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularRoughness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularRoughness: Property<number> = new Property<number>(\"specular_roughness\", 0.3, \"vReflectanceInfo\", 4, 1);\r\n\r\n /**\r\n * Roughness texture of the specular lobe.\r\n * See OpenPBR's specs for specular_roughness\r\n */\r\n @serializeAsTexture()\r\n public specularRoughnessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularRoughnessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularRoughnessTexture: Sampler = new Sampler(\"specular_roughness\", \"specularRoughness\", \"SPECULAR_ROUGHNESS\");\r\n\r\n /**\r\n * Anisotropic roughness of the specular lobe.\r\n * See OpenPBR's specs for specular_roughness_anisotropy\r\n */\r\n @serialize()\r\n public specularRoughnessAnisotropy: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularRoughnessAnisotropy\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularRoughnessAnisotropy: Property<number> = new Property<number>(\"specular_roughness_anisotropy\", 0, \"vSpecularAnisotropy\", 3, 2);\r\n\r\n /**\r\n * Anisotropic Roughness texture.\r\n * See OpenPBR's specs for specular_roughness\r\n */\r\n @serializeAsTexture()\r\n public specularRoughnessAnisotropyTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularRoughnessAnisotropyTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularRoughnessAnisotropyTexture: Sampler = new Sampler(\"specular_roughness_anisotropy\", \"specularRoughnessAnisotropy\", \"SPECULAR_ROUGHNESS_ANISOTROPY\");\r\n\r\n /**\r\n * IOR of the specular lobe.\r\n * See OpenPBR's specs for specular_ior\r\n */\r\n @serialize()\r\n public specularIor: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularIor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularIor: Property<number> = new Property<number>(\"specular_ior\", 1.5, \"vReflectanceInfo\", 4, 2);\r\n\r\n /**\r\n * Defines the amount of clear coat on the surface.\r\n * See OpenPBR's specs for coat_weight\r\n */\r\n @serialize()\r\n public coatWeight: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatWeight\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatWeight: Property<number> = new Property<number>(\"coat_weight\", 0.0, \"vCoatWeight\", 1, 0);\r\n\r\n /**\r\n * Coat weight texture.\r\n * See OpenPBR's specs for coat_weight\r\n */\r\n @serializeAsTexture()\r\n public coatWeightTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatWeightTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatWeightTexture: Sampler = new Sampler(\"coat_weight\", \"coatWeight\", \"COAT_WEIGHT\");\r\n\r\n /**\r\n * Defines the color of the clear coat on the surface.\r\n * See OpenPBR's specs for coat_color\r\n */\r\n @serializeAsColor3()\r\n public coatColor: Color3;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatColor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatColor: Property<Color3> = new Property<Color3>(\"coat_color\", Color3.White(), \"vCoatColor\", 3, 0);\r\n\r\n /**\r\n * Color texture of the clear coat.\r\n * See OpenPBR's specs for coat_color\r\n */\r\n @serializeAsTexture()\r\n public coatColorTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatColorTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatColorTexture: Sampler = new Sampler(\"coat_color\", \"coatColor\", \"COAT_COLOR\");\r\n\r\n /**\r\n * Defines the roughness of the clear coat on the surface.\r\n * See OpenPBR's specs for coat_roughness\r\n */\r\n @serialize()\r\n public coatRoughness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatRoughness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatRoughness: Property<number> = new Property<number>(\"coat_roughness\", 0.0, \"vCoatRoughness\", 1, 0);\r\n\r\n /**\r\n * Roughness texture of the clear coat.\r\n * See OpenPBR's specs for coat_roughness\r\n */\r\n @serializeAsTexture()\r\n public coatRoughnessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatRoughnessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatRoughnessTexture: Sampler = new Sampler(\"coat_roughness\", \"coatRoughness\", \"COAT_ROUGHNESS\");\r\n\r\n /**\r\n * Defines the anisotropy of the clear coat on the surface.\r\n * See OpenPBR's specs for coat_roughness_anisotropy\r\n */\r\n @serialize()\r\n public coatRoughnessAnisotropy: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatRoughnessAnisotropy\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatRoughnessAnisotropy: Property<number> = new Property<number>(\"coat_roughness_anisotropy\", 0, \"vCoatRoughnessAnisotropy\", 1);\r\n\r\n /**\r\n * Anisotropic Roughness texture of the clear coat.\r\n * See OpenPBR's specs for coat_roughness_anisotropy\r\n */\r\n @serializeAsTexture()\r\n public coatRoughnessAnisotropyTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatRoughnessAnisotropyTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatRoughnessAnisotropyTexture: Sampler = new Sampler(\"coat_roughness_anisotropy\", \"coatRoughnessAnisotropy\", \"COAT_ROUGHNESS_ANISOTROPY\");\r\n\r\n /**\r\n * Defines the IOR of the clear coat on the surface.\r\n * See OpenPBR's specs for coat_ior\r\n */\r\n @serialize()\r\n public coatIor: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatIor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatIor: Property<number> = new Property<number>(\"coat_ior\", 1.5, \"vCoatIor\", 1, 0);\r\n\r\n /**\r\n * Defines the amount that interreflections within the coat allow the underlying surface\r\n * to be darkened. A value of 1.0 means that the physically correct amount of darkening\r\n * is applied, while a value of 0.0 means that no darkening is applied.\r\n * See OpenPBR's specs for coat_darkening\r\n */\r\n @serialize()\r\n public coatDarkening: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatDarkening\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatDarkening: Property<number> = new Property<number>(\"coat_darkening\", 1.0, \"vCoatDarkening\", 1, 0);\r\n\r\n /**\r\n * Defines the amount that interreflections within the coat allow the underlying surface\r\n * to be darkened. A value of 1.0 means that the physically correct amount of darkening\r\n * is applied, while a value of 0.0 means that no darkening is applied.\r\n * See OpenPBR's specs for coat_darkening\r\n */\r\n @serializeAsTexture()\r\n public coatDarkeningTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatDarkeningTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatDarkeningTexture: Sampler = new Sampler(\"coat_darkening\", \"coatDarkening\", \"COAT_DARKENING\");\r\n\r\n /**\r\n * Specifies whether the coat roughness is taken from the\r\n * same texture as the coat_weight.\r\n */\r\n @serialize()\r\n public useCoatRoughnessFromWeightTexture: boolean = false;\r\n\r\n /**\r\n * Defines the weight of the fuzz layer on the surface.\r\n * See OpenPBR's specs for fuzz_weight\r\n */\r\n public fuzzWeight: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"fuzzWeight\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _fuzzWeight: Property<number> = new Property<number>(\"fuzz_weight\", 0.0, \"vFuzzWeight\", 1, 0);\r\n\r\n /**\r\n * Weight texture of the fuzz layer.\r\n * See OpenPBR's specs for fuzz_weight\r\n */\r\n public fuzzWeightTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"fuzzWeightTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _fuzzWeightTexture: Sampler = new Sampler(\"fuzz_weight\", \"fuzzWeight\", \"FUZZ_WEIGHT\");\r\n\r\n /**\r\n * Defines the color of the fuzz layer on the surface.\r\n * See OpenPBR's specs for fuzz_color\r\n */\r\n public fuzzColor: Color3;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"fuzzColor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _fuzzColor: Property<Color3> = new Property<Color3>(\"fuzz_color\", Color3.White(), \"vFuzzColor\", 3, 0);\r\n\r\n /**\r\n * Color texture of the fuzz layer.\r\n * See OpenPBR's specs for fuzz_color\r\n */\r\n public fuzzColorTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"fuzzColorTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _fuzzColorTexture: Sampler = new Sampler(\"fuzz_color\", \"fuzzColor\", \"FUZZ_COLOR\");\r\n\r\n /**\r\n * Defines the roughness of the fuzz layer on the surface.\r\n * See OpenPBR's specs for fuzz_roughness\r\n */\r\n public fuzzRoughness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"fuzzRoughness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _fuzzRoughness: Property<number> = new Property<number>(\"fuzz_roughness\", 0.5, \"vFuzzRoughness\", 1, 0);\r\n\r\n /**\r\n * Roughness texture of the fuzz layer.\r\n * See OpenPBR's specs for fuzz_roughness\r\n */\r\n public fuzzRoughnessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"fuzzRoughnessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _fuzzRoughnessTexture: Sampler = new Sampler(\"fuzz_roughness\", \"fuzzRoughness\", \"FUZZ_ROUGHNESS\");\r\n\r\n /**\r\n * Defines the normal of the material's geometry.\r\n * See OpenPBR's specs for geometry_normal\r\n */\r\n @serializeAsTexture()\r\n public geometryNormalTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryNormalTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryNormalTexture: Sampler = new Sampler(\"geometry_normal\", \"geometryNormal\", \"GEOMETRY_NORMAL\");\r\n\r\n /**\r\n * Defines the tangent of the material's geometry. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_tangent\r\n */\r\n @serializeAsVector2()\r\n public geometryTangent: Vector2;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryTangent\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryTangent: Property<Vector2> = new Property<Vector2>(\"geometry_tangent\", new Vector2(1, 0), \"vSpecularAnisotropy\", 3, 0);\r\n\r\n /**\r\n * Defines the angle of the tangent of the material's geometry. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_tangent\r\n */\r\n public get geometryTangentAngle(): number {\r\n return Math.atan2(this.geometryTangent.y, this.geometryTangent.x);\r\n }\r\n\r\n public set geometryTangentAngle(value: number) {\r\n this.geometryTangent = new Vector2(Math.cos(value), Math.sin(value));\r\n }\r\n\r\n /**\r\n * Defines the tangent of the material's geometry. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_tangent\r\n */\r\n @serializeAsTexture()\r\n public geometryTangentTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryTangentTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryTangentTexture: Sampler = new Sampler(\"geometry_tangent\", \"geometryTangent\", \"GEOMETRY_TANGENT\");\r\n\r\n /**\r\n * Defines the normal of the material's coat layer.\r\n * See OpenPBR's specs for geometry_coat_normal\r\n */\r\n @serializeAsTexture()\r\n public geometryCoatNormalTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryCoatNormalTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryCoatNormalTexture: Sampler = new Sampler(\"geometry_coat_normal\", \"geometryCoatNormal\", \"GEOMETRY_COAT_NORMAL\");\r\n\r\n /**\r\n * Defines the tangent of the material's coat layer. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_coat_tangent\r\n */\r\n @serializeAsVector2()\r\n public geometryCoatTangent: Vector2;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryCoatTangent\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryCoatTangent: Property<Vector2> = new Property<Vector2>(\"geometry_coat_tangent\", new Vector2(1, 0), \"vGeometryCoatTangent\", 2, 0);\r\n\r\n /**\r\n * Defines the angle of the tangent of the material's coat layer.\r\n */\r\n public get geometryCoatTangentAngle(): number {\r\n return Math.atan2(this.geometryCoatTangent.y, this.geometryCoatTangent.x);\r\n }\r\n\r\n /**\r\n * Defines the angle of the tangent of the material's coat layer.\r\n */\r\n public set geometryCoatTangentAngle(value: number) {\r\n this.geometryCoatTangent = new Vector2(Math.cos(value), Math.sin(value));\r\n }\r\n\r\n /**\r\n * Defines the tangent of the material's coat layer. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_coat_tangent\r\n */\r\n @serializeAsTexture()\r\n public geometryCoatTangentTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryCoatTangentTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryCoatTangentTexture: Sampler = new Sampler(\"geometry_coat_tangent\", \"geometryCoatTangent\", \"GEOMETRY_COAT_TANGENT\");\r\n\r\n /**\r\n * Defines the opacity of the material's geometry.\r\n * See OpenPBR's specs for geometry_opacity\r\n */\r\n @serialize()\r\n public geometryOpacity: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryOpacity\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryOpacity: Property<number> = new Property<number>(\"geometry_opacity\", 1.0, \"vBaseColor\", 4, 3);\r\n\r\n /**\r\n * Defines the opacity texture of the material's geometry.\r\n * See OpenPBR's specs for geometry_opacity\r\n */\r\n @serializeAsTexture()\r\n public geometryOpacityTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryOpacityTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryOpacityTexture: Sampler = new Sampler(\"geometry_opacity\", \"geometryOpacity\", \"GEOMETRY_OPACITY\");\r\n\r\n /**\r\n * Defines the luminance of the material's emission.\r\n * See OpenPBR's specs for emission_luminance\r\n */\r\n @serialize()\r\n public emissionLuminance: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"emissionLuminance\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _emissionLuminance: Property<number> = new Property<number>(\"emission_luminance\", 1.0, \"vLightingIntensity\", 4, 1);\r\n\r\n /**\r\n * Defines the color of the material's emission.\r\n * See OpenPBR's specs for emission_color\r\n */\r\n @serializeAsColor3()\r\n public emissionColor: Color3;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"emissionColor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _emissionColor: Property<Color3> = new Property<Color3>(\"emission_color\", Color3.Black(), \"vEmissionColor\", 3);\r\n\r\n /**\r\n * Defines the texture of the material's emission color.\r\n * See OpenPBR's specs for emission_color\r\n */\r\n @serializeAsTexture()\r\n public emissionColorTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"emissionColorTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _emissionColorTexture: Sampler = new Sampler(\"emission_color\", \"emissionColor\", \"EMISSION_COLOR\");\r\n\r\n /**\r\n * Defines the weight of the thin film layer on top of the base layer for iridescent effects.\r\n */\r\n public thinFilmWeight: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"thinFilmWeight\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _thinFilmWeight: Property<number> = new Property<number>(\"thin_film_weight\", 0.0, \"vThinFilmWeight\", 1, 0);\r\n\r\n /**\r\n * Thin film weight texture.\r\n */\r\n public thinFilmWeightTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"thinFilmWeightTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _thinFilmWeightTexture: Sampler = new Sampler(\"thin_film_weight\", \"thinFilmWeight\", \"THIN_FILM_WEIGHT\");\r\n\r\n /**\r\n * Defines the thickness of the thin film layer in μm. If a texture is provided for thinFilmWeightTexture,\r\n * this value will act as a multiplier to the texture values.\r\n * See OpenPBR's specs for thin_film_thickness\r\n */\r\n public thinFilmThickness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"thinFilmThickness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _thinFilmThickness: Property<number> = new Property<number>(\"thin_film_thickness\", 0.5, \"vThinFilmThickness\", 2, 0);\r\n\r\n /**\r\n * Defines the minimum thickness of the thin film layer in μm.\r\n */\r\n public thinFilmThicknessMin: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"thinFilmThicknessMin\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _thinFilmThicknessMin: Property<number> = new Property<number>(\"thin_film_thickness_min\", 0.0, \"vThinFilmThickness\", 2, 1);\r\n\r\n /**\r\n * Defines the maximum thickness of the thin film layer in μm.\r\n */\r\n public thinFilmThicknessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"thinFilmThicknessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _thinFilmThicknessTexture: Sampler = new Sampler(\"thin_film_thickness\", \"thinFilmThickness\", \"THIN_FILM_THICKNESS\");\r\n\r\n /**\r\n * Defines the index of refraction of the thin film layer.\r\n */\r\n public thinFilmIor: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"thinFilmIor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _thinFilmIor: Property<number> = new Property<number>(\"thin_film_ior\", 1.4, \"vThinFilmIor\", 1, 0);\r\n\r\n /**\r\n * Defines the ambient occlusion texture.\r\n */\r\n @serializeAsTexture()\r\n public ambientOcclusionTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"ambientOcclusionTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _ambientOcclusionTexture: Sampler = new Sampler(\"ambient_occlusion\", \"ambientOcclusion\", \"AMBIENT_OCCLUSION\");\r\n\r\n private _propertyList: { [name: string]: Property<any> };\r\n private _uniformsList: { [name: string]: Uniform } = {};\r\n private _samplersList: { [name: string]: Sampler } = {};\r\n private _samplerDefines: { [name: string]: { type: string; default: any } } = {};\r\n\r\n private static _noiseTextures: { [id: number]: BaseTexture } = {};\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 */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public directIntensity: 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 */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public environmentIntensity: number = 1.0;\r\n\r\n /**\r\n * Specifies that the specular weight is stored in the alpha channel of the specular weight texture.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useSpecularWeightFromTextureAlpha = false;\r\n\r\n /**\r\n * Enforces alpha test in opaque or blend mode in order to improve the performances of some situations.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesAndMiscDirty\")\r\n public forceAlphaTest = false;\r\n\r\n /**\r\n * Defines the alpha limits in alpha test mode.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesAndMiscDirty\")\r\n public alphaCutOff = 0.4;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the ambient occlusion information in its red channel.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\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 */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useAmbientInGrayScale = false;\r\n\r\n /**\r\n * BJS is using an hardcoded light falloff based on a manually sets up range.\r\n * In PBR, one way to represents the falloff is to use the inverse squared root algorithm.\r\n * This parameter can help you switch back to the BJS mode in order to create scenes using both materials.\r\n */\r\n @serialize()\r\n public get usePhysicalLightFalloff(): boolean {\r\n return this._lightFalloff === Material.LIGHTFALLOFF_PHYSICAL;\r\n }\r\n\r\n /**\r\n * BJS is using an hardcoded light falloff based on a manually sets up range.\r\n * In PBR, one way to represents the falloff is to use the inverse squared root algorithm.\r\n * This parameter can help you switch back to the BJS mode in order to create scenes using both materials.\r\n */\r\n public set usePhysicalLightFalloff(value: boolean) {\r\n if (value !== this.usePhysicalLightFalloff) {\r\n // Ensure the effect will be rebuilt.\r\n this._markAllSubMeshesAsTexturesDirty();\r\n\r\n if (value) {\r\n this._lightFalloff = Material.LIGHTFALLOFF_PHYSICAL;\r\n } else {\r\n this._lightFalloff = Material.LIGHTFALLOFF_STANDARD;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * In order to support the falloff compatibility with gltf, a special mode has been added\r\n * to reproduce the gltf light falloff.\r\n */\r\n @serialize()\r\n public get useGLTFLightFalloff(): boolean {\r\n return this._lightFalloff === Material.LIGHTFALLOFF_GLTF;\r\n }\r\n\r\n /**\r\n * In order to support the falloff compatibility with gltf, a special mode has been added\r\n * to reproduce the gltf light falloff.\r\n */\r\n public set useGLTFLightFalloff(value: boolean) {\r\n if (value !== this.useGLTFLightFalloff) {\r\n // Ensure the effect will be rebuilt.\r\n this._markAllSubMeshesAsTexturesDirty();\r\n\r\n if (value) {\r\n this._lightFalloff = Material.LIGHTFALLOFF_GLTF;\r\n } else {\r\n this._lightFalloff = Material.LIGHTFALLOFF_STANDARD;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Allows using an object space normal map (instead of tangent space).\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useObjectSpaceNormalMap = false;\r\n\r\n /**\r\n * Allows using the normal map in parallax mode.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useParallax = false;\r\n\r\n /**\r\n * Allows using the normal map in parallax occlusion mode.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useParallaxOcclusion = false;\r\n\r\n /**\r\n * Controls the scale bias of the parallax mode.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\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 */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public disableLighting = false;\r\n\r\n /**\r\n * Force the shader to compute irradiance in the fragment shader in order to take normal mapping into account.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public forceIrradianceInFragment = false;\r\n\r\n /**\r\n * Number of Simultaneous lights allowed on the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public maxSimultaneousLights = 4;\r\n\r\n /**\r\n * If sets to true, x component of normal map value will invert (x = 1.0 - x).\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public invertNormalMapX = false;\r\n\r\n /**\r\n * If sets to true, y component of normal map value will invert (y = 1.0 - y).\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\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 */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public twoSidedLighting = 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 is converted to gamma to compute the fresnel)\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\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 */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useLinearAlphaFresnel = false;\r\n\r\n /**\r\n * Let user defines the brdf lookup texture used for IBL.\r\n * A default 8bit version is embedded but you could point at :\r\n * * Default texture: https://assets.babylonjs.com/environments/correlatedMSBRDF_RGBD.png\r\n * * Default 16bit pixel depth texture: https://assets.babylonjs.com/environments/correlatedMSBRDF.dds\r\n * * LEGACY Default None correlated https://assets.babylonjs.com/environments/uncorrelatedBRDF_RGBD.png\r\n * * LEGACY Default None correlated 16bit pixel depth https://assets.babylonjs.com/environments/uncorrelatedBRDF.dds\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public environmentBRDFTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Force normal to face away from face.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\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 normalmap values.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public enableSpecularAntiAliasing = 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 */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\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 */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useRadianceOcclusion = true;\r\n\r\n /**\r\n * If set to true, no lighting calculations will be applied.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public 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 @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public applyDecalMapAfterDetailMap = false;\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 * This stores the direct, emissive, environment, and specular light intensities into a Vector4.\r\n */\r\n private _lightingInfos: Vector4 = new Vector4(this.directIntensity, 1.0, this.environmentIntensity, 1.0);\r\n\r\n /**\r\n * Stores the radiance (and, possibly, irradiance) values in a texture.\r\n * @internal\r\n */\r\n public _radianceTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Specifies that the specular weight will be read from the alpha channel.\r\n * This is for compatibility with glTF's KHR_materials_specular extension.\r\n * @internal\r\n */\r\n public _useSpecularWeightFromAlpha = false;\r\n\r\n /**\r\n * Specifies that the specular weight will be read from the alpha channel of the specular color texture.\r\n * This is for compatibility with glTF's KHR_materials_specular extension.\r\n * @internal\r\n */\r\n public _useSpecularWeightFromSpecularColorTexture = false;\r\n\r\n /**\r\n * Specifies if the material uses anisotropy weight read from the geometry tangent texture's blue channel.\r\n * This is for compatibility with glTF's anisotropy extension.\r\n * @internal\r\n */\r\n public _useSpecularRoughnessAnisotropyFromTangentTexture = false;\r\n\r\n /**\r\n * Specifies if the material uses coat anisotropy weight read from the coat's geometry tangent texture's blue channel.\r\n * This is for compatibility with glTF's clearcoat_anisotropy extension.\r\n * @internal\r\n */\r\n public _useCoatRoughnessAnisotropyFromTangentTexture = false;\r\n\r\n /**\r\n * Assume the anisotropy data is stored in the format specified by\r\n * KHR_materials_anisotropy.\r\n * @internal\r\n */\r\n public _useGltfStyleAnisotropy = 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 from the base color texture's alpha channel.\r\n * This is for compatibility with glTF.\r\n * @internal\r\n */\r\n public _useAlphaFromBaseColorTexture = false;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the ambient occlusion information in its red channel.\r\n * This is for compatibility with glTF.\r\n * @internal\r\n */\r\n public _useAmbientOcclusionFromMetallicTextureRed = false;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the roughness information in its green channel.\r\n * This is for compatibility with glTF.\r\n * @internal\r\n */\r\n public _useRoughnessFromMetallicTextureGreen = false;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the metallic information in its blue channel.\r\n * This is for compatibility with glTF.\r\n * @internal\r\n */\r\n public _useMetallicFromMetallicTextureBlue = false;\r\n\r\n /**\r\n * Specifies if the thin film thickness is stored in the green channel of the thin film thickness texture.\r\n */\r\n public _useThinFilmThicknessFromTextureGreen = 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 = Material.LIGHTFALLOFF_PHYSICAL;\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 normal map in parallax mode.\r\n * @internal\r\n */\r\n public _useParallax = false;\r\n\r\n /**\r\n * Allows using the normal 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 * Specifies the environment BRDF texture used to compute the scale and offset roughness values\r\n * from cos theta and roughness for the fuzz layer:\r\n * https://github.com/tizian/ltc-sheen?tab=readme-ov-file\r\n * @internal\r\n */\r\n public _environmentFuzzBRDFTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Force the shader to compute irradiance in the fragment shader in order to take normal mapping into 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 private _fuzzSampleNumber: number = 4;\r\n\r\n /**\r\n * The number of samples used to compute the fuzz IBL lighting.\r\n */\r\n public get fuzzSampleNumber(): number {\r\n return this._fuzzSampleNumber;\r\n }\r\n public set fuzzSampleNumber(n: number) {\r\n this._fuzzSampleNumber = 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 normalmap 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 * 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 additional PrePass parameters for the material.\r\n */\r\n public readonly prePassConfiguration: PrePassConfiguration;\r\n\r\n protected _cacheHasRenderTargetTextures = false;\r\n\r\n /**\r\n * Instantiates a new OpenPBRMaterial 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 || OpenPBRMaterial.ForceGLSL);\r\n // TODO: Check if we're running WebGL 2.0 or above\r\n if (this.getScene() && !this.getScene()?.getEngine().isWebGPU && (this.getScene().getEngine() as Engine).webGLVersion < 2) {\r\n Logger.Error(\"OpenPBRMaterial: WebGL 2.0 or above is required for this material.\");\r\n }\r\n\r\n if (!OpenPBRMaterial._noiseTextures[this.getScene().uniqueId]) {\r\n OpenPBRMaterial._noiseTextures[this.getScene().uniqueId] = new Texture(\r\n \"https://assets.babylonjs.com/textures/blue_noise/blue_noise_rgb.png\",\r\n this.getScene(),\r\n false,\r\n true,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE\r\n );\r\n this.getScene().onDisposeObservable.addOnce(() => {\r\n OpenPBRMaterial._noiseTextures[this.getScene().uniqueId]?.dispose();\r\n delete OpenPBRMaterial._noiseTextures[this.getScene().uniqueId];\r\n });\r\n }\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._radianceTexture && this._radianceTexture.isRenderTarget) {\r\n this._renderTargets.push(<RenderTargetTexture>this._radianceTexture);\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._environmentFuzzBRDFTexture = GetEnvironmentFuzzBRDFTexture(this.getScene());\r\n this.prePassConfiguration = new PrePassConfiguration();\r\n\r\n // Build the internal property list that can be used to generate and update the uniform buffer\r\n this._propertyList = {};\r\n for (const key of Object.getOwnPropertyNames(this)) {\r\n const value = (this as any)[key];\r\n if (value instanceof Property) {\r\n this._propertyList[key] = value;\r\n }\r\n }\r\n // Build the internal uniforms list that is used for combining and updating\r\n // property values in the uniform buffer\r\n const propertyKeys = Object.keys(this._propertyList);\r\n propertyKeys.forEach((key) => {\r\n const prop = this._propertyList[key];\r\n let uniform = this._uniformsList[prop.targetUniformName];\r\n if (!uniform) {\r\n uniform = new Uniform(prop.targetUniformName, prop.targetUniformComponentNum);\r\n this._uniformsList[prop.targetUniformName] = uniform;\r\n } else if (uniform.numComponents !== prop.targetUniformComponentNum) {\r\n Logger.Error(`Uniform ${prop.targetUniformName} already exists of size ${uniform.numComponents}, but trying to set it to ${prop.targetUniformComponentNum}.`);\r\n }\r\n uniform.linkedProperties[prop.name] = prop;\r\n });\r\n\r\n // Build the internal list of samplers\r\n this._samplersList = {};\r\n for (const key of Object.getOwnPropertyNames(this)) {\r\n const value = (this as any)[key];\r\n if (value instanceof Sampler) {\r\n this._samplersList[key] = value;\r\n }\r\n }\r\n\r\n // For each sampler in _samplersList, add defines to be added to OpenPBRMaterialDefines\r\n for (const samplerKey in this._samplersList) {\r\n const sampler = this._samplersList[samplerKey];\r\n const defineName = sampler.textureDefine;\r\n this._samplerDefines[defineName] = { type: \"boolean\", default: false };\r\n this._samplerDefines[defineName + \"DIRECTUV\"] = { type: \"number\", default: 0 };\r\n this._samplerDefines[defineName + \"_GAMMA\"] = { type: \"boolean\", default: false };\r\n }\r\n\r\n // Arg. Why do I have to add these references to get rid of the linting errors?\r\n this._baseWeight;\r\n this._baseWeightTexture;\r\n this._baseColor;\r\n this._baseColorTexture;\r\n this._baseDiffuseRoughness;\r\n this._baseDiffuseRoughnessTexture;\r\n this._baseMetalness;\r\n this._baseMetalnessTexture;\r\n this._specularWeight;\r\n this._specularWeightTexture;\r\n this._specularColor;\r\n this._specularColorTexture;\r\n this._specularRoughness;\r\n this._specularIor;\r\n this._specularRoughnessTexture;\r\n this._specularRoughnessAnisotropy;\r\n this._specularRoughnessAnisotropyTexture;\r\n this._coatWeight;\r\n this._coatWeightTexture;\r\n this._coatColor;\r\n this._coatColorTexture;\r\n this._coatRoughness;\r\n this._coatRoughnessTexture;\r\n this._coatRoughnessAnisotropy;\r\n this._coatRoughnessAnisotropyTexture;\r\n this._coatIor;\r\n this._coatDarkening;\r\n this._coatDarkeningTexture;\r\n this._fuzzWeight;\r\n this._fuzzWeightTexture;\r\n this._fuzzColor;\r\n this._fuzzColorTexture;\r\n this._fuzzRoughness;\r\n this._fuzzRoughnessTexture;\r\n this._geometryNormalTexture;\r\n this._geometryTangent;\r\n this._geometryTangentTexture;\r\n this._geometryCoatNormalTexture;\r\n this._geometryCoatTangent;\r\n this._geometryCoatTangentTexture;\r\n this._geometryOpacity;\r\n this._geometryOpacityTexture;\r\n this._thinFilmWeight;\r\n this._thinFilmWeightTexture;\r\n this._thinFilmThickness;\r\n this._thinFilmThicknessMin;\r\n this._thinFilmThicknessTexture;\r\n this._thinFilmIor;\r\n this._emissionLuminance;\r\n this._emissionColor;\r\n this._emissionColorTexture;\r\n this._ambientOcclusionTexture;\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._radianceTexture && this._radianceTexture.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 \"OpenPBRMaterial\";\r\n }\r\n\r\n protected override _transparencyMode: number = Material.MATERIAL_OPAQUE;\r\n\r\n @serialize()\r\n public override get transparencyMode(): number {\r\n return this._transparencyMode;\r\n }\r\n\r\n public override set transparencyMode(value: number) {\r\n if (this._transparencyMode === value) {\r\n return;\r\n }\r\n\r\n this._transparencyMode = value;\r\n\r\n this._markAllSubMeshesAsTexturesAndMiscDirty();\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 _shouldUseAlphaFromBaseColorTexture(): boolean {\r\n return this._hasAlphaChannel() && this._transparencyMode !== Material.MATERIAL_OPAQUE && !this.geometryOpacityTexture;\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.baseColorTexture != null && this.baseColorTexture.hasAlpha && this._useAlphaFromBaseColorTexture) || this.geometryOpacityTexture != null;\r\n }\r\n\r\n /**\r\n * Makes a duplicate of the current material.\r\n * @param name - name to use for the new material.\r\n * @param cloneTexturesOnlyOnce - if a texture is used in more than one channel (e.g baseColor and opacity), only clone it once and reuse it on the other channels. Default false.\r\n * @param rootUrl defines the root URL to use to load textures\r\n * @returns cloned material instance\r\n */\r\n public override clone(name: string, cloneTexturesOnlyOnce: boolean = true, rootUrl = \"\"): OpenPBRMaterial {\r\n const clone = SerializationHelper.Clone(() => new OpenPBRMaterial(name, this.getScene()), this, { cloneTexturesOnlyOnce });\r\n\r\n clone.id = name;\r\n clone.name = name;\r\n\r\n this.stencil.copyTo(clone.stencil);\r\n\r\n this._clonePlugins(clone, rootUrl);\r\n\r\n return clone;\r\n }\r\n\r\n /**\r\n * Serializes this PBR Material.\r\n * @returns - An object with the serialized material.\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.customType = \"BABYLON.OpenPBRMaterial\";\r\n\r\n return serializationObject;\r\n }\r\n\r\n // Statics\r\n /**\r\n * Parses a PBR Material from a serialized object.\r\n * @param source - Serialized object.\r\n * @param scene - BJS scene instance.\r\n * @param rootUrl - url for the scene object\r\n * @returns - OpenPBRMaterial\r\n */\r\n public static override Parse(source: any, scene: Scene, rootUrl: string): OpenPBRMaterial {\r\n const material = SerializationHelper.Parse(() => new OpenPBRMaterial(source.name, scene), source, scene, rootUrl);\r\n\r\n if (source.stencil) {\r\n material.stencil.parse(source.stencil, scene, rootUrl);\r\n }\r\n\r\n Material._ParsePlugins(source, material, scene, rootUrl);\r\n\r\n return material;\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\r\n const defines = new OpenPBRMaterialDefines({\r\n ...(this._eventInfo.defineNames || {}),\r\n ...(this._samplerDefines || {}),\r\n });\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 * 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 OpenPBRMaterialDefines({\r\n ...(this._eventInfo.defineNames || {}),\r\n ...(this._samplerDefines || {}),\r\n });\r\n }\r\n\r\n const defines = <OpenPBRMaterialDefines>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 // Loop through samplers, check MaterialFlag and whether the texture is ready or not.\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n if (!sampler.value.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n const radianceTexture = this._getRadianceTexture();\r\n if (radianceTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n if (!radianceTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n if (radianceTexture.irradianceTexture) {\r\n if (!radianceTexture.irradianceTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n } else {\r\n // Not ready until spherical are ready too.\r\n if (!radianceTexture.sphericalPolynomial && radianceTexture.getInternalTexture()?._sphericalPolynomialPromise) {\r\n return false;\r\n }\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 if (this._environmentFuzzBRDFTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n // This is blocking.\r\n if (!this._environmentFuzzBRDFTexture.isReady()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (OpenPBRMaterial._noiseTextures[scene.uniqueId]) {\r\n if (!OpenPBRMaterial._noiseTextures[scene.uniqueId].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\"]) {\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(\"OpenPBRMaterial: 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 * 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(\"vTangentSpaceParams\", 2);\r\n ubo.addUniform(\"vLightingIntensity\", 4);\r\n\r\n ubo.addUniform(\"pointSize\", 1);\r\n\r\n ubo.addUniform(\"vDebugMode\", 2);\r\n\r\n ubo.addUniform(\"cameraInfo\", 4);\r\n PrepareUniformLayoutForIBL(ubo, true, true, true, true, true);\r\n\r\n Object.values(this._uniformsList).forEach((uniform) => {\r\n ubo.addUniform(uniform.name, uniform.numComponents);\r\n });\r\n\r\n Object.values(this._samplersList).forEach((sampler) => {\r\n ubo.addUniform(sampler.samplerInfoName, 2);\r\n ubo.addUniform(sampler.samplerMatrixName, 16);\r\n });\r\n\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 = <OpenPBRMaterialDefines>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 radianceTexture: Nullable<BaseTexture> = null;\r\n const ubo = this._uniformBuffer;\r\n if (mustRebind) {\r\n this.bindViewProjection(effect);\r\n radianceTexture = this._getRadianceTexture();\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 // Loop through samplers and bind info and matrix for each texture.\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n ubo.updateFloat2(sampler.samplerInfoName, sampler.value.coordinatesIndex, sampler.value.level);\r\n BindTextureMatrix(sampler.value, ubo, sampler.samplerPrefix);\r\n }\r\n }\r\n\r\n if (this.geometryNormalTexture) {\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, Color3.White(), radianceTexture, 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 Object.values(this._uniformsList).forEach((uniform) => {\r\n // If the property actually defines a uniform, update it.\r\n if (uniform.numComponents === 4) {\r\n uniform.populateVectorFromLinkedProperties(TmpVectors.Vector4[0]);\r\n ubo.updateVector4(uniform.name, TmpVectors.Vector4[0]);\r\n } else if (uniform.numComponents === 3) {\r\n uniform.populateVectorFromLinkedProperties(TmpVectors.Vector3[0]);\r\n ubo.updateVector3(uniform.name, TmpVectors.Vector3[0]);\r\n } else if (uniform.numComponents === 2) {\r\n uniform.populateVectorFromLinkedProperties(TmpVectors.Vector2[0]);\r\n ubo.updateFloat2(uniform.name, TmpVectors.Vector2[0].x, TmpVectors.Vector2[0].y);\r\n } else if (uniform.numComponents === 1) {\r\n ubo.updateFloat(uniform.name, uniform.linkedProperties[Object.keys(uniform.linkedProperties)[0]].value as number);\r\n }\r\n });\r\n\r\n // Misc\r\n this._lightingInfos.x = this.directIntensity;\r\n this._lightingInfos.y = this.emissionLuminance;\r\n this._lightingInfos.z = this.environmentIntensity * scene.environmentIntensity;\r\n this._lightingInfos.w = 1.0; // This is used to be _specularIntensity.\r\n\r\n ubo.updateVector4(\"vLightingIntensity\", this._lightingInfos);\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 // Loop through samplers and set textures\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n ubo.setTexture(sampler.samplerName, sampler.value);\r\n }\r\n }\r\n\r\n BindIBLSamplers(scene, defines, ubo, radianceTexture, this.realTimeFiltering);\r\n\r\n if (defines.ENVIRONMENTBRDF) {\r\n ubo.setTexture(\"environmentBrdfSampler\", this._environmentBRDFTexture);\r\n }\r\n\r\n if (defines.FUZZENVIRONMENTBRDF) {\r\n ubo.setTexture(\"environmentFuzzBrdfSampler\", this._environmentFuzzBRDFTexture);\r\n }\r\n\r\n if (defines.ANISOTROPIC || defines.FUZZ) {\r\n ubo.setTexture(\"blueNoiseSampler\", OpenPBRMaterial._noiseTextures[this.getScene().uniqueId]);\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 ((scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) || radianceTexture || mesh.receiveShadows || defines.PREPASS) {\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 // Loop through samplers and push animated textures to list.\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value && sampler.value.animations && sampler.value.animations.length > 0) {\r\n results.push(sampler.value);\r\n }\r\n }\r\n\r\n if (this._radianceTexture && this._radianceTexture.animations && this._radianceTexture.animations.length > 0) {\r\n results.push(this._radianceTexture);\r\n }\r\n\r\n return results;\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 // Loop through samplers and push active textures\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n activeTextures.push(sampler.value);\r\n }\r\n }\r\n\r\n if (this._radianceTexture) {\r\n activeTextures.push(this._radianceTexture);\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 // Loop through samplers and check each texture for equality\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value === texture) {\r\n return true;\r\n }\r\n }\r\n\r\n if (this._radianceTexture === 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 return false;\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 if (this._environmentFuzzBRDFTexture && this.getScene().environmentFuzzBRDFTexture !== this._environmentFuzzBRDFTexture) {\r\n this._environmentFuzzBRDFTexture.dispose();\r\n }\r\n\r\n // Loop through samplers and dispose the textures\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n sampler.value?.dispose();\r\n }\r\n\r\n this._radianceTexture?.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 /**\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 _getRadianceTexture(): Nullable<BaseTexture> {\r\n if (this._radianceTexture) {\r\n return this._radianceTexture;\r\n }\r\n\r\n return this.getScene().environmentTexture;\r\n }\r\n\r\n private _prepareEffect(\r\n mesh: AbstractMesh,\r\n renderingMesh: AbstractMesh,\r\n defines: OpenPBRMaterialDefines,\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 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.NORMAL) {\r\n fallbacks.addFallback(fallbackRank++, \"NORMAL\");\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 = \"openpbr\";\r\n\r\n const uniforms = [\r\n \"world\",\r\n \"view\",\r\n \"viewProjection\",\r\n \"vEyePosition\",\r\n \"vLightsType\",\r\n \"visibility\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"pointSize\",\r\n \"mBones\",\r\n \"normalMatrix\",\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 for (const uniformName in this._uniformsList) {\r\n uniforms.push(uniformName);\r\n }\r\n\r\n const samplers = [\r\n \"environmentBrdfSampler\",\r\n \"environmentFuzzBrdfSampler\",\r\n \"blueNoiseSampler\",\r\n \"boneSampler\",\r\n \"morphTargets\",\r\n \"oitDepthSampler\",\r\n \"oitFrontColorSampler\",\r\n \"areaLightsLTC1Sampler\",\r\n \"areaLightsLTC2Sampler\",\r\n ];\r\n\r\n if (defines.FUZZENVIRONMENTBRDF) {\r\n samplers.push(\"environmentFuzzBrdfSampler\");\r\n }\r\n\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n samplers.push(sampler.samplerName);\r\n\r\n // Push uniforms for texture infos and matrix\r\n uniforms.push(sampler.samplerInfoName);\r\n uniforms.push(sampler.samplerMatrixName);\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/openpbr.vertex\"), import(\"../../ShadersWGSL/openpbr.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../../Shaders/openpbr.vertex\"), import(\"../../Shaders/openpbr.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: OpenPBRMaterialDefines,\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 = true;\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 // Loop through samplers and prepare defines for each texture\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n PrepareDefinesForMergedUV(sampler.value, defines, sampler.textureDefine);\r\n defines[sampler.textureDefine + \"_GAMMA\"] = sampler.value.gammaSpace;\r\n } else {\r\n defines[sampler.textureDefine] = false;\r\n }\r\n }\r\n\r\n const radianceTexture = this._getRadianceTexture();\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, radianceTexture, defines, this.realTimeFiltering, this.realTimeFilteringQuality, !useSHInFragment);\r\n\r\n if (this._baseMetalnessTexture) {\r\n defines.AOSTOREINMETALMAPRED = this._useAmbientOcclusionFromMetallicTextureRed;\r\n }\r\n\r\n defines.SPECULAR_WEIGHT_IN_ALPHA = this._useSpecularWeightFromAlpha;\r\n defines.SPECULAR_WEIGHT_FROM_SPECULAR_COLOR_TEXTURE = this._useSpecularWeightFromSpecularColorTexture;\r\n defines.SPECULAR_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE = this._useSpecularRoughnessAnisotropyFromTangentTexture;\r\n defines.COAT_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE = this._useCoatRoughnessAnisotropyFromTangentTexture;\r\n defines.ROUGHNESSSTOREINMETALMAPGREEN = this._useRoughnessFromMetallicTextureGreen;\r\n defines.METALLNESSSTOREINMETALMAPBLUE = this._useMetallicFromMetallicTextureBlue;\r\n defines.THIN_FILM_THICKNESS_FROM_THIN_FILM_TEXTURE = this._useThinFilmThicknessFromTextureGreen;\r\n\r\n if (this.geometryNormalTexture) {\r\n if (this._useParallax && this.baseColorTexture && 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 defines.OBJECTSPACE_NORMALMAP = this._useObjectSpaceNormalMap;\r\n } else {\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._environmentFuzzBRDFTexture) {\r\n defines.FUZZENVIRONMENTBRDF = true;\r\n } else {\r\n defines.FUZZENVIRONMENTBRDF = false;\r\n }\r\n\r\n if (this._shouldUseAlphaFromBaseColorTexture()) {\r\n defines.ALPHA_FROM_BASE_COLOR_TEXTURE = true;\r\n } else {\r\n defines.ALPHA_FROM_BASE_COLOR_TEXTURE = false;\r\n }\r\n }\r\n\r\n if (this._lightFalloff === Material.LIGHTFALLOFF_STANDARD) {\r\n defines.USEPHYSICALLIGHTFALLOFF = false;\r\n defines.USEGLTFLIGHTFALLOFF = false;\r\n } else if (this._lightFalloff === Material.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 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 }\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 if (\r\n (this.specularRoughnessAnisotropy > 0.0 || this.coatRoughnessAnisotropy > 0.0) &&\r\n OpenPBRMaterial._noiseTextures[scene.uniqueId] &&\r\n MaterialFlags.ReflectionTextureEnabled\r\n ) {\r\n // ANISOTROPIC is used to include common shader functions needed for anisotropy\r\n // ANISOTROPIC_BASE is used to process anisotropy for the base layer\r\n // ANISOTROPIC_COAT is used to process anisotropy for the coat layer\r\n defines.ANISOTROPIC = true;\r\n if (!mesh.isVerticesDataPresent(VertexBuffer.TangentKind)) {\r\n defines._needUVs = true;\r\n defines.MAINUV1 = true;\r\n }\r\n if (this._useGltfStyleAnisotropy) {\r\n defines.USE_GLTF_STYLE_ANISOTROPY = true;\r\n }\r\n defines.ANISOTROPIC_BASE = this.specularRoughnessAnisotropy > 0.0;\r\n defines.ANISOTROPIC_COAT = this.coatRoughnessAnisotropy > 0.0;\r\n } else {\r\n defines.ANISOTROPIC = false;\r\n defines.USE_GLTF_STYLE_ANISOTROPY = false;\r\n defines.ANISOTROPIC_BASE = false;\r\n defines.ANISOTROPIC_COAT = false;\r\n }\r\n\r\n defines.THIN_FILM = this.thinFilmWeight > 0.0;\r\n defines.IRIDESCENCE = this.thinFilmWeight > 0.0;\r\n\r\n defines.FUZZ = this.fuzzWeight > 0 && MaterialFlags.ReflectionTextureEnabled;\r\n if (defines.FUZZ) {\r\n if (!mesh.isVerticesDataPresent(VertexBuffer.TangentKind)) {\r\n defines._needUVs = true;\r\n defines.MAINUV1 = true;\r\n }\r\n this._environmentFuzzBRDFTexture = GetEnvironmentFuzzBRDFTexture(this.getScene());\r\n defines.FUZZ_IBL_SAMPLES = this.fuzzSampleNumber;\r\n } else {\r\n this._environmentFuzzBRDFTexture = null;\r\n defines.FUZZENVIRONMENTBRDF = false;\r\n defines.FUZZ_IBL_SAMPLES = 0;\r\n }\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 !== Material.MATERIAL_OPAQUE);\r\n\r\n // External config\r\n this._callbackPluginEventPrepareDefines(this._eventInfo);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.OpenPBRMaterial\", OpenPBRMaterial);\r\n"]}
1
+ {"version":3,"file":"openpbrMaterial.js","sourceRoot":"","sources":["../../../../../dev/core/src/Materials/PBR/openpbrMaterial.ts"],"names":[],"mappings":";AAAA,yDAAyD;AACzD,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChK,OAAO,EAAE,yBAAyB,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAEvG,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAE/E,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAI1E,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,2BAA2B,EAAE,MAAM,yCAAyC,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EACH,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,YAAY,EACZ,yBAAyB,EACzB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,yBAAyB,EACzB,wCAAwC,EACxC,yBAAyB,EACzB,6BAA6B,EAC7B,gCAAgC,EAChC,2BAA2B,EAC3B,iCAAiC,EACjC,uBAAuB,EACvB,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EACrB,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,8BAA8B,EAC9B,gCAAgC,EAChC,0BAA0B,GAC7B,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,+BAA+B,EAAE,MAAM,qCAAqC,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,MAAM,EAAE,6BAAyB;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,mCAA+B;AAGtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAInD,MAAM,yBAAyB,GAAG,EAAE,MAAM,EAAE,IAAyB,EAAE,OAAO,EAAE,IAAoC,EAAE,CAAC;AAEvH,MAAM,OAAO;IAIF,kCAAkC,CAAC,MAAmC;QACzE,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;YACtC,IAAI,eAAe,GAAG,UAAU,IAAI,IAAI,CAAC,4BAA4B,GAAG,eAAe,GAAG,UAAU,EAAE,CAAC;gBACnG,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;oBAClB,MAAM,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,IAAI,mCAAmC,CAAC,CAAC;gBACjF,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,KAAK,CAAC,SAAS,UAAU,aAAa,IAAI,CAAC,IAAI,uBAAuB,eAAe,sCAAsC,CAAC,CAAC;gBACxI,CAAC;gBACD,OAAO;YACX,CAAC;YACD,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACjC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,4BAA4B,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACtE,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAC7E,CAAC;QACL,CAAC;QACD,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IACD,YAAmB,IAAY,EAAE,YAAoB;QAtB9C,qBAAgB,GAA+C,EAAE,CAAC;QAuBrE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACtC,CAAC;;AACc,iBAAS,GAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,AAAzB,CAA0B;AAKtD;;GAEG;AACH,MAAM,QAAQ;IAcV;;;;;;;;OAQG;IACH,YAAY,IAAY,EAAE,YAAe,EAAE,iBAAyB,EAAE,yBAAiC,EAAE,+BAAuC,CAAC;QAlBjJ,4CAA4C;QAE5C;;;WAGG;QACI,8BAAyB,GAAW,CAAC,CAAC,CAAC,kBAAkB;QACzD,iCAA4B,GAAW,CAAC,CAAC;QAY5C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;QAC1B,IAAI,CAAC,yBAAyB,GAAG,yBAAyB,CAAC;QAC3D,IAAI,CAAC,4BAA4B,GAAG,4BAA4B,CAAC;IACrE,CAAC;IAED;;OAEG;IACH,IAAW,aAAa;QACpB,IAAI,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;YACxC,OAAO,CAAC,CAAC;QACb,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;CACJ;AAED,MAAM,OAAO;IAMT;;;;;OAKG;IACH,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;IAC1C,CAAC;IACD;;;;;OAKG;IACH,IAAW,eAAe;QACtB,OAAO,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IACpG,CAAC;IACD;;;;;;OAMG;IACH,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;IACzC,CAAC;IACD;;;;;OAKG;IACH,YAAY,IAAY,EAAE,aAAqB,EAAE,aAAqB;QAtC/D,UAAK,GAA0B,IAAI,CAAC,CAAC,iCAAiC;QACtE,kBAAa,GAAW,EAAE,CAAC,CAAC,wCAAwC;QACpE,kBAAa,GAAW,EAAE,CAAC,CAAC,iDAAiD;QAqChF,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;CACJ;AAED,MAAM,0BAA2B,SAAQ,cAAc,CAAC,eAAe,CAAC;CAAG;AAC3E;;;GAGG;AACH,MAAM,OAAO,sBAAuB,SAAQ,2BAA2B,CAAC,0BAA0B,CAAC;IAiN/F;;;OAGG;IACH,YAAY,kBAAuE;QAC/E,KAAK,CAAC,kBAAkB,CAAC,CAAC;QArNvB,gBAAW,GAAG,GAAG,CAAC;QAClB,uBAAkB,GAAG,KAAK,CAAC;QAC3B,sBAAiB,GAAG,KAAK,CAAC;QAE1B,gBAAW,GAAG,KAAK,CAAC;QAEpB,mCAA8B,GAAG,KAAK,CAAC;QAEvC,gBAAW,GAAG,KAAK,CAAC;QACpB,cAAS,GAAG,KAAK,CAAC;QAClB,iBAAY,GAAG,KAAK,CAAC;QACrB,eAAU,GAAG,KAAK,CAAC;QACnB,kCAA6B,GAAG,KAAK,CAAC;QACtC,mBAAc,GAAG,KAAK,CAAC;QACvB,qBAAgB,GAAG,KAAK,CAAC;QAEzB,uBAAkB,GAAG,KAAK,CAAC;QAC3B,yBAAoB,GAAG,CAAC,CAAC;QACzB,iBAAY,GAAG,KAAK,CAAC;QAErB,yBAAoB,GAAG,IAAI,CAAC;QAE5B,qBAAgB,GAAG,IAAI,CAAC;QACxB,kCAA6B,GAAG,KAAK,CAAC;QACtC,kCAA6B,GAAG,KAAK,CAAC;QACtC,kCAA6B,GAAG,KAAK,CAAC;QACtC,yBAAoB,GAAG,KAAK,CAAC;QAC7B,6BAAwB,GAAG,KAAK,CAAC;QACjC,gDAA2C,GAAG,KAAK,CAAC;QACpD,uDAAkD,GAAG,KAAK,CAAC;QAC3D,mDAA8C,GAAG,KAAK,CAAC;QACvD,8BAAyB,GAAG,KAAK,CAAC;QAClC,+CAA0C,GAAG,KAAK,CAAC;QAEnD,oBAAe,GAAG,KAAK,CAAC;QACxB,yBAAoB,GAAG,KAAK,CAAC;QAC7B,wBAAmB,GAAG,KAAK,CAAC;QAE5B,WAAM,GAAG,KAAK,CAAC;QACf,YAAO,GAAG,KAAK,CAAC;QAChB,0BAAqB,GAAG,KAAK,CAAC;QAC9B,aAAQ,GAAG,KAAK,CAAC;QACjB,iBAAY,GAAG,KAAK,CAAC;QACrB,sBAAiB,GAAG,KAAK,CAAC;QAC1B,kBAAa,GAAG,IAAI,CAAC;QAC5B;;WAEG;QACI,gBAAW,GAAG,KAAK,CAAC;QAC3B;;WAEG;QACI,wBAAmB,GAAG,IAAI,CAAC;QAClC;;WAEG;QACI,qBAAgB,GAAG,KAAK,CAAC;QAChC;;WAEG;QACI,qBAAgB,GAAG,KAAK,CAAC;QAEhC;;WAEG;QACI,qBAAgB,GAAG,CAAC,CAAC;QAE5B;;WAEG;QACI,SAAI,GAAG,KAAK,CAAC;QAEpB;;WAEG;QACI,cAAS,GAAG,KAAK,CAAC;QAEzB;;;WAGG;QACI,gBAAW,GAAG,KAAK,CAAC;QAEpB,eAAU,GAAG,KAAK,CAAC;QACnB,qBAAgB,GAAG,KAAK,CAAC;QACzB,4BAAuB,GAAG,KAAK,CAAC;QAChC,yBAAoB,GAAG,KAAK,CAAC;QAC7B,wBAAmB,GAAG,KAAK,CAAC;QAC5B,kCAA6B,GAAG,KAAK,CAAC;QACtC,6BAAwB,GAAG,KAAK,CAAC;QACjC,yBAAoB,GAAG,KAAK,CAAC;QAC7B,2BAAsB,GAAG,KAAK,CAAC;QAC/B,kCAA6B,GAAG,KAAK,CAAC;QACtC,wCAAmC,GAAG,KAAK,CAAC;QAC5C,gDAA2C,GAAG,KAAK,CAAC;QACpD,mBAAc,GAAG,KAAK,CAAC;QACvB,kCAA6B,GAAG,KAAK,CAAC;QACtC,qBAAgB,GAAG,KAAK,CAAC;QACzB,sCAAiC,GAAG,KAAK,CAAC;QAC1C,yBAAoB,GAAG,KAAK,CAAC;QAC7B,4BAAuB,GAAG,KAAK,CAAC;QAChC,yBAAoB,GAAG,KAAK,CAAC;QAC7B,oBAAe,GAAG,KAAK,CAAC;QACxB,mBAAc,GAAG,KAAK,CAAC;QACvB,sBAAiB,GAAG,KAAK,CAAC;QAC1B,qBAAgB,GAAG,KAAK,CAAC;QAEzB,cAAS,GAAG,KAAK,CAAC;QAClB,mBAAc,GAAG,KAAK,CAAC;QACvB,mBAAc,GAAG,KAAK,CAAC;QAEvB,YAAO,GAAG,KAAK,CAAC;QAChB,kBAAa,GAAG,KAAK,CAAC;QACtB,wBAAmB,GAAG,CAAC,CAAC,CAAC;QACzB,uBAAkB,GAAG,KAAK,CAAC;QAC3B,6BAAwB,GAAG,CAAC,CAAC,CAAC;QAC9B,mBAAc,GAAG,KAAK,CAAC;QACvB,yBAAoB,GAAG,CAAC,CAAC,CAAC;QAC1B,wBAAmB,GAAG,KAAK,CAAC;QAC5B,8BAAyB,GAAG,CAAC,CAAC,CAAC;QAC/B,kBAAa,GAAG,KAAK,CAAC;QACtB,wBAAmB,GAAG,CAAC,CAAC,CAAC;QACzB,8BAAyB,GAAG,KAAK,CAAC;QAClC,oCAA+B,GAAG,CAAC,CAAC,CAAC;QACrC,kCAA6B,GAAG,KAAK,CAAC;QACtC,wCAAmC,GAAG,CAAC,CAAC,CAAC;QACzC,mBAAc,GAAG,KAAK,CAAC;QACvB,yBAAoB,GAAG,CAAC,CAAC,CAAC;QAC1B,8BAAyB,GAAG,KAAK,CAAC;QAClC,yBAAoB,GAAG,KAAK,CAAC;QAC7B,+BAA0B,GAAG,CAAC,CAAC,CAAC;QAChC,qBAAgB,GAAG,KAAK,CAAC;QACzB,2BAAsB,GAAG,CAAC,CAAC,CAAC;QAC5B,2BAAsB,GAAG,KAAK,CAAC;QAC/B,iCAA4B,GAAG,CAAC,CAAC,CAAC;QAClC,qBAAgB,GAAG,KAAK,CAAC;QACzB,2BAAsB,GAAG,CAAC,CAAC,CAAC;QAC5B,4BAAuB,GAAG,KAAK,CAAC;QAChC,kCAA6B,GAAG,CAAC,CAAC,CAAC;QACnC,yBAAoB,GAAG,KAAK,CAAC;QAC7B,+BAA0B,GAAG,CAAC,CAAC,CAAC;QAChC,oBAAe,GAAG,CAAC,CAAC;QAEpB,yBAAoB,GAAG,CAAC,CAAC;QACzB,iBAAY,GAAG,CAAC,CAAC;QACjB,gBAAW,GAAG,KAAK,CAAC;QACpB,2BAAsB,GAAG,KAAK,CAAC;QAE/B,sBAAiB,GAAG,KAAK,CAAC;QAE1B,iBAAY,GAAG,KAAK,CAAC;QACrB,0BAAqB,GAAG,KAAK,CAAC;QAC9B,wBAAmB,GAAG,KAAK,CAAC;QAC5B,yBAAoB,GAAG,KAAK,CAAC;QAC7B,oBAAe,GAAG,KAAK,CAAC;QACxB,qBAAgB,GAAG,KAAK,CAAC;QACzB,uBAAkB,GAAG,KAAK,CAAC;QAC3B,oCAA+B,GAAG,KAAK,CAAC;QACxC,kCAA6B,GAAG,KAAK,CAAC;QACtC,mCAA8B,GAAG,KAAK,CAAC;QACvC,8BAAyB,GAAG,KAAK,CAAC;QAClC,+BAA0B,GAAG,KAAK,CAAC;QACnC,iCAA4B,GAAG,KAAK,CAAC;QACrC,0BAAqB,GAAG,CAAC,CAAC;QAC1B,yBAAoB,GAAG,KAAK,CAAC;QAE7B,4BAAuB,GAAG,KAAK,CAAC;QAChC,wBAAmB,GAAG,KAAK,CAAC;QAC5B,qBAAgB,GAAG,KAAK,CAAC;QACzB,aAAQ,GAAG,KAAK,CAAC;QACjB,gBAAW,GAAG,KAAK,CAAC;QACpB,cAAS,GAAG,KAAK,CAAC;QAClB,eAAU,GAAG,KAAK,CAAC;QACnB,eAAU,GAAG,KAAK,CAAC;QACnB,eAAU,GAAG,KAAK,CAAC;QACnB,eAAU,GAAG,KAAK,CAAC;QACnB,eAAU,GAAG,KAAK,CAAC;QACnB,cAAS,GAAG,KAAK,CAAC;QAClB,QAAG,GAAG,KAAK,CAAC;QACZ,qBAAgB,GAAG,KAAK,CAAC;QACzB,wBAAmB,GAAG,KAAK,CAAC;QAC5B,uBAAkB,GAAG,KAAK,CAAC;QAC3B,uBAAkB,GAAG,IAAI,CAAC;QAE1B,uBAAkB,GAAG,KAAK,CAAC;QAE3B,eAAU,GAAG,KAAK,CAAC;QAEnB,UAAK,GAAG,KAAK,CAAC;QAEd,uBAAkB,GAAG,KAAK,CAAC;QAE3B,cAAS,GAAG,CAAC,CAAC;QAEd,sBAAiB,GAAG,CAAC,CAAC;QACtB,qBAAgB,GAAG,CAAC,CAAC;QAE5B,eAAe;QACf,6BAAwB,GAAG,IAAI,CAAC;QAChC,gCAA2B,GAAG,IAAI,CAAC;QACnC,wBAAmB,GAAG,IAAI,CAAC;QAC3B,4CAAuC,GAAG,IAAI,CAAC;QAC/C,qCAAgC,GAAG,IAAI,CAAC;QACxC,wCAAmC,GAAG,KAAK,CAAC;QAC5C,uBAAkB,GAAG,SAAS,CAAC,mCAAmC,CAAC;QACnE,8BAAyB,GAAG,SAAS,CAAC,0CAA0C,CAAC;QACjF,6BAAwB,GAAG,SAAS,CAAC,yCAAyC,CAAC;QAQ3E,IAAI,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAED;;OAEG;IACa,KAAK;QACjB,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC9B,CAAC;CACJ;AAED,MAAM,mBAAoB,SAAQ,oBAAoB,CAAC,YAAY,CAAC;CAAG;AACvE;;;;;GAKG;AACH,MAAM,OAAO,eAAgB,SAAQ,mBAAmB;IA8WpD;;;OAGG;IACH,IAAW,oBAAoB;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,IAAW,oBAAoB,CAAC,KAAa;QACzC,IAAI,CAAC,eAAe,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACzE,CAAC;IAgCD;;OAEG;IACH,IAAW,wBAAwB;QAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED;;OAEG;IACH,IAAW,wBAAwB,CAAC,KAAa;QAC7C,IAAI,CAAC,mBAAmB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7E,CAAC;IAmLD;;;;OAIG;IAEH,IAAW,uBAAuB;QAC9B,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,qBAAqB,CAAC;IACjE,CAAC;IAED;;;;OAIG;IACH,IAAW,uBAAuB,CAAC,KAAc;QAC7C,IAAI,KAAK,KAAK,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACzC,qCAAqC;YACrC,IAAI,CAAC,gCAAgC,EAAE,CAAC;YAExC,IAAI,KAAK,EAAE,CAAC;gBACR,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,qBAAqB,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,qBAAqB,CAAC;YACxD,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;OAGG;IAEH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,iBAAiB,CAAC;IAC7D,CAAC;IAED;;;OAGG;IACH,IAAW,mBAAmB,CAAC,KAAc;QACzC,IAAI,KAAK,KAAK,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACrC,qCAAqC;YACrC,IAAI,CAAC,gCAAgC,EAAE,CAAC;YAExC,IAAI,KAAK,EAAE,CAAC;gBACR,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,iBAAiB,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,qBAAqB,CAAC;YACxD,CAAC;QACL,CAAC;IACL,CAAC;IA6VD,uCAAuC;IACvC,IAAW,uBAAuB;QAC9B,OAAO,IAAI,CAAC,wBAAwB,CAAC;IACzC,CAAC;IACD,IAAW,uBAAuB,CAAC,KAA0B;QACzD,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IAC1D,CAAC;IAGD;;OAEG;IACH,IAAW,iBAAiB;QACxB,OAAO,CAAC,IAAI,CAAC,kBAAkB,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC;IAChF,CAAC;IACD,IAAW,iBAAiB,CAAC,CAAU;QACnC,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,IAAW,0BAA0B;QACjC,OAAO,OAAO,IAAI,CAAC,kBAAkB,KAAK,SAAS,CAAC;IACxD,CAAC;IAGD;;OAEG;IACH,IAAW,wBAAwB;QAC/B,OAAO,IAAI,CAAC,yBAAyB,IAAI,SAAS,CAAC,6BAA6B,CAAC;IACrF,CAAC;IACD,IAAW,wBAAwB,CAAC,CAAS;QACzC,IAAI,CAAC,yBAAyB,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IAC1D,CAAC;IAID;;OAEG;IACH,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IACD,IAAW,gBAAgB,CAAC,CAAS;QACjC,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IAC1D,CAAC;IACD;;OAEG;IACH,IAAW,iCAAiC;QACxC,OAAO,OAAO,IAAI,CAAC,yBAAyB,KAAK,QAAQ,CAAC;IAC9D,CAAC;IACD;;OAEG;IACH,IAAoB,cAAc;QAC9B,OAAO,IAAI,CAAC;IAChB,CAAC;IAsED;;;;;;OAMG;IACH,YAAY,IAAY,EAAE,KAAa,EAAE,SAAS,GAAG,KAAK;QACtD,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC;QA5mClE,gBAAW,GAAqB,IAAI,QAAQ,CAAS,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;QAUzF,uBAAkB,GAAY,IAAI,OAAO,CAAC,aAAa,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;QAUtF,eAAU,GAAqB,IAAI,QAAQ,CAAS,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QAUnG,sBAAiB,GAAY,IAAI,OAAO,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAUlF,0BAAqB,GAAqB,IAAI,QAAQ,CAAS,wBAAwB,EAAE,CAAC,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC;QAUxH,iCAA4B,GAAY,IAAI,OAAO,CAAC,wBAAwB,EAAE,sBAAsB,EAAE,wBAAwB,CAAC,CAAC;QAUhI,mBAAc,GAAqB,IAAI,QAAQ,CAAS,gBAAgB,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAUvG,0BAAqB,GAAY,IAAI,OAAO,CAAC,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAUlG,oBAAe,GAAqB,IAAI,QAAQ,CAAS,iBAAiB,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAUzG,2BAAsB,GAAY,IAAI,OAAO,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;QAUtG,mBAAc,GAAqB,IAAI,QAAQ,CAAS,gBAAgB,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAU/G,0BAAqB,GAAY,IAAI,OAAO,CAAC,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAUlG,uBAAkB,GAAqB,IAAI,QAAQ,CAAS,oBAAoB,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAUjH,8BAAyB,GAAY,IAAI,OAAO,CAAC,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB,CAAC,CAAC;QAUlH,iCAA4B,GAAqB,IAAI,QAAQ,CAAS,+BAA+B,EAAE,CAAC,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAUvI,wCAAmC,GAAY,IAAI,OAAO,CAAC,+BAA+B,EAAE,6BAA6B,EAAE,+BAA+B,CAAC,CAAC;QAU5J,iBAAY,GAAqB,IAAI,QAAQ,CAAS,cAAc,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAUrG,gBAAW,GAAqB,IAAI,QAAQ,CAAS,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAU9F,uBAAkB,GAAY,IAAI,OAAO,CAAC,aAAa,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;QAUtF,eAAU,GAAqB,IAAI,QAAQ,CAAS,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAUtG,sBAAiB,GAAY,IAAI,OAAO,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QAUlF,mBAAc,GAAqB,IAAI,QAAQ,CAAS,gBAAgB,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAUvG,0BAAqB,GAAY,IAAI,OAAO,CAAC,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAUlG,6BAAwB,GAAqB,IAAI,QAAQ,CAAS,2BAA2B,EAAE,CAAC,EAAE,0BAA0B,EAAE,CAAC,CAAC,CAAC;QAUjI,oCAA+B,GAAY,IAAI,OAAO,CAAC,2BAA2B,EAAE,yBAAyB,EAAE,2BAA2B,CAAC,CAAC;QAU5I,aAAQ,GAAqB,IAAI,QAAQ,CAAS,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAYrF,mBAAc,GAAqB,IAAI,QAAQ,CAAS,gBAAgB,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAYvG,0BAAqB,GAAY,IAAI,OAAO,CAAC,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAE1G;;;WAGG;QAEI,sCAAiC,GAAY,KAAK,CAAC;QASlD,gBAAW,GAAqB,IAAI,QAAQ,CAAS,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAS9F,uBAAkB,GAAY,IAAI,OAAO,CAAC,aAAa,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;QAStF,eAAU,GAAqB,IAAI,QAAQ,CAAS,YAAY,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAStG,sBAAiB,GAAY,IAAI,OAAO,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;QASlF,mBAAc,GAAqB,IAAI,QAAQ,CAAS,gBAAgB,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QASvG,0BAAqB,GAAY,IAAI,OAAO,CAAC,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAUlG,2BAAsB,GAAY,IAAI,OAAO,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;QAUtG,qBAAgB,GAAsB,IAAI,QAAQ,CAAU,kBAAkB,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,qBAAqB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAsBhI,4BAAuB,GAAY,IAAI,OAAO,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;QAU1G,+BAA0B,GAAY,IAAI,OAAO,CAAC,sBAAsB,EAAE,oBAAoB,EAAE,sBAAsB,CAAC,CAAC;QAUxH,yBAAoB,GAAsB,IAAI,QAAQ,CAAU,uBAAuB,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,sBAAsB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAwB1I,gCAA2B,GAAY,IAAI,OAAO,CAAC,uBAAuB,EAAE,qBAAqB,EAAE,uBAAuB,CAAC,CAAC;QAU5H,qBAAgB,GAAqB,IAAI,QAAQ,CAAS,kBAAkB,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAUvG,4BAAuB,GAAY,IAAI,OAAO,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;QAU1G,uBAAkB,GAAqB,IAAI,QAAQ,CAAS,oBAAoB,EAAE,GAAG,EAAE,oBAAoB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAUnH,mBAAc,GAAqB,IAAI,QAAQ,CAAS,gBAAgB,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAU/G,0BAAqB,GAAY,IAAI,OAAO,CAAC,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,CAAC,CAAC;QAQlG,oBAAe,GAAqB,IAAI,QAAQ,CAAS,kBAAkB,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAQ3G,2BAAsB,GAAY,IAAI,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;QAUxG,uBAAkB,GAAqB,IAAI,QAAQ,CAAS,qBAAqB,EAAE,GAAG,EAAE,oBAAoB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAQpH,0BAAqB,GAAqB,IAAI,QAAQ,CAAS,yBAAyB,EAAE,GAAG,EAAE,oBAAoB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAQ3H,8BAAyB,GAAY,IAAI,OAAO,CAAC,qBAAqB,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,CAAC;QAQpH,iBAAY,GAAqB,IAAI,QAAQ,CAAS,eAAe,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QASlG,6BAAwB,GAAY,IAAI,OAAO,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;QAG9G,kBAAa,GAAgC,EAAE,CAAC;QAChD,kBAAa,GAAgC,EAAE,CAAC;QAChD,oBAAe,GAAuD,EAAE,CAAC;QAIjF;;;WAGG;QAGI,oBAAe,GAAW,GAAG,CAAC;QAErC;;;WAGG;QAGI,yBAAoB,GAAW,GAAG,CAAC;QAE1C;;WAEG;QAGI,sCAAiC,GAAG,KAAK,CAAC;QAEjD;;WAEG;QAGI,mBAAc,GAAG,KAAK,CAAC;QAE9B;;WAEG;QAGI,gBAAW,GAAG,GAAG,CAAC;QAEzB;;WAEG;QAGI,8CAAyC,GAAG,KAAK,CAAC;QAEzD;;WAEG;QAGI,0BAAqB,GAAG,KAAK,CAAC;QAwDrC;;WAEG;QAGI,4BAAuB,GAAG,KAAK,CAAC;QAEvC;;WAEG;QAGI,gBAAW,GAAG,KAAK,CAAC;QAE3B;;WAEG;QAGI,yBAAoB,GAAG,KAAK,CAAC;QAEpC;;WAEG;QAGI,sBAAiB,GAAG,IAAI,CAAC;QAEhC;;WAEG;QAGI,oBAAe,GAAG,KAAK,CAAC;QAE/B;;WAEG;QAGI,8BAAyB,GAAG,KAAK,CAAC;QAEzC;;WAEG;QAGI,0BAAqB,GAAG,CAAC,CAAC;QAEjC;;WAEG;QAGI,qBAAgB,GAAG,KAAK,CAAC;QAEhC;;WAEG;QAGI,qBAAgB,GAAG,KAAK,CAAC;QAEhC;;WAEG;QAGI,qBAAgB,GAAG,KAAK,CAAC;QAEhC;;;WAGG;QAGI,oBAAe,GAAG,KAAK,CAAC;QAE/B;;;WAGG;QAGI,0BAAqB,GAAG,KAAK,CAAC;QAErC;;;;;;;WAOG;QAGI,2BAAsB,GAA0B,IAAI,CAAC;QAE5D;;WAEG;QAGI,uBAAkB,GAAG,KAAK,CAAC;QAElC;;;;WAIG;QAGI,+BAA0B,GAAG,KAAK,CAAC;QAE1C;;;WAGG;QAGI,wBAAmB,GAAG,IAAI,CAAC;QAElC;;;WAGG;QAGI,yBAAoB,GAAG,IAAI,CAAC;QAEnC;;WAEG;QAGI,UAAK,GAAG,KAAK,CAAC;QAErB;;WAEG;QAGI,gCAA2B,GAAG,KAAK,CAAC;QAQ3C;;WAEG;QACK,mBAAc,GAAY,IAAI,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;QAEzG;;;WAGG;QACI,qBAAgB,GAA0B,IAAI,CAAC;QAEtD;;;;WAIG;QACI,gCAA2B,GAAG,KAAK,CAAC;QAE3C;;;;WAIG;QACI,+CAA0C,GAAG,KAAK,CAAC;QAE1D;;;;WAIG;QACI,sDAAiD,GAAG,KAAK,CAAC;QAEjE;;;;WAIG;QACI,kDAA6C,GAAG,KAAK,CAAC;QAE7D;;;;WAIG;QACI,4BAAuB,GAAG,KAAK,CAAC;QAEvC;;;;WAIG;QACI,yBAAoB,GAAG,IAAI,CAAC;QAEnC;;;;WAIG;QACI,0BAAqB,GAAG,IAAI,CAAC;QAEpC;;;;WAIG;QACI,kCAA6B,GAAG,KAAK,CAAC;QAE7C;;;;WAIG;QACI,+CAA0C,GAAG,KAAK,CAAC;QAE1D;;;;WAIG;QACI,0CAAqC,GAAG,KAAK,CAAC;QAErD;;;;WAIG;QACI,wCAAmC,GAAG,KAAK,CAAC;QAEnD;;WAEG;QACI,0CAAqC,GAAG,KAAK,CAAC;QAErD;;;;WAIG;QACI,kBAAa,GAAG,QAAQ,CAAC,qBAAqB,CAAC;QAEtD;;;WAGG;QACI,6BAAwB,GAAG,KAAK,CAAC;QAExC;;;WAGG;QACI,iBAAY,GAAG,KAAK,CAAC;QAE5B;;;WAGG;QACI,0BAAqB,GAAG,KAAK,CAAC;QAErC;;;WAGG;QACI,uBAAkB,GAAG,IAAI,CAAC;QAEjC;;;WAGG;QACI,qBAAgB,GAAG,KAAK,CAAC;QAEhC;;;WAGG;QACI,2BAAsB,GAAG,CAAC,CAAC;QAElC;;;WAGG;QACI,sBAAiB,GAAG,KAAK,CAAC;QAEjC;;;WAGG;QACI,sBAAiB,GAAG,KAAK,CAAC;QAEjC;;;WAGG;QACI,sBAAiB,GAAG,KAAK,CAAC;QAEjC;;;WAGG;QACI,iBAAY,GAAG,GAAG,CAAC;QAE1B;;;;WAIG;QACI,qBAAgB,GAAG,KAAK,CAAC;QAEhC;;;;WAIG;QACI,2BAAsB,GAAG,KAAK,CAAC;QAEtC;;;;;WAKG;QACI,4BAAuB,GAA0B,IAAI,CAAC;QAE7D;;;;;WAKG;QACI,gCAA2B,GAA0B,IAAI,CAAC;QAEjE;;;WAGG;QACI,+BAA0B,GAAG,KAAK,CAAC;QAElC,6BAAwB,GAAwB,SAAS,CAAC;QAU1D,uBAAkB,GAAwB,SAAS,CAAC;QAmBpD,8BAAyB,GAAuB,SAAS,CAAC;QAY1D,sBAAiB,GAAW,CAAC,CAAC;QAyBtC;;;WAGG;QACI,wBAAmB,GAAG,KAAK,CAAC;QAEnC;;;;;WAKG;QACI,gCAA2B,GAAG,KAAK,CAAC;QAE3C;;WAEG;QACK,mBAAc,GAAG,IAAI,UAAU,CAAsB,EAAE,CAAC,CAAC;QAEjE;;WAEG;QACK,WAAM,GAAG,KAAK,CAAC;QAEvB;;WAEG;QACK,iCAA4B,GAAG,KAAK,CAAC;QAErC,eAAU,GAAG,CAAC,CAAC;QAEf,mBAAc,GAAG,KAAK,CAAC;QACvB,4BAAuB,GAAG,KAAK,CAAC;QAExC;;;;;WAKG;QAEI,cAAS,GAAG,CAAC,CAAC;QAErB;;;;;;;WAOG;QACI,eAAU,GAAG,CAAC,CAAC,CAAC;QAEvB;;;;;WAKG;QACI,gBAAW,GAAG,CAAC,CAAC;QAOb,kCAA6B,GAAG,KAAK,CAAC;QA2K7B,sBAAiB,GAAW,QAAQ,CAAC,eAAe,CAAC;QAhKpE,kDAAkD;QAClD,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,IAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAa,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;YACxH,MAAM,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACvF,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5D,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,OAAO,CAClE,qEAAqE,EACrE,IAAI,CAAC,QAAQ,EAAE,EACf,KAAK,EACL,IAAI,EACJ,SAAS,CAAC,4BAA4B,CACzC,CAAC;YACF,IAAI,CAAC,QAAQ,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE;gBAC7C,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;gBACpE,OAAO,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC;QACP,CAAC;QAED,2DAA2D;QAC3D,IAAI,CAAC,mCAAmC,CAAC,IAAI,CAAC,CAAC;QAE/C,IAAI,CAAC,uBAAuB,GAAG,GAAoC,EAAE;YACjE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YAE5B,IAAI,aAAa,CAAC,wBAAwB,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC;gBAC1G,IAAI,CAAC,cAAc,CAAC,IAAI,CAAsB,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACzE,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;YACpD,IAAI,CAAC,4CAA4C,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEnE,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC,CAAC;QAEF,IAAI,CAAC,uBAAuB,GAAG,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,2BAA2B,GAAG,6BAA6B,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAEvD,8FAA8F;QAC9F,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,MAAM,KAAK,GAAI,IAAY,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;gBAC5B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACpC,CAAC;QACL,CAAC;QACD,2EAA2E;QAC3E,wCAAwC;QACxC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrD,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACzD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBAC9E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC;YACzD,CAAC;iBAAM,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBAClE,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,iBAAiB,2BAA2B,OAAO,CAAC,aAAa,6BAA6B,IAAI,CAAC,yBAAyB,GAAG,CAAC,CAAC;YAClK,CAAC;YACD,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,sCAAsC;QACtC,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,MAAM,KAAK,GAAI,IAAY,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,KAAK,YAAY,OAAO,EAAE,CAAC;gBAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACpC,CAAC;QACL,CAAC;QAED,uFAAuF;QACvF,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC;YACzC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YACvE,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YAC/E,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QACtF,CAAC;QAED,+EAA+E;QAC/E,IAAI,CAAC,WAAW,CAAC;QACjB,IAAI,CAAC,kBAAkB,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC;QAChB,IAAI,CAAC,iBAAiB,CAAC;QACvB,IAAI,CAAC,qBAAqB,CAAC;QAC3B,IAAI,CAAC,4BAA4B,CAAC;QAClC,IAAI,CAAC,cAAc,CAAC;QACpB,IAAI,CAAC,qBAAqB,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC;QACrB,IAAI,CAAC,sBAAsB,CAAC;QAC5B,IAAI,CAAC,cAAc,CAAC;QACpB,IAAI,CAAC,qBAAqB,CAAC;QAC3B,IAAI,CAAC,kBAAkB,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC;QAClB,IAAI,CAAC,yBAAyB,CAAC;QAC/B,IAAI,CAAC,4BAA4B,CAAC;QAClC,IAAI,CAAC,mCAAmC,CAAC;QACzC,IAAI,CAAC,WAAW,CAAC;QACjB,IAAI,CAAC,kBAAkB,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC;QAChB,IAAI,CAAC,iBAAiB,CAAC;QACvB,IAAI,CAAC,cAAc,CAAC;QACpB,IAAI,CAAC,qBAAqB,CAAC;QAC3B,IAAI,CAAC,wBAAwB,CAAC;QAC9B,IAAI,CAAC,+BAA+B,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC;QACd,IAAI,CAAC,cAAc,CAAC;QACpB,IAAI,CAAC,qBAAqB,CAAC;QAC3B,IAAI,CAAC,WAAW,CAAC;QACjB,IAAI,CAAC,kBAAkB,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC;QAChB,IAAI,CAAC,iBAAiB,CAAC;QACvB,IAAI,CAAC,cAAc,CAAC;QACpB,IAAI,CAAC,qBAAqB,CAAC;QAC3B,IAAI,CAAC,sBAAsB,CAAC;QAC5B,IAAI,CAAC,gBAAgB,CAAC;QACtB,IAAI,CAAC,uBAAuB,CAAC;QAC7B,IAAI,CAAC,0BAA0B,CAAC;QAChC,IAAI,CAAC,oBAAoB,CAAC;QAC1B,IAAI,CAAC,2BAA2B,CAAC;QACjC,IAAI,CAAC,gBAAgB,CAAC;QACtB,IAAI,CAAC,uBAAuB,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC;QACrB,IAAI,CAAC,sBAAsB,CAAC;QAC5B,IAAI,CAAC,kBAAkB,CAAC;QACxB,IAAI,CAAC,qBAAqB,CAAC;QAC3B,IAAI,CAAC,yBAAyB,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC;QAClB,IAAI,CAAC,kBAAkB,CAAC;QACxB,IAAI,CAAC,cAAc,CAAC;QACpB,IAAI,CAAC,qBAAqB,CAAC;QAC3B,IAAI,CAAC,wBAAwB,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,IAAoB,uBAAuB;QACvC,IAAI,aAAa,CAAC,wBAAwB,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,CAAC;YAC1G,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,6BAA6B,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,IAAoB,gBAAgB;QAChC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;IACnC,CAAC;IAED;;OAEG;IACa,YAAY;QACxB,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAKD,IAAoB,gBAAgB;QAChC,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED,IAAoB,gBAAgB,CAAC,KAAa;QAC9C,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK,EAAE,CAAC;YACnC,OAAO;QACX,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAE/B,IAAI,CAAC,uCAAuC,EAAE,CAAC;IACnD,CAAC;IAED;;OAEG;IACO,mCAAmC;QACzC,OAAO,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,iBAAiB,KAAK,QAAQ,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC;IAC1H,CAAC;IAED;;OAEG;IACO,gBAAgB;QACtB,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,IAAI,IAAI,CAAC,6BAA6B,CAAC,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC;IAC1J,CAAC;IAED;;;;;;OAMG;IACa,KAAK,CAAC,IAAY,EAAE,wBAAiC,IAAI,EAAE,OAAO,GAAG,EAAE;QACnF,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,qBAAqB,EAAE,CAAC,CAAC;QAE3H,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC;QAChB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAElB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEnC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAEnC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;OAGG;IACa,SAAS;QACrB,MAAM,mBAAmB,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAC9C,mBAAmB,CAAC,UAAU,GAAG,yBAAyB,CAAC;QAE3D,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAED,UAAU;IACV;;;;;;OAMG;IACI,MAAM,CAAU,KAAK,CAAC,MAAW,EAAE,KAAY,EAAE,OAAe;QACnE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAElH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3D,CAAC;QAED,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAEzD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;;;OAKG;IACa,gBAAgB,CAAC,IAAkB,EAAE,UAAyC,EAAE,OAA8C;QAC1I,MAAM,YAAY,GAAG;YACjB,SAAS,EAAE,KAAK;YAChB,YAAY,EAAE,KAAK;YACnB,GAAG,OAAO;SACb,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAClC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,2BAA2B,6CAAqC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtF,MAAM,UAAU,GAAG,GAAG,EAAE;YACpB,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAC/B,OAAO;YACX,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,sBAAsB,CAAC;gBACvC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,EAAE,CAAC;gBACtC,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC;aAClC,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,YAAY,EAAE,YAAY,CAAC,SAAS,CAAE,CAAC;YAClI,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBAClC,yBAAyB,CAAC,MAAM,GAAG,MAAM,CAAC;gBAC1C,yBAAyB,CAAC,OAAO,GAAG,IAAI,CAAC;gBACzC,IAAI,CAAC,0BAA0B,CAAC,eAAe,CAAC,yBAAyB,CAAC,CAAC;YAC/E,CAAC;YACD,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;gBACnB,IAAI,UAAU,EAAE,CAAC;oBACb,UAAU,CAAC,IAAI,CAAC,CAAC;gBACrB,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE;oBAChC,IAAI,UAAU,EAAE,CAAC;wBACb,UAAU,CAAC,IAAI,CAAC,CAAC;oBACrB,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC;QACL,CAAC,CAAC;QACF,UAAU,EAAE,CAAC;IACjB,CAAC;IAED;;;;;;OAMG;IACa,iBAAiB,CAAC,IAAkB,EAAE,OAAgB,EAAE,YAAsB;QAC1F,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAClC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9B,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;QAEzC,IAAI,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,WAAW,CAAC,mBAAmB,IAAI,WAAW,CAAC,4BAA4B,KAAK,YAAY,EAAE,CAAC;gBAC/F,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YAC3B,IAAI,CAAC,2BAA2B,6CAAqC,IAAI,CAAC,UAAU,CAAC,CAAC;YACtF,OAAO,CAAC,eAAe,GAAG,IAAI,sBAAsB,CAAC;gBACjD,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,EAAE,CAAC;gBACtC,GAAG,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC;aAClC,CAAC,CAAC;QACP,CAAC;QAED,MAAM,OAAO,GAA2B,OAAO,CAAC,eAAe,CAAC;QAChE,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAEjC,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,uBAAuB,GAAG,KAAK,CAAC;YAChD,IAAI,CAAC,2CAA2C,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAClE,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC;YAC7E,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;gBACxB,qFAAqF;gBACrF,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;oBACxC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;wBAChB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,CAAC;4BACxC,OAAO,KAAK,CAAC;wBACjB,CAAC;oBACL,CAAC;gBACL,CAAC;gBAED,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACnD,IAAI,eAAe,IAAI,aAAa,CAAC,wBAAwB,EAAE,CAAC;oBAC5D,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE,EAAE,CAAC;wBAC1C,OAAO,KAAK,CAAC;oBACjB,CAAC;oBACD,IAAI,eAAe,CAAC,iBAAiB,EAAE,CAAC;wBACpC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,EAAE,CAAC;4BAC5D,OAAO,KAAK,CAAC;wBACjB,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACJ,2CAA2C;wBAC3C,IAAI,CAAC,eAAe,CAAC,mBAAmB,IAAI,eAAe,CAAC,kBAAkB,EAAE,EAAE,2BAA2B,EAAE,CAAC;4BAC5G,OAAO,KAAK,CAAC;wBACjB,CAAC;oBACL,CAAC;gBACL,CAAC;gBAED,IAAI,IAAI,CAAC,uBAAuB,IAAI,aAAa,CAAC,wBAAwB,EAAE,CAAC;oBACzE,oBAAoB;oBACpB,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,EAAE,CAAC;wBAC1C,OAAO,KAAK,CAAC;oBACjB,CAAC;gBACL,CAAC;gBAED,IAAI,IAAI,CAAC,2BAA2B,IAAI,aAAa,CAAC,wBAAwB,EAAE,CAAC;oBAC7E,oBAAoB;oBACpB,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE,EAAE,CAAC;wBAC9C,OAAO,KAAK,CAAC;oBACjB,CAAC;gBACL,CAAC;gBAED,IAAI,eAAe,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACjD,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;wBAC5D,OAAO,KAAK,CAAC;oBACjB,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,iBAAiB,GAAG,IAAI,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,IAAI,CAAC,qCAAqC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE5D,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,OAAO,CAAC,wBAAwB,IAAI,IAAI,CAAC,6BAA6B,EAAE,CAAC;YACzE,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,OAAO,EAAE,EAAE,CAAC;gBAChD,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QAED,yCAAyC;QACzC,IAAI,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YAC3B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC5D,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;oBACvC,OAAO,KAAK,CAAC;gBACjB,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;YAChG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,2DAA2D,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACzF,CAAC;QAED,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;QACtC,MAAM,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC;QACjD,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QAE/H,IAAI,0BAA0B,GAAG,KAAK,CAAC;QAEvC,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBAClC,yBAAyB,CAAC,MAAM,GAAG,MAAM,CAAC;gBAC1C,yBAAyB,CAAC,OAAO,GAAG,OAAO,CAAC;gBAC5C,IAAI,CAAC,0BAA0B,CAAC,eAAe,CAAC,yBAAyB,CAAC,CAAC;YAC/E,CAAC;YAED,iDAAiD;YACjD,IAAI,IAAI,CAAC,sBAAsB,IAAI,cAAc,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;gBACrE,MAAM,GAAG,cAAc,CAAC;gBACxB,OAAO,CAAC,iBAAiB,EAAE,CAAC;gBAE5B,0BAA0B,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAE3C,IAAI,aAAa,EAAE,CAAC;oBAChB,oDAAoD;oBACpD,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;oBAClC,OAAO,KAAK,CAAC;gBACjB,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,KAAK,CAAC,mBAAmB,EAAE,CAAC;gBAC5B,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC9D,CAAC;QACL,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YAC/C,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACxC,WAAW,CAAC,mBAAmB,GAAG,0BAA0B,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5E,WAAW,CAAC,4BAA4B,GAAG,CAAC,CAAC,YAAY,CAAC;QAE1D,IAAI,CAAC,8BAA8B,EAAE,CAAC;QAEtC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACa,kBAAkB;QAC9B,uBAAuB;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;QAChC,GAAG,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC;QACzC,GAAG,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;QAExC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAE/B,GAAG,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAEhC,GAAG,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAChC,0BAA0B,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAE9D,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAClD,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAClD,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;YAC3C,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,kBAAkB,EAAE,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACa,cAAc,CAAC,KAAa,EAAE,IAAU,EAAE,OAAgB;QACtE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE9B,MAAM,OAAO,GAA2B,OAAO,CAAC,eAAe,CAAC;QAChE,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO;QACX,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAE9B,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO;QACX,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAE5B,iBAAiB;QACjB,IAAI,CAAC,oBAAoB,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAE7B,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAEjC,0BAA0B;QAC1B,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAErD,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEhG,+BAA+B,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAExG,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC;QAClC,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,IAAI,CAAC,sCAAsC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE7D,gBAAgB;QAChB,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAChC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACzC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAE7E,QAAQ;QACR,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAEzE,IAAI,eAAe,GAA0B,IAAI,CAAC;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;QAChC,IAAI,UAAU,EAAE,CAAC;YACb,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAChC,eAAe,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAE7C,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,YAAY,CAAC,sBAAsB,EAAE,CAAC;gBAC9F,mBAAmB;gBACnB,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;oBACxB,mEAAmE;oBACnE,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;wBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;wBACxC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;4BAChB,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;4BAC/F,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;wBACjE,CAAC;oBACL,CAAC;oBAED,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;wBAC7B,IAAI,KAAK,CAAC,uBAAuB,EAAE,CAAC;4BAChC,GAAG,CAAC,YAAY,CAAC,qBAAqB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBACtH,CAAC;6BAAM,CAAC;4BACJ,GAAG,CAAC,YAAY,CAAC,qBAAqB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;wBACtH,CAAC;oBACL,CAAC;oBAED,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBAClI,CAAC;gBAED,aAAa;gBACb,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACnB,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACjD,CAAC;gBAED,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;oBAClD,yDAAyD;oBACzD,IAAI,OAAO,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;wBAC9B,OAAO,CAAC,kCAAkC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClE,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3D,CAAC;yBAAM,IAAI,OAAO,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;wBACrC,OAAO,CAAC,kCAAkC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClE,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3D,CAAC;yBAAM,IAAI,OAAO,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;wBACrC,OAAO,CAAC,kCAAkC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClE,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrF,CAAC;yBAAM,IAAI,OAAO,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;wBACrC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAe,CAAC,CAAC;oBACtH,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,OAAO;gBACP,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;gBAC7C,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC;gBAC/C,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,oBAAoB,CAAC;gBAC/E,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,yCAAyC;gBAEtE,GAAG,CAAC,aAAa,CAAC,oBAAoB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;gBAE7D,GAAG,CAAC,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACtE,CAAC;YAED,WAAW;YACX,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;gBACxB,yCAAyC;gBACzC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;oBACxC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;wBAChB,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;oBACvD,CAAC;gBACL,CAAC;gBAED,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAE9E,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;oBAC1B,GAAG,CAAC,UAAU,CAAC,wBAAwB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;gBAC3E,CAAC;gBAED,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;oBAC9B,GAAG,CAAC,UAAU,CAAC,4BAA4B,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;gBACnF,CAAC;gBAED,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;oBACtC,GAAG,CAAC,UAAU,CAAC,kBAAkB,EAAE,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACjG,CAAC;YACL,CAAC;YAED,yBAAyB;YACzB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,+BAA+B,IAAI,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzF,IAAI,CAAC,QAAQ,EAAE,CAAC,oBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvD,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;YAClC,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEzD,aAAa;YACb,aAAa,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAE/C,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,8BAA8B,EAAE,CAAC;YACpE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QACpC,CAAC;QAED,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/B,SAAS;YACT,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAChD,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACtF,CAAC;YAED,OAAO;YACP,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,YAAY,CAAC,IAAI,eAAe,IAAI,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC3I,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;YAED,MAAM;YACN,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YAEzD,gBAAgB;YAChB,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC;gBAChC,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YACxD,CAAC;YAED,IAAI,OAAO,CAAC,8BAA8B,EAAE,CAAC;gBACzC,IAAI,CAAC,2BAA2B,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;YACtE,CAAC;YAED,mBAAmB;YACnB,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAE5D,aAAa;YACb,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAEnD,GAAG,CAAC,MAAM,EAAE,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACa,cAAc;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC;QAEvC,4DAA4D;QAC5D,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3G,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;;OAGG;IACa,iBAAiB;QAC7B,MAAM,cAAc,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAEjD,iDAAiD;QACjD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACvC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,cAAc,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACa,UAAU,CAAC,OAAoB;QAC3C,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,4DAA4D;QAC5D,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,gBAAgB,KAAK,OAAO,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACa,kBAAkB;QAC9B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACa,OAAO,CAAC,kBAA4B,EAAE,oBAA8B;QAChF,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACpC,IAAI,oBAAoB,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,sBAAsB,KAAK,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAC1G,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAC;YAC3C,CAAC;YACD,IAAI,IAAI,CAAC,2BAA2B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,0BAA0B,KAAK,IAAI,CAAC,2BAA2B,EAAE,CAAC;gBACtH,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE,CAAC;YAC/C,CAAC;YAED,iDAAiD;YACjD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;gBACxC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;YAC7B,CAAC;YAED,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAE9B,IAAI,IAAI,CAAC,6BAA6B,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACtE,IAAI,CAAC,6BAA6B,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAChG,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;IAC5D,CAAC;IAED;;;OAGG;IACK,mBAAmB;QACvB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,gBAAgB,CAAC;QACjC,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,kBAAkB,CAAC;IAC9C,CAAC;IAEO,cAAc,CAClB,IAAkB,EAClB,aAA2B,EAC3B,OAA+B,EAC/B,aAAiD,IAAI,EACrD,UAA8D,IAAI,EAClE,eAAkC,IAAI,EACtC,eAAkC,IAAI;QAEtC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;QAE/E,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,CAAC,eAAe,EAAE,CAAC;QAE1B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAEjC,YAAY;QACZ,MAAM,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;QACxC,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;YAC/B,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,sBAAsB,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC3B,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnB,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC5B,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,mBAAmB,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAC1B,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,SAAS,CAAC,CAAC;QACrD,CAAC;QAED,YAAY,GAAG,yBAAyB,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,sBAAsB,EAAE,YAAY,EAAE,CAAC,CAAC;QAE1G,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,cAAc,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,OAAO,CAAC,6BAA6B,EAAE,CAAC;YACxC,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,+BAA+B,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC3B,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,kBAAkB,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,QAAQ,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACtB,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,aAAa,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACvB,SAAS,CAAC,WAAW,CAAC,YAAY,EAAE,EAAE,cAAc,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QAC1C,CAAC;QAED,YAAY;QACZ,MAAM,OAAO,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAE5C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC3C,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,qBAAqB,EAAE,EAAE,CAAC,EAAE,CAAC;YACxD,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1C,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC;QAED,yBAAyB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAC7D,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChD,gCAAgC,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QACzD,wCAAwC,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAEjE,IAAI,UAAU,GAAG,SAAS,CAAC;QAE3B,MAAM,QAAQ,GAAG;YACb,OAAO;YACP,MAAM;YACN,gBAAgB;YAChB,cAAc;YACd,aAAa;YACb,YAAY;YACZ,WAAW;YACX,WAAW;YACX,WAAW;YACX,QAAQ;YACR,cAAc;YACd,oBAAoB;YACpB,0BAA0B;YAC1B,qBAAqB;YACrB,kBAAkB;YAClB,YAAY;YACZ,wBAAwB;YACxB,2BAA2B;YAC3B,YAAY;SACf,CAAC;QAEF,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;QAED,MAAM,QAAQ,GAAG;YACb,wBAAwB;YACxB,4BAA4B;YAC5B,kBAAkB;YAClB,aAAa;YACb,cAAc;YACd,iBAAiB;YACjB,sBAAsB;YACtB,uBAAuB;YACvB,uBAAuB;SAC1B,CAAC;QAEF,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YACxC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAEnC,6CAA6C;YAC7C,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC7C,CAAC;QAED,gCAAgC,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAE3D,MAAM,cAAc,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAErD,MAAM,eAAe,GAAG,EAAE,qBAAqB,EAAE,IAAI,CAAC,sBAAsB,EAAE,2BAA2B,EAAE,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAE3I,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,YAAY,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,OAAO,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,mBAAmB,GAAG,cAAc,CAAC;QACrD,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,SAAS,CAAC;QACvC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,eAAe,CAAC;QAClD,IAAI,CAAC,2BAA2B,8CAAoC,IAAI,CAAC,UAAU,CAAC,CAAC;QAErF,+BAA+B,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAE3E,oBAAoB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3C,oBAAoB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3C,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAE/B,IAAI,4BAA4B,EAAE,CAAC;YAC/B,4BAA4B,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChE,4BAA4B,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpE,CAAC;QAED,8BAA8B,CAAyB;YACnD,aAAa,EAAE,QAAQ;YACvB,mBAAmB,EAAE,cAAc;YACnC,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,OAAO;YAChB,qBAAqB,EAAE,IAAI,CAAC,sBAAsB;SACrD,CAAC,CAAC;QAEH,MAAM,WAAW,GAAoC,EAAE,CAAC;QAExD,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/B,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAC7H,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAC9B,UAAU,EACc;YACpB,UAAU,EAAE,OAAO;YACnB,aAAa,EAAE,QAAQ;YACvB,mBAAmB,EAAE,cAAc;YACnC,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,IAAI;YACb,SAAS,EAAE,SAAS;YACpB,UAAU,EAAE,UAAU;YACtB,OAAO,EAAE,OAAO;YAChB,eAAe;YACf,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;YAC9C,wBAAwB,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU;YACpD,WAAW,EAAE,OAAO,CAAC,OAAO;YAC5B,cAAc,EAAE,IAAI,CAAC,eAAe;YACpC,yBAAyB,EAAE,IAAI,CAAC,cAAc;gBAC1C,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,KAAK,IAAI,EAAE;oBACP,IAAI,IAAI,CAAC,cAAc,gCAAwB,EAAE,CAAC;wBAC9C,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,kCAAkC,CAAC,EAAE,MAAM,CAAC,oCAAoC,CAAC,CAAC,CAAC,CAAC;oBAClH,CAAC;yBAAM,CAAC;wBACJ,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,8BAA8B,CAAC,EAAE,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC;oBAC1G,CAAC;oBAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC/B,CAAC;SACV,EACD,MAAM,CACT,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,SAAS,CAAC;QAEvC,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,eAAe,CACnB,IAAkB,EAClB,aAA2B,EAC3B,OAA+B,EAC/B,eAAkC,IAAI,EACtC,eAAkC,IAAI;QAEtC,MAAM,gBAAgB,GAAG,aAAa,CAAC,gBAAgB,CAAC;QAExD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAEjC,SAAS;QACT,uBAAuB,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACxG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;QAE5B,YAAY;QACZ,0BAA0B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAE3C,UAAU;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,+BAA+B,CAAC;QACnG,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,cAAc,IAAI,CAAC,GAAG,CAAC,CAAC;QAEtE,iCAAiC;QACjC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAE1C,+BAA+B,CAAC,cAAc,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAE1F,WAAW;QACX,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAChC,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC5B,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,qBAAqB,EAAE,EAAE,CAAC,EAAE,CAAC;gBACxD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YAClC,CAAC;YACD,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;gBACxB,6DAA6D;gBAC7D,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;oBACxC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;wBAChB,yBAAyB,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;wBACzE,OAAO,CAAC,OAAO,CAAC,aAAa,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;oBACzE,CAAC;yBAAM,CAAC;wBACJ,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;oBAC3C,CAAC;gBACL,CAAC;gBAED,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACnD,MAAM,eAAe,GACjB,IAAI,CAAC,0BAA0B;oBAC/B,IAAI,CAAC,iBAAiB;oBACtB,IAAI,CAAC,iBAAiB;oBACtB,MAAM,CAAC,OAAO,EAAE,CAAC,iBAAiB,IAAI,CAAC;oBACvC,IAAI,CAAC,4BAA4B,IAAI,IAAI,CAAC;gBAC9C,oBAAoB,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,wBAAwB,EAAE,CAAC,eAAe,CAAC,CAAC;gBAE/H,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBAC7B,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,0CAA0C,CAAC;gBACnF,CAAC;gBAED,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,2BAA2B,CAAC;gBACpE,OAAO,CAAC,2CAA2C,GAAG,IAAI,CAAC,0CAA0C,CAAC;gBACtG,OAAO,CAAC,kDAAkD,GAAG,IAAI,CAAC,iDAAiD,CAAC;gBACpH,OAAO,CAAC,8CAA8C,GAAG,IAAI,CAAC,6CAA6C,CAAC;gBAC5G,OAAO,CAAC,6BAA6B,GAAG,IAAI,CAAC,qCAAqC,CAAC;gBACnF,OAAO,CAAC,6BAA6B,GAAG,IAAI,CAAC,mCAAmC,CAAC;gBACjF,OAAO,CAAC,0CAA0C,GAAG,IAAI,CAAC,qCAAqC,CAAC;gBAEhG,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBAC7B,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,gBAAgB,IAAI,aAAa,CAAC,qBAAqB,EAAE,CAAC;wBACpF,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;wBACxB,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC,oBAAoB,CAAC;wBAClD,OAAO,CAAC,iBAAiB,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC;oBAC7D,CAAC;yBAAM,CAAC;wBACJ,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;oBAC7B,CAAC;oBACD,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,wBAAwB,CAAC;gBAClE,CAAC;qBAAM,CAAC;oBACJ,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;oBACzB,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC;oBAC7B,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC;oBAClC,OAAO,CAAC,qBAAqB,GAAG,KAAK,CAAC;gBAC1C,CAAC;gBAED,IAAI,IAAI,CAAC,uBAAuB,IAAI,aAAa,CAAC,wBAAwB,EAAE,CAAC;oBACzE,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;oBAC/B,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC;gBACvE,CAAC;qBAAM,CAAC;oBACJ,OAAO,CAAC,eAAe,GAAG,KAAK,CAAC;oBAChC,OAAO,CAAC,oBAAoB,GAAG,KAAK,CAAC;gBACzC,CAAC;gBAED,IAAI,IAAI,CAAC,2BAA2B,EAAE,CAAC;oBACnC,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;gBACvC,CAAC;qBAAM,CAAC;oBACJ,OAAO,CAAC,mBAAmB,GAAG,KAAK,CAAC;gBACxC,CAAC;gBAED,IAAI,IAAI,CAAC,mCAAmC,EAAE,EAAE,CAAC;oBAC7C,OAAO,CAAC,6BAA6B,GAAG,IAAI,CAAC;gBACjD,CAAC;qBAAM,CAAC;oBACJ,OAAO,CAAC,6BAA6B,GAAG,KAAK,CAAC;gBAClD,CAAC;YACL,CAAC;YAED,IAAI,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,qBAAqB,EAAE,CAAC;gBACxD,OAAO,CAAC,uBAAuB,GAAG,KAAK,CAAC;gBACxC,OAAO,CAAC,mBAAmB,GAAG,KAAK,CAAC;YACxC,CAAC;iBAAM,IAAI,IAAI,CAAC,aAAa,KAAK,QAAQ,CAAC,iBAAiB,EAAE,CAAC;gBAC3D,OAAO,CAAC,uBAAuB,GAAG,KAAK,CAAC;gBACxC,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;gBACvC,OAAO,CAAC,mBAAmB,GAAG,KAAK,CAAC;YACxC,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAClD,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;YACrC,CAAC;YAED,iGAAiG;YACjG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC;YAEnD,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,mBAAmB,IAAI,IAAI,CAAC,2BAA2B,CAAC;QAClG,CAAC;QAED,IAAI,OAAO,CAAC,iBAAiB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YACrD,OAAO,CAAC,cAAc,GAAG,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACzF,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,mBAAmB,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,8BAA8B,CAAC;YAC3I,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,OAAO,CAAC,wBAAwB,IAAI,IAAI,CAAC,6BAA6B,EAAE,CAAC;YACzE,IAAI,CAAC,6BAA6B,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAEtD,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAEvD,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC;QAErD,IACI,CAAC,IAAI,CAAC,2BAA2B,GAAG,GAAG,IAAI,IAAI,CAAC,uBAAuB,GAAG,GAAG,CAAC;YAC9E,eAAe,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC;YAC9C,aAAa,CAAC,wBAAwB,EACxC,CAAC;YACC,+EAA+E;YAC/E,oEAAoE;YACpE,oEAAoE;YACpE,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;gBACxD,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACxB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YAC3B,CAAC;YACD,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAC/B,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC;YAC7C,CAAC;YACD,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,2BAA2B,GAAG,GAAG,CAAC;YAClE,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,GAAG,GAAG,CAAC;QAClE,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,WAAW,GAAG,KAAK,CAAC;YAC5B,OAAO,CAAC,yBAAyB,GAAG,KAAK,CAAC;YAC1C,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;YACjC,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;QACrC,CAAC;QAED,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;QAC9C,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;QAEhD,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,aAAa,CAAC,wBAAwB,CAAC;QAC7E,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;gBACxD,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACxB,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YAC3B,CAAC;YACD,IAAI,CAAC,2BAA2B,GAAG,6BAA6B,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAClF,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACrD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC;YACxC,OAAO,CAAC,mBAAmB,GAAG,KAAK,CAAC;YACpC,OAAO,CAAC,gBAAgB,GAAG,CAAC,CAAC;QACjC,CAAC;QAED,QAAQ;QACR,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YACxB,qBAAqB,CACjB,IAAI,EACJ,KAAK,EACL,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAClC,OAAO,EACP,IAAI,CAAC,4BAA4B,EACjC,IAAI,CAAC,iBAAiB,EACtB,aAAa,EACb,IAAI,CAAC,wBAAwB,CAChC,CAAC;YACF,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC;YAC9H,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QACxC,CAAC;QAED,kDAAkD;QAClD,iCAAiC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;QAE7H,kBAAkB;QAClB,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,kDAAkD,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEzE,UAAU;QACV,2BAA2B,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,KAAK,QAAQ,CAAC,eAAe,CAAC,CAAC;QAElH,kBAAkB;QAClB,IAAI,CAAC,kCAAkC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7D,CAAC;;AAn0Dc,8BAAc,GAAkC,EAAE,AAApC,CAAqC;AA2PlE;;;GAGG;AACW,yBAAS,GAAG,KAAK,AAAR,CAAS;AA3xBzB;IADN,SAAS,EAAE;mDACc;AAGlB;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,YAAY,CAAC;IAClF,6DAA6D;oDACoC;AAO1F;IADN,kBAAkB,EAAE;0DAC2B;AAGxC;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,mBAAmB,CAAC;IACzF,6DAA6D;2DACiC;AAOvF;IADN,iBAAiB,EAAE;kDACK;AAGjB;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,WAAW,CAAC;IACjF,6DAA6D;mDAC8C;AAOpG;IADN,kBAAkB,EAAE;yDAC0B;AAGvC;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,kBAAkB,CAAC;IACxF,6DAA6D;0DAC6B;AAOnF;IADN,SAAS,EAAE;6DACwB;AAG5B;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,sBAAsB,CAAC;IAC5F,6DAA6D;8DACmE;AAOzH;IADN,kBAAkB,EAAE;oEACqC;AAGlD;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,6BAA6B,CAAC;IACnG,6DAA6D;qEAC2E;AAOjI;IADN,SAAS,EAAE;sDACiB;AAGrB;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,eAAe,CAAC;IACrF,6DAA6D;uDACkD;AAOxG;IADN,kBAAkB,EAAE;6DAC8B;AAG3C;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,sBAAsB,CAAC;IAC5F,6DAA6D;8DAC6C;AAOnG;IADN,SAAS,EAAE;uDACkB;AAGtB;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,gBAAgB,CAAC;IACtF,6DAA6D;wDACoD;AAO1G;IADN,kBAAkB,EAAE;8DAC+B;AAG5C;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,uBAAuB,CAAC;IAC7F,6DAA6D;+DACiD;AAOvG;IADN,iBAAiB,EAAE;sDACS;AAGrB;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,eAAe,CAAC;IACrF,6DAA6D;uDAC0D;AAOhH;IADN,kBAAkB,EAAE;6DAC8B;AAG3C;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,sBAAsB,CAAC;IAC5F,6DAA6D;8DAC6C;AAOnG;IADN,SAAS,EAAE;0DACqB;AAGzB;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,mBAAmB,CAAC;IACzF,6DAA6D;2DAC4D;AAOlH;IADN,kBAAkB,EAAE;iEACkC;AAG/C;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,0BAA0B,CAAC;IAChG,6DAA6D;kEAC6D;AAOnH;IADN,SAAS,EAAE;oEAC+B;AAGnC;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,6BAA6B,CAAC;IACnG,6DAA6D;qEACkF;AAOxI;IADN,kBAAkB,EAAE;2EAC4C;AAGzD;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,oCAAoC,CAAC;IAC1G,6DAA6D;4EACuG;AAO7J;IADN,SAAS,EAAE;oDACe;AAGnB;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,aAAa,CAAC;IACnF,6DAA6D;qDACgD;AAOtG;IADN,SAAS,EAAE;mDACc;AAGlB;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,YAAY,CAAC;IAClF,6DAA6D;oDACyC;AAO/F;IADN,kBAAkB,EAAE;0DAC2B;AAGxC;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,mBAAmB,CAAC;IACzF,6DAA6D;2DACiC;AAOvF;IADN,iBAAiB,EAAE;kDACK;AAGjB;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,WAAW,CAAC;IACjF,6DAA6D;mDACiD;AAOvG;IADN,kBAAkB,EAAE;yDAC0B;AAGvC;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,kBAAkB,CAAC;IACxF,6DAA6D;0DAC6B;AAOnF;IADN,SAAS,EAAE;sDACiB;AAGrB;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,eAAe,CAAC;IACrF,6DAA6D;uDACkD;AAOxG;IADN,kBAAkB,EAAE;6DAC8B;AAG3C;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,sBAAsB,CAAC;IAC5F,6DAA6D;8DAC6C;AAOnG;IADN,SAAS,EAAE;gEAC2B;AAG/B;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,yBAAyB,CAAC;IAC/F,6DAA6D;iEAC4E;AAOlI;IADN,kBAAkB,EAAE;uEACwC;AAGrD;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,gCAAgC,CAAC;IACtG,6DAA6D;wEACuF;AAO7I;IADN,SAAS,EAAE;gDACW;AAGf;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,SAAS,CAAC;IAC/E,6DAA6D;iDACgC;AAStF;IADN,SAAS,EAAE;sDACiB;AAGrB;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,eAAe,CAAC;IACrF,6DAA6D;uDACkD;AASxG;IADN,kBAAkB,EAAE;6DAC8B;AAG3C;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,sBAAsB,CAAC;IAC5F,6DAA6D;8DAC6C;AAOnG;IADN,SAAS,EAAE;0EAC8C;AASlD;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,YAAY,CAAC;IAClF,6DAA6D;oDACyC;AAS9F;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,mBAAmB,CAAC;IACzF,6DAA6D;2DACiC;AAStF;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,WAAW,CAAC;IACjF,6DAA6D;mDACiD;AAStG;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,kBAAkB,CAAC;IACxF,6DAA6D;0DAC6B;AASlF;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,eAAe,CAAC;IACrF,6DAA6D;uDACkD;AASvG;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,sBAAsB,CAAC;IAC5F,6DAA6D;8DAC6C;AAOnG;IADN,kBAAkB,EAAE;8DAC+B;AAG5C;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,uBAAuB,CAAC;IAC7F,6DAA6D;+DACiD;AAOvG;IADN,kBAAkB,EAAE;wDACW;AAGxB;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,iBAAiB,CAAC;IACvF,6DAA6D;yDAC2E;AAmBjI;IADN,kBAAkB,EAAE;+DACgC;AAG7C;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,wBAAwB,CAAC;IAC9F,6DAA6D;gEACqD;AAO3G;IADN,kBAAkB,EAAE;kEACmC;AAGhD;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,2BAA2B,CAAC;IACjG,6DAA6D;mEACmE;AAOzH;IADN,kBAAkB,EAAE;4DACe;AAG5B;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,qBAAqB,CAAC;IAC3F,6DAA6D;6DACqF;AAqB3I;IADN,kBAAkB,EAAE;mEACoC;AAGjD;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,4BAA4B,CAAC;IAClG,6DAA6D;oEACuE;AAO7H;IADN,SAAS,EAAE;wDACmB;AAGvB;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,iBAAiB,CAAC;IACvF,6DAA6D;yDACkD;AAOxG;IADN,kBAAkB,EAAE;+DACgC;AAG7C;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,wBAAwB,CAAC;IAC9F,6DAA6D;gEACqD;AAO3G;IADN,SAAS,EAAE;0DACqB;AAGzB;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,mBAAmB,CAAC;IACzF,6DAA6D;2DAC8D;AAOpH;IADN,iBAAiB,EAAE;sDACS;AAGrB;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,eAAe,CAAC;IACrF,6DAA6D;uDAC0D;AAOhH;IADN,kBAAkB,EAAE;6DAC8B;AAG3C;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,sBAAsB,CAAC;IAC5F,6DAA6D;8DAC6C;AAQlG;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,gBAAgB,CAAC;IACtF,6DAA6D;wDACsD;AAQ3G;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,uBAAuB,CAAC;IAC7F,6DAA6D;+DACmD;AAUxG;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,mBAAmB,CAAC;IACzF,6DAA6D;2DAC+D;AAQpH;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,sBAAsB,CAAC;IAC5F,6DAA6D;8DACsE;AAQ3H;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,0BAA0B,CAAC;IAChG,6DAA6D;kEAC+D;AAQpH;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,aAAa,CAAC;IACnF,6DAA6D;qDAC6C;AAMnG;IADN,kBAAkB,EAAE;gEACiC;AAG9C;IAFP,+BAA+B,CAAC,kCAAkC,EAAE,yBAAyB,CAAC;IAC/F,6DAA6D;iEACyD;AAe/G;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,kCAAkC,CAAC;wDAChB;AAQ9B;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,kCAAkC,CAAC;6DACX;AAOnC;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,kCAAkC,CAAC;0EACJ;AAO1C;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,yCAAyC,CAAC;uDAC9B;AAOvB;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,yCAAyC,CAAC;oDACnC;AAOlB;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,kCAAkC,CAAC;kFACI;AAOlD;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,kCAAkC,CAAC;8DAChB;AAQrC;IADC,SAAS,EAAE;8DAGX;AAyBD;IADC,SAAS,EAAE;0DAGX;AAwBM;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,kCAAkC,CAAC;gEACd;AAOhC;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,kCAAkC,CAAC;oDAC1B;AAOpB;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,kCAAkC,CAAC;6DACjB;AAO7B;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,kCAAkC,CAAC;0DACrB;AAOzB;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,gCAAgC,CAAC;wDACpB;AAOxB;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,kCAAkC,CAAC;kEACZ;AAOlC;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,gCAAgC,CAAC;8DAClB;AAO1B;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,kCAAkC,CAAC;yDACrB;AAOzB;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,kCAAkC,CAAC;yDACrB;AAOzB;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,kCAAkC,CAAC;yDACrB;AAQzB;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,kCAAkC,CAAC;wDACtB;AAQxB;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,kCAAkC,CAAC;8DAChB;AAY9B;IAFN,kBAAkB,EAAE;IACpB,gBAAgB,CAAC,kCAAkC,CAAC;+DACO;AAOrD;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,kCAAkC,CAAC;2DACnB;AAS3B;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,kCAAkC,CAAC;mEACX;AAQnC;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,kCAAkC,CAAC;4DACnB;AAQ3B;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,kCAAkC,CAAC;6DAClB;AAO5B;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,8BAA8B,CAAC;8CAC5B;AAOd;IAFN,SAAS,EAAE;IACX,gBAAgB,CAAC,8BAA8B,CAAC;oEACN;AAuTpC;IADN,gBAAgB,CAAC,8BAA8B,CAAC;kDAC5B;AAuMrB;IADC,SAAS,EAAE;uDAGX;AA6kCL,aAAa,CAAC,yBAAyB,EAAE,eAAe,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { serialize, expandToProperty, addAccessorsForMaterialProperty, serializeAsTexture, serializeAsColor3, serializeAsVector2 } from \"../../Misc/decorators\";\r\nimport { GetEnvironmentBRDFTexture, GetEnvironmentFuzzBRDFTexture } from \"../../Misc/brdfTextureTools\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Scene } from \"../../scene\";\r\nimport type { Color4 } from \"../../Maths/math.color\";\r\nimport { Color3 } from \"../../Maths/math.color\";\r\nimport { ImageProcessingConfiguration } from \"../imageProcessingConfiguration\";\r\nimport type { BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { Texture } from \"../Textures/texture\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { Material } from \"../material\";\r\nimport { SerializationHelper } from \"../../Misc/decorators.serialization\";\r\nimport type { Engine } from \"../../Engines/engine\";\r\nimport type { AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport type { Effect, IEffectCreationOptions } from \"../../Materials/effect\";\r\nimport { MaterialDefines } from \"../materialDefines\";\r\nimport { ImageProcessingDefinesMixin } from \"../imageProcessingConfiguration.defines\";\r\nimport { EffectFallbacks } from \"../effectFallbacks\";\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 { Constants } from \"../../Engines/constants\";\r\nimport { VertexBuffer } from \"../../Buffers/buffer\";\r\nimport { MaterialPluginEvent } from \"../materialPluginEvent\";\r\nimport { MaterialHelperGeometryRendering } from \"../materialHelper.geometryrendering\";\r\nimport { PrePassConfiguration } from \"../prePassConfiguration\";\r\nimport type { IMaterialCompilationOptions, ICustomShaderNameResolveOptions } from \"../../Materials/material\";\r\nimport { ShaderLanguage } from \"../shaderLanguage\";\r\nimport { MaterialFlags } from \"../materialFlags\";\r\nimport type { SubMesh } from \"../../Meshes/subMesh\";\r\nimport { Logger } from \"core/Misc/logger\";\r\nimport { UVDefinesMixin } from \"../uv.defines\";\r\nimport { Vector2, Vector4, TmpVectors } from \"core/Maths/math.vector\";\r\nimport type { Vector3, Matrix } from \"core/Maths/math.vector\";\r\nimport type { Mesh } from \"../../Meshes/mesh\";\r\nimport { ImageProcessingMixin } from \"../imageProcessing\";\r\nimport { PushMaterial } from \"../pushMaterial\";\r\nimport { SmartArray } from \"../../Misc/smartArray\";\r\nimport type { RenderTargetTexture } from \"../Textures/renderTargetTexture\";\r\nimport type { IAnimatable } from \"../../Animations/animatable.interface\";\r\n\r\nconst onCreatedEffectParameters = { effect: null as unknown as Effect, subMesh: null as unknown as Nullable<SubMesh> };\r\n\r\nclass Uniform {\r\n public name: string;\r\n public numComponents: number;\r\n public linkedProperties: { [name: string]: Property<PropertyType> } = {};\r\n public populateVectorFromLinkedProperties(vector: Vector4 | Vector3 | Vector2): void {\r\n const destinationSize = vector.dimension[0];\r\n for (const propKey in this.linkedProperties) {\r\n const prop = this.linkedProperties[propKey];\r\n const sourceSize = prop.numComponents;\r\n if (destinationSize < sourceSize || prop.targetUniformComponentOffset > destinationSize - sourceSize) {\r\n if (sourceSize == 1) {\r\n Logger.Error(`Float property ${prop.name} has an offset that is too large.`);\r\n } else {\r\n Logger.Error(`Vector${sourceSize} property ${prop.name} won't fit in Vector${destinationSize} or has an offset that is too large.`);\r\n }\r\n return;\r\n }\r\n if (typeof prop.value === \"number\") {\r\n Uniform._tmpArray[prop.targetUniformComponentOffset] = prop.value;\r\n } else {\r\n prop.value.toArray(Uniform._tmpArray, prop.targetUniformComponentOffset);\r\n }\r\n }\r\n vector.fromArray(Uniform._tmpArray);\r\n }\r\n public constructor(name: string, componentNum: number) {\r\n this.name = name;\r\n this.numComponents = componentNum;\r\n }\r\n private static _tmpArray: number[] = [0, 0, 0, 0];\r\n}\r\n\r\ntype PropertyType = Vector2 | Vector3 | Vector4 | number | Color3 | Color4;\r\n\r\n/**\r\n * Defines a property for the OpenPBRMaterial.\r\n */\r\nclass Property<T extends PropertyType> {\r\n public name: string;\r\n public targetUniformName: string;\r\n public defaultValue: T;\r\n public value: T;\r\n // public includeAlphaFromProp: string = \"\";\r\n\r\n /**\r\n * If not given a type, there will be no uniform defined for this property and\r\n * it will be assumed that the value will be packed into the already existing \"uniformName\" uniform.\r\n */\r\n public targetUniformComponentNum: number = 4; // Default to vec4\r\n public targetUniformComponentOffset: number = 0;\r\n\r\n /**\r\n * Creates a new Property instance.\r\n * @param name The name of the property in the shader\r\n * @param defaultValue The default value of the property\r\n * @param targetUniformName The name of the property in the shader uniform block\r\n * @param targetUniformComponentNum The number of components in the target uniform. All properties that are\r\n * packed into the same uniform must agree on the size of the target uniform.\r\n * @param targetUniformComponentOffset The offset in the uniform where this property will be packed.\r\n */\r\n constructor(name: string, defaultValue: T, targetUniformName: string, targetUniformComponentNum: number, targetUniformComponentOffset: number = 0) {\r\n this.name = name;\r\n this.targetUniformName = targetUniformName;\r\n this.defaultValue = defaultValue;\r\n this.value = defaultValue;\r\n this.targetUniformComponentNum = targetUniformComponentNum;\r\n this.targetUniformComponentOffset = targetUniformComponentOffset;\r\n }\r\n\r\n /**\r\n * Returns the number of components of the property based on its default value type.\r\n */\r\n public get numComponents(): number {\r\n if (typeof this.defaultValue === \"number\") {\r\n return 1;\r\n }\r\n return this.defaultValue.dimension[0];\r\n }\r\n}\r\n\r\nclass Sampler {\r\n public name: string;\r\n public value: Nullable<BaseTexture> = null; // Texture value, default to null\r\n public samplerPrefix: string = \"\"; // The name of the sampler in the shader\r\n public textureDefine: string = \"\"; // The define used in the shader for this sampler\r\n\r\n /**\r\n * The name of the sampler used in the shader.\r\n * If this naming changes, we'll also need to change:\r\n * - samplerFragmentDeclaration.fx\r\n * - openpbr.fragment.fx\r\n */\r\n public get samplerName(): string {\r\n return this.samplerPrefix + \"Sampler\";\r\n }\r\n /**\r\n * The name of the sampler info used in the shader.\r\n * If this naming changes, we'll also need to change:\r\n * - openpbr.vertex.fx\r\n * - openpbr.fragment.fx\r\n */\r\n public get samplerInfoName(): string {\r\n return \"v\" + this.samplerPrefix.charAt(0).toUpperCase() + this.samplerPrefix.slice(1) + \"Infos\";\r\n }\r\n /**\r\n * The name of the matrix used for this sampler in the shader.\r\n * If this naming changes, we'll also need to change:\r\n * - materialHelper.functions.BindTextureMatrix\r\n * - samplerVertexImplementation.fx\r\n * - openpbr.fragment.fx\r\n */\r\n public get samplerMatrixName(): string {\r\n return this.samplerPrefix + \"Matrix\";\r\n }\r\n /**\r\n * Creates a new Sampler instance.\r\n * @param name The name of the texture property\r\n * @param samplerPrefix The prefix used for the name of the sampler in the shader\r\n * @param textureDefine The define used in the shader for this sampler\r\n */\r\n constructor(name: string, samplerPrefix: string, textureDefine: string) {\r\n this.name = name;\r\n this.samplerPrefix = samplerPrefix;\r\n this.textureDefine = textureDefine;\r\n }\r\n}\r\n\r\nclass OpenPBRMaterialDefinesBase extends UVDefinesMixin(MaterialDefines) {}\r\n/**\r\n * Manages the defines for the PBR Material.\r\n * @internal\r\n */\r\nexport class OpenPBRMaterialDefines extends ImageProcessingDefinesMixin(OpenPBRMaterialDefinesBase) {\r\n public NUM_SAMPLES = \"0\";\r\n public REALTIME_FILTERING = false;\r\n public IBL_CDF_FILTERING = false;\r\n\r\n public VERTEXCOLOR = false;\r\n\r\n public BAKED_VERTEX_ANIMATION_TEXTURE = false;\r\n\r\n public VERTEXALPHA = false;\r\n public ALPHATEST = false;\r\n public DEPTHPREPASS = false;\r\n public ALPHABLEND = false;\r\n public ALPHA_FROM_BASE_COLOR_TEXTURE = false;\r\n public ALPHATESTVALUE = \"0.5\";\r\n public PREMULTIPLYALPHA = false;\r\n\r\n public REFLECTIVITY_GAMMA = false;\r\n public REFLECTIVITYDIRECTUV = 0;\r\n public SPECULARTERM = false;\r\n\r\n public LODBASEDMICROSFURACE = true;\r\n\r\n public METALLICWORKFLOW = true;\r\n public ROUGHNESSSTOREINMETALMAPALPHA = false;\r\n public ROUGHNESSSTOREINMETALMAPGREEN = false;\r\n public METALLNESSSTOREINMETALMAPBLUE = false;\r\n public AOSTOREINMETALMAPRED = false;\r\n public SPECULAR_WEIGHT_IN_ALPHA = false;\r\n public SPECULAR_WEIGHT_FROM_SPECULAR_COLOR_TEXTURE = false;\r\n public SPECULAR_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE = false;\r\n public COAT_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE = false;\r\n public USE_GLTF_STYLE_ANISOTROPY = false;\r\n public THIN_FILM_THICKNESS_FROM_THIN_FILM_TEXTURE = false;\r\n\r\n public ENVIRONMENTBRDF = false;\r\n public ENVIRONMENTBRDF_RGBD = false;\r\n public FUZZENVIRONMENTBRDF = false;\r\n\r\n public NORMAL = false;\r\n public TANGENT = false;\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 * Enables anisotropic logic. Still needed because it's used in pbrHelperFunctions\r\n */\r\n public ANISOTROPIC = false;\r\n /**\r\n * Tells the shader to use OpenPBR's anisotropic roughness remapping\r\n */\r\n public ANISOTROPIC_OPENPBR = true;\r\n /**\r\n * Tells the shader to apply anisotropy to the base layer\r\n */\r\n public ANISOTROPIC_BASE = false;\r\n /**\r\n * Tells the shader to apply anisotropy to the coat layer\r\n */\r\n public ANISOTROPIC_COAT = false;\r\n\r\n /**\r\n * Number of samples to use for the fuzz IBL lighting calculations\r\n */\r\n public FUZZ_IBL_SAMPLES = 6;\r\n\r\n /**\r\n * Tells the shader to enable the fuzz layer\r\n */\r\n public FUZZ = false;\r\n\r\n /**\r\n * Tells the shader to enable the thin film layer\r\n */\r\n public THIN_FILM = false;\r\n\r\n /**\r\n * Tells the shader to enable the legacy iridescence code\r\n * Iridescence is the name of thin film interference in the PBR material.\r\n */\r\n public IRIDESCENCE = 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 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 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\r\n public CLUSTLIGHT_SLICES = 0;\r\n public CLUSTLIGHT_BATCH = 0;\r\n\r\n // BRDF defines\r\n BRDF_V_HEIGHT_CORRELATED = true;\r\n MS_BRDF_ENERGY_CONSERVATION = true;\r\n SPHERICAL_HARMONICS = true;\r\n SPECULAR_GLOSSINESS_ENERGY_CONSERVATION = true;\r\n MIX_IBL_RADIANCE_WITH_IRRADIANCE = true;\r\n LEGACY_SPECULAR_ENERGY_CONSERVATION = false;\r\n BASE_DIFFUSE_MODEL = Constants.MATERIAL_DIFFUSE_MODEL_E_OREN_NAYAR;\r\n DIELECTRIC_SPECULAR_MODEL = Constants.MATERIAL_DIELECTRIC_SPECULAR_MODEL_OPENPBR;\r\n CONDUCTOR_SPECULAR_MODEL = Constants.MATERIAL_CONDUCTOR_SPECULAR_MODEL_OPENPBR;\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.NORMALXYSCALE = true;\r\n }\r\n}\r\n\r\nclass OpenPBRMaterialBase extends ImageProcessingMixin(PushMaterial) {}\r\n/**\r\n * A Physically based material that follows the specification of OpenPBR.\r\n *\r\n * For more information, please refer to the documentation :\r\n * https://academysoftwarefoundation.github.io/OpenPBR/index.html\r\n */\r\nexport class OpenPBRMaterial extends OpenPBRMaterialBase {\r\n /**\r\n * Base Weight is a multiplier on the diffuse and metal lobes.\r\n * See OpenPBR's specs for base_weight\r\n */\r\n @serialize()\r\n public baseWeight: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseWeight\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseWeight: Property<number> = new Property<number>(\"base_weight\", 1, \"vBaseWeight\", 1);\r\n\r\n /**\r\n * Base Weight is a multiplier on the diffuse and metal lobes.\r\n * See OpenPBR's specs for base_weight\r\n */\r\n @serializeAsTexture()\r\n public baseWeightTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseWeightTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseWeightTexture: Sampler = new Sampler(\"base_weight\", \"baseWeight\", \"BASE_WEIGHT\");\r\n\r\n /**\r\n * Color of the base diffuse lobe.\r\n * See OpenPBR's specs for base_color\r\n */\r\n @serializeAsColor3()\r\n public baseColor: Color3;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseColor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseColor: Property<Color3> = new Property<Color3>(\"base_color\", Color3.White(), \"vBaseColor\", 4);\r\n\r\n /**\r\n * Base Color Texture property.\r\n * See OpenPBR's specs for base_color\r\n */\r\n @serializeAsTexture()\r\n public baseColorTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseColorTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseColorTexture: Sampler = new Sampler(\"base_color\", \"baseColor\", \"BASE_COLOR\");\r\n\r\n /**\r\n * Roughness of the diffuse lobe.\r\n * See OpenPBR's specs for base_diffuse_roughness\r\n */\r\n @serialize()\r\n public baseDiffuseRoughness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseDiffuseRoughness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseDiffuseRoughness: Property<number> = new Property<number>(\"base_diffuse_roughness\", 0, \"vBaseDiffuseRoughness\", 1);\r\n\r\n /**\r\n * Roughness texture of the diffuse lobe.\r\n * See OpenPBR's specs for base_diffuse_roughness\r\n */\r\n @serializeAsTexture()\r\n public baseDiffuseRoughnessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseDiffuseRoughnessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseDiffuseRoughnessTexture: Sampler = new Sampler(\"base_diffuse_roughness\", \"baseDiffuseRoughness\", \"BASE_DIFFUSE_ROUGHNESS\");\r\n\r\n /**\r\n * Metalness of the base lobe.\r\n * See OpenPBR's specs for base_metalness\r\n */\r\n @serialize()\r\n public baseMetalness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseMetalness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseMetalness: Property<number> = new Property<number>(\"base_metalness\", 0, \"vReflectanceInfo\", 4, 0);\r\n\r\n /**\r\n * Metalness texture.\r\n * See OpenPBR's specs for base_metalness\r\n */\r\n @serializeAsTexture()\r\n public baseMetalnessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"baseMetalnessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _baseMetalnessTexture: Sampler = new Sampler(\"base_metalness\", \"baseMetalness\", \"BASE_METALNESS\");\r\n\r\n /**\r\n * Weight of the specular lobe.\r\n * See OpenPBR's specs for specular_weight\r\n */\r\n @serialize()\r\n public specularWeight: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularWeight\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularWeight: Property<number> = new Property<number>(\"specular_weight\", 1, \"vReflectanceInfo\", 4, 3);\r\n\r\n /**\r\n * Weight texture of the specular lobe.\r\n * See OpenPBR's specs for specular_weight\r\n */\r\n @serializeAsTexture()\r\n public specularWeightTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularWeightTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularWeightTexture: Sampler = new Sampler(\"specular_weight\", \"specularWeight\", \"SPECULAR_WEIGHT\");\r\n\r\n /**\r\n * Color of the specular lobe.\r\n * See OpenPBR's specs for specular_color\r\n */\r\n @serializeAsColor3()\r\n public specularColor: Color3;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularColor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularColor: Property<Color3> = new Property<Color3>(\"specular_color\", Color3.White(), \"vSpecularColor\", 4);\r\n\r\n /**\r\n * Specular Color Texture property.\r\n * See OpenPBR's specs for specular_color\r\n */\r\n @serializeAsTexture()\r\n public specularColorTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularColorTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularColorTexture: Sampler = new Sampler(\"specular_color\", \"specularColor\", \"SPECULAR_COLOR\");\r\n\r\n /**\r\n * Roughness of the specular lobe.\r\n * See OpenPBR's specs for specular_roughness\r\n */\r\n @serialize()\r\n public specularRoughness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularRoughness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularRoughness: Property<number> = new Property<number>(\"specular_roughness\", 0.3, \"vReflectanceInfo\", 4, 1);\r\n\r\n /**\r\n * Roughness texture of the specular lobe.\r\n * See OpenPBR's specs for specular_roughness\r\n */\r\n @serializeAsTexture()\r\n public specularRoughnessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularRoughnessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularRoughnessTexture: Sampler = new Sampler(\"specular_roughness\", \"specularRoughness\", \"SPECULAR_ROUGHNESS\");\r\n\r\n /**\r\n * Anisotropic roughness of the specular lobe.\r\n * See OpenPBR's specs for specular_roughness_anisotropy\r\n */\r\n @serialize()\r\n public specularRoughnessAnisotropy: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularRoughnessAnisotropy\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularRoughnessAnisotropy: Property<number> = new Property<number>(\"specular_roughness_anisotropy\", 0, \"vSpecularAnisotropy\", 3, 2);\r\n\r\n /**\r\n * Anisotropic Roughness texture.\r\n * See OpenPBR's specs for specular_roughness\r\n */\r\n @serializeAsTexture()\r\n public specularRoughnessAnisotropyTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularRoughnessAnisotropyTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularRoughnessAnisotropyTexture: Sampler = new Sampler(\"specular_roughness_anisotropy\", \"specularRoughnessAnisotropy\", \"SPECULAR_ROUGHNESS_ANISOTROPY\");\r\n\r\n /**\r\n * IOR of the specular lobe.\r\n * See OpenPBR's specs for specular_ior\r\n */\r\n @serialize()\r\n public specularIor: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"specularIor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _specularIor: Property<number> = new Property<number>(\"specular_ior\", 1.5, \"vReflectanceInfo\", 4, 2);\r\n\r\n /**\r\n * Defines the amount of clear coat on the surface.\r\n * See OpenPBR's specs for coat_weight\r\n */\r\n @serialize()\r\n public coatWeight: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatWeight\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatWeight: Property<number> = new Property<number>(\"coat_weight\", 0.0, \"vCoatWeight\", 1, 0);\r\n\r\n /**\r\n * Coat weight texture.\r\n * See OpenPBR's specs for coat_weight\r\n */\r\n @serializeAsTexture()\r\n public coatWeightTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatWeightTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatWeightTexture: Sampler = new Sampler(\"coat_weight\", \"coatWeight\", \"COAT_WEIGHT\");\r\n\r\n /**\r\n * Defines the color of the clear coat on the surface.\r\n * See OpenPBR's specs for coat_color\r\n */\r\n @serializeAsColor3()\r\n public coatColor: Color3;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatColor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatColor: Property<Color3> = new Property<Color3>(\"coat_color\", Color3.White(), \"vCoatColor\", 3, 0);\r\n\r\n /**\r\n * Color texture of the clear coat.\r\n * See OpenPBR's specs for coat_color\r\n */\r\n @serializeAsTexture()\r\n public coatColorTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatColorTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatColorTexture: Sampler = new Sampler(\"coat_color\", \"coatColor\", \"COAT_COLOR\");\r\n\r\n /**\r\n * Defines the roughness of the clear coat on the surface.\r\n * See OpenPBR's specs for coat_roughness\r\n */\r\n @serialize()\r\n public coatRoughness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatRoughness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatRoughness: Property<number> = new Property<number>(\"coat_roughness\", 0.0, \"vCoatRoughness\", 1, 0);\r\n\r\n /**\r\n * Roughness texture of the clear coat.\r\n * See OpenPBR's specs for coat_roughness\r\n */\r\n @serializeAsTexture()\r\n public coatRoughnessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatRoughnessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatRoughnessTexture: Sampler = new Sampler(\"coat_roughness\", \"coatRoughness\", \"COAT_ROUGHNESS\");\r\n\r\n /**\r\n * Defines the anisotropy of the clear coat on the surface.\r\n * See OpenPBR's specs for coat_roughness_anisotropy\r\n */\r\n @serialize()\r\n public coatRoughnessAnisotropy: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatRoughnessAnisotropy\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatRoughnessAnisotropy: Property<number> = new Property<number>(\"coat_roughness_anisotropy\", 0, \"vCoatRoughnessAnisotropy\", 1);\r\n\r\n /**\r\n * Anisotropic Roughness texture of the clear coat.\r\n * See OpenPBR's specs for coat_roughness_anisotropy\r\n */\r\n @serializeAsTexture()\r\n public coatRoughnessAnisotropyTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatRoughnessAnisotropyTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatRoughnessAnisotropyTexture: Sampler = new Sampler(\"coat_roughness_anisotropy\", \"coatRoughnessAnisotropy\", \"COAT_ROUGHNESS_ANISOTROPY\");\r\n\r\n /**\r\n * Defines the IOR of the clear coat on the surface.\r\n * See OpenPBR's specs for coat_ior\r\n */\r\n @serialize()\r\n public coatIor: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatIor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatIor: Property<number> = new Property<number>(\"coat_ior\", 1.5, \"vCoatIor\", 1, 0);\r\n\r\n /**\r\n * Defines the amount that interreflections within the coat allow the underlying surface\r\n * to be darkened. A value of 1.0 means that the physically correct amount of darkening\r\n * is applied, while a value of 0.0 means that no darkening is applied.\r\n * See OpenPBR's specs for coat_darkening\r\n */\r\n @serialize()\r\n public coatDarkening: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatDarkening\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatDarkening: Property<number> = new Property<number>(\"coat_darkening\", 1.0, \"vCoatDarkening\", 1, 0);\r\n\r\n /**\r\n * Defines the amount that interreflections within the coat allow the underlying surface\r\n * to be darkened. A value of 1.0 means that the physically correct amount of darkening\r\n * is applied, while a value of 0.0 means that no darkening is applied.\r\n * See OpenPBR's specs for coat_darkening\r\n */\r\n @serializeAsTexture()\r\n public coatDarkeningTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"coatDarkeningTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _coatDarkeningTexture: Sampler = new Sampler(\"coat_darkening\", \"coatDarkening\", \"COAT_DARKENING\");\r\n\r\n /**\r\n * Specifies whether the coat roughness is taken from the\r\n * same texture as the coat_weight.\r\n */\r\n @serialize()\r\n public useCoatRoughnessFromWeightTexture: boolean = false;\r\n\r\n /**\r\n * Defines the weight of the fuzz layer on the surface.\r\n * See OpenPBR's specs for fuzz_weight\r\n */\r\n public fuzzWeight: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"fuzzWeight\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _fuzzWeight: Property<number> = new Property<number>(\"fuzz_weight\", 0.0, \"vFuzzWeight\", 1, 0);\r\n\r\n /**\r\n * Weight texture of the fuzz layer.\r\n * See OpenPBR's specs for fuzz_weight\r\n */\r\n public fuzzWeightTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"fuzzWeightTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _fuzzWeightTexture: Sampler = new Sampler(\"fuzz_weight\", \"fuzzWeight\", \"FUZZ_WEIGHT\");\r\n\r\n /**\r\n * Defines the color of the fuzz layer on the surface.\r\n * See OpenPBR's specs for fuzz_color\r\n */\r\n public fuzzColor: Color3;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"fuzzColor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _fuzzColor: Property<Color3> = new Property<Color3>(\"fuzz_color\", Color3.White(), \"vFuzzColor\", 3, 0);\r\n\r\n /**\r\n * Color texture of the fuzz layer.\r\n * See OpenPBR's specs for fuzz_color\r\n */\r\n public fuzzColorTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"fuzzColorTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _fuzzColorTexture: Sampler = new Sampler(\"fuzz_color\", \"fuzzColor\", \"FUZZ_COLOR\");\r\n\r\n /**\r\n * Defines the roughness of the fuzz layer on the surface.\r\n * See OpenPBR's specs for fuzz_roughness\r\n */\r\n public fuzzRoughness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"fuzzRoughness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _fuzzRoughness: Property<number> = new Property<number>(\"fuzz_roughness\", 0.5, \"vFuzzRoughness\", 1, 0);\r\n\r\n /**\r\n * Roughness texture of the fuzz layer.\r\n * See OpenPBR's specs for fuzz_roughness\r\n */\r\n public fuzzRoughnessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"fuzzRoughnessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _fuzzRoughnessTexture: Sampler = new Sampler(\"fuzz_roughness\", \"fuzzRoughness\", \"FUZZ_ROUGHNESS\");\r\n\r\n /**\r\n * Defines the normal of the material's geometry.\r\n * See OpenPBR's specs for geometry_normal\r\n */\r\n @serializeAsTexture()\r\n public geometryNormalTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryNormalTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryNormalTexture: Sampler = new Sampler(\"geometry_normal\", \"geometryNormal\", \"GEOMETRY_NORMAL\");\r\n\r\n /**\r\n * Defines the tangent of the material's geometry. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_tangent\r\n */\r\n @serializeAsVector2()\r\n public geometryTangent: Vector2;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryTangent\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryTangent: Property<Vector2> = new Property<Vector2>(\"geometry_tangent\", new Vector2(1, 0), \"vSpecularAnisotropy\", 3, 0);\r\n\r\n /**\r\n * Defines the angle of the tangent of the material's geometry. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_tangent\r\n */\r\n public get geometryTangentAngle(): number {\r\n return Math.atan2(this.geometryTangent.y, this.geometryTangent.x);\r\n }\r\n\r\n public set geometryTangentAngle(value: number) {\r\n this.geometryTangent = new Vector2(Math.cos(value), Math.sin(value));\r\n }\r\n\r\n /**\r\n * Defines the tangent of the material's geometry. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_tangent\r\n */\r\n @serializeAsTexture()\r\n public geometryTangentTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryTangentTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryTangentTexture: Sampler = new Sampler(\"geometry_tangent\", \"geometryTangent\", \"GEOMETRY_TANGENT\");\r\n\r\n /**\r\n * Defines the normal of the material's coat layer.\r\n * See OpenPBR's specs for geometry_coat_normal\r\n */\r\n @serializeAsTexture()\r\n public geometryCoatNormalTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryCoatNormalTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryCoatNormalTexture: Sampler = new Sampler(\"geometry_coat_normal\", \"geometryCoatNormal\", \"GEOMETRY_COAT_NORMAL\");\r\n\r\n /**\r\n * Defines the tangent of the material's coat layer. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_coat_tangent\r\n */\r\n @serializeAsVector2()\r\n public geometryCoatTangent: Vector2;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryCoatTangent\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryCoatTangent: Property<Vector2> = new Property<Vector2>(\"geometry_coat_tangent\", new Vector2(1, 0), \"vGeometryCoatTangent\", 2, 0);\r\n\r\n /**\r\n * Defines the angle of the tangent of the material's coat layer.\r\n */\r\n public get geometryCoatTangentAngle(): number {\r\n return Math.atan2(this.geometryCoatTangent.y, this.geometryCoatTangent.x);\r\n }\r\n\r\n /**\r\n * Defines the angle of the tangent of the material's coat layer.\r\n */\r\n public set geometryCoatTangentAngle(value: number) {\r\n this.geometryCoatTangent = new Vector2(Math.cos(value), Math.sin(value));\r\n }\r\n\r\n /**\r\n * Defines the tangent of the material's coat layer. Used only for anisotropic reflections.\r\n * See OpenPBR's specs for geometry_coat_tangent\r\n */\r\n @serializeAsTexture()\r\n public geometryCoatTangentTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryCoatTangentTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryCoatTangentTexture: Sampler = new Sampler(\"geometry_coat_tangent\", \"geometryCoatTangent\", \"GEOMETRY_COAT_TANGENT\");\r\n\r\n /**\r\n * Defines the opacity of the material's geometry.\r\n * See OpenPBR's specs for geometry_opacity\r\n */\r\n @serialize()\r\n public geometryOpacity: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryOpacity\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryOpacity: Property<number> = new Property<number>(\"geometry_opacity\", 1.0, \"vBaseColor\", 4, 3);\r\n\r\n /**\r\n * Defines the opacity texture of the material's geometry.\r\n * See OpenPBR's specs for geometry_opacity\r\n */\r\n @serializeAsTexture()\r\n public geometryOpacityTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"geometryOpacityTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _geometryOpacityTexture: Sampler = new Sampler(\"geometry_opacity\", \"geometryOpacity\", \"GEOMETRY_OPACITY\");\r\n\r\n /**\r\n * Defines the luminance of the material's emission.\r\n * See OpenPBR's specs for emission_luminance\r\n */\r\n @serialize()\r\n public emissionLuminance: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"emissionLuminance\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _emissionLuminance: Property<number> = new Property<number>(\"emission_luminance\", 1.0, \"vLightingIntensity\", 4, 1);\r\n\r\n /**\r\n * Defines the color of the material's emission.\r\n * See OpenPBR's specs for emission_color\r\n */\r\n @serializeAsColor3()\r\n public emissionColor: Color3;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"emissionColor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _emissionColor: Property<Color3> = new Property<Color3>(\"emission_color\", Color3.Black(), \"vEmissionColor\", 3);\r\n\r\n /**\r\n * Defines the texture of the material's emission color.\r\n * See OpenPBR's specs for emission_color\r\n */\r\n @serializeAsTexture()\r\n public emissionColorTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"emissionColorTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _emissionColorTexture: Sampler = new Sampler(\"emission_color\", \"emissionColor\", \"EMISSION_COLOR\");\r\n\r\n /**\r\n * Defines the weight of the thin film layer on top of the base layer for iridescent effects.\r\n */\r\n public thinFilmWeight: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"thinFilmWeight\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _thinFilmWeight: Property<number> = new Property<number>(\"thin_film_weight\", 0.0, \"vThinFilmWeight\", 1, 0);\r\n\r\n /**\r\n * Thin film weight texture.\r\n */\r\n public thinFilmWeightTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"thinFilmWeightTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _thinFilmWeightTexture: Sampler = new Sampler(\"thin_film_weight\", \"thinFilmWeight\", \"THIN_FILM_WEIGHT\");\r\n\r\n /**\r\n * Defines the thickness of the thin film layer in μm. If a texture is provided for thinFilmWeightTexture,\r\n * this value will act as a multiplier to the texture values.\r\n * See OpenPBR's specs for thin_film_thickness\r\n */\r\n public thinFilmThickness: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"thinFilmThickness\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _thinFilmThickness: Property<number> = new Property<number>(\"thin_film_thickness\", 0.5, \"vThinFilmThickness\", 2, 0);\r\n\r\n /**\r\n * Defines the minimum thickness of the thin film layer in μm.\r\n */\r\n public thinFilmThicknessMin: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"thinFilmThicknessMin\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _thinFilmThicknessMin: Property<number> = new Property<number>(\"thin_film_thickness_min\", 0.0, \"vThinFilmThickness\", 2, 1);\r\n\r\n /**\r\n * Defines the maximum thickness of the thin film layer in μm.\r\n */\r\n public thinFilmThicknessTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"thinFilmThicknessTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _thinFilmThicknessTexture: Sampler = new Sampler(\"thin_film_thickness\", \"thinFilmThickness\", \"THIN_FILM_THICKNESS\");\r\n\r\n /**\r\n * Defines the index of refraction of the thin film layer.\r\n */\r\n public thinFilmIor: number;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"thinFilmIor\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _thinFilmIor: Property<number> = new Property<number>(\"thin_film_ior\", 1.4, \"vThinFilmIor\", 1, 0);\r\n\r\n /**\r\n * Defines the ambient occlusion texture.\r\n */\r\n @serializeAsTexture()\r\n public ambientOcclusionTexture: Nullable<BaseTexture>;\r\n @addAccessorsForMaterialProperty(\"_markAllSubMeshesAsTexturesDirty\", \"ambientOcclusionTexture\")\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n private _ambientOcclusionTexture: Sampler = new Sampler(\"ambient_occlusion\", \"ambientOcclusion\", \"AMBIENT_OCCLUSION\");\r\n\r\n private _propertyList: { [name: string]: Property<any> };\r\n private _uniformsList: { [name: string]: Uniform } = {};\r\n private _samplersList: { [name: string]: Sampler } = {};\r\n private _samplerDefines: { [name: string]: { type: string; default: any } } = {};\r\n\r\n private static _noiseTextures: { [id: number]: BaseTexture } = {};\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 */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public directIntensity: 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 */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public environmentIntensity: number = 1.0;\r\n\r\n /**\r\n * Specifies that the specular weight is stored in the alpha channel of the specular weight texture.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useSpecularWeightFromTextureAlpha = false;\r\n\r\n /**\r\n * Enforces alpha test in opaque or blend mode in order to improve the performances of some situations.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesAndMiscDirty\")\r\n public forceAlphaTest = false;\r\n\r\n /**\r\n * Defines the alpha limits in alpha test mode.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesAndMiscDirty\")\r\n public alphaCutOff = 0.4;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the ambient occlusion information in its red channel.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\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 */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useAmbientInGrayScale = false;\r\n\r\n /**\r\n * BJS is using an hardcoded light falloff based on a manually sets up range.\r\n * In PBR, one way to represents the falloff is to use the inverse squared root algorithm.\r\n * This parameter can help you switch back to the BJS mode in order to create scenes using both materials.\r\n */\r\n @serialize()\r\n public get usePhysicalLightFalloff(): boolean {\r\n return this._lightFalloff === Material.LIGHTFALLOFF_PHYSICAL;\r\n }\r\n\r\n /**\r\n * BJS is using an hardcoded light falloff based on a manually sets up range.\r\n * In PBR, one way to represents the falloff is to use the inverse squared root algorithm.\r\n * This parameter can help you switch back to the BJS mode in order to create scenes using both materials.\r\n */\r\n public set usePhysicalLightFalloff(value: boolean) {\r\n if (value !== this.usePhysicalLightFalloff) {\r\n // Ensure the effect will be rebuilt.\r\n this._markAllSubMeshesAsTexturesDirty();\r\n\r\n if (value) {\r\n this._lightFalloff = Material.LIGHTFALLOFF_PHYSICAL;\r\n } else {\r\n this._lightFalloff = Material.LIGHTFALLOFF_STANDARD;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * In order to support the falloff compatibility with gltf, a special mode has been added\r\n * to reproduce the gltf light falloff.\r\n */\r\n @serialize()\r\n public get useGLTFLightFalloff(): boolean {\r\n return this._lightFalloff === Material.LIGHTFALLOFF_GLTF;\r\n }\r\n\r\n /**\r\n * In order to support the falloff compatibility with gltf, a special mode has been added\r\n * to reproduce the gltf light falloff.\r\n */\r\n public set useGLTFLightFalloff(value: boolean) {\r\n if (value !== this.useGLTFLightFalloff) {\r\n // Ensure the effect will be rebuilt.\r\n this._markAllSubMeshesAsTexturesDirty();\r\n\r\n if (value) {\r\n this._lightFalloff = Material.LIGHTFALLOFF_GLTF;\r\n } else {\r\n this._lightFalloff = Material.LIGHTFALLOFF_STANDARD;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Allows using an object space normal map (instead of tangent space).\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useObjectSpaceNormalMap = false;\r\n\r\n /**\r\n * Allows using the normal map in parallax mode.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useParallax = false;\r\n\r\n /**\r\n * Allows using the normal map in parallax occlusion mode.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useParallaxOcclusion = false;\r\n\r\n /**\r\n * Controls the scale bias of the parallax mode.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\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 */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public disableLighting = false;\r\n\r\n /**\r\n * Force the shader to compute irradiance in the fragment shader in order to take normal mapping into account.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public forceIrradianceInFragment = false;\r\n\r\n /**\r\n * Number of Simultaneous lights allowed on the material.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public maxSimultaneousLights = 4;\r\n\r\n /**\r\n * If sets to true, x component of normal map value will invert (x = 1.0 - x).\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public invertNormalMapX = false;\r\n\r\n /**\r\n * If sets to true, y component of normal map value will invert (y = 1.0 - y).\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\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 */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public twoSidedLighting = 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 is converted to gamma to compute the fresnel)\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\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 */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useLinearAlphaFresnel = false;\r\n\r\n /**\r\n * Let user defines the brdf lookup texture used for IBL.\r\n * A default 8bit version is embedded but you could point at :\r\n * * Default texture: https://assets.babylonjs.com/environments/correlatedMSBRDF_RGBD.png\r\n * * Default 16bit pixel depth texture: https://assets.babylonjs.com/environments/correlatedMSBRDF.dds\r\n * * LEGACY Default None correlated https://assets.babylonjs.com/environments/uncorrelatedBRDF_RGBD.png\r\n * * LEGACY Default None correlated 16bit pixel depth https://assets.babylonjs.com/environments/uncorrelatedBRDF.dds\r\n */\r\n @serializeAsTexture()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public environmentBRDFTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Force normal to face away from face.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\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 normalmap values.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public enableSpecularAntiAliasing = 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 */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\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 */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public useRadianceOcclusion = true;\r\n\r\n /**\r\n * If set to true, no lighting calculations will be applied.\r\n */\r\n @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public 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 @serialize()\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public applyDecalMapAfterDetailMap = false;\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 * This stores the direct, emissive, environment, and specular light intensities into a Vector4.\r\n */\r\n private _lightingInfos: Vector4 = new Vector4(this.directIntensity, 1.0, this.environmentIntensity, 1.0);\r\n\r\n /**\r\n * Stores the radiance (and, possibly, irradiance) values in a texture.\r\n * @internal\r\n */\r\n public _radianceTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Specifies that the specular weight will be read from the alpha channel.\r\n * This is for compatibility with glTF's KHR_materials_specular extension.\r\n * @internal\r\n */\r\n public _useSpecularWeightFromAlpha = false;\r\n\r\n /**\r\n * Specifies that the specular weight will be read from the alpha channel of the specular color texture.\r\n * This is for compatibility with glTF's KHR_materials_specular extension.\r\n * @internal\r\n */\r\n public _useSpecularWeightFromSpecularColorTexture = false;\r\n\r\n /**\r\n * Specifies if the material uses anisotropy weight read from the geometry tangent texture's blue channel.\r\n * This is for compatibility with glTF's anisotropy extension.\r\n * @internal\r\n */\r\n public _useSpecularRoughnessAnisotropyFromTangentTexture = false;\r\n\r\n /**\r\n * Specifies if the material uses coat anisotropy weight read from the coat's geometry tangent texture's blue channel.\r\n * This is for compatibility with glTF's clearcoat_anisotropy extension.\r\n * @internal\r\n */\r\n public _useCoatRoughnessAnisotropyFromTangentTexture = false;\r\n\r\n /**\r\n * Assume the anisotropy data is stored in the format specified by\r\n * KHR_materials_anisotropy.\r\n * @internal\r\n */\r\n public _useGltfStyleAnisotropy = 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 from the base color texture's alpha channel.\r\n * This is for compatibility with glTF.\r\n * @internal\r\n */\r\n public _useAlphaFromBaseColorTexture = false;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the ambient occlusion information in its red channel.\r\n * This is for compatibility with glTF.\r\n * @internal\r\n */\r\n public _useAmbientOcclusionFromMetallicTextureRed = false;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the roughness information in its green channel.\r\n * This is for compatibility with glTF.\r\n * @internal\r\n */\r\n public _useRoughnessFromMetallicTextureGreen = false;\r\n\r\n /**\r\n * Specifies if the metallic texture contains the metallic information in its blue channel.\r\n * This is for compatibility with glTF.\r\n * @internal\r\n */\r\n public _useMetallicFromMetallicTextureBlue = false;\r\n\r\n /**\r\n * Specifies if the thin film thickness is stored in the green channel of the thin film thickness texture.\r\n */\r\n public _useThinFilmThicknessFromTextureGreen = 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 = Material.LIGHTFALLOFF_PHYSICAL;\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 normal map in parallax mode.\r\n * @internal\r\n */\r\n public _useParallax = false;\r\n\r\n /**\r\n * Allows using the normal 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 * Specifies the environment BRDF texture used to compute the scale and offset roughness values\r\n * from cos theta and roughness for the fuzz layer:\r\n * https://github.com/tizian/ltc-sheen?tab=readme-ov-file\r\n * @internal\r\n */\r\n public _environmentFuzzBRDFTexture: Nullable<BaseTexture> = null;\r\n\r\n /**\r\n * Force the shader to compute irradiance in the fragment shader in order to take normal mapping into 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 private _fuzzSampleNumber: number = 4;\r\n\r\n /**\r\n * The number of samples used to compute the fuzz IBL lighting.\r\n */\r\n public get fuzzSampleNumber(): number {\r\n return this._fuzzSampleNumber;\r\n }\r\n public set fuzzSampleNumber(n: number) {\r\n this._fuzzSampleNumber = n;\r\n this.markAsDirty(Constants.MATERIAL_TextureDirtyFlag);\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 * 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 normalmap 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 * 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 additional PrePass parameters for the material.\r\n */\r\n public readonly prePassConfiguration: PrePassConfiguration;\r\n\r\n protected _cacheHasRenderTargetTextures = false;\r\n\r\n /**\r\n * Instantiates a new OpenPBRMaterial 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 || OpenPBRMaterial.ForceGLSL);\r\n // TODO: Check if we're running WebGL 2.0 or above\r\n if (this.getScene() && !this.getScene()?.getEngine().isWebGPU && (this.getScene().getEngine() as Engine).webGLVersion < 2) {\r\n Logger.Error(\"OpenPBRMaterial: WebGL 2.0 or above is required for this material.\");\r\n }\r\n\r\n if (!OpenPBRMaterial._noiseTextures[this.getScene().uniqueId]) {\r\n OpenPBRMaterial._noiseTextures[this.getScene().uniqueId] = new Texture(\r\n \"https://assets.babylonjs.com/textures/blue_noise/blue_noise_rgb.png\",\r\n this.getScene(),\r\n false,\r\n true,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE\r\n );\r\n this.getScene().onDisposeObservable.addOnce(() => {\r\n OpenPBRMaterial._noiseTextures[this.getScene().uniqueId]?.dispose();\r\n delete OpenPBRMaterial._noiseTextures[this.getScene().uniqueId];\r\n });\r\n }\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._radianceTexture && this._radianceTexture.isRenderTarget) {\r\n this._renderTargets.push(<RenderTargetTexture>this._radianceTexture);\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._environmentFuzzBRDFTexture = GetEnvironmentFuzzBRDFTexture(this.getScene());\r\n this.prePassConfiguration = new PrePassConfiguration();\r\n\r\n // Build the internal property list that can be used to generate and update the uniform buffer\r\n this._propertyList = {};\r\n for (const key of Object.getOwnPropertyNames(this)) {\r\n const value = (this as any)[key];\r\n if (value instanceof Property) {\r\n this._propertyList[key] = value;\r\n }\r\n }\r\n // Build the internal uniforms list that is used for combining and updating\r\n // property values in the uniform buffer\r\n const propertyKeys = Object.keys(this._propertyList);\r\n propertyKeys.forEach((key) => {\r\n const prop = this._propertyList[key];\r\n let uniform = this._uniformsList[prop.targetUniformName];\r\n if (!uniform) {\r\n uniform = new Uniform(prop.targetUniformName, prop.targetUniformComponentNum);\r\n this._uniformsList[prop.targetUniformName] = uniform;\r\n } else if (uniform.numComponents !== prop.targetUniformComponentNum) {\r\n Logger.Error(`Uniform ${prop.targetUniformName} already exists of size ${uniform.numComponents}, but trying to set it to ${prop.targetUniformComponentNum}.`);\r\n }\r\n uniform.linkedProperties[prop.name] = prop;\r\n });\r\n\r\n // Build the internal list of samplers\r\n this._samplersList = {};\r\n for (const key of Object.getOwnPropertyNames(this)) {\r\n const value = (this as any)[key];\r\n if (value instanceof Sampler) {\r\n this._samplersList[key] = value;\r\n }\r\n }\r\n\r\n // For each sampler in _samplersList, add defines to be added to OpenPBRMaterialDefines\r\n for (const samplerKey in this._samplersList) {\r\n const sampler = this._samplersList[samplerKey];\r\n const defineName = sampler.textureDefine;\r\n this._samplerDefines[defineName] = { type: \"boolean\", default: false };\r\n this._samplerDefines[defineName + \"DIRECTUV\"] = { type: \"number\", default: 0 };\r\n this._samplerDefines[defineName + \"_GAMMA\"] = { type: \"boolean\", default: false };\r\n }\r\n\r\n // Arg. Why do I have to add these references to get rid of the linting errors?\r\n this._baseWeight;\r\n this._baseWeightTexture;\r\n this._baseColor;\r\n this._baseColorTexture;\r\n this._baseDiffuseRoughness;\r\n this._baseDiffuseRoughnessTexture;\r\n this._baseMetalness;\r\n this._baseMetalnessTexture;\r\n this._specularWeight;\r\n this._specularWeightTexture;\r\n this._specularColor;\r\n this._specularColorTexture;\r\n this._specularRoughness;\r\n this._specularIor;\r\n this._specularRoughnessTexture;\r\n this._specularRoughnessAnisotropy;\r\n this._specularRoughnessAnisotropyTexture;\r\n this._coatWeight;\r\n this._coatWeightTexture;\r\n this._coatColor;\r\n this._coatColorTexture;\r\n this._coatRoughness;\r\n this._coatRoughnessTexture;\r\n this._coatRoughnessAnisotropy;\r\n this._coatRoughnessAnisotropyTexture;\r\n this._coatIor;\r\n this._coatDarkening;\r\n this._coatDarkeningTexture;\r\n this._fuzzWeight;\r\n this._fuzzWeightTexture;\r\n this._fuzzColor;\r\n this._fuzzColorTexture;\r\n this._fuzzRoughness;\r\n this._fuzzRoughnessTexture;\r\n this._geometryNormalTexture;\r\n this._geometryTangent;\r\n this._geometryTangentTexture;\r\n this._geometryCoatNormalTexture;\r\n this._geometryCoatTangent;\r\n this._geometryCoatTangentTexture;\r\n this._geometryOpacity;\r\n this._geometryOpacityTexture;\r\n this._thinFilmWeight;\r\n this._thinFilmWeightTexture;\r\n this._thinFilmThickness;\r\n this._thinFilmThicknessMin;\r\n this._thinFilmThicknessTexture;\r\n this._thinFilmIor;\r\n this._emissionLuminance;\r\n this._emissionColor;\r\n this._emissionColorTexture;\r\n this._ambientOcclusionTexture;\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._radianceTexture && this._radianceTexture.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 \"OpenPBRMaterial\";\r\n }\r\n\r\n protected override _transparencyMode: number = Material.MATERIAL_OPAQUE;\r\n\r\n @serialize()\r\n public override get transparencyMode(): number {\r\n return this._transparencyMode;\r\n }\r\n\r\n public override set transparencyMode(value: number) {\r\n if (this._transparencyMode === value) {\r\n return;\r\n }\r\n\r\n this._transparencyMode = value;\r\n\r\n this._markAllSubMeshesAsTexturesAndMiscDirty();\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 _shouldUseAlphaFromBaseColorTexture(): boolean {\r\n return this._hasAlphaChannel() && this._transparencyMode !== Material.MATERIAL_OPAQUE && !this.geometryOpacityTexture;\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.baseColorTexture != null && this.baseColorTexture.hasAlpha && this._useAlphaFromBaseColorTexture) || this.geometryOpacityTexture != null;\r\n }\r\n\r\n /**\r\n * Makes a duplicate of the current material.\r\n * @param name - name to use for the new material.\r\n * @param cloneTexturesOnlyOnce - if a texture is used in more than one channel (e.g baseColor and opacity), only clone it once and reuse it on the other channels. Default false.\r\n * @param rootUrl defines the root URL to use to load textures\r\n * @returns cloned material instance\r\n */\r\n public override clone(name: string, cloneTexturesOnlyOnce: boolean = true, rootUrl = \"\"): OpenPBRMaterial {\r\n const clone = SerializationHelper.Clone(() => new OpenPBRMaterial(name, this.getScene()), this, { cloneTexturesOnlyOnce });\r\n\r\n clone.id = name;\r\n clone.name = name;\r\n\r\n this.stencil.copyTo(clone.stencil);\r\n\r\n this._clonePlugins(clone, rootUrl);\r\n\r\n return clone;\r\n }\r\n\r\n /**\r\n * Serializes this PBR Material.\r\n * @returns - An object with the serialized material.\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.customType = \"BABYLON.OpenPBRMaterial\";\r\n\r\n return serializationObject;\r\n }\r\n\r\n // Statics\r\n /**\r\n * Parses a PBR Material from a serialized object.\r\n * @param source - Serialized object.\r\n * @param scene - BJS scene instance.\r\n * @param rootUrl - url for the scene object\r\n * @returns - OpenPBRMaterial\r\n */\r\n public static override Parse(source: any, scene: Scene, rootUrl: string): OpenPBRMaterial {\r\n const material = SerializationHelper.Parse(() => new OpenPBRMaterial(source.name, scene), source, scene, rootUrl);\r\n\r\n if (source.stencil) {\r\n material.stencil.parse(source.stencil, scene, rootUrl);\r\n }\r\n\r\n Material._ParsePlugins(source, material, scene, rootUrl);\r\n\r\n return material;\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\r\n const defines = new OpenPBRMaterialDefines({\r\n ...(this._eventInfo.defineNames || {}),\r\n ...(this._samplerDefines || {}),\r\n });\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 * 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 OpenPBRMaterialDefines({\r\n ...(this._eventInfo.defineNames || {}),\r\n ...(this._samplerDefines || {}),\r\n });\r\n }\r\n\r\n const defines = <OpenPBRMaterialDefines>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 // Loop through samplers, check MaterialFlag and whether the texture is ready or not.\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n if (!sampler.value.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n const radianceTexture = this._getRadianceTexture();\r\n if (radianceTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n if (!radianceTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n if (radianceTexture.irradianceTexture) {\r\n if (!radianceTexture.irradianceTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n } else {\r\n // Not ready until spherical are ready too.\r\n if (!radianceTexture.sphericalPolynomial && radianceTexture.getInternalTexture()?._sphericalPolynomialPromise) {\r\n return false;\r\n }\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 if (this._environmentFuzzBRDFTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n // This is blocking.\r\n if (!this._environmentFuzzBRDFTexture.isReady()) {\r\n return false;\r\n }\r\n }\r\n\r\n if (OpenPBRMaterial._noiseTextures[scene.uniqueId]) {\r\n if (!OpenPBRMaterial._noiseTextures[scene.uniqueId].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\"]) {\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(\"OpenPBRMaterial: 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 * 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(\"vTangentSpaceParams\", 2);\r\n ubo.addUniform(\"vLightingIntensity\", 4);\r\n\r\n ubo.addUniform(\"pointSize\", 1);\r\n\r\n ubo.addUniform(\"vDebugMode\", 2);\r\n\r\n ubo.addUniform(\"cameraInfo\", 4);\r\n PrepareUniformLayoutForIBL(ubo, true, true, true, true, true);\r\n\r\n Object.values(this._uniformsList).forEach((uniform) => {\r\n ubo.addUniform(uniform.name, uniform.numComponents);\r\n });\r\n\r\n Object.values(this._samplersList).forEach((sampler) => {\r\n ubo.addUniform(sampler.samplerInfoName, 2);\r\n ubo.addUniform(sampler.samplerMatrixName, 16);\r\n });\r\n\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 = <OpenPBRMaterialDefines>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 radianceTexture: Nullable<BaseTexture> = null;\r\n const ubo = this._uniformBuffer;\r\n if (mustRebind) {\r\n this.bindViewProjection(effect);\r\n radianceTexture = this._getRadianceTexture();\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 // Loop through samplers and bind info and matrix for each texture.\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n ubo.updateFloat2(sampler.samplerInfoName, sampler.value.coordinatesIndex, sampler.value.level);\r\n BindTextureMatrix(sampler.value, ubo, sampler.samplerPrefix);\r\n }\r\n }\r\n\r\n if (this.geometryNormalTexture) {\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, Color3.White(), radianceTexture, 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 Object.values(this._uniformsList).forEach((uniform) => {\r\n // If the property actually defines a uniform, update it.\r\n if (uniform.numComponents === 4) {\r\n uniform.populateVectorFromLinkedProperties(TmpVectors.Vector4[0]);\r\n ubo.updateVector4(uniform.name, TmpVectors.Vector4[0]);\r\n } else if (uniform.numComponents === 3) {\r\n uniform.populateVectorFromLinkedProperties(TmpVectors.Vector3[0]);\r\n ubo.updateVector3(uniform.name, TmpVectors.Vector3[0]);\r\n } else if (uniform.numComponents === 2) {\r\n uniform.populateVectorFromLinkedProperties(TmpVectors.Vector2[0]);\r\n ubo.updateFloat2(uniform.name, TmpVectors.Vector2[0].x, TmpVectors.Vector2[0].y);\r\n } else if (uniform.numComponents === 1) {\r\n ubo.updateFloat(uniform.name, uniform.linkedProperties[Object.keys(uniform.linkedProperties)[0]].value as number);\r\n }\r\n });\r\n\r\n // Misc\r\n this._lightingInfos.x = this.directIntensity;\r\n this._lightingInfos.y = this.emissionLuminance;\r\n this._lightingInfos.z = this.environmentIntensity * scene.environmentIntensity;\r\n this._lightingInfos.w = 1.0; // This is used to be _specularIntensity.\r\n\r\n ubo.updateVector4(\"vLightingIntensity\", this._lightingInfos);\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 // Loop through samplers and set textures\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n ubo.setTexture(sampler.samplerName, sampler.value);\r\n }\r\n }\r\n\r\n BindIBLSamplers(scene, defines, ubo, radianceTexture, this.realTimeFiltering);\r\n\r\n if (defines.ENVIRONMENTBRDF) {\r\n ubo.setTexture(\"environmentBrdfSampler\", this._environmentBRDFTexture);\r\n }\r\n\r\n if (defines.FUZZENVIRONMENTBRDF) {\r\n ubo.setTexture(\"environmentFuzzBrdfSampler\", this._environmentFuzzBRDFTexture);\r\n }\r\n\r\n if (defines.ANISOTROPIC || defines.FUZZ) {\r\n ubo.setTexture(\"blueNoiseSampler\", OpenPBRMaterial._noiseTextures[this.getScene().uniqueId]);\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 ((scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) || radianceTexture || mesh.receiveShadows || defines.PREPASS) {\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 // Loop through samplers and push animated textures to list.\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value && sampler.value.animations && sampler.value.animations.length > 0) {\r\n results.push(sampler.value);\r\n }\r\n }\r\n\r\n if (this._radianceTexture && this._radianceTexture.animations && this._radianceTexture.animations.length > 0) {\r\n results.push(this._radianceTexture);\r\n }\r\n\r\n return results;\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 // Loop through samplers and push active textures\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n activeTextures.push(sampler.value);\r\n }\r\n }\r\n\r\n if (this._radianceTexture) {\r\n activeTextures.push(this._radianceTexture);\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 // Loop through samplers and check each texture for equality\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value === texture) {\r\n return true;\r\n }\r\n }\r\n\r\n if (this._radianceTexture === 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 return false;\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 if (this._environmentFuzzBRDFTexture && this.getScene().environmentFuzzBRDFTexture !== this._environmentFuzzBRDFTexture) {\r\n this._environmentFuzzBRDFTexture.dispose();\r\n }\r\n\r\n // Loop through samplers and dispose the textures\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n sampler.value?.dispose();\r\n }\r\n\r\n this._radianceTexture?.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 /**\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 _getRadianceTexture(): Nullable<BaseTexture> {\r\n if (this._radianceTexture) {\r\n return this._radianceTexture;\r\n }\r\n\r\n return this.getScene().environmentTexture;\r\n }\r\n\r\n private _prepareEffect(\r\n mesh: AbstractMesh,\r\n renderingMesh: AbstractMesh,\r\n defines: OpenPBRMaterialDefines,\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 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.NORMAL) {\r\n fallbacks.addFallback(fallbackRank++, \"NORMAL\");\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 = \"openpbr\";\r\n\r\n const uniforms = [\r\n \"world\",\r\n \"view\",\r\n \"viewProjection\",\r\n \"vEyePosition\",\r\n \"vLightsType\",\r\n \"visibility\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"pointSize\",\r\n \"mBones\",\r\n \"normalMatrix\",\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 for (const uniformName in this._uniformsList) {\r\n uniforms.push(uniformName);\r\n }\r\n\r\n const samplers = [\r\n \"environmentBrdfSampler\",\r\n \"environmentFuzzBrdfSampler\",\r\n \"blueNoiseSampler\",\r\n \"boneSampler\",\r\n \"morphTargets\",\r\n \"oitDepthSampler\",\r\n \"oitFrontColorSampler\",\r\n \"areaLightsLTC1Sampler\",\r\n \"areaLightsLTC2Sampler\",\r\n ];\r\n\r\n if (defines.FUZZENVIRONMENTBRDF) {\r\n samplers.push(\"environmentFuzzBrdfSampler\");\r\n }\r\n\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n samplers.push(sampler.samplerName);\r\n\r\n // Push uniforms for texture infos and matrix\r\n uniforms.push(sampler.samplerInfoName);\r\n uniforms.push(sampler.samplerMatrixName);\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/openpbr.vertex\"), import(\"../../ShadersWGSL/openpbr.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../../Shaders/openpbr.vertex\"), import(\"../../Shaders/openpbr.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: OpenPBRMaterialDefines,\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 = true;\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 // Loop through samplers and prepare defines for each texture\r\n for (const key in this._samplersList) {\r\n const sampler = this._samplersList[key];\r\n if (sampler.value) {\r\n PrepareDefinesForMergedUV(sampler.value, defines, sampler.textureDefine);\r\n defines[sampler.textureDefine + \"_GAMMA\"] = sampler.value.gammaSpace;\r\n } else {\r\n defines[sampler.textureDefine] = false;\r\n }\r\n }\r\n\r\n const radianceTexture = this._getRadianceTexture();\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, radianceTexture, defines, this.realTimeFiltering, this.realTimeFilteringQuality, !useSHInFragment);\r\n\r\n if (this._baseMetalnessTexture) {\r\n defines.AOSTOREINMETALMAPRED = this._useAmbientOcclusionFromMetallicTextureRed;\r\n }\r\n\r\n defines.SPECULAR_WEIGHT_IN_ALPHA = this._useSpecularWeightFromAlpha;\r\n defines.SPECULAR_WEIGHT_FROM_SPECULAR_COLOR_TEXTURE = this._useSpecularWeightFromSpecularColorTexture;\r\n defines.SPECULAR_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE = this._useSpecularRoughnessAnisotropyFromTangentTexture;\r\n defines.COAT_ROUGHNESS_ANISOTROPY_FROM_TANGENT_TEXTURE = this._useCoatRoughnessAnisotropyFromTangentTexture;\r\n defines.ROUGHNESSSTOREINMETALMAPGREEN = this._useRoughnessFromMetallicTextureGreen;\r\n defines.METALLNESSSTOREINMETALMAPBLUE = this._useMetallicFromMetallicTextureBlue;\r\n defines.THIN_FILM_THICKNESS_FROM_THIN_FILM_TEXTURE = this._useThinFilmThicknessFromTextureGreen;\r\n\r\n if (this.geometryNormalTexture) {\r\n if (this._useParallax && this.baseColorTexture && 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 defines.OBJECTSPACE_NORMALMAP = this._useObjectSpaceNormalMap;\r\n } else {\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._environmentFuzzBRDFTexture) {\r\n defines.FUZZENVIRONMENTBRDF = true;\r\n } else {\r\n defines.FUZZENVIRONMENTBRDF = false;\r\n }\r\n\r\n if (this._shouldUseAlphaFromBaseColorTexture()) {\r\n defines.ALPHA_FROM_BASE_COLOR_TEXTURE = true;\r\n } else {\r\n defines.ALPHA_FROM_BASE_COLOR_TEXTURE = false;\r\n }\r\n }\r\n\r\n if (this._lightFalloff === Material.LIGHTFALLOFF_STANDARD) {\r\n defines.USEPHYSICALLIGHTFALLOFF = false;\r\n defines.USEGLTFLIGHTFALLOFF = false;\r\n } else if (this._lightFalloff === Material.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 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 }\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 if (\r\n (this.specularRoughnessAnisotropy > 0.0 || this.coatRoughnessAnisotropy > 0.0) &&\r\n OpenPBRMaterial._noiseTextures[scene.uniqueId] &&\r\n MaterialFlags.ReflectionTextureEnabled\r\n ) {\r\n // ANISOTROPIC is used to include common shader functions needed for anisotropy\r\n // ANISOTROPIC_BASE is used to process anisotropy for the base layer\r\n // ANISOTROPIC_COAT is used to process anisotropy for the coat layer\r\n defines.ANISOTROPIC = true;\r\n if (!mesh.isVerticesDataPresent(VertexBuffer.TangentKind)) {\r\n defines._needUVs = true;\r\n defines.MAINUV1 = true;\r\n }\r\n if (this._useGltfStyleAnisotropy) {\r\n defines.USE_GLTF_STYLE_ANISOTROPY = true;\r\n }\r\n defines.ANISOTROPIC_BASE = this.specularRoughnessAnisotropy > 0.0;\r\n defines.ANISOTROPIC_COAT = this.coatRoughnessAnisotropy > 0.0;\r\n } else {\r\n defines.ANISOTROPIC = false;\r\n defines.USE_GLTF_STYLE_ANISOTROPY = false;\r\n defines.ANISOTROPIC_BASE = false;\r\n defines.ANISOTROPIC_COAT = false;\r\n }\r\n\r\n defines.THIN_FILM = this.thinFilmWeight > 0.0;\r\n defines.IRIDESCENCE = this.thinFilmWeight > 0.0;\r\n\r\n defines.FUZZ = this.fuzzWeight > 0 && MaterialFlags.ReflectionTextureEnabled;\r\n if (defines.FUZZ) {\r\n if (!mesh.isVerticesDataPresent(VertexBuffer.TangentKind)) {\r\n defines._needUVs = true;\r\n defines.MAINUV1 = true;\r\n }\r\n this._environmentFuzzBRDFTexture = GetEnvironmentFuzzBRDFTexture(this.getScene());\r\n defines.FUZZ_IBL_SAMPLES = this.fuzzSampleNumber;\r\n } else {\r\n this._environmentFuzzBRDFTexture = null;\r\n defines.FUZZENVIRONMENTBRDF = false;\r\n defines.FUZZ_IBL_SAMPLES = 0;\r\n }\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 !== Material.MATERIAL_OPAQUE);\r\n\r\n // External config\r\n this._callbackPluginEventPrepareDefines(this._eventInfo);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.OpenPBRMaterial\", OpenPBRMaterial);\r\n"]}