1 |
- {"ast":null,"code":"import { __decorate } from \"../tslib.es6.js\";\nimport { serialize, serializeAsColor3, expandToProperty } from \"../Misc/decorators.js\";\nimport { Vector3 } from \"../Maths/math.vector.js\";\nimport { Color3, TmpColors } from \"../Maths/math.color.js\";\nimport { Node } from \"../node.js\";\nimport { UniformBuffer } from \"../Materials/uniformBuffer.js\";\nimport { GetClass } from \"../Misc/typeStore.js\";\nimport { LightConstants } from \"./lightConstants.js\";\nimport { SerializationHelper } from \"../Misc/decorators.serialization.js\";\n/**\n * Base class of all the lights in Babylon. It groups all the generic information about lights.\n * Lights are used, as you would expect, to affect how meshes are seen, in terms of both illumination and colour.\n * All meshes allow light to pass through them unless shadow generation is activated. The default number of lights allowed is four but this can be increased.\n */\nexport class Light extends Node {\n /**\n * Defines how far from the source the light is impacting in scene units.\n * Note: Unused in PBR material as the distance light falloff is defined following the inverse squared falloff.\n */\n get range() {\n return this._range;\n }\n /**\n * Defines how far from the source the light is impacting in scene units.\n * Note: Unused in PBR material as the distance light falloff is defined following the inverse squared falloff.\n */\n set range(value) {\n this._range = value;\n this._inverseSquaredRange = 1.0 / (this.range * this.range);\n }\n /**\n * Gets the photometric scale used to interpret the intensity.\n * This is only relevant with PBR Materials where the light intensity can be defined in a physical way.\n */\n get intensityMode() {\n return this._intensityMode;\n }\n /**\n * Sets the photometric scale used to interpret the intensity.\n * This is only relevant with PBR Materials where the light intensity can be defined in a physical way.\n */\n set intensityMode(value) {\n this._intensityMode = value;\n this._computePhotometricScale();\n }\n /**\n * Gets the light radius used by PBR Materials to simulate soft area lights.\n */\n get radius() {\n return this._radius;\n }\n /**\n * sets the light radius used by PBR Materials to simulate soft area lights.\n */\n set radius(value) {\n this._radius = value;\n this._computePhotometricScale();\n }\n /**\n * Gets whether or not the shadows are enabled for this light. This can help turning off/on shadow without detaching\n * the current shadow generator.\n */\n get shadowEnabled() {\n return this._shadowEnabled;\n }\n /**\n * Sets whether or not the shadows are enabled for this light. This can help turning off/on shadow without detaching\n * the current shadow generator.\n */\n set shadowEnabled(value) {\n if (this._shadowEnabled === value) {\n return;\n }\n this._shadowEnabled = value;\n this._markMeshesAsLightDirty();\n }\n /**\n * Gets the only meshes impacted by this light.\n */\n get includedOnlyMeshes() {\n return this._includedOnlyMeshes;\n }\n /**\n * Sets the only meshes impacted by this light.\n */\n set includedOnlyMeshes(value) {\n this._includedOnlyMeshes = value;\n this._hookArrayForIncludedOnly(value);\n }\n /**\n * Gets the meshes not impacted by this light.\n */\n get excludedMeshes() {\n return this._excludedMeshes;\n }\n /**\n * Sets the meshes not impacted by this light.\n */\n set excludedMeshes(value) {\n this._excludedMeshes = value;\n this._hookArrayForExcluded(value);\n }\n /**\n * Gets the layer id use to find what meshes are not impacted by the light.\n * Inactive if 0\n */\n get excludeWithLayerMask() {\n return this._excludeWithLayerMask;\n }\n /**\n * Sets the layer id use to find what meshes are not impacted by the light.\n * Inactive if 0\n */\n set excludeWithLayerMask(value) {\n this._excludeWithLayerMask = value;\n this._resyncMeshes();\n }\n /**\n * Gets the layer id use to find what meshes are impacted by the light.\n * Inactive if 0\n */\n get includeOnlyWithLayerMask() {\n return this._includeOnlyWithLayerMask;\n }\n /**\n * Sets the layer id use to find what meshes are impacted by the light.\n * Inactive if 0\n */\n set includeOnlyWithLayerMask(value) {\n this._includeOnlyWithLayerMask = value;\n this._resyncMeshes();\n }\n /**\n * Gets the lightmap mode of this light (should be one of the constants defined by Light.LIGHTMAP_x)\n */\n get lightmapMode() {\n return this._lightmapMode;\n }\n /**\n * Sets the lightmap mode of this light (should be one of the constants defined by Light.LIGHTMAP_x)\n */\n set lightmapMode(value) {\n if (this._lightmapMode === value) {\n return;\n }\n this._lightmapMode = value;\n this._markMeshesAsLightDirty();\n }\n /**\n * Returns the view matrix.\n * @param _faceIndex The index of the face for which we want to extract the view matrix. Only used for point light types.\n * @returns The view matrix. Can be null, if a view matrix cannot be defined for the type of light considered (as for a hemispherical light, for example).\n */\n getViewMatrix(_faceIndex) {\n return null;\n }\n /**\n * Returns the projection matrix.\n * Note that viewMatrix and renderList are optional and are only used by lights that calculate the projection matrix from a list of meshes (e.g. directional lights with automatic extents calculation).\n * @param _viewMatrix The view transform matrix of the light (optional).\n * @param _renderList The list of meshes to take into account when calculating the projection matrix (optional).\n * @returns The projection matrix. Can be null, if a projection matrix cannot be defined for the type of light considered (as for a hemispherical light, for example).\n */\n getProjectionMatrix(_viewMatrix, _renderList) {\n return null;\n }\n /**\n * Creates a Light object in the scene.\n * Documentation : https://doc.babylonjs.com/features/featuresDeepDive/lights/lights_introduction\n * @param name The friendly name of the light\n * @param scene The scene the light belongs too\n */\n constructor(name, scene) {\n super(name, scene, false);\n /**\n * Diffuse gives the basic color to an object.\n */\n this.diffuse = new Color3(1.0, 1.0, 1.0);\n /**\n * Specular produces a highlight color on an object.\n * Note: This is not affecting PBR materials.\n */\n this.specular = new Color3(1.0, 1.0, 1.0);\n /**\n * Defines the falloff type for this light. This lets overriding how punctual light are\n * falling off base on range or angle.\n * This can be set to any values in Light.FALLOFF_x.\n *\n * Note: This is only useful for PBR Materials at the moment. This could be extended if required to\n * other types of materials.\n */\n this.falloffType = Light.FALLOFF_DEFAULT;\n /**\n * Strength of the light.\n * Note: By default it is define in the framework own unit.\n * Note: In PBR materials the intensityMode can be use to chose what unit the intensity is defined in.\n */\n this.intensity = 1.0;\n this._range = Number.MAX_VALUE;\n this._inverseSquaredRange = 0;\n /**\n * Cached photometric scale default to 1.0 as the automatic intensity mode defaults to 1.0 for every type\n * of light.\n */\n this._photometricScale = 1.0;\n this._intensityMode = Light.INTENSITYMODE_AUTOMATIC;\n this._radius = 0.00001;\n /**\n * Defines the rendering priority of the lights. It can help in case of fallback or number of lights\n * exceeding the number allowed of the materials.\n */\n this.renderPriority = 0;\n this._shadowEnabled = true;\n this._excludeWithLayerMask = 0;\n this._includeOnlyWithLayerMask = 0;\n this._lightmapMode = 0;\n /**\n * Shadow generators associated to the light.\n * @internal Internal use only.\n */\n this._shadowGenerators = null;\n /**\n * @internal Internal use only.\n */\n this._excludedMeshesIds = new Array();\n /**\n * @internal Internal use only.\n */\n this._includedOnlyMeshesIds = new Array();\n /** @internal */\n this._isLight = true;\n this.getScene().addLight(this);\n this._uniformBuffer = new UniformBuffer(this.getScene().getEngine(), undefined, undefined, name);\n this._buildUniformLayout();\n this.includedOnlyMeshes = [];\n this.excludedMeshes = [];\n this._resyncMeshes();\n }\n /**\n * Sets the passed Effect \"effect\" with the Light textures.\n * @param effect The effect to update\n * @param lightIndex The index of the light in the effect to update\n * @returns The light\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n transferTexturesToEffect(effect, lightIndex) {\n // Do nothing by default.\n return this;\n }\n /**\n * Binds the lights information from the scene to the effect for the given mesh.\n * @param lightIndex Light index\n * @param scene The scene where the light belongs to\n * @param effect The effect we are binding the data to\n * @param useSpecular Defines if specular is supported\n * @param receiveShadows Defines if the effect (mesh) we bind the light for receives shadows\n */\n _bindLight(lightIndex, scene, effect, useSpecular, receiveShadows = true) {\n const iAsString = lightIndex.toString();\n let needUpdate = false;\n this._uniformBuffer.bindToEffect(effect, \"Light\" + iAsString);\n if (this._renderId !== scene.getRenderId() || this._lastUseSpecular !== useSpecular || !this._uniformBuffer.useUbo) {\n this._renderId = scene.getRenderId();\n this._lastUseSpecular = useSpecular;\n const scaledIntensity = this.getScaledIntensity();\n this.transferToEffect(effect, iAsString);\n this.diffuse.scaleToRef(scaledIntensity, TmpColors.Color3[0]);\n this._uniformBuffer.updateColor4(\"vLightDiffuse\", TmpColors.Color3[0], this.range, iAsString);\n if (useSpecular) {\n this.specular.scaleToRef(scaledIntensity, TmpColors.Color3[1]);\n this._uniformBuffer.updateColor4(\"vLightSpecular\", TmpColors.Color3[1], this.radius, iAsString);\n }\n needUpdate = true;\n }\n // Textures might still need to be rebound.\n this.transferTexturesToEffect(effect, iAsString);\n // Shadows\n if (scene.shadowsEnabled && this.shadowEnabled && receiveShadows) {\n var _this$getShadowGenera;\n const shadowGenerator = (_this$getShadowGenera = this.getShadowGenerator(scene.activeCamera)) !== null && _this$getShadowGenera !== void 0 ? _this$getShadowGenera : this.getShadowGenerator();\n if (shadowGenerator) {\n shadowGenerator.bindShadowLight(iAsString, effect);\n needUpdate = true;\n }\n }\n if (needUpdate) {\n this._uniformBuffer.update();\n } else {\n this._uniformBuffer.bindUniformBuffer();\n }\n }\n /**\n * Returns the string \"Light\".\n * @returns the class name\n */\n getClassName() {\n return \"Light\";\n }\n /**\n * Converts the light information to a readable string for debug purpose.\n * @param fullDetails Supports for multiple levels of logging within scene loading\n * @returns the human readable light info\n */\n toString(fullDetails) {\n let ret = \"Name: \" + this.name;\n ret += \", type: \" + [\"Point\", \"Directional\", \"Spot\", \"Hemispheric\"][this.getTypeID()];\n if (this.animations) {\n for (let i = 0; i < this.animations.length; i++) {\n ret += \", animation[0]: \" + this.animations[i].toString(fullDetails);\n }\n }\n return ret;\n }\n /** @internal */\n _syncParentEnabledState() {\n super._syncParentEnabledState();\n if (!this.isDisposed()) {\n this._resyncMeshes();\n }\n }\n /**\n * Set the enabled state of this node.\n * @param value - the new enabled state\n */\n setEnabled(value) {\n super.setEnabled(value);\n this._resyncMeshes();\n }\n /**\n * Returns the Light associated shadow generator if any.\n * @param camera Camera for which the shadow generator should be retrieved (default: null). If null, retrieves the default shadow generator\n * @returns the associated shadow generator.\n */\n getShadowGenerator(camera = null) {\n var _this$_shadowGenerato;\n if (this._shadowGenerators === null) {\n return null;\n }\n return (_this$_shadowGenerato = this._shadowGenerators.get(camera)) !== null && _this$_shadowGenerato !== void 0 ? _this$_shadowGenerato : null;\n }\n /**\n * Returns all the shadow generators associated to this light\n * @returns\n */\n getShadowGenerators() {\n return this._shadowGenerators;\n }\n /**\n * Returns a Vector3, the absolute light position in the World.\n * @returns the world space position of the light\n */\n getAbsolutePosition() {\n return Vector3.Zero();\n }\n /**\n * Specifies if the light will affect the passed mesh.\n * @param mesh The mesh to test against the light\n * @returns true the mesh is affected otherwise, false.\n */\n canAffectMesh(mesh) {\n if (!mesh) {\n return true;\n }\n if (this.includedOnlyMeshes && this.includedOnlyMeshes.length > 0 && this.includedOnlyMeshes.indexOf(mesh) === -1) {\n return false;\n }\n if (this.excludedMeshes && this.excludedMeshes.length > 0 && this.excludedMeshes.indexOf(mesh) !== -1) {\n return false;\n }\n if (this.includeOnlyWithLayerMask !== 0 && (this.includeOnlyWithLayerMask & mesh.layerMask) === 0) {\n return false;\n }\n if (this.excludeWithLayerMask !== 0 && this.excludeWithLayerMask & mesh.layerMask) {\n return false;\n }\n return true;\n }\n /**\n * Releases resources associated with this node.\n * @param doNotRecurse Set to true to not recurse into each children (recurse into each children by default)\n * @param disposeMaterialAndTextures Set to true to also dispose referenced materials and textures (false by default)\n */\n dispose(doNotRecurse, disposeMaterialAndTextures = false) {\n if (this._shadowGenerators) {\n const iterator = this._shadowGenerators.values();\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\n const shadowGenerator = key.value;\n shadowGenerator.dispose();\n }\n this._shadowGenerators = null;\n }\n // Animations\n this.getScene().stopAnimation(this);\n if (this._parentContainer) {\n const index = this._parentContainer.lights.indexOf(this);\n if (index > -1) {\n this._parentContainer.lights.splice(index, 1);\n }\n this._parentContainer = null;\n }\n // Remove from meshes\n for (const mesh of this.getScene().meshes) {\n mesh._removeLightSource(this, true);\n }\n this._uniformBuffer.dispose();\n // Remove from scene\n this.getScene().removeLight(this);\n super.dispose(doNotRecurse, disposeMaterialAndTextures);\n }\n /**\n * Returns the light type ID (integer).\n * @returns The light Type id as a constant defines in Light.LIGHTTYPEID_x\n */\n getTypeID() {\n return 0;\n }\n /**\n * Returns the intensity scaled by the Photometric Scale according to the light type and intensity mode.\n * @returns the scaled intensity in intensity mode unit\n */\n getScaledIntensity() {\n return this._photometricScale * this.intensity;\n }\n /**\n * Returns a new Light object, named \"name\", from the current one.\n * @param name The name of the cloned light\n * @param newParent The parent of this light, if it has one\n * @returns the new created light\n */\n clone(name, newParent = null) {\n const constructor = Light.GetConstructorFromName(this.getTypeID(), name, this.getScene());\n if (!constructor) {\n return null;\n }\n const clonedLight = SerializationHelper.Clone(constructor, this);\n if (name) {\n clonedLight.name = name;\n }\n if (newParent) {\n clonedLight.parent = newParent;\n }\n clonedLight.setEnabled(this.isEnabled());\n this.onClonedObservable.notifyObservers(clonedLight);\n return clonedLight;\n }\n /**\n * Serializes the current light into a Serialization object.\n * @returns the serialized object.\n */\n serialize() {\n const serializationObject = SerializationHelper.Serialize(this);\n serializationObject.uniqueId = this.uniqueId;\n // Type\n serializationObject.type = this.getTypeID();\n // Parent\n if (this.parent) {\n this.parent._serializeAsParent(serializationObject);\n }\n // Inclusion / exclusions\n if (this.excludedMeshes.length > 0) {\n serializationObject.excludedMeshesIds = [];\n this.excludedMeshes.forEach(mesh => {\n serializationObject.excludedMeshesIds.push(mesh.id);\n });\n }\n if (this.includedOnlyMeshes.length > 0) {\n serializationObject.includedOnlyMeshesIds = [];\n this.includedOnlyMeshes.forEach(mesh => {\n serializationObject.includedOnlyMeshesIds.push(mesh.id);\n });\n }\n // Animations\n SerializationHelper.AppendSerializedAnimations(this, serializationObject);\n serializationObject.ranges = this.serializeAnimationRanges();\n serializationObject.isEnabled = this.isEnabled();\n return serializationObject;\n }\n /**\n * Creates a new typed light from the passed type (integer) : point light = 0, directional light = 1, spot light = 2, hemispheric light = 3.\n * This new light is named \"name\" and added to the passed scene.\n * @param type Type according to the types available in Light.LIGHTTYPEID_x\n * @param name The friendly name of the light\n * @param scene The scene the new light will belong to\n * @returns the constructor function\n */\n static GetConstructorFromName(type, name, scene) {\n const constructorFunc = Node.Construct(\"Light_Type_\" + type, name, scene);\n if (constructorFunc) {\n return constructorFunc;\n }\n // Default to no light for none present once.\n return null;\n }\n /**\n * Parses the passed \"parsedLight\" and returns a new instanced Light from this parsing.\n * @param parsedLight The JSON representation of the light\n * @param scene The scene to create the parsed light in\n * @returns the created light after parsing\n */\n static Parse(parsedLight, scene) {\n const constructor = Light.GetConstructorFromName(parsedLight.type, parsedLight.name, scene);\n if (!constructor) {\n return null;\n }\n const light = SerializationHelper.Parse(constructor, parsedLight, scene);\n // Inclusion / exclusions\n if (parsedLight.excludedMeshesIds) {\n light._excludedMeshesIds = parsedLight.excludedMeshesIds;\n }\n if (parsedLight.includedOnlyMeshesIds) {\n light._includedOnlyMeshesIds = parsedLight.includedOnlyMeshesIds;\n }\n // Parent\n if (parsedLight.parentId !== undefined) {\n light._waitingParentId = parsedLight.parentId;\n }\n if (parsedLight.parentInstanceIndex !== undefined) {\n light._waitingParentInstanceIndex = parsedLight.parentInstanceIndex;\n }\n // Falloff\n if (parsedLight.falloffType !== undefined) {\n light.falloffType = parsedLight.falloffType;\n }\n // Lightmaps\n if (parsedLight.lightmapMode !== undefined) {\n light.lightmapMode = parsedLight.lightmapMode;\n }\n // Animations\n if (parsedLight.animations) {\n for (let animationIndex = 0; animationIndex < parsedLight.animations.length; animationIndex++) {\n const parsedAnimation = parsedLight.animations[animationIndex];\n const internalClass = GetClass(\"BABYLON.Animation\");\n if (internalClass) {\n light.animations.push(internalClass.Parse(parsedAnimation));\n }\n }\n Node.ParseAnimationRanges(light, parsedLight, scene);\n }\n if (parsedLight.autoAnimate) {\n scene.beginAnimation(light, parsedLight.autoAnimateFrom, parsedLight.autoAnimateTo, parsedLight.autoAnimateLoop, parsedLight.autoAnimateSpeed || 1.0);\n }\n // Check if isEnabled is defined to be back compatible with prior serialized versions.\n if (parsedLight.isEnabled !== undefined) {\n light.setEnabled(parsedLight.isEnabled);\n }\n return light;\n }\n _hookArrayForExcluded(array) {\n const oldPush = array.push;\n array.push = (...items) => {\n const result = oldPush.apply(array, items);\n for (const item of items) {\n item._resyncLightSource(this);\n }\n return result;\n };\n const oldSplice = array.splice;\n array.splice = (index, deleteCount) => {\n const deleted = oldSplice.apply(array, [index, deleteCount]);\n for (const item of deleted) {\n item._resyncLightSource(this);\n }\n return deleted;\n };\n for (const item of array) {\n item._resyncLightSource(this);\n }\n }\n _hookArrayForIncludedOnly(array) {\n const oldPush = array.push;\n array.push = (...items) => {\n const result = oldPush.apply(array, items);\n this._resyncMeshes();\n return result;\n };\n const oldSplice = array.splice;\n array.splice = (index, deleteCount) => {\n const deleted = oldSplice.apply(array, [index, deleteCount]);\n this._resyncMeshes();\n return deleted;\n };\n this._resyncMeshes();\n }\n _resyncMeshes() {\n for (const mesh of this.getScene().meshes) {\n mesh._resyncLightSource(this);\n }\n }\n /**\n * Forces the meshes to update their light related information in their rendering used effects\n * @internal Internal Use Only\n */\n _markMeshesAsLightDirty() {\n for (const mesh of this.getScene().meshes) {\n if (mesh.lightSources.indexOf(this) !== -1) {\n mesh._markSubMeshesAsLightDirty();\n }\n }\n }\n /**\n * Recomputes the cached photometric scale if needed.\n */\n _computePhotometricScale() {\n this._photometricScale = this._getPhotometricScale();\n this.getScene().resetCachedMaterial();\n }\n /**\n * @returns the Photometric Scale according to the light type and intensity mode.\n */\n _getPhotometricScale() {\n let photometricScale = 0.0;\n const lightTypeID = this.getTypeID();\n //get photometric mode\n let photometricMode = this.intensityMode;\n if (photometricMode === Light.INTENSITYMODE_AUTOMATIC) {\n if (lightTypeID === Light.LIGHTTYPEID_DIRECTIONALLIGHT) {\n photometricMode = Light.INTENSITYMODE_ILLUMINANCE;\n } else {\n photometricMode = Light.INTENSITYMODE_LUMINOUSINTENSITY;\n }\n }\n //compute photometric scale\n switch (lightTypeID) {\n case Light.LIGHTTYPEID_POINTLIGHT:\n case Light.LIGHTTYPEID_SPOTLIGHT:\n switch (photometricMode) {\n case Light.INTENSITYMODE_LUMINOUSPOWER:\n photometricScale = 1.0 / (4.0 * Math.PI);\n break;\n case Light.INTENSITYMODE_LUMINOUSINTENSITY:\n photometricScale = 1.0;\n break;\n case Light.INTENSITYMODE_LUMINANCE:\n photometricScale = this.radius * this.radius;\n break;\n }\n break;\n case Light.LIGHTTYPEID_DIRECTIONALLIGHT:\n switch (photometricMode) {\n case Light.INTENSITYMODE_ILLUMINANCE:\n photometricScale = 1.0;\n break;\n case Light.INTENSITYMODE_LUMINANCE:\n {\n // When radius (and therefore solid angle) is non-zero a directional lights brightness can be specified via central (peak) luminance.\n // For a directional light the 'radius' defines the angular radius (in radians) rather than world-space radius (e.g. in metres).\n let apexAngleRadians = this.radius;\n // Impose a minimum light angular size to avoid the light becoming an infinitely small angular light source (i.e. a dirac delta function).\n apexAngleRadians = Math.max(apexAngleRadians, 0.001);\n const solidAngle = 2.0 * Math.PI * (1.0 - Math.cos(apexAngleRadians));\n photometricScale = solidAngle;\n break;\n }\n }\n break;\n case Light.LIGHTTYPEID_HEMISPHERICLIGHT:\n // No fall off in hemispheric light.\n photometricScale = 1.0;\n break;\n }\n return photometricScale;\n }\n /**\n * Reorder the light in the scene according to their defined priority.\n * @internal Internal Use Only\n */\n _reorderLightsInScene() {\n const scene = this.getScene();\n if (this._renderPriority != 0) {\n scene.requireLightSorting = true;\n }\n this.getScene().sortLightsByPriority();\n }\n}\n/**\n * Falloff Default: light is falling off following the material specification:\n * standard material is using standard falloff whereas pbr material can request special falloff per materials.\n */\nLight.FALLOFF_DEFAULT = LightConstants.FALLOFF_DEFAULT;\n/**\n * Falloff Physical: light is falling off following the inverse squared distance law.\n */\nLight.FALLOFF_PHYSICAL = LightConstants.FALLOFF_PHYSICAL;\n/**\n * Falloff gltf: light is falling off as described in the gltf moving to PBR document\n * to enhance interoperability with other engines.\n */\nLight.FALLOFF_GLTF = LightConstants.FALLOFF_GLTF;\n/**\n * Falloff Standard: light is falling off like in the standard material\n * to enhance interoperability with other materials.\n */\nLight.FALLOFF_STANDARD = LightConstants.FALLOFF_STANDARD;\n//lightmapMode Consts\n/**\n * If every light affecting the material is in this lightmapMode,\n * material.lightmapTexture adds or multiplies\n * (depends on material.useLightmapAsShadowmap)\n * after every other light calculations.\n */\nLight.LIGHTMAP_DEFAULT = LightConstants.LIGHTMAP_DEFAULT;\n/**\n * material.lightmapTexture as only diffuse lighting from this light\n * adds only specular lighting from this light\n * adds dynamic shadows\n */\nLight.LIGHTMAP_SPECULAR = LightConstants.LIGHTMAP_SPECULAR;\n/**\n * material.lightmapTexture as only lighting\n * no light calculation from this light\n * only adds dynamic shadows from this light\n */\nLight.LIGHTMAP_SHADOWSONLY = LightConstants.LIGHTMAP_SHADOWSONLY;\n// Intensity Mode Consts\n/**\n * Each light type uses the default quantity according to its type:\n * point/spot lights use luminous intensity\n * directional lights use illuminance\n */\nLight.INTENSITYMODE_AUTOMATIC = LightConstants.INTENSITYMODE_AUTOMATIC;\n/**\n * lumen (lm)\n */\nLight.INTENSITYMODE_LUMINOUSPOWER = LightConstants.INTENSITYMODE_LUMINOUSPOWER;\n/**\n * candela (lm/sr)\n */\nLight.INTENSITYMODE_LUMINOUSINTENSITY = LightConstants.INTENSITYMODE_LUMINOUSINTENSITY;\n/**\n * lux (lm/m^2)\n */\nLight.INTENSITYMODE_ILLUMINANCE = LightConstants.INTENSITYMODE_ILLUMINANCE;\n/**\n * nit (cd/m^2)\n */\nLight.INTENSITYMODE_LUMINANCE = LightConstants.INTENSITYMODE_LUMINANCE;\n// Light types ids const.\n/**\n * Light type const id of the point light.\n */\nLight.LIGHTTYPEID_POINTLIGHT = LightConstants.LIGHTTYPEID_POINTLIGHT;\n/**\n * Light type const id of the directional light.\n */\nLight.LIGHTTYPEID_DIRECTIONALLIGHT = LightConstants.LIGHTTYPEID_DIRECTIONALLIGHT;\n/**\n * Light type const id of the spot light.\n */\nLight.LIGHTTYPEID_SPOTLIGHT = LightConstants.LIGHTTYPEID_SPOTLIGHT;\n/**\n * Light type const id of the hemispheric light.\n */\nLight.LIGHTTYPEID_HEMISPHERICLIGHT = LightConstants.LIGHTTYPEID_HEMISPHERICLIGHT;\n__decorate([serializeAsColor3()], Light.prototype, \"diffuse\", void 0);\n__decorate([serializeAsColor3()], Light.prototype, \"specular\", void 0);\n__decorate([serialize()], Light.prototype, \"falloffType\", void 0);\n__decorate([serialize()], Light.prototype, \"intensity\", void 0);\n__decorate([serialize()], Light.prototype, \"range\", null);\n__decorate([serialize()], Light.prototype, \"intensityMode\", null);\n__decorate([serialize()], Light.prototype, \"radius\", null);\n__decorate([serialize()], Light.prototype, \"_renderPriority\", void 0);\n__decorate([expandToProperty(\"_reorderLightsInScene\")], Light.prototype, \"renderPriority\", void 0);\n__decorate([serialize(\"shadowEnabled\")], Light.prototype, \"_shadowEnabled\", void 0);\n__decorate([serialize(\"excludeWithLayerMask\")], Light.prototype, \"_excludeWithLayerMask\", void 0);\n__decorate([serialize(\"includeOnlyWithLayerMask\")], Light.prototype, \"_includeOnlyWithLayerMask\", void 0);\n__decorate([serialize(\"lightmapMode\")], Light.prototype, \"_lightmapMode\", void 0);","map":{"version":3,"names":["__decorate","serialize","serializeAsColor3","expandToProperty","Vector3","Color3","TmpColors","Node","UniformBuffer","GetClass","LightConstants","SerializationHelper","Light","range","_range","value","_inverseSquaredRange","intensityMode","_intensityMode","_computePhotometricScale","radius","_radius","shadowEnabled","_shadowEnabled","_markMeshesAsLightDirty","includedOnlyMeshes","_includedOnlyMeshes","_hookArrayForIncludedOnly","excludedMeshes","_excludedMeshes","_hookArrayForExcluded","excludeWithLayerMask","_excludeWithLayerMask","_resyncMeshes","includeOnlyWithLayerMask","_includeOnlyWithLayerMask","lightmapMode","_lightmapMode","getViewMatrix","_faceIndex","getProjectionMatrix","_viewMatrix","_renderList","constructor","name","scene","diffuse","specular","falloffType","FALLOFF_DEFAULT","intensity","Number","MAX_VALUE","_photometricScale","INTENSITYMODE_AUTOMATIC","renderPriority","_shadowGenerators","_excludedMeshesIds","Array","_includedOnlyMeshesIds","_isLight","getScene","addLight","_uniformBuffer","getEngine","undefined","_buildUniformLayout","transferTexturesToEffect","effect","lightIndex","_bindLight","useSpecular","receiveShadows","iAsString","toString","needUpdate","bindToEffect","_renderId","getRenderId","_lastUseSpecular","useUbo","scaledIntensity","getScaledIntensity","transferToEffect","scaleToRef","updateColor4","shadowsEnabled","_this$getShadowGenera","shadowGenerator","getShadowGenerator","activeCamera","bindShadowLight","update","bindUniformBuffer","getClassName","fullDetails","ret","getTypeID","animations","i","length","_syncParentEnabledState","isDisposed","setEnabled","camera","_this$_shadowGenerato","get","getShadowGenerators","getAbsolutePosition","Zero","canAffectMesh","mesh","indexOf","layerMask","dispose","doNotRecurse","disposeMaterialAndTextures","iterator","values","key","next","done","stopAnimation","_parentContainer","index","lights","splice","meshes","_removeLightSource","removeLight","clone","newParent","GetConstructorFromName","clonedLight","Clone","parent","isEnabled","onClonedObservable","notifyObservers","serializationObject","Serialize","uniqueId","type","_serializeAsParent","excludedMeshesIds","forEach","push","id","includedOnlyMeshesIds","AppendSerializedAnimations","ranges","serializeAnimationRanges","constructorFunc","Construct","Parse","parsedLight","light","parentId","_waitingParentId","parentInstanceIndex","_waitingParentInstanceIndex","animationIndex","parsedAnimation","internalClass","ParseAnimationRanges","autoAnimate","beginAnimation","autoAnimateFrom","autoAnimateTo","autoAnimateLoop","autoAnimateSpeed","array","oldPush","items","result","apply","item","_resyncLightSource","oldSplice","deleteCount","deleted","lightSources","_markSubMeshesAsLightDirty","_getPhotometricScale","resetCachedMaterial","photometricScale","lightTypeID","photometricMode","LIGHTTYPEID_DIRECTIONALLIGHT","INTENSITYMODE_ILLUMINANCE","INTENSITYMODE_LUMINOUSINTENSITY","LIGHTTYPEID_POINTLIGHT","LIGHTTYPEID_SPOTLIGHT","INTENSITYMODE_LUMINOUSPOWER","Math","PI","INTENSITYMODE_LUMINANCE","apexAngleRadians","max","solidAngle","cos","LIGHTTYPEID_HEMISPHERICLIGHT","_reorderLightsInScene","_renderPriority","requireLightSorting","sortLightsByPriority","FALLOFF_PHYSICAL","FALLOFF_GLTF","FALLOFF_STANDARD","LIGHTMAP_DEFAULT","LIGHTMAP_SPECULAR","LIGHTMAP_SHADOWSONLY","prototype"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Lights/light.js"],"sourcesContent":["import { __decorate } from \"../tslib.es6.js\";\nimport { serialize, serializeAsColor3, expandToProperty } from \"../Misc/decorators.js\";\nimport { Vector3 } from \"../Maths/math.vector.js\";\nimport { Color3, TmpColors } from \"../Maths/math.color.js\";\nimport { Node } from \"../node.js\";\nimport { UniformBuffer } from \"../Materials/uniformBuffer.js\";\nimport { GetClass } from \"../Misc/typeStore.js\";\nimport { LightConstants } from \"./lightConstants.js\";\nimport { SerializationHelper } from \"../Misc/decorators.serialization.js\";\n/**\n * Base class of all the lights in Babylon. It groups all the generic information about lights.\n * Lights are used, as you would expect, to affect how meshes are seen, in terms of both illumination and colour.\n * All meshes allow light to pass through them unless shadow generation is activated. The default number of lights allowed is four but this can be increased.\n */\nexport class Light extends Node {\n /**\n * Defines how far from the source the light is impacting in scene units.\n * Note: Unused in PBR material as the distance light falloff is defined following the inverse squared falloff.\n */\n get range() {\n return this._range;\n }\n /**\n * Defines how far from the source the light is impacting in scene units.\n * Note: Unused in PBR material as the distance light falloff is defined following the inverse squared falloff.\n */\n set range(value) {\n this._range = value;\n this._inverseSquaredRange = 1.0 / (this.range * this.range);\n }\n /**\n * Gets the photometric scale used to interpret the intensity.\n * This is only relevant with PBR Materials where the light intensity can be defined in a physical way.\n */\n get intensityMode() {\n return this._intensityMode;\n }\n /**\n * Sets the photometric scale used to interpret the intensity.\n * This is only relevant with PBR Materials where the light intensity can be defined in a physical way.\n */\n set intensityMode(value) {\n this._intensityMode = value;\n this._computePhotometricScale();\n }\n /**\n * Gets the light radius used by PBR Materials to simulate soft area lights.\n */\n get radius() {\n return this._radius;\n }\n /**\n * sets the light radius used by PBR Materials to simulate soft area lights.\n */\n set radius(value) {\n this._radius = value;\n this._computePhotometricScale();\n }\n /**\n * Gets whether or not the shadows are enabled for this light. This can help turning off/on shadow without detaching\n * the current shadow generator.\n */\n get shadowEnabled() {\n return this._shadowEnabled;\n }\n /**\n * Sets whether or not the shadows are enabled for this light. This can help turning off/on shadow without detaching\n * the current shadow generator.\n */\n set shadowEnabled(value) {\n if (this._shadowEnabled === value) {\n return;\n }\n this._shadowEnabled = value;\n this._markMeshesAsLightDirty();\n }\n /**\n * Gets the only meshes impacted by this light.\n */\n get includedOnlyMeshes() {\n return this._includedOnlyMeshes;\n }\n /**\n * Sets the only meshes impacted by this light.\n */\n set includedOnlyMeshes(value) {\n this._includedOnlyMeshes = value;\n this._hookArrayForIncludedOnly(value);\n }\n /**\n * Gets the meshes not impacted by this light.\n */\n get excludedMeshes() {\n return this._excludedMeshes;\n }\n /**\n * Sets the meshes not impacted by this light.\n */\n set excludedMeshes(value) {\n this._excludedMeshes = value;\n this._hookArrayForExcluded(value);\n }\n /**\n * Gets the layer id use to find what meshes are not impacted by the light.\n * Inactive if 0\n */\n get excludeWithLayerMask() {\n return this._excludeWithLayerMask;\n }\n /**\n * Sets the layer id use to find what meshes are not impacted by the light.\n * Inactive if 0\n */\n set excludeWithLayerMask(value) {\n this._excludeWithLayerMask = value;\n this._resyncMeshes();\n }\n /**\n * Gets the layer id use to find what meshes are impacted by the light.\n * Inactive if 0\n */\n get includeOnlyWithLayerMask() {\n return this._includeOnlyWithLayerMask;\n }\n /**\n * Sets the layer id use to find what meshes are impacted by the light.\n * Inactive if 0\n */\n set includeOnlyWithLayerMask(value) {\n this._includeOnlyWithLayerMask = value;\n this._resyncMeshes();\n }\n /**\n * Gets the lightmap mode of this light (should be one of the constants defined by Light.LIGHTMAP_x)\n */\n get lightmapMode() {\n return this._lightmapMode;\n }\n /**\n * Sets the lightmap mode of this light (should be one of the constants defined by Light.LIGHTMAP_x)\n */\n set lightmapMode(value) {\n if (this._lightmapMode === value) {\n return;\n }\n this._lightmapMode = value;\n this._markMeshesAsLightDirty();\n }\n /**\n * Returns the view matrix.\n * @param _faceIndex The index of the face for which we want to extract the view matrix. Only used for point light types.\n * @returns The view matrix. Can be null, if a view matrix cannot be defined for the type of light considered (as for a hemispherical light, for example).\n */\n getViewMatrix(_faceIndex) {\n return null;\n }\n /**\n * Returns the projection matrix.\n * Note that viewMatrix and renderList are optional and are only used by lights that calculate the projection matrix from a list of meshes (e.g. directional lights with automatic extents calculation).\n * @param _viewMatrix The view transform matrix of the light (optional).\n * @param _renderList The list of meshes to take into account when calculating the projection matrix (optional).\n * @returns The projection matrix. Can be null, if a projection matrix cannot be defined for the type of light considered (as for a hemispherical light, for example).\n */\n getProjectionMatrix(_viewMatrix, _renderList) {\n return null;\n }\n /**\n * Creates a Light object in the scene.\n * Documentation : https://doc.babylonjs.com/features/featuresDeepDive/lights/lights_introduction\n * @param name The friendly name of the light\n * @param scene The scene the light belongs too\n */\n constructor(name, scene) {\n super(name, scene, false);\n /**\n * Diffuse gives the basic color to an object.\n */\n this.diffuse = new Color3(1.0, 1.0, 1.0);\n /**\n * Specular produces a highlight color on an object.\n * Note: This is not affecting PBR materials.\n */\n this.specular = new Color3(1.0, 1.0, 1.0);\n /**\n * Defines the falloff type for this light. This lets overriding how punctual light are\n * falling off base on range or angle.\n * This can be set to any values in Light.FALLOFF_x.\n *\n * Note: This is only useful for PBR Materials at the moment. This could be extended if required to\n * other types of materials.\n */\n this.falloffType = Light.FALLOFF_DEFAULT;\n /**\n * Strength of the light.\n * Note: By default it is define in the framework own unit.\n * Note: In PBR materials the intensityMode can be use to chose what unit the intensity is defined in.\n */\n this.intensity = 1.0;\n this._range = Number.MAX_VALUE;\n this._inverseSquaredRange = 0;\n /**\n * Cached photometric scale default to 1.0 as the automatic intensity mode defaults to 1.0 for every type\n * of light.\n */\n this._photometricScale = 1.0;\n this._intensityMode = Light.INTENSITYMODE_AUTOMATIC;\n this._radius = 0.00001;\n /**\n * Defines the rendering priority of the lights. It can help in case of fallback or number of lights\n * exceeding the number allowed of the materials.\n */\n this.renderPriority = 0;\n this._shadowEnabled = true;\n this._excludeWithLayerMask = 0;\n this._includeOnlyWithLayerMask = 0;\n this._lightmapMode = 0;\n /**\n * Shadow generators associated to the light.\n * @internal Internal use only.\n */\n this._shadowGenerators = null;\n /**\n * @internal Internal use only.\n */\n this._excludedMeshesIds = new Array();\n /**\n * @internal Internal use only.\n */\n this._includedOnlyMeshesIds = new Array();\n /** @internal */\n this._isLight = true;\n this.getScene().addLight(this);\n this._uniformBuffer = new UniformBuffer(this.getScene().getEngine(), undefined, undefined, name);\n this._buildUniformLayout();\n this.includedOnlyMeshes = [];\n this.excludedMeshes = [];\n this._resyncMeshes();\n }\n /**\n * Sets the passed Effect \"effect\" with the Light textures.\n * @param effect The effect to update\n * @param lightIndex The index of the light in the effect to update\n * @returns The light\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n transferTexturesToEffect(effect, lightIndex) {\n // Do nothing by default.\n return this;\n }\n /**\n * Binds the lights information from the scene to the effect for the given mesh.\n * @param lightIndex Light index\n * @param scene The scene where the light belongs to\n * @param effect The effect we are binding the data to\n * @param useSpecular Defines if specular is supported\n * @param receiveShadows Defines if the effect (mesh) we bind the light for receives shadows\n */\n _bindLight(lightIndex, scene, effect, useSpecular, receiveShadows = true) {\n const iAsString = lightIndex.toString();\n let needUpdate = false;\n this._uniformBuffer.bindToEffect(effect, \"Light\" + iAsString);\n if (this._renderId !== scene.getRenderId() || this._lastUseSpecular !== useSpecular || !this._uniformBuffer.useUbo) {\n this._renderId = scene.getRenderId();\n this._lastUseSpecular = useSpecular;\n const scaledIntensity = this.getScaledIntensity();\n this.transferToEffect(effect, iAsString);\n this.diffuse.scaleToRef(scaledIntensity, TmpColors.Color3[0]);\n this._uniformBuffer.updateColor4(\"vLightDiffuse\", TmpColors.Color3[0], this.range, iAsString);\n if (useSpecular) {\n this.specular.scaleToRef(scaledIntensity, TmpColors.Color3[1]);\n this._uniformBuffer.updateColor4(\"vLightSpecular\", TmpColors.Color3[1], this.radius, iAsString);\n }\n needUpdate = true;\n }\n // Textures might still need to be rebound.\n this.transferTexturesToEffect(effect, iAsString);\n // Shadows\n if (scene.shadowsEnabled && this.shadowEnabled && receiveShadows) {\n const shadowGenerator = this.getShadowGenerator(scene.activeCamera) ?? this.getShadowGenerator();\n if (shadowGenerator) {\n shadowGenerator.bindShadowLight(iAsString, effect);\n needUpdate = true;\n }\n }\n if (needUpdate) {\n this._uniformBuffer.update();\n }\n else {\n this._uniformBuffer.bindUniformBuffer();\n }\n }\n /**\n * Returns the string \"Light\".\n * @returns the class name\n */\n getClassName() {\n return \"Light\";\n }\n /**\n * Converts the light information to a readable string for debug purpose.\n * @param fullDetails Supports for multiple levels of logging within scene loading\n * @returns the human readable light info\n */\n toString(fullDetails) {\n let ret = \"Name: \" + this.name;\n ret += \", type: \" + [\"Point\", \"Directional\", \"Spot\", \"Hemispheric\"][this.getTypeID()];\n if (this.animations) {\n for (let i = 0; i < this.animations.length; i++) {\n ret += \", animation[0]: \" + this.animations[i].toString(fullDetails);\n }\n }\n return ret;\n }\n /** @internal */\n _syncParentEnabledState() {\n super._syncParentEnabledState();\n if (!this.isDisposed()) {\n this._resyncMeshes();\n }\n }\n /**\n * Set the enabled state of this node.\n * @param value - the new enabled state\n */\n setEnabled(value) {\n super.setEnabled(value);\n this._resyncMeshes();\n }\n /**\n * Returns the Light associated shadow generator if any.\n * @param camera Camera for which the shadow generator should be retrieved (default: null). If null, retrieves the default shadow generator\n * @returns the associated shadow generator.\n */\n getShadowGenerator(camera = null) {\n if (this._shadowGenerators === null) {\n return null;\n }\n return this._shadowGenerators.get(camera) ?? null;\n }\n /**\n * Returns all the shadow generators associated to this light\n * @returns\n */\n getShadowGenerators() {\n return this._shadowGenerators;\n }\n /**\n * Returns a Vector3, the absolute light position in the World.\n * @returns the world space position of the light\n */\n getAbsolutePosition() {\n return Vector3.Zero();\n }\n /**\n * Specifies if the light will affect the passed mesh.\n * @param mesh The mesh to test against the light\n * @returns true the mesh is affected otherwise, false.\n */\n canAffectMesh(mesh) {\n if (!mesh) {\n return true;\n }\n if (this.includedOnlyMeshes && this.includedOnlyMeshes.length > 0 && this.includedOnlyMeshes.indexOf(mesh) === -1) {\n return false;\n }\n if (this.excludedMeshes && this.excludedMeshes.length > 0 && this.excludedMeshes.indexOf(mesh) !== -1) {\n return false;\n }\n if (this.includeOnlyWithLayerMask !== 0 && (this.includeOnlyWithLayerMask & mesh.layerMask) === 0) {\n return false;\n }\n if (this.excludeWithLayerMask !== 0 && this.excludeWithLayerMask & mesh.layerMask) {\n return false;\n }\n return true;\n }\n /**\n * Releases resources associated with this node.\n * @param doNotRecurse Set to true to not recurse into each children (recurse into each children by default)\n * @param disposeMaterialAndTextures Set to true to also dispose referenced materials and textures (false by default)\n */\n dispose(doNotRecurse, disposeMaterialAndTextures = false) {\n if (this._shadowGenerators) {\n const iterator = this._shadowGenerators.values();\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\n const shadowGenerator = key.value;\n shadowGenerator.dispose();\n }\n this._shadowGenerators = null;\n }\n // Animations\n this.getScene().stopAnimation(this);\n if (this._parentContainer) {\n const index = this._parentContainer.lights.indexOf(this);\n if (index > -1) {\n this._parentContainer.lights.splice(index, 1);\n }\n this._parentContainer = null;\n }\n // Remove from meshes\n for (const mesh of this.getScene().meshes) {\n mesh._removeLightSource(this, true);\n }\n this._uniformBuffer.dispose();\n // Remove from scene\n this.getScene().removeLight(this);\n super.dispose(doNotRecurse, disposeMaterialAndTextures);\n }\n /**\n * Returns the light type ID (integer).\n * @returns The light Type id as a constant defines in Light.LIGHTTYPEID_x\n */\n getTypeID() {\n return 0;\n }\n /**\n * Returns the intensity scaled by the Photometric Scale according to the light type and intensity mode.\n * @returns the scaled intensity in intensity mode unit\n */\n getScaledIntensity() {\n return this._photometricScale * this.intensity;\n }\n /**\n * Returns a new Light object, named \"name\", from the current one.\n * @param name The name of the cloned light\n * @param newParent The parent of this light, if it has one\n * @returns the new created light\n */\n clone(name, newParent = null) {\n const constructor = Light.GetConstructorFromName(this.getTypeID(), name, this.getScene());\n if (!constructor) {\n return null;\n }\n const clonedLight = SerializationHelper.Clone(constructor, this);\n if (name) {\n clonedLight.name = name;\n }\n if (newParent) {\n clonedLight.parent = newParent;\n }\n clonedLight.setEnabled(this.isEnabled());\n this.onClonedObservable.notifyObservers(clonedLight);\n return clonedLight;\n }\n /**\n * Serializes the current light into a Serialization object.\n * @returns the serialized object.\n */\n serialize() {\n const serializationObject = SerializationHelper.Serialize(this);\n serializationObject.uniqueId = this.uniqueId;\n // Type\n serializationObject.type = this.getTypeID();\n // Parent\n if (this.parent) {\n this.parent._serializeAsParent(serializationObject);\n }\n // Inclusion / exclusions\n if (this.excludedMeshes.length > 0) {\n serializationObject.excludedMeshesIds = [];\n this.excludedMeshes.forEach((mesh) => {\n serializationObject.excludedMeshesIds.push(mesh.id);\n });\n }\n if (this.includedOnlyMeshes.length > 0) {\n serializationObject.includedOnlyMeshesIds = [];\n this.includedOnlyMeshes.forEach((mesh) => {\n serializationObject.includedOnlyMeshesIds.push(mesh.id);\n });\n }\n // Animations\n SerializationHelper.AppendSerializedAnimations(this, serializationObject);\n serializationObject.ranges = this.serializeAnimationRanges();\n serializationObject.isEnabled = this.isEnabled();\n return serializationObject;\n }\n /**\n * Creates a new typed light from the passed type (integer) : point light = 0, directional light = 1, spot light = 2, hemispheric light = 3.\n * This new light is named \"name\" and added to the passed scene.\n * @param type Type according to the types available in Light.LIGHTTYPEID_x\n * @param name The friendly name of the light\n * @param scene The scene the new light will belong to\n * @returns the constructor function\n */\n static GetConstructorFromName(type, name, scene) {\n const constructorFunc = Node.Construct(\"Light_Type_\" + type, name, scene);\n if (constructorFunc) {\n return constructorFunc;\n }\n // Default to no light for none present once.\n return null;\n }\n /**\n * Parses the passed \"parsedLight\" and returns a new instanced Light from this parsing.\n * @param parsedLight The JSON representation of the light\n * @param scene The scene to create the parsed light in\n * @returns the created light after parsing\n */\n static Parse(parsedLight, scene) {\n const constructor = Light.GetConstructorFromName(parsedLight.type, parsedLight.name, scene);\n if (!constructor) {\n return null;\n }\n const light = SerializationHelper.Parse(constructor, parsedLight, scene);\n // Inclusion / exclusions\n if (parsedLight.excludedMeshesIds) {\n light._excludedMeshesIds = parsedLight.excludedMeshesIds;\n }\n if (parsedLight.includedOnlyMeshesIds) {\n light._includedOnlyMeshesIds = parsedLight.includedOnlyMeshesIds;\n }\n // Parent\n if (parsedLight.parentId !== undefined) {\n light._waitingParentId = parsedLight.parentId;\n }\n if (parsedLight.parentInstanceIndex !== undefined) {\n light._waitingParentInstanceIndex = parsedLight.parentInstanceIndex;\n }\n // Falloff\n if (parsedLight.falloffType !== undefined) {\n light.falloffType = parsedLight.falloffType;\n }\n // Lightmaps\n if (parsedLight.lightmapMode !== undefined) {\n light.lightmapMode = parsedLight.lightmapMode;\n }\n // Animations\n if (parsedLight.animations) {\n for (let animationIndex = 0; animationIndex < parsedLight.animations.length; animationIndex++) {\n const parsedAnimation = parsedLight.animations[animationIndex];\n const internalClass = GetClass(\"BABYLON.Animation\");\n if (internalClass) {\n light.animations.push(internalClass.Parse(parsedAnimation));\n }\n }\n Node.ParseAnimationRanges(light, parsedLight, scene);\n }\n if (parsedLight.autoAnimate) {\n scene.beginAnimation(light, parsedLight.autoAnimateFrom, parsedLight.autoAnimateTo, parsedLight.autoAnimateLoop, parsedLight.autoAnimateSpeed || 1.0);\n }\n // Check if isEnabled is defined to be back compatible with prior serialized versions.\n if (parsedLight.isEnabled !== undefined) {\n light.setEnabled(parsedLight.isEnabled);\n }\n return light;\n }\n _hookArrayForExcluded(array) {\n const oldPush = array.push;\n array.push = (...items) => {\n const result = oldPush.apply(array, items);\n for (const item of items) {\n item._resyncLightSource(this);\n }\n return result;\n };\n const oldSplice = array.splice;\n array.splice = (index, deleteCount) => {\n const deleted = oldSplice.apply(array, [index, deleteCount]);\n for (const item of deleted) {\n item._resyncLightSource(this);\n }\n return deleted;\n };\n for (const item of array) {\n item._resyncLightSource(this);\n }\n }\n _hookArrayForIncludedOnly(array) {\n const oldPush = array.push;\n array.push = (...items) => {\n const result = oldPush.apply(array, items);\n this._resyncMeshes();\n return result;\n };\n const oldSplice = array.splice;\n array.splice = (index, deleteCount) => {\n const deleted = oldSplice.apply(array, [index, deleteCount]);\n this._resyncMeshes();\n return deleted;\n };\n this._resyncMeshes();\n }\n _resyncMeshes() {\n for (const mesh of this.getScene().meshes) {\n mesh._resyncLightSource(this);\n }\n }\n /**\n * Forces the meshes to update their light related information in their rendering used effects\n * @internal Internal Use Only\n */\n _markMeshesAsLightDirty() {\n for (const mesh of this.getScene().meshes) {\n if (mesh.lightSources.indexOf(this) !== -1) {\n mesh._markSubMeshesAsLightDirty();\n }\n }\n }\n /**\n * Recomputes the cached photometric scale if needed.\n */\n _computePhotometricScale() {\n this._photometricScale = this._getPhotometricScale();\n this.getScene().resetCachedMaterial();\n }\n /**\n * @returns the Photometric Scale according to the light type and intensity mode.\n */\n _getPhotometricScale() {\n let photometricScale = 0.0;\n const lightTypeID = this.getTypeID();\n //get photometric mode\n let photometricMode = this.intensityMode;\n if (photometricMode === Light.INTENSITYMODE_AUTOMATIC) {\n if (lightTypeID === Light.LIGHTTYPEID_DIRECTIONALLIGHT) {\n photometricMode = Light.INTENSITYMODE_ILLUMINANCE;\n }\n else {\n photometricMode = Light.INTENSITYMODE_LUMINOUSINTENSITY;\n }\n }\n //compute photometric scale\n switch (lightTypeID) {\n case Light.LIGHTTYPEID_POINTLIGHT:\n case Light.LIGHTTYPEID_SPOTLIGHT:\n switch (photometricMode) {\n case Light.INTENSITYMODE_LUMINOUSPOWER:\n photometricScale = 1.0 / (4.0 * Math.PI);\n break;\n case Light.INTENSITYMODE_LUMINOUSINTENSITY:\n photometricScale = 1.0;\n break;\n case Light.INTENSITYMODE_LUMINANCE:\n photometricScale = this.radius * this.radius;\n break;\n }\n break;\n case Light.LIGHTTYPEID_DIRECTIONALLIGHT:\n switch (photometricMode) {\n case Light.INTENSITYMODE_ILLUMINANCE:\n photometricScale = 1.0;\n break;\n case Light.INTENSITYMODE_LUMINANCE: {\n // When radius (and therefore solid angle) is non-zero a directional lights brightness can be specified via central (peak) luminance.\n // For a directional light the 'radius' defines the angular radius (in radians) rather than world-space radius (e.g. in metres).\n let apexAngleRadians = this.radius;\n // Impose a minimum light angular size to avoid the light becoming an infinitely small angular light source (i.e. a dirac delta function).\n apexAngleRadians = Math.max(apexAngleRadians, 0.001);\n const solidAngle = 2.0 * Math.PI * (1.0 - Math.cos(apexAngleRadians));\n photometricScale = solidAngle;\n break;\n }\n }\n break;\n case Light.LIGHTTYPEID_HEMISPHERICLIGHT:\n // No fall off in hemispheric light.\n photometricScale = 1.0;\n break;\n }\n return photometricScale;\n }\n /**\n * Reorder the light in the scene according to their defined priority.\n * @internal Internal Use Only\n */\n _reorderLightsInScene() {\n const scene = this.getScene();\n if (this._renderPriority != 0) {\n scene.requireLightSorting = true;\n }\n this.getScene().sortLightsByPriority();\n }\n}\n/**\n * Falloff Default: light is falling off following the material specification:\n * standard material is using standard falloff whereas pbr material can request special falloff per materials.\n */\nLight.FALLOFF_DEFAULT = LightConstants.FALLOFF_DEFAULT;\n/**\n * Falloff Physical: light is falling off following the inverse squared distance law.\n */\nLight.FALLOFF_PHYSICAL = LightConstants.FALLOFF_PHYSICAL;\n/**\n * Falloff gltf: light is falling off as described in the gltf moving to PBR document\n * to enhance interoperability with other engines.\n */\nLight.FALLOFF_GLTF = LightConstants.FALLOFF_GLTF;\n/**\n * Falloff Standard: light is falling off like in the standard material\n * to enhance interoperability with other materials.\n */\nLight.FALLOFF_STANDARD = LightConstants.FALLOFF_STANDARD;\n//lightmapMode Consts\n/**\n * If every light affecting the material is in this lightmapMode,\n * material.lightmapTexture adds or multiplies\n * (depends on material.useLightmapAsShadowmap)\n * after every other light calculations.\n */\nLight.LIGHTMAP_DEFAULT = LightConstants.LIGHTMAP_DEFAULT;\n/**\n * material.lightmapTexture as only diffuse lighting from this light\n * adds only specular lighting from this light\n * adds dynamic shadows\n */\nLight.LIGHTMAP_SPECULAR = LightConstants.LIGHTMAP_SPECULAR;\n/**\n * material.lightmapTexture as only lighting\n * no light calculation from this light\n * only adds dynamic shadows from this light\n */\nLight.LIGHTMAP_SHADOWSONLY = LightConstants.LIGHTMAP_SHADOWSONLY;\n// Intensity Mode Consts\n/**\n * Each light type uses the default quantity according to its type:\n * point/spot lights use luminous intensity\n * directional lights use illuminance\n */\nLight.INTENSITYMODE_AUTOMATIC = LightConstants.INTENSITYMODE_AUTOMATIC;\n/**\n * lumen (lm)\n */\nLight.INTENSITYMODE_LUMINOUSPOWER = LightConstants.INTENSITYMODE_LUMINOUSPOWER;\n/**\n * candela (lm/sr)\n */\nLight.INTENSITYMODE_LUMINOUSINTENSITY = LightConstants.INTENSITYMODE_LUMINOUSINTENSITY;\n/**\n * lux (lm/m^2)\n */\nLight.INTENSITYMODE_ILLUMINANCE = LightConstants.INTENSITYMODE_ILLUMINANCE;\n/**\n * nit (cd/m^2)\n */\nLight.INTENSITYMODE_LUMINANCE = LightConstants.INTENSITYMODE_LUMINANCE;\n// Light types ids const.\n/**\n * Light type const id of the point light.\n */\nLight.LIGHTTYPEID_POINTLIGHT = LightConstants.LIGHTTYPEID_POINTLIGHT;\n/**\n * Light type const id of the directional light.\n */\nLight.LIGHTTYPEID_DIRECTIONALLIGHT = LightConstants.LIGHTTYPEID_DIRECTIONALLIGHT;\n/**\n * Light type const id of the spot light.\n */\nLight.LIGHTTYPEID_SPOTLIGHT = LightConstants.LIGHTTYPEID_SPOTLIGHT;\n/**\n * Light type const id of the hemispheric light.\n */\nLight.LIGHTTYPEID_HEMISPHERICLIGHT = LightConstants.LIGHTTYPEID_HEMISPHERICLIGHT;\n__decorate([\n serializeAsColor3()\n], Light.prototype, \"diffuse\", void 0);\n__decorate([\n serializeAsColor3()\n], Light.prototype, \"specular\", void 0);\n__decorate([\n serialize()\n], Light.prototype, \"falloffType\", void 0);\n__decorate([\n serialize()\n], Light.prototype, \"intensity\", void 0);\n__decorate([\n serialize()\n], Light.prototype, \"range\", null);\n__decorate([\n serialize()\n], Light.prototype, \"intensityMode\", null);\n__decorate([\n serialize()\n], Light.prototype, \"radius\", null);\n__decorate([\n serialize()\n], Light.prototype, \"_renderPriority\", void 0);\n__decorate([\n expandToProperty(\"_reorderLightsInScene\")\n], Light.prototype, \"renderPriority\", void 0);\n__decorate([\n serialize(\"shadowEnabled\")\n], Light.prototype, \"_shadowEnabled\", void 0);\n__decorate([\n serialize(\"excludeWithLayerMask\")\n], Light.prototype, \"_excludeWithLayerMask\", void 0);\n__decorate([\n serialize(\"includeOnlyWithLayerMask\")\n], Light.prototype, \"_includeOnlyWithLayerMask\", void 0);\n__decorate([\n serialize(\"lightmapMode\")\n], Light.prototype, \"_lightmapMode\", void 0);\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|