@babylonjs/materials 5.0.0-alpha.6 → 5.0.0-alpha.60
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/cell.fragment.js +14 -14
- package/cell/cell.fragment.js.map +1 -1
- package/cell/cell.vertex.js +13 -13
- package/cell/cell.vertex.js.map +1 -1
- package/cell/cellMaterial.js +19 -19
- package/cell/cellMaterial.js.map +1 -1
- package/cell/index.js +1 -1
- package/custom/customMaterial.js +4 -4
- package/custom/customMaterial.js.map +1 -1
- package/custom/index.js +2 -2
- package/custom/pbrCustomMaterial.d.ts +2 -0
- package/custom/pbrCustomMaterial.js +13 -7
- package/custom/pbrCustomMaterial.js.map +1 -1
- package/fire/fire.fragment.js +8 -8
- package/fire/fire.fragment.js.map +1 -1
- package/fire/fire.vertex.js +10 -10
- package/fire/fire.vertex.js.map +1 -1
- package/fire/fireMaterial.js +21 -21
- package/fire/fireMaterial.js.map +1 -1
- package/fire/index.js +1 -1
- package/fur/fur.fragment.js +14 -14
- package/fur/fur.fragment.js.map +1 -1
- package/fur/fur.vertex.js +13 -13
- package/fur/fur.vertex.js.map +1 -1
- package/fur/furMaterial.js +23 -23
- package/fur/furMaterial.js.map +1 -1
- package/fur/index.js +1 -1
- package/gradient/gradient.fragment.js +14 -14
- package/gradient/gradient.fragment.js.map +1 -1
- package/gradient/gradient.vertex.js +13 -13
- package/gradient/gradient.vertex.js.map +1 -1
- package/gradient/gradientMaterial.js +18 -18
- package/gradient/gradientMaterial.js.map +1 -1
- package/gradient/index.js +1 -1
- package/grid/grid.fragment.js +6 -6
- package/grid/grid.fragment.js.map +1 -1
- package/grid/grid.vertex.js +6 -6
- package/grid/grid.vertex.js.map +1 -1
- package/grid/gridMaterial.js +20 -19
- package/grid/gridMaterial.js.map +1 -1
- package/grid/index.js +1 -1
- package/index.d.ts +15 -15
- package/index.js +15 -15
- package/index.js.map +1 -1
- package/lava/index.js +1 -1
- package/lava/lava.fragment.js +14 -14
- package/lava/lava.fragment.js.map +1 -1
- package/lava/lava.vertex.js +13 -13
- package/lava/lava.vertex.js.map +1 -1
- package/lava/lavaMaterial.js +19 -19
- package/lava/lavaMaterial.js.map +1 -1
- package/legacy/legacy-cell.js +2 -2
- package/legacy/legacy-custom.js +2 -2
- package/legacy/legacy-fire.js +2 -2
- package/legacy/legacy-fur.js +2 -2
- package/legacy/legacy-gradient.js +2 -2
- package/legacy/legacy-grid.js +2 -2
- package/legacy/legacy-lava.js +2 -2
- package/legacy/legacy-mix.js +2 -2
- package/legacy/legacy-normal.js +2 -2
- package/legacy/legacy-shadowOnly.js +2 -2
- package/legacy/legacy-simple.d.ts +1 -1
- package/legacy/legacy-simple.js +2 -2
- package/legacy/legacy-simple.js.map +1 -1
- package/legacy/legacy-sky.d.ts +1 -1
- package/legacy/legacy-sky.js +2 -2
- package/legacy/legacy-sky.js.map +1 -1
- package/legacy/legacy-terrain.d.ts +1 -1
- package/legacy/legacy-terrain.js +2 -2
- package/legacy/legacy-terrain.js.map +1 -1
- package/legacy/legacy-triPlanar.d.ts +1 -1
- package/legacy/legacy-triPlanar.js +2 -2
- package/legacy/legacy-triPlanar.js.map +1 -1
- package/legacy/legacy-water.d.ts +1 -1
- package/legacy/legacy-water.js +2 -2
- package/legacy/legacy-water.js.map +1 -1
- package/legacy/legacy.js +2 -2
- package/mix/index.js +1 -1
- package/mix/mix.fragment.js +14 -14
- package/mix/mix.fragment.js.map +1 -1
- package/mix/mix.vertex.js +13 -13
- package/mix/mix.vertex.js.map +1 -1
- package/mix/mixMaterial.js +19 -19
- package/mix/mixMaterial.js.map +1 -1
- package/normal/index.js +1 -1
- package/normal/normal.fragment.js +14 -14
- package/normal/normal.fragment.js.map +1 -1
- package/normal/normal.vertex.js +13 -13
- package/normal/normal.vertex.js.map +1 -1
- package/normal/normalMaterial.js +19 -19
- package/normal/normalMaterial.js.map +1 -1
- package/package.json +3 -3
- package/shadowOnly/index.js +1 -1
- package/shadowOnly/shadowOnly.fragment.js +13 -13
- package/shadowOnly/shadowOnly.fragment.js.map +1 -1
- package/shadowOnly/shadowOnly.vertex.js +13 -13
- package/shadowOnly/shadowOnly.vertex.js.map +1 -1
- package/shadowOnly/shadowOnlyMaterial.js +18 -18
- package/shadowOnly/shadowOnlyMaterial.js.map +1 -1
- package/simple/index.js +1 -1
- package/simple/simple.fragment.js +14 -14
- package/simple/simple.fragment.js.map +1 -1
- package/simple/simple.vertex.js +13 -13
- package/simple/simple.vertex.js.map +1 -1
- package/simple/simpleMaterial.js +19 -19
- package/simple/simpleMaterial.js.map +1 -1
- package/sky/index.js +1 -1
- package/sky/sky.fragment.js +7 -7
- package/sky/sky.fragment.js.map +1 -1
- package/sky/sky.vertex.js +6 -6
- package/sky/sky.vertex.js.map +1 -1
- package/sky/skyMaterial.js +23 -20
- package/sky/skyMaterial.js.map +1 -1
- package/terrain/index.js +1 -1
- package/terrain/terrain.fragment.js +14 -14
- package/terrain/terrain.fragment.js.map +1 -1
- package/terrain/terrain.vertex.js +13 -13
- package/terrain/terrain.vertex.js.map +1 -1
- package/terrain/terrainMaterial.js +19 -19
- package/terrain/terrainMaterial.js.map +1 -1
- package/triPlanar/index.js +1 -1
- package/triPlanar/triPlanarMaterial.js +19 -19
- package/triPlanar/triPlanarMaterial.js.map +1 -1
- package/triPlanar/triplanar.fragment.js +14 -14
- package/triPlanar/triplanar.fragment.js.map +1 -1
- package/triPlanar/triplanar.vertex.js +14 -14
- package/triPlanar/triplanar.vertex.js.map +1 -1
- package/water/index.js +1 -1
- package/water/water.fragment.js +16 -16
- package/water/water.fragment.js.map +1 -1
- package/water/water.vertex.js +15 -15
- package/water/water.vertex.js.map +1 -1
- package/water/waterMaterial.js +30 -29
- package/water/waterMaterial.js.map +1 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"water.fragment.js","sourceRoot":"","sources":["../../../sourceES6/materialsLibrary/src/water/water.fragment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"water.fragment.js","sourceRoot":"","sources":["../../../sourceES6/materialsLibrary/src/water/water.fragment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,wDAAwD,CAAC;AAChE,OAAO,mEAAmE,CAAC;AAC3E,OAAO,iEAAiE,CAAC;AACzE,OAAO,iEAAiE,CAAC;AACzE,OAAO,4DAA4D,CAAC;AACpE,OAAO,gEAAgE,CAAC;AACxE,OAAO,iEAAiE,CAAC;AACzE,OAAO,qEAAqE,CAAC;AAC7E,OAAO,4DAA4D,CAAC;AACpE,OAAO,+DAA+D,CAAC;AACvE,OAAO,0DAA0D,CAAC;AAClE,OAAO,sDAAsD,CAAC;AAC9D,OAAO,yDAAyD,CAAC;AACjE,OAAO,oDAAoD,CAAC;AAE5D,IAAI,IAAI,GAAG,kBAAkB,CAAC;AAC9B,IAAI,MAAM,GAAG,qhLAmMZ,CAAC;AAEF,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACxC,cAAc;AACd,MAAM,CAAC,IAAI,gBAAgB,GAAG,EAAE,IAAI,MAAA,EAAE,MAAM,QAAA,EAAE,CAAC","sourcesContent":["import { ShaderStore } from \"@babylonjs/core/Engines/shaderStore\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/helperFunctions\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/imageProcessingDeclaration\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/imageProcessingFunctions\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/lightFragmentDeclaration\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/lightUboDeclaration\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/lightsFragmentFunctions\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/shadowsFragmentFunctions\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/clipPlaneFragmentDeclaration\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/logDepthDeclaration\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/fogFragmentDeclaration\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/clipPlaneFragment\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/lightFragment\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/logDepthFragment\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/fogFragment\";\n\nlet name = 'waterPixelShader';\nlet shader = `#ifdef LOGARITHMICDEPTH\n#extension GL_EXT_frag_depth : enable\n#endif\nprecision highp float;\n\nuniform vec4 vEyePosition;\nuniform vec4 vDiffuseColor;\n#ifdef SPECULARTERM\nuniform vec4 vSpecularColor;\n#endif\n\nvarying vec3 vPositionW;\n#ifdef NORMAL\nvarying vec3 vNormalW;\n#endif\n#ifdef VERTEXCOLOR\nvarying vec4 vColor;\n#endif\n\n#include<helperFunctions>\n#include<imageProcessingDeclaration>\n#include<imageProcessingFunctions>\n\n#include<__decl__lightFragment>[0..maxSimultaneousLights]\n#include<lightsFragmentFunctions>\n#include<shadowsFragmentFunctions>\n\n#ifdef BUMP\nvarying vec2 vNormalUV;\n#ifdef BUMPSUPERIMPOSE\nvarying vec2 vNormalUV2;\n#endif\nuniform sampler2D normalSampler;\nuniform vec2 vNormalInfos;\n#endif\nuniform sampler2D refractionSampler;\nuniform sampler2D reflectionSampler;\n\nconst float LOG2=1.442695;\nuniform vec3 cameraPosition;\nuniform vec4 waterColor;\nuniform float colorBlendFactor;\nuniform vec4 waterColor2;\nuniform float colorBlendFactor2;\nuniform float bumpHeight;\nuniform float time;\n\nvarying vec3 vRefractionMapTexCoord;\nvarying vec3 vReflectionMapTexCoord;\nvarying vec3 vPosition;\n#include<clipPlaneFragmentDeclaration>\n#include<logDepthDeclaration>\n\n#include<fogFragmentDeclaration>\nvoid main(void) {\n\n#include<clipPlaneFragment>\nvec3 viewDirectionW=normalize(vEyePosition.xyz-vPositionW);\n\nvec4 baseColor=vec4(1.,1.,1.,1.);\nvec3 diffuseColor=vDiffuseColor.rgb;\n\nfloat alpha=vDiffuseColor.a;\n#ifdef BUMP\n#ifdef BUMPSUPERIMPOSE\nbaseColor=0.6*texture2D(normalSampler,vNormalUV)+0.4*texture2D(normalSampler,vec2(vNormalUV2.x,vNormalUV2.y));\n#else\nbaseColor=texture2D(normalSampler,vNormalUV);\n#endif\nvec3 bumpColor=baseColor.rgb;\n#ifdef ALPHATEST\nif (baseColor.a<0.4)\ndiscard;\n#endif\nbaseColor.rgb*=vNormalInfos.y;\n#else\nvec3 bumpColor=vec3(1.0);\n#endif\n#ifdef VERTEXCOLOR\nbaseColor.rgb*=vColor.rgb;\n#endif\n\n#ifdef NORMAL\nvec2 perturbation=bumpHeight*(baseColor.rg-0.5);\n#ifdef BUMPAFFECTSREFLECTION\nvec3 normalW=normalize(vNormalW+vec3(perturbation.x*8.0,0.0,perturbation.y*8.0));\nif (normalW.y<0.0) {\nnormalW.y=-normalW.y;\n}\n#else\nvec3 normalW=normalize(vNormalW);\n#endif\n#else\nvec3 normalW=vec3(1.0,1.0,1.0);\nvec2 perturbation=bumpHeight*(vec2(1.0,1.0)-0.5);\n#endif\n#ifdef FRESNELSEPARATE\n#ifdef REFLECTION\n\nvec2 projectedRefractionTexCoords=clamp(vRefractionMapTexCoord.xy/vRefractionMapTexCoord.z+perturbation*0.5,0.0,1.0);\nvec4 refractiveColor=texture2D(refractionSampler,projectedRefractionTexCoords);\n#ifdef IS_REFRACTION_LINEAR\nrefractiveColor.rgb=toGammaSpace(refractiveColor.rgb);\n#endif\nvec2 projectedReflectionTexCoords=clamp(vec2(\nvReflectionMapTexCoord.x/vReflectionMapTexCoord.z+perturbation.x*0.3,\nvReflectionMapTexCoord.y/vReflectionMapTexCoord.z+perturbation.y\n),0.0,1.0);\nvec4 reflectiveColor=texture2D(reflectionSampler,projectedReflectionTexCoords);\n#ifdef IS_REFLECTION_LINEAR\nreflectiveColor.rgb=toGammaSpace(reflectiveColor.rgb);\n#endif\nvec3 upVector=vec3(0.0,1.0,0.0);\nfloat fresnelTerm=clamp(abs(pow(dot(viewDirectionW,upVector),3.0)),0.05,0.65);\nfloat IfresnelTerm=1.0-fresnelTerm;\nrefractiveColor=colorBlendFactor*waterColor+(1.0-colorBlendFactor)*refractiveColor;\nreflectiveColor=IfresnelTerm*colorBlendFactor2*waterColor+(1.0-colorBlendFactor2*IfresnelTerm)*reflectiveColor;\nvec4 combinedColor=refractiveColor*fresnelTerm+reflectiveColor*IfresnelTerm;\nbaseColor=combinedColor;\n#endif\n\nvec3 diffuseBase=vec3(0.,0.,0.);\nlightingInfo info;\nfloat shadow=1.;\n#ifdef SPECULARTERM\nfloat glossiness=vSpecularColor.a;\nvec3 specularBase=vec3(0.,0.,0.);\nvec3 specularColor=vSpecularColor.rgb;\n#else\nfloat glossiness=0.;\n#endif\n#include<lightFragment>[0..maxSimultaneousLights]\nvec3 finalDiffuse=clamp(baseColor.rgb,0.0,1.0);\n#ifdef VERTEXALPHA\nalpha*=vColor.a;\n#endif\n#ifdef SPECULARTERM\nvec3 finalSpecular=specularBase*specularColor;\n#else\nvec3 finalSpecular=vec3(0.0);\n#endif\n#else\n#ifdef REFLECTION\n\nvec2 projectedRefractionTexCoords=clamp(vRefractionMapTexCoord.xy/vRefractionMapTexCoord.z+perturbation,0.0,1.0);\nvec4 refractiveColor=texture2D(refractionSampler,projectedRefractionTexCoords);\n#ifdef IS_REFRACTION_LINEAR\nrefractiveColor.rgb=toGammaSpace(refractiveColor.rgb);\n#endif\nvec2 projectedReflectionTexCoords=clamp(vReflectionMapTexCoord.xy/vReflectionMapTexCoord.z+perturbation,0.0,1.0);\nvec4 reflectiveColor=texture2D(reflectionSampler,projectedReflectionTexCoords);\n#ifdef IS_REFLECTION_LINEAR\nreflectiveColor.rgb=toGammaSpace(reflectiveColor.rgb);\n#endif\nvec3 upVector=vec3(0.0,1.0,0.0);\nfloat fresnelTerm=max(dot(viewDirectionW,upVector),0.0);\nvec4 combinedColor=refractiveColor*fresnelTerm+reflectiveColor*(1.0-fresnelTerm);\nbaseColor=colorBlendFactor*waterColor+(1.0-colorBlendFactor)*combinedColor;\n#endif\n\nvec3 diffuseBase=vec3(0.,0.,0.);\nlightingInfo info;\nfloat shadow=1.;\n#ifdef SPECULARTERM\nfloat glossiness=vSpecularColor.a;\nvec3 specularBase=vec3(0.,0.,0.);\nvec3 specularColor=vSpecularColor.rgb;\n#else\nfloat glossiness=0.;\n#endif\n#include<lightFragment>[0..maxSimultaneousLights]\nvec3 finalDiffuse=clamp(baseColor.rgb,0.0,1.0);\n#ifdef VERTEXALPHA\nalpha*=vColor.a;\n#endif\n#ifdef SPECULARTERM\nvec3 finalSpecular=specularBase*specularColor;\n#else\nvec3 finalSpecular=vec3(0.0);\n#endif\n#endif\n\nvec4 color=vec4(finalDiffuse+finalSpecular,alpha);\n#include<logDepthFragment>\n#include<fogFragment>\n\n\n#ifdef IMAGEPROCESSINGPOSTPROCESS\ncolor.rgb=toLinearSpace(color.rgb);\n#elif defined(IMAGEPROCESSING)\ncolor.rgb=toLinearSpace(color.rgb);\ncolor=applyImageProcessing(color);\n#endif\ngl_FragColor=color;\n}\n`;\n\nShaderStore.ShadersStore[name] = shader;\n/** @hidden */\nexport var waterPixelShader = { name, shader };\n"]}
|
package/water/water.vertex.js
CHANGED
@@ -1,20 +1,20 @@
|
|
1
|
-
import {
|
2
|
-
import "@babylonjs/core/Shaders/ShadersInclude/bonesDeclaration";
|
3
|
-
import "@babylonjs/core/Shaders/ShadersInclude/instancesDeclaration";
|
4
|
-
import "@babylonjs/core/Shaders/ShadersInclude/clipPlaneVertexDeclaration";
|
5
|
-
import "@babylonjs/core/Shaders/ShadersInclude/fogVertexDeclaration";
|
6
|
-
import "@babylonjs/core/Shaders/ShadersInclude/lightFragmentDeclaration";
|
7
|
-
import "@babylonjs/core/Shaders/ShadersInclude/lightUboDeclaration";
|
8
|
-
import "@babylonjs/core/Shaders/ShadersInclude/logDepthDeclaration";
|
9
|
-
import "@babylonjs/core/Shaders/ShadersInclude/instancesVertex";
|
10
|
-
import "@babylonjs/core/Shaders/ShadersInclude/bonesVertex";
|
11
|
-
import "@babylonjs/core/Shaders/ShadersInclude/clipPlaneVertex";
|
12
|
-
import "@babylonjs/core/Shaders/ShadersInclude/fogVertex";
|
13
|
-
import "@babylonjs/core/Shaders/ShadersInclude/shadowsVertex";
|
14
|
-
import "@babylonjs/core/Shaders/ShadersInclude/logDepthVertex";
|
1
|
+
import { ShaderStore } from "@babylonjs/core/Engines/shaderStore.js";
|
2
|
+
import "@babylonjs/core/Shaders/ShadersInclude/bonesDeclaration.js";
|
3
|
+
import "@babylonjs/core/Shaders/ShadersInclude/instancesDeclaration.js";
|
4
|
+
import "@babylonjs/core/Shaders/ShadersInclude/clipPlaneVertexDeclaration.js";
|
5
|
+
import "@babylonjs/core/Shaders/ShadersInclude/fogVertexDeclaration.js";
|
6
|
+
import "@babylonjs/core/Shaders/ShadersInclude/lightFragmentDeclaration.js";
|
7
|
+
import "@babylonjs/core/Shaders/ShadersInclude/lightUboDeclaration.js";
|
8
|
+
import "@babylonjs/core/Shaders/ShadersInclude/logDepthDeclaration.js";
|
9
|
+
import "@babylonjs/core/Shaders/ShadersInclude/instancesVertex.js";
|
10
|
+
import "@babylonjs/core/Shaders/ShadersInclude/bonesVertex.js";
|
11
|
+
import "@babylonjs/core/Shaders/ShadersInclude/clipPlaneVertex.js";
|
12
|
+
import "@babylonjs/core/Shaders/ShadersInclude/fogVertex.js";
|
13
|
+
import "@babylonjs/core/Shaders/ShadersInclude/shadowsVertex.js";
|
14
|
+
import "@babylonjs/core/Shaders/ShadersInclude/logDepthVertex.js";
|
15
15
|
var name = 'waterVertexShader';
|
16
16
|
var shader = "precision highp float;\n\nattribute vec3 position;\n#ifdef NORMAL\nattribute vec3 normal;\n#endif\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#ifdef UV2\nattribute vec2 uv2;\n#endif\n#ifdef VERTEXCOLOR\nattribute vec4 color;\n#endif\n#include<bonesDeclaration>\n\n#include<instancesDeclaration>\nuniform mat4 view;\nuniform mat4 viewProjection;\n#ifdef BUMP\nvarying vec2 vNormalUV;\n#ifdef BUMPSUPERIMPOSE\nvarying vec2 vNormalUV2;\n#endif\nuniform mat4 normalMatrix;\nuniform vec2 vNormalInfos;\n#endif\n#ifdef POINTSIZE\nuniform float pointSize;\n#endif\n\nvarying vec3 vPositionW;\n#ifdef NORMAL\nvarying vec3 vNormalW;\n#endif\n#ifdef VERTEXCOLOR\nvarying vec4 vColor;\n#endif\n#include<clipPlaneVertexDeclaration>\n#include<fogVertexDeclaration>\n#include<__decl__lightFragment>[0..maxSimultaneousLights]\n#include<logDepthDeclaration>\n\nuniform mat4 worldReflectionViewProjection;\nuniform vec2 windDirection;\nuniform float waveLength;\nuniform float time;\nuniform float windForce;\nuniform float waveHeight;\nuniform float waveSpeed;\nuniform float waveCount;\n\nvarying vec3 vPosition;\nvarying vec3 vRefractionMapTexCoord;\nvarying vec3 vReflectionMapTexCoord;\nvoid main(void) {\n#include<instancesVertex>\n#include<bonesVertex>\nvec4 worldPos=finalWorld*vec4(position,1.0);\nvPositionW=vec3(worldPos);\n#ifdef NORMAL\nvNormalW=normalize(vec3(finalWorld*vec4(normal,0.0)));\n#endif\n\n#ifndef UV1\nvec2 uv=vec2(0.,0.);\n#endif\n#ifndef UV2\nvec2 uv2=vec2(0.,0.);\n#endif\n#ifdef BUMP\nif (vNormalInfos.x == 0.)\n{\nvNormalUV=vec2(normalMatrix*vec4((uv*1.0)/waveLength+time*windForce*windDirection,1.0,0.0));\n#ifdef BUMPSUPERIMPOSE\nvNormalUV2=vec2(normalMatrix*vec4((uv*0.721)/waveLength+time*1.2*windForce*windDirection,1.0,0.0));\n#endif\n}\nelse\n{\nvNormalUV=vec2(normalMatrix*vec4((uv2*1.0)/waveLength+time*windForce*windDirection ,1.0,0.0));\n#ifdef BUMPSUPERIMPOSE\nvNormalUV2=vec2(normalMatrix*vec4((uv2*0.721)/waveLength+time*1.2*windForce*windDirection ,1.0,0.0));\n#endif\n}\n#endif\n\n#include<clipPlaneVertex>\n\n#include<fogVertex>\n\n#include<shadowsVertex>[0..maxSimultaneousLights]\n\n#ifdef VERTEXCOLOR\nvColor=color;\n#endif\n\n#ifdef POINTSIZE\ngl_PointSize=pointSize;\n#endif\nfloat finalWaveCount=1.0/(waveCount*0.5);\nvec3 p=position;\nfloat newY=(sin(((p.x/finalWaveCount)+time*waveSpeed))*waveHeight*windDirection.x*5.0)\n+(cos(((p.z/finalWaveCount)+time*waveSpeed))*waveHeight*windDirection.y*5.0);\np.y+=abs(newY);\ngl_Position=viewProjection*finalWorld*vec4(p,1.0);\n#ifdef REFLECTION\nworldPos=viewProjection*finalWorld*vec4(p,1.0);\n\nvPosition=position;\nvRefractionMapTexCoord.x=0.5*(worldPos.w+worldPos.x);\nvRefractionMapTexCoord.y=0.5*(worldPos.w+worldPos.y);\nvRefractionMapTexCoord.z=worldPos.w;\nworldPos=worldReflectionViewProjection*vec4(position,1.0);\nvReflectionMapTexCoord.x=0.5*(worldPos.w+worldPos.x);\nvReflectionMapTexCoord.y=0.5*(worldPos.w+worldPos.y);\nvReflectionMapTexCoord.z=worldPos.w;\n#endif\n#include<logDepthVertex>\n}\n";
|
17
|
-
|
17
|
+
ShaderStore.ShadersStore[name] = shader;
|
18
18
|
/** @hidden */
|
19
19
|
export var waterVertexShader = { name: name, shader: shader };
|
20
20
|
//# sourceMappingURL=water.vertex.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"water.vertex.js","sourceRoot":"","sources":["../../../sourceES6/materialsLibrary/src/water/water.vertex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"water.vertex.js","sourceRoot":"","sources":["../../../sourceES6/materialsLibrary/src/water/water.vertex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,yDAAyD,CAAC;AACjE,OAAO,6DAA6D,CAAC;AACrE,OAAO,mEAAmE,CAAC;AAC3E,OAAO,6DAA6D,CAAC;AACrE,OAAO,iEAAiE,CAAC;AACzE,OAAO,4DAA4D,CAAC;AACpE,OAAO,4DAA4D,CAAC;AACpE,OAAO,wDAAwD,CAAC;AAChE,OAAO,oDAAoD,CAAC;AAC5D,OAAO,wDAAwD,CAAC;AAChE,OAAO,kDAAkD,CAAC;AAC1D,OAAO,sDAAsD,CAAC;AAC9D,OAAO,uDAAuD,CAAC;AAE/D,IAAI,IAAI,GAAG,mBAAmB,CAAC;AAC/B,IAAI,MAAM,GAAG,i7FAyHZ,CAAC;AAEF,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACxC,cAAc;AACd,MAAM,CAAC,IAAI,iBAAiB,GAAG,EAAE,IAAI,MAAA,EAAE,MAAM,QAAA,EAAE,CAAC","sourcesContent":["import { ShaderStore } from \"@babylonjs/core/Engines/shaderStore\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/bonesDeclaration\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/instancesDeclaration\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/clipPlaneVertexDeclaration\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/fogVertexDeclaration\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/lightFragmentDeclaration\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/lightUboDeclaration\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/logDepthDeclaration\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/instancesVertex\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/bonesVertex\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/clipPlaneVertex\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/fogVertex\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/shadowsVertex\";\nimport \"@babylonjs/core/Shaders/ShadersInclude/logDepthVertex\";\n\nlet name = 'waterVertexShader';\nlet shader = `precision highp float;\n\nattribute vec3 position;\n#ifdef NORMAL\nattribute vec3 normal;\n#endif\n#ifdef UV1\nattribute vec2 uv;\n#endif\n#ifdef UV2\nattribute vec2 uv2;\n#endif\n#ifdef VERTEXCOLOR\nattribute vec4 color;\n#endif\n#include<bonesDeclaration>\n\n#include<instancesDeclaration>\nuniform mat4 view;\nuniform mat4 viewProjection;\n#ifdef BUMP\nvarying vec2 vNormalUV;\n#ifdef BUMPSUPERIMPOSE\nvarying vec2 vNormalUV2;\n#endif\nuniform mat4 normalMatrix;\nuniform vec2 vNormalInfos;\n#endif\n#ifdef POINTSIZE\nuniform float pointSize;\n#endif\n\nvarying vec3 vPositionW;\n#ifdef NORMAL\nvarying vec3 vNormalW;\n#endif\n#ifdef VERTEXCOLOR\nvarying vec4 vColor;\n#endif\n#include<clipPlaneVertexDeclaration>\n#include<fogVertexDeclaration>\n#include<__decl__lightFragment>[0..maxSimultaneousLights]\n#include<logDepthDeclaration>\n\nuniform mat4 worldReflectionViewProjection;\nuniform vec2 windDirection;\nuniform float waveLength;\nuniform float time;\nuniform float windForce;\nuniform float waveHeight;\nuniform float waveSpeed;\nuniform float waveCount;\n\nvarying vec3 vPosition;\nvarying vec3 vRefractionMapTexCoord;\nvarying vec3 vReflectionMapTexCoord;\nvoid main(void) {\n#include<instancesVertex>\n#include<bonesVertex>\nvec4 worldPos=finalWorld*vec4(position,1.0);\nvPositionW=vec3(worldPos);\n#ifdef NORMAL\nvNormalW=normalize(vec3(finalWorld*vec4(normal,0.0)));\n#endif\n\n#ifndef UV1\nvec2 uv=vec2(0.,0.);\n#endif\n#ifndef UV2\nvec2 uv2=vec2(0.,0.);\n#endif\n#ifdef BUMP\nif (vNormalInfos.x == 0.)\n{\nvNormalUV=vec2(normalMatrix*vec4((uv*1.0)/waveLength+time*windForce*windDirection,1.0,0.0));\n#ifdef BUMPSUPERIMPOSE\nvNormalUV2=vec2(normalMatrix*vec4((uv*0.721)/waveLength+time*1.2*windForce*windDirection,1.0,0.0));\n#endif\n}\nelse\n{\nvNormalUV=vec2(normalMatrix*vec4((uv2*1.0)/waveLength+time*windForce*windDirection ,1.0,0.0));\n#ifdef BUMPSUPERIMPOSE\nvNormalUV2=vec2(normalMatrix*vec4((uv2*0.721)/waveLength+time*1.2*windForce*windDirection ,1.0,0.0));\n#endif\n}\n#endif\n\n#include<clipPlaneVertex>\n\n#include<fogVertex>\n\n#include<shadowsVertex>[0..maxSimultaneousLights]\n\n#ifdef VERTEXCOLOR\nvColor=color;\n#endif\n\n#ifdef POINTSIZE\ngl_PointSize=pointSize;\n#endif\nfloat finalWaveCount=1.0/(waveCount*0.5);\nvec3 p=position;\nfloat newY=(sin(((p.x/finalWaveCount)+time*waveSpeed))*waveHeight*windDirection.x*5.0)\n+(cos(((p.z/finalWaveCount)+time*waveSpeed))*waveHeight*windDirection.y*5.0);\np.y+=abs(newY);\ngl_Position=viewProjection*finalWorld*vec4(p,1.0);\n#ifdef REFLECTION\nworldPos=viewProjection*finalWorld*vec4(p,1.0);\n\nvPosition=position;\nvRefractionMapTexCoord.x=0.5*(worldPos.w+worldPos.x);\nvRefractionMapTexCoord.y=0.5*(worldPos.w+worldPos.y);\nvRefractionMapTexCoord.z=worldPos.w;\nworldPos=worldReflectionViewProjection*vec4(position,1.0);\nvReflectionMapTexCoord.x=0.5*(worldPos.w+worldPos.x);\nvReflectionMapTexCoord.y=0.5*(worldPos.w+worldPos.y);\nvReflectionMapTexCoord.z=worldPos.w;\n#endif\n#include<logDepthVertex>\n}\n`;\n\nShaderStore.ShadersStore[name] = shader;\n/** @hidden */\nexport var waterVertexShader = { name, shader };\n"]}
|
package/water/waterMaterial.js
CHANGED
@@ -1,23 +1,23 @@
|
|
1
1
|
import { __decorate, __extends } from "tslib";
|
2
|
-
import { serializeAsVector2, serializeAsTexture, serialize, expandToProperty, serializeAsColor3, SerializationHelper } from "@babylonjs/core/Misc/decorators";
|
3
|
-
import { Matrix, Vector2, Vector3 } from "@babylonjs/core/Maths/math.vector";
|
4
|
-
import { Color3 } from "@babylonjs/core/Maths/math.color";
|
5
|
-
import { Plane } from '@babylonjs/core/Maths/math.plane';
|
6
|
-
import { Constants } from "@babylonjs/core/Engines/constants";
|
7
|
-
import { SmartArray } from "@babylonjs/core/Misc/smartArray";
|
8
|
-
import { RenderTargetTexture } from "@babylonjs/core/Materials/Textures/renderTargetTexture";
|
9
|
-
import { MaterialDefines } from "@babylonjs/core/Materials/materialDefines";
|
10
|
-
import { ImageProcessingConfiguration } from "@babylonjs/core/Materials/imageProcessingConfiguration";
|
11
|
-
import { MaterialHelper } from "@babylonjs/core/Materials/materialHelper";
|
12
|
-
import { PushMaterial } from "@babylonjs/core/Materials/pushMaterial";
|
13
|
-
import { MaterialFlags } from "@babylonjs/core/Materials/materialFlags";
|
14
|
-
import { VertexBuffer } from "@babylonjs/core/
|
15
|
-
import {
|
16
|
-
import {
|
17
|
-
import
|
18
|
-
import "./water.
|
19
|
-
import
|
20
|
-
import {
|
2
|
+
import { serializeAsVector2, serializeAsTexture, serialize, expandToProperty, serializeAsColor3, SerializationHelper } from "@babylonjs/core/Misc/decorators.js";
|
3
|
+
import { Matrix, Vector2, Vector3 } from "@babylonjs/core/Maths/math.vector.js";
|
4
|
+
import { Color3 } from "@babylonjs/core/Maths/math.color.js";
|
5
|
+
import { Plane } from '@babylonjs/core/Maths/math.plane.js';
|
6
|
+
import { Constants } from "@babylonjs/core/Engines/constants.js";
|
7
|
+
import { SmartArray } from "@babylonjs/core/Misc/smartArray.js";
|
8
|
+
import { RenderTargetTexture } from "@babylonjs/core/Materials/Textures/renderTargetTexture.js";
|
9
|
+
import { MaterialDefines } from "@babylonjs/core/Materials/materialDefines.js";
|
10
|
+
import { ImageProcessingConfiguration } from "@babylonjs/core/Materials/imageProcessingConfiguration.js";
|
11
|
+
import { MaterialHelper } from "@babylonjs/core/Materials/materialHelper.js";
|
12
|
+
import { PushMaterial } from "@babylonjs/core/Materials/pushMaterial.js";
|
13
|
+
import { MaterialFlags } from "@babylonjs/core/Materials/materialFlags.js";
|
14
|
+
import { VertexBuffer } from "@babylonjs/core/Buffers/buffer.js";
|
15
|
+
import { Scene } from "@babylonjs/core/scene.js";
|
16
|
+
import { RegisterClass } from '@babylonjs/core/Misc/typeStore.js';
|
17
|
+
import "./water.fragment.js";
|
18
|
+
import "./water.vertex.js";
|
19
|
+
import { EffectFallbacks } from '@babylonjs/core/Materials/effectFallbacks.js';
|
20
|
+
import { CreateGround } from "@babylonjs/core/Meshes/Builders/groundBuilder.js";
|
21
21
|
var WaterMaterialDefines = /** @class */ (function (_super) {
|
22
22
|
__extends(WaterMaterialDefines, _super);
|
23
23
|
function WaterMaterialDefines() {
|
@@ -44,6 +44,7 @@ var WaterMaterialDefines = /** @class */ (function (_super) {
|
|
44
44
|
_this.INSTANCES = false;
|
45
45
|
_this.SPECULARTERM = false;
|
46
46
|
_this.LOGARITHMICDEPTH = false;
|
47
|
+
_this.USE_REVERSE_DEPTHBUFFER = false;
|
47
48
|
_this.FRESNELSEPARATE = false;
|
48
49
|
_this.BUMPSUPERIMPOSE = false;
|
49
50
|
_this.BUMPAFFECTSREFLECTION = false;
|
@@ -244,10 +245,10 @@ var WaterMaterial = /** @class */ (function (_super) {
|
|
244
245
|
return true;
|
245
246
|
}
|
246
247
|
}
|
247
|
-
if (!subMesh.
|
248
|
-
subMesh.
|
248
|
+
if (!subMesh.materialDefines) {
|
249
|
+
subMesh.materialDefines = new WaterMaterialDefines();
|
249
250
|
}
|
250
|
-
var defines = subMesh.
|
251
|
+
var defines = subMesh.materialDefines;
|
251
252
|
var scene = this.getScene();
|
252
253
|
if (this._isReadyForSubMesh(subMesh)) {
|
253
254
|
return true;
|
@@ -301,7 +302,7 @@ var WaterMaterial = /** @class */ (function (_super) {
|
|
301
302
|
this._mesh = mesh;
|
302
303
|
if (this._waitingRenderList) {
|
303
304
|
for (var i = 0; i < this._waitingRenderList.length; i++) {
|
304
|
-
this.addToRenderList(scene.
|
305
|
+
this.addToRenderList(scene.getNodeById(this._waitingRenderList[i]));
|
305
306
|
}
|
306
307
|
this._waitingRenderList = null;
|
307
308
|
}
|
@@ -377,7 +378,7 @@ var WaterMaterial = /** @class */ (function (_super) {
|
|
377
378
|
onCompiled: this.onCompiled,
|
378
379
|
onError: this.onError,
|
379
380
|
indexParameters: { maxSimultaneousLights: this._maxSimultaneousLights }
|
380
|
-
}, engine), defines);
|
381
|
+
}, engine), defines, this._materialContext);
|
381
382
|
}
|
382
383
|
if (!subMesh.effect || !subMesh.effect.isReady()) {
|
383
384
|
return false;
|
@@ -388,7 +389,7 @@ var WaterMaterial = /** @class */ (function (_super) {
|
|
388
389
|
};
|
389
390
|
WaterMaterial.prototype.bindForSubMesh = function (world, mesh, subMesh) {
|
390
391
|
var scene = this.getScene();
|
391
|
-
var defines = subMesh.
|
392
|
+
var defines = subMesh.materialDefines;
|
392
393
|
if (!defines) {
|
393
394
|
return;
|
394
395
|
}
|
@@ -415,7 +416,7 @@ var WaterMaterial = /** @class */ (function (_super) {
|
|
415
416
|
if (this.pointsCloud) {
|
416
417
|
this._activeEffect.setFloat("pointSize", this.pointSize);
|
417
418
|
}
|
418
|
-
|
419
|
+
scene.bindEyePosition(effect);
|
419
420
|
}
|
420
421
|
this._activeEffect.setColor4("vDiffuseColor", this.diffuseColor, this.alpha * mesh.visibility);
|
421
422
|
if (defines.SPECULARTERM) {
|
@@ -526,7 +527,7 @@ var WaterMaterial = /** @class */ (function (_super) {
|
|
526
527
|
scene.clipPlane = clipPlane;
|
527
528
|
// Transform
|
528
529
|
scene.setTransformMatrix(savedViewMatrix, scene.getProjectionMatrix());
|
529
|
-
scene.getEngine().cullBackFaces =
|
530
|
+
scene.getEngine().cullBackFaces = null;
|
530
531
|
scene._mirroredCameraPosition = null;
|
531
532
|
};
|
532
533
|
};
|
@@ -609,7 +610,7 @@ var WaterMaterial = /** @class */ (function (_super) {
|
|
609
610
|
return mat;
|
610
611
|
};
|
611
612
|
WaterMaterial.CreateDefaultMesh = function (name, scene) {
|
612
|
-
var mesh =
|
613
|
+
var mesh = CreateGround(name, { width: 512, height: 512, subdivisions: 32, updatable: false }, scene);
|
613
614
|
return mesh;
|
614
615
|
};
|
615
616
|
__decorate([
|
@@ -699,5 +700,5 @@ var WaterMaterial = /** @class */ (function (_super) {
|
|
699
700
|
return WaterMaterial;
|
700
701
|
}(PushMaterial));
|
701
702
|
export { WaterMaterial };
|
702
|
-
|
703
|
+
RegisterClass("BABYLON.WaterMaterial", WaterMaterial);
|
703
704
|
//# sourceMappingURL=waterMaterial.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"waterMaterial.js","sourceRoot":"","sources":["../../../sourceES6/materialsLibrary/src/water/waterMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"@babylonjs/core/types\";\nimport { serializeAsVector2, serializeAsTexture, serialize, expandToProperty, serializeAsColor3, SerializationHelper } from \"@babylonjs/core/Misc/decorators\";\nimport { Matrix, Vector2, Vector3 } from \"@babylonjs/core/Maths/math.vector\";\nimport { Color3 } from \"@babylonjs/core/Maths/math.color\";\nimport { Plane } from '@babylonjs/core/Maths/math.plane';\nimport { IAnimatable } from '@babylonjs/core/Animations/animatable.interface';\nimport { Constants } from \"@babylonjs/core/Engines/constants\";\nimport { SmartArray } from \"@babylonjs/core/Misc/smartArray\";\nimport { Observer } from '@babylonjs/core/Misc/observable';\nimport { BaseTexture } from \"@babylonjs/core/Materials/Textures/baseTexture\";\nimport { RenderTargetTexture } from \"@babylonjs/core/Materials/Textures/renderTargetTexture\";\nimport { IEffectCreationOptions } from \"@babylonjs/core/Materials/effect\";\nimport { MaterialDefines } from \"@babylonjs/core/Materials/materialDefines\";\nimport { IImageProcessingConfigurationDefines, ImageProcessingConfiguration } from \"@babylonjs/core/Materials/imageProcessingConfiguration\";\nimport { MaterialHelper } from \"@babylonjs/core/Materials/materialHelper\";\nimport { PushMaterial } from \"@babylonjs/core/Materials/pushMaterial\";\nimport { MaterialFlags } from \"@babylonjs/core/Materials/materialFlags\";\nimport { VertexBuffer } from \"@babylonjs/core/Meshes/buffer\";\nimport { AbstractMesh } from \"@babylonjs/core/Meshes/abstractMesh\";\nimport { SubMesh } from \"@babylonjs/core/Meshes/subMesh\";\nimport { Mesh } from \"@babylonjs/core/Meshes/mesh\";\nimport { Camera } from \"@babylonjs/core/Cameras/camera\";\nimport { Scene } from \"@babylonjs/core/scene\";\nimport { _TypeStore } from '@babylonjs/core/Misc/typeStore';\n\nimport \"./water.fragment\";\nimport \"./water.vertex\";\nimport { EffectFallbacks } from '@babylonjs/core/Materials/effectFallbacks';\n\nclass WaterMaterialDefines extends MaterialDefines implements IImageProcessingConfigurationDefines {\n public BUMP = false;\n public REFLECTION = false;\n public CLIPPLANE = false;\n public CLIPPLANE2 = false;\n public CLIPPLANE3 = false;\n public CLIPPLANE4 = false;\n public CLIPPLANE5 = false;\n public CLIPPLANE6 = false;\n public ALPHATEST = false;\n public DEPTHPREPASS = false;\n public POINTSIZE = false;\n public FOG = false;\n public NORMAL = false;\n public UV1 = false;\n public UV2 = false;\n public VERTEXCOLOR = false;\n public VERTEXALPHA = false;\n public NUM_BONE_INFLUENCERS = 0;\n public BonesPerMesh = 0;\n public INSTANCES = false;\n public SPECULARTERM = false;\n public LOGARITHMICDEPTH = false;\n public FRESNELSEPARATE = false;\n public BUMPSUPERIMPOSE = false;\n public BUMPAFFECTSREFLECTION = false;\n\n public IMAGEPROCESSING = false;\n public VIGNETTE = false;\n public VIGNETTEBLENDMODEMULTIPLY = false;\n public VIGNETTEBLENDMODEOPAQUE = false;\n public TONEMAPPING = false;\n public TONEMAPPING_ACES = false;\n public CONTRAST = false;\n public EXPOSURE = false;\n public COLORCURVES = false;\n public COLORGRADING = false;\n public COLORGRADING3D = false;\n public SAMPLER3DGREENDEPTH = false;\n public SAMPLER3DBGRMAP = false;\n public IMAGEPROCESSINGPOSTPROCESS = false;\n\n constructor() {\n super();\n this.rebuild();\n }\n}\n\nexport class WaterMaterial extends PushMaterial {\n /*\n * Public members\n */\n @serializeAsTexture(\"bumpTexture\")\n private _bumpTexture: BaseTexture;\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\n public bumpTexture: BaseTexture;\n\n @serializeAsColor3()\n public diffuseColor = new Color3(1, 1, 1);\n\n @serializeAsColor3()\n public specularColor = new Color3(0, 0, 0);\n\n @serialize()\n public specularPower = 64;\n\n @serialize(\"disableLighting\")\n private _disableLighting = false;\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\n public disableLighting: boolean;\n\n @serialize(\"maxSimultaneousLights\")\n private _maxSimultaneousLights = 4;\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\n public maxSimultaneousLights: number;\n\n /**\n * Defines the wind force.\n */\n @serialize()\n public windForce: number = 6;\n /**\n * Defines the direction of the wind in the plane (X, Z).\n */\n @serializeAsVector2()\n public windDirection: Vector2 = new Vector2(0, 1);\n /**\n * Defines the height of the waves.\n */\n @serialize()\n public waveHeight: number = 0.4;\n /**\n * Defines the bump height related to the bump map.\n */\n @serialize()\n public bumpHeight: number = 0.4;\n /**\n * Defines wether or not: to add a smaller moving bump to less steady waves.\n */\n @serialize(\"bumpSuperimpose\")\n private _bumpSuperimpose = false;\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\n public bumpSuperimpose: boolean;\n\n /**\n * Defines wether or not color refraction and reflection differently with .waterColor2 and .colorBlendFactor2. Non-linear (physically correct) fresnel.\n */\n @serialize(\"fresnelSeparate\")\n private _fresnelSeparate = false;\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\n public fresnelSeparate: boolean;\n\n /**\n * Defines wether or not bump Wwves modify the reflection.\n */\n @serialize(\"bumpAffectsReflection\")\n private _bumpAffectsReflection = false;\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\n public bumpAffectsReflection: boolean;\n\n /**\n * Defines the water color blended with the refraction (near).\n */\n @serializeAsColor3()\n public waterColor: Color3 = new Color3(0.1, 0.1, 0.6);\n /**\n * Defines the blend factor related to the water color.\n */\n @serialize()\n public colorBlendFactor: number = 0.2;\n /**\n * Defines the water color blended with the reflection (far).\n */\n @serializeAsColor3()\n public waterColor2: Color3 = new Color3(0.1, 0.1, 0.6);\n /**\n * Defines the blend factor related to the water color (reflection, far).\n */\n @serialize()\n public colorBlendFactor2: number = 0.2;\n /**\n * Defines the maximum length of a wave.\n */\n @serialize()\n public waveLength: number = 0.1;\n\n /**\n * Defines the waves speed.\n */\n @serialize()\n public waveSpeed: number = 1.0;\n\n /**\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.\n */\n @serialize()\n public waveCount: number = 20;\n /**\n * Sets or gets whether or not automatic clipping should be enabled or not. Setting to true will save performances and\n * will avoid calculating useless pixels in the pixel shader of the water material.\n */\n @serialize()\n public disableClipPlane: boolean = false;\n\n protected _renderTargets = new SmartArray<RenderTargetTexture>(16);\n\n /*\n * Private members\n */\n private _mesh: Nullable<AbstractMesh> = null;\n\n private _refractionRTT: Nullable<RenderTargetTexture>;\n private _reflectionRTT: Nullable<RenderTargetTexture>;\n\n private _reflectionTransform: Matrix = Matrix.Zero();\n private _lastTime: number = 0;\n private _lastDeltaTime: number = 0;\n\n private _useLogarithmicDepth: boolean;\n\n private _waitingRenderList: Nullable<string[]>;\n\n private _imageProcessingConfiguration: Nullable<ImageProcessingConfiguration>;\n private _imageProcessingObserver: Nullable<Observer<ImageProcessingConfiguration>>;\n\n /**\n * Gets a boolean indicating that current material needs to register RTT\n */\n public get hasRenderTargetTextures(): boolean {\n return true;\n }\n\n /**\n * Constructor\n */\n constructor(name: string, scene: Scene, public renderTargetSize: Vector2 = new Vector2(512, 512)) {\n super(name, scene);\n\n this._createRenderTargets(scene, renderTargetSize);\n\n // Create render targets\n this.getRenderTargetTextures = (): SmartArray<RenderTargetTexture> => {\n this._renderTargets.reset();\n this._renderTargets.push(<RenderTargetTexture>this._reflectionRTT);\n this._renderTargets.push(<RenderTargetTexture>this._refractionRTT);\n\n return this._renderTargets;\n };\n\n this._imageProcessingConfiguration = this.getScene().imageProcessingConfiguration;\n if (this._imageProcessingConfiguration) {\n this._imageProcessingObserver = this._imageProcessingConfiguration.onUpdateParameters.add(() => {\n this._markAllSubMeshesAsImageProcessingDirty();\n });\n }\n }\n\n @serialize()\n public get useLogarithmicDepth(): boolean {\n return this._useLogarithmicDepth;\n }\n\n public set useLogarithmicDepth(value: boolean) {\n this._useLogarithmicDepth = value && this.getScene().getEngine().getCaps().fragmentDepthSupported;\n this._markAllSubMeshesAsMiscDirty();\n }\n\n // Get / Set\n public get refractionTexture(): Nullable<RenderTargetTexture> {\n return this._refractionRTT;\n }\n\n public get reflectionTexture(): Nullable<RenderTargetTexture> {\n return this._reflectionRTT;\n }\n\n // Methods\n public addToRenderList(node: any): void {\n if (this._refractionRTT && this._refractionRTT.renderList) {\n this._refractionRTT.renderList.push(node);\n }\n\n if (this._reflectionRTT && this._reflectionRTT.renderList) {\n this._reflectionRTT.renderList.push(node);\n }\n }\n\n public enableRenderTargets(enable: boolean): void {\n var refreshRate = enable ? 1 : 0;\n\n if (this._refractionRTT) {\n this._refractionRTT.refreshRate = refreshRate;\n }\n\n if (this._reflectionRTT) {\n this._reflectionRTT.refreshRate = refreshRate;\n }\n }\n\n public getRenderList(): Nullable<AbstractMesh[]> {\n return this._refractionRTT ? this._refractionRTT.renderList : [];\n }\n\n public get renderTargetsEnabled(): boolean {\n return !(this._refractionRTT && this._refractionRTT.refreshRate === 0);\n }\n\n public needAlphaBlending(): boolean {\n return (this.alpha < 1.0);\n }\n\n public needAlphaTesting(): boolean {\n return false;\n }\n\n public getAlphaTestTexture(): Nullable<BaseTexture> {\n return null;\n }\n\n public isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\n if (this.isFrozen) {\n if (subMesh.effect && subMesh.effect._wasPreviouslyReady) {\n return true;\n }\n }\n\n if (!subMesh._materialDefines) {\n subMesh._materialDefines = new WaterMaterialDefines();\n }\n\n var defines = <WaterMaterialDefines>subMesh._materialDefines;\n var scene = this.getScene();\n\n if (this._isReadyForSubMesh(subMesh)) {\n return true;\n }\n\n var engine = scene.getEngine();\n\n // Textures\n if (defines._areTexturesDirty) {\n defines._needUVs = false;\n if (scene.texturesEnabled) {\n if (this.bumpTexture && MaterialFlags.BumpTextureEnabled) {\n if (!this.bumpTexture.isReady()) {\n return false;\n } else {\n defines._needUVs = true;\n defines.BUMP = true;\n }\n }\n\n if (MaterialFlags.ReflectionTextureEnabled) {\n defines.REFLECTION = true;\n }\n }\n }\n\n MaterialHelper.PrepareDefinesForFrameBoundValues(scene, engine, defines, useInstances ? true : false);\n\n MaterialHelper.PrepareDefinesForMisc(mesh, scene, this._useLogarithmicDepth, this.pointsCloud, this.fogEnabled, this._shouldTurnAlphaTestOn(mesh), defines);\n\n if (defines._areMiscDirty) {\n if (this._fresnelSeparate) {\n defines.FRESNELSEPARATE = true;\n }\n\n if (this._bumpSuperimpose) {\n defines.BUMPSUPERIMPOSE = true;\n }\n\n if (this._bumpAffectsReflection) {\n defines.BUMPAFFECTSREFLECTION = true;\n }\n }\n\n // Lights\n defines._needNormals = MaterialHelper.PrepareDefinesForLights(scene, mesh, defines, true, this._maxSimultaneousLights, this._disableLighting);\n\n // Image processing\n if (defines._areImageProcessingDirty && this._imageProcessingConfiguration) {\n if (!this._imageProcessingConfiguration.isReady()) {\n return false;\n }\n\n this._imageProcessingConfiguration.prepareDefines(defines);\n\n defines.IS_REFLECTION_LINEAR = (this.reflectionTexture != null && !this.reflectionTexture.gammaSpace);\n defines.IS_REFRACTION_LINEAR = (this.refractionTexture != null && !this.refractionTexture.gammaSpace);\n }\n\n // Attribs\n MaterialHelper.PrepareDefinesForAttributes(mesh, defines, true, true);\n\n // Configure this\n this._mesh = mesh;\n\n if (this._waitingRenderList) {\n for (var i = 0; i < this._waitingRenderList.length; i++) {\n this.addToRenderList(scene.getNodeByID(this._waitingRenderList[i]));\n }\n\n this._waitingRenderList = null;\n }\n\n // Get correct effect\n if (defines.isDirty) {\n defines.markAsProcessed();\n scene.resetCachedMaterial();\n\n // Fallbacks\n var fallbacks = new EffectFallbacks();\n if (defines.FOG) {\n fallbacks.addFallback(1, \"FOG\");\n }\n\n if (defines.LOGARITHMICDEPTH) {\n fallbacks.addFallback(0, \"LOGARITHMICDEPTH\");\n }\n\n MaterialHelper.HandleFallbacksForShadows(defines, fallbacks, this.maxSimultaneousLights);\n\n if (defines.NUM_BONE_INFLUENCERS > 0) {\n fallbacks.addCPUSkinningFallback(0, mesh);\n }\n\n //Attributes\n var attribs = [VertexBuffer.PositionKind];\n\n if (defines.NORMAL) {\n attribs.push(VertexBuffer.NormalKind);\n }\n\n if (defines.UV1) {\n attribs.push(VertexBuffer.UVKind);\n }\n\n if (defines.UV2) {\n attribs.push(VertexBuffer.UV2Kind);\n }\n\n if (defines.VERTEXCOLOR) {\n attribs.push(VertexBuffer.ColorKind);\n }\n\n MaterialHelper.PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\n MaterialHelper.PrepareAttributesForInstances(attribs, defines);\n\n // Legacy browser patch\n var shaderName = \"water\";\n var join = defines.toString();\n var uniforms = [\"world\", \"view\", \"viewProjection\", \"vEyePosition\", \"vLightsType\", \"vDiffuseColor\", \"vSpecularColor\",\n \"vFogInfos\", \"vFogColor\", \"pointSize\",\n \"vNormalInfos\",\n \"mBones\",\n \"vClipPlane\", \"vClipPlane2\", \"vClipPlane3\", \"vClipPlane4\", \"vClipPlane5\", \"vClipPlane6\", \"normalMatrix\",\n \"logarithmicDepthConstant\",\n\n // Water\n \"worldReflectionViewProjection\", \"windDirection\", \"waveLength\", \"time\", \"windForce\",\n \"cameraPosition\", \"bumpHeight\", \"waveHeight\", \"waterColor\", \"waterColor2\", \"colorBlendFactor\", \"colorBlendFactor2\", \"waveSpeed\",\n \"waveCount\"\n ];\n var samplers = [\"normalSampler\",\n // Water\n \"refractionSampler\", \"reflectionSampler\"\n ];\n var uniformBuffers = new Array<string>();\n\n if (ImageProcessingConfiguration) {\n ImageProcessingConfiguration.PrepareUniforms(uniforms, defines);\n ImageProcessingConfiguration.PrepareSamplers(samplers, defines);\n }\n\n MaterialHelper.PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\n uniformsNames: uniforms,\n uniformBuffersNames: uniformBuffers,\n samplers: samplers,\n defines: defines,\n maxSimultaneousLights: this.maxSimultaneousLights\n });\n subMesh.setEffect(scene.getEngine().createEffect(shaderName,\n <IEffectCreationOptions>{\n attributes: attribs,\n uniformsNames: uniforms,\n uniformBuffersNames: uniformBuffers,\n samplers: samplers,\n defines: join,\n fallbacks: fallbacks,\n onCompiled: this.onCompiled,\n onError: this.onError,\n indexParameters: { maxSimultaneousLights: this._maxSimultaneousLights }\n }, engine), defines);\n\n }\n if (!subMesh.effect || !subMesh.effect.isReady()) {\n return false;\n }\n\n defines._renderId = scene.getRenderId();\n subMesh.effect._wasPreviouslyReady = true;\n\n return true;\n }\n\n public bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\n var scene = this.getScene();\n\n var defines = <WaterMaterialDefines>subMesh._materialDefines;\n if (!defines) {\n return;\n }\n\n var effect = subMesh.effect;\n if (!effect || !this._mesh) {\n return;\n }\n this._activeEffect = effect;\n\n // Matrices\n this.bindOnlyWorldMatrix(world);\n this._activeEffect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\n\n // Bones\n MaterialHelper.BindBonesParameters(mesh, this._activeEffect);\n\n if (this._mustRebind(scene, effect)) {\n // Textures\n if (this.bumpTexture && MaterialFlags.BumpTextureEnabled) {\n this._activeEffect.setTexture(\"normalSampler\", this.bumpTexture);\n\n this._activeEffect.setFloat2(\"vNormalInfos\", this.bumpTexture.coordinatesIndex, this.bumpTexture.level);\n this._activeEffect.setMatrix(\"normalMatrix\", this.bumpTexture.getTextureMatrix());\n }\n // Clip plane\n MaterialHelper.BindClipPlane(this._activeEffect, scene);\n\n // Point size\n if (this.pointsCloud) {\n this._activeEffect.setFloat(\"pointSize\", this.pointSize);\n }\n\n MaterialHelper.BindEyePosition(effect, scene);\n }\n\n this._activeEffect.setColor4(\"vDiffuseColor\", this.diffuseColor, this.alpha * mesh.visibility);\n\n if (defines.SPECULARTERM) {\n this._activeEffect.setColor4(\"vSpecularColor\", this.specularColor, this.specularPower);\n }\n\n if (scene.lightsEnabled && !this.disableLighting) {\n MaterialHelper.BindLights(scene, mesh, this._activeEffect, defines, this.maxSimultaneousLights);\n }\n\n // View\n if (scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) {\n this._activeEffect.setMatrix(\"view\", scene.getViewMatrix());\n }\n\n // Fog\n MaterialHelper.BindFogParameters(scene, mesh, this._activeEffect);\n\n // Log. depth\n MaterialHelper.BindLogDepth(defines, this._activeEffect, scene);\n\n // Water\n if (MaterialFlags.ReflectionTextureEnabled) {\n this._activeEffect.setTexture(\"refractionSampler\", this._refractionRTT);\n this._activeEffect.setTexture(\"reflectionSampler\", this._reflectionRTT);\n }\n\n var wrvp = this._mesh.getWorldMatrix().multiply(this._reflectionTransform).multiply(scene.getProjectionMatrix());\n\n // Add delta time. Prevent adding delta time if it hasn't changed.\n let deltaTime = scene.getEngine().getDeltaTime();\n if (deltaTime !== this._lastDeltaTime) {\n this._lastDeltaTime = deltaTime;\n this._lastTime += this._lastDeltaTime;\n }\n\n this._activeEffect.setMatrix(\"worldReflectionViewProjection\", wrvp);\n this._activeEffect.setVector2(\"windDirection\", this.windDirection);\n this._activeEffect.setFloat(\"waveLength\", this.waveLength);\n this._activeEffect.setFloat(\"time\", this._lastTime / 100000);\n this._activeEffect.setFloat(\"windForce\", this.windForce);\n this._activeEffect.setFloat(\"waveHeight\", this.waveHeight);\n this._activeEffect.setFloat(\"bumpHeight\", this.bumpHeight);\n this._activeEffect.setColor4(\"waterColor\", this.waterColor, 1.0);\n this._activeEffect.setFloat(\"colorBlendFactor\", this.colorBlendFactor);\n this._activeEffect.setColor4(\"waterColor2\", this.waterColor2, 1.0);\n this._activeEffect.setFloat(\"colorBlendFactor2\", this.colorBlendFactor2);\n this._activeEffect.setFloat(\"waveSpeed\", this.waveSpeed);\n this._activeEffect.setFloat(\"waveCount\", this.waveCount);\n\n // image processing\n if (this._imageProcessingConfiguration && !this._imageProcessingConfiguration.applyByPostProcess) {\n this._imageProcessingConfiguration.bind(this._activeEffect);\n }\n\n this._afterBind(mesh, this._activeEffect);\n }\n\n private _createRenderTargets(scene: Scene, renderTargetSize: Vector2): void {\n // Render targets\n this._refractionRTT = new RenderTargetTexture(name + \"_refraction\", { width: renderTargetSize.x, height: renderTargetSize.y }, scene, false, true);\n this._refractionRTT.wrapU = Constants.TEXTURE_MIRROR_ADDRESSMODE;\n this._refractionRTT.wrapV = Constants.TEXTURE_MIRROR_ADDRESSMODE;\n this._refractionRTT.ignoreCameraViewport = true;\n\n this._reflectionRTT = new RenderTargetTexture(name + \"_reflection\", { width: renderTargetSize.x, height: renderTargetSize.y }, scene, false, true);\n this._reflectionRTT.wrapU = Constants.TEXTURE_MIRROR_ADDRESSMODE;\n this._reflectionRTT.wrapV = Constants.TEXTURE_MIRROR_ADDRESSMODE;\n this._reflectionRTT.ignoreCameraViewport = true;\n\n var isVisible: boolean;\n var clipPlane: Nullable<Plane> = null;\n var savedViewMatrix: Matrix;\n var mirrorMatrix = Matrix.Zero();\n\n this._refractionRTT.onBeforeRender = () => {\n if (this._mesh) {\n isVisible = this._mesh.isVisible;\n this._mesh.isVisible = false;\n }\n\n // Clip plane\n if (!this.disableClipPlane) {\n clipPlane = scene.clipPlane;\n\n var positiony = this._mesh ? this._mesh.position.y : 0.0;\n scene.clipPlane = Plane.FromPositionAndNormal(new Vector3(0, positiony + 0.05, 0), new Vector3(0, 1, 0));\n }\n };\n\n this._refractionRTT.onAfterRender = () => {\n if (this._mesh) {\n this._mesh.isVisible = isVisible;\n }\n\n // Clip plane\n if (!this.disableClipPlane) {\n scene.clipPlane = clipPlane;\n }\n };\n\n this._reflectionRTT.onBeforeRender = () => {\n if (this._mesh) {\n isVisible = this._mesh.isVisible;\n this._mesh.isVisible = false;\n }\n\n // Clip plane\n if (!this.disableClipPlane) {\n clipPlane = scene.clipPlane;\n\n var positiony = this._mesh ? this._mesh.position.y : 0.0;\n scene.clipPlane = Plane.FromPositionAndNormal(new Vector3(0, positiony - 0.05, 0), new Vector3(0, -1, 0));\n\n Matrix.ReflectionToRef(scene.clipPlane, mirrorMatrix);\n }\n\n // Transform\n savedViewMatrix = scene.getViewMatrix();\n\n mirrorMatrix.multiplyToRef(savedViewMatrix, this._reflectionTransform);\n scene.setTransformMatrix(this._reflectionTransform, scene.getProjectionMatrix());\n scene.getEngine().cullBackFaces = false;\n scene._mirroredCameraPosition = Vector3.TransformCoordinates((<Camera>scene.activeCamera).position, mirrorMatrix);\n };\n\n this._reflectionRTT.onAfterRender = () => {\n if (this._mesh) {\n this._mesh.isVisible = isVisible;\n }\n\n // Clip plane\n scene.clipPlane = clipPlane;\n\n // Transform\n scene.setTransformMatrix(savedViewMatrix, scene.getProjectionMatrix());\n scene.getEngine().cullBackFaces = true;\n scene._mirroredCameraPosition = null;\n };\n }\n\n public getAnimatables(): IAnimatable[] {\n var results = [];\n\n if (this.bumpTexture && this.bumpTexture.animations && this.bumpTexture.animations.length > 0) {\n results.push(this.bumpTexture);\n }\n if (this._reflectionRTT && this._reflectionRTT.animations && this._reflectionRTT.animations.length > 0) {\n results.push(this._reflectionRTT);\n }\n if (this._refractionRTT && this._refractionRTT.animations && this._refractionRTT.animations.length > 0) {\n results.push(this._refractionRTT);\n }\n\n return results;\n }\n\n public getActiveTextures(): BaseTexture[] {\n var activeTextures = super.getActiveTextures();\n\n if (this._bumpTexture) {\n activeTextures.push(this._bumpTexture);\n }\n\n return activeTextures;\n }\n\n public hasTexture(texture: BaseTexture): boolean {\n if (super.hasTexture(texture)) {\n return true;\n }\n\n if (this._bumpTexture === texture) {\n return true;\n }\n\n return false;\n }\n\n public dispose(forceDisposeEffect?: boolean): void {\n if (this.bumpTexture) {\n this.bumpTexture.dispose();\n }\n\n var index = this.getScene().customRenderTargets.indexOf(<RenderTargetTexture>this._refractionRTT);\n if (index != -1) {\n this.getScene().customRenderTargets.splice(index, 1);\n }\n index = -1;\n index = this.getScene().customRenderTargets.indexOf(<RenderTargetTexture>this._reflectionRTT);\n if (index != -1) {\n this.getScene().customRenderTargets.splice(index, 1);\n }\n\n if (this._reflectionRTT) {\n this._reflectionRTT.dispose();\n }\n if (this._refractionRTT) {\n this._refractionRTT.dispose();\n }\n\n // Remove image-processing observer\n if (this._imageProcessingConfiguration && this._imageProcessingObserver) {\n this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver);\n }\n\n super.dispose(forceDisposeEffect);\n }\n\n public clone(name: string): WaterMaterial {\n return SerializationHelper.Clone(() => new WaterMaterial(name, this.getScene()), this);\n }\n\n public serialize(): any {\n var serializationObject = SerializationHelper.Serialize(this);\n serializationObject.customType = \"BABYLON.WaterMaterial\";\n\n serializationObject.renderList = [];\n if (this._refractionRTT && this._refractionRTT.renderList) {\n for (var i = 0; i < this._refractionRTT.renderList.length; i++) {\n serializationObject.renderList.push(this._refractionRTT.renderList[i].id);\n }\n }\n\n return serializationObject;\n }\n\n public getClassName(): string {\n return \"WaterMaterial\";\n }\n\n // Statics\n public static Parse(source: any, scene: Scene, rootUrl: string): WaterMaterial {\n var mat = SerializationHelper.Parse(() => new WaterMaterial(source.name, scene), source, scene, rootUrl);\n mat._waitingRenderList = source.renderList;\n\n return mat;\n }\n\n public static CreateDefaultMesh(name: string, scene: Scene): Mesh {\n var mesh = Mesh.CreateGround(name, 512, 512, 32, scene, false);\n return mesh;\n }\n}\n\n_TypeStore.RegisteredTypes[\"BABYLON.WaterMaterial\"] = WaterMaterial;"]}
|
1
|
+
{"version":3,"file":"waterMaterial.js","sourceRoot":"","sources":["../../../sourceES6/materialsLibrary/src/water/waterMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["import { Nullable } from \"@babylonjs/core/types\";\nimport { serializeAsVector2, serializeAsTexture, serialize, expandToProperty, serializeAsColor3, SerializationHelper } from \"@babylonjs/core/Misc/decorators\";\nimport { Matrix, Vector2, Vector3 } from \"@babylonjs/core/Maths/math.vector\";\nimport { Color3 } from \"@babylonjs/core/Maths/math.color\";\nimport { Plane } from '@babylonjs/core/Maths/math.plane';\nimport { IAnimatable } from '@babylonjs/core/Animations/animatable.interface';\nimport { Constants } from \"@babylonjs/core/Engines/constants\";\nimport { SmartArray } from \"@babylonjs/core/Misc/smartArray\";\nimport { Observer } from '@babylonjs/core/Misc/observable';\nimport { BaseTexture } from \"@babylonjs/core/Materials/Textures/baseTexture\";\nimport { RenderTargetTexture } from \"@babylonjs/core/Materials/Textures/renderTargetTexture\";\nimport { IEffectCreationOptions } from \"@babylonjs/core/Materials/effect\";\nimport { MaterialDefines } from \"@babylonjs/core/Materials/materialDefines\";\nimport { IImageProcessingConfigurationDefines, ImageProcessingConfiguration } from \"@babylonjs/core/Materials/imageProcessingConfiguration\";\nimport { MaterialHelper } from \"@babylonjs/core/Materials/materialHelper\";\nimport { PushMaterial } from \"@babylonjs/core/Materials/pushMaterial\";\nimport { MaterialFlags } from \"@babylonjs/core/Materials/materialFlags\";\nimport { VertexBuffer } from \"@babylonjs/core/Buffers/buffer\";\nimport { AbstractMesh } from \"@babylonjs/core/Meshes/abstractMesh\";\nimport { SubMesh } from \"@babylonjs/core/Meshes/subMesh\";\nimport { Mesh } from \"@babylonjs/core/Meshes/mesh\";\nimport { Camera } from \"@babylonjs/core/Cameras/camera\";\nimport { Scene } from \"@babylonjs/core/scene\";\nimport { RegisterClass } from '@babylonjs/core/Misc/typeStore';\n\nimport \"./water.fragment\";\nimport \"./water.vertex\";\nimport { EffectFallbacks } from '@babylonjs/core/Materials/effectFallbacks';\nimport { CreateGround } from \"@babylonjs/core/Meshes/Builders/groundBuilder\";\n\nclass WaterMaterialDefines extends MaterialDefines implements IImageProcessingConfigurationDefines {\n public BUMP = false;\n public REFLECTION = false;\n public CLIPPLANE = false;\n public CLIPPLANE2 = false;\n public CLIPPLANE3 = false;\n public CLIPPLANE4 = false;\n public CLIPPLANE5 = false;\n public CLIPPLANE6 = false;\n public ALPHATEST = false;\n public DEPTHPREPASS = false;\n public POINTSIZE = false;\n public FOG = false;\n public NORMAL = false;\n public UV1 = false;\n public UV2 = false;\n public VERTEXCOLOR = false;\n public VERTEXALPHA = false;\n public NUM_BONE_INFLUENCERS = 0;\n public BonesPerMesh = 0;\n public INSTANCES = false;\n public SPECULARTERM = false;\n public LOGARITHMICDEPTH = false;\n public USE_REVERSE_DEPTHBUFFER = false;\n public FRESNELSEPARATE = false;\n public BUMPSUPERIMPOSE = false;\n public BUMPAFFECTSREFLECTION = false;\n\n public IMAGEPROCESSING = false;\n public VIGNETTE = false;\n public VIGNETTEBLENDMODEMULTIPLY = false;\n public VIGNETTEBLENDMODEOPAQUE = false;\n public TONEMAPPING = false;\n public TONEMAPPING_ACES = false;\n public CONTRAST = false;\n public EXPOSURE = false;\n public COLORCURVES = false;\n public COLORGRADING = false;\n public COLORGRADING3D = false;\n public SAMPLER3DGREENDEPTH = false;\n public SAMPLER3DBGRMAP = false;\n public IMAGEPROCESSINGPOSTPROCESS = false;\n\n constructor() {\n super();\n this.rebuild();\n }\n}\n\nexport class WaterMaterial extends PushMaterial {\n /*\n * Public members\n */\n @serializeAsTexture(\"bumpTexture\")\n private _bumpTexture: BaseTexture;\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\n public bumpTexture: BaseTexture;\n\n @serializeAsColor3()\n public diffuseColor = new Color3(1, 1, 1);\n\n @serializeAsColor3()\n public specularColor = new Color3(0, 0, 0);\n\n @serialize()\n public specularPower = 64;\n\n @serialize(\"disableLighting\")\n private _disableLighting = false;\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\n public disableLighting: boolean;\n\n @serialize(\"maxSimultaneousLights\")\n private _maxSimultaneousLights = 4;\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\n public maxSimultaneousLights: number;\n\n /**\n * Defines the wind force.\n */\n @serialize()\n public windForce: number = 6;\n /**\n * Defines the direction of the wind in the plane (X, Z).\n */\n @serializeAsVector2()\n public windDirection: Vector2 = new Vector2(0, 1);\n /**\n * Defines the height of the waves.\n */\n @serialize()\n public waveHeight: number = 0.4;\n /**\n * Defines the bump height related to the bump map.\n */\n @serialize()\n public bumpHeight: number = 0.4;\n /**\n * Defines wether or not: to add a smaller moving bump to less steady waves.\n */\n @serialize(\"bumpSuperimpose\")\n private _bumpSuperimpose = false;\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\n public bumpSuperimpose: boolean;\n\n /**\n * Defines wether or not color refraction and reflection differently with .waterColor2 and .colorBlendFactor2. Non-linear (physically correct) fresnel.\n */\n @serialize(\"fresnelSeparate\")\n private _fresnelSeparate = false;\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\n public fresnelSeparate: boolean;\n\n /**\n * Defines wether or not bump Wwves modify the reflection.\n */\n @serialize(\"bumpAffectsReflection\")\n private _bumpAffectsReflection = false;\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\n public bumpAffectsReflection: boolean;\n\n /**\n * Defines the water color blended with the refraction (near).\n */\n @serializeAsColor3()\n public waterColor: Color3 = new Color3(0.1, 0.1, 0.6);\n /**\n * Defines the blend factor related to the water color.\n */\n @serialize()\n public colorBlendFactor: number = 0.2;\n /**\n * Defines the water color blended with the reflection (far).\n */\n @serializeAsColor3()\n public waterColor2: Color3 = new Color3(0.1, 0.1, 0.6);\n /**\n * Defines the blend factor related to the water color (reflection, far).\n */\n @serialize()\n public colorBlendFactor2: number = 0.2;\n /**\n * Defines the maximum length of a wave.\n */\n @serialize()\n public waveLength: number = 0.1;\n\n /**\n * Defines the waves speed.\n */\n @serialize()\n public waveSpeed: number = 1.0;\n\n /**\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.\n */\n @serialize()\n public waveCount: number = 20;\n /**\n * Sets or gets whether or not automatic clipping should be enabled or not. Setting to true will save performances and\n * will avoid calculating useless pixels in the pixel shader of the water material.\n */\n @serialize()\n public disableClipPlane: boolean = false;\n\n protected _renderTargets = new SmartArray<RenderTargetTexture>(16);\n\n /*\n * Private members\n */\n private _mesh: Nullable<AbstractMesh> = null;\n\n private _refractionRTT: Nullable<RenderTargetTexture>;\n private _reflectionRTT: Nullable<RenderTargetTexture>;\n\n private _reflectionTransform: Matrix = Matrix.Zero();\n private _lastTime: number = 0;\n private _lastDeltaTime: number = 0;\n\n private _useLogarithmicDepth: boolean;\n\n private _waitingRenderList: Nullable<string[]>;\n\n private _imageProcessingConfiguration: Nullable<ImageProcessingConfiguration>;\n private _imageProcessingObserver: Nullable<Observer<ImageProcessingConfiguration>>;\n\n /**\n * Gets a boolean indicating that current material needs to register RTT\n */\n public get hasRenderTargetTextures(): boolean {\n return true;\n }\n\n /**\n * Constructor\n */\n constructor(name: string, scene: Scene, public renderTargetSize: Vector2 = new Vector2(512, 512)) {\n super(name, scene);\n\n this._createRenderTargets(scene, renderTargetSize);\n\n // Create render targets\n this.getRenderTargetTextures = (): SmartArray<RenderTargetTexture> => {\n this._renderTargets.reset();\n this._renderTargets.push(<RenderTargetTexture>this._reflectionRTT);\n this._renderTargets.push(<RenderTargetTexture>this._refractionRTT);\n\n return this._renderTargets;\n };\n\n this._imageProcessingConfiguration = this.getScene().imageProcessingConfiguration;\n if (this._imageProcessingConfiguration) {\n this._imageProcessingObserver = this._imageProcessingConfiguration.onUpdateParameters.add(() => {\n this._markAllSubMeshesAsImageProcessingDirty();\n });\n }\n }\n\n @serialize()\n public get useLogarithmicDepth(): boolean {\n return this._useLogarithmicDepth;\n }\n\n public set useLogarithmicDepth(value: boolean) {\n this._useLogarithmicDepth = value && this.getScene().getEngine().getCaps().fragmentDepthSupported;\n this._markAllSubMeshesAsMiscDirty();\n }\n\n // Get / Set\n public get refractionTexture(): Nullable<RenderTargetTexture> {\n return this._refractionRTT;\n }\n\n public get reflectionTexture(): Nullable<RenderTargetTexture> {\n return this._reflectionRTT;\n }\n\n // Methods\n public addToRenderList(node: any): void {\n if (this._refractionRTT && this._refractionRTT.renderList) {\n this._refractionRTT.renderList.push(node);\n }\n\n if (this._reflectionRTT && this._reflectionRTT.renderList) {\n this._reflectionRTT.renderList.push(node);\n }\n }\n\n public enableRenderTargets(enable: boolean): void {\n var refreshRate = enable ? 1 : 0;\n\n if (this._refractionRTT) {\n this._refractionRTT.refreshRate = refreshRate;\n }\n\n if (this._reflectionRTT) {\n this._reflectionRTT.refreshRate = refreshRate;\n }\n }\n\n public getRenderList(): Nullable<AbstractMesh[]> {\n return this._refractionRTT ? this._refractionRTT.renderList : [];\n }\n\n public get renderTargetsEnabled(): boolean {\n return !(this._refractionRTT && this._refractionRTT.refreshRate === 0);\n }\n\n public needAlphaBlending(): boolean {\n return (this.alpha < 1.0);\n }\n\n public needAlphaTesting(): boolean {\n return false;\n }\n\n public getAlphaTestTexture(): Nullable<BaseTexture> {\n return null;\n }\n\n public isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\n if (this.isFrozen) {\n if (subMesh.effect && subMesh.effect._wasPreviouslyReady) {\n return true;\n }\n }\n\n if (!subMesh.materialDefines) {\n subMesh.materialDefines = new WaterMaterialDefines();\n }\n\n var defines = <WaterMaterialDefines>subMesh.materialDefines;\n var scene = this.getScene();\n\n if (this._isReadyForSubMesh(subMesh)) {\n return true;\n }\n\n var engine = scene.getEngine();\n\n // Textures\n if (defines._areTexturesDirty) {\n defines._needUVs = false;\n if (scene.texturesEnabled) {\n if (this.bumpTexture && MaterialFlags.BumpTextureEnabled) {\n if (!this.bumpTexture.isReady()) {\n return false;\n } else {\n defines._needUVs = true;\n defines.BUMP = true;\n }\n }\n\n if (MaterialFlags.ReflectionTextureEnabled) {\n defines.REFLECTION = true;\n }\n }\n }\n\n MaterialHelper.PrepareDefinesForFrameBoundValues(scene, engine, defines, useInstances ? true : false);\n\n MaterialHelper.PrepareDefinesForMisc(mesh, scene, this._useLogarithmicDepth, this.pointsCloud, this.fogEnabled, this._shouldTurnAlphaTestOn(mesh), defines);\n\n if (defines._areMiscDirty) {\n if (this._fresnelSeparate) {\n defines.FRESNELSEPARATE = true;\n }\n\n if (this._bumpSuperimpose) {\n defines.BUMPSUPERIMPOSE = true;\n }\n\n if (this._bumpAffectsReflection) {\n defines.BUMPAFFECTSREFLECTION = true;\n }\n }\n\n // Lights\n defines._needNormals = MaterialHelper.PrepareDefinesForLights(scene, mesh, defines, true, this._maxSimultaneousLights, this._disableLighting);\n\n // Image processing\n if (defines._areImageProcessingDirty && this._imageProcessingConfiguration) {\n if (!this._imageProcessingConfiguration.isReady()) {\n return false;\n }\n\n this._imageProcessingConfiguration.prepareDefines(defines);\n\n defines.IS_REFLECTION_LINEAR = (this.reflectionTexture != null && !this.reflectionTexture.gammaSpace);\n defines.IS_REFRACTION_LINEAR = (this.refractionTexture != null && !this.refractionTexture.gammaSpace);\n }\n\n // Attribs\n MaterialHelper.PrepareDefinesForAttributes(mesh, defines, true, true);\n\n // Configure this\n this._mesh = mesh;\n\n if (this._waitingRenderList) {\n for (var i = 0; i < this._waitingRenderList.length; i++) {\n this.addToRenderList(scene.getNodeById(this._waitingRenderList[i]));\n }\n\n this._waitingRenderList = null;\n }\n\n // Get correct effect\n if (defines.isDirty) {\n defines.markAsProcessed();\n scene.resetCachedMaterial();\n\n // Fallbacks\n var fallbacks = new EffectFallbacks();\n if (defines.FOG) {\n fallbacks.addFallback(1, \"FOG\");\n }\n\n if (defines.LOGARITHMICDEPTH) {\n fallbacks.addFallback(0, \"LOGARITHMICDEPTH\");\n }\n\n MaterialHelper.HandleFallbacksForShadows(defines, fallbacks, this.maxSimultaneousLights);\n\n if (defines.NUM_BONE_INFLUENCERS > 0) {\n fallbacks.addCPUSkinningFallback(0, mesh);\n }\n\n //Attributes\n var attribs = [VertexBuffer.PositionKind];\n\n if (defines.NORMAL) {\n attribs.push(VertexBuffer.NormalKind);\n }\n\n if (defines.UV1) {\n attribs.push(VertexBuffer.UVKind);\n }\n\n if (defines.UV2) {\n attribs.push(VertexBuffer.UV2Kind);\n }\n\n if (defines.VERTEXCOLOR) {\n attribs.push(VertexBuffer.ColorKind);\n }\n\n MaterialHelper.PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\n MaterialHelper.PrepareAttributesForInstances(attribs, defines);\n\n // Legacy browser patch\n var shaderName = \"water\";\n var join = defines.toString();\n var uniforms = [\"world\", \"view\", \"viewProjection\", \"vEyePosition\", \"vLightsType\", \"vDiffuseColor\", \"vSpecularColor\",\n \"vFogInfos\", \"vFogColor\", \"pointSize\",\n \"vNormalInfos\",\n \"mBones\",\n \"vClipPlane\", \"vClipPlane2\", \"vClipPlane3\", \"vClipPlane4\", \"vClipPlane5\", \"vClipPlane6\", \"normalMatrix\",\n \"logarithmicDepthConstant\",\n\n // Water\n \"worldReflectionViewProjection\", \"windDirection\", \"waveLength\", \"time\", \"windForce\",\n \"cameraPosition\", \"bumpHeight\", \"waveHeight\", \"waterColor\", \"waterColor2\", \"colorBlendFactor\", \"colorBlendFactor2\", \"waveSpeed\",\n \"waveCount\"\n ];\n var samplers = [\"normalSampler\",\n // Water\n \"refractionSampler\", \"reflectionSampler\"\n ];\n var uniformBuffers = new Array<string>();\n\n if (ImageProcessingConfiguration) {\n ImageProcessingConfiguration.PrepareUniforms(uniforms, defines);\n ImageProcessingConfiguration.PrepareSamplers(samplers, defines);\n }\n\n MaterialHelper.PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\n uniformsNames: uniforms,\n uniformBuffersNames: uniformBuffers,\n samplers: samplers,\n defines: defines,\n maxSimultaneousLights: this.maxSimultaneousLights\n });\n subMesh.setEffect(scene.getEngine().createEffect(shaderName,\n <IEffectCreationOptions>{\n attributes: attribs,\n uniformsNames: uniforms,\n uniformBuffersNames: uniformBuffers,\n samplers: samplers,\n defines: join,\n fallbacks: fallbacks,\n onCompiled: this.onCompiled,\n onError: this.onError,\n indexParameters: { maxSimultaneousLights: this._maxSimultaneousLights }\n }, engine), defines, this._materialContext);\n\n }\n if (!subMesh.effect || !subMesh.effect.isReady()) {\n return false;\n }\n\n defines._renderId = scene.getRenderId();\n subMesh.effect._wasPreviouslyReady = true;\n\n return true;\n }\n\n public bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\n var scene = this.getScene();\n\n var defines = <WaterMaterialDefines>subMesh.materialDefines;\n if (!defines) {\n return;\n }\n\n var effect = subMesh.effect;\n if (!effect || !this._mesh) {\n return;\n }\n this._activeEffect = effect;\n\n // Matrices\n this.bindOnlyWorldMatrix(world);\n this._activeEffect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\n\n // Bones\n MaterialHelper.BindBonesParameters(mesh, this._activeEffect);\n\n if (this._mustRebind(scene, effect)) {\n // Textures\n if (this.bumpTexture && MaterialFlags.BumpTextureEnabled) {\n this._activeEffect.setTexture(\"normalSampler\", this.bumpTexture);\n\n this._activeEffect.setFloat2(\"vNormalInfos\", this.bumpTexture.coordinatesIndex, this.bumpTexture.level);\n this._activeEffect.setMatrix(\"normalMatrix\", this.bumpTexture.getTextureMatrix());\n }\n // Clip plane\n MaterialHelper.BindClipPlane(this._activeEffect, scene);\n\n // Point size\n if (this.pointsCloud) {\n this._activeEffect.setFloat(\"pointSize\", this.pointSize);\n }\n\n scene.bindEyePosition(effect);\n }\n\n this._activeEffect.setColor4(\"vDiffuseColor\", this.diffuseColor, this.alpha * mesh.visibility);\n\n if (defines.SPECULARTERM) {\n this._activeEffect.setColor4(\"vSpecularColor\", this.specularColor, this.specularPower);\n }\n\n if (scene.lightsEnabled && !this.disableLighting) {\n MaterialHelper.BindLights(scene, mesh, this._activeEffect, defines, this.maxSimultaneousLights);\n }\n\n // View\n if (scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) {\n this._activeEffect.setMatrix(\"view\", scene.getViewMatrix());\n }\n\n // Fog\n MaterialHelper.BindFogParameters(scene, mesh, this._activeEffect);\n\n // Log. depth\n MaterialHelper.BindLogDepth(defines, this._activeEffect, scene);\n\n // Water\n if (MaterialFlags.ReflectionTextureEnabled) {\n this._activeEffect.setTexture(\"refractionSampler\", this._refractionRTT);\n this._activeEffect.setTexture(\"reflectionSampler\", this._reflectionRTT);\n }\n\n var wrvp = this._mesh.getWorldMatrix().multiply(this._reflectionTransform).multiply(scene.getProjectionMatrix());\n\n // Add delta time. Prevent adding delta time if it hasn't changed.\n let deltaTime = scene.getEngine().getDeltaTime();\n if (deltaTime !== this._lastDeltaTime) {\n this._lastDeltaTime = deltaTime;\n this._lastTime += this._lastDeltaTime;\n }\n\n this._activeEffect.setMatrix(\"worldReflectionViewProjection\", wrvp);\n this._activeEffect.setVector2(\"windDirection\", this.windDirection);\n this._activeEffect.setFloat(\"waveLength\", this.waveLength);\n this._activeEffect.setFloat(\"time\", this._lastTime / 100000);\n this._activeEffect.setFloat(\"windForce\", this.windForce);\n this._activeEffect.setFloat(\"waveHeight\", this.waveHeight);\n this._activeEffect.setFloat(\"bumpHeight\", this.bumpHeight);\n this._activeEffect.setColor4(\"waterColor\", this.waterColor, 1.0);\n this._activeEffect.setFloat(\"colorBlendFactor\", this.colorBlendFactor);\n this._activeEffect.setColor4(\"waterColor2\", this.waterColor2, 1.0);\n this._activeEffect.setFloat(\"colorBlendFactor2\", this.colorBlendFactor2);\n this._activeEffect.setFloat(\"waveSpeed\", this.waveSpeed);\n this._activeEffect.setFloat(\"waveCount\", this.waveCount);\n\n // image processing\n if (this._imageProcessingConfiguration && !this._imageProcessingConfiguration.applyByPostProcess) {\n this._imageProcessingConfiguration.bind(this._activeEffect);\n }\n\n this._afterBind(mesh, this._activeEffect);\n }\n\n private _createRenderTargets(scene: Scene, renderTargetSize: Vector2): void {\n // Render targets\n this._refractionRTT = new RenderTargetTexture(name + \"_refraction\", { width: renderTargetSize.x, height: renderTargetSize.y }, scene, false, true);\n this._refractionRTT.wrapU = Constants.TEXTURE_MIRROR_ADDRESSMODE;\n this._refractionRTT.wrapV = Constants.TEXTURE_MIRROR_ADDRESSMODE;\n this._refractionRTT.ignoreCameraViewport = true;\n\n this._reflectionRTT = new RenderTargetTexture(name + \"_reflection\", { width: renderTargetSize.x, height: renderTargetSize.y }, scene, false, true);\n this._reflectionRTT.wrapU = Constants.TEXTURE_MIRROR_ADDRESSMODE;\n this._reflectionRTT.wrapV = Constants.TEXTURE_MIRROR_ADDRESSMODE;\n this._reflectionRTT.ignoreCameraViewport = true;\n\n var isVisible: boolean;\n var clipPlane: Nullable<Plane> = null;\n var savedViewMatrix: Matrix;\n var mirrorMatrix = Matrix.Zero();\n\n this._refractionRTT.onBeforeRender = () => {\n if (this._mesh) {\n isVisible = this._mesh.isVisible;\n this._mesh.isVisible = false;\n }\n\n // Clip plane\n if (!this.disableClipPlane) {\n clipPlane = scene.clipPlane;\n\n var positiony = this._mesh ? this._mesh.position.y : 0.0;\n scene.clipPlane = Plane.FromPositionAndNormal(new Vector3(0, positiony + 0.05, 0), new Vector3(0, 1, 0));\n }\n };\n\n this._refractionRTT.onAfterRender = () => {\n if (this._mesh) {\n this._mesh.isVisible = isVisible;\n }\n\n // Clip plane\n if (!this.disableClipPlane) {\n scene.clipPlane = clipPlane;\n }\n };\n\n this._reflectionRTT.onBeforeRender = () => {\n if (this._mesh) {\n isVisible = this._mesh.isVisible;\n this._mesh.isVisible = false;\n }\n\n // Clip plane\n if (!this.disableClipPlane) {\n clipPlane = scene.clipPlane;\n\n var positiony = this._mesh ? this._mesh.position.y : 0.0;\n scene.clipPlane = Plane.FromPositionAndNormal(new Vector3(0, positiony - 0.05, 0), new Vector3(0, -1, 0));\n\n Matrix.ReflectionToRef(scene.clipPlane, mirrorMatrix);\n }\n\n // Transform\n savedViewMatrix = scene.getViewMatrix();\n\n mirrorMatrix.multiplyToRef(savedViewMatrix, this._reflectionTransform);\n scene.setTransformMatrix(this._reflectionTransform, scene.getProjectionMatrix());\n scene.getEngine().cullBackFaces = false;\n scene._mirroredCameraPosition = Vector3.TransformCoordinates((<Camera>scene.activeCamera).position, mirrorMatrix);\n };\n\n this._reflectionRTT.onAfterRender = () => {\n if (this._mesh) {\n this._mesh.isVisible = isVisible;\n }\n\n // Clip plane\n scene.clipPlane = clipPlane;\n\n // Transform\n scene.setTransformMatrix(savedViewMatrix, scene.getProjectionMatrix());\n scene.getEngine().cullBackFaces = null;\n scene._mirroredCameraPosition = null;\n };\n }\n\n public getAnimatables(): IAnimatable[] {\n var results = [];\n\n if (this.bumpTexture && this.bumpTexture.animations && this.bumpTexture.animations.length > 0) {\n results.push(this.bumpTexture);\n }\n if (this._reflectionRTT && this._reflectionRTT.animations && this._reflectionRTT.animations.length > 0) {\n results.push(this._reflectionRTT);\n }\n if (this._refractionRTT && this._refractionRTT.animations && this._refractionRTT.animations.length > 0) {\n results.push(this._refractionRTT);\n }\n\n return results;\n }\n\n public getActiveTextures(): BaseTexture[] {\n var activeTextures = super.getActiveTextures();\n\n if (this._bumpTexture) {\n activeTextures.push(this._bumpTexture);\n }\n\n return activeTextures;\n }\n\n public hasTexture(texture: BaseTexture): boolean {\n if (super.hasTexture(texture)) {\n return true;\n }\n\n if (this._bumpTexture === texture) {\n return true;\n }\n\n return false;\n }\n\n public dispose(forceDisposeEffect?: boolean): void {\n if (this.bumpTexture) {\n this.bumpTexture.dispose();\n }\n\n var index = this.getScene().customRenderTargets.indexOf(<RenderTargetTexture>this._refractionRTT);\n if (index != -1) {\n this.getScene().customRenderTargets.splice(index, 1);\n }\n index = -1;\n index = this.getScene().customRenderTargets.indexOf(<RenderTargetTexture>this._reflectionRTT);\n if (index != -1) {\n this.getScene().customRenderTargets.splice(index, 1);\n }\n\n if (this._reflectionRTT) {\n this._reflectionRTT.dispose();\n }\n if (this._refractionRTT) {\n this._refractionRTT.dispose();\n }\n\n // Remove image-processing observer\n if (this._imageProcessingConfiguration && this._imageProcessingObserver) {\n this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver);\n }\n\n super.dispose(forceDisposeEffect);\n }\n\n public clone(name: string): WaterMaterial {\n return SerializationHelper.Clone(() => new WaterMaterial(name, this.getScene()), this);\n }\n\n public serialize(): any {\n var serializationObject = SerializationHelper.Serialize(this);\n serializationObject.customType = \"BABYLON.WaterMaterial\";\n\n serializationObject.renderList = [];\n if (this._refractionRTT && this._refractionRTT.renderList) {\n for (var i = 0; i < this._refractionRTT.renderList.length; i++) {\n serializationObject.renderList.push(this._refractionRTT.renderList[i].id);\n }\n }\n\n return serializationObject;\n }\n\n public getClassName(): string {\n return \"WaterMaterial\";\n }\n\n // Statics\n public static Parse(source: any, scene: Scene, rootUrl: string): WaterMaterial {\n var mat = SerializationHelper.Parse(() => new WaterMaterial(source.name, scene), source, scene, rootUrl);\n mat._waitingRenderList = source.renderList;\n\n return mat;\n }\n\n public static CreateDefaultMesh(name: string, scene: Scene): Mesh {\n var mesh = CreateGround(name, { width: 512, height: 512, subdivisions: 32, updatable: false }, scene);\n return mesh;\n }\n}\n\nRegisterClass(\"BABYLON.WaterMaterial\", WaterMaterial);"]}
|