@babylonjs/materials 8.5.0 → 8.6.1

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.
@@ -1 +1 @@
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 } from \"core/Misc/decorators\";\r\nimport { SerializationHelper } from \"core/Misc/decorators.serialization\";\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.defines\";\r\nimport { ImageProcessingConfiguration } from \"core/Materials/imageProcessingConfiguration\";\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\nimport {\r\n BindBonesParameters,\r\n BindFogParameters,\r\n BindLights,\r\n BindLogDepth,\r\n HandleFallbacksForShadows,\r\n PrepareAttributesForBones,\r\n PrepareAttributesForInstances,\r\n PrepareDefinesForAttributes,\r\n PrepareDefinesForFrameBoundValues,\r\n PrepareDefinesForLights,\r\n PrepareDefinesForMisc,\r\n PrepareUniformsAndSamplersList,\r\n} from \"core/Materials/materialHelper.functions\";\r\n\r\nimport \"core/Rendering/boundingBoxRenderer\";\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 = 0;\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 override 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 override needAlphaBlending(): boolean {\r\n return this.alpha < 1.0;\r\n }\r\n\r\n public override needAlphaTesting(): boolean {\r\n return false;\r\n }\r\n\r\n public override getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n public override 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 PrepareDefinesForFrameBoundValues(scene, engine, this, defines, useInstances ? true : false);\r\n\r\n PrepareDefinesForMisc(mesh, scene, this._useLogarithmicDepth, this.pointsCloud, this.fogEnabled, this.needAlphaTestingForMesh(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 = 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 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 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 PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\r\n 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 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 override 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 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 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 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 BindFogParameters(scene, mesh, this._activeEffect);\r\n\r\n // Log. depth\r\n 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 let boundingBoxRendererEnabled = false;\r\n this._refractionRTT.onBeforeRenderObservable.add(() => {\r\n boundingBoxRendererEnabled = scene.getBoundingBoxRenderer().enabled;\r\n scene.getBoundingBoxRenderer().enabled = false;\r\n });\r\n this._refractionRTT.onAfterRenderObservable.add(() => {\r\n scene.getBoundingBoxRenderer().enabled = boundingBoxRendererEnabled;\r\n });\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 override 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 override 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 override 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 override 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 override clone(name: string): WaterMaterial {\r\n return SerializationHelper.Clone(() => new WaterMaterial(name, this.getScene()), this);\r\n }\r\n\r\n public override 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 override getClassName(): string {\r\n return \"WaterMaterial\";\r\n }\r\n\r\n // Statics\r\n public static override 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 } from \"core/Misc/decorators\";\r\nimport { SerializationHelper } from \"core/Misc/decorators.serialization\";\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.defines\";\r\nimport { ImageProcessingConfiguration } from \"core/Materials/imageProcessingConfiguration\";\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\nimport {\r\n BindBonesParameters,\r\n BindFogParameters,\r\n BindLights,\r\n BindLogDepth,\r\n HandleFallbacksForShadows,\r\n PrepareAttributesForBones,\r\n PrepareAttributesForInstances,\r\n PrepareDefinesForAttributes,\r\n PrepareDefinesForFrameBoundValues,\r\n PrepareDefinesForLights,\r\n PrepareDefinesForMisc,\r\n PrepareUniformsAndSamplersList,\r\n} from \"core/Materials/materialHelper.functions\";\r\n\r\nimport \"core/Rendering/boundingBoxRenderer\";\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 = 0;\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 override 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 override needAlphaBlending(): boolean {\r\n return this.alpha < 1.0;\r\n }\r\n\r\n public override needAlphaTesting(): boolean {\r\n return false;\r\n }\r\n\r\n public override getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n public override 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 PrepareDefinesForFrameBoundValues(scene, engine, this, defines, useInstances ? true : false);\r\n\r\n PrepareDefinesForMisc(mesh, scene, this._useLogarithmicDepth, this.pointsCloud, this.fogEnabled, this.needAlphaTestingForMesh(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 = 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 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 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 PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\r\n 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 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 override 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 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 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 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 BindFogParameters(scene, mesh, this._activeEffect);\r\n\r\n // Log. depth\r\n 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 let boundingBoxRendererEnabled = false;\r\n this._refractionRTT.onBeforeRenderObservable.add(() => {\r\n boundingBoxRendererEnabled = scene.getBoundingBoxRenderer().enabled;\r\n scene.getBoundingBoxRenderer().enabled = false;\r\n });\r\n this._refractionRTT.onAfterRenderObservable.add(() => {\r\n scene.getBoundingBoxRenderer().enabled = boundingBoxRendererEnabled;\r\n });\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 override 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 override 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 override 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 override 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 override clone(name: string): WaterMaterial {\r\n return SerializationHelper.Clone(() => new WaterMaterial(name, this.getScene()), this);\r\n }\r\n\r\n public override 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 override getClassName(): string {\r\n return \"WaterMaterial\";\r\n }\r\n\r\n // Statics\r\n public static override 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"]}