@babylonjs/materials 6.39.0 → 6.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cell/cellMaterial.js +6 -5
- package/cell/cellMaterial.js.map +1 -1
- package/custom/customMaterial.d.ts +205 -1
- package/custom/customMaterial.js +124 -2
- package/custom/customMaterial.js.map +1 -1
- package/custom/pbrCustomMaterial.d.ts +218 -1
- package/custom/pbrCustomMaterial.js +134 -2
- package/custom/pbrCustomMaterial.js.map +1 -1
- package/fire/fireMaterial.js +6 -5
- package/fire/fireMaterial.js.map +1 -1
- package/fur/furMaterial.js +7 -5
- package/fur/furMaterial.js.map +1 -1
- package/gradient/gradientMaterial.js +6 -5
- package/gradient/gradientMaterial.js.map +1 -1
- package/grid/gridMaterial.d.ts +4 -1
- package/grid/gridMaterial.js +7 -6
- package/grid/gridMaterial.js.map +1 -1
- package/lava/lavaMaterial.js +6 -5
- package/lava/lavaMaterial.js.map +1 -1
- package/mix/mixMaterial.js +6 -5
- package/mix/mixMaterial.js.map +1 -1
- package/normal/normalMaterial.js +6 -5
- package/normal/normalMaterial.js.map +1 -1
- package/package.json +2 -2
- package/shadowOnly/shadowOnlyMaterial.js +6 -5
- package/shadowOnly/shadowOnlyMaterial.js.map +1 -1
- package/simple/simpleMaterial.js +6 -5
- package/simple/simpleMaterial.js.map +1 -1
- package/sky/skyMaterial.js +5 -4
- package/sky/skyMaterial.js.map +1 -1
- package/terrain/terrainMaterial.js +6 -5
- package/terrain/terrainMaterial.js.map +1 -1
- package/triPlanar/triPlanarMaterial.js +6 -5
- package/triPlanar/triPlanarMaterial.js.map +1 -1
- package/water/waterMaterial.js +6 -5
- package/water/waterMaterial.js.map +1 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"triPlanarMaterial.js","sourceRoot":"","sources":["../../../../dev/materials/src/triPlanar/triPlanarMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"core/types\";\r\nimport { serializeAsTexture, serialize, expandToProperty, serializeAsColor3, SerializationHelper } from \"core/Misc/decorators\";\r\nimport type { Matrix } from \"core/Maths/math.vector\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\n\r\nimport type { IAnimatable } from \"core/Animations/animatable.interface\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport type { IEffectCreationOptions } from \"core/Materials/effect\";\r\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport { MaterialHelper } from \"core/Materials/materialHelper\";\r\nimport { PushMaterial } from \"core/Materials/pushMaterial\";\r\nimport { MaterialFlags } from \"core/Materials/materialFlags\";\r\nimport { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { SubMesh } from \"core/Meshes/subMesh\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport { Scene } from \"core/scene\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\n\r\nimport \"./triplanar.fragment\";\r\nimport \"./triplanar.vertex\";\r\nimport { EffectFallbacks } from \"core/Materials/effectFallbacks\";\r\nimport { addClipPlaneUniforms, bindClipPlane } from \"core/Materials/clipPlaneMaterialHelper\";\r\n\r\nclass TriPlanarMaterialDefines extends MaterialDefines {\r\n public DIFFUSEX = false;\r\n public DIFFUSEY = false;\r\n public DIFFUSEZ = false;\r\n\r\n public BUMPX = false;\r\n public BUMPY = false;\r\n public BUMPZ = false;\r\n\r\n public CLIPPLANE = false;\r\n public CLIPPLANE2 = false;\r\n public CLIPPLANE3 = false;\r\n public CLIPPLANE4 = false;\r\n public CLIPPLANE5 = false;\r\n public CLIPPLANE6 = false;\r\n public ALPHATEST = false;\r\n public DEPTHPREPASS = false;\r\n public POINTSIZE = false;\r\n public FOG = false;\r\n public SPECULARTERM = false;\r\n public NORMAL = false;\r\n public VERTEXCOLOR = false;\r\n public VERTEXALPHA = false;\r\n public NUM_BONE_INFLUENCERS = 0;\r\n public BonesPerMesh = 0;\r\n public INSTANCES = false;\r\n public INSTANCESCOLOR = false;\r\n public IMAGEPROCESSINGPOSTPROCESS = false;\r\n public SKIPFINALCOLORCLAMP = false;\r\n public NONUNIFORMSCALING = false;\r\n public LOGARITHMICDEPTH = false;\r\n\r\n constructor() {\r\n super();\r\n this.rebuild();\r\n }\r\n}\r\n\r\nexport class TriPlanarMaterial extends PushMaterial {\r\n @serializeAsTexture()\r\n public mixTexture: BaseTexture;\r\n\r\n @serializeAsTexture(\"diffuseTextureX\")\r\n private _diffuseTextureX: BaseTexture;\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public diffuseTextureX: BaseTexture;\r\n\r\n @serializeAsTexture(\"diffuseTexturY\")\r\n private _diffuseTextureY: BaseTexture;\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public diffuseTextureY: BaseTexture;\r\n\r\n @serializeAsTexture(\"diffuseTextureZ\")\r\n private _diffuseTextureZ: BaseTexture;\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public diffuseTextureZ: BaseTexture;\r\n\r\n @serializeAsTexture(\"normalTextureX\")\r\n private _normalTextureX: BaseTexture;\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public normalTextureX: BaseTexture;\r\n\r\n @serializeAsTexture(\"normalTextureY\")\r\n private _normalTextureY: BaseTexture;\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public normalTextureY: BaseTexture;\r\n\r\n @serializeAsTexture(\"normalTextureZ\")\r\n private _normalTextureZ: BaseTexture;\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public normalTextureZ: BaseTexture;\r\n\r\n @serialize()\r\n public tileSize: number = 1;\r\n\r\n @serializeAsColor3()\r\n public diffuseColor = new Color3(1, 1, 1);\r\n\r\n @serializeAsColor3()\r\n public specularColor = new Color3(0.2, 0.2, 0.2);\r\n\r\n @serialize()\r\n public specularPower = 64;\r\n\r\n @serialize(\"disableLighting\")\r\n private _disableLighting = false;\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public disableLighting: boolean;\r\n\r\n @serialize(\"maxSimultaneousLights\")\r\n private _maxSimultaneousLights = 4;\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public maxSimultaneousLights: number;\r\n\r\n constructor(name: string, scene?: Scene) {\r\n super(name, scene);\r\n }\r\n\r\n public needAlphaBlending(): boolean {\r\n return this.alpha < 1.0;\r\n }\r\n\r\n public needAlphaTesting(): boolean {\r\n return false;\r\n }\r\n\r\n public getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n // Methods\r\n public isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\r\n if (this.isFrozen) {\r\n if (subMesh.effect && subMesh.effect._wasPreviouslyReady && subMesh.effect._wasPreviouslyUsingInstances === useInstances) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n subMesh.materialDefines = new TriPlanarMaterialDefines();\r\n }\r\n\r\n const defines = <TriPlanarMaterialDefines>subMesh.materialDefines;\r\n const scene = this.getScene();\r\n\r\n if (this._isReadyForSubMesh(subMesh)) {\r\n return true;\r\n }\r\n\r\n const engine = scene.getEngine();\r\n\r\n // Textures\r\n if (defines._areTexturesDirty) {\r\n if (scene.texturesEnabled) {\r\n if (MaterialFlags.DiffuseTextureEnabled) {\r\n const textures = [this.diffuseTextureX, this.diffuseTextureY, this.diffuseTextureZ];\r\n const textureDefines = [\"DIFFUSEX\", \"DIFFUSEY\", \"DIFFUSEZ\"];\r\n\r\n for (let i = 0; i < textures.length; i++) {\r\n if (textures[i]) {\r\n if (!textures[i].isReady()) {\r\n return false;\r\n } else {\r\n (<any>defines)[textureDefines[i]] = true;\r\n }\r\n }\r\n }\r\n }\r\n if (MaterialFlags.BumpTextureEnabled) {\r\n const textures = [this.normalTextureX, this.normalTextureY, this.normalTextureZ];\r\n const textureDefines = [\"BUMPX\", \"BUMPY\", \"BUMPZ\"];\r\n\r\n for (let i = 0; i < textures.length; i++) {\r\n if (textures[i]) {\r\n if (!textures[i].isReady()) {\r\n return false;\r\n } else {\r\n (<any>defines)[textureDefines[i]] = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Misc.\r\n MaterialHelper.PrepareDefinesForMisc(mesh, scene, this._useLogarithmicDepth, this.pointsCloud, this.fogEnabled, this._shouldTurnAlphaTestOn(mesh), defines);\r\n\r\n // Lights\r\n defines._needNormals = MaterialHelper.PrepareDefinesForLights(scene, mesh, defines, false, this._maxSimultaneousLights, this._disableLighting);\r\n\r\n // Values that need to be evaluated on every frame\r\n MaterialHelper.PrepareDefinesForFrameBoundValues(scene, engine, this, defines, useInstances ? true : false);\r\n\r\n // Attribs\r\n MaterialHelper.PrepareDefinesForAttributes(mesh, defines, true, true);\r\n\r\n // Get correct effect\r\n if (defines.isDirty) {\r\n defines.markAsProcessed();\r\n scene.resetCachedMaterial();\r\n\r\n // Fallbacks\r\n const fallbacks = new EffectFallbacks();\r\n if (defines.FOG) {\r\n fallbacks.addFallback(1, \"FOG\");\r\n }\r\n\r\n MaterialHelper.HandleFallbacksForShadows(defines, fallbacks, this.maxSimultaneousLights);\r\n\r\n if (defines.NUM_BONE_INFLUENCERS > 0) {\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n }\r\n\r\n defines.IMAGEPROCESSINGPOSTPROCESS = scene.imageProcessingConfiguration.applyByPostProcess;\r\n\r\n //Attributes\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n if (defines.NORMAL) {\r\n attribs.push(VertexBuffer.NormalKind);\r\n }\r\n\r\n if (defines.VERTEXCOLOR) {\r\n attribs.push(VertexBuffer.ColorKind);\r\n }\r\n\r\n MaterialHelper.PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\r\n MaterialHelper.PrepareAttributesForInstances(attribs, defines);\r\n\r\n // Legacy browser patch\r\n const shaderName = \"triplanar\";\r\n const join = defines.toString();\r\n const uniforms = [\r\n \"world\",\r\n \"view\",\r\n \"viewProjection\",\r\n \"vEyePosition\",\r\n \"vLightsType\",\r\n \"vDiffuseColor\",\r\n \"vSpecularColor\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"pointSize\",\r\n \"mBones\",\r\n \"tileSize\",\r\n ];\r\n const samplers = [\"diffuseSamplerX\", \"diffuseSamplerY\", \"diffuseSamplerZ\", \"normalSamplerX\", \"normalSamplerY\", \"normalSamplerZ\", \"logarithmicDepthConstant\"];\r\n\r\n const uniformBuffers: string[] = [];\r\n\r\n addClipPlaneUniforms(uniforms);\r\n\r\n MaterialHelper.PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: defines,\r\n maxSimultaneousLights: this.maxSimultaneousLights,\r\n });\r\n\r\n subMesh.setEffect(\r\n scene.getEngine().createEffect(\r\n shaderName,\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: this.onCompiled,\r\n onError: this.onError,\r\n indexParameters: { maxSimultaneousLights: this.maxSimultaneousLights },\r\n },\r\n engine\r\n ),\r\n defines,\r\n this._materialContext\r\n );\r\n }\r\n if (!subMesh.effect || !subMesh.effect.isReady()) {\r\n return false;\r\n }\r\n\r\n defines._renderId = scene.getRenderId();\r\n subMesh.effect._wasPreviouslyReady = true;\r\n subMesh.effect._wasPreviouslyUsingInstances = !!useInstances;\r\n\r\n return true;\r\n }\r\n\r\n public bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const scene = this.getScene();\r\n\r\n const defines = <TriPlanarMaterialDefines>subMesh.materialDefines;\r\n if (!defines) {\r\n return;\r\n }\r\n\r\n const effect = subMesh.effect;\r\n if (!effect) {\r\n return;\r\n }\r\n this._activeEffect = effect;\r\n\r\n // Matrices\r\n this.bindOnlyWorldMatrix(world);\r\n this._activeEffect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n\r\n // Bones\r\n MaterialHelper.BindBonesParameters(mesh, this._activeEffect);\r\n\r\n this._activeEffect.setFloat(\"tileSize\", this.tileSize);\r\n\r\n if (scene.getCachedMaterial() !== this) {\r\n // Textures\r\n if (this.diffuseTextureX) {\r\n this._activeEffect.setTexture(\"diffuseSamplerX\", this.diffuseTextureX);\r\n }\r\n if (this.diffuseTextureY) {\r\n this._activeEffect.setTexture(\"diffuseSamplerY\", this.diffuseTextureY);\r\n }\r\n if (this.diffuseTextureZ) {\r\n this._activeEffect.setTexture(\"diffuseSamplerZ\", this.diffuseTextureZ);\r\n }\r\n if (this.normalTextureX) {\r\n this._activeEffect.setTexture(\"normalSamplerX\", this.normalTextureX);\r\n }\r\n if (this.normalTextureY) {\r\n this._activeEffect.setTexture(\"normalSamplerY\", this.normalTextureY);\r\n }\r\n if (this.normalTextureZ) {\r\n this._activeEffect.setTexture(\"normalSamplerZ\", this.normalTextureZ);\r\n }\r\n // Clip plane\r\n bindClipPlane(effect, this, scene);\r\n\r\n // Point size\r\n if (this.pointsCloud) {\r\n this._activeEffect.setFloat(\"pointSize\", this.pointSize);\r\n }\r\n\r\n // Log. depth\r\n if (this._useLogarithmicDepth) {\r\n MaterialHelper.BindLogDepth(defines, effect, scene);\r\n }\r\n\r\n scene.bindEyePosition(effect);\r\n }\r\n\r\n this._activeEffect.setColor4(\"vDiffuseColor\", this.diffuseColor, this.alpha * mesh.visibility);\r\n\r\n if (defines.SPECULARTERM) {\r\n this._activeEffect.setColor4(\"vSpecularColor\", this.specularColor, this.specularPower);\r\n }\r\n\r\n if (scene.lightsEnabled && !this.disableLighting) {\r\n MaterialHelper.BindLights(scene, mesh, this._activeEffect, defines, this.maxSimultaneousLights);\r\n }\r\n\r\n // View\r\n if (scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) {\r\n this._activeEffect.setMatrix(\"view\", scene.getViewMatrix());\r\n }\r\n\r\n // Fog\r\n MaterialHelper.BindFogParameters(scene, mesh, this._activeEffect);\r\n\r\n this._afterBind(mesh, this._activeEffect);\r\n }\r\n\r\n public getAnimatables(): IAnimatable[] {\r\n const results = [];\r\n\r\n if (this.mixTexture && this.mixTexture.animations && this.mixTexture.animations.length > 0) {\r\n results.push(this.mixTexture);\r\n }\r\n\r\n return results;\r\n }\r\n\r\n public getActiveTextures(): BaseTexture[] {\r\n const activeTextures = super.getActiveTextures();\r\n\r\n if (this._diffuseTextureX) {\r\n activeTextures.push(this._diffuseTextureX);\r\n }\r\n\r\n if (this._diffuseTextureY) {\r\n activeTextures.push(this._diffuseTextureY);\r\n }\r\n\r\n if (this._diffuseTextureZ) {\r\n activeTextures.push(this._diffuseTextureZ);\r\n }\r\n\r\n if (this._normalTextureX) {\r\n activeTextures.push(this._normalTextureX);\r\n }\r\n\r\n if (this._normalTextureY) {\r\n activeTextures.push(this._normalTextureY);\r\n }\r\n\r\n if (this._normalTextureZ) {\r\n activeTextures.push(this._normalTextureZ);\r\n }\r\n\r\n return activeTextures;\r\n }\r\n\r\n public hasTexture(texture: BaseTexture): boolean {\r\n if (super.hasTexture(texture)) {\r\n return true;\r\n }\r\n\r\n if (this._diffuseTextureX === texture) {\r\n return true;\r\n }\r\n\r\n if (this._diffuseTextureY === texture) {\r\n return true;\r\n }\r\n\r\n if (this._diffuseTextureZ === texture) {\r\n return true;\r\n }\r\n\r\n if (this._normalTextureX === texture) {\r\n return true;\r\n }\r\n\r\n if (this._normalTextureY === texture) {\r\n return true;\r\n }\r\n\r\n if (this._normalTextureZ === texture) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n public dispose(forceDisposeEffect?: boolean): void {\r\n if (this.mixTexture) {\r\n this.mixTexture.dispose();\r\n }\r\n\r\n super.dispose(forceDisposeEffect);\r\n }\r\n\r\n public clone(name: string): TriPlanarMaterial {\r\n return SerializationHelper.Clone(() => new TriPlanarMaterial(name, this.getScene()), this);\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.customType = \"BABYLON.TriPlanarMaterial\";\r\n return serializationObject;\r\n }\r\n\r\n public getClassName(): string {\r\n return \"TriPlanarMaterial\";\r\n }\r\n\r\n // Statics\r\n public static Parse(source: any, scene: Scene, rootUrl: string): TriPlanarMaterial {\r\n return SerializationHelper.Parse(() => new TriPlanarMaterial(source.name, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.TriPlanarMaterial\", TriPlanarMaterial);\r\n"]}
|
1
|
+
{"version":3,"file":"triPlanarMaterial.js","sourceRoot":"","sources":["../../../../dev/materials/src/triPlanar/triPlanarMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"core/types\";\r\nimport { serializeAsTexture, serialize, expandToProperty, serializeAsColor3, SerializationHelper } from \"core/Misc/decorators\";\r\nimport type { Matrix } from \"core/Maths/math.vector\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\n\r\nimport type { IAnimatable } from \"core/Animations/animatable.interface\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport type { IEffectCreationOptions } from \"core/Materials/effect\";\r\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport { MaterialHelper } from \"core/Materials/materialHelper\";\r\nimport { PushMaterial } from \"core/Materials/pushMaterial\";\r\nimport { MaterialFlags } from \"core/Materials/materialFlags\";\r\nimport { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { SubMesh } from \"core/Meshes/subMesh\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport { Scene } from \"core/scene\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\n\r\nimport \"./triplanar.fragment\";\r\nimport \"./triplanar.vertex\";\r\nimport { EffectFallbacks } from \"core/Materials/effectFallbacks\";\r\nimport { addClipPlaneUniforms, bindClipPlane } from \"core/Materials/clipPlaneMaterialHelper\";\r\n\r\nclass TriPlanarMaterialDefines extends MaterialDefines {\r\n public DIFFUSEX = false;\r\n public DIFFUSEY = false;\r\n public DIFFUSEZ = false;\r\n\r\n public BUMPX = false;\r\n public BUMPY = false;\r\n public BUMPZ = false;\r\n\r\n public CLIPPLANE = false;\r\n public CLIPPLANE2 = false;\r\n public CLIPPLANE3 = false;\r\n public CLIPPLANE4 = false;\r\n public CLIPPLANE5 = false;\r\n public CLIPPLANE6 = false;\r\n public ALPHATEST = false;\r\n public DEPTHPREPASS = false;\r\n public POINTSIZE = false;\r\n public FOG = false;\r\n public SPECULARTERM = false;\r\n public NORMAL = false;\r\n public VERTEXCOLOR = false;\r\n public VERTEXALPHA = false;\r\n public NUM_BONE_INFLUENCERS = 0;\r\n public BonesPerMesh = 0;\r\n public INSTANCES = false;\r\n public INSTANCESCOLOR = false;\r\n public IMAGEPROCESSINGPOSTPROCESS = false;\r\n public SKIPFINALCOLORCLAMP = false;\r\n public NONUNIFORMSCALING = false;\r\n public LOGARITHMICDEPTH = false;\r\n\r\n constructor() {\r\n super();\r\n this.rebuild();\r\n }\r\n}\r\n\r\nexport class TriPlanarMaterial extends PushMaterial {\r\n @serializeAsTexture()\r\n public mixTexture: BaseTexture;\r\n\r\n @serializeAsTexture(\"diffuseTextureX\")\r\n private _diffuseTextureX: BaseTexture;\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public diffuseTextureX: BaseTexture;\r\n\r\n @serializeAsTexture(\"diffuseTexturY\")\r\n private _diffuseTextureY: BaseTexture;\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public diffuseTextureY: BaseTexture;\r\n\r\n @serializeAsTexture(\"diffuseTextureZ\")\r\n private _diffuseTextureZ: BaseTexture;\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public diffuseTextureZ: BaseTexture;\r\n\r\n @serializeAsTexture(\"normalTextureX\")\r\n private _normalTextureX: BaseTexture;\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public normalTextureX: BaseTexture;\r\n\r\n @serializeAsTexture(\"normalTextureY\")\r\n private _normalTextureY: BaseTexture;\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public normalTextureY: BaseTexture;\r\n\r\n @serializeAsTexture(\"normalTextureZ\")\r\n private _normalTextureZ: BaseTexture;\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public normalTextureZ: BaseTexture;\r\n\r\n @serialize()\r\n public tileSize: number = 1;\r\n\r\n @serializeAsColor3()\r\n public diffuseColor = new Color3(1, 1, 1);\r\n\r\n @serializeAsColor3()\r\n public specularColor = new Color3(0.2, 0.2, 0.2);\r\n\r\n @serialize()\r\n public specularPower = 64;\r\n\r\n @serialize(\"disableLighting\")\r\n private _disableLighting = false;\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public disableLighting: boolean;\r\n\r\n @serialize(\"maxSimultaneousLights\")\r\n private _maxSimultaneousLights = 4;\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public maxSimultaneousLights: number;\r\n\r\n constructor(name: string, scene?: Scene) {\r\n super(name, scene);\r\n }\r\n\r\n public needAlphaBlending(): boolean {\r\n return this.alpha < 1.0;\r\n }\r\n\r\n public needAlphaTesting(): boolean {\r\n return false;\r\n }\r\n\r\n public getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n // Methods\r\n public isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\r\n const drawWrapper = subMesh._drawWrapper;\r\n\r\n if (this.isFrozen) {\r\n if (drawWrapper.effect && drawWrapper._wasPreviouslyReady && drawWrapper._wasPreviouslyUsingInstances === useInstances) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n subMesh.materialDefines = new TriPlanarMaterialDefines();\r\n }\r\n\r\n const defines = <TriPlanarMaterialDefines>subMesh.materialDefines;\r\n const scene = this.getScene();\r\n\r\n if (this._isReadyForSubMesh(subMesh)) {\r\n return true;\r\n }\r\n\r\n const engine = scene.getEngine();\r\n\r\n // Textures\r\n if (defines._areTexturesDirty) {\r\n if (scene.texturesEnabled) {\r\n if (MaterialFlags.DiffuseTextureEnabled) {\r\n const textures = [this.diffuseTextureX, this.diffuseTextureY, this.diffuseTextureZ];\r\n const textureDefines = [\"DIFFUSEX\", \"DIFFUSEY\", \"DIFFUSEZ\"];\r\n\r\n for (let i = 0; i < textures.length; i++) {\r\n if (textures[i]) {\r\n if (!textures[i].isReady()) {\r\n return false;\r\n } else {\r\n (<any>defines)[textureDefines[i]] = true;\r\n }\r\n }\r\n }\r\n }\r\n if (MaterialFlags.BumpTextureEnabled) {\r\n const textures = [this.normalTextureX, this.normalTextureY, this.normalTextureZ];\r\n const textureDefines = [\"BUMPX\", \"BUMPY\", \"BUMPZ\"];\r\n\r\n for (let i = 0; i < textures.length; i++) {\r\n if (textures[i]) {\r\n if (!textures[i].isReady()) {\r\n return false;\r\n } else {\r\n (<any>defines)[textureDefines[i]] = true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Misc.\r\n MaterialHelper.PrepareDefinesForMisc(mesh, scene, this._useLogarithmicDepth, this.pointsCloud, this.fogEnabled, this._shouldTurnAlphaTestOn(mesh), defines);\r\n\r\n // Lights\r\n defines._needNormals = MaterialHelper.PrepareDefinesForLights(scene, mesh, defines, false, this._maxSimultaneousLights, this._disableLighting);\r\n\r\n // Values that need to be evaluated on every frame\r\n MaterialHelper.PrepareDefinesForFrameBoundValues(scene, engine, this, defines, useInstances ? true : false);\r\n\r\n // Attribs\r\n MaterialHelper.PrepareDefinesForAttributes(mesh, defines, true, true);\r\n\r\n // Get correct effect\r\n if (defines.isDirty) {\r\n defines.markAsProcessed();\r\n scene.resetCachedMaterial();\r\n\r\n // Fallbacks\r\n const fallbacks = new EffectFallbacks();\r\n if (defines.FOG) {\r\n fallbacks.addFallback(1, \"FOG\");\r\n }\r\n\r\n MaterialHelper.HandleFallbacksForShadows(defines, fallbacks, this.maxSimultaneousLights);\r\n\r\n if (defines.NUM_BONE_INFLUENCERS > 0) {\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n }\r\n\r\n defines.IMAGEPROCESSINGPOSTPROCESS = scene.imageProcessingConfiguration.applyByPostProcess;\r\n\r\n //Attributes\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n if (defines.NORMAL) {\r\n attribs.push(VertexBuffer.NormalKind);\r\n }\r\n\r\n if (defines.VERTEXCOLOR) {\r\n attribs.push(VertexBuffer.ColorKind);\r\n }\r\n\r\n MaterialHelper.PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\r\n MaterialHelper.PrepareAttributesForInstances(attribs, defines);\r\n\r\n // Legacy browser patch\r\n const shaderName = \"triplanar\";\r\n const join = defines.toString();\r\n const uniforms = [\r\n \"world\",\r\n \"view\",\r\n \"viewProjection\",\r\n \"vEyePosition\",\r\n \"vLightsType\",\r\n \"vDiffuseColor\",\r\n \"vSpecularColor\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"pointSize\",\r\n \"mBones\",\r\n \"tileSize\",\r\n ];\r\n const samplers = [\"diffuseSamplerX\", \"diffuseSamplerY\", \"diffuseSamplerZ\", \"normalSamplerX\", \"normalSamplerY\", \"normalSamplerZ\", \"logarithmicDepthConstant\"];\r\n\r\n const uniformBuffers: string[] = [];\r\n\r\n addClipPlaneUniforms(uniforms);\r\n\r\n MaterialHelper.PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: defines,\r\n maxSimultaneousLights: this.maxSimultaneousLights,\r\n });\r\n\r\n subMesh.setEffect(\r\n scene.getEngine().createEffect(\r\n shaderName,\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: this.onCompiled,\r\n onError: this.onError,\r\n indexParameters: { maxSimultaneousLights: this.maxSimultaneousLights },\r\n },\r\n engine\r\n ),\r\n defines,\r\n this._materialContext\r\n );\r\n }\r\n if (!subMesh.effect || !subMesh.effect.isReady()) {\r\n return false;\r\n }\r\n\r\n defines._renderId = scene.getRenderId();\r\n drawWrapper._wasPreviouslyReady = true;\r\n drawWrapper._wasPreviouslyUsingInstances = !!useInstances;\r\n\r\n return true;\r\n }\r\n\r\n public bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const scene = this.getScene();\r\n\r\n const defines = <TriPlanarMaterialDefines>subMesh.materialDefines;\r\n if (!defines) {\r\n return;\r\n }\r\n\r\n const effect = subMesh.effect;\r\n if (!effect) {\r\n return;\r\n }\r\n this._activeEffect = effect;\r\n\r\n // Matrices\r\n this.bindOnlyWorldMatrix(world);\r\n this._activeEffect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n\r\n // Bones\r\n MaterialHelper.BindBonesParameters(mesh, this._activeEffect);\r\n\r\n this._activeEffect.setFloat(\"tileSize\", this.tileSize);\r\n\r\n if (this._mustRebind(scene, effect, subMesh)) {\r\n // Textures\r\n if (this.diffuseTextureX) {\r\n this._activeEffect.setTexture(\"diffuseSamplerX\", this.diffuseTextureX);\r\n }\r\n if (this.diffuseTextureY) {\r\n this._activeEffect.setTexture(\"diffuseSamplerY\", this.diffuseTextureY);\r\n }\r\n if (this.diffuseTextureZ) {\r\n this._activeEffect.setTexture(\"diffuseSamplerZ\", this.diffuseTextureZ);\r\n }\r\n if (this.normalTextureX) {\r\n this._activeEffect.setTexture(\"normalSamplerX\", this.normalTextureX);\r\n }\r\n if (this.normalTextureY) {\r\n this._activeEffect.setTexture(\"normalSamplerY\", this.normalTextureY);\r\n }\r\n if (this.normalTextureZ) {\r\n this._activeEffect.setTexture(\"normalSamplerZ\", this.normalTextureZ);\r\n }\r\n // Clip plane\r\n bindClipPlane(effect, this, scene);\r\n\r\n // Point size\r\n if (this.pointsCloud) {\r\n this._activeEffect.setFloat(\"pointSize\", this.pointSize);\r\n }\r\n\r\n // Log. depth\r\n if (this._useLogarithmicDepth) {\r\n MaterialHelper.BindLogDepth(defines, effect, scene);\r\n }\r\n\r\n scene.bindEyePosition(effect);\r\n }\r\n\r\n this._activeEffect.setColor4(\"vDiffuseColor\", this.diffuseColor, this.alpha * mesh.visibility);\r\n\r\n if (defines.SPECULARTERM) {\r\n this._activeEffect.setColor4(\"vSpecularColor\", this.specularColor, this.specularPower);\r\n }\r\n\r\n if (scene.lightsEnabled && !this.disableLighting) {\r\n MaterialHelper.BindLights(scene, mesh, this._activeEffect, defines, this.maxSimultaneousLights);\r\n }\r\n\r\n // View\r\n if (scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) {\r\n this._activeEffect.setMatrix(\"view\", scene.getViewMatrix());\r\n }\r\n\r\n // Fog\r\n MaterialHelper.BindFogParameters(scene, mesh, this._activeEffect);\r\n\r\n this._afterBind(mesh, this._activeEffect, subMesh);\r\n }\r\n\r\n public getAnimatables(): IAnimatable[] {\r\n const results = [];\r\n\r\n if (this.mixTexture && this.mixTexture.animations && this.mixTexture.animations.length > 0) {\r\n results.push(this.mixTexture);\r\n }\r\n\r\n return results;\r\n }\r\n\r\n public getActiveTextures(): BaseTexture[] {\r\n const activeTextures = super.getActiveTextures();\r\n\r\n if (this._diffuseTextureX) {\r\n activeTextures.push(this._diffuseTextureX);\r\n }\r\n\r\n if (this._diffuseTextureY) {\r\n activeTextures.push(this._diffuseTextureY);\r\n }\r\n\r\n if (this._diffuseTextureZ) {\r\n activeTextures.push(this._diffuseTextureZ);\r\n }\r\n\r\n if (this._normalTextureX) {\r\n activeTextures.push(this._normalTextureX);\r\n }\r\n\r\n if (this._normalTextureY) {\r\n activeTextures.push(this._normalTextureY);\r\n }\r\n\r\n if (this._normalTextureZ) {\r\n activeTextures.push(this._normalTextureZ);\r\n }\r\n\r\n return activeTextures;\r\n }\r\n\r\n public hasTexture(texture: BaseTexture): boolean {\r\n if (super.hasTexture(texture)) {\r\n return true;\r\n }\r\n\r\n if (this._diffuseTextureX === texture) {\r\n return true;\r\n }\r\n\r\n if (this._diffuseTextureY === texture) {\r\n return true;\r\n }\r\n\r\n if (this._diffuseTextureZ === texture) {\r\n return true;\r\n }\r\n\r\n if (this._normalTextureX === texture) {\r\n return true;\r\n }\r\n\r\n if (this._normalTextureY === texture) {\r\n return true;\r\n }\r\n\r\n if (this._normalTextureZ === texture) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n public dispose(forceDisposeEffect?: boolean): void {\r\n if (this.mixTexture) {\r\n this.mixTexture.dispose();\r\n }\r\n\r\n super.dispose(forceDisposeEffect);\r\n }\r\n\r\n public clone(name: string): TriPlanarMaterial {\r\n return SerializationHelper.Clone(() => new TriPlanarMaterial(name, this.getScene()), this);\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.customType = \"BABYLON.TriPlanarMaterial\";\r\n return serializationObject;\r\n }\r\n\r\n public getClassName(): string {\r\n return \"TriPlanarMaterial\";\r\n }\r\n\r\n // Statics\r\n public static Parse(source: any, scene: Scene, rootUrl: string): TriPlanarMaterial {\r\n return SerializationHelper.Parse(() => new TriPlanarMaterial(source.name, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.TriPlanarMaterial\", TriPlanarMaterial);\r\n"]}
|
package/water/waterMaterial.js
CHANGED
@@ -235,8 +235,9 @@ export class WaterMaterial extends PushMaterial {
|
|
235
235
|
return null;
|
236
236
|
}
|
237
237
|
isReadyForSubMesh(mesh, subMesh, useInstances) {
|
238
|
+
const drawWrapper = subMesh._drawWrapper;
|
238
239
|
if (this.isFrozen) {
|
239
|
-
if (
|
240
|
+
if (drawWrapper.effect && drawWrapper._wasPreviouslyReady && drawWrapper._wasPreviouslyUsingInstances === useInstances) {
|
240
241
|
return true;
|
241
242
|
}
|
242
243
|
}
|
@@ -397,8 +398,8 @@ export class WaterMaterial extends PushMaterial {
|
|
397
398
|
return false;
|
398
399
|
}
|
399
400
|
defines._renderId = scene.getRenderId();
|
400
|
-
|
401
|
-
|
401
|
+
drawWrapper._wasPreviouslyReady = true;
|
402
|
+
drawWrapper._wasPreviouslyUsingInstances = !!useInstances;
|
402
403
|
return true;
|
403
404
|
}
|
404
405
|
bindForSubMesh(world, mesh, subMesh) {
|
@@ -417,7 +418,7 @@ export class WaterMaterial extends PushMaterial {
|
|
417
418
|
this._activeEffect.setMatrix("viewProjection", scene.getTransformMatrix());
|
418
419
|
// Bones
|
419
420
|
MaterialHelper.BindBonesParameters(mesh, this._activeEffect);
|
420
|
-
if (this._mustRebind(scene, effect)) {
|
421
|
+
if (this._mustRebind(scene, effect, subMesh)) {
|
421
422
|
// Textures
|
422
423
|
if (this.bumpTexture && MaterialFlags.BumpTextureEnabled) {
|
423
424
|
this._activeEffect.setTexture("normalSampler", this.bumpTexture);
|
@@ -480,7 +481,7 @@ export class WaterMaterial extends PushMaterial {
|
|
480
481
|
if (this._imageProcessingConfiguration && !this._imageProcessingConfiguration.applyByPostProcess) {
|
481
482
|
this._imageProcessingConfiguration.bind(this._activeEffect);
|
482
483
|
}
|
483
|
-
this._afterBind(mesh, this._activeEffect);
|
484
|
+
this._afterBind(mesh, this._activeEffect, subMesh);
|
484
485
|
}
|
485
486
|
_createRenderTargets(scene, renderTargetSize) {
|
486
487
|
// Render targets
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"waterMaterial.js","sourceRoot":"","sources":["../../../../dev/materials/src/water/waterMaterial.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,2CAA6B;AACnJ,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,6CAA+B;AAClE,OAAO,EAAE,MAAM,EAAE,4CAA8B;AAC/C,OAAO,EAAE,KAAK,EAAE,4CAA8B;AAE9C,OAAO,EAAE,SAAS,EAAE,6CAA+B;AACnD,OAAO,EAAE,UAAU,EAAE,2CAA6B;AAGlD,OAAO,EAAE,mBAAmB,EAAE,kEAAoD;AAElF,OAAO,EAAE,eAAe,EAAE,qDAAuC;AAEjE,OAAO,EAAE,4BAA4B,EAAE,kEAAoD;AAC3F,OAAO,EAAE,cAAc,EAAE,oDAAsC;AAC/D,OAAO,EAAE,YAAY,EAAE,kDAAoC;AAC3D,OAAO,EAAE,aAAa,EAAE,mDAAqC;AAC7D,OAAO,EAAE,YAAY,EAAE,0CAA4B;AAKnD,OAAO,EAAE,KAAK,EAAE,iCAAmB;AACnC,OAAO,EAAE,aAAa,EAAE,0CAA4B;AAEpD,OAAO,kBAAkB,CAAC;AAC1B,OAAO,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,qDAAuC;AACjE,OAAO,EAAE,YAAY,EAAE,yDAA2C;AAClE,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,6DAA+C;AAE7F,MAAM,oBAAqB,SAAQ,eAAe;IA+C9C;QACI,KAAK,EAAE,CAAC;QA/CL,SAAI,GAAG,KAAK,CAAC;QACb,eAAU,GAAG,KAAK,CAAC;QACnB,cAAS,GAAG,KAAK,CAAC;QAClB,eAAU,GAAG,KAAK,CAAC;QACnB,eAAU,GAAG,KAAK,CAAC;QACnB,eAAU,GAAG,KAAK,CAAC;QACnB,eAAU,GAAG,KAAK,CAAC;QACnB,eAAU,GAAG,KAAK,CAAC;QACnB,cAAS,GAAG,KAAK,CAAC;QAClB,iBAAY,GAAG,KAAK,CAAC;QACrB,cAAS,GAAG,KAAK,CAAC;QAClB,QAAG,GAAG,KAAK,CAAC;QACZ,WAAM,GAAG,KAAK,CAAC;QACf,QAAG,GAAG,KAAK,CAAC;QACZ,QAAG,GAAG,KAAK,CAAC;QACZ,gBAAW,GAAG,KAAK,CAAC;QACpB,gBAAW,GAAG,KAAK,CAAC;QACpB,yBAAoB,GAAG,CAAC,CAAC;QACzB,iBAAY,GAAG,CAAC,CAAC;QACjB,cAAS,GAAG,KAAK,CAAC;QAClB,mBAAc,GAAG,KAAK,CAAC;QACvB,iBAAY,GAAG,KAAK,CAAC;QACrB,qBAAgB,GAAG,KAAK,CAAC;QACzB,4BAAuB,GAAG,KAAK,CAAC;QAChC,oBAAe,GAAG,KAAK,CAAC;QACxB,oBAAe,GAAG,KAAK,CAAC;QACxB,0BAAqB,GAAG,KAAK,CAAC;QAC9B,0BAAqB,GAAG,KAAK,CAAC;QAE9B,oBAAe,GAAG,KAAK,CAAC;QACxB,aAAQ,GAAG,KAAK,CAAC;QACjB,8BAAyB,GAAG,KAAK,CAAC;QAClC,4BAAuB,GAAG,KAAK,CAAC;QAChC,gBAAW,GAAG,KAAK,CAAC;QACpB,qBAAgB,GAAG,KAAK,CAAC;QACzB,aAAQ,GAAG,KAAK,CAAC;QACjB,aAAQ,GAAG,KAAK,CAAC;QACjB,gBAAW,GAAG,KAAK,CAAC;QACpB,iBAAY,GAAG,KAAK,CAAC;QACrB,mBAAc,GAAG,KAAK,CAAC;QACvB,wBAAmB,GAAG,KAAK,CAAC;QAC5B,oBAAe,GAAG,KAAK,CAAC;QACxB,WAAM,GAAG,KAAK,CAAC;QACf,+BAA0B,GAAG,KAAK,CAAC;QACnC,wBAAmB,GAAG,KAAK,CAAC;QAI/B,IAAI,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;CACJ;AAED,MAAM,OAAO,aAAc,SAAQ,YAAY;IAiJ3C;;OAEG;IACH,IAAW,uBAAuB;QAC9B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,YACI,IAAY,EACZ,KAAa,EACN,mBAA4B,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;QAExD,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAFZ,qBAAgB,GAAhB,gBAAgB,CAAiC;QAvJrD,iBAAY,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAGnC,kBAAa,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAGpC,kBAAa,GAAG,EAAE,CAAC;QAGlB,qBAAgB,GAAG,KAAK,CAAC;QAKzB,2BAAsB,GAAG,CAAC,CAAC;QAInC;;WAEG;QAEI,cAAS,GAAW,CAAC,CAAC;QAC7B;;WAEG;QAEI,kBAAa,GAAY,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClD;;WAEG;QAEI,eAAU,GAAW,GAAG,CAAC;QAChC;;WAEG;QAEI,eAAU,GAAW,GAAG,CAAC;QAChC;;WAEG;QAEK,qBAAgB,GAAG,KAAK,CAAC;QAIjC;;WAEG;QAEK,qBAAgB,GAAG,KAAK,CAAC;QAIjC;;WAEG;QAEK,2BAAsB,GAAG,KAAK,CAAC;QAIvC;;WAEG;QAEI,eAAU,GAAW,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACtD;;WAEG;QAEI,qBAAgB,GAAW,GAAG,CAAC;QACtC;;WAEG;QAEI,gBAAW,GAAW,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACvD;;WAEG;QAEI,sBAAiB,GAAW,GAAG,CAAC;QACvC;;WAEG;QAEI,eAAU,GAAW,GAAG,CAAC;QAEhC;;WAEG;QAEI,cAAS,GAAW,GAAG,CAAC;QAE/B;;WAEG;QAEI,cAAS,GAAW,EAAE,CAAC;QAC9B;;;WAGG;QAEI,qBAAgB,GAAY,KAAK,CAAC;QAEzC;;;;WAIG;QAEK,2CAAsC,GAAG,KAAK,CAAC;QAI7C,mBAAc,GAAG,IAAI,UAAU,CAAsB,EAAE,CAAC,CAAC;QAEnE;;WAEG;QACK,UAAK,GAA2B,IAAI,CAAC;QAKrC,yBAAoB,GAAW,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7C,cAAS,GAAW,CAAC,CAAC;QACtB,mBAAc,GAAW,CAAC,CAAC;QA2B/B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,gBAAgB,CAAC,CAAC;QAE7D,wBAAwB;QACxB,IAAI,CAAC,uBAAuB,GAAG,GAAoC,EAAE;YACjE,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAsB,IAAI,CAAC,cAAc,CAAC,CAAC;YACnE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAsB,IAAI,CAAC,cAAc,CAAC,CAAC;YAEnE,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC,CAAC;QAEF,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,4BAA4B,CAAC;QAClF,IAAI,IAAI,CAAC,6BAA6B,EAAE;YACpC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,6BAA6B,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,EAAE;gBAC3F,IAAI,CAAC,uCAAuC,EAAE,CAAC;YACnD,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAED,YAAY;IACZ,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,UAAU;IACH,eAAe,CAAC,IAAS;QAC5B,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;YACvD,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC7C;QAED,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;YACvD,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC7C;IACL,CAAC;IAEM,oBAAoB,CAAC,IAAS;QACjC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;YACvD,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;gBACZ,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;aACjD;SACJ;QAED,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;YACvD,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;gBACZ,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;aACjD;SACJ;IACL,CAAC;IAEM,mBAAmB,CAAC,MAAe;QACtC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnC,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,WAAW,CAAC;SACjD;QAED,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,WAAW,CAAC;SACjD;IACL,CAAC;IAEM,aAAa;QAChB,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,CAAC;IAED,IAAW,oBAAoB;QAC3B,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC;IAC3E,CAAC;IAEM,iBAAiB;QACpB,OAAO,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;IAC5B,CAAC;IAEM,gBAAgB;QACnB,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,mBAAmB;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,iBAAiB,CAAC,IAAkB,EAAE,OAAgB,EAAE,YAAsB;QACjF,IAAI,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,4BAA4B,KAAK,YAAY,EAAE;gBACtH,OAAO,IAAI,CAAC;aACf;SACJ;QAED,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;YAC1B,OAAO,CAAC,eAAe,GAAG,IAAI,oBAAoB,EAAE,CAAC;SACxD;QAED,MAAM,OAAO,GAAyB,OAAO,CAAC,eAAe,CAAC;QAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE9B,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE;YAClC,OAAO,IAAI,CAAC;SACf;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAEjC,WAAW;QACX,IAAI,OAAO,CAAC,iBAAiB,EAAE;YAC3B,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;YACzB,IAAI,KAAK,CAAC,eAAe,EAAE;gBACvB,IAAI,IAAI,CAAC,WAAW,IAAI,aAAa,CAAC,kBAAkB,EAAE;oBACtD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE;wBAC7B,OAAO,KAAK,CAAC;qBAChB;yBAAM;wBACH,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;wBACxB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;qBACvB;iBACJ;gBAED,IAAI,aAAa,CAAC,wBAAwB,EAAE;oBACxC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;iBAC7B;aACJ;SACJ;QAED,cAAc,CAAC,iCAAiC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAE5G,cAAc,CAAC,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QAE5J,IAAI,OAAO,CAAC,aAAa,EAAE;YACvB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAChD,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC;YAChD,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,sBAAsB,CAAC;YAC5D,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,sCAAsC,CAAC;SAC/E;QAED,SAAS;QACT,OAAO,CAAC,YAAY,GAAG,cAAc,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAE9I,mBAAmB;QACnB,IAAI,OAAO,CAAC,wBAAwB,IAAI,IAAI,CAAC,6BAA6B,EAAE;YACxE,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,OAAO,EAAE,EAAE;gBAC/C,OAAO,KAAK,CAAC;aAChB;YAED,IAAI,CAAC,6BAA6B,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAE3D,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;YACpG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;SACvG;QAED,UAAU;QACV,cAAc,CAAC,2BAA2B,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAEtE,iBAAiB;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACrD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACvE;YAED,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;SAClC;QAED,qBAAqB;QACrB,IAAI,OAAO,CAAC,OAAO,EAAE;YACjB,OAAO,CAAC,eAAe,EAAE,CAAC;YAC1B,KAAK,CAAC,mBAAmB,EAAE,CAAC;YAE5B,YAAY;YACZ,MAAM,SAAS,GAAG,IAAI,eAAe,EAAE,CAAC;YACxC,IAAI,OAAO,CAAC,GAAG,EAAE;gBACb,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;aACnC;YAED,IAAI,OAAO,CAAC,gBAAgB,EAAE;gBAC1B,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;aAChD;YAED,cAAc,CAAC,yBAAyB,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAEzF,IAAI,OAAO,CAAC,oBAAoB,GAAG,CAAC,EAAE;gBAClC,SAAS,CAAC,sBAAsB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;aAC7C;YAED,YAAY;YACZ,MAAM,OAAO,GAAG,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE5C,IAAI,OAAO,CAAC,MAAM,EAAE;gBAChB,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;aACzC;YAED,IAAI,OAAO,CAAC,GAAG,EAAE;gBACb,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;aACrC;YAED,IAAI,OAAO,CAAC,GAAG,EAAE;gBACb,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;aACtC;YAED,IAAI,OAAO,CAAC,WAAW,EAAE;gBACrB,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;aACxC;YAED,cAAc,CAAC,yBAAyB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;YAC5E,cAAc,CAAC,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAE/D,uBAAuB;YACvB,MAAM,UAAU,GAAG,OAAO,CAAC;YAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG;gBACb,OAAO;gBACP,MAAM;gBACN,gBAAgB;gBAChB,cAAc;gBACd,aAAa;gBACb,eAAe;gBACf,gBAAgB;gBAChB,WAAW;gBACX,WAAW;gBACX,WAAW;gBACX,cAAc;gBACd,QAAQ;gBACR,cAAc;gBACd,0BAA0B;gBAE1B,QAAQ;gBACR,0BAA0B;gBAC1B,eAAe;gBACf,YAAY;gBACZ,MAAM;gBACN,WAAW;gBACX,gBAAgB;gBAChB,YAAY;gBACZ,YAAY;gBACZ,YAAY;gBACZ,aAAa;gBACb,kBAAkB;gBAClB,mBAAmB;gBACnB,WAAW;gBACX,WAAW;aACd,CAAC;YACF,MAAM,QAAQ,GAAG;gBACb,eAAe;gBACf,QAAQ;gBACR,mBAAmB;gBACnB,mBAAmB;aACtB,CAAC;YACF,MAAM,cAAc,GAAa,EAAE,CAAC;YAEpC,IAAI,4BAA4B,EAAE;gBAC9B,4BAA4B,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAChE,4BAA4B,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;aACnE;YAED,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAE/B,cAAc,CAAC,8BAA8B,CAAyB;gBAClE,aAAa,EAAE,QAAQ;gBACvB,mBAAmB,EAAE,cAAc;gBACnC,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,OAAO;gBAChB,qBAAqB,EAAE,IAAI,CAAC,qBAAqB;aACpD,CAAC,CAAC;YACH,OAAO,CAAC,SAAS,CACb,KAAK,CAAC,SAAS,EAAE,CAAC,YAAY,CAC1B,UAAU,EACc;gBACpB,UAAU,EAAE,OAAO;gBACnB,aAAa,EAAE,QAAQ;gBACvB,mBAAmB,EAAE,cAAc;gBACnC,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,SAAS;gBACpB,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,eAAe,EAAE,EAAE,qBAAqB,EAAE,IAAI,CAAC,sBAAsB,EAAE;aAC1E,EACD,MAAM,CACT,EACD,OAAO,EACP,IAAI,CAAC,gBAAgB,CACxB,CAAC;SACL;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE;YAC9C,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACxC,OAAO,CAAC,MAAM,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAC1C,OAAO,CAAC,MAAM,CAAC,4BAA4B,GAAG,CAAC,CAAC,YAAY,CAAC;QAE7D,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,cAAc,CAAC,KAAa,EAAE,IAAU,EAAE,OAAgB;QAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAE9B,MAAM,OAAO,GAAyB,OAAO,CAAC,eAAe,CAAC;QAC9D,IAAI,CAAC,OAAO,EAAE;YACV,OAAO;SACV;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACxB,OAAO;SACV;QACD,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAE5B,WAAW;QACX,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,gBAAgB,EAAE,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAE3E,QAAQ;QACR,cAAc,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAE7D,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;YACjC,WAAW;YACX,IAAI,IAAI,CAAC,WAAW,IAAI,aAAa,CAAC,kBAAkB,EAAE;gBACtD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBAEjE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACxG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAAC;aACrF;YACD,aAAa;YACb,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAEnC,aAAa;YACb,IAAI,IAAI,CAAC,WAAW,EAAE;gBAClB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;aAC5D;YAED,aAAa;YACb,IAAI,IAAI,CAAC,oBAAoB,EAAE;gBAC3B,cAAc,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;aACvD;YAED,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;SACjC;QAED,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QAE/F,IAAI,OAAO,CAAC,YAAY,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;SAC1F;QAED,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YAC9C,cAAc,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;SACnG;QAED,OAAO;QACP,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,YAAY,EAAE;YAC3E,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;SAC/D;QAED,MAAM;QACN,cAAc,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAElE,aAAa;QACb,cAAc,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QAEhE,QAAQ;QACR,IAAI,aAAa,CAAC,wBAAwB,EAAE;YACxC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,mBAAmB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACxE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,mBAAmB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;SAC3E;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAE7E,kEAAkE;QAClE,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,YAAY,EAAE,CAAC;QACnD,IAAI,SAAS,KAAK,IAAI,CAAC,cAAc,EAAE;YACnC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YAChC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC;SACzC;QAED,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACnE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3D,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3D,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3D,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACjE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,kBAAkB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACvE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACnE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACzE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEzD,mBAAmB;QACnB,IAAI,IAAI,CAAC,6BAA6B,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,kBAAkB,EAAE;YAC9F,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAC/D;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9C,CAAC;IAEO,oBAAoB,CAAC,KAAY,EAAE,gBAAyB;QAChE,iBAAiB;QACjB,IAAI,CAAC,cAAc,GAAG,IAAI,mBAAmB,CAAC,IAAI,GAAG,aAAa,EAAE,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACnJ,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,SAAS,CAAC,0BAA0B,CAAC;QACjE,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,SAAS,CAAC,0BAA0B,CAAC;QACjE,IAAI,CAAC,cAAc,CAAC,oBAAoB,GAAG,IAAI,CAAC;QAEhD,IAAI,CAAC,cAAc,GAAG,IAAI,mBAAmB,CAAC,IAAI,GAAG,aAAa,EAAE,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACnJ,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,SAAS,CAAC,0BAA0B,CAAC;QACjE,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,SAAS,CAAC,0BAA0B,CAAC;QACjE,IAAI,CAAC,cAAc,CAAC,oBAAoB,GAAG,IAAI,CAAC;QAEhD,IAAI,SAAkB,CAAC;QACvB,IAAI,SAAS,GAAoB,IAAI,CAAC;QACtC,IAAI,eAAuB,CAAC;QAC5B,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,CAAC,cAAc,CAAC,cAAc,GAAG,GAAG,EAAE;YACtC,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;aAChC;YAED,aAAa;YACb,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACxB,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;gBAE5B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACnE,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aAC5G;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,aAAa,GAAG,GAAG,EAAE;YACrC,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;aACpC;YAED,aAAa;YACb,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACxB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;aAC/B;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,cAAc,GAAG,GAAG,EAAE;YACtC,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;aAChC;YAED,aAAa;YACb,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACxB,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;gBAE5B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACnE,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,qBAAqB,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAE1G,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;aACzD;YAED,YAAY;YACZ,eAAe,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;YAExC,YAAY,CAAC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACvE,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC;YACjF,KAAK,CAAC,uBAAuB,GAAG,OAAO,CAAC,oBAAoB,CAAU,KAAK,CAAC,YAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACtH,CAAC,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,aAAa,GAAG,GAAG,EAAE;YACrC,IAAI,IAAI,CAAC,KAAK,EAAE;gBACZ,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;aACpC;YAED,aAAa;YACb,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;YAE5B,YAAY;YACZ,KAAK,CAAC,kBAAkB,CAAC,eAAe,EAAE,KAAK,CAAC,mBAAmB,EAAE,CAAC,CAAC;YACvE,KAAK,CAAC,uBAAuB,GAAG,IAAI,CAAC;QACzC,CAAC,CAAC;IACN,CAAC;IAEM,cAAc;QACjB,MAAM,OAAO,GAAG,EAAE,CAAC;QAEnB,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3F,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAClC;QACD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACpG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SACrC;QACD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACpG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SACrC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,iBAAiB;QACpB,MAAM,cAAc,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAEjD,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SAC1C;QAED,OAAO,cAAc,CAAC;IAC1B,CAAC;IAEM,UAAU,CAAC,OAAoB;QAClC,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;YAC3B,OAAO,IAAI,CAAC;SACf;QAED,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,EAAE;YAC/B,OAAO,IAAI,CAAC;SACf;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,OAAO,CAAC,kBAA4B;QACvC,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;SAC9B;QAED,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAsB,IAAI,CAAC,cAAc,CAAC,CAAC;QAClG,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE;YACb,IAAI,CAAC,QAAQ,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SACxD;QACD,KAAK,GAAG,CAAC,CAAC,CAAC;QACX,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,mBAAmB,CAAC,OAAO,CAAsB,IAAI,CAAC,cAAc,CAAC,CAAC;QAC9F,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE;YACb,IAAI,CAAC,QAAQ,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SACxD;QAED,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;SACjC;QACD,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;SACjC;QAED,mCAAmC;QACnC,IAAI,IAAI,CAAC,6BAA6B,IAAI,IAAI,CAAC,wBAAwB,EAAE;YACrE,IAAI,CAAC,6BAA6B,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;SAC/F;QAED,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACtC,CAAC;IAEM,KAAK,CAAC,IAAY;QACrB,OAAO,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3F,CAAC;IAEM,SAAS;QACZ,MAAM,mBAAmB,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAC9C,mBAAmB,CAAC,UAAU,GAAG,uBAAuB,CAAC;QAEzD,mBAAmB,CAAC,UAAU,GAAG,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;YACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5D,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aAC7E;SACJ;QAED,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAEM,YAAY;QACf,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED,UAAU;IACH,MAAM,CAAC,KAAK,CAAC,MAAW,EAAE,KAAY,EAAE,OAAe;QAC1D,MAAM,GAAG,GAAG,mBAAmB,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3G,GAAG,CAAC,kBAAkB,GAAG,MAAM,CAAC,UAAU,CAAC;QAE3C,OAAO,GAAG,CAAC;IACf,CAAC;IAEM,MAAM,CAAC,iBAAiB,CAAC,IAAY,EAAE,KAAY;QACtD,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;QACxG,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAvuBW;IADP,kBAAkB,CAAC,aAAa,CAAC;mDACA;AAE3B;IADN,gBAAgB,CAAC,kCAAkC,CAAC;kDACrB;AAGzB;IADN,iBAAiB,EAAE;mDACsB;AAGnC;IADN,iBAAiB,EAAE;oDACuB;AAGpC;IADN,SAAS,EAAE;oDACc;AAGlB;IADP,SAAS,CAAC,iBAAiB,CAAC;uDACI;AAE1B;IADN,gBAAgB,CAAC,gCAAgC,CAAC;sDACnB;AAGxB;IADP,SAAS,CAAC,uBAAuB,CAAC;6DACA;AAE5B;IADN,gBAAgB,CAAC,gCAAgC,CAAC;4DACd;AAM9B;IADN,SAAS,EAAE;gDACiB;AAKtB;IADN,kBAAkB,EAAE;oDAC6B;AAK3C;IADN,SAAS,EAAE;iDACoB;AAKzB;IADN,SAAS,EAAE;iDACoB;AAKxB;IADP,SAAS,CAAC,iBAAiB,CAAC;uDACI;AAE1B;IADN,gBAAgB,CAAC,8BAA8B,CAAC;sDACjB;AAMxB;IADP,SAAS,CAAC,iBAAiB,CAAC;uDACI;AAE1B;IADN,gBAAgB,CAAC,8BAA8B,CAAC;sDACjB;AAMxB;IADP,SAAS,CAAC,uBAAuB,CAAC;6DACI;AAEhC;IADN,gBAAgB,CAAC,8BAA8B,CAAC;4DACX;AAM/B;IADN,iBAAiB,EAAE;iDACkC;AAK/C;IADN,SAAS,EAAE;uDAC0B;AAK/B;IADN,iBAAiB,EAAE;kDACmC;AAKhD;IADN,SAAS,EAAE;wDAC2B;AAKhC;IADN,SAAS,EAAE;iDACoB;AAMzB;IADN,SAAS,EAAE;gDACmB;AAMxB;IADN,SAAS,EAAE;gDACkB;AAMvB;IADN,SAAS,EAAE;uDAC6B;AAQjC;IADP,SAAS,CAAC,uCAAuC,CAAC;6EACI;AAEhD;IADN,gBAAgB,CAAC,8BAA8B,CAAC;4EACK;AAknB1D,aAAa,CAAC,uBAAuB,EAAE,aAAa,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"core/types\";\r\nimport { serializeAsVector2, serializeAsTexture, serialize, expandToProperty, serializeAsColor3, SerializationHelper } from \"core/Misc/decorators\";\r\nimport { Matrix, Vector2, Vector3 } from \"core/Maths/math.vector\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { Plane } from \"core/Maths/math.plane\";\r\nimport type { IAnimatable } from \"core/Animations/animatable.interface\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { SmartArray } from \"core/Misc/smartArray\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { RenderTargetTexture } from \"core/Materials/Textures/renderTargetTexture\";\r\nimport type { IEffectCreationOptions } from \"core/Materials/effect\";\r\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport type { IImageProcessingConfigurationDefines } from \"core/Materials/imageProcessingConfiguration\";\r\nimport { ImageProcessingConfiguration } from \"core/Materials/imageProcessingConfiguration\";\r\nimport { MaterialHelper } from \"core/Materials/materialHelper\";\r\nimport { PushMaterial } from \"core/Materials/pushMaterial\";\r\nimport { MaterialFlags } from \"core/Materials/materialFlags\";\r\nimport { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { SubMesh } from \"core/Meshes/subMesh\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport type { Camera } from \"core/Cameras/camera\";\r\nimport { Scene } from \"core/scene\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\n\r\nimport \"./water.fragment\";\r\nimport \"./water.vertex\";\r\nimport { EffectFallbacks } from \"core/Materials/effectFallbacks\";\r\nimport { CreateGround } from \"core/Meshes/Builders/groundBuilder\";\r\nimport { addClipPlaneUniforms, bindClipPlane } from \"core/Materials/clipPlaneMaterialHelper\";\r\n\r\nclass WaterMaterialDefines extends MaterialDefines implements IImageProcessingConfigurationDefines {\r\n public BUMP = false;\r\n public REFLECTION = false;\r\n public CLIPPLANE = false;\r\n public CLIPPLANE2 = false;\r\n public CLIPPLANE3 = false;\r\n public CLIPPLANE4 = false;\r\n public CLIPPLANE5 = false;\r\n public CLIPPLANE6 = false;\r\n public ALPHATEST = false;\r\n public DEPTHPREPASS = false;\r\n public POINTSIZE = false;\r\n public FOG = false;\r\n public NORMAL = false;\r\n public UV1 = false;\r\n public UV2 = false;\r\n public VERTEXCOLOR = false;\r\n public VERTEXALPHA = false;\r\n public NUM_BONE_INFLUENCERS = 0;\r\n public BonesPerMesh = 0;\r\n public INSTANCES = false;\r\n public INSTANCESCOLOR = false;\r\n public SPECULARTERM = false;\r\n public LOGARITHMICDEPTH = false;\r\n public USE_REVERSE_DEPTHBUFFER = false;\r\n public FRESNELSEPARATE = false;\r\n public BUMPSUPERIMPOSE = false;\r\n public BUMPAFFECTSREFLECTION = false;\r\n public USE_WORLD_COORDINATES = false;\r\n\r\n public IMAGEPROCESSING = false;\r\n public VIGNETTE = false;\r\n public VIGNETTEBLENDMODEMULTIPLY = false;\r\n public VIGNETTEBLENDMODEOPAQUE = false;\r\n public TONEMAPPING = false;\r\n public TONEMAPPING_ACES = false;\r\n public CONTRAST = false;\r\n public EXPOSURE = false;\r\n public COLORCURVES = false;\r\n public COLORGRADING = false;\r\n public COLORGRADING3D = false;\r\n public SAMPLER3DGREENDEPTH = false;\r\n public SAMPLER3DBGRMAP = false;\r\n public DITHER = false;\r\n public IMAGEPROCESSINGPOSTPROCESS = false;\r\n public SKIPFINALCOLORCLAMP = false;\r\n\r\n constructor() {\r\n super();\r\n this.rebuild();\r\n }\r\n}\r\n\r\nexport class WaterMaterial extends PushMaterial {\r\n /*\r\n * Public members\r\n */\r\n @serializeAsTexture(\"bumpTexture\")\r\n private _bumpTexture: BaseTexture;\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public bumpTexture: BaseTexture;\r\n\r\n @serializeAsColor3()\r\n public diffuseColor = new Color3(1, 1, 1);\r\n\r\n @serializeAsColor3()\r\n public specularColor = new Color3(0, 0, 0);\r\n\r\n @serialize()\r\n public specularPower = 64;\r\n\r\n @serialize(\"disableLighting\")\r\n private _disableLighting = false;\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public disableLighting: boolean;\r\n\r\n @serialize(\"maxSimultaneousLights\")\r\n private _maxSimultaneousLights = 4;\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public maxSimultaneousLights: number;\r\n\r\n /**\r\n * Defines the wind force.\r\n */\r\n @serialize()\r\n public windForce: number = 6;\r\n /**\r\n * Defines the direction of the wind in the plane (X, Z).\r\n */\r\n @serializeAsVector2()\r\n public windDirection: Vector2 = new Vector2(0, 1);\r\n /**\r\n * Defines the height of the waves.\r\n */\r\n @serialize()\r\n public waveHeight: number = 0.4;\r\n /**\r\n * Defines the bump height related to the bump map.\r\n */\r\n @serialize()\r\n public bumpHeight: number = 0.4;\r\n /**\r\n * Defines wether or not: to add a smaller moving bump to less steady waves.\r\n */\r\n @serialize(\"bumpSuperimpose\")\r\n private _bumpSuperimpose = false;\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public bumpSuperimpose: boolean;\r\n\r\n /**\r\n * Defines wether or not color refraction and reflection differently with .waterColor2 and .colorBlendFactor2. Non-linear (physically correct) fresnel.\r\n */\r\n @serialize(\"fresnelSeparate\")\r\n private _fresnelSeparate = false;\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public fresnelSeparate: boolean;\r\n\r\n /**\r\n * Defines wether or not bump Wwves modify the reflection.\r\n */\r\n @serialize(\"bumpAffectsReflection\")\r\n private _bumpAffectsReflection = false;\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public bumpAffectsReflection: boolean;\r\n\r\n /**\r\n * Defines the water color blended with the refraction (near).\r\n */\r\n @serializeAsColor3()\r\n public waterColor: Color3 = new Color3(0.1, 0.1, 0.6);\r\n /**\r\n * Defines the blend factor related to the water color.\r\n */\r\n @serialize()\r\n public colorBlendFactor: number = 0.2;\r\n /**\r\n * Defines the water color blended with the reflection (far).\r\n */\r\n @serializeAsColor3()\r\n public waterColor2: Color3 = new Color3(0.1, 0.1, 0.6);\r\n /**\r\n * Defines the blend factor related to the water color (reflection, far).\r\n */\r\n @serialize()\r\n public colorBlendFactor2: number = 0.2;\r\n /**\r\n * Defines the maximum length of a wave.\r\n */\r\n @serialize()\r\n public waveLength: number = 0.1;\r\n\r\n /**\r\n * Defines the waves speed.\r\n */\r\n @serialize()\r\n public waveSpeed: number = 1.0;\r\n\r\n /**\r\n * Defines the number of times waves are repeated. This is typically used to adjust waves count according to the ground's size where the material is applied on.\r\n */\r\n @serialize()\r\n public waveCount: number = 20;\r\n /**\r\n * Sets or gets whether or not automatic clipping should be enabled or not. Setting to true will save performances and\r\n * will avoid calculating useless pixels in the pixel shader of the water material.\r\n */\r\n @serialize()\r\n public disableClipPlane: boolean = false;\r\n\r\n /**\r\n * Defines whether or not to use world coordinates for wave deformations.\r\n * The default value is false, meaning that the deformation is applied in object (local) space.\r\n * You will probably need to set it to true if you are using instances or thin instances for your water objects.\r\n */\r\n @serialize(\"useWorldCoordinatesForWaveDeformation\")\r\n private _useWorldCoordinatesForWaveDeformation = false;\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public useWorldCoordinatesForWaveDeformation: boolean;\r\n\r\n protected _renderTargets = new SmartArray<RenderTargetTexture>(16);\r\n\r\n /*\r\n * Private members\r\n */\r\n private _mesh: Nullable<AbstractMesh> = null;\r\n\r\n private _refractionRTT: Nullable<RenderTargetTexture>;\r\n private _reflectionRTT: Nullable<RenderTargetTexture>;\r\n\r\n private _reflectionTransform: Matrix = Matrix.Zero();\r\n private _lastTime: number = 0;\r\n private _lastDeltaTime: number = 0;\r\n\r\n private _waitingRenderList: Nullable<string[]>;\r\n\r\n private _imageProcessingConfiguration: Nullable<ImageProcessingConfiguration>;\r\n private _imageProcessingObserver: Nullable<Observer<ImageProcessingConfiguration>>;\r\n\r\n /**\r\n * Gets a boolean indicating that current material needs to register RTT\r\n */\r\n public get hasRenderTargetTextures(): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Constructor\r\n * @param name\r\n * @param scene\r\n * @param renderTargetSize\r\n */\r\n constructor(\r\n name: string,\r\n scene?: Scene,\r\n public renderTargetSize: Vector2 = new Vector2(512, 512)\r\n ) {\r\n super(name, scene);\r\n\r\n this._createRenderTargets(this.getScene(), renderTargetSize);\r\n\r\n // Create render targets\r\n this.getRenderTargetTextures = (): SmartArray<RenderTargetTexture> => {\r\n this._renderTargets.reset();\r\n this._renderTargets.push(<RenderTargetTexture>this._reflectionRTT);\r\n this._renderTargets.push(<RenderTargetTexture>this._refractionRTT);\r\n\r\n return this._renderTargets;\r\n };\r\n\r\n this._imageProcessingConfiguration = this.getScene().imageProcessingConfiguration;\r\n if (this._imageProcessingConfiguration) {\r\n this._imageProcessingObserver = this._imageProcessingConfiguration.onUpdateParameters.add(() => {\r\n this._markAllSubMeshesAsImageProcessingDirty();\r\n });\r\n }\r\n }\r\n\r\n // Get / Set\r\n public get refractionTexture(): Nullable<RenderTargetTexture> {\r\n return this._refractionRTT;\r\n }\r\n\r\n public get reflectionTexture(): Nullable<RenderTargetTexture> {\r\n return this._reflectionRTT;\r\n }\r\n\r\n // Methods\r\n public addToRenderList(node: any): void {\r\n if (this._refractionRTT && this._refractionRTT.renderList) {\r\n this._refractionRTT.renderList.push(node);\r\n }\r\n\r\n if (this._reflectionRTT && this._reflectionRTT.renderList) {\r\n this._reflectionRTT.renderList.push(node);\r\n }\r\n }\r\n\r\n public removeFromRenderList(node: any): void {\r\n if (this._refractionRTT && this._refractionRTT.renderList) {\r\n const idx = this._refractionRTT.renderList.indexOf(node);\r\n if (idx !== -1) {\r\n this._refractionRTT.renderList.splice(idx, 1);\r\n }\r\n }\r\n\r\n if (this._reflectionRTT && this._reflectionRTT.renderList) {\r\n const idx = this._reflectionRTT.renderList.indexOf(node);\r\n if (idx !== -1) {\r\n this._reflectionRTT.renderList.splice(idx, 1);\r\n }\r\n }\r\n }\r\n\r\n public enableRenderTargets(enable: boolean): void {\r\n const refreshRate = enable ? 1 : 0;\r\n\r\n if (this._refractionRTT) {\r\n this._refractionRTT.refreshRate = refreshRate;\r\n }\r\n\r\n if (this._reflectionRTT) {\r\n this._reflectionRTT.refreshRate = refreshRate;\r\n }\r\n }\r\n\r\n public getRenderList(): Nullable<AbstractMesh[]> {\r\n return this._refractionRTT ? this._refractionRTT.renderList : [];\r\n }\r\n\r\n public get renderTargetsEnabled(): boolean {\r\n return !(this._refractionRTT && this._refractionRTT.refreshRate === 0);\r\n }\r\n\r\n public needAlphaBlending(): boolean {\r\n return this.alpha < 1.0;\r\n }\r\n\r\n public needAlphaTesting(): boolean {\r\n return false;\r\n }\r\n\r\n public getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n public isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\r\n if (this.isFrozen) {\r\n if (subMesh.effect && subMesh.effect._wasPreviouslyReady && subMesh.effect._wasPreviouslyUsingInstances === useInstances) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n subMesh.materialDefines = new WaterMaterialDefines();\r\n }\r\n\r\n const defines = <WaterMaterialDefines>subMesh.materialDefines;\r\n const scene = this.getScene();\r\n\r\n if (this._isReadyForSubMesh(subMesh)) {\r\n return true;\r\n }\r\n\r\n const engine = scene.getEngine();\r\n\r\n // Textures\r\n if (defines._areTexturesDirty) {\r\n defines._needUVs = false;\r\n if (scene.texturesEnabled) {\r\n if (this.bumpTexture && MaterialFlags.BumpTextureEnabled) {\r\n if (!this.bumpTexture.isReady()) {\r\n return false;\r\n } else {\r\n defines._needUVs = true;\r\n defines.BUMP = true;\r\n }\r\n }\r\n\r\n if (MaterialFlags.ReflectionTextureEnabled) {\r\n defines.REFLECTION = true;\r\n }\r\n }\r\n }\r\n\r\n MaterialHelper.PrepareDefinesForFrameBoundValues(scene, engine, this, defines, useInstances ? true : false);\r\n\r\n MaterialHelper.PrepareDefinesForMisc(mesh, scene, this._useLogarithmicDepth, this.pointsCloud, this.fogEnabled, this._shouldTurnAlphaTestOn(mesh), defines);\r\n\r\n if (defines._areMiscDirty) {\r\n defines.FRESNELSEPARATE = this._fresnelSeparate;\r\n defines.BUMPSUPERIMPOSE = this._bumpSuperimpose;\r\n defines.BUMPAFFECTSREFLECTION = this._bumpAffectsReflection;\r\n defines.USE_WORLD_COORDINATES = this._useWorldCoordinatesForWaveDeformation;\r\n }\r\n\r\n // Lights\r\n defines._needNormals = MaterialHelper.PrepareDefinesForLights(scene, mesh, defines, true, this._maxSimultaneousLights, this._disableLighting);\r\n\r\n // Image processing\r\n if (defines._areImageProcessingDirty && this._imageProcessingConfiguration) {\r\n if (!this._imageProcessingConfiguration.isReady()) {\r\n return false;\r\n }\r\n\r\n this._imageProcessingConfiguration.prepareDefines(defines);\r\n\r\n defines.IS_REFLECTION_LINEAR = this.reflectionTexture != null && !this.reflectionTexture.gammaSpace;\r\n defines.IS_REFRACTION_LINEAR = this.refractionTexture != null && !this.refractionTexture.gammaSpace;\r\n }\r\n\r\n // Attribs\r\n MaterialHelper.PrepareDefinesForAttributes(mesh, defines, true, true);\r\n\r\n // Configure this\r\n this._mesh = mesh;\r\n\r\n if (this._waitingRenderList) {\r\n for (let i = 0; i < this._waitingRenderList.length; i++) {\r\n this.addToRenderList(scene.getNodeById(this._waitingRenderList[i]));\r\n }\r\n\r\n this._waitingRenderList = null;\r\n }\r\n\r\n // Get correct effect\r\n if (defines.isDirty) {\r\n defines.markAsProcessed();\r\n scene.resetCachedMaterial();\r\n\r\n // Fallbacks\r\n const fallbacks = new EffectFallbacks();\r\n if (defines.FOG) {\r\n fallbacks.addFallback(1, \"FOG\");\r\n }\r\n\r\n if (defines.LOGARITHMICDEPTH) {\r\n fallbacks.addFallback(0, \"LOGARITHMICDEPTH\");\r\n }\r\n\r\n MaterialHelper.HandleFallbacksForShadows(defines, fallbacks, this.maxSimultaneousLights);\r\n\r\n if (defines.NUM_BONE_INFLUENCERS > 0) {\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n }\r\n\r\n //Attributes\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n if (defines.NORMAL) {\r\n attribs.push(VertexBuffer.NormalKind);\r\n }\r\n\r\n if (defines.UV1) {\r\n attribs.push(VertexBuffer.UVKind);\r\n }\r\n\r\n if (defines.UV2) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n }\r\n\r\n if (defines.VERTEXCOLOR) {\r\n attribs.push(VertexBuffer.ColorKind);\r\n }\r\n\r\n MaterialHelper.PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\r\n MaterialHelper.PrepareAttributesForInstances(attribs, defines);\r\n\r\n // Legacy browser patch\r\n const shaderName = \"water\";\r\n const join = defines.toString();\r\n const uniforms = [\r\n \"world\",\r\n \"view\",\r\n \"viewProjection\",\r\n \"vEyePosition\",\r\n \"vLightsType\",\r\n \"vDiffuseColor\",\r\n \"vSpecularColor\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"pointSize\",\r\n \"vNormalInfos\",\r\n \"mBones\",\r\n \"normalMatrix\",\r\n \"logarithmicDepthConstant\",\r\n\r\n // Water\r\n \"reflectionViewProjection\",\r\n \"windDirection\",\r\n \"waveLength\",\r\n \"time\",\r\n \"windForce\",\r\n \"cameraPosition\",\r\n \"bumpHeight\",\r\n \"waveHeight\",\r\n \"waterColor\",\r\n \"waterColor2\",\r\n \"colorBlendFactor\",\r\n \"colorBlendFactor2\",\r\n \"waveSpeed\",\r\n \"waveCount\",\r\n ];\r\n const samplers = [\r\n \"normalSampler\",\r\n // Water\r\n \"refractionSampler\",\r\n \"reflectionSampler\",\r\n ];\r\n const uniformBuffers: string[] = [];\r\n\r\n if (ImageProcessingConfiguration) {\r\n ImageProcessingConfiguration.PrepareUniforms(uniforms, defines);\r\n ImageProcessingConfiguration.PrepareSamplers(samplers, defines);\r\n }\r\n\r\n addClipPlaneUniforms(uniforms);\r\n\r\n MaterialHelper.PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: defines,\r\n maxSimultaneousLights: this.maxSimultaneousLights,\r\n });\r\n subMesh.setEffect(\r\n scene.getEngine().createEffect(\r\n shaderName,\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: this.onCompiled,\r\n onError: this.onError,\r\n indexParameters: { maxSimultaneousLights: this._maxSimultaneousLights },\r\n },\r\n engine\r\n ),\r\n defines,\r\n this._materialContext\r\n );\r\n }\r\n if (!subMesh.effect || !subMesh.effect.isReady()) {\r\n return false;\r\n }\r\n\r\n defines._renderId = scene.getRenderId();\r\n subMesh.effect._wasPreviouslyReady = true;\r\n subMesh.effect._wasPreviouslyUsingInstances = !!useInstances;\r\n\r\n return true;\r\n }\r\n\r\n public bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const scene = this.getScene();\r\n\r\n const defines = <WaterMaterialDefines>subMesh.materialDefines;\r\n if (!defines) {\r\n return;\r\n }\r\n\r\n const effect = subMesh.effect;\r\n if (!effect || !this._mesh) {\r\n return;\r\n }\r\n this._activeEffect = effect;\r\n\r\n // Matrices\r\n this.bindOnlyWorldMatrix(world);\r\n this._activeEffect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n\r\n // Bones\r\n MaterialHelper.BindBonesParameters(mesh, this._activeEffect);\r\n\r\n if (this._mustRebind(scene, effect)) {\r\n // Textures\r\n if (this.bumpTexture && MaterialFlags.BumpTextureEnabled) {\r\n this._activeEffect.setTexture(\"normalSampler\", this.bumpTexture);\r\n\r\n this._activeEffect.setFloat2(\"vNormalInfos\", this.bumpTexture.coordinatesIndex, this.bumpTexture.level);\r\n this._activeEffect.setMatrix(\"normalMatrix\", this.bumpTexture.getTextureMatrix());\r\n }\r\n // Clip plane\r\n bindClipPlane(effect, this, scene);\r\n\r\n // Point size\r\n if (this.pointsCloud) {\r\n this._activeEffect.setFloat(\"pointSize\", this.pointSize);\r\n }\r\n\r\n // Log. depth\r\n if (this._useLogarithmicDepth) {\r\n MaterialHelper.BindLogDepth(defines, effect, scene);\r\n }\r\n\r\n scene.bindEyePosition(effect);\r\n }\r\n\r\n this._activeEffect.setColor4(\"vDiffuseColor\", this.diffuseColor, this.alpha * mesh.visibility);\r\n\r\n if (defines.SPECULARTERM) {\r\n this._activeEffect.setColor4(\"vSpecularColor\", this.specularColor, this.specularPower);\r\n }\r\n\r\n if (scene.lightsEnabled && !this.disableLighting) {\r\n MaterialHelper.BindLights(scene, mesh, this._activeEffect, defines, this.maxSimultaneousLights);\r\n }\r\n\r\n // View\r\n if (scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) {\r\n this._activeEffect.setMatrix(\"view\", scene.getViewMatrix());\r\n }\r\n\r\n // Fog\r\n MaterialHelper.BindFogParameters(scene, mesh, this._activeEffect);\r\n\r\n // Log. depth\r\n MaterialHelper.BindLogDepth(defines, this._activeEffect, scene);\r\n\r\n // Water\r\n if (MaterialFlags.ReflectionTextureEnabled) {\r\n this._activeEffect.setTexture(\"refractionSampler\", this._refractionRTT);\r\n this._activeEffect.setTexture(\"reflectionSampler\", this._reflectionRTT);\r\n }\r\n\r\n const wrvp = this._reflectionTransform.multiply(scene.getProjectionMatrix());\r\n\r\n // Add delta time. Prevent adding delta time if it hasn't changed.\r\n const deltaTime = scene.getEngine().getDeltaTime();\r\n if (deltaTime !== this._lastDeltaTime) {\r\n this._lastDeltaTime = deltaTime;\r\n this._lastTime += this._lastDeltaTime;\r\n }\r\n\r\n this._activeEffect.setMatrix(\"reflectionViewProjection\", wrvp);\r\n this._activeEffect.setVector2(\"windDirection\", this.windDirection);\r\n this._activeEffect.setFloat(\"waveLength\", this.waveLength);\r\n this._activeEffect.setFloat(\"time\", this._lastTime / 100000);\r\n this._activeEffect.setFloat(\"windForce\", this.windForce);\r\n this._activeEffect.setFloat(\"waveHeight\", this.waveHeight);\r\n this._activeEffect.setFloat(\"bumpHeight\", this.bumpHeight);\r\n this._activeEffect.setColor4(\"waterColor\", this.waterColor, 1.0);\r\n this._activeEffect.setFloat(\"colorBlendFactor\", this.colorBlendFactor);\r\n this._activeEffect.setColor4(\"waterColor2\", this.waterColor2, 1.0);\r\n this._activeEffect.setFloat(\"colorBlendFactor2\", this.colorBlendFactor2);\r\n this._activeEffect.setFloat(\"waveSpeed\", this.waveSpeed);\r\n this._activeEffect.setFloat(\"waveCount\", this.waveCount);\r\n\r\n // image processing\r\n if (this._imageProcessingConfiguration && !this._imageProcessingConfiguration.applyByPostProcess) {\r\n this._imageProcessingConfiguration.bind(this._activeEffect);\r\n }\r\n\r\n this._afterBind(mesh, this._activeEffect);\r\n }\r\n\r\n private _createRenderTargets(scene: Scene, renderTargetSize: Vector2): void {\r\n // Render targets\r\n this._refractionRTT = new RenderTargetTexture(name + \"_refraction\", { width: renderTargetSize.x, height: renderTargetSize.y }, scene, false, true);\r\n this._refractionRTT.wrapU = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n this._refractionRTT.wrapV = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n this._refractionRTT.ignoreCameraViewport = true;\r\n\r\n this._reflectionRTT = new RenderTargetTexture(name + \"_reflection\", { width: renderTargetSize.x, height: renderTargetSize.y }, scene, false, true);\r\n this._reflectionRTT.wrapU = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n this._reflectionRTT.wrapV = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n this._reflectionRTT.ignoreCameraViewport = true;\r\n\r\n let isVisible: boolean;\r\n let clipPlane: Nullable<Plane> = null;\r\n let savedViewMatrix: Matrix;\r\n const mirrorMatrix = Matrix.Zero();\r\n\r\n this._refractionRTT.onBeforeRender = () => {\r\n if (this._mesh) {\r\n isVisible = this._mesh.isVisible;\r\n this._mesh.isVisible = false;\r\n }\r\n\r\n // Clip plane\r\n if (!this.disableClipPlane) {\r\n clipPlane = scene.clipPlane;\r\n\r\n const positiony = this._mesh ? this._mesh.absolutePosition.y : 0.0;\r\n scene.clipPlane = Plane.FromPositionAndNormal(new Vector3(0, positiony + 0.05, 0), new Vector3(0, 1, 0));\r\n }\r\n };\r\n\r\n this._refractionRTT.onAfterRender = () => {\r\n if (this._mesh) {\r\n this._mesh.isVisible = isVisible;\r\n }\r\n\r\n // Clip plane\r\n if (!this.disableClipPlane) {\r\n scene.clipPlane = clipPlane;\r\n }\r\n };\r\n\r\n this._reflectionRTT.onBeforeRender = () => {\r\n if (this._mesh) {\r\n isVisible = this._mesh.isVisible;\r\n this._mesh.isVisible = false;\r\n }\r\n\r\n // Clip plane\r\n if (!this.disableClipPlane) {\r\n clipPlane = scene.clipPlane;\r\n\r\n const positiony = this._mesh ? this._mesh.absolutePosition.y : 0.0;\r\n scene.clipPlane = Plane.FromPositionAndNormal(new Vector3(0, positiony - 0.05, 0), new Vector3(0, -1, 0));\r\n\r\n Matrix.ReflectionToRef(scene.clipPlane, mirrorMatrix);\r\n }\r\n\r\n // Transform\r\n savedViewMatrix = scene.getViewMatrix();\r\n\r\n mirrorMatrix.multiplyToRef(savedViewMatrix, this._reflectionTransform);\r\n scene.setTransformMatrix(this._reflectionTransform, scene.getProjectionMatrix());\r\n scene._mirroredCameraPosition = Vector3.TransformCoordinates((<Camera>scene.activeCamera).position, mirrorMatrix);\r\n };\r\n\r\n this._reflectionRTT.onAfterRender = () => {\r\n if (this._mesh) {\r\n this._mesh.isVisible = isVisible;\r\n }\r\n\r\n // Clip plane\r\n scene.clipPlane = clipPlane;\r\n\r\n // Transform\r\n scene.setTransformMatrix(savedViewMatrix, scene.getProjectionMatrix());\r\n scene._mirroredCameraPosition = null;\r\n };\r\n }\r\n\r\n public getAnimatables(): IAnimatable[] {\r\n const results = [];\r\n\r\n if (this.bumpTexture && this.bumpTexture.animations && this.bumpTexture.animations.length > 0) {\r\n results.push(this.bumpTexture);\r\n }\r\n if (this._reflectionRTT && this._reflectionRTT.animations && this._reflectionRTT.animations.length > 0) {\r\n results.push(this._reflectionRTT);\r\n }\r\n if (this._refractionRTT && this._refractionRTT.animations && this._refractionRTT.animations.length > 0) {\r\n results.push(this._refractionRTT);\r\n }\r\n\r\n return results;\r\n }\r\n\r\n public getActiveTextures(): BaseTexture[] {\r\n const activeTextures = super.getActiveTextures();\r\n\r\n if (this._bumpTexture) {\r\n activeTextures.push(this._bumpTexture);\r\n }\r\n\r\n return activeTextures;\r\n }\r\n\r\n public hasTexture(texture: BaseTexture): boolean {\r\n if (super.hasTexture(texture)) {\r\n return true;\r\n }\r\n\r\n if (this._bumpTexture === texture) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public dispose(forceDisposeEffect?: boolean): void {\r\n if (this.bumpTexture) {\r\n this.bumpTexture.dispose();\r\n }\r\n\r\n let index = this.getScene().customRenderTargets.indexOf(<RenderTargetTexture>this._refractionRTT);\r\n if (index != -1) {\r\n this.getScene().customRenderTargets.splice(index, 1);\r\n }\r\n index = -1;\r\n index = this.getScene().customRenderTargets.indexOf(<RenderTargetTexture>this._reflectionRTT);\r\n if (index != -1) {\r\n this.getScene().customRenderTargets.splice(index, 1);\r\n }\r\n\r\n if (this._reflectionRTT) {\r\n this._reflectionRTT.dispose();\r\n }\r\n if (this._refractionRTT) {\r\n this._refractionRTT.dispose();\r\n }\r\n\r\n // Remove image-processing observer\r\n if (this._imageProcessingConfiguration && this._imageProcessingObserver) {\r\n this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver);\r\n }\r\n\r\n super.dispose(forceDisposeEffect);\r\n }\r\n\r\n public clone(name: string): WaterMaterial {\r\n return SerializationHelper.Clone(() => new WaterMaterial(name, this.getScene()), this);\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.customType = \"BABYLON.WaterMaterial\";\r\n\r\n serializationObject.renderList = [];\r\n if (this._refractionRTT && this._refractionRTT.renderList) {\r\n for (let i = 0; i < this._refractionRTT.renderList.length; i++) {\r\n serializationObject.renderList.push(this._refractionRTT.renderList[i].id);\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n public getClassName(): string {\r\n return \"WaterMaterial\";\r\n }\r\n\r\n // Statics\r\n public static Parse(source: any, scene: Scene, rootUrl: string): WaterMaterial {\r\n const mat = SerializationHelper.Parse(() => new WaterMaterial(source.name, scene), source, scene, rootUrl);\r\n mat._waitingRenderList = source.renderList;\r\n\r\n return mat;\r\n }\r\n\r\n public static CreateDefaultMesh(name: string, scene: Scene): Mesh {\r\n const mesh = CreateGround(name, { width: 512, height: 512, subdivisions: 32, updatable: false }, scene);\r\n return mesh;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.WaterMaterial\", WaterMaterial);\r\n"]}
|
1
|
+
{"version":3,"file":"waterMaterial.js","sourceRoot":"","sources":["../../../../dev/materials/src/water/waterMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"core/types\";\r\nimport { serializeAsVector2, serializeAsTexture, serialize, expandToProperty, serializeAsColor3, SerializationHelper } from \"core/Misc/decorators\";\r\nimport { Matrix, Vector2, Vector3 } from \"core/Maths/math.vector\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { Plane } from \"core/Maths/math.plane\";\r\nimport type { IAnimatable } from \"core/Animations/animatable.interface\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { SmartArray } from \"core/Misc/smartArray\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { RenderTargetTexture } from \"core/Materials/Textures/renderTargetTexture\";\r\nimport type { IEffectCreationOptions } from \"core/Materials/effect\";\r\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport type { IImageProcessingConfigurationDefines } from \"core/Materials/imageProcessingConfiguration\";\r\nimport { ImageProcessingConfiguration } from \"core/Materials/imageProcessingConfiguration\";\r\nimport { MaterialHelper } from \"core/Materials/materialHelper\";\r\nimport { PushMaterial } from \"core/Materials/pushMaterial\";\r\nimport { MaterialFlags } from \"core/Materials/materialFlags\";\r\nimport { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { SubMesh } from \"core/Meshes/subMesh\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport type { Camera } from \"core/Cameras/camera\";\r\nimport { Scene } from \"core/scene\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\n\r\nimport \"./water.fragment\";\r\nimport \"./water.vertex\";\r\nimport { EffectFallbacks } from \"core/Materials/effectFallbacks\";\r\nimport { CreateGround } from \"core/Meshes/Builders/groundBuilder\";\r\nimport { addClipPlaneUniforms, bindClipPlane } from \"core/Materials/clipPlaneMaterialHelper\";\r\n\r\nclass WaterMaterialDefines extends MaterialDefines implements IImageProcessingConfigurationDefines {\r\n public BUMP = false;\r\n public REFLECTION = false;\r\n public CLIPPLANE = false;\r\n public CLIPPLANE2 = false;\r\n public CLIPPLANE3 = false;\r\n public CLIPPLANE4 = false;\r\n public CLIPPLANE5 = false;\r\n public CLIPPLANE6 = false;\r\n public ALPHATEST = false;\r\n public DEPTHPREPASS = false;\r\n public POINTSIZE = false;\r\n public FOG = false;\r\n public NORMAL = false;\r\n public UV1 = false;\r\n public UV2 = false;\r\n public VERTEXCOLOR = false;\r\n public VERTEXALPHA = false;\r\n public NUM_BONE_INFLUENCERS = 0;\r\n public BonesPerMesh = 0;\r\n public INSTANCES = false;\r\n public INSTANCESCOLOR = false;\r\n public SPECULARTERM = false;\r\n public LOGARITHMICDEPTH = false;\r\n public USE_REVERSE_DEPTHBUFFER = false;\r\n public FRESNELSEPARATE = false;\r\n public BUMPSUPERIMPOSE = false;\r\n public BUMPAFFECTSREFLECTION = false;\r\n public USE_WORLD_COORDINATES = false;\r\n\r\n public IMAGEPROCESSING = false;\r\n public VIGNETTE = false;\r\n public VIGNETTEBLENDMODEMULTIPLY = false;\r\n public VIGNETTEBLENDMODEOPAQUE = false;\r\n public TONEMAPPING = false;\r\n public TONEMAPPING_ACES = false;\r\n public CONTRAST = false;\r\n public EXPOSURE = false;\r\n public COLORCURVES = false;\r\n public COLORGRADING = false;\r\n public COLORGRADING3D = false;\r\n public SAMPLER3DGREENDEPTH = false;\r\n public SAMPLER3DBGRMAP = false;\r\n public DITHER = false;\r\n public IMAGEPROCESSINGPOSTPROCESS = false;\r\n public SKIPFINALCOLORCLAMP = false;\r\n\r\n constructor() {\r\n super();\r\n this.rebuild();\r\n }\r\n}\r\n\r\nexport class WaterMaterial extends PushMaterial {\r\n /*\r\n * Public members\r\n */\r\n @serializeAsTexture(\"bumpTexture\")\r\n private _bumpTexture: BaseTexture;\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public bumpTexture: BaseTexture;\r\n\r\n @serializeAsColor3()\r\n public diffuseColor = new Color3(1, 1, 1);\r\n\r\n @serializeAsColor3()\r\n public specularColor = new Color3(0, 0, 0);\r\n\r\n @serialize()\r\n public specularPower = 64;\r\n\r\n @serialize(\"disableLighting\")\r\n private _disableLighting = false;\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public disableLighting: boolean;\r\n\r\n @serialize(\"maxSimultaneousLights\")\r\n private _maxSimultaneousLights = 4;\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public maxSimultaneousLights: number;\r\n\r\n /**\r\n * Defines the wind force.\r\n */\r\n @serialize()\r\n public windForce: number = 6;\r\n /**\r\n * Defines the direction of the wind in the plane (X, Z).\r\n */\r\n @serializeAsVector2()\r\n public windDirection: Vector2 = new Vector2(0, 1);\r\n /**\r\n * Defines the height of the waves.\r\n */\r\n @serialize()\r\n public waveHeight: number = 0.4;\r\n /**\r\n * Defines the bump height related to the bump map.\r\n */\r\n @serialize()\r\n public bumpHeight: number = 0.4;\r\n /**\r\n * Defines wether or not: to add a smaller moving bump to less steady waves.\r\n */\r\n @serialize(\"bumpSuperimpose\")\r\n private _bumpSuperimpose = false;\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public bumpSuperimpose: boolean;\r\n\r\n /**\r\n * Defines wether or not color refraction and reflection differently with .waterColor2 and .colorBlendFactor2. Non-linear (physically correct) fresnel.\r\n */\r\n @serialize(\"fresnelSeparate\")\r\n private _fresnelSeparate = false;\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public fresnelSeparate: boolean;\r\n\r\n /**\r\n * Defines wether or not bump Wwves modify the reflection.\r\n */\r\n @serialize(\"bumpAffectsReflection\")\r\n private _bumpAffectsReflection = false;\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public bumpAffectsReflection: boolean;\r\n\r\n /**\r\n * Defines the water color blended with the refraction (near).\r\n */\r\n @serializeAsColor3()\r\n public waterColor: Color3 = new Color3(0.1, 0.1, 0.6);\r\n /**\r\n * Defines the blend factor related to the water color.\r\n */\r\n @serialize()\r\n public colorBlendFactor: number = 0.2;\r\n /**\r\n * Defines the water color blended with the reflection (far).\r\n */\r\n @serializeAsColor3()\r\n public waterColor2: Color3 = new Color3(0.1, 0.1, 0.6);\r\n /**\r\n * Defines the blend factor related to the water color (reflection, far).\r\n */\r\n @serialize()\r\n public colorBlendFactor2: number = 0.2;\r\n /**\r\n * Defines the maximum length of a wave.\r\n */\r\n @serialize()\r\n public waveLength: number = 0.1;\r\n\r\n /**\r\n * Defines the waves speed.\r\n */\r\n @serialize()\r\n public waveSpeed: number = 1.0;\r\n\r\n /**\r\n * Defines the number of times waves are repeated. This is typically used to adjust waves count according to the ground's size where the material is applied on.\r\n */\r\n @serialize()\r\n public waveCount: number = 20;\r\n /**\r\n * Sets or gets whether or not automatic clipping should be enabled or not. Setting to true will save performances and\r\n * will avoid calculating useless pixels in the pixel shader of the water material.\r\n */\r\n @serialize()\r\n public disableClipPlane: boolean = false;\r\n\r\n /**\r\n * Defines whether or not to use world coordinates for wave deformations.\r\n * The default value is false, meaning that the deformation is applied in object (local) space.\r\n * You will probably need to set it to true if you are using instances or thin instances for your water objects.\r\n */\r\n @serialize(\"useWorldCoordinatesForWaveDeformation\")\r\n private _useWorldCoordinatesForWaveDeformation = false;\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public useWorldCoordinatesForWaveDeformation: boolean;\r\n\r\n protected _renderTargets = new SmartArray<RenderTargetTexture>(16);\r\n\r\n /*\r\n * Private members\r\n */\r\n private _mesh: Nullable<AbstractMesh> = null;\r\n\r\n private _refractionRTT: Nullable<RenderTargetTexture>;\r\n private _reflectionRTT: Nullable<RenderTargetTexture>;\r\n\r\n private _reflectionTransform: Matrix = Matrix.Zero();\r\n private _lastTime: number = 0;\r\n private _lastDeltaTime: number = 0;\r\n\r\n private _waitingRenderList: Nullable<string[]>;\r\n\r\n private _imageProcessingConfiguration: Nullable<ImageProcessingConfiguration>;\r\n private _imageProcessingObserver: Nullable<Observer<ImageProcessingConfiguration>>;\r\n\r\n /**\r\n * Gets a boolean indicating that current material needs to register RTT\r\n */\r\n public get hasRenderTargetTextures(): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Constructor\r\n * @param name\r\n * @param scene\r\n * @param renderTargetSize\r\n */\r\n constructor(\r\n name: string,\r\n scene?: Scene,\r\n public renderTargetSize: Vector2 = new Vector2(512, 512)\r\n ) {\r\n super(name, scene);\r\n\r\n this._createRenderTargets(this.getScene(), renderTargetSize);\r\n\r\n // Create render targets\r\n this.getRenderTargetTextures = (): SmartArray<RenderTargetTexture> => {\r\n this._renderTargets.reset();\r\n this._renderTargets.push(<RenderTargetTexture>this._reflectionRTT);\r\n this._renderTargets.push(<RenderTargetTexture>this._refractionRTT);\r\n\r\n return this._renderTargets;\r\n };\r\n\r\n this._imageProcessingConfiguration = this.getScene().imageProcessingConfiguration;\r\n if (this._imageProcessingConfiguration) {\r\n this._imageProcessingObserver = this._imageProcessingConfiguration.onUpdateParameters.add(() => {\r\n this._markAllSubMeshesAsImageProcessingDirty();\r\n });\r\n }\r\n }\r\n\r\n // Get / Set\r\n public get refractionTexture(): Nullable<RenderTargetTexture> {\r\n return this._refractionRTT;\r\n }\r\n\r\n public get reflectionTexture(): Nullable<RenderTargetTexture> {\r\n return this._reflectionRTT;\r\n }\r\n\r\n // Methods\r\n public addToRenderList(node: any): void {\r\n if (this._refractionRTT && this._refractionRTT.renderList) {\r\n this._refractionRTT.renderList.push(node);\r\n }\r\n\r\n if (this._reflectionRTT && this._reflectionRTT.renderList) {\r\n this._reflectionRTT.renderList.push(node);\r\n }\r\n }\r\n\r\n public removeFromRenderList(node: any): void {\r\n if (this._refractionRTT && this._refractionRTT.renderList) {\r\n const idx = this._refractionRTT.renderList.indexOf(node);\r\n if (idx !== -1) {\r\n this._refractionRTT.renderList.splice(idx, 1);\r\n }\r\n }\r\n\r\n if (this._reflectionRTT && this._reflectionRTT.renderList) {\r\n const idx = this._reflectionRTT.renderList.indexOf(node);\r\n if (idx !== -1) {\r\n this._reflectionRTT.renderList.splice(idx, 1);\r\n }\r\n }\r\n }\r\n\r\n public enableRenderTargets(enable: boolean): void {\r\n const refreshRate = enable ? 1 : 0;\r\n\r\n if (this._refractionRTT) {\r\n this._refractionRTT.refreshRate = refreshRate;\r\n }\r\n\r\n if (this._reflectionRTT) {\r\n this._reflectionRTT.refreshRate = refreshRate;\r\n }\r\n }\r\n\r\n public getRenderList(): Nullable<AbstractMesh[]> {\r\n return this._refractionRTT ? this._refractionRTT.renderList : [];\r\n }\r\n\r\n public get renderTargetsEnabled(): boolean {\r\n return !(this._refractionRTT && this._refractionRTT.refreshRate === 0);\r\n }\r\n\r\n public needAlphaBlending(): boolean {\r\n return this.alpha < 1.0;\r\n }\r\n\r\n public needAlphaTesting(): boolean {\r\n return false;\r\n }\r\n\r\n public getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n public isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\r\n const drawWrapper = subMesh._drawWrapper;\r\n\r\n if (this.isFrozen) {\r\n if (drawWrapper.effect && drawWrapper._wasPreviouslyReady && drawWrapper._wasPreviouslyUsingInstances === useInstances) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n subMesh.materialDefines = new WaterMaterialDefines();\r\n }\r\n\r\n const defines = <WaterMaterialDefines>subMesh.materialDefines;\r\n const scene = this.getScene();\r\n\r\n if (this._isReadyForSubMesh(subMesh)) {\r\n return true;\r\n }\r\n\r\n const engine = scene.getEngine();\r\n\r\n // Textures\r\n if (defines._areTexturesDirty) {\r\n defines._needUVs = false;\r\n if (scene.texturesEnabled) {\r\n if (this.bumpTexture && MaterialFlags.BumpTextureEnabled) {\r\n if (!this.bumpTexture.isReady()) {\r\n return false;\r\n } else {\r\n defines._needUVs = true;\r\n defines.BUMP = true;\r\n }\r\n }\r\n\r\n if (MaterialFlags.ReflectionTextureEnabled) {\r\n defines.REFLECTION = true;\r\n }\r\n }\r\n }\r\n\r\n MaterialHelper.PrepareDefinesForFrameBoundValues(scene, engine, this, defines, useInstances ? true : false);\r\n\r\n MaterialHelper.PrepareDefinesForMisc(mesh, scene, this._useLogarithmicDepth, this.pointsCloud, this.fogEnabled, this._shouldTurnAlphaTestOn(mesh), defines);\r\n\r\n if (defines._areMiscDirty) {\r\n defines.FRESNELSEPARATE = this._fresnelSeparate;\r\n defines.BUMPSUPERIMPOSE = this._bumpSuperimpose;\r\n defines.BUMPAFFECTSREFLECTION = this._bumpAffectsReflection;\r\n defines.USE_WORLD_COORDINATES = this._useWorldCoordinatesForWaveDeformation;\r\n }\r\n\r\n // Lights\r\n defines._needNormals = MaterialHelper.PrepareDefinesForLights(scene, mesh, defines, true, this._maxSimultaneousLights, this._disableLighting);\r\n\r\n // Image processing\r\n if (defines._areImageProcessingDirty && this._imageProcessingConfiguration) {\r\n if (!this._imageProcessingConfiguration.isReady()) {\r\n return false;\r\n }\r\n\r\n this._imageProcessingConfiguration.prepareDefines(defines);\r\n\r\n defines.IS_REFLECTION_LINEAR = this.reflectionTexture != null && !this.reflectionTexture.gammaSpace;\r\n defines.IS_REFRACTION_LINEAR = this.refractionTexture != null && !this.refractionTexture.gammaSpace;\r\n }\r\n\r\n // Attribs\r\n MaterialHelper.PrepareDefinesForAttributes(mesh, defines, true, true);\r\n\r\n // Configure this\r\n this._mesh = mesh;\r\n\r\n if (this._waitingRenderList) {\r\n for (let i = 0; i < this._waitingRenderList.length; i++) {\r\n this.addToRenderList(scene.getNodeById(this._waitingRenderList[i]));\r\n }\r\n\r\n this._waitingRenderList = null;\r\n }\r\n\r\n // Get correct effect\r\n if (defines.isDirty) {\r\n defines.markAsProcessed();\r\n scene.resetCachedMaterial();\r\n\r\n // Fallbacks\r\n const fallbacks = new EffectFallbacks();\r\n if (defines.FOG) {\r\n fallbacks.addFallback(1, \"FOG\");\r\n }\r\n\r\n if (defines.LOGARITHMICDEPTH) {\r\n fallbacks.addFallback(0, \"LOGARITHMICDEPTH\");\r\n }\r\n\r\n MaterialHelper.HandleFallbacksForShadows(defines, fallbacks, this.maxSimultaneousLights);\r\n\r\n if (defines.NUM_BONE_INFLUENCERS > 0) {\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n }\r\n\r\n //Attributes\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n if (defines.NORMAL) {\r\n attribs.push(VertexBuffer.NormalKind);\r\n }\r\n\r\n if (defines.UV1) {\r\n attribs.push(VertexBuffer.UVKind);\r\n }\r\n\r\n if (defines.UV2) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n }\r\n\r\n if (defines.VERTEXCOLOR) {\r\n attribs.push(VertexBuffer.ColorKind);\r\n }\r\n\r\n MaterialHelper.PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\r\n MaterialHelper.PrepareAttributesForInstances(attribs, defines);\r\n\r\n // Legacy browser patch\r\n const shaderName = \"water\";\r\n const join = defines.toString();\r\n const uniforms = [\r\n \"world\",\r\n \"view\",\r\n \"viewProjection\",\r\n \"vEyePosition\",\r\n \"vLightsType\",\r\n \"vDiffuseColor\",\r\n \"vSpecularColor\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"pointSize\",\r\n \"vNormalInfos\",\r\n \"mBones\",\r\n \"normalMatrix\",\r\n \"logarithmicDepthConstant\",\r\n\r\n // Water\r\n \"reflectionViewProjection\",\r\n \"windDirection\",\r\n \"waveLength\",\r\n \"time\",\r\n \"windForce\",\r\n \"cameraPosition\",\r\n \"bumpHeight\",\r\n \"waveHeight\",\r\n \"waterColor\",\r\n \"waterColor2\",\r\n \"colorBlendFactor\",\r\n \"colorBlendFactor2\",\r\n \"waveSpeed\",\r\n \"waveCount\",\r\n ];\r\n const samplers = [\r\n \"normalSampler\",\r\n // Water\r\n \"refractionSampler\",\r\n \"reflectionSampler\",\r\n ];\r\n const uniformBuffers: string[] = [];\r\n\r\n if (ImageProcessingConfiguration) {\r\n ImageProcessingConfiguration.PrepareUniforms(uniforms, defines);\r\n ImageProcessingConfiguration.PrepareSamplers(samplers, defines);\r\n }\r\n\r\n addClipPlaneUniforms(uniforms);\r\n\r\n MaterialHelper.PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: defines,\r\n maxSimultaneousLights: this.maxSimultaneousLights,\r\n });\r\n subMesh.setEffect(\r\n scene.getEngine().createEffect(\r\n shaderName,\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: this.onCompiled,\r\n onError: this.onError,\r\n indexParameters: { maxSimultaneousLights: this._maxSimultaneousLights },\r\n },\r\n engine\r\n ),\r\n defines,\r\n this._materialContext\r\n );\r\n }\r\n if (!subMesh.effect || !subMesh.effect.isReady()) {\r\n return false;\r\n }\r\n\r\n defines._renderId = scene.getRenderId();\r\n drawWrapper._wasPreviouslyReady = true;\r\n drawWrapper._wasPreviouslyUsingInstances = !!useInstances;\r\n\r\n return true;\r\n }\r\n\r\n public bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const scene = this.getScene();\r\n\r\n const defines = <WaterMaterialDefines>subMesh.materialDefines;\r\n if (!defines) {\r\n return;\r\n }\r\n\r\n const effect = subMesh.effect;\r\n if (!effect || !this._mesh) {\r\n return;\r\n }\r\n this._activeEffect = effect;\r\n\r\n // Matrices\r\n this.bindOnlyWorldMatrix(world);\r\n this._activeEffect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n\r\n // Bones\r\n MaterialHelper.BindBonesParameters(mesh, this._activeEffect);\r\n\r\n if (this._mustRebind(scene, effect, subMesh)) {\r\n // Textures\r\n if (this.bumpTexture && MaterialFlags.BumpTextureEnabled) {\r\n this._activeEffect.setTexture(\"normalSampler\", this.bumpTexture);\r\n\r\n this._activeEffect.setFloat2(\"vNormalInfos\", this.bumpTexture.coordinatesIndex, this.bumpTexture.level);\r\n this._activeEffect.setMatrix(\"normalMatrix\", this.bumpTexture.getTextureMatrix());\r\n }\r\n // Clip plane\r\n bindClipPlane(effect, this, scene);\r\n\r\n // Point size\r\n if (this.pointsCloud) {\r\n this._activeEffect.setFloat(\"pointSize\", this.pointSize);\r\n }\r\n\r\n // Log. depth\r\n if (this._useLogarithmicDepth) {\r\n MaterialHelper.BindLogDepth(defines, effect, scene);\r\n }\r\n\r\n scene.bindEyePosition(effect);\r\n }\r\n\r\n this._activeEffect.setColor4(\"vDiffuseColor\", this.diffuseColor, this.alpha * mesh.visibility);\r\n\r\n if (defines.SPECULARTERM) {\r\n this._activeEffect.setColor4(\"vSpecularColor\", this.specularColor, this.specularPower);\r\n }\r\n\r\n if (scene.lightsEnabled && !this.disableLighting) {\r\n MaterialHelper.BindLights(scene, mesh, this._activeEffect, defines, this.maxSimultaneousLights);\r\n }\r\n\r\n // View\r\n if (scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) {\r\n this._activeEffect.setMatrix(\"view\", scene.getViewMatrix());\r\n }\r\n\r\n // Fog\r\n MaterialHelper.BindFogParameters(scene, mesh, this._activeEffect);\r\n\r\n // Log. depth\r\n MaterialHelper.BindLogDepth(defines, this._activeEffect, scene);\r\n\r\n // Water\r\n if (MaterialFlags.ReflectionTextureEnabled) {\r\n this._activeEffect.setTexture(\"refractionSampler\", this._refractionRTT);\r\n this._activeEffect.setTexture(\"reflectionSampler\", this._reflectionRTT);\r\n }\r\n\r\n const wrvp = this._reflectionTransform.multiply(scene.getProjectionMatrix());\r\n\r\n // Add delta time. Prevent adding delta time if it hasn't changed.\r\n const deltaTime = scene.getEngine().getDeltaTime();\r\n if (deltaTime !== this._lastDeltaTime) {\r\n this._lastDeltaTime = deltaTime;\r\n this._lastTime += this._lastDeltaTime;\r\n }\r\n\r\n this._activeEffect.setMatrix(\"reflectionViewProjection\", wrvp);\r\n this._activeEffect.setVector2(\"windDirection\", this.windDirection);\r\n this._activeEffect.setFloat(\"waveLength\", this.waveLength);\r\n this._activeEffect.setFloat(\"time\", this._lastTime / 100000);\r\n this._activeEffect.setFloat(\"windForce\", this.windForce);\r\n this._activeEffect.setFloat(\"waveHeight\", this.waveHeight);\r\n this._activeEffect.setFloat(\"bumpHeight\", this.bumpHeight);\r\n this._activeEffect.setColor4(\"waterColor\", this.waterColor, 1.0);\r\n this._activeEffect.setFloat(\"colorBlendFactor\", this.colorBlendFactor);\r\n this._activeEffect.setColor4(\"waterColor2\", this.waterColor2, 1.0);\r\n this._activeEffect.setFloat(\"colorBlendFactor2\", this.colorBlendFactor2);\r\n this._activeEffect.setFloat(\"waveSpeed\", this.waveSpeed);\r\n this._activeEffect.setFloat(\"waveCount\", this.waveCount);\r\n\r\n // image processing\r\n if (this._imageProcessingConfiguration && !this._imageProcessingConfiguration.applyByPostProcess) {\r\n this._imageProcessingConfiguration.bind(this._activeEffect);\r\n }\r\n\r\n this._afterBind(mesh, this._activeEffect, subMesh);\r\n }\r\n\r\n private _createRenderTargets(scene: Scene, renderTargetSize: Vector2): void {\r\n // Render targets\r\n this._refractionRTT = new RenderTargetTexture(name + \"_refraction\", { width: renderTargetSize.x, height: renderTargetSize.y }, scene, false, true);\r\n this._refractionRTT.wrapU = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n this._refractionRTT.wrapV = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n this._refractionRTT.ignoreCameraViewport = true;\r\n\r\n this._reflectionRTT = new RenderTargetTexture(name + \"_reflection\", { width: renderTargetSize.x, height: renderTargetSize.y }, scene, false, true);\r\n this._reflectionRTT.wrapU = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n this._reflectionRTT.wrapV = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n this._reflectionRTT.ignoreCameraViewport = true;\r\n\r\n let isVisible: boolean;\r\n let clipPlane: Nullable<Plane> = null;\r\n let savedViewMatrix: Matrix;\r\n const mirrorMatrix = Matrix.Zero();\r\n\r\n this._refractionRTT.onBeforeRender = () => {\r\n if (this._mesh) {\r\n isVisible = this._mesh.isVisible;\r\n this._mesh.isVisible = false;\r\n }\r\n\r\n // Clip plane\r\n if (!this.disableClipPlane) {\r\n clipPlane = scene.clipPlane;\r\n\r\n const positiony = this._mesh ? this._mesh.absolutePosition.y : 0.0;\r\n scene.clipPlane = Plane.FromPositionAndNormal(new Vector3(0, positiony + 0.05, 0), new Vector3(0, 1, 0));\r\n }\r\n };\r\n\r\n this._refractionRTT.onAfterRender = () => {\r\n if (this._mesh) {\r\n this._mesh.isVisible = isVisible;\r\n }\r\n\r\n // Clip plane\r\n if (!this.disableClipPlane) {\r\n scene.clipPlane = clipPlane;\r\n }\r\n };\r\n\r\n this._reflectionRTT.onBeforeRender = () => {\r\n if (this._mesh) {\r\n isVisible = this._mesh.isVisible;\r\n this._mesh.isVisible = false;\r\n }\r\n\r\n // Clip plane\r\n if (!this.disableClipPlane) {\r\n clipPlane = scene.clipPlane;\r\n\r\n const positiony = this._mesh ? this._mesh.absolutePosition.y : 0.0;\r\n scene.clipPlane = Plane.FromPositionAndNormal(new Vector3(0, positiony - 0.05, 0), new Vector3(0, -1, 0));\r\n\r\n Matrix.ReflectionToRef(scene.clipPlane, mirrorMatrix);\r\n }\r\n\r\n // Transform\r\n savedViewMatrix = scene.getViewMatrix();\r\n\r\n mirrorMatrix.multiplyToRef(savedViewMatrix, this._reflectionTransform);\r\n scene.setTransformMatrix(this._reflectionTransform, scene.getProjectionMatrix());\r\n scene._mirroredCameraPosition = Vector3.TransformCoordinates((<Camera>scene.activeCamera).position, mirrorMatrix);\r\n };\r\n\r\n this._reflectionRTT.onAfterRender = () => {\r\n if (this._mesh) {\r\n this._mesh.isVisible = isVisible;\r\n }\r\n\r\n // Clip plane\r\n scene.clipPlane = clipPlane;\r\n\r\n // Transform\r\n scene.setTransformMatrix(savedViewMatrix, scene.getProjectionMatrix());\r\n scene._mirroredCameraPosition = null;\r\n };\r\n }\r\n\r\n public getAnimatables(): IAnimatable[] {\r\n const results = [];\r\n\r\n if (this.bumpTexture && this.bumpTexture.animations && this.bumpTexture.animations.length > 0) {\r\n results.push(this.bumpTexture);\r\n }\r\n if (this._reflectionRTT && this._reflectionRTT.animations && this._reflectionRTT.animations.length > 0) {\r\n results.push(this._reflectionRTT);\r\n }\r\n if (this._refractionRTT && this._refractionRTT.animations && this._refractionRTT.animations.length > 0) {\r\n results.push(this._refractionRTT);\r\n }\r\n\r\n return results;\r\n }\r\n\r\n public getActiveTextures(): BaseTexture[] {\r\n const activeTextures = super.getActiveTextures();\r\n\r\n if (this._bumpTexture) {\r\n activeTextures.push(this._bumpTexture);\r\n }\r\n\r\n return activeTextures;\r\n }\r\n\r\n public hasTexture(texture: BaseTexture): boolean {\r\n if (super.hasTexture(texture)) {\r\n return true;\r\n }\r\n\r\n if (this._bumpTexture === texture) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public dispose(forceDisposeEffect?: boolean): void {\r\n if (this.bumpTexture) {\r\n this.bumpTexture.dispose();\r\n }\r\n\r\n let index = this.getScene().customRenderTargets.indexOf(<RenderTargetTexture>this._refractionRTT);\r\n if (index != -1) {\r\n this.getScene().customRenderTargets.splice(index, 1);\r\n }\r\n index = -1;\r\n index = this.getScene().customRenderTargets.indexOf(<RenderTargetTexture>this._reflectionRTT);\r\n if (index != -1) {\r\n this.getScene().customRenderTargets.splice(index, 1);\r\n }\r\n\r\n if (this._reflectionRTT) {\r\n this._reflectionRTT.dispose();\r\n }\r\n if (this._refractionRTT) {\r\n this._refractionRTT.dispose();\r\n }\r\n\r\n // Remove image-processing observer\r\n if (this._imageProcessingConfiguration && this._imageProcessingObserver) {\r\n this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver);\r\n }\r\n\r\n super.dispose(forceDisposeEffect);\r\n }\r\n\r\n public clone(name: string): WaterMaterial {\r\n return SerializationHelper.Clone(() => new WaterMaterial(name, this.getScene()), this);\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.customType = \"BABYLON.WaterMaterial\";\r\n\r\n serializationObject.renderList = [];\r\n if (this._refractionRTT && this._refractionRTT.renderList) {\r\n for (let i = 0; i < this._refractionRTT.renderList.length; i++) {\r\n serializationObject.renderList.push(this._refractionRTT.renderList[i].id);\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n public getClassName(): string {\r\n return \"WaterMaterial\";\r\n }\r\n\r\n // Statics\r\n public static Parse(source: any, scene: Scene, rootUrl: string): WaterMaterial {\r\n const mat = SerializationHelper.Parse(() => new WaterMaterial(source.name, scene), source, scene, rootUrl);\r\n mat._waitingRenderList = source.renderList;\r\n\r\n return mat;\r\n }\r\n\r\n public static CreateDefaultMesh(name: string, scene: Scene): Mesh {\r\n const mesh = CreateGround(name, { width: 512, height: 512, subdivisions: 32, updatable: false }, scene);\r\n return mesh;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.WaterMaterial\", WaterMaterial);\r\n"]}
|