@onerjs/core 8.33.3 → 8.33.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AudioV2/webAudio/components/webAudioParameterComponent.js +17 -5
- package/AudioV2/webAudio/components/webAudioParameterComponent.js.map +1 -1
- package/Cameras/Inputs/geospatialCameraPointersInput.d.ts +2 -2
- package/Cameras/Inputs/geospatialCameraPointersInput.js +3 -12
- package/Cameras/Inputs/geospatialCameraPointersInput.js.map +1 -1
- package/Cameras/cameraMovement.d.ts +4 -4
- package/Cameras/cameraMovement.js +13 -14
- package/Cameras/cameraMovement.js.map +1 -1
- package/Cameras/geospatialCamera.d.ts +1 -2
- package/Cameras/geospatialCamera.js +22 -19
- package/Cameras/geospatialCamera.js.map +1 -1
- package/Cameras/geospatialCameraMovement.d.ts +0 -5
- package/Cameras/geospatialCameraMovement.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +1 -2
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/frameGraph.d.ts +6 -0
- package/FrameGraph/frameGraph.js +10 -0
- package/FrameGraph/frameGraph.js.map +1 -1
- package/Layers/glowLayer.d.ts +8 -0
- package/Layers/glowLayer.js +11 -0
- package/Layers/glowLayer.js.map +1 -1
- package/Layers/thinGlowLayer.d.ts +17 -0
- package/Layers/thinGlowLayer.js +18 -0
- package/Layers/thinGlowLayer.js.map +1 -1
- package/Lights/Clustered/clusteredLightContainer.js +7 -2
- package/Lights/Clustered/clusteredLightContainer.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js +2 -1
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +2 -1
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/nodeMaterial.js +2 -2
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
- package/Materials/PBR/pbrBaseMaterial.js +1 -0
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/envCubeTexture.js +4 -0
- package/Materials/Textures/envCubeTexture.js.map +1 -1
- package/Materials/materialHelper.functions.js +1 -0
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/standardMaterial.d.ts +1 -0
- package/Materials/standardMaterial.js +1 -0
- package/Materials/standardMaterial.js.map +1 -1
- package/Rendering/depthPeelingRenderer.d.ts +1 -0
- package/Rendering/depthPeelingRenderer.js +7 -0
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/thinDepthPeelingRenderer.d.ts +1 -0
- package/Rendering/thinDepthPeelingRenderer.js +2 -0
- package/Rendering/thinDepthPeelingRenderer.js.map +1 -1
- package/Shaders/default.vertex.js +4 -0
- package/Shaders/default.vertex.js.map +1 -1
- package/Shaders/lightProxy.vertex.js +7 -1
- package/Shaders/lightProxy.vertex.js.map +1 -1
- package/Shaders/pbr.vertex.js +4 -0
- package/Shaders/pbr.vertex.js.map +1 -1
- package/ShadersWGSL/default.vertex.js +4 -0
- package/ShadersWGSL/default.vertex.js.map +1 -1
- package/ShadersWGSL/lightProxy.vertex.js +7 -1
- package/ShadersWGSL/lightProxy.vertex.js.map +1 -1
- package/ShadersWGSL/pbr.vertex.js +4 -0
- package/ShadersWGSL/pbr.vertex.js.map +1 -1
- package/package.json +2 -5
- package/scene.js +2 -3
- package/scene.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"materialHelper.functions.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/materialHelper.functions.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { Effect, IEffectCreationOptions } from \"./effect\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { UniformBuffer } from \"./uniformBuffer\";\r\nimport type { BaseTexture } from \"./Textures/baseTexture\";\r\nimport type { PrePassConfiguration } from \"./prePassConfiguration\";\r\nimport type { Light } from \"../Lights/light\";\r\nimport type { MaterialDefines } from \"./materialDefines\";\r\nimport type { EffectFallbacks } from \"./effectFallbacks\";\r\nimport { LightConstants } from \"../Lights/lightConstants\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport type { Material } from \"./material\";\r\nimport type { Nullable } from \"../types\";\r\nimport { PrepareDefinesForClipPlanes } from \"./clipPlaneMaterialHelper\";\r\nimport type { MorphTargetManager } from \"../Morph/morphTargetManager\";\r\nimport type { IColor3Like } from \"core/Maths/math.like\";\r\nimport { MaterialFlags } from \"./materialFlags\";\r\nimport { Texture } from \"./Textures/texture\";\r\nimport type { CubeTexture } from \"./Textures/cubeTexture\";\r\nimport type { Color3 } from \"core/Maths/math.color\";\r\nimport type { Geometry } from \"../Meshes/geometry\";\r\n\r\n// For backwards compatibility, we export everything from the pure version of this file.\r\nexport * from \"./materialHelper.functions.pure\";\r\n\r\n// Temps\r\nconst TempFogColor: IColor3Like = { r: 0, g: 0, b: 0 };\r\nconst TmpMorphInfluencers = {\r\n NUM_MORPH_INFLUENCERS: 0,\r\n NORMAL: false,\r\n TANGENT: false,\r\n UV: false,\r\n UV2: false,\r\n COLOR: false,\r\n};\r\n\r\n/**\r\n * Binds the fog information from the scene to the effect for the given mesh.\r\n * @param scene The scene the lights belongs to\r\n * @param mesh The mesh we are binding the information to render\r\n * @param effect The effect we are binding the data to\r\n * @param linearSpace Defines if the fog effect is applied in linear space\r\n */\r\nexport function BindFogParameters(scene: Scene, mesh?: AbstractMesh, effect?: Effect, linearSpace = false): void {\r\n if (effect && scene.fogEnabled && (!mesh || mesh.applyFog) && scene.fogMode !== Constants.FOGMODE_NONE) {\r\n effect.setFloat4(\"vFogInfos\", scene.fogMode, scene.fogStart, scene.fogEnd, scene.fogDensity);\r\n // Convert fog color to linear space if used in a linear space computed shader.\r\n if (linearSpace) {\r\n scene.fogColor.toLinearSpaceToRef(TempFogColor, scene.getEngine().useExactSrgbConversions);\r\n effect.setColor3(\"vFogColor\", TempFogColor);\r\n } else {\r\n effect.setColor3(\"vFogColor\", scene.fogColor);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Prepares the list of attributes and defines required for morph targets.\r\n * @param morphTargetManager The manager for the morph targets\r\n * @param defines The current list of defines\r\n * @param attribs The current list of attributes\r\n * @param mesh The mesh to prepare the defines and attributes for\r\n * @param usePositionMorph Whether the position morph target is used\r\n * @param useNormalMorph Whether the normal morph target is used\r\n * @param useTangentMorph Whether the tangent morph target is used\r\n * @param useUVMorph Whether the UV morph target is used\r\n * @param useUV2Morph Whether the UV2 morph target is used\r\n * @param useColorMorph Whether the color morph target is used\r\n * @returns The maxSimultaneousMorphTargets for the effect\r\n */\r\nexport function PrepareDefinesAndAttributesForMorphTargets(\r\n morphTargetManager: MorphTargetManager,\r\n defines: string[],\r\n attribs: string[],\r\n mesh: AbstractMesh,\r\n usePositionMorph: boolean,\r\n useNormalMorph: boolean,\r\n useTangentMorph: boolean,\r\n useUVMorph: boolean,\r\n useUV2Morph: boolean,\r\n useColorMorph: boolean\r\n): number {\r\n const numMorphInfluencers = morphTargetManager.numMaxInfluencers || morphTargetManager.numInfluencers;\r\n if (numMorphInfluencers <= 0) {\r\n return 0;\r\n }\r\n\r\n defines.push(\"#define MORPHTARGETS\");\r\n\r\n if (morphTargetManager.hasPositions) {\r\n defines.push(\"#define MORPHTARGETTEXTURE_HASPOSITIONS\");\r\n }\r\n if (morphTargetManager.hasNormals) {\r\n defines.push(\"#define MORPHTARGETTEXTURE_HASNORMALS\");\r\n }\r\n if (morphTargetManager.hasTangents) {\r\n defines.push(\"#define MORPHTARGETTEXTURE_HASTANGENTS\");\r\n }\r\n if (morphTargetManager.hasUVs) {\r\n defines.push(\"#define MORPHTARGETTEXTURE_HASUVS\");\r\n }\r\n if (morphTargetManager.hasUV2s) {\r\n defines.push(\"#define MORPHTARGETTEXTURE_HASUV2S\");\r\n }\r\n if (morphTargetManager.hasColors) {\r\n defines.push(\"#define MORPHTARGETTEXTURE_HASCOLORS\");\r\n }\r\n\r\n if (morphTargetManager.supportsPositions && usePositionMorph) {\r\n defines.push(\"#define MORPHTARGETS_POSITION\");\r\n }\r\n if (morphTargetManager.supportsNormals && useNormalMorph) {\r\n defines.push(\"#define MORPHTARGETS_NORMAL\");\r\n }\r\n if (morphTargetManager.supportsTangents && useTangentMorph) {\r\n defines.push(\"#define MORPHTARGETS_TANGENT\");\r\n }\r\n if (morphTargetManager.supportsUVs && useUVMorph) {\r\n defines.push(\"#define MORPHTARGETS_UV\");\r\n }\r\n if (morphTargetManager.supportsUV2s && useUV2Morph) {\r\n defines.push(\"#define MORPHTARGETS_UV2\");\r\n }\r\n if (morphTargetManager.supportsColors && useColorMorph) {\r\n defines.push(\"#define MORPHTARGETS_COLOR\");\r\n }\r\n\r\n defines.push(\"#define NUM_MORPH_INFLUENCERS \" + numMorphInfluencers);\r\n\r\n if (morphTargetManager.isUsingTextureForTargets) {\r\n defines.push(\"#define MORPHTARGETS_TEXTURE\");\r\n }\r\n\r\n TmpMorphInfluencers.NUM_MORPH_INFLUENCERS = numMorphInfluencers;\r\n TmpMorphInfluencers.NORMAL = useNormalMorph;\r\n TmpMorphInfluencers.TANGENT = useTangentMorph;\r\n TmpMorphInfluencers.UV = useUVMorph;\r\n TmpMorphInfluencers.UV2 = useUV2Morph;\r\n TmpMorphInfluencers.COLOR = useColorMorph;\r\n\r\n PrepareAttributesForMorphTargets(attribs, mesh, TmpMorphInfluencers, usePositionMorph);\r\n return numMorphInfluencers;\r\n}\r\n\r\n/**\r\n * Prepares the list of attributes required for morph targets according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param mesh The mesh to prepare the morph targets attributes for\r\n * @param influencers The number of influencers\r\n */\r\nexport function PrepareAttributesForMorphTargetsInfluencers(attribs: string[], mesh: AbstractMesh, influencers: number): void {\r\n TmpMorphInfluencers.NUM_MORPH_INFLUENCERS = influencers;\r\n TmpMorphInfluencers.NORMAL = false;\r\n TmpMorphInfluencers.TANGENT = false;\r\n TmpMorphInfluencers.UV = false;\r\n TmpMorphInfluencers.UV2 = false;\r\n TmpMorphInfluencers.COLOR = false;\r\n PrepareAttributesForMorphTargets(attribs, mesh, TmpMorphInfluencers, true);\r\n}\r\n\r\n/**\r\n * Prepares the list of attributes required for morph targets according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param mesh The mesh to prepare the morph targets attributes for\r\n * @param defines The current Defines of the effect\r\n * @param usePositionMorph Whether the position morph target is used\r\n */\r\nexport function PrepareAttributesForMorphTargets(attribs: string[], mesh: AbstractMesh, defines: any, usePositionMorph = true): void {\r\n const influencers = defines[\"NUM_MORPH_INFLUENCERS\"];\r\n\r\n if (influencers > 0 && EngineStore.LastCreatedEngine) {\r\n const maxAttributesCount = EngineStore.LastCreatedEngine.getCaps().maxVertexAttribs;\r\n const manager = (mesh as Mesh).morphTargetManager;\r\n if (manager?.isUsingTextureForTargets) {\r\n return;\r\n }\r\n const position = manager && manager.supportsPositions && usePositionMorph;\r\n const normal = manager && manager.supportsNormals && defines[\"NORMAL\"];\r\n const tangent = manager && manager.supportsTangents && defines[\"TANGENT\"];\r\n const uv = manager && manager.supportsUVs && defines[\"UV1\"];\r\n const uv2 = manager && manager.supportsUV2s && defines[\"UV2\"];\r\n const color = manager && manager.supportsColors && defines[\"VERTEXCOLOR\"];\r\n for (let index = 0; index < influencers; index++) {\r\n if (position) {\r\n attribs.push(Constants.PositionKind + index);\r\n }\r\n\r\n if (normal) {\r\n attribs.push(Constants.NormalKind + index);\r\n }\r\n\r\n if (tangent) {\r\n attribs.push(Constants.TangentKind + index);\r\n }\r\n\r\n if (uv) {\r\n attribs.push(Constants.UVKind + \"_\" + index);\r\n }\r\n\r\n if (uv2) {\r\n attribs.push(Constants.UV2Kind + \"_\" + index);\r\n }\r\n\r\n if (color) {\r\n attribs.push(Constants.ColorKind + index);\r\n }\r\n\r\n if (attribs.length > maxAttributesCount) {\r\n Logger.Error(\"Cannot add more vertex attributes for mesh \" + mesh.name);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Add the list of attributes required for instances to the attribs array.\r\n * @param attribs The current list of supported attribs\r\n * @param needsPreviousMatrices If the shader needs previous matrices\r\n */\r\nexport function PushAttributesForInstances(attribs: string[], needsPreviousMatrices: boolean = false): void {\r\n attribs.push(\"world0\");\r\n attribs.push(\"world1\");\r\n attribs.push(\"world2\");\r\n attribs.push(\"world3\");\r\n if (needsPreviousMatrices) {\r\n attribs.push(\"previousWorld0\");\r\n attribs.push(\"previousWorld1\");\r\n attribs.push(\"previousWorld2\");\r\n attribs.push(\"previousWorld3\");\r\n }\r\n}\r\n\r\n/**\r\n * Binds the morph targets information from the mesh to the effect.\r\n * @param abstractMesh The mesh we are binding the information to render\r\n * @param effect The effect we are binding the data to\r\n */\r\nexport function BindMorphTargetParameters(abstractMesh: AbstractMesh, effect: Effect): void {\r\n const manager = (<Mesh>abstractMesh).morphTargetManager;\r\n if (!abstractMesh || !manager) {\r\n return;\r\n }\r\n\r\n effect.setFloatArray(\"morphTargetInfluences\", manager.influences);\r\n}\r\n\r\n/**\r\n * Binds the scene's uniform buffer to the effect.\r\n * @param effect defines the effect to bind to the scene uniform buffer\r\n * @param sceneUbo defines the uniform buffer storing scene data\r\n */\r\nexport function BindSceneUniformBuffer(effect: Effect, sceneUbo: UniformBuffer): void {\r\n sceneUbo.bindToEffect(effect, \"Scene\");\r\n}\r\n\r\n/**\r\n * Update parameters for IBL\r\n * @param scene The scene\r\n * @param defines The list of shader defines for the material\r\n * @param ubo The uniform buffer to update\r\n * @param reflectionColor The color to use for the reflection\r\n * @param reflectionTexture The IBL texture\r\n * @param realTimeFiltering Whether realtime filtering of IBL texture is being used\r\n * @param supportTextureInfo Whether the texture info is supported\r\n * @param supportLocalProjection Whether local projection is supported\r\n * @param usePBR Whether PBR is being used\r\n * @param supportSH Whether spherical harmonics are supported\r\n * @param useColor Whether to use the reflection color\r\n * @param reflectionBlur The level of blur of the reflection\r\n */\r\nexport function BindIBLParameters(\r\n scene: Scene,\r\n defines: any,\r\n ubo: UniformBuffer,\r\n reflectionColor: Color3,\r\n reflectionTexture: Nullable<BaseTexture> = null,\r\n realTimeFiltering: boolean = false,\r\n supportTextureInfo: boolean = false,\r\n supportLocalProjection: boolean = false,\r\n usePBR: boolean = false,\r\n supportSH: boolean = false,\r\n useColor: boolean = false,\r\n reflectionBlur: number = 0\r\n): void {\r\n if (scene.texturesEnabled) {\r\n if (reflectionTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n ubo.updateMatrix(\"reflectionMatrix\", reflectionTexture.getReflectionTextureMatrix());\r\n ubo.updateFloat2(\"vReflectionInfos\", reflectionTexture.level * scene.iblIntensity, reflectionBlur);\r\n\r\n if (supportLocalProjection && (<any>reflectionTexture).boundingBoxSize) {\r\n const cubeTexture = <CubeTexture>reflectionTexture;\r\n\r\n ubo.updateVector3(\"vReflectionPosition\", cubeTexture.boundingBoxPosition);\r\n ubo.updateVector3(\"vReflectionSize\", cubeTexture.boundingBoxSize);\r\n }\r\n\r\n if (realTimeFiltering) {\r\n const width = reflectionTexture.getSize().width;\r\n ubo.updateFloat2(\"vReflectionFilteringInfo\", width, Math.log2(width));\r\n }\r\n\r\n if (supportSH && !defines.USEIRRADIANCEMAP) {\r\n const polynomials = reflectionTexture.sphericalPolynomial;\r\n if (defines.USESPHERICALFROMREFLECTIONMAP && polynomials) {\r\n if (defines.SPHERICAL_HARMONICS) {\r\n const preScaledHarmonics = polynomials.preScaledHarmonics;\r\n ubo.updateVector3(\"vSphericalL00\", preScaledHarmonics.l00);\r\n ubo.updateVector3(\"vSphericalL1_1\", preScaledHarmonics.l1_1);\r\n ubo.updateVector3(\"vSphericalL10\", preScaledHarmonics.l10);\r\n ubo.updateVector3(\"vSphericalL11\", preScaledHarmonics.l11);\r\n ubo.updateVector3(\"vSphericalL2_2\", preScaledHarmonics.l2_2);\r\n ubo.updateVector3(\"vSphericalL2_1\", preScaledHarmonics.l2_1);\r\n ubo.updateVector3(\"vSphericalL20\", preScaledHarmonics.l20);\r\n ubo.updateVector3(\"vSphericalL21\", preScaledHarmonics.l21);\r\n ubo.updateVector3(\"vSphericalL22\", preScaledHarmonics.l22);\r\n } else {\r\n ubo.updateFloat3(\"vSphericalX\", polynomials.x.x, polynomials.x.y, polynomials.x.z);\r\n ubo.updateFloat3(\"vSphericalY\", polynomials.y.x, polynomials.y.y, polynomials.y.z);\r\n ubo.updateFloat3(\"vSphericalZ\", polynomials.z.x, polynomials.z.y, polynomials.z.z);\r\n ubo.updateFloat3(\"vSphericalXX_ZZ\", polynomials.xx.x - polynomials.zz.x, polynomials.xx.y - polynomials.zz.y, polynomials.xx.z - polynomials.zz.z);\r\n ubo.updateFloat3(\"vSphericalYY_ZZ\", polynomials.yy.x - polynomials.zz.x, polynomials.yy.y - polynomials.zz.y, polynomials.yy.z - polynomials.zz.z);\r\n ubo.updateFloat3(\"vSphericalZZ\", polynomials.zz.x, polynomials.zz.y, polynomials.zz.z);\r\n ubo.updateFloat3(\"vSphericalXY\", polynomials.xy.x, polynomials.xy.y, polynomials.xy.z);\r\n ubo.updateFloat3(\"vSphericalYZ\", polynomials.yz.x, polynomials.yz.y, polynomials.yz.z);\r\n ubo.updateFloat3(\"vSphericalZX\", polynomials.zx.x, polynomials.zx.y, polynomials.zx.z);\r\n }\r\n }\r\n } else if (usePBR) {\r\n // If we're using an irradiance map with a dominant direction assigned, set it.\r\n if (defines.USEIRRADIANCEMAP && defines.USE_IRRADIANCE_DOMINANT_DIRECTION) {\r\n ubo.updateVector3(\"vReflectionDominantDirection\", reflectionTexture.irradianceTexture!._dominantDirection!);\r\n }\r\n }\r\n\r\n if (supportTextureInfo) {\r\n ubo.updateFloat3(\"vReflectionMicrosurfaceInfos\", reflectionTexture.getSize().width, reflectionTexture.lodGenerationScale, reflectionTexture.lodGenerationOffset);\r\n }\r\n }\r\n }\r\n if (useColor) {\r\n ubo.updateColor3(\"vReflectionColor\", reflectionColor);\r\n }\r\n}\r\n\r\n/**\r\n * Update parameters for IBL\r\n * @param scene The scene\r\n * @param defines The list of shader defines for the material\r\n * @param ubo The uniform buffer to update\r\n * @param reflectionTexture The IBL texture\r\n * @param realTimeFiltering Whether realtime filtering of IBL texture is being used\r\n */\r\nexport function BindIBLSamplers(scene: Scene, defines: any, ubo: UniformBuffer, reflectionTexture: Nullable<BaseTexture> = null, realTimeFiltering: boolean = false): void {\r\n if (reflectionTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n if (defines.LODBASEDMICROSFURACE) {\r\n ubo.setTexture(\"reflectionSampler\", reflectionTexture);\r\n } else {\r\n ubo.setTexture(\"reflectionSampler\", reflectionTexture._lodTextureMid || reflectionTexture);\r\n ubo.setTexture(\"reflectionSamplerLow\", reflectionTexture._lodTextureLow || reflectionTexture);\r\n ubo.setTexture(\"reflectionSamplerHigh\", reflectionTexture._lodTextureHigh || reflectionTexture);\r\n }\r\n\r\n if (defines.USEIRRADIANCEMAP) {\r\n ubo.setTexture(\"irradianceSampler\", reflectionTexture.irradianceTexture);\r\n }\r\n\r\n //if realtime filtering and using CDF maps, set them.\r\n const cdfGenerator = scene.iblCdfGenerator;\r\n if (realTimeFiltering && cdfGenerator) {\r\n ubo.setTexture(\"icdfSampler\", cdfGenerator.getIcdfTexture());\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Helps preparing the defines values about the UVs in used in the effect.\r\n * UVs are shared as much as we can across channels in the shaders.\r\n * @param texture The texture we are preparing the UVs for\r\n * @param defines The defines to update\r\n * @param key The channel key \"diffuse\", \"specular\"... used in the shader\r\n */\r\nexport function PrepareDefinesForMergedUV(texture: BaseTexture, defines: any, key: string): void {\r\n defines._needUVs = true;\r\n defines[key] = true;\r\n if (texture.optimizeUVAllocation && texture.getTextureMatrix().isIdentityAs3x2()) {\r\n defines[key + \"DIRECTUV\"] = texture.coordinatesIndex + 1;\r\n defines[\"MAINUV\" + (texture.coordinatesIndex + 1)] = true;\r\n } else {\r\n defines[key + \"DIRECTUV\"] = 0;\r\n }\r\n}\r\n\r\n/**\r\n * Binds a texture matrix value to its corresponding uniform\r\n * @param texture The texture to bind the matrix for\r\n * @param uniformBuffer The uniform buffer receiving the data\r\n * @param key The channel key \"diffuse\", \"specular\"... used in the shader\r\n */\r\nexport function BindTextureMatrix(texture: BaseTexture, uniformBuffer: UniformBuffer, key: string): void {\r\n const matrix = texture.getTextureMatrix();\r\n\r\n uniformBuffer.updateMatrix(key + \"Matrix\", matrix);\r\n}\r\n\r\n/**\r\n * Prepares the list of attributes required for baked vertex animations according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param mesh The mesh to prepare for baked vertex animations\r\n * @param defines The current Defines of the effect\r\n */\r\nexport function PrepareAttributesForBakedVertexAnimation(attribs: string[], mesh: AbstractMesh, defines: any): void {\r\n const enabled = defines[\"BAKED_VERTEX_ANIMATION_TEXTURE\"] && defines[\"INSTANCES\"];\r\n\r\n if (enabled) {\r\n attribs.push(\"bakedVertexAnimationSettingsInstanced\");\r\n }\r\n}\r\n\r\n// Copies the bones transformation matrices into the target array and returns the target's reference\r\nfunction CopyBonesTransformationMatrices(source: Float32Array, target: Float32Array): Float32Array {\r\n target.set(source);\r\n\r\n return target;\r\n}\r\n\r\n/**\r\n * Binds the bones information from the mesh to the effect.\r\n * @param mesh The mesh we are binding the information to render\r\n * @param effect The effect we are binding the data to\r\n * @param prePassConfiguration Configuration for the prepass, in case prepass is activated\r\n */\r\nexport function BindBonesParameters(mesh?: AbstractMesh, effect?: Effect, prePassConfiguration?: PrePassConfiguration): void {\r\n if (!effect || !mesh) {\r\n return;\r\n }\r\n if (mesh.computeBonesUsingShaders && effect._bonesComputationForcedToCPU) {\r\n mesh.computeBonesUsingShaders = false;\r\n }\r\n\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n const skeleton = mesh.skeleton;\r\n\r\n if (skeleton.isUsingTextureForMatrices && effect.getUniformIndex(\"boneTextureWidth\") > -1) {\r\n const boneTexture = skeleton.getTransformMatrixTexture(mesh);\r\n effect.setTexture(\"boneSampler\", boneTexture);\r\n effect.setFloat(\"boneTextureWidth\", 4.0 * (skeleton.bones.length + 1));\r\n } else {\r\n const matrices = skeleton.getTransformMatrices(mesh);\r\n\r\n if (matrices) {\r\n effect.setMatrices(\"mBones\", matrices);\r\n if (prePassConfiguration && mesh.getScene().prePassRenderer && mesh.getScene().prePassRenderer!.getIndex(Constants.PREPASS_VELOCITY_TEXTURE_TYPE)) {\r\n if (!prePassConfiguration.previousBones[mesh.uniqueId]) {\r\n prePassConfiguration.previousBones[mesh.uniqueId] = matrices.slice();\r\n }\r\n effect.setMatrices(\"mPreviousBones\", prePassConfiguration.previousBones[mesh.uniqueId]);\r\n CopyBonesTransformationMatrices(matrices, prePassConfiguration.previousBones[mesh.uniqueId]);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Binds the light information to the effect.\r\n * @param light The light containing the generator\r\n * @param effect The effect we are binding the data to\r\n * @param lightIndex The light index in the effect used to render\r\n */\r\nexport function BindLightProperties(light: Light, effect: Effect, lightIndex: number): void {\r\n light.transferToEffect(effect, lightIndex + \"\");\r\n}\r\n\r\n/**\r\n * Binds the lights information from the scene to the effect for the given mesh.\r\n * @param light Light to bind\r\n * @param lightIndex Light index\r\n * @param scene The scene where the light belongs to\r\n * @param effect The effect we are binding the data to\r\n * @param useSpecular Defines if specular is supported\r\n * @param receiveShadows Defines if the effect (mesh) we bind the light for receives shadows\r\n */\r\nexport function BindLight(light: Light, lightIndex: number, scene: Scene, effect: Effect, useSpecular: boolean, receiveShadows = true): void {\r\n light._bindLight(lightIndex, scene, effect, useSpecular, receiveShadows);\r\n}\r\n\r\n/**\r\n * Binds the lights information from the scene to the effect for the given mesh.\r\n * @param scene The scene the lights belongs to\r\n * @param mesh The mesh we are binding the information to render\r\n * @param effect The effect we are binding the data to\r\n * @param defines The generated defines for the effect\r\n * @param maxSimultaneousLights The maximum number of light that can be bound to the effect\r\n */\r\nexport function BindLights(scene: Scene, mesh: AbstractMesh, effect: Effect, defines: any, maxSimultaneousLights = 4): void {\r\n const len = Math.min(mesh.lightSources.length, maxSimultaneousLights);\r\n\r\n for (let i = 0; i < len; i++) {\r\n const light = mesh.lightSources[i];\r\n BindLight(light, i, scene, effect, typeof defines === \"boolean\" ? defines : defines[\"SPECULARTERM\"], mesh.receiveShadows);\r\n }\r\n}\r\n\r\n/**\r\n * Prepares the list of attributes required for bones according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param mesh The mesh to prepare the bones attributes for\r\n * @param defines The current Defines of the effect\r\n * @param fallbacks The current effect fallback strategy\r\n */\r\nexport function PrepareAttributesForBones(attribs: string[], mesh: AbstractMesh, defines: any, fallbacks: EffectFallbacks): void {\r\n if (defines[\"NUM_BONE_INFLUENCERS\"] > 0) {\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n\r\n attribs.push(Constants.MatricesIndicesKind);\r\n attribs.push(Constants.MatricesWeightsKind);\r\n if (defines[\"NUM_BONE_INFLUENCERS\"] > 4) {\r\n attribs.push(Constants.MatricesIndicesExtraKind);\r\n attribs.push(Constants.MatricesWeightsExtraKind);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Check and prepare the list of attributes required for instances according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param defines The current MaterialDefines of the effect\r\n */\r\nexport function PrepareAttributesForInstances(attribs: string[], defines: MaterialDefines): void {\r\n if (defines[\"INSTANCES\"] || defines[\"THIN_INSTANCES\"]) {\r\n PushAttributesForInstances(attribs, !!defines[\"PREPASS_VELOCITY\"]);\r\n }\r\n\r\n if (defines.INSTANCESCOLOR) {\r\n attribs.push(Constants.ColorInstanceKind);\r\n }\r\n}\r\n\r\n/**\r\n * This helps decreasing rank by rank the shadow quality (0 being the highest rank and quality)\r\n * @param defines The defines to update while falling back\r\n * @param fallbacks The authorized effect fallbacks\r\n * @param maxSimultaneousLights The maximum number of lights allowed\r\n * @param rank the current rank of the Effect\r\n * @returns The newly affected rank\r\n */\r\nexport function HandleFallbacksForShadows(defines: any, fallbacks: EffectFallbacks, maxSimultaneousLights = 4, rank = 0): number {\r\n let lightFallbackRank = 0;\r\n for (let lightIndex = 0; lightIndex < maxSimultaneousLights; lightIndex++) {\r\n if (!defines[\"LIGHT\" + lightIndex]) {\r\n break;\r\n }\r\n\r\n if (lightIndex > 0) {\r\n lightFallbackRank = rank + lightIndex;\r\n fallbacks.addFallback(lightFallbackRank, \"LIGHT\" + lightIndex);\r\n }\r\n\r\n if (!defines[\"SHADOWS\"]) {\r\n if (defines[\"SHADOW\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOW\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWPCF\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWPCF\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWPCSS\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWPCSS\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWPOISSON\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWPOISSON\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWESM\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWESM\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWCLOSEESM\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWCLOSEESM\" + lightIndex);\r\n }\r\n }\r\n }\r\n return lightFallbackRank++;\r\n}\r\n\r\n/**\r\n * Gets the current status of the fog (should it be enabled?)\r\n * @param mesh defines the mesh to evaluate for fog support\r\n * @param scene defines the hosting scene\r\n * @returns true if fog must be enabled\r\n */\r\nexport function GetFogState(mesh: AbstractMesh, scene: Scene) {\r\n return scene.fogEnabled && mesh.applyFog && scene.fogMode !== Constants.FOGMODE_NONE;\r\n}\r\n\r\n/**\r\n * Interface representing metadata for vertex pulling\r\n */\r\nexport interface IVertexPullingMetadata {\r\n /**\r\n * Offset in vertex buffer where data starts\r\n */\r\n offset: number;\r\n\r\n /**\r\n * Stride between elements in the vertex buffer\r\n */\r\n stride: number;\r\n\r\n /**\r\n * Type of the vertex buffer (e.g., float, int)\r\n */\r\n type: number; // VertexBuffer type constant\r\n}\r\n\r\n// Store vertex pulling metadata per geometry\r\nconst _VertexPullingMetadataCache = new WeakMap<Geometry, Map<string, IVertexPullingMetadata>>();\r\n\r\n/**\r\n * Prepares vertex pulling uniforms for the given attributes and mesh\r\n * @param geometry The geometry containing the vertex buffers\r\n * @returns A map of attribute names to their metadata, or null if unavailable\r\n */\r\nexport function PrepareVertexPullingUniforms(geometry: Geometry): Nullable<Map<string, IVertexPullingMetadata>> {\r\n const vertexBuffers = geometry.getVertexBuffers();\r\n if (!vertexBuffers) {\r\n return null;\r\n }\r\n\r\n // Check cache first\r\n let metadata = _VertexPullingMetadataCache.get(geometry);\r\n if (!metadata) {\r\n metadata = new Map<string, IVertexPullingMetadata>();\r\n _VertexPullingMetadataCache.set(geometry, metadata);\r\n } else {\r\n // Return cached metadata if it exists and hasn't changed\r\n let needsUpdate = false;\r\n for (const vb in vertexBuffers) {\r\n if (!metadata.has(vb)) {\r\n needsUpdate = true;\r\n break;\r\n }\r\n }\r\n if (!needsUpdate) {\r\n return metadata;\r\n }\r\n }\r\n\r\n // Build or update metadata\r\n for (const vb in vertexBuffers) {\r\n const vertexBuffer = vertexBuffers[vb];\r\n if (vertexBuffer) {\r\n const offset = vertexBuffer.byteOffset;\r\n const stride = vertexBuffer.byteStride;\r\n const type = vertexBuffer.type;\r\n\r\n metadata.set(vb, {\r\n offset: offset,\r\n stride: stride,\r\n type: type,\r\n });\r\n }\r\n }\r\n\r\n return metadata;\r\n}\r\n\r\n/**\r\n * Bind vertex pulling uniforms to the effect\r\n * @param effect The effect to bind the uniforms to\r\n * @param metadata The vertex pulling metadata\r\n */\r\nexport function BindVertexPullingUniforms(effect: Effect, metadata: Map<string, IVertexPullingMetadata>): void {\r\n metadata.forEach((data, attribute) => {\r\n const uniformName = `vp_${attribute}_info`;\r\n // Pack into vec3: (offset, stride, type)\r\n effect.setFloat3(uniformName, data.offset, data.stride, data.type);\r\n });\r\n}\r\n\r\n/**\r\n * Helper used to prepare the list of defines associated with misc. values for shader compilation\r\n * @param mesh defines the current mesh\r\n * @param scene defines the current scene\r\n * @param useLogarithmicDepth defines if logarithmic depth has to be turned on\r\n * @param pointsCloud defines if point cloud rendering has to be turned on\r\n * @param fogEnabled defines if fog has to be turned on\r\n * @param alphaTest defines if alpha testing has to be turned on\r\n * @param defines defines the current list of defines\r\n * @param applyDecalAfterDetail Defines if the decal is applied after or before the detail\r\n * @param useVertexPulling Defines if vertex pulling is used\r\n * @param renderingMesh The mesh used for rendering\r\n * @param setVertexOutputInvariant Defines if the vertex output should be invariant\r\n */\r\nexport function PrepareDefinesForMisc(\r\n mesh: AbstractMesh,\r\n scene: Scene,\r\n useLogarithmicDepth: boolean,\r\n pointsCloud: boolean,\r\n fogEnabled: boolean,\r\n alphaTest: boolean,\r\n defines: any,\r\n applyDecalAfterDetail: boolean = false,\r\n useVertexPulling: boolean = false,\r\n renderingMesh?: AbstractMesh,\r\n setVertexOutputInvariant?: boolean\r\n): void {\r\n if (defines._areMiscDirty) {\r\n defines[\"LOGARITHMICDEPTH\"] = useLogarithmicDepth;\r\n defines[\"POINTSIZE\"] = pointsCloud;\r\n defines[\"FOG\"] = fogEnabled && GetFogState(mesh, scene);\r\n defines[\"NONUNIFORMSCALING\"] = mesh.nonUniformScaling;\r\n defines[\"ALPHATEST\"] = alphaTest;\r\n defines[\"DECAL_AFTER_DETAIL\"] = applyDecalAfterDetail;\r\n defines[\"USE_VERTEX_PULLING\"] = useVertexPulling;\r\n\r\n const indexBuffer = renderingMesh?.geometry?.getIndexBuffer();\r\n\r\n defines[\"VERTEX_PULLING_USE_INDEX_BUFFER\"] = !!indexBuffer;\r\n defines[\"VERTEX_PULLING_INDEX_BUFFER_32BITS\"] = indexBuffer ? indexBuffer.is32Bits : false;\r\n\r\n defines[\"VERTEXOUTPUT_INVARIANT\"] = !!setVertexOutputInvariant;\r\n }\r\n}\r\n\r\n/**\r\n * Prepares the defines related to the light information passed in parameter\r\n * @param scene The scene we are intending to draw\r\n * @param mesh The mesh the effect is compiling for\r\n * @param defines The defines to update\r\n * @param specularSupported Specifies whether specular is supported or not (override lights data)\r\n * @param maxSimultaneousLights Specifies how manuy lights can be added to the effect at max\r\n * @param disableLighting Specifies whether the lighting is disabled (override scene and light)\r\n * @returns true if normals will be required for the rest of the effect\r\n */\r\nexport function PrepareDefinesForLights(scene: Scene, mesh: AbstractMesh, defines: any, specularSupported: boolean, maxSimultaneousLights = 4, disableLighting = false): boolean {\r\n if (!defines._areLightsDirty) {\r\n return defines._needNormals;\r\n }\r\n\r\n let lightIndex = 0;\r\n const state = {\r\n needNormals: defines._needNormals, // prevents overriding previous reflection or other needs for normals\r\n needRebuild: false,\r\n lightmapMode: false,\r\n shadowEnabled: false,\r\n specularEnabled: false,\r\n };\r\n\r\n if (scene.lightsEnabled && !disableLighting) {\r\n for (const light of mesh.lightSources) {\r\n PrepareDefinesForLight(scene, mesh, light, lightIndex, defines, specularSupported, state);\r\n\r\n lightIndex++;\r\n if (lightIndex === maxSimultaneousLights) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n defines[\"SPECULARTERM\"] = state.specularEnabled;\r\n defines[\"SHADOWS\"] = state.shadowEnabled;\r\n\r\n // Resetting all other lights if any\r\n const maxLightCount = Math.max(maxSimultaneousLights, defines[\"MAXLIGHTCOUNT\"] || 0);\r\n\r\n for (let index = lightIndex; index < maxLightCount; index++) {\r\n if (defines[\"LIGHT\" + index] !== undefined) {\r\n defines[\"LIGHT\" + index] = false;\r\n defines[\"HEMILIGHT\" + index] = false;\r\n defines[\"POINTLIGHT\" + index] = false;\r\n defines[\"DIRLIGHT\" + index] = false;\r\n defines[\"SPOTLIGHT\" + index] = false;\r\n defines[\"AREALIGHT\" + index] = false;\r\n defines[\"CLUSTLIGHT\" + index] = false;\r\n defines[\"SHADOW\" + index] = false;\r\n defines[\"SHADOWCSM\" + index] = false;\r\n defines[\"SHADOWCSMDEBUG\" + index] = false;\r\n defines[\"SHADOWCSMNUM_CASCADES\" + index] = false;\r\n defines[\"SHADOWCSMUSESHADOWMAXZ\" + index] = false;\r\n defines[\"SHADOWCSMNOBLEND\" + index] = false;\r\n defines[\"SHADOWCSM_RIGHTHANDED\" + index] = false;\r\n defines[\"SHADOWPCF\" + index] = false;\r\n defines[\"SHADOWPCSS\" + index] = false;\r\n defines[\"SHADOWPOISSON\" + index] = false;\r\n defines[\"SHADOWESM\" + index] = false;\r\n defines[\"SHADOWCLOSEESM\" + index] = false;\r\n defines[\"SHADOWCUBE\" + index] = false;\r\n defines[\"SHADOWLOWQUALITY\" + index] = false;\r\n defines[\"SHADOWMEDIUMQUALITY\" + index] = false;\r\n }\r\n }\r\n\r\n defines[\"MAXLIGHTCOUNT\"] = maxSimultaneousLights;\r\n\r\n const caps = scene.getEngine().getCaps();\r\n\r\n if (defines[\"SHADOWFLOAT\"] === undefined) {\r\n state.needRebuild = true;\r\n }\r\n\r\n defines[\"SHADOWFLOAT\"] =\r\n state.shadowEnabled && ((caps.textureFloatRender && caps.textureFloatLinearFiltering) || (caps.textureHalfFloatRender && caps.textureHalfFloatLinearFiltering));\r\n defines[\"LIGHTMAPEXCLUDED\"] = state.lightmapMode;\r\n\r\n if (state.needRebuild) {\r\n defines.rebuild();\r\n }\r\n\r\n return state.needNormals;\r\n}\r\n\r\n/**\r\n * Prepare defines relating to IBL logic.\r\n * @param scene The scene\r\n * @param reflectionTexture The texture to use for IBL\r\n * @param defines The defines to update\r\n * @param realTimeFiltering Whether realtime filting of IBL texture is being used\r\n * @param realTimeFilteringQuality The quality of realtime filtering\r\n * @param forceSHInVertex Whether the SH are handled in the vertex shader\r\n * @returns true if the defines were updated\r\n */\r\nexport function PrepareDefinesForIBL(\r\n scene: Scene,\r\n reflectionTexture: Nullable<BaseTexture>,\r\n defines: any,\r\n realTimeFiltering: boolean = false,\r\n realTimeFilteringQuality: number = Constants.TEXTURE_FILTERING_QUALITY_LOW,\r\n forceSHInVertex: boolean = false\r\n): boolean {\r\n if (reflectionTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n if (!reflectionTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n defines._needNormals = true;\r\n defines.REFLECTION = true;\r\n defines.GAMMAREFLECTION = reflectionTexture.gammaSpace;\r\n defines.RGBDREFLECTION = reflectionTexture.isRGBD;\r\n defines.LODINREFLECTIONALPHA = reflectionTexture.lodLevelInAlpha;\r\n defines.LINEARSPECULARREFLECTION = reflectionTexture.linearSpecularLOD;\r\n defines.USEIRRADIANCEMAP = false;\r\n\r\n const engine = scene.getEngine();\r\n if (realTimeFiltering && realTimeFilteringQuality > 0) {\r\n defines.NUM_SAMPLES = \"\" + realTimeFilteringQuality;\r\n if (engine._features.needTypeSuffixInShaderConstants) {\r\n defines.NUM_SAMPLES = defines.NUM_SAMPLES + \"u\";\r\n }\r\n\r\n defines.REALTIME_FILTERING = true;\r\n if (scene.iblCdfGenerator) {\r\n defines.IBL_CDF_FILTERING = true;\r\n }\r\n } else {\r\n defines.REALTIME_FILTERING = false;\r\n }\r\n\r\n defines.INVERTCUBICMAP = reflectionTexture.coordinatesMode === Texture.INVCUBIC_MODE;\r\n defines.REFLECTIONMAP_3D = reflectionTexture.isCube;\r\n defines.REFLECTIONMAP_OPPOSITEZ = defines.REFLECTIONMAP_3D && scene.useRightHandedSystem ? !reflectionTexture.invertZ : reflectionTexture.invertZ;\r\n\r\n defines.REFLECTIONMAP_CUBIC = false;\r\n defines.REFLECTIONMAP_EXPLICIT = false;\r\n defines.REFLECTIONMAP_PLANAR = false;\r\n defines.REFLECTIONMAP_PROJECTION = false;\r\n defines.REFLECTIONMAP_SKYBOX = false;\r\n defines.REFLECTIONMAP_SPHERICAL = false;\r\n defines.REFLECTIONMAP_EQUIRECTANGULAR = false;\r\n defines.REFLECTIONMAP_EQUIRECTANGULAR_FIXED = false;\r\n defines.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = false;\r\n\r\n switch (reflectionTexture.coordinatesMode) {\r\n case Texture.EXPLICIT_MODE:\r\n defines.REFLECTIONMAP_EXPLICIT = true;\r\n break;\r\n case Texture.PLANAR_MODE:\r\n defines.REFLECTIONMAP_PLANAR = true;\r\n break;\r\n case Texture.PROJECTION_MODE:\r\n defines.REFLECTIONMAP_PROJECTION = true;\r\n break;\r\n case Texture.SKYBOX_MODE:\r\n defines.REFLECTIONMAP_SKYBOX = true;\r\n break;\r\n case Texture.SPHERICAL_MODE:\r\n defines.REFLECTIONMAP_SPHERICAL = true;\r\n break;\r\n case Texture.EQUIRECTANGULAR_MODE:\r\n defines.REFLECTIONMAP_EQUIRECTANGULAR = true;\r\n break;\r\n case Texture.FIXED_EQUIRECTANGULAR_MODE:\r\n defines.REFLECTIONMAP_EQUIRECTANGULAR_FIXED = true;\r\n break;\r\n case Texture.FIXED_EQUIRECTANGULAR_MIRRORED_MODE:\r\n defines.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = true;\r\n break;\r\n case Texture.CUBIC_MODE:\r\n case Texture.INVCUBIC_MODE:\r\n default:\r\n defines.REFLECTIONMAP_CUBIC = true;\r\n defines.USE_LOCAL_REFLECTIONMAP_CUBIC = (<any>reflectionTexture).boundingBoxSize ? true : false;\r\n break;\r\n }\r\n\r\n if (reflectionTexture.coordinatesMode !== Texture.SKYBOX_MODE) {\r\n if (reflectionTexture.irradianceTexture) {\r\n defines.USEIRRADIANCEMAP = true;\r\n defines.USESPHERICALFROMREFLECTIONMAP = false;\r\n defines.USESPHERICALINVERTEX = false;\r\n if (reflectionTexture.irradianceTexture._dominantDirection) {\r\n defines.USE_IRRADIANCE_DOMINANT_DIRECTION = true;\r\n }\r\n }\r\n // Assume using spherical polynomial if the reflection texture is a cube map\r\n else if (reflectionTexture.isCube) {\r\n defines.USESPHERICALFROMREFLECTIONMAP = true;\r\n defines.USEIRRADIANCEMAP = false;\r\n defines.USE_IRRADIANCE_DOMINANT_DIRECTION = false;\r\n defines.USESPHERICALINVERTEX = forceSHInVertex;\r\n }\r\n }\r\n } else {\r\n defines.REFLECTION = false;\r\n defines.REFLECTIONMAP_3D = false;\r\n defines.REFLECTIONMAP_SPHERICAL = false;\r\n defines.REFLECTIONMAP_PLANAR = false;\r\n defines.REFLECTIONMAP_CUBIC = false;\r\n defines.USE_LOCAL_REFLECTIONMAP_CUBIC = false;\r\n defines.REFLECTIONMAP_PROJECTION = false;\r\n defines.REFLECTIONMAP_SKYBOX = false;\r\n defines.REFLECTIONMAP_EXPLICIT = false;\r\n defines.REFLECTIONMAP_EQUIRECTANGULAR = false;\r\n defines.REFLECTIONMAP_EQUIRECTANGULAR_FIXED = false;\r\n defines.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = false;\r\n defines.INVERTCUBICMAP = false;\r\n defines.USESPHERICALFROMREFLECTIONMAP = false;\r\n defines.USEIRRADIANCEMAP = false;\r\n defines.USE_IRRADIANCE_DOMINANT_DIRECTION = false;\r\n defines.USESPHERICALINVERTEX = false;\r\n defines.REFLECTIONMAP_OPPOSITEZ = false;\r\n defines.LODINREFLECTIONALPHA = false;\r\n defines.GAMMAREFLECTION = false;\r\n defines.RGBDREFLECTION = false;\r\n defines.LINEARSPECULARREFLECTION = false;\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * Prepares the defines related to the light information passed in parameter\r\n * @param scene The scene we are intending to draw\r\n * @param mesh The mesh the effect is compiling for\r\n * @param light The light the effect is compiling for\r\n * @param lightIndex The index of the light\r\n * @param defines The defines to update\r\n * @param specularSupported Specifies whether specular is supported or not (override lights data)\r\n * @param state Defines the current state regarding what is needed (normals, etc...)\r\n * @param state.needNormals\r\n * @param state.needRebuild\r\n * @param state.shadowEnabled\r\n * @param state.specularEnabled\r\n * @param state.lightmapMode\r\n */\r\nexport function PrepareDefinesForLight(\r\n scene: Scene,\r\n mesh: AbstractMesh,\r\n light: Light,\r\n lightIndex: number,\r\n defines: any,\r\n specularSupported: boolean,\r\n state: {\r\n needNormals: boolean;\r\n needRebuild: boolean;\r\n shadowEnabled: boolean;\r\n specularEnabled: boolean;\r\n lightmapMode: boolean;\r\n }\r\n) {\r\n state.needNormals = true;\r\n\r\n if (defines[\"LIGHT\" + lightIndex] === undefined) {\r\n state.needRebuild = true;\r\n }\r\n\r\n defines[\"LIGHT\" + lightIndex] = true;\r\n\r\n defines[\"SPOTLIGHT\" + lightIndex] = false;\r\n defines[\"HEMILIGHT\" + lightIndex] = false;\r\n defines[\"POINTLIGHT\" + lightIndex] = false;\r\n defines[\"DIRLIGHT\" + lightIndex] = false;\r\n defines[\"AREALIGHT\" + lightIndex] = false;\r\n defines[\"CLUSTLIGHT\" + lightIndex] = false;\r\n\r\n light.prepareLightSpecificDefines(defines, lightIndex);\r\n\r\n // FallOff.\r\n defines[\"LIGHT_FALLOFF_PHYSICAL\" + lightIndex] = false;\r\n defines[\"LIGHT_FALLOFF_GLTF\" + lightIndex] = false;\r\n defines[\"LIGHT_FALLOFF_STANDARD\" + lightIndex] = false;\r\n\r\n switch (light.falloffType) {\r\n case LightConstants.FALLOFF_GLTF:\r\n defines[\"LIGHT_FALLOFF_GLTF\" + lightIndex] = true;\r\n break;\r\n case LightConstants.FALLOFF_PHYSICAL:\r\n defines[\"LIGHT_FALLOFF_PHYSICAL\" + lightIndex] = true;\r\n break;\r\n case LightConstants.FALLOFF_STANDARD:\r\n defines[\"LIGHT_FALLOFF_STANDARD\" + lightIndex] = true;\r\n break;\r\n }\r\n\r\n // Specular\r\n if (specularSupported && !light.specular.equalsFloats(0, 0, 0)) {\r\n state.specularEnabled = true;\r\n }\r\n\r\n // Shadows\r\n defines[\"SHADOW\" + lightIndex] = false;\r\n defines[\"SHADOWCSM\" + lightIndex] = false;\r\n defines[\"SHADOWCSMDEBUG\" + lightIndex] = false;\r\n defines[\"SHADOWCSMNUM_CASCADES\" + lightIndex] = false;\r\n defines[\"SHADOWCSMUSESHADOWMAXZ\" + lightIndex] = false;\r\n defines[\"SHADOWCSMNOBLEND\" + lightIndex] = false;\r\n defines[\"SHADOWCSM_RIGHTHANDED\" + lightIndex] = false;\r\n defines[\"SHADOWPCF\" + lightIndex] = false;\r\n defines[\"SHADOWPCSS\" + lightIndex] = false;\r\n defines[\"SHADOWPOISSON\" + lightIndex] = false;\r\n defines[\"SHADOWESM\" + lightIndex] = false;\r\n defines[\"SHADOWCLOSEESM\" + lightIndex] = false;\r\n defines[\"SHADOWCUBE\" + lightIndex] = false;\r\n defines[\"SHADOWLOWQUALITY\" + lightIndex] = false;\r\n defines[\"SHADOWMEDIUMQUALITY\" + lightIndex] = false;\r\n\r\n if (mesh && mesh.receiveShadows && scene.shadowsEnabled && light.shadowEnabled) {\r\n const shadowGenerator = light.getShadowGenerator(scene.activeCamera) ?? light.getShadowGenerator();\r\n if (shadowGenerator) {\r\n const shadowMap = shadowGenerator.getShadowMap();\r\n if (shadowMap) {\r\n if (shadowMap.renderList && shadowMap.renderList.length > 0) {\r\n state.shadowEnabled = true;\r\n shadowGenerator.prepareDefines(defines, lightIndex);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (light.lightmapMode != LightConstants.LIGHTMAP_DEFAULT) {\r\n state.lightmapMode = true;\r\n defines[\"LIGHTMAPEXCLUDED\" + lightIndex] = true;\r\n defines[\"LIGHTMAPNOSPECULAR\" + lightIndex] = light.lightmapMode == LightConstants.LIGHTMAP_SHADOWSONLY;\r\n } else {\r\n defines[\"LIGHTMAPEXCLUDED\" + lightIndex] = false;\r\n defines[\"LIGHTMAPNOSPECULAR\" + lightIndex] = false;\r\n }\r\n}\r\n\r\n/**\r\n * Helper used to prepare the list of defines associated with frame values for shader compilation\r\n * @param scene defines the current scene\r\n * @param engine defines the current engine\r\n * @param material defines the material we are compiling the shader for\r\n * @param defines specifies the list of active defines\r\n * @param useInstances defines if instances have to be turned on\r\n * @param useClipPlane defines if clip plane have to be turned on\r\n * @param useThinInstances defines if thin instances have to be turned on\r\n */\r\nexport function PrepareDefinesForFrameBoundValues(\r\n scene: Scene,\r\n engine: AbstractEngine,\r\n material: Material,\r\n defines: any,\r\n useInstances: boolean,\r\n useClipPlane: Nullable<boolean> = null,\r\n useThinInstances: boolean = false\r\n): void {\r\n let changed = PrepareDefinesForCamera(scene, defines);\r\n\r\n if (useClipPlane !== false) {\r\n changed = PrepareDefinesForClipPlanes(material, scene, defines);\r\n }\r\n\r\n if (defines[\"DEPTHPREPASS\"] !== !engine.getColorWrite()) {\r\n defines[\"DEPTHPREPASS\"] = !defines[\"DEPTHPREPASS\"];\r\n changed = true;\r\n }\r\n\r\n if (defines[\"INSTANCES\"] !== useInstances) {\r\n defines[\"INSTANCES\"] = useInstances;\r\n changed = true;\r\n }\r\n\r\n if (defines[\"THIN_INSTANCES\"] !== useThinInstances) {\r\n defines[\"THIN_INSTANCES\"] = useThinInstances;\r\n changed = true;\r\n }\r\n\r\n if (changed) {\r\n defines.markAsUnprocessed();\r\n }\r\n}\r\n\r\n/**\r\n * Prepares the defines for bones\r\n * @param mesh The mesh containing the geometry data we will draw\r\n * @param defines The defines to update\r\n */\r\nexport function PrepareDefinesForBones(mesh: AbstractMesh, defines: any) {\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n defines[\"NUM_BONE_INFLUENCERS\"] = mesh.numBoneInfluencers;\r\n\r\n const materialSupportsBoneTexture = defines[\"BONETEXTURE\"] !== undefined;\r\n\r\n if (mesh.skeleton.isUsingTextureForMatrices && materialSupportsBoneTexture) {\r\n defines[\"BONETEXTURE\"] = true;\r\n } else {\r\n defines[\"BonesPerMesh\"] = mesh.skeleton.bones.length + 1;\r\n defines[\"BONETEXTURE\"] = materialSupportsBoneTexture ? false : undefined;\r\n\r\n const prePassRenderer = mesh.getScene().prePassRenderer;\r\n if (prePassRenderer && prePassRenderer.enabled) {\r\n const nonExcluded = prePassRenderer.excludedSkinnedMesh.indexOf(mesh) === -1;\r\n defines[\"BONES_VELOCITY_ENABLED\"] = nonExcluded;\r\n }\r\n }\r\n } else {\r\n defines[\"NUM_BONE_INFLUENCERS\"] = 0;\r\n defines[\"BonesPerMesh\"] = 0;\r\n if (defines[\"BONETEXTURE\"] !== undefined) {\r\n defines[\"BONETEXTURE\"] = false;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Prepares the defines for morph targets\r\n * @param mesh The mesh containing the geometry data we will draw\r\n * @param defines The defines to update\r\n */\r\nexport function PrepareDefinesForMorphTargets(mesh: AbstractMesh, defines: any) {\r\n const manager = (<Mesh>mesh).morphTargetManager;\r\n if (manager) {\r\n defines[\"MORPHTARGETS_UV\"] = manager.supportsUVs && defines[\"UV1\"];\r\n defines[\"MORPHTARGETS_UV2\"] = manager.supportsUV2s && defines[\"UV2\"];\r\n defines[\"MORPHTARGETS_TANGENT\"] = manager.supportsTangents && defines[\"TANGENT\"];\r\n defines[\"MORPHTARGETS_NORMAL\"] = manager.supportsNormals && defines[\"NORMAL\"];\r\n defines[\"MORPHTARGETS_POSITION\"] = manager.supportsPositions;\r\n defines[\"MORPHTARGETS_COLOR\"] = manager.supportsColors;\r\n\r\n defines[\"MORPHTARGETTEXTURE_HASUVS\"] = manager.hasUVs;\r\n defines[\"MORPHTARGETTEXTURE_HASUV2S\"] = manager.hasUV2s;\r\n defines[\"MORPHTARGETTEXTURE_HASTANGENTS\"] = manager.hasTangents;\r\n defines[\"MORPHTARGETTEXTURE_HASNORMALS\"] = manager.hasNormals;\r\n defines[\"MORPHTARGETTEXTURE_HASPOSITIONS\"] = manager.hasPositions;\r\n defines[\"MORPHTARGETTEXTURE_HASCOLORS\"] = manager.hasColors;\r\n\r\n defines[\"NUM_MORPH_INFLUENCERS\"] = manager.numMaxInfluencers || manager.numInfluencers;\r\n defines[\"MORPHTARGETS\"] = defines[\"NUM_MORPH_INFLUENCERS\"] > 0;\r\n\r\n defines[\"MORPHTARGETS_TEXTURE\"] = manager.isUsingTextureForTargets;\r\n } else {\r\n defines[\"MORPHTARGETS_UV\"] = false;\r\n defines[\"MORPHTARGETS_UV2\"] = false;\r\n defines[\"MORPHTARGETS_TANGENT\"] = false;\r\n defines[\"MORPHTARGETS_NORMAL\"] = false;\r\n defines[\"MORPHTARGETS_POSITION\"] = false;\r\n defines[\"MORPHTARGETS_COLOR\"] = false;\r\n\r\n defines[\"MORPHTARGETTEXTURE_HASUVS\"] = false;\r\n defines[\"MORPHTARGETTEXTURE_HASUV2S\"] = false;\r\n defines[\"MORPHTARGETTEXTURE_HASTANGENTS\"] = false;\r\n defines[\"MORPHTARGETTEXTURE_HASNORMALS\"] = false;\r\n defines[\"MORPHTARGETTEXTURE_HASPOSITIONS\"] = false;\r\n defines[\"MORPHTARGETTEXTURE_HAS_COLORS\"] = false;\r\n\r\n defines[\"MORPHTARGETS\"] = false;\r\n defines[\"NUM_MORPH_INFLUENCERS\"] = 0;\r\n }\r\n}\r\n\r\n/**\r\n * Prepares the defines for baked vertex animation\r\n * @param mesh The mesh containing the geometry data we will draw\r\n * @param defines The defines to update\r\n */\r\nexport function PrepareDefinesForBakedVertexAnimation(mesh: AbstractMesh, defines: any) {\r\n const manager = (<Mesh>mesh).bakedVertexAnimationManager;\r\n defines[\"BAKED_VERTEX_ANIMATION_TEXTURE\"] = manager && manager.isEnabled ? true : false;\r\n}\r\n\r\n/**\r\n * Prepares the defines used in the shader depending on the attributes data available in the mesh\r\n * @param mesh The mesh containing the geometry data we will draw\r\n * @param defines The defines to update\r\n * @param useVertexColor Precise whether vertex colors should be used or not (override mesh info)\r\n * @param useBones Precise whether bones should be used or not (override mesh info)\r\n * @param useMorphTargets Precise whether morph targets should be used or not (override mesh info)\r\n * @param useVertexAlpha Precise whether vertex alpha should be used or not (override mesh info)\r\n * @param useBakedVertexAnimation Precise whether baked vertex animation should be used or not (override mesh info)\r\n * @returns false if defines are considered not dirty and have not been checked\r\n */\r\nexport function PrepareDefinesForAttributes(\r\n mesh: AbstractMesh,\r\n defines: any,\r\n useVertexColor: boolean,\r\n useBones: boolean,\r\n useMorphTargets = false,\r\n useVertexAlpha = true,\r\n useBakedVertexAnimation = true\r\n): boolean {\r\n if (!defines._areAttributesDirty && defines._needNormals === defines._normals && defines._needUVs === defines._uvs) {\r\n return false;\r\n }\r\n\r\n defines._normals = defines._needNormals;\r\n defines._uvs = defines._needUVs;\r\n\r\n defines[\"NORMAL\"] = defines._needNormals && mesh.isVerticesDataPresent(Constants.NormalKind);\r\n\r\n if (defines._needNormals && mesh.isVerticesDataPresent(Constants.TangentKind)) {\r\n defines[\"TANGENT\"] = true;\r\n }\r\n\r\n for (let i = 1; i <= Constants.MAX_SUPPORTED_UV_SETS; ++i) {\r\n defines[\"UV\" + i] = defines._needUVs ? mesh.isVerticesDataPresent(`uv${i === 1 ? \"\" : i}`) : false;\r\n }\r\n\r\n if (useVertexColor) {\r\n const hasVertexColors = mesh.useVertexColors && mesh.isVerticesDataPresent(Constants.ColorKind);\r\n defines[\"VERTEXCOLOR\"] = hasVertexColors;\r\n defines[\"VERTEXALPHA\"] = mesh.hasVertexAlpha && hasVertexColors && useVertexAlpha;\r\n }\r\n\r\n if (mesh.isVerticesDataPresent(Constants.ColorInstanceKind) && (mesh.hasInstances || mesh.hasThinInstances)) {\r\n defines[\"INSTANCESCOLOR\"] = true;\r\n }\r\n\r\n if (useBones) {\r\n PrepareDefinesForBones(mesh, defines);\r\n }\r\n\r\n if (useMorphTargets) {\r\n PrepareDefinesForMorphTargets(mesh, defines);\r\n }\r\n\r\n if (useBakedVertexAnimation) {\r\n PrepareDefinesForBakedVertexAnimation(mesh, defines);\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Prepares the defines related to multiview\r\n * @param scene The scene we are intending to draw\r\n * @param defines The defines to update\r\n */\r\nexport function PrepareDefinesForMultiview(scene: Scene, defines: any) {\r\n if (scene.activeCamera) {\r\n const previousMultiview = defines.MULTIVIEW;\r\n defines.MULTIVIEW = scene.activeCamera.outputRenderTarget !== null && scene.activeCamera.outputRenderTarget.getViewCount() > 1;\r\n if (defines.MULTIVIEW != previousMultiview) {\r\n defines.markAsUnprocessed();\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Prepares the defines related to order independant transparency\r\n * @param scene The scene we are intending to draw\r\n * @param defines The defines to update\r\n * @param needAlphaBlending Determines if the material needs alpha blending\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function PrepareDefinesForOIT(scene: Scene, defines: any, needAlphaBlending: boolean) {\r\n const previousDefine = defines.ORDER_INDEPENDENT_TRANSPARENCY;\r\n const previousDefine16Bits = defines.ORDER_INDEPENDENT_TRANSPARENCY_16BITS;\r\n\r\n defines.ORDER_INDEPENDENT_TRANSPARENCY = scene.useOrderIndependentTransparency && needAlphaBlending;\r\n defines.ORDER_INDEPENDENT_TRANSPARENCY_16BITS = !scene.getEngine().getCaps().textureFloatLinearFiltering;\r\n\r\n if (previousDefine !== defines.ORDER_INDEPENDENT_TRANSPARENCY || previousDefine16Bits !== defines.ORDER_INDEPENDENT_TRANSPARENCY_16BITS) {\r\n defines.markAsUnprocessed();\r\n }\r\n}\r\n\r\n/**\r\n * Prepares the defines related to the prepass\r\n * @param scene The scene we are intending to draw\r\n * @param defines The defines to update\r\n * @param canRenderToMRT Indicates if this material renders to several textures in the prepass\r\n */\r\nexport function PrepareDefinesForPrePass(scene: Scene, defines: any, canRenderToMRT: boolean) {\r\n const previousPrePass = defines.PREPASS;\r\n\r\n if (!defines._arePrePassDirty) {\r\n return;\r\n }\r\n\r\n const texturesList = [\r\n {\r\n type: Constants.PREPASS_POSITION_TEXTURE_TYPE,\r\n define: \"PREPASS_POSITION\",\r\n index: \"PREPASS_POSITION_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_LOCAL_POSITION_TEXTURE_TYPE,\r\n define: \"PREPASS_LOCAL_POSITION\",\r\n index: \"PREPASS_LOCAL_POSITION_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_VELOCITY_TEXTURE_TYPE,\r\n define: \"PREPASS_VELOCITY\",\r\n index: \"PREPASS_VELOCITY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_VELOCITY_LINEAR_TEXTURE_TYPE,\r\n define: \"PREPASS_VELOCITY_LINEAR\",\r\n index: \"PREPASS_VELOCITY_LINEAR_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_REFLECTIVITY_TEXTURE_TYPE,\r\n define: \"PREPASS_REFLECTIVITY\",\r\n index: \"PREPASS_REFLECTIVITY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_IRRADIANCE_TEXTURE_TYPE,\r\n define: \"PREPASS_IRRADIANCE\",\r\n index: \"PREPASS_IRRADIANCE_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_ALBEDO_SQRT_TEXTURE_TYPE,\r\n define: \"PREPASS_ALBEDO_SQRT\",\r\n index: \"PREPASS_ALBEDO_SQRT_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_DEPTH_TEXTURE_TYPE,\r\n define: \"PREPASS_DEPTH\",\r\n index: \"PREPASS_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE,\r\n define: \"PREPASS_SCREENSPACE_DEPTH\",\r\n index: \"PREPASS_SCREENSPACE_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_NORMAL_TEXTURE_TYPE,\r\n define: \"PREPASS_NORMAL\",\r\n index: \"PREPASS_NORMAL_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_WORLD_NORMAL_TEXTURE_TYPE,\r\n define: \"PREPASS_WORLD_NORMAL\",\r\n index: \"PREPASS_WORLD_NORMAL_INDEX\",\r\n },\r\n ];\r\n\r\n if (scene.prePassRenderer && scene.prePassRenderer.enabled && canRenderToMRT) {\r\n defines.PREPASS = true;\r\n defines.SCENE_MRT_COUNT = scene.prePassRenderer.mrtCount;\r\n defines.PREPASS_NORMAL_WORLDSPACE = scene.prePassRenderer.generateNormalsInWorldSpace;\r\n defines.PREPASS_COLOR = true;\r\n defines.PREPASS_COLOR_INDEX = 0;\r\n\r\n for (let i = 0; i < texturesList.length; i++) {\r\n const index = scene.prePassRenderer.getIndex(texturesList[i].type);\r\n if (index !== -1) {\r\n defines[texturesList[i].define] = true;\r\n defines[texturesList[i].index] = index;\r\n } else {\r\n defines[texturesList[i].define] = false;\r\n }\r\n }\r\n } else {\r\n defines.PREPASS = false;\r\n for (let i = 0; i < texturesList.length; i++) {\r\n defines[texturesList[i].define] = false;\r\n }\r\n }\r\n\r\n if (defines.PREPASS != previousPrePass) {\r\n defines.markAsUnprocessed();\r\n defines.markAsImageProcessingDirty();\r\n }\r\n}\r\n\r\n/**\r\n * Helper used to prepare the defines relative to the active camera\r\n * @param scene defines the current scene\r\n * @param defines specifies the list of active defines\r\n * @returns true if the defines have been updated, else false\r\n */\r\nexport function PrepareDefinesForCamera(scene: Scene, defines: any): boolean {\r\n let changed = false;\r\n\r\n if (scene.activeCamera) {\r\n const wasOrtho = defines[\"CAMERA_ORTHOGRAPHIC\"] ? 1 : 0;\r\n const wasPersp = defines[\"CAMERA_PERSPECTIVE\"] ? 1 : 0;\r\n const isOrtho = scene.activeCamera.mode === Constants.ORTHOGRAPHIC_CAMERA ? 1 : 0;\r\n const isPersp = scene.activeCamera.mode === Constants.PERSPECTIVE_CAMERA ? 1 : 0;\r\n\r\n if (wasOrtho ^ isOrtho || wasPersp ^ isPersp) {\r\n defines[\"CAMERA_ORTHOGRAPHIC\"] = isOrtho === 1;\r\n defines[\"CAMERA_PERSPECTIVE\"] = isPersp === 1;\r\n changed = true;\r\n }\r\n }\r\n\r\n return changed;\r\n}\r\n\r\n/**\r\n * Prepares the uniforms and samplers list to be used in the effect (for a specific light)\r\n * @param lightIndex defines the light index\r\n * @param uniformsList The uniform list\r\n * @param samplersList The sampler list\r\n * @param projectedLightTexture defines if projected texture must be used\r\n * @param uniformBuffersList defines an optional list of uniform buffers\r\n * @param updateOnlyBuffersList True to only update the uniformBuffersList array\r\n * @param iesLightTexture defines if IES texture must be used\r\n * @param clusteredLightTextures defines if the clustered light textures must be used\r\n */\r\nexport function PrepareUniformsAndSamplersForLight(\r\n lightIndex: number,\r\n uniformsList: string[],\r\n samplersList: string[],\r\n projectedLightTexture?: any,\r\n uniformBuffersList: Nullable<string[]> = null,\r\n updateOnlyBuffersList = false,\r\n iesLightTexture = false,\r\n clusteredLightTextures = false\r\n) {\r\n if (uniformBuffersList) {\r\n uniformBuffersList.push(\"Light\" + lightIndex);\r\n }\r\n\r\n if (updateOnlyBuffersList) {\r\n return;\r\n }\r\n\r\n uniformsList.push(\r\n \"vLightData\" + lightIndex,\r\n \"vLightDiffuse\" + lightIndex,\r\n \"vLightSpecular\" + lightIndex,\r\n \"vLightDirection\" + lightIndex,\r\n \"vLightWidth\" + lightIndex,\r\n \"vLightHeight\" + lightIndex,\r\n \"vLightFalloff\" + lightIndex,\r\n \"vLightGround\" + lightIndex,\r\n \"vSliceData\" + lightIndex,\r\n \"vSliceRanges\" + lightIndex,\r\n \"lightMatrix\" + lightIndex,\r\n \"shadowsInfo\" + lightIndex,\r\n \"depthValues\" + lightIndex\r\n );\r\n\r\n samplersList.push(\"shadowTexture\" + lightIndex);\r\n samplersList.push(\"depthTexture\" + lightIndex);\r\n\r\n uniformsList.push(\r\n \"viewFrustumZ\" + lightIndex,\r\n \"cascadeBlendFactor\" + lightIndex,\r\n \"lightSizeUVCorrection\" + lightIndex,\r\n \"depthCorrection\" + lightIndex,\r\n \"penumbraDarkness\" + lightIndex,\r\n \"frustumLengths\" + lightIndex\r\n );\r\n\r\n if (projectedLightTexture) {\r\n samplersList.push(\"projectionLightTexture\" + lightIndex);\r\n uniformsList.push(\"textureProjectionMatrix\" + lightIndex);\r\n }\r\n if (iesLightTexture) {\r\n samplersList.push(\"iesLightTexture\" + lightIndex);\r\n }\r\n if (clusteredLightTextures) {\r\n samplersList.push(\"lightDataTexture\" + lightIndex);\r\n samplersList.push(\"tileMaskTexture\" + lightIndex);\r\n }\r\n}\r\n\r\n/**\r\n * Append uniforms and samplers related to IBL to the provided lists\r\n * @param uniformsList The list of uniforms to append to\r\n * @param samplersList The list of samplers to append to\r\n * @param useSH Whether to include spherical harmonics uniforms\r\n */\r\nexport function PrepareUniformsAndSamplersForIBL(uniformsList: string[], samplersList: string[], useSH: boolean): void {\r\n const iblUniforms = [\r\n \"vReflectionMicrosurfaceInfos\",\r\n \"vReflectionDominantDirection\",\r\n \"reflectionMatrix\",\r\n \"vReflectionInfos\",\r\n \"vReflectionPosition\",\r\n \"vReflectionSize\",\r\n \"vReflectionColor\",\r\n \"vReflectionFilteringInfo\",\r\n ];\r\n if (useSH) {\r\n iblUniforms.push(\r\n \"vSphericalX\",\r\n \"vSphericalY\",\r\n \"vSphericalZ\",\r\n \"vSphericalXX_ZZ\",\r\n \"vSphericalYY_ZZ\",\r\n \"vSphericalZZ\",\r\n \"vSphericalXY\",\r\n \"vSphericalYZ\",\r\n \"vSphericalZX\",\r\n \"vSphericalL00\",\r\n \"vSphericalL1_1\",\r\n \"vSphericalL10\",\r\n \"vSphericalL11\",\r\n \"vSphericalL2_2\",\r\n \"vSphericalL2_1\",\r\n \"vSphericalL20\",\r\n \"vSphericalL21\",\r\n \"vSphericalL22\"\r\n );\r\n }\r\n uniformsList.push(...iblUniforms);\r\n\r\n const iblSamplers = [\"reflectionSampler\", \"reflectionSamplerLow\", \"reflectionSamplerHigh\", \"irradianceSampler\", \"icdfSampler\"];\r\n samplersList.push(...iblSamplers);\r\n}\r\n\r\n/**\r\n * Prepares the uniforms and samplers list to be used in the effect\r\n * @param uniformsListOrOptions The uniform names to prepare or an EffectCreationOptions containing the list and extra information\r\n * @param samplersList The sampler list\r\n * @param defines The defines helping in the list generation\r\n * @param maxSimultaneousLights The maximum number of simultaneous light allowed in the effect\r\n */\r\nexport function PrepareUniformsAndSamplersList(uniformsListOrOptions: string[] | IEffectCreationOptions, samplersList?: string[], defines?: any, maxSimultaneousLights = 4): void {\r\n let uniformsList: string[];\r\n let uniformBuffersList: string[] | undefined;\r\n\r\n if ((<IEffectCreationOptions>uniformsListOrOptions).uniformsNames) {\r\n const options = <IEffectCreationOptions>uniformsListOrOptions;\r\n uniformsList = options.uniformsNames;\r\n uniformBuffersList = options.uniformBuffersNames;\r\n samplersList = options.samplers;\r\n defines = options.defines;\r\n maxSimultaneousLights = options.maxSimultaneousLights || 0;\r\n } else {\r\n uniformsList = <string[]>uniformsListOrOptions;\r\n if (!samplersList) {\r\n samplersList = [];\r\n }\r\n }\r\n\r\n for (let lightIndex = 0; lightIndex < maxSimultaneousLights; lightIndex++) {\r\n if (!defines[\"LIGHT\" + lightIndex]) {\r\n break;\r\n }\r\n PrepareUniformsAndSamplersForLight(\r\n lightIndex,\r\n uniformsList,\r\n samplersList,\r\n defines[\"PROJECTEDLIGHTTEXTURE\" + lightIndex],\r\n uniformBuffersList,\r\n false,\r\n defines[\"IESLIGHTTEXTURE\" + lightIndex],\r\n defines[\"CLUSTLIGHT\" + lightIndex]\r\n );\r\n }\r\n\r\n if (defines[\"NUM_MORPH_INFLUENCERS\"]) {\r\n uniformsList.push(\"morphTargetInfluences\");\r\n uniformsList.push(\"morphTargetCount\");\r\n }\r\n\r\n if (defines[\"BAKED_VERTEX_ANIMATION_TEXTURE\"]) {\r\n uniformsList.push(\"bakedVertexAnimationSettings\");\r\n uniformsList.push(\"bakedVertexAnimationTextureSizeInverted\");\r\n uniformsList.push(\"bakedVertexAnimationTime\");\r\n samplersList.push(\"bakedVertexAnimationTexture\");\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @param ubo Add uniforms to UBO\r\n * @param supportTextureInfo Add uniforms for texture info if true\r\n * @param supportLocalProjection Add uniforms for local projection if true\r\n * @param usePBR Add uniforms for IBL if true\r\n * @param supportSH Add uniforms for spherical harmonics if true\r\n * @param useColor Add uniforms for reflection color if true\r\n */\r\nexport function PrepareUniformLayoutForIBL(\r\n ubo: UniformBuffer,\r\n supportTextureInfo: boolean = false,\r\n supportLocalProjection: boolean = false,\r\n usePBR: boolean = false,\r\n supportSH: boolean = false,\r\n useColor: boolean = false\r\n): void {\r\n ubo.addUniform(\"vReflectionInfos\", 2);\r\n ubo.addUniform(\"reflectionMatrix\", 16);\r\n if (supportTextureInfo) {\r\n ubo.addUniform(\"vReflectionMicrosurfaceInfos\", 3);\r\n }\r\n\r\n if (supportLocalProjection) {\r\n ubo.addUniform(\"vReflectionPosition\", 3);\r\n ubo.addUniform(\"vReflectionSize\", 3);\r\n }\r\n\r\n if (usePBR) {\r\n ubo.addUniform(\"vReflectionFilteringInfo\", 2);\r\n ubo.addUniform(\"vReflectionDominantDirection\", 3);\r\n }\r\n\r\n if (useColor) {\r\n ubo.addUniform(\"vReflectionColor\", 3);\r\n }\r\n\r\n if (supportSH) {\r\n ubo.addUniform(\"vSphericalL00\", 3);\r\n ubo.addUniform(\"vSphericalL1_1\", 3);\r\n ubo.addUniform(\"vSphericalL10\", 3);\r\n ubo.addUniform(\"vSphericalL11\", 3);\r\n ubo.addUniform(\"vSphericalL2_2\", 3);\r\n ubo.addUniform(\"vSphericalL2_1\", 3);\r\n ubo.addUniform(\"vSphericalL20\", 3);\r\n ubo.addUniform(\"vSphericalL21\", 3);\r\n ubo.addUniform(\"vSphericalL22\", 3);\r\n\r\n ubo.addUniform(\"vSphericalX\", 3);\r\n ubo.addUniform(\"vSphericalY\", 3);\r\n ubo.addUniform(\"vSphericalZ\", 3);\r\n ubo.addUniform(\"vSphericalXX_ZZ\", 3);\r\n ubo.addUniform(\"vSphericalYY_ZZ\", 3);\r\n ubo.addUniform(\"vSphericalZZ\", 3);\r\n ubo.addUniform(\"vSphericalXY\", 3);\r\n ubo.addUniform(\"vSphericalYZ\", 3);\r\n ubo.addUniform(\"vSphericalZX\", 3);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"materialHelper.functions.js","sourceRoot":"","sources":["../../../../dev/core/src/Materials/materialHelper.functions.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { Effect, IEffectCreationOptions } from \"./effect\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { Mesh } from \"../Meshes/mesh\";\r\nimport type { UniformBuffer } from \"./uniformBuffer\";\r\nimport type { BaseTexture } from \"./Textures/baseTexture\";\r\nimport type { PrePassConfiguration } from \"./prePassConfiguration\";\r\nimport type { Light } from \"../Lights/light\";\r\nimport type { MaterialDefines } from \"./materialDefines\";\r\nimport type { EffectFallbacks } from \"./effectFallbacks\";\r\nimport { LightConstants } from \"../Lights/lightConstants\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport type { Material } from \"./material\";\r\nimport type { Nullable } from \"../types\";\r\nimport { PrepareDefinesForClipPlanes } from \"./clipPlaneMaterialHelper\";\r\nimport type { MorphTargetManager } from \"../Morph/morphTargetManager\";\r\nimport type { IColor3Like } from \"core/Maths/math.like\";\r\nimport { MaterialFlags } from \"./materialFlags\";\r\nimport { Texture } from \"./Textures/texture\";\r\nimport type { CubeTexture } from \"./Textures/cubeTexture\";\r\nimport type { Color3 } from \"core/Maths/math.color\";\r\nimport type { Geometry } from \"../Meshes/geometry\";\r\n\r\n// For backwards compatibility, we export everything from the pure version of this file.\r\nexport * from \"./materialHelper.functions.pure\";\r\n\r\n// Temps\r\nconst TempFogColor: IColor3Like = { r: 0, g: 0, b: 0 };\r\nconst TmpMorphInfluencers = {\r\n NUM_MORPH_INFLUENCERS: 0,\r\n NORMAL: false,\r\n TANGENT: false,\r\n UV: false,\r\n UV2: false,\r\n COLOR: false,\r\n};\r\n\r\n/**\r\n * Binds the fog information from the scene to the effect for the given mesh.\r\n * @param scene The scene the lights belongs to\r\n * @param mesh The mesh we are binding the information to render\r\n * @param effect The effect we are binding the data to\r\n * @param linearSpace Defines if the fog effect is applied in linear space\r\n */\r\nexport function BindFogParameters(scene: Scene, mesh?: AbstractMesh, effect?: Effect, linearSpace = false): void {\r\n if (effect && scene.fogEnabled && (!mesh || mesh.applyFog) && scene.fogMode !== Constants.FOGMODE_NONE) {\r\n effect.setFloat4(\"vFogInfos\", scene.fogMode, scene.fogStart, scene.fogEnd, scene.fogDensity);\r\n // Convert fog color to linear space if used in a linear space computed shader.\r\n if (linearSpace) {\r\n scene.fogColor.toLinearSpaceToRef(TempFogColor, scene.getEngine().useExactSrgbConversions);\r\n effect.setColor3(\"vFogColor\", TempFogColor);\r\n } else {\r\n effect.setColor3(\"vFogColor\", scene.fogColor);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Prepares the list of attributes and defines required for morph targets.\r\n * @param morphTargetManager The manager for the morph targets\r\n * @param defines The current list of defines\r\n * @param attribs The current list of attributes\r\n * @param mesh The mesh to prepare the defines and attributes for\r\n * @param usePositionMorph Whether the position morph target is used\r\n * @param useNormalMorph Whether the normal morph target is used\r\n * @param useTangentMorph Whether the tangent morph target is used\r\n * @param useUVMorph Whether the UV morph target is used\r\n * @param useUV2Morph Whether the UV2 morph target is used\r\n * @param useColorMorph Whether the color morph target is used\r\n * @returns The maxSimultaneousMorphTargets for the effect\r\n */\r\nexport function PrepareDefinesAndAttributesForMorphTargets(\r\n morphTargetManager: MorphTargetManager,\r\n defines: string[],\r\n attribs: string[],\r\n mesh: AbstractMesh,\r\n usePositionMorph: boolean,\r\n useNormalMorph: boolean,\r\n useTangentMorph: boolean,\r\n useUVMorph: boolean,\r\n useUV2Morph: boolean,\r\n useColorMorph: boolean\r\n): number {\r\n const numMorphInfluencers = morphTargetManager.numMaxInfluencers || morphTargetManager.numInfluencers;\r\n if (numMorphInfluencers <= 0) {\r\n return 0;\r\n }\r\n\r\n defines.push(\"#define MORPHTARGETS\");\r\n\r\n if (morphTargetManager.hasPositions) {\r\n defines.push(\"#define MORPHTARGETTEXTURE_HASPOSITIONS\");\r\n }\r\n if (morphTargetManager.hasNormals) {\r\n defines.push(\"#define MORPHTARGETTEXTURE_HASNORMALS\");\r\n }\r\n if (morphTargetManager.hasTangents) {\r\n defines.push(\"#define MORPHTARGETTEXTURE_HASTANGENTS\");\r\n }\r\n if (morphTargetManager.hasUVs) {\r\n defines.push(\"#define MORPHTARGETTEXTURE_HASUVS\");\r\n }\r\n if (morphTargetManager.hasUV2s) {\r\n defines.push(\"#define MORPHTARGETTEXTURE_HASUV2S\");\r\n }\r\n if (morphTargetManager.hasColors) {\r\n defines.push(\"#define MORPHTARGETTEXTURE_HASCOLORS\");\r\n }\r\n\r\n if (morphTargetManager.supportsPositions && usePositionMorph) {\r\n defines.push(\"#define MORPHTARGETS_POSITION\");\r\n }\r\n if (morphTargetManager.supportsNormals && useNormalMorph) {\r\n defines.push(\"#define MORPHTARGETS_NORMAL\");\r\n }\r\n if (morphTargetManager.supportsTangents && useTangentMorph) {\r\n defines.push(\"#define MORPHTARGETS_TANGENT\");\r\n }\r\n if (morphTargetManager.supportsUVs && useUVMorph) {\r\n defines.push(\"#define MORPHTARGETS_UV\");\r\n }\r\n if (morphTargetManager.supportsUV2s && useUV2Morph) {\r\n defines.push(\"#define MORPHTARGETS_UV2\");\r\n }\r\n if (morphTargetManager.supportsColors && useColorMorph) {\r\n defines.push(\"#define MORPHTARGETS_COLOR\");\r\n }\r\n\r\n defines.push(\"#define NUM_MORPH_INFLUENCERS \" + numMorphInfluencers);\r\n\r\n if (morphTargetManager.isUsingTextureForTargets) {\r\n defines.push(\"#define MORPHTARGETS_TEXTURE\");\r\n }\r\n\r\n TmpMorphInfluencers.NUM_MORPH_INFLUENCERS = numMorphInfluencers;\r\n TmpMorphInfluencers.NORMAL = useNormalMorph;\r\n TmpMorphInfluencers.TANGENT = useTangentMorph;\r\n TmpMorphInfluencers.UV = useUVMorph;\r\n TmpMorphInfluencers.UV2 = useUV2Morph;\r\n TmpMorphInfluencers.COLOR = useColorMorph;\r\n\r\n PrepareAttributesForMorphTargets(attribs, mesh, TmpMorphInfluencers, usePositionMorph);\r\n return numMorphInfluencers;\r\n}\r\n\r\n/**\r\n * Prepares the list of attributes required for morph targets according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param mesh The mesh to prepare the morph targets attributes for\r\n * @param influencers The number of influencers\r\n */\r\nexport function PrepareAttributesForMorphTargetsInfluencers(attribs: string[], mesh: AbstractMesh, influencers: number): void {\r\n TmpMorphInfluencers.NUM_MORPH_INFLUENCERS = influencers;\r\n TmpMorphInfluencers.NORMAL = false;\r\n TmpMorphInfluencers.TANGENT = false;\r\n TmpMorphInfluencers.UV = false;\r\n TmpMorphInfluencers.UV2 = false;\r\n TmpMorphInfluencers.COLOR = false;\r\n PrepareAttributesForMorphTargets(attribs, mesh, TmpMorphInfluencers, true);\r\n}\r\n\r\n/**\r\n * Prepares the list of attributes required for morph targets according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param mesh The mesh to prepare the morph targets attributes for\r\n * @param defines The current Defines of the effect\r\n * @param usePositionMorph Whether the position morph target is used\r\n */\r\nexport function PrepareAttributesForMorphTargets(attribs: string[], mesh: AbstractMesh, defines: any, usePositionMorph = true): void {\r\n const influencers = defines[\"NUM_MORPH_INFLUENCERS\"];\r\n\r\n if (influencers > 0 && EngineStore.LastCreatedEngine) {\r\n const maxAttributesCount = EngineStore.LastCreatedEngine.getCaps().maxVertexAttribs;\r\n const manager = (mesh as Mesh).morphTargetManager;\r\n if (manager?.isUsingTextureForTargets) {\r\n return;\r\n }\r\n const position = manager && manager.supportsPositions && usePositionMorph;\r\n const normal = manager && manager.supportsNormals && defines[\"NORMAL\"];\r\n const tangent = manager && manager.supportsTangents && defines[\"TANGENT\"];\r\n const uv = manager && manager.supportsUVs && defines[\"UV1\"];\r\n const uv2 = manager && manager.supportsUV2s && defines[\"UV2\"];\r\n const color = manager && manager.supportsColors && defines[\"VERTEXCOLOR\"];\r\n for (let index = 0; index < influencers; index++) {\r\n if (position) {\r\n attribs.push(Constants.PositionKind + index);\r\n }\r\n\r\n if (normal) {\r\n attribs.push(Constants.NormalKind + index);\r\n }\r\n\r\n if (tangent) {\r\n attribs.push(Constants.TangentKind + index);\r\n }\r\n\r\n if (uv) {\r\n attribs.push(Constants.UVKind + \"_\" + index);\r\n }\r\n\r\n if (uv2) {\r\n attribs.push(Constants.UV2Kind + \"_\" + index);\r\n }\r\n\r\n if (color) {\r\n attribs.push(Constants.ColorKind + index);\r\n }\r\n\r\n if (attribs.length > maxAttributesCount) {\r\n Logger.Error(\"Cannot add more vertex attributes for mesh \" + mesh.name);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Add the list of attributes required for instances to the attribs array.\r\n * @param attribs The current list of supported attribs\r\n * @param needsPreviousMatrices If the shader needs previous matrices\r\n */\r\nexport function PushAttributesForInstances(attribs: string[], needsPreviousMatrices: boolean = false): void {\r\n attribs.push(\"world0\");\r\n attribs.push(\"world1\");\r\n attribs.push(\"world2\");\r\n attribs.push(\"world3\");\r\n if (needsPreviousMatrices) {\r\n attribs.push(\"previousWorld0\");\r\n attribs.push(\"previousWorld1\");\r\n attribs.push(\"previousWorld2\");\r\n attribs.push(\"previousWorld3\");\r\n }\r\n}\r\n\r\n/**\r\n * Binds the morph targets information from the mesh to the effect.\r\n * @param abstractMesh The mesh we are binding the information to render\r\n * @param effect The effect we are binding the data to\r\n */\r\nexport function BindMorphTargetParameters(abstractMesh: AbstractMesh, effect: Effect): void {\r\n const manager = (<Mesh>abstractMesh).morphTargetManager;\r\n if (!abstractMesh || !manager) {\r\n return;\r\n }\r\n\r\n effect.setFloatArray(\"morphTargetInfluences\", manager.influences);\r\n}\r\n\r\n/**\r\n * Binds the scene's uniform buffer to the effect.\r\n * @param effect defines the effect to bind to the scene uniform buffer\r\n * @param sceneUbo defines the uniform buffer storing scene data\r\n */\r\nexport function BindSceneUniformBuffer(effect: Effect, sceneUbo: UniformBuffer): void {\r\n sceneUbo.bindToEffect(effect, \"Scene\");\r\n}\r\n\r\n/**\r\n * Update parameters for IBL\r\n * @param scene The scene\r\n * @param defines The list of shader defines for the material\r\n * @param ubo The uniform buffer to update\r\n * @param reflectionColor The color to use for the reflection\r\n * @param reflectionTexture The IBL texture\r\n * @param realTimeFiltering Whether realtime filtering of IBL texture is being used\r\n * @param supportTextureInfo Whether the texture info is supported\r\n * @param supportLocalProjection Whether local projection is supported\r\n * @param usePBR Whether PBR is being used\r\n * @param supportSH Whether spherical harmonics are supported\r\n * @param useColor Whether to use the reflection color\r\n * @param reflectionBlur The level of blur of the reflection\r\n */\r\nexport function BindIBLParameters(\r\n scene: Scene,\r\n defines: any,\r\n ubo: UniformBuffer,\r\n reflectionColor: Color3,\r\n reflectionTexture: Nullable<BaseTexture> = null,\r\n realTimeFiltering: boolean = false,\r\n supportTextureInfo: boolean = false,\r\n supportLocalProjection: boolean = false,\r\n usePBR: boolean = false,\r\n supportSH: boolean = false,\r\n useColor: boolean = false,\r\n reflectionBlur: number = 0\r\n): void {\r\n if (scene.texturesEnabled) {\r\n if (reflectionTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n ubo.updateMatrix(\"reflectionMatrix\", reflectionTexture.getReflectionTextureMatrix());\r\n ubo.updateFloat2(\"vReflectionInfos\", reflectionTexture.level * scene.iblIntensity, reflectionBlur);\r\n\r\n if (supportLocalProjection && (<any>reflectionTexture).boundingBoxSize) {\r\n const cubeTexture = <CubeTexture>reflectionTexture;\r\n\r\n ubo.updateVector3(\"vReflectionPosition\", cubeTexture.boundingBoxPosition);\r\n ubo.updateVector3(\"vReflectionSize\", cubeTexture.boundingBoxSize);\r\n }\r\n\r\n if (realTimeFiltering) {\r\n const width = reflectionTexture.getSize().width;\r\n ubo.updateFloat2(\"vReflectionFilteringInfo\", width, Math.log2(width));\r\n }\r\n\r\n if (supportSH && !defines.USEIRRADIANCEMAP) {\r\n const polynomials = reflectionTexture.sphericalPolynomial;\r\n if (defines.USESPHERICALFROMREFLECTIONMAP && polynomials) {\r\n if (defines.SPHERICAL_HARMONICS) {\r\n const preScaledHarmonics = polynomials.preScaledHarmonics;\r\n ubo.updateVector3(\"vSphericalL00\", preScaledHarmonics.l00);\r\n ubo.updateVector3(\"vSphericalL1_1\", preScaledHarmonics.l1_1);\r\n ubo.updateVector3(\"vSphericalL10\", preScaledHarmonics.l10);\r\n ubo.updateVector3(\"vSphericalL11\", preScaledHarmonics.l11);\r\n ubo.updateVector3(\"vSphericalL2_2\", preScaledHarmonics.l2_2);\r\n ubo.updateVector3(\"vSphericalL2_1\", preScaledHarmonics.l2_1);\r\n ubo.updateVector3(\"vSphericalL20\", preScaledHarmonics.l20);\r\n ubo.updateVector3(\"vSphericalL21\", preScaledHarmonics.l21);\r\n ubo.updateVector3(\"vSphericalL22\", preScaledHarmonics.l22);\r\n } else {\r\n ubo.updateFloat3(\"vSphericalX\", polynomials.x.x, polynomials.x.y, polynomials.x.z);\r\n ubo.updateFloat3(\"vSphericalY\", polynomials.y.x, polynomials.y.y, polynomials.y.z);\r\n ubo.updateFloat3(\"vSphericalZ\", polynomials.z.x, polynomials.z.y, polynomials.z.z);\r\n ubo.updateFloat3(\"vSphericalXX_ZZ\", polynomials.xx.x - polynomials.zz.x, polynomials.xx.y - polynomials.zz.y, polynomials.xx.z - polynomials.zz.z);\r\n ubo.updateFloat3(\"vSphericalYY_ZZ\", polynomials.yy.x - polynomials.zz.x, polynomials.yy.y - polynomials.zz.y, polynomials.yy.z - polynomials.zz.z);\r\n ubo.updateFloat3(\"vSphericalZZ\", polynomials.zz.x, polynomials.zz.y, polynomials.zz.z);\r\n ubo.updateFloat3(\"vSphericalXY\", polynomials.xy.x, polynomials.xy.y, polynomials.xy.z);\r\n ubo.updateFloat3(\"vSphericalYZ\", polynomials.yz.x, polynomials.yz.y, polynomials.yz.z);\r\n ubo.updateFloat3(\"vSphericalZX\", polynomials.zx.x, polynomials.zx.y, polynomials.zx.z);\r\n }\r\n }\r\n } else if (usePBR) {\r\n // If we're using an irradiance map with a dominant direction assigned, set it.\r\n if (defines.USEIRRADIANCEMAP && defines.USE_IRRADIANCE_DOMINANT_DIRECTION) {\r\n ubo.updateVector3(\"vReflectionDominantDirection\", reflectionTexture.irradianceTexture!._dominantDirection!);\r\n }\r\n }\r\n\r\n if (supportTextureInfo) {\r\n ubo.updateFloat3(\"vReflectionMicrosurfaceInfos\", reflectionTexture.getSize().width, reflectionTexture.lodGenerationScale, reflectionTexture.lodGenerationOffset);\r\n }\r\n }\r\n }\r\n if (useColor) {\r\n ubo.updateColor3(\"vReflectionColor\", reflectionColor);\r\n }\r\n}\r\n\r\n/**\r\n * Update parameters for IBL\r\n * @param scene The scene\r\n * @param defines The list of shader defines for the material\r\n * @param ubo The uniform buffer to update\r\n * @param reflectionTexture The IBL texture\r\n * @param realTimeFiltering Whether realtime filtering of IBL texture is being used\r\n */\r\nexport function BindIBLSamplers(scene: Scene, defines: any, ubo: UniformBuffer, reflectionTexture: Nullable<BaseTexture> = null, realTimeFiltering: boolean = false): void {\r\n if (reflectionTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n if (defines.LODBASEDMICROSFURACE) {\r\n ubo.setTexture(\"reflectionSampler\", reflectionTexture);\r\n } else {\r\n ubo.setTexture(\"reflectionSampler\", reflectionTexture._lodTextureMid || reflectionTexture);\r\n ubo.setTexture(\"reflectionSamplerLow\", reflectionTexture._lodTextureLow || reflectionTexture);\r\n ubo.setTexture(\"reflectionSamplerHigh\", reflectionTexture._lodTextureHigh || reflectionTexture);\r\n }\r\n\r\n if (defines.USEIRRADIANCEMAP) {\r\n ubo.setTexture(\"irradianceSampler\", reflectionTexture.irradianceTexture);\r\n }\r\n\r\n //if realtime filtering and using CDF maps, set them.\r\n const cdfGenerator = scene.iblCdfGenerator;\r\n if (realTimeFiltering && cdfGenerator) {\r\n ubo.setTexture(\"icdfSampler\", cdfGenerator.getIcdfTexture());\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Helps preparing the defines values about the UVs in used in the effect.\r\n * UVs are shared as much as we can across channels in the shaders.\r\n * @param texture The texture we are preparing the UVs for\r\n * @param defines The defines to update\r\n * @param key The channel key \"diffuse\", \"specular\"... used in the shader\r\n */\r\nexport function PrepareDefinesForMergedUV(texture: BaseTexture, defines: any, key: string): void {\r\n defines._needUVs = true;\r\n defines[key] = true;\r\n if (texture.optimizeUVAllocation && texture.getTextureMatrix().isIdentityAs3x2()) {\r\n defines[key + \"DIRECTUV\"] = texture.coordinatesIndex + 1;\r\n defines[\"MAINUV\" + (texture.coordinatesIndex + 1)] = true;\r\n } else {\r\n defines[key + \"DIRECTUV\"] = 0;\r\n }\r\n}\r\n\r\n/**\r\n * Binds a texture matrix value to its corresponding uniform\r\n * @param texture The texture to bind the matrix for\r\n * @param uniformBuffer The uniform buffer receiving the data\r\n * @param key The channel key \"diffuse\", \"specular\"... used in the shader\r\n */\r\nexport function BindTextureMatrix(texture: BaseTexture, uniformBuffer: UniformBuffer, key: string): void {\r\n const matrix = texture.getTextureMatrix();\r\n\r\n uniformBuffer.updateMatrix(key + \"Matrix\", matrix);\r\n}\r\n\r\n/**\r\n * Prepares the list of attributes required for baked vertex animations according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param mesh The mesh to prepare for baked vertex animations\r\n * @param defines The current Defines of the effect\r\n */\r\nexport function PrepareAttributesForBakedVertexAnimation(attribs: string[], mesh: AbstractMesh, defines: any): void {\r\n const enabled = defines[\"BAKED_VERTEX_ANIMATION_TEXTURE\"] && defines[\"INSTANCES\"];\r\n\r\n if (enabled) {\r\n attribs.push(\"bakedVertexAnimationSettingsInstanced\");\r\n }\r\n}\r\n\r\n// Copies the bones transformation matrices into the target array and returns the target's reference\r\nfunction CopyBonesTransformationMatrices(source: Float32Array, target: Float32Array): Float32Array {\r\n target.set(source);\r\n\r\n return target;\r\n}\r\n\r\n/**\r\n * Binds the bones information from the mesh to the effect.\r\n * @param mesh The mesh we are binding the information to render\r\n * @param effect The effect we are binding the data to\r\n * @param prePassConfiguration Configuration for the prepass, in case prepass is activated\r\n */\r\nexport function BindBonesParameters(mesh?: AbstractMesh, effect?: Effect, prePassConfiguration?: PrePassConfiguration): void {\r\n if (!effect || !mesh) {\r\n return;\r\n }\r\n if (mesh.computeBonesUsingShaders && effect._bonesComputationForcedToCPU) {\r\n mesh.computeBonesUsingShaders = false;\r\n }\r\n\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n const skeleton = mesh.skeleton;\r\n\r\n if (skeleton.isUsingTextureForMatrices && effect.getUniformIndex(\"boneTextureWidth\") > -1) {\r\n const boneTexture = skeleton.getTransformMatrixTexture(mesh);\r\n effect.setTexture(\"boneSampler\", boneTexture);\r\n effect.setFloat(\"boneTextureWidth\", 4.0 * (skeleton.bones.length + 1));\r\n } else {\r\n const matrices = skeleton.getTransformMatrices(mesh);\r\n\r\n if (matrices) {\r\n effect.setMatrices(\"mBones\", matrices);\r\n if (prePassConfiguration && mesh.getScene().prePassRenderer && mesh.getScene().prePassRenderer!.getIndex(Constants.PREPASS_VELOCITY_TEXTURE_TYPE)) {\r\n if (!prePassConfiguration.previousBones[mesh.uniqueId]) {\r\n prePassConfiguration.previousBones[mesh.uniqueId] = matrices.slice();\r\n }\r\n effect.setMatrices(\"mPreviousBones\", prePassConfiguration.previousBones[mesh.uniqueId]);\r\n CopyBonesTransformationMatrices(matrices, prePassConfiguration.previousBones[mesh.uniqueId]);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Binds the light information to the effect.\r\n * @param light The light containing the generator\r\n * @param effect The effect we are binding the data to\r\n * @param lightIndex The light index in the effect used to render\r\n */\r\nexport function BindLightProperties(light: Light, effect: Effect, lightIndex: number): void {\r\n light.transferToEffect(effect, lightIndex + \"\");\r\n}\r\n\r\n/**\r\n * Binds the lights information from the scene to the effect for the given mesh.\r\n * @param light Light to bind\r\n * @param lightIndex Light index\r\n * @param scene The scene where the light belongs to\r\n * @param effect The effect we are binding the data to\r\n * @param useSpecular Defines if specular is supported\r\n * @param receiveShadows Defines if the effect (mesh) we bind the light for receives shadows\r\n */\r\nexport function BindLight(light: Light, lightIndex: number, scene: Scene, effect: Effect, useSpecular: boolean, receiveShadows = true): void {\r\n light._bindLight(lightIndex, scene, effect, useSpecular, receiveShadows);\r\n}\r\n\r\n/**\r\n * Binds the lights information from the scene to the effect for the given mesh.\r\n * @param scene The scene the lights belongs to\r\n * @param mesh The mesh we are binding the information to render\r\n * @param effect The effect we are binding the data to\r\n * @param defines The generated defines for the effect\r\n * @param maxSimultaneousLights The maximum number of light that can be bound to the effect\r\n */\r\nexport function BindLights(scene: Scene, mesh: AbstractMesh, effect: Effect, defines: any, maxSimultaneousLights = 4): void {\r\n const len = Math.min(mesh.lightSources.length, maxSimultaneousLights);\r\n\r\n for (let i = 0; i < len; i++) {\r\n const light = mesh.lightSources[i];\r\n BindLight(light, i, scene, effect, typeof defines === \"boolean\" ? defines : defines[\"SPECULARTERM\"], mesh.receiveShadows);\r\n }\r\n}\r\n\r\n/**\r\n * Prepares the list of attributes required for bones according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param mesh The mesh to prepare the bones attributes for\r\n * @param defines The current Defines of the effect\r\n * @param fallbacks The current effect fallback strategy\r\n */\r\nexport function PrepareAttributesForBones(attribs: string[], mesh: AbstractMesh, defines: any, fallbacks: EffectFallbacks): void {\r\n if (defines[\"NUM_BONE_INFLUENCERS\"] > 0) {\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n\r\n attribs.push(Constants.MatricesIndicesKind);\r\n attribs.push(Constants.MatricesWeightsKind);\r\n if (defines[\"NUM_BONE_INFLUENCERS\"] > 4) {\r\n attribs.push(Constants.MatricesIndicesExtraKind);\r\n attribs.push(Constants.MatricesWeightsExtraKind);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Check and prepare the list of attributes required for instances according to the effect defines.\r\n * @param attribs The current list of supported attribs\r\n * @param defines The current MaterialDefines of the effect\r\n */\r\nexport function PrepareAttributesForInstances(attribs: string[], defines: MaterialDefines): void {\r\n if (defines[\"INSTANCES\"] || defines[\"THIN_INSTANCES\"]) {\r\n PushAttributesForInstances(attribs, !!defines[\"PREPASS_VELOCITY\"]);\r\n }\r\n\r\n if (defines.INSTANCESCOLOR) {\r\n attribs.push(Constants.ColorInstanceKind);\r\n }\r\n}\r\n\r\n/**\r\n * This helps decreasing rank by rank the shadow quality (0 being the highest rank and quality)\r\n * @param defines The defines to update while falling back\r\n * @param fallbacks The authorized effect fallbacks\r\n * @param maxSimultaneousLights The maximum number of lights allowed\r\n * @param rank the current rank of the Effect\r\n * @returns The newly affected rank\r\n */\r\nexport function HandleFallbacksForShadows(defines: any, fallbacks: EffectFallbacks, maxSimultaneousLights = 4, rank = 0): number {\r\n let lightFallbackRank = 0;\r\n for (let lightIndex = 0; lightIndex < maxSimultaneousLights; lightIndex++) {\r\n if (!defines[\"LIGHT\" + lightIndex]) {\r\n break;\r\n }\r\n\r\n if (lightIndex > 0) {\r\n lightFallbackRank = rank + lightIndex;\r\n fallbacks.addFallback(lightFallbackRank, \"LIGHT\" + lightIndex);\r\n }\r\n\r\n if (!defines[\"SHADOWS\"]) {\r\n if (defines[\"SHADOW\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOW\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWPCF\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWPCF\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWPCSS\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWPCSS\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWPOISSON\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWPOISSON\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWESM\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWESM\" + lightIndex);\r\n }\r\n\r\n if (defines[\"SHADOWCLOSEESM\" + lightIndex]) {\r\n fallbacks.addFallback(rank, \"SHADOWCLOSEESM\" + lightIndex);\r\n }\r\n }\r\n }\r\n return lightFallbackRank++;\r\n}\r\n\r\n/**\r\n * Gets the current status of the fog (should it be enabled?)\r\n * @param mesh defines the mesh to evaluate for fog support\r\n * @param scene defines the hosting scene\r\n * @returns true if fog must be enabled\r\n */\r\nexport function GetFogState(mesh: AbstractMesh, scene: Scene) {\r\n return scene.fogEnabled && mesh.applyFog && scene.fogMode !== Constants.FOGMODE_NONE;\r\n}\r\n\r\n/**\r\n * Interface representing metadata for vertex pulling\r\n */\r\nexport interface IVertexPullingMetadata {\r\n /**\r\n * Offset in vertex buffer where data starts\r\n */\r\n offset: number;\r\n\r\n /**\r\n * Stride between elements in the vertex buffer\r\n */\r\n stride: number;\r\n\r\n /**\r\n * Type of the vertex buffer (e.g., float, int)\r\n */\r\n type: number; // VertexBuffer type constant\r\n}\r\n\r\n// Store vertex pulling metadata per geometry\r\nconst _VertexPullingMetadataCache = new WeakMap<Geometry, Map<string, IVertexPullingMetadata>>();\r\n\r\n/**\r\n * Prepares vertex pulling uniforms for the given attributes and mesh\r\n * @param geometry The geometry containing the vertex buffers\r\n * @returns A map of attribute names to their metadata, or null if unavailable\r\n */\r\nexport function PrepareVertexPullingUniforms(geometry: Geometry): Nullable<Map<string, IVertexPullingMetadata>> {\r\n const vertexBuffers = geometry.getVertexBuffers();\r\n if (!vertexBuffers) {\r\n return null;\r\n }\r\n\r\n // Check cache first\r\n let metadata = _VertexPullingMetadataCache.get(geometry);\r\n if (!metadata) {\r\n metadata = new Map<string, IVertexPullingMetadata>();\r\n _VertexPullingMetadataCache.set(geometry, metadata);\r\n } else {\r\n // Return cached metadata if it exists and hasn't changed\r\n let needsUpdate = false;\r\n for (const vb in vertexBuffers) {\r\n if (!metadata.has(vb)) {\r\n needsUpdate = true;\r\n break;\r\n }\r\n }\r\n if (!needsUpdate) {\r\n return metadata;\r\n }\r\n }\r\n\r\n // Build or update metadata\r\n for (const vb in vertexBuffers) {\r\n const vertexBuffer = vertexBuffers[vb];\r\n if (vertexBuffer) {\r\n const offset = vertexBuffer.byteOffset;\r\n const stride = vertexBuffer.byteStride;\r\n const type = vertexBuffer.type;\r\n\r\n metadata.set(vb, {\r\n offset: offset,\r\n stride: stride,\r\n type: type,\r\n });\r\n }\r\n }\r\n\r\n return metadata;\r\n}\r\n\r\n/**\r\n * Bind vertex pulling uniforms to the effect\r\n * @param effect The effect to bind the uniforms to\r\n * @param metadata The vertex pulling metadata\r\n */\r\nexport function BindVertexPullingUniforms(effect: Effect, metadata: Map<string, IVertexPullingMetadata>): void {\r\n metadata.forEach((data, attribute) => {\r\n const uniformName = `vp_${attribute}_info`;\r\n // Pack into vec3: (offset, stride, type)\r\n effect.setFloat3(uniformName, data.offset, data.stride, data.type);\r\n });\r\n}\r\n\r\n/**\r\n * Helper used to prepare the list of defines associated with misc. values for shader compilation\r\n * @param mesh defines the current mesh\r\n * @param scene defines the current scene\r\n * @param useLogarithmicDepth defines if logarithmic depth has to be turned on\r\n * @param pointsCloud defines if point cloud rendering has to be turned on\r\n * @param fogEnabled defines if fog has to be turned on\r\n * @param alphaTest defines if alpha testing has to be turned on\r\n * @param defines defines the current list of defines\r\n * @param applyDecalAfterDetail Defines if the decal is applied after or before the detail\r\n * @param useVertexPulling Defines if vertex pulling is used\r\n * @param renderingMesh The mesh used for rendering\r\n * @param setVertexOutputInvariant Defines if the vertex output should be invariant\r\n */\r\nexport function PrepareDefinesForMisc(\r\n mesh: AbstractMesh,\r\n scene: Scene,\r\n useLogarithmicDepth: boolean,\r\n pointsCloud: boolean,\r\n fogEnabled: boolean,\r\n alphaTest: boolean,\r\n defines: any,\r\n applyDecalAfterDetail: boolean = false,\r\n useVertexPulling: boolean = false,\r\n renderingMesh?: AbstractMesh,\r\n setVertexOutputInvariant?: boolean\r\n): void {\r\n if (defines._areMiscDirty) {\r\n defines[\"LOGARITHMICDEPTH\"] = useLogarithmicDepth;\r\n defines[\"POINTSIZE\"] = pointsCloud;\r\n defines[\"FOG\"] = fogEnabled && GetFogState(mesh, scene);\r\n defines[\"NONUNIFORMSCALING\"] = mesh.nonUniformScaling;\r\n defines[\"ALPHATEST\"] = alphaTest;\r\n defines[\"DECAL_AFTER_DETAIL\"] = applyDecalAfterDetail;\r\n defines[\"USE_VERTEX_PULLING\"] = useVertexPulling;\r\n defines[\"RIGHT_HANDED\"] = scene.useRightHandedSystem;\r\n\r\n const indexBuffer = renderingMesh?.geometry?.getIndexBuffer();\r\n\r\n defines[\"VERTEX_PULLING_USE_INDEX_BUFFER\"] = !!indexBuffer;\r\n defines[\"VERTEX_PULLING_INDEX_BUFFER_32BITS\"] = indexBuffer ? indexBuffer.is32Bits : false;\r\n\r\n defines[\"VERTEXOUTPUT_INVARIANT\"] = !!setVertexOutputInvariant;\r\n }\r\n}\r\n\r\n/**\r\n * Prepares the defines related to the light information passed in parameter\r\n * @param scene The scene we are intending to draw\r\n * @param mesh The mesh the effect is compiling for\r\n * @param defines The defines to update\r\n * @param specularSupported Specifies whether specular is supported or not (override lights data)\r\n * @param maxSimultaneousLights Specifies how manuy lights can be added to the effect at max\r\n * @param disableLighting Specifies whether the lighting is disabled (override scene and light)\r\n * @returns true if normals will be required for the rest of the effect\r\n */\r\nexport function PrepareDefinesForLights(scene: Scene, mesh: AbstractMesh, defines: any, specularSupported: boolean, maxSimultaneousLights = 4, disableLighting = false): boolean {\r\n if (!defines._areLightsDirty) {\r\n return defines._needNormals;\r\n }\r\n\r\n let lightIndex = 0;\r\n const state = {\r\n needNormals: defines._needNormals, // prevents overriding previous reflection or other needs for normals\r\n needRebuild: false,\r\n lightmapMode: false,\r\n shadowEnabled: false,\r\n specularEnabled: false,\r\n };\r\n\r\n if (scene.lightsEnabled && !disableLighting) {\r\n for (const light of mesh.lightSources) {\r\n PrepareDefinesForLight(scene, mesh, light, lightIndex, defines, specularSupported, state);\r\n\r\n lightIndex++;\r\n if (lightIndex === maxSimultaneousLights) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n defines[\"SPECULARTERM\"] = state.specularEnabled;\r\n defines[\"SHADOWS\"] = state.shadowEnabled;\r\n\r\n // Resetting all other lights if any\r\n const maxLightCount = Math.max(maxSimultaneousLights, defines[\"MAXLIGHTCOUNT\"] || 0);\r\n\r\n for (let index = lightIndex; index < maxLightCount; index++) {\r\n if (defines[\"LIGHT\" + index] !== undefined) {\r\n defines[\"LIGHT\" + index] = false;\r\n defines[\"HEMILIGHT\" + index] = false;\r\n defines[\"POINTLIGHT\" + index] = false;\r\n defines[\"DIRLIGHT\" + index] = false;\r\n defines[\"SPOTLIGHT\" + index] = false;\r\n defines[\"AREALIGHT\" + index] = false;\r\n defines[\"CLUSTLIGHT\" + index] = false;\r\n defines[\"SHADOW\" + index] = false;\r\n defines[\"SHADOWCSM\" + index] = false;\r\n defines[\"SHADOWCSMDEBUG\" + index] = false;\r\n defines[\"SHADOWCSMNUM_CASCADES\" + index] = false;\r\n defines[\"SHADOWCSMUSESHADOWMAXZ\" + index] = false;\r\n defines[\"SHADOWCSMNOBLEND\" + index] = false;\r\n defines[\"SHADOWCSM_RIGHTHANDED\" + index] = false;\r\n defines[\"SHADOWPCF\" + index] = false;\r\n defines[\"SHADOWPCSS\" + index] = false;\r\n defines[\"SHADOWPOISSON\" + index] = false;\r\n defines[\"SHADOWESM\" + index] = false;\r\n defines[\"SHADOWCLOSEESM\" + index] = false;\r\n defines[\"SHADOWCUBE\" + index] = false;\r\n defines[\"SHADOWLOWQUALITY\" + index] = false;\r\n defines[\"SHADOWMEDIUMQUALITY\" + index] = false;\r\n }\r\n }\r\n\r\n defines[\"MAXLIGHTCOUNT\"] = maxSimultaneousLights;\r\n\r\n const caps = scene.getEngine().getCaps();\r\n\r\n if (defines[\"SHADOWFLOAT\"] === undefined) {\r\n state.needRebuild = true;\r\n }\r\n\r\n defines[\"SHADOWFLOAT\"] =\r\n state.shadowEnabled && ((caps.textureFloatRender && caps.textureFloatLinearFiltering) || (caps.textureHalfFloatRender && caps.textureHalfFloatLinearFiltering));\r\n defines[\"LIGHTMAPEXCLUDED\"] = state.lightmapMode;\r\n\r\n if (state.needRebuild) {\r\n defines.rebuild();\r\n }\r\n\r\n return state.needNormals;\r\n}\r\n\r\n/**\r\n * Prepare defines relating to IBL logic.\r\n * @param scene The scene\r\n * @param reflectionTexture The texture to use for IBL\r\n * @param defines The defines to update\r\n * @param realTimeFiltering Whether realtime filting of IBL texture is being used\r\n * @param realTimeFilteringQuality The quality of realtime filtering\r\n * @param forceSHInVertex Whether the SH are handled in the vertex shader\r\n * @returns true if the defines were updated\r\n */\r\nexport function PrepareDefinesForIBL(\r\n scene: Scene,\r\n reflectionTexture: Nullable<BaseTexture>,\r\n defines: any,\r\n realTimeFiltering: boolean = false,\r\n realTimeFilteringQuality: number = Constants.TEXTURE_FILTERING_QUALITY_LOW,\r\n forceSHInVertex: boolean = false\r\n): boolean {\r\n if (reflectionTexture && MaterialFlags.ReflectionTextureEnabled) {\r\n if (!reflectionTexture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n defines._needNormals = true;\r\n defines.REFLECTION = true;\r\n defines.GAMMAREFLECTION = reflectionTexture.gammaSpace;\r\n defines.RGBDREFLECTION = reflectionTexture.isRGBD;\r\n defines.LODINREFLECTIONALPHA = reflectionTexture.lodLevelInAlpha;\r\n defines.LINEARSPECULARREFLECTION = reflectionTexture.linearSpecularLOD;\r\n defines.USEIRRADIANCEMAP = false;\r\n\r\n const engine = scene.getEngine();\r\n if (realTimeFiltering && realTimeFilteringQuality > 0) {\r\n defines.NUM_SAMPLES = \"\" + realTimeFilteringQuality;\r\n if (engine._features.needTypeSuffixInShaderConstants) {\r\n defines.NUM_SAMPLES = defines.NUM_SAMPLES + \"u\";\r\n }\r\n\r\n defines.REALTIME_FILTERING = true;\r\n if (scene.iblCdfGenerator) {\r\n defines.IBL_CDF_FILTERING = true;\r\n }\r\n } else {\r\n defines.REALTIME_FILTERING = false;\r\n }\r\n\r\n defines.INVERTCUBICMAP = reflectionTexture.coordinatesMode === Texture.INVCUBIC_MODE;\r\n defines.REFLECTIONMAP_3D = reflectionTexture.isCube;\r\n defines.REFLECTIONMAP_OPPOSITEZ = defines.REFLECTIONMAP_3D && scene.useRightHandedSystem ? !reflectionTexture.invertZ : reflectionTexture.invertZ;\r\n\r\n defines.REFLECTIONMAP_CUBIC = false;\r\n defines.REFLECTIONMAP_EXPLICIT = false;\r\n defines.REFLECTIONMAP_PLANAR = false;\r\n defines.REFLECTIONMAP_PROJECTION = false;\r\n defines.REFLECTIONMAP_SKYBOX = false;\r\n defines.REFLECTIONMAP_SPHERICAL = false;\r\n defines.REFLECTIONMAP_EQUIRECTANGULAR = false;\r\n defines.REFLECTIONMAP_EQUIRECTANGULAR_FIXED = false;\r\n defines.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = false;\r\n\r\n switch (reflectionTexture.coordinatesMode) {\r\n case Texture.EXPLICIT_MODE:\r\n defines.REFLECTIONMAP_EXPLICIT = true;\r\n break;\r\n case Texture.PLANAR_MODE:\r\n defines.REFLECTIONMAP_PLANAR = true;\r\n break;\r\n case Texture.PROJECTION_MODE:\r\n defines.REFLECTIONMAP_PROJECTION = true;\r\n break;\r\n case Texture.SKYBOX_MODE:\r\n defines.REFLECTIONMAP_SKYBOX = true;\r\n break;\r\n case Texture.SPHERICAL_MODE:\r\n defines.REFLECTIONMAP_SPHERICAL = true;\r\n break;\r\n case Texture.EQUIRECTANGULAR_MODE:\r\n defines.REFLECTIONMAP_EQUIRECTANGULAR = true;\r\n break;\r\n case Texture.FIXED_EQUIRECTANGULAR_MODE:\r\n defines.REFLECTIONMAP_EQUIRECTANGULAR_FIXED = true;\r\n break;\r\n case Texture.FIXED_EQUIRECTANGULAR_MIRRORED_MODE:\r\n defines.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = true;\r\n break;\r\n case Texture.CUBIC_MODE:\r\n case Texture.INVCUBIC_MODE:\r\n default:\r\n defines.REFLECTIONMAP_CUBIC = true;\r\n defines.USE_LOCAL_REFLECTIONMAP_CUBIC = (<any>reflectionTexture).boundingBoxSize ? true : false;\r\n break;\r\n }\r\n\r\n if (reflectionTexture.coordinatesMode !== Texture.SKYBOX_MODE) {\r\n if (reflectionTexture.irradianceTexture) {\r\n defines.USEIRRADIANCEMAP = true;\r\n defines.USESPHERICALFROMREFLECTIONMAP = false;\r\n defines.USESPHERICALINVERTEX = false;\r\n if (reflectionTexture.irradianceTexture._dominantDirection) {\r\n defines.USE_IRRADIANCE_DOMINANT_DIRECTION = true;\r\n }\r\n }\r\n // Assume using spherical polynomial if the reflection texture is a cube map\r\n else if (reflectionTexture.isCube) {\r\n defines.USESPHERICALFROMREFLECTIONMAP = true;\r\n defines.USEIRRADIANCEMAP = false;\r\n defines.USE_IRRADIANCE_DOMINANT_DIRECTION = false;\r\n defines.USESPHERICALINVERTEX = forceSHInVertex;\r\n }\r\n }\r\n } else {\r\n defines.REFLECTION = false;\r\n defines.REFLECTIONMAP_3D = false;\r\n defines.REFLECTIONMAP_SPHERICAL = false;\r\n defines.REFLECTIONMAP_PLANAR = false;\r\n defines.REFLECTIONMAP_CUBIC = false;\r\n defines.USE_LOCAL_REFLECTIONMAP_CUBIC = false;\r\n defines.REFLECTIONMAP_PROJECTION = false;\r\n defines.REFLECTIONMAP_SKYBOX = false;\r\n defines.REFLECTIONMAP_EXPLICIT = false;\r\n defines.REFLECTIONMAP_EQUIRECTANGULAR = false;\r\n defines.REFLECTIONMAP_EQUIRECTANGULAR_FIXED = false;\r\n defines.REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED = false;\r\n defines.INVERTCUBICMAP = false;\r\n defines.USESPHERICALFROMREFLECTIONMAP = false;\r\n defines.USEIRRADIANCEMAP = false;\r\n defines.USE_IRRADIANCE_DOMINANT_DIRECTION = false;\r\n defines.USESPHERICALINVERTEX = false;\r\n defines.REFLECTIONMAP_OPPOSITEZ = false;\r\n defines.LODINREFLECTIONALPHA = false;\r\n defines.GAMMAREFLECTION = false;\r\n defines.RGBDREFLECTION = false;\r\n defines.LINEARSPECULARREFLECTION = false;\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * Prepares the defines related to the light information passed in parameter\r\n * @param scene The scene we are intending to draw\r\n * @param mesh The mesh the effect is compiling for\r\n * @param light The light the effect is compiling for\r\n * @param lightIndex The index of the light\r\n * @param defines The defines to update\r\n * @param specularSupported Specifies whether specular is supported or not (override lights data)\r\n * @param state Defines the current state regarding what is needed (normals, etc...)\r\n * @param state.needNormals\r\n * @param state.needRebuild\r\n * @param state.shadowEnabled\r\n * @param state.specularEnabled\r\n * @param state.lightmapMode\r\n */\r\nexport function PrepareDefinesForLight(\r\n scene: Scene,\r\n mesh: AbstractMesh,\r\n light: Light,\r\n lightIndex: number,\r\n defines: any,\r\n specularSupported: boolean,\r\n state: {\r\n needNormals: boolean;\r\n needRebuild: boolean;\r\n shadowEnabled: boolean;\r\n specularEnabled: boolean;\r\n lightmapMode: boolean;\r\n }\r\n) {\r\n state.needNormals = true;\r\n\r\n if (defines[\"LIGHT\" + lightIndex] === undefined) {\r\n state.needRebuild = true;\r\n }\r\n\r\n defines[\"LIGHT\" + lightIndex] = true;\r\n\r\n defines[\"SPOTLIGHT\" + lightIndex] = false;\r\n defines[\"HEMILIGHT\" + lightIndex] = false;\r\n defines[\"POINTLIGHT\" + lightIndex] = false;\r\n defines[\"DIRLIGHT\" + lightIndex] = false;\r\n defines[\"AREALIGHT\" + lightIndex] = false;\r\n defines[\"CLUSTLIGHT\" + lightIndex] = false;\r\n\r\n light.prepareLightSpecificDefines(defines, lightIndex);\r\n\r\n // FallOff.\r\n defines[\"LIGHT_FALLOFF_PHYSICAL\" + lightIndex] = false;\r\n defines[\"LIGHT_FALLOFF_GLTF\" + lightIndex] = false;\r\n defines[\"LIGHT_FALLOFF_STANDARD\" + lightIndex] = false;\r\n\r\n switch (light.falloffType) {\r\n case LightConstants.FALLOFF_GLTF:\r\n defines[\"LIGHT_FALLOFF_GLTF\" + lightIndex] = true;\r\n break;\r\n case LightConstants.FALLOFF_PHYSICAL:\r\n defines[\"LIGHT_FALLOFF_PHYSICAL\" + lightIndex] = true;\r\n break;\r\n case LightConstants.FALLOFF_STANDARD:\r\n defines[\"LIGHT_FALLOFF_STANDARD\" + lightIndex] = true;\r\n break;\r\n }\r\n\r\n // Specular\r\n if (specularSupported && !light.specular.equalsFloats(0, 0, 0)) {\r\n state.specularEnabled = true;\r\n }\r\n\r\n // Shadows\r\n defines[\"SHADOW\" + lightIndex] = false;\r\n defines[\"SHADOWCSM\" + lightIndex] = false;\r\n defines[\"SHADOWCSMDEBUG\" + lightIndex] = false;\r\n defines[\"SHADOWCSMNUM_CASCADES\" + lightIndex] = false;\r\n defines[\"SHADOWCSMUSESHADOWMAXZ\" + lightIndex] = false;\r\n defines[\"SHADOWCSMNOBLEND\" + lightIndex] = false;\r\n defines[\"SHADOWCSM_RIGHTHANDED\" + lightIndex] = false;\r\n defines[\"SHADOWPCF\" + lightIndex] = false;\r\n defines[\"SHADOWPCSS\" + lightIndex] = false;\r\n defines[\"SHADOWPOISSON\" + lightIndex] = false;\r\n defines[\"SHADOWESM\" + lightIndex] = false;\r\n defines[\"SHADOWCLOSEESM\" + lightIndex] = false;\r\n defines[\"SHADOWCUBE\" + lightIndex] = false;\r\n defines[\"SHADOWLOWQUALITY\" + lightIndex] = false;\r\n defines[\"SHADOWMEDIUMQUALITY\" + lightIndex] = false;\r\n\r\n if (mesh && mesh.receiveShadows && scene.shadowsEnabled && light.shadowEnabled) {\r\n const shadowGenerator = light.getShadowGenerator(scene.activeCamera) ?? light.getShadowGenerator();\r\n if (shadowGenerator) {\r\n const shadowMap = shadowGenerator.getShadowMap();\r\n if (shadowMap) {\r\n if (shadowMap.renderList && shadowMap.renderList.length > 0) {\r\n state.shadowEnabled = true;\r\n shadowGenerator.prepareDefines(defines, lightIndex);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (light.lightmapMode != LightConstants.LIGHTMAP_DEFAULT) {\r\n state.lightmapMode = true;\r\n defines[\"LIGHTMAPEXCLUDED\" + lightIndex] = true;\r\n defines[\"LIGHTMAPNOSPECULAR\" + lightIndex] = light.lightmapMode == LightConstants.LIGHTMAP_SHADOWSONLY;\r\n } else {\r\n defines[\"LIGHTMAPEXCLUDED\" + lightIndex] = false;\r\n defines[\"LIGHTMAPNOSPECULAR\" + lightIndex] = false;\r\n }\r\n}\r\n\r\n/**\r\n * Helper used to prepare the list of defines associated with frame values for shader compilation\r\n * @param scene defines the current scene\r\n * @param engine defines the current engine\r\n * @param material defines the material we are compiling the shader for\r\n * @param defines specifies the list of active defines\r\n * @param useInstances defines if instances have to be turned on\r\n * @param useClipPlane defines if clip plane have to be turned on\r\n * @param useThinInstances defines if thin instances have to be turned on\r\n */\r\nexport function PrepareDefinesForFrameBoundValues(\r\n scene: Scene,\r\n engine: AbstractEngine,\r\n material: Material,\r\n defines: any,\r\n useInstances: boolean,\r\n useClipPlane: Nullable<boolean> = null,\r\n useThinInstances: boolean = false\r\n): void {\r\n let changed = PrepareDefinesForCamera(scene, defines);\r\n\r\n if (useClipPlane !== false) {\r\n changed = PrepareDefinesForClipPlanes(material, scene, defines);\r\n }\r\n\r\n if (defines[\"DEPTHPREPASS\"] !== !engine.getColorWrite()) {\r\n defines[\"DEPTHPREPASS\"] = !defines[\"DEPTHPREPASS\"];\r\n changed = true;\r\n }\r\n\r\n if (defines[\"INSTANCES\"] !== useInstances) {\r\n defines[\"INSTANCES\"] = useInstances;\r\n changed = true;\r\n }\r\n\r\n if (defines[\"THIN_INSTANCES\"] !== useThinInstances) {\r\n defines[\"THIN_INSTANCES\"] = useThinInstances;\r\n changed = true;\r\n }\r\n\r\n if (changed) {\r\n defines.markAsUnprocessed();\r\n }\r\n}\r\n\r\n/**\r\n * Prepares the defines for bones\r\n * @param mesh The mesh containing the geometry data we will draw\r\n * @param defines The defines to update\r\n */\r\nexport function PrepareDefinesForBones(mesh: AbstractMesh, defines: any) {\r\n if (mesh.useBones && mesh.computeBonesUsingShaders && mesh.skeleton) {\r\n defines[\"NUM_BONE_INFLUENCERS\"] = mesh.numBoneInfluencers;\r\n\r\n const materialSupportsBoneTexture = defines[\"BONETEXTURE\"] !== undefined;\r\n\r\n if (mesh.skeleton.isUsingTextureForMatrices && materialSupportsBoneTexture) {\r\n defines[\"BONETEXTURE\"] = true;\r\n } else {\r\n defines[\"BonesPerMesh\"] = mesh.skeleton.bones.length + 1;\r\n defines[\"BONETEXTURE\"] = materialSupportsBoneTexture ? false : undefined;\r\n\r\n const prePassRenderer = mesh.getScene().prePassRenderer;\r\n if (prePassRenderer && prePassRenderer.enabled) {\r\n const nonExcluded = prePassRenderer.excludedSkinnedMesh.indexOf(mesh) === -1;\r\n defines[\"BONES_VELOCITY_ENABLED\"] = nonExcluded;\r\n }\r\n }\r\n } else {\r\n defines[\"NUM_BONE_INFLUENCERS\"] = 0;\r\n defines[\"BonesPerMesh\"] = 0;\r\n if (defines[\"BONETEXTURE\"] !== undefined) {\r\n defines[\"BONETEXTURE\"] = false;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Prepares the defines for morph targets\r\n * @param mesh The mesh containing the geometry data we will draw\r\n * @param defines The defines to update\r\n */\r\nexport function PrepareDefinesForMorphTargets(mesh: AbstractMesh, defines: any) {\r\n const manager = (<Mesh>mesh).morphTargetManager;\r\n if (manager) {\r\n defines[\"MORPHTARGETS_UV\"] = manager.supportsUVs && defines[\"UV1\"];\r\n defines[\"MORPHTARGETS_UV2\"] = manager.supportsUV2s && defines[\"UV2\"];\r\n defines[\"MORPHTARGETS_TANGENT\"] = manager.supportsTangents && defines[\"TANGENT\"];\r\n defines[\"MORPHTARGETS_NORMAL\"] = manager.supportsNormals && defines[\"NORMAL\"];\r\n defines[\"MORPHTARGETS_POSITION\"] = manager.supportsPositions;\r\n defines[\"MORPHTARGETS_COLOR\"] = manager.supportsColors;\r\n\r\n defines[\"MORPHTARGETTEXTURE_HASUVS\"] = manager.hasUVs;\r\n defines[\"MORPHTARGETTEXTURE_HASUV2S\"] = manager.hasUV2s;\r\n defines[\"MORPHTARGETTEXTURE_HASTANGENTS\"] = manager.hasTangents;\r\n defines[\"MORPHTARGETTEXTURE_HASNORMALS\"] = manager.hasNormals;\r\n defines[\"MORPHTARGETTEXTURE_HASPOSITIONS\"] = manager.hasPositions;\r\n defines[\"MORPHTARGETTEXTURE_HASCOLORS\"] = manager.hasColors;\r\n\r\n defines[\"NUM_MORPH_INFLUENCERS\"] = manager.numMaxInfluencers || manager.numInfluencers;\r\n defines[\"MORPHTARGETS\"] = defines[\"NUM_MORPH_INFLUENCERS\"] > 0;\r\n\r\n defines[\"MORPHTARGETS_TEXTURE\"] = manager.isUsingTextureForTargets;\r\n } else {\r\n defines[\"MORPHTARGETS_UV\"] = false;\r\n defines[\"MORPHTARGETS_UV2\"] = false;\r\n defines[\"MORPHTARGETS_TANGENT\"] = false;\r\n defines[\"MORPHTARGETS_NORMAL\"] = false;\r\n defines[\"MORPHTARGETS_POSITION\"] = false;\r\n defines[\"MORPHTARGETS_COLOR\"] = false;\r\n\r\n defines[\"MORPHTARGETTEXTURE_HASUVS\"] = false;\r\n defines[\"MORPHTARGETTEXTURE_HASUV2S\"] = false;\r\n defines[\"MORPHTARGETTEXTURE_HASTANGENTS\"] = false;\r\n defines[\"MORPHTARGETTEXTURE_HASNORMALS\"] = false;\r\n defines[\"MORPHTARGETTEXTURE_HASPOSITIONS\"] = false;\r\n defines[\"MORPHTARGETTEXTURE_HAS_COLORS\"] = false;\r\n\r\n defines[\"MORPHTARGETS\"] = false;\r\n defines[\"NUM_MORPH_INFLUENCERS\"] = 0;\r\n }\r\n}\r\n\r\n/**\r\n * Prepares the defines for baked vertex animation\r\n * @param mesh The mesh containing the geometry data we will draw\r\n * @param defines The defines to update\r\n */\r\nexport function PrepareDefinesForBakedVertexAnimation(mesh: AbstractMesh, defines: any) {\r\n const manager = (<Mesh>mesh).bakedVertexAnimationManager;\r\n defines[\"BAKED_VERTEX_ANIMATION_TEXTURE\"] = manager && manager.isEnabled ? true : false;\r\n}\r\n\r\n/**\r\n * Prepares the defines used in the shader depending on the attributes data available in the mesh\r\n * @param mesh The mesh containing the geometry data we will draw\r\n * @param defines The defines to update\r\n * @param useVertexColor Precise whether vertex colors should be used or not (override mesh info)\r\n * @param useBones Precise whether bones should be used or not (override mesh info)\r\n * @param useMorphTargets Precise whether morph targets should be used or not (override mesh info)\r\n * @param useVertexAlpha Precise whether vertex alpha should be used or not (override mesh info)\r\n * @param useBakedVertexAnimation Precise whether baked vertex animation should be used or not (override mesh info)\r\n * @returns false if defines are considered not dirty and have not been checked\r\n */\r\nexport function PrepareDefinesForAttributes(\r\n mesh: AbstractMesh,\r\n defines: any,\r\n useVertexColor: boolean,\r\n useBones: boolean,\r\n useMorphTargets = false,\r\n useVertexAlpha = true,\r\n useBakedVertexAnimation = true\r\n): boolean {\r\n if (!defines._areAttributesDirty && defines._needNormals === defines._normals && defines._needUVs === defines._uvs) {\r\n return false;\r\n }\r\n\r\n defines._normals = defines._needNormals;\r\n defines._uvs = defines._needUVs;\r\n\r\n defines[\"NORMAL\"] = defines._needNormals && mesh.isVerticesDataPresent(Constants.NormalKind);\r\n\r\n if (defines._needNormals && mesh.isVerticesDataPresent(Constants.TangentKind)) {\r\n defines[\"TANGENT\"] = true;\r\n }\r\n\r\n for (let i = 1; i <= Constants.MAX_SUPPORTED_UV_SETS; ++i) {\r\n defines[\"UV\" + i] = defines._needUVs ? mesh.isVerticesDataPresent(`uv${i === 1 ? \"\" : i}`) : false;\r\n }\r\n\r\n if (useVertexColor) {\r\n const hasVertexColors = mesh.useVertexColors && mesh.isVerticesDataPresent(Constants.ColorKind);\r\n defines[\"VERTEXCOLOR\"] = hasVertexColors;\r\n defines[\"VERTEXALPHA\"] = mesh.hasVertexAlpha && hasVertexColors && useVertexAlpha;\r\n }\r\n\r\n if (mesh.isVerticesDataPresent(Constants.ColorInstanceKind) && (mesh.hasInstances || mesh.hasThinInstances)) {\r\n defines[\"INSTANCESCOLOR\"] = true;\r\n }\r\n\r\n if (useBones) {\r\n PrepareDefinesForBones(mesh, defines);\r\n }\r\n\r\n if (useMorphTargets) {\r\n PrepareDefinesForMorphTargets(mesh, defines);\r\n }\r\n\r\n if (useBakedVertexAnimation) {\r\n PrepareDefinesForBakedVertexAnimation(mesh, defines);\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Prepares the defines related to multiview\r\n * @param scene The scene we are intending to draw\r\n * @param defines The defines to update\r\n */\r\nexport function PrepareDefinesForMultiview(scene: Scene, defines: any) {\r\n if (scene.activeCamera) {\r\n const previousMultiview = defines.MULTIVIEW;\r\n defines.MULTIVIEW = scene.activeCamera.outputRenderTarget !== null && scene.activeCamera.outputRenderTarget.getViewCount() > 1;\r\n if (defines.MULTIVIEW != previousMultiview) {\r\n defines.markAsUnprocessed();\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Prepares the defines related to order independant transparency\r\n * @param scene The scene we are intending to draw\r\n * @param defines The defines to update\r\n * @param needAlphaBlending Determines if the material needs alpha blending\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function PrepareDefinesForOIT(scene: Scene, defines: any, needAlphaBlending: boolean) {\r\n const previousDefine = defines.ORDER_INDEPENDENT_TRANSPARENCY;\r\n const previousDefine16Bits = defines.ORDER_INDEPENDENT_TRANSPARENCY_16BITS;\r\n\r\n defines.ORDER_INDEPENDENT_TRANSPARENCY = scene.useOrderIndependentTransparency && needAlphaBlending;\r\n defines.ORDER_INDEPENDENT_TRANSPARENCY_16BITS = !scene.getEngine().getCaps().textureFloatLinearFiltering;\r\n\r\n if (previousDefine !== defines.ORDER_INDEPENDENT_TRANSPARENCY || previousDefine16Bits !== defines.ORDER_INDEPENDENT_TRANSPARENCY_16BITS) {\r\n defines.markAsUnprocessed();\r\n }\r\n}\r\n\r\n/**\r\n * Prepares the defines related to the prepass\r\n * @param scene The scene we are intending to draw\r\n * @param defines The defines to update\r\n * @param canRenderToMRT Indicates if this material renders to several textures in the prepass\r\n */\r\nexport function PrepareDefinesForPrePass(scene: Scene, defines: any, canRenderToMRT: boolean) {\r\n const previousPrePass = defines.PREPASS;\r\n\r\n if (!defines._arePrePassDirty) {\r\n return;\r\n }\r\n\r\n const texturesList = [\r\n {\r\n type: Constants.PREPASS_POSITION_TEXTURE_TYPE,\r\n define: \"PREPASS_POSITION\",\r\n index: \"PREPASS_POSITION_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_LOCAL_POSITION_TEXTURE_TYPE,\r\n define: \"PREPASS_LOCAL_POSITION\",\r\n index: \"PREPASS_LOCAL_POSITION_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_VELOCITY_TEXTURE_TYPE,\r\n define: \"PREPASS_VELOCITY\",\r\n index: \"PREPASS_VELOCITY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_VELOCITY_LINEAR_TEXTURE_TYPE,\r\n define: \"PREPASS_VELOCITY_LINEAR\",\r\n index: \"PREPASS_VELOCITY_LINEAR_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_REFLECTIVITY_TEXTURE_TYPE,\r\n define: \"PREPASS_REFLECTIVITY\",\r\n index: \"PREPASS_REFLECTIVITY_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_IRRADIANCE_TEXTURE_TYPE,\r\n define: \"PREPASS_IRRADIANCE\",\r\n index: \"PREPASS_IRRADIANCE_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_ALBEDO_SQRT_TEXTURE_TYPE,\r\n define: \"PREPASS_ALBEDO_SQRT\",\r\n index: \"PREPASS_ALBEDO_SQRT_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_DEPTH_TEXTURE_TYPE,\r\n define: \"PREPASS_DEPTH\",\r\n index: \"PREPASS_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_SCREENSPACE_DEPTH_TEXTURE_TYPE,\r\n define: \"PREPASS_SCREENSPACE_DEPTH\",\r\n index: \"PREPASS_SCREENSPACE_DEPTH_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_NORMAL_TEXTURE_TYPE,\r\n define: \"PREPASS_NORMAL\",\r\n index: \"PREPASS_NORMAL_INDEX\",\r\n },\r\n {\r\n type: Constants.PREPASS_WORLD_NORMAL_TEXTURE_TYPE,\r\n define: \"PREPASS_WORLD_NORMAL\",\r\n index: \"PREPASS_WORLD_NORMAL_INDEX\",\r\n },\r\n ];\r\n\r\n if (scene.prePassRenderer && scene.prePassRenderer.enabled && canRenderToMRT) {\r\n defines.PREPASS = true;\r\n defines.SCENE_MRT_COUNT = scene.prePassRenderer.mrtCount;\r\n defines.PREPASS_NORMAL_WORLDSPACE = scene.prePassRenderer.generateNormalsInWorldSpace;\r\n defines.PREPASS_COLOR = true;\r\n defines.PREPASS_COLOR_INDEX = 0;\r\n\r\n for (let i = 0; i < texturesList.length; i++) {\r\n const index = scene.prePassRenderer.getIndex(texturesList[i].type);\r\n if (index !== -1) {\r\n defines[texturesList[i].define] = true;\r\n defines[texturesList[i].index] = index;\r\n } else {\r\n defines[texturesList[i].define] = false;\r\n }\r\n }\r\n } else {\r\n defines.PREPASS = false;\r\n for (let i = 0; i < texturesList.length; i++) {\r\n defines[texturesList[i].define] = false;\r\n }\r\n }\r\n\r\n if (defines.PREPASS != previousPrePass) {\r\n defines.markAsUnprocessed();\r\n defines.markAsImageProcessingDirty();\r\n }\r\n}\r\n\r\n/**\r\n * Helper used to prepare the defines relative to the active camera\r\n * @param scene defines the current scene\r\n * @param defines specifies the list of active defines\r\n * @returns true if the defines have been updated, else false\r\n */\r\nexport function PrepareDefinesForCamera(scene: Scene, defines: any): boolean {\r\n let changed = false;\r\n\r\n if (scene.activeCamera) {\r\n const wasOrtho = defines[\"CAMERA_ORTHOGRAPHIC\"] ? 1 : 0;\r\n const wasPersp = defines[\"CAMERA_PERSPECTIVE\"] ? 1 : 0;\r\n const isOrtho = scene.activeCamera.mode === Constants.ORTHOGRAPHIC_CAMERA ? 1 : 0;\r\n const isPersp = scene.activeCamera.mode === Constants.PERSPECTIVE_CAMERA ? 1 : 0;\r\n\r\n if (wasOrtho ^ isOrtho || wasPersp ^ isPersp) {\r\n defines[\"CAMERA_ORTHOGRAPHIC\"] = isOrtho === 1;\r\n defines[\"CAMERA_PERSPECTIVE\"] = isPersp === 1;\r\n changed = true;\r\n }\r\n }\r\n\r\n return changed;\r\n}\r\n\r\n/**\r\n * Prepares the uniforms and samplers list to be used in the effect (for a specific light)\r\n * @param lightIndex defines the light index\r\n * @param uniformsList The uniform list\r\n * @param samplersList The sampler list\r\n * @param projectedLightTexture defines if projected texture must be used\r\n * @param uniformBuffersList defines an optional list of uniform buffers\r\n * @param updateOnlyBuffersList True to only update the uniformBuffersList array\r\n * @param iesLightTexture defines if IES texture must be used\r\n * @param clusteredLightTextures defines if the clustered light textures must be used\r\n */\r\nexport function PrepareUniformsAndSamplersForLight(\r\n lightIndex: number,\r\n uniformsList: string[],\r\n samplersList: string[],\r\n projectedLightTexture?: any,\r\n uniformBuffersList: Nullable<string[]> = null,\r\n updateOnlyBuffersList = false,\r\n iesLightTexture = false,\r\n clusteredLightTextures = false\r\n) {\r\n if (uniformBuffersList) {\r\n uniformBuffersList.push(\"Light\" + lightIndex);\r\n }\r\n\r\n if (updateOnlyBuffersList) {\r\n return;\r\n }\r\n\r\n uniformsList.push(\r\n \"vLightData\" + lightIndex,\r\n \"vLightDiffuse\" + lightIndex,\r\n \"vLightSpecular\" + lightIndex,\r\n \"vLightDirection\" + lightIndex,\r\n \"vLightWidth\" + lightIndex,\r\n \"vLightHeight\" + lightIndex,\r\n \"vLightFalloff\" + lightIndex,\r\n \"vLightGround\" + lightIndex,\r\n \"vSliceData\" + lightIndex,\r\n \"vSliceRanges\" + lightIndex,\r\n \"lightMatrix\" + lightIndex,\r\n \"shadowsInfo\" + lightIndex,\r\n \"depthValues\" + lightIndex\r\n );\r\n\r\n samplersList.push(\"shadowTexture\" + lightIndex);\r\n samplersList.push(\"depthTexture\" + lightIndex);\r\n\r\n uniformsList.push(\r\n \"viewFrustumZ\" + lightIndex,\r\n \"cascadeBlendFactor\" + lightIndex,\r\n \"lightSizeUVCorrection\" + lightIndex,\r\n \"depthCorrection\" + lightIndex,\r\n \"penumbraDarkness\" + lightIndex,\r\n \"frustumLengths\" + lightIndex\r\n );\r\n\r\n if (projectedLightTexture) {\r\n samplersList.push(\"projectionLightTexture\" + lightIndex);\r\n uniformsList.push(\"textureProjectionMatrix\" + lightIndex);\r\n }\r\n if (iesLightTexture) {\r\n samplersList.push(\"iesLightTexture\" + lightIndex);\r\n }\r\n if (clusteredLightTextures) {\r\n samplersList.push(\"lightDataTexture\" + lightIndex);\r\n samplersList.push(\"tileMaskTexture\" + lightIndex);\r\n }\r\n}\r\n\r\n/**\r\n * Append uniforms and samplers related to IBL to the provided lists\r\n * @param uniformsList The list of uniforms to append to\r\n * @param samplersList The list of samplers to append to\r\n * @param useSH Whether to include spherical harmonics uniforms\r\n */\r\nexport function PrepareUniformsAndSamplersForIBL(uniformsList: string[], samplersList: string[], useSH: boolean): void {\r\n const iblUniforms = [\r\n \"vReflectionMicrosurfaceInfos\",\r\n \"vReflectionDominantDirection\",\r\n \"reflectionMatrix\",\r\n \"vReflectionInfos\",\r\n \"vReflectionPosition\",\r\n \"vReflectionSize\",\r\n \"vReflectionColor\",\r\n \"vReflectionFilteringInfo\",\r\n ];\r\n if (useSH) {\r\n iblUniforms.push(\r\n \"vSphericalX\",\r\n \"vSphericalY\",\r\n \"vSphericalZ\",\r\n \"vSphericalXX_ZZ\",\r\n \"vSphericalYY_ZZ\",\r\n \"vSphericalZZ\",\r\n \"vSphericalXY\",\r\n \"vSphericalYZ\",\r\n \"vSphericalZX\",\r\n \"vSphericalL00\",\r\n \"vSphericalL1_1\",\r\n \"vSphericalL10\",\r\n \"vSphericalL11\",\r\n \"vSphericalL2_2\",\r\n \"vSphericalL2_1\",\r\n \"vSphericalL20\",\r\n \"vSphericalL21\",\r\n \"vSphericalL22\"\r\n );\r\n }\r\n uniformsList.push(...iblUniforms);\r\n\r\n const iblSamplers = [\"reflectionSampler\", \"reflectionSamplerLow\", \"reflectionSamplerHigh\", \"irradianceSampler\", \"icdfSampler\"];\r\n samplersList.push(...iblSamplers);\r\n}\r\n\r\n/**\r\n * Prepares the uniforms and samplers list to be used in the effect\r\n * @param uniformsListOrOptions The uniform names to prepare or an EffectCreationOptions containing the list and extra information\r\n * @param samplersList The sampler list\r\n * @param defines The defines helping in the list generation\r\n * @param maxSimultaneousLights The maximum number of simultaneous light allowed in the effect\r\n */\r\nexport function PrepareUniformsAndSamplersList(uniformsListOrOptions: string[] | IEffectCreationOptions, samplersList?: string[], defines?: any, maxSimultaneousLights = 4): void {\r\n let uniformsList: string[];\r\n let uniformBuffersList: string[] | undefined;\r\n\r\n if ((<IEffectCreationOptions>uniformsListOrOptions).uniformsNames) {\r\n const options = <IEffectCreationOptions>uniformsListOrOptions;\r\n uniformsList = options.uniformsNames;\r\n uniformBuffersList = options.uniformBuffersNames;\r\n samplersList = options.samplers;\r\n defines = options.defines;\r\n maxSimultaneousLights = options.maxSimultaneousLights || 0;\r\n } else {\r\n uniformsList = <string[]>uniformsListOrOptions;\r\n if (!samplersList) {\r\n samplersList = [];\r\n }\r\n }\r\n\r\n for (let lightIndex = 0; lightIndex < maxSimultaneousLights; lightIndex++) {\r\n if (!defines[\"LIGHT\" + lightIndex]) {\r\n break;\r\n }\r\n PrepareUniformsAndSamplersForLight(\r\n lightIndex,\r\n uniformsList,\r\n samplersList,\r\n defines[\"PROJECTEDLIGHTTEXTURE\" + lightIndex],\r\n uniformBuffersList,\r\n false,\r\n defines[\"IESLIGHTTEXTURE\" + lightIndex],\r\n defines[\"CLUSTLIGHT\" + lightIndex]\r\n );\r\n }\r\n\r\n if (defines[\"NUM_MORPH_INFLUENCERS\"]) {\r\n uniformsList.push(\"morphTargetInfluences\");\r\n uniformsList.push(\"morphTargetCount\");\r\n }\r\n\r\n if (defines[\"BAKED_VERTEX_ANIMATION_TEXTURE\"]) {\r\n uniformsList.push(\"bakedVertexAnimationSettings\");\r\n uniformsList.push(\"bakedVertexAnimationTextureSizeInverted\");\r\n uniformsList.push(\"bakedVertexAnimationTime\");\r\n samplersList.push(\"bakedVertexAnimationTexture\");\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @param ubo Add uniforms to UBO\r\n * @param supportTextureInfo Add uniforms for texture info if true\r\n * @param supportLocalProjection Add uniforms for local projection if true\r\n * @param usePBR Add uniforms for IBL if true\r\n * @param supportSH Add uniforms for spherical harmonics if true\r\n * @param useColor Add uniforms for reflection color if true\r\n */\r\nexport function PrepareUniformLayoutForIBL(\r\n ubo: UniformBuffer,\r\n supportTextureInfo: boolean = false,\r\n supportLocalProjection: boolean = false,\r\n usePBR: boolean = false,\r\n supportSH: boolean = false,\r\n useColor: boolean = false\r\n): void {\r\n ubo.addUniform(\"vReflectionInfos\", 2);\r\n ubo.addUniform(\"reflectionMatrix\", 16);\r\n if (supportTextureInfo) {\r\n ubo.addUniform(\"vReflectionMicrosurfaceInfos\", 3);\r\n }\r\n\r\n if (supportLocalProjection) {\r\n ubo.addUniform(\"vReflectionPosition\", 3);\r\n ubo.addUniform(\"vReflectionSize\", 3);\r\n }\r\n\r\n if (usePBR) {\r\n ubo.addUniform(\"vReflectionFilteringInfo\", 2);\r\n ubo.addUniform(\"vReflectionDominantDirection\", 3);\r\n }\r\n\r\n if (useColor) {\r\n ubo.addUniform(\"vReflectionColor\", 3);\r\n }\r\n\r\n if (supportSH) {\r\n ubo.addUniform(\"vSphericalL00\", 3);\r\n ubo.addUniform(\"vSphericalL1_1\", 3);\r\n ubo.addUniform(\"vSphericalL10\", 3);\r\n ubo.addUniform(\"vSphericalL11\", 3);\r\n ubo.addUniform(\"vSphericalL2_2\", 3);\r\n ubo.addUniform(\"vSphericalL2_1\", 3);\r\n ubo.addUniform(\"vSphericalL20\", 3);\r\n ubo.addUniform(\"vSphericalL21\", 3);\r\n ubo.addUniform(\"vSphericalL22\", 3);\r\n\r\n ubo.addUniform(\"vSphericalX\", 3);\r\n ubo.addUniform(\"vSphericalY\", 3);\r\n ubo.addUniform(\"vSphericalZ\", 3);\r\n ubo.addUniform(\"vSphericalXX_ZZ\", 3);\r\n ubo.addUniform(\"vSphericalYY_ZZ\", 3);\r\n ubo.addUniform(\"vSphericalZZ\", 3);\r\n ubo.addUniform(\"vSphericalXY\", 3);\r\n ubo.addUniform(\"vSphericalYZ\", 3);\r\n ubo.addUniform(\"vSphericalZX\", 3);\r\n }\r\n}\r\n"]}
|
|
@@ -191,6 +191,7 @@ export declare class StandardMaterialDefines extends StandardMaterialDefines_bas
|
|
|
191
191
|
CAMERA_PERSPECTIVE: boolean;
|
|
192
192
|
AREALIGHTSUPPORTED: boolean;
|
|
193
193
|
USE_VERTEX_PULLING: boolean;
|
|
194
|
+
RIGHT_HANDED: boolean;
|
|
194
195
|
CLUSTLIGHT_SLICES: number;
|
|
195
196
|
CLUSTLIGHT_BATCH: number;
|
|
196
197
|
/**
|
|
@@ -170,6 +170,7 @@ export class StandardMaterialDefines extends ImageProcessingDefinesMixin(Standar
|
|
|
170
170
|
this.CAMERA_PERSPECTIVE = false;
|
|
171
171
|
this.AREALIGHTSUPPORTED = true;
|
|
172
172
|
this.USE_VERTEX_PULLING = false;
|
|
173
|
+
this.RIGHT_HANDED = false;
|
|
173
174
|
this.CLUSTLIGHT_SLICES = 0;
|
|
174
175
|
this.CLUSTLIGHT_BATCH = 0;
|
|
175
176
|
/**
|