@babylonjs/materials 5.27.0 → 5.27.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.
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@babylonjs/materials",
|
3
|
-
"version": "5.27.
|
3
|
+
"version": "5.27.1",
|
4
4
|
"main": "index.js",
|
5
5
|
"module": "index.js",
|
6
6
|
"types": "index.d.ts",
|
@@ -19,7 +19,7 @@
|
|
19
19
|
"prepublishOnly": "build-tools -c prepare-es6-build"
|
20
20
|
},
|
21
21
|
"devDependencies": {
|
22
|
-
"@babylonjs/core": "^5.27.
|
22
|
+
"@babylonjs/core": "^5.27.1",
|
23
23
|
"@dev/build-tools": "^1.0.0",
|
24
24
|
"@lts/materials": "^1.0.0",
|
25
25
|
"rimraf": "^3.0.2",
|
@@ -60,6 +60,7 @@ export class ShadowOnlyMaterial extends PushMaterial {
|
|
60
60
|
}
|
61
61
|
// Methods
|
62
62
|
isReadyForSubMesh(mesh, subMesh, useInstances) {
|
63
|
+
var _a;
|
63
64
|
if (this.isFrozen) {
|
64
65
|
if (subMesh.effect && subMesh.effect._wasPreviouslyReady && subMesh.effect._wasPreviouslyUsingInstances === useInstances) {
|
65
66
|
return true;
|
@@ -93,7 +94,7 @@ export class ShadowOnlyMaterial extends PushMaterial {
|
|
93
94
|
MaterialHelper.PrepareDefinesForFrameBoundValues(scene, engine, defines, useInstances ? true : false);
|
94
95
|
MaterialHelper.PrepareDefinesForMisc(mesh, scene, false, this.pointsCloud, this.fogEnabled, this._shouldTurnAlphaTestOn(mesh), defines);
|
95
96
|
defines._needNormals = MaterialHelper.PrepareDefinesForLights(scene, mesh, defines, false, 1);
|
96
|
-
const shadowGenerator = this._getFirstShadowLightForMesh(mesh)
|
97
|
+
const shadowGenerator = (_a = this._getFirstShadowLightForMesh(mesh)) === null || _a === void 0 ? void 0 : _a.getShadowGenerator();
|
97
98
|
this._needAlphaBlending = true;
|
98
99
|
if (shadowGenerator && shadowGenerator.getClassName && shadowGenerator.getClassName() === "CascadedShadowGenerator") {
|
99
100
|
const csg = shadowGenerator;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"shadowOnlyMaterial.js","sourceRoot":"","sources":["../../../../../lts/materials/generated/shadowOnly/shadowOnlyMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"core/types\";\r\nimport { SerializationHelper } from \"core/Misc/decorators\";\r\nimport type { Matrix } from \"core/Maths/math.vector\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport type { IShadowLight } from \"core/Lights/shadowLight\";\r\nimport type { IEffectCreationOptions } from \"core/Materials/effect\";\r\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport { MaterialHelper } from \"core/Materials/materialHelper\";\r\nimport { PushMaterial } from \"core/Materials/pushMaterial\";\r\nimport { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { SubMesh } from \"core/Meshes/subMesh\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport { Scene } from \"core/scene\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\n\r\nimport \"./shadowOnly.fragment\";\r\nimport \"./shadowOnly.vertex\";\r\nimport { EffectFallbacks } from \"core/Materials/effectFallbacks\";\r\nimport type { CascadedShadowGenerator } from \"core/Lights/Shadows/cascadedShadowGenerator\";\r\n\r\nclass ShadowOnlyMaterialDefines extends MaterialDefines {\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 POINTSIZE = false;\r\n public FOG = false;\r\n public NORMAL = false;\r\n public NUM_BONE_INFLUENCERS = 0;\r\n public BonesPerMesh = 0;\r\n public INSTANCES = 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 ShadowOnlyMaterial extends PushMaterial {\r\n private _activeLight: IShadowLight;\r\n private _needAlphaBlending = true;\r\n\r\n constructor(name: string, scene?: Scene) {\r\n super(name, scene);\r\n }\r\n\r\n public shadowColor = Color3.Black();\r\n\r\n public needAlphaBlending(): boolean {\r\n return this._needAlphaBlending;\r\n }\r\n\r\n public needAlphaTesting(): boolean {\r\n return false;\r\n }\r\n\r\n public getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n public get activeLight(): IShadowLight {\r\n return this._activeLight;\r\n }\r\n\r\n public set activeLight(light: IShadowLight) {\r\n this._activeLight = light;\r\n }\r\n\r\n private _getFirstShadowLightForMesh(mesh: AbstractMesh): Nullable<IShadowLight> {\r\n for (const light of mesh.lightSources) {\r\n if (light.shadowEnabled) {\r\n return light as IShadowLight;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n // Methods\r\n public isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\r\n if (this.isFrozen) {\r\n if (subMesh.effect && subMesh.effect._wasPreviouslyReady && subMesh.effect._wasPreviouslyUsingInstances === useInstances) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n subMesh.materialDefines = new ShadowOnlyMaterialDefines();\r\n }\r\n\r\n const defines = <ShadowOnlyMaterialDefines>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 // Ensure that active light is the first shadow light\r\n if (this._activeLight) {\r\n for (const light of mesh.lightSources) {\r\n if (light.shadowEnabled) {\r\n if (this._activeLight === light) {\r\n break; // We are good\r\n }\r\n\r\n const lightPosition = mesh.lightSources.indexOf(this._activeLight);\r\n\r\n if (lightPosition !== -1) {\r\n mesh.lightSources.splice(lightPosition, 1);\r\n mesh.lightSources.splice(0, 0, this._activeLight);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n MaterialHelper.PrepareDefinesForFrameBoundValues(scene, engine, defines, useInstances ? true : false);\r\n\r\n MaterialHelper.PrepareDefinesForMisc(mesh, scene, false, this.pointsCloud, this.fogEnabled, this._shouldTurnAlphaTestOn(mesh), defines);\r\n\r\n defines._needNormals = MaterialHelper.PrepareDefinesForLights(scene, mesh, defines, false, 1);\r\n\r\n const shadowGenerator = this._getFirstShadowLightForMesh(mesh)?.getShadowGenerator();\r\n\r\n this._needAlphaBlending = true;\r\n\r\n if (shadowGenerator && (shadowGenerator as any).getClassName && (shadowGenerator as any).getClassName() === \"CascadedShadowGenerator\") {\r\n const csg = shadowGenerator as CascadedShadowGenerator;\r\n\r\n this._needAlphaBlending = !csg.autoCalcDepthBounds;\r\n }\r\n\r\n // Attribs\r\n MaterialHelper.PrepareDefinesForAttributes(mesh, defines, false, true);\r\n\r\n // Get correct effect\r\n if (defines.isDirty) {\r\n defines.markAsProcessed();\r\n\r\n scene.resetCachedMaterial();\r\n\r\n // Fallbacks\r\n const fallbacks = new EffectFallbacks();\r\n if (defines.FOG) {\r\n fallbacks.addFallback(1, \"FOG\");\r\n }\r\n\r\n MaterialHelper.HandleFallbacksForShadows(defines, fallbacks, 1);\r\n\r\n if (defines.NUM_BONE_INFLUENCERS > 0) {\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n }\r\n\r\n defines.IMAGEPROCESSINGPOSTPROCESS = scene.imageProcessingConfiguration.applyByPostProcess;\r\n\r\n //Attributes\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n if (defines.NORMAL) {\r\n attribs.push(VertexBuffer.NormalKind);\r\n }\r\n\r\n MaterialHelper.PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\r\n MaterialHelper.PrepareAttributesForInstances(attribs, defines);\r\n\r\n const shaderName = \"shadowOnly\";\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 \"vFogInfos\",\r\n \"vFogColor\",\r\n \"pointSize\",\r\n \"alpha\",\r\n \"shadowColor\",\r\n \"mBones\",\r\n \"vClipPlane\",\r\n \"vClipPlane2\",\r\n \"vClipPlane3\",\r\n \"vClipPlane4\",\r\n \"vClipPlane5\",\r\n \"vClipPlane6\",\r\n ];\r\n const samplers = new Array<string>();\r\n\r\n const uniformBuffers = new Array<string>();\r\n\r\n MaterialHelper.PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: defines,\r\n maxSimultaneousLights: 1,\r\n });\r\n\r\n subMesh.setEffect(\r\n scene.getEngine().createEffect(\r\n shaderName,\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: this.onCompiled,\r\n onError: this.onError,\r\n indexParameters: { maxSimultaneousLights: 1 },\r\n },\r\n engine\r\n ),\r\n defines,\r\n this._materialContext\r\n );\r\n }\r\n if (!subMesh.effect || !subMesh.effect.isReady()) {\r\n return false;\r\n }\r\n\r\n defines._renderId = scene.getRenderId();\r\n subMesh.effect._wasPreviouslyReady = true;\r\n subMesh.effect._wasPreviouslyUsingInstances = !!useInstances;\r\n\r\n return true;\r\n }\r\n\r\n public bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const scene = this.getScene();\r\n\r\n const defines = <ShadowOnlyMaterialDefines>subMesh.materialDefines;\r\n if (!defines) {\r\n return;\r\n }\r\n\r\n const effect = subMesh.effect;\r\n if (!effect) {\r\n return;\r\n }\r\n this._activeEffect = effect;\r\n\r\n // Matrices\r\n this.bindOnlyWorldMatrix(world);\r\n this._activeEffect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n\r\n // Bones\r\n MaterialHelper.BindBonesParameters(mesh, this._activeEffect);\r\n\r\n if (this._mustRebind(scene, effect)) {\r\n // Clip plane\r\n MaterialHelper.BindClipPlane(this._activeEffect, 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 this._activeEffect.setFloat(\"alpha\", this.alpha);\r\n this._activeEffect.setColor3(\"shadowColor\", this.shadowColor);\r\n\r\n scene.bindEyePosition(effect);\r\n }\r\n\r\n // Lights\r\n if (scene.lightsEnabled) {\r\n MaterialHelper.BindLights(scene, mesh, this._activeEffect, defines, 1);\r\n\r\n const light = this._getFirstShadowLightForMesh(mesh);\r\n\r\n if (light) {\r\n // Make sure the uniforms for this light will be rebound for other materials using this light when rendering the current frame.\r\n // Indeed, there is an optimization in Light that binds the light uniforms only once per frame for a given light (if using ubo).\r\n // Doing this way assumes that all uses of this light are the same, meaning all parameters passed to Light._bindLlight\r\n // are the same, notably useSpecular. However, isReadyForSubMesh (see above) is passing false for this parameter, which may not be\r\n // the value the other materials may pass.\r\n light._renderId = -1;\r\n }\r\n }\r\n\r\n // View\r\n if ((scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) || defines[\"SHADOWCSM0\"]) {\r\n this._activeEffect.setMatrix(\"view\", scene.getViewMatrix());\r\n }\r\n\r\n // Fog\r\n MaterialHelper.BindFogParameters(scene, mesh, this._activeEffect);\r\n\r\n this._afterBind(mesh, this._activeEffect);\r\n }\r\n\r\n public clone(name: string): ShadowOnlyMaterial {\r\n return SerializationHelper.Clone<ShadowOnlyMaterial>(() => new ShadowOnlyMaterial(name, this.getScene()), this);\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.customType = \"BABYLON.ShadowOnlyMaterial\";\r\n return serializationObject;\r\n }\r\n\r\n public getClassName(): string {\r\n return \"ShadowOnlyMaterial\";\r\n }\r\n\r\n // Statics\r\n public static Parse(source: any, scene: Scene, rootUrl: string): ShadowOnlyMaterial {\r\n return SerializationHelper.Parse(() => new ShadowOnlyMaterial(source.name, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ShadowOnlyMaterial\", ShadowOnlyMaterial);\r\n"]}
|
1
|
+
{"version":3,"file":"shadowOnlyMaterial.js","sourceRoot":"","sources":["../../../../../lts/materials/generated/shadowOnly/shadowOnlyMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"core/types\";\r\nimport { SerializationHelper } from \"core/Misc/decorators\";\r\nimport type { Matrix } from \"core/Maths/math.vector\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport type { IShadowLight } from \"core/Lights/shadowLight\";\r\nimport type { IEffectCreationOptions } from \"core/Materials/effect\";\r\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport { MaterialHelper } from \"core/Materials/materialHelper\";\r\nimport { PushMaterial } from \"core/Materials/pushMaterial\";\r\nimport { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { SubMesh } from \"core/Meshes/subMesh\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport { Scene } from \"core/scene\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\n\r\nimport \"./shadowOnly.fragment\";\r\nimport \"./shadowOnly.vertex\";\r\nimport { EffectFallbacks } from \"core/Materials/effectFallbacks\";\r\nimport type { CascadedShadowGenerator } from \"core/Lights/Shadows/cascadedShadowGenerator\";\r\n\r\nclass ShadowOnlyMaterialDefines extends MaterialDefines {\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 POINTSIZE = false;\r\n public FOG = false;\r\n public NORMAL = false;\r\n public NUM_BONE_INFLUENCERS = 0;\r\n public BonesPerMesh = 0;\r\n public INSTANCES = 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 ShadowOnlyMaterial extends PushMaterial {\r\n private _activeLight: IShadowLight;\r\n private _needAlphaBlending = true;\r\n\r\n constructor(name: string, scene?: Scene) {\r\n super(name, scene);\r\n }\r\n\r\n public shadowColor = Color3.Black();\r\n\r\n public needAlphaBlending(): boolean {\r\n return this._needAlphaBlending;\r\n }\r\n\r\n public needAlphaTesting(): boolean {\r\n return false;\r\n }\r\n\r\n public getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n public get activeLight(): IShadowLight {\r\n return this._activeLight;\r\n }\r\n\r\n public set activeLight(light: IShadowLight) {\r\n this._activeLight = light;\r\n }\r\n\r\n private _getFirstShadowLightForMesh(mesh: AbstractMesh): Nullable<IShadowLight> {\r\n for (const light of mesh.lightSources) {\r\n if (light.shadowEnabled) {\r\n return light as IShadowLight;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n // Methods\r\n public isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\r\n if (this.isFrozen) {\r\n if (subMesh.effect && subMesh.effect._wasPreviouslyReady && subMesh.effect._wasPreviouslyUsingInstances === useInstances) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n subMesh.materialDefines = new ShadowOnlyMaterialDefines();\r\n }\r\n\r\n const defines = <ShadowOnlyMaterialDefines>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 // Ensure that active light is the first shadow light\r\n if (this._activeLight) {\r\n for (const light of mesh.lightSources) {\r\n if (light.shadowEnabled) {\r\n if (this._activeLight === light) {\r\n break; // We are good\r\n }\r\n\r\n const lightPosition = mesh.lightSources.indexOf(this._activeLight);\r\n\r\n if (lightPosition !== -1) {\r\n mesh.lightSources.splice(lightPosition, 1);\r\n mesh.lightSources.splice(0, 0, this._activeLight);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n MaterialHelper.PrepareDefinesForFrameBoundValues(scene, engine, defines, useInstances ? true : false);\r\n\r\n MaterialHelper.PrepareDefinesForMisc(mesh, scene, false, this.pointsCloud, this.fogEnabled, this._shouldTurnAlphaTestOn(mesh), defines);\r\n\r\n defines._needNormals = MaterialHelper.PrepareDefinesForLights(scene, mesh, defines, false, 1);\r\n\r\n const shadowGenerator = this._getFirstShadowLightForMesh(mesh)?.getShadowGenerator();\r\n\r\n this._needAlphaBlending = true;\r\n\r\n if (shadowGenerator && (shadowGenerator as any).getClassName && (shadowGenerator as any).getClassName() === \"CascadedShadowGenerator\") {\r\n const csg = shadowGenerator as CascadedShadowGenerator;\r\n\r\n this._needAlphaBlending = !csg.autoCalcDepthBounds;\r\n }\r\n\r\n // Attribs\r\n MaterialHelper.PrepareDefinesForAttributes(mesh, defines, false, true);\r\n\r\n // Get correct effect\r\n if (defines.isDirty) {\r\n defines.markAsProcessed();\r\n\r\n scene.resetCachedMaterial();\r\n\r\n // Fallbacks\r\n const fallbacks = new EffectFallbacks();\r\n if (defines.FOG) {\r\n fallbacks.addFallback(1, \"FOG\");\r\n }\r\n\r\n MaterialHelper.HandleFallbacksForShadows(defines, fallbacks, 1);\r\n\r\n if (defines.NUM_BONE_INFLUENCERS > 0) {\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n }\r\n\r\n defines.IMAGEPROCESSINGPOSTPROCESS = scene.imageProcessingConfiguration.applyByPostProcess;\r\n\r\n //Attributes\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n if (defines.NORMAL) {\r\n attribs.push(VertexBuffer.NormalKind);\r\n }\r\n\r\n MaterialHelper.PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\r\n MaterialHelper.PrepareAttributesForInstances(attribs, defines);\r\n\r\n const shaderName = \"shadowOnly\";\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 \"vFogInfos\",\r\n \"vFogColor\",\r\n \"pointSize\",\r\n \"alpha\",\r\n \"shadowColor\",\r\n \"mBones\",\r\n \"vClipPlane\",\r\n \"vClipPlane2\",\r\n \"vClipPlane3\",\r\n \"vClipPlane4\",\r\n \"vClipPlane5\",\r\n \"vClipPlane6\",\r\n ];\r\n const samplers = new Array<string>();\r\n\r\n const uniformBuffers = new Array<string>();\r\n\r\n MaterialHelper.PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: defines,\r\n maxSimultaneousLights: 1,\r\n });\r\n\r\n subMesh.setEffect(\r\n scene.getEngine().createEffect(\r\n shaderName,\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: this.onCompiled,\r\n onError: this.onError,\r\n indexParameters: { maxSimultaneousLights: 1 },\r\n },\r\n engine\r\n ),\r\n defines,\r\n this._materialContext\r\n );\r\n }\r\n if (!subMesh.effect || !subMesh.effect.isReady()) {\r\n return false;\r\n }\r\n\r\n defines._renderId = scene.getRenderId();\r\n subMesh.effect._wasPreviouslyReady = true;\r\n subMesh.effect._wasPreviouslyUsingInstances = !!useInstances;\r\n\r\n return true;\r\n }\r\n\r\n public bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const scene = this.getScene();\r\n\r\n const defines = <ShadowOnlyMaterialDefines>subMesh.materialDefines;\r\n if (!defines) {\r\n return;\r\n }\r\n\r\n const effect = subMesh.effect;\r\n if (!effect) {\r\n return;\r\n }\r\n this._activeEffect = effect;\r\n\r\n // Matrices\r\n this.bindOnlyWorldMatrix(world);\r\n this._activeEffect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n\r\n // Bones\r\n MaterialHelper.BindBonesParameters(mesh, this._activeEffect);\r\n\r\n if (this._mustRebind(scene, effect)) {\r\n // Clip plane\r\n MaterialHelper.BindClipPlane(this._activeEffect, 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 this._activeEffect.setFloat(\"alpha\", this.alpha);\r\n this._activeEffect.setColor3(\"shadowColor\", this.shadowColor);\r\n\r\n scene.bindEyePosition(effect);\r\n }\r\n\r\n // Lights\r\n if (scene.lightsEnabled) {\r\n MaterialHelper.BindLights(scene, mesh, this._activeEffect, defines, 1);\r\n\r\n const light = this._getFirstShadowLightForMesh(mesh);\r\n\r\n if (light) {\r\n // Make sure the uniforms for this light will be rebound for other materials using this light when rendering the current frame.\r\n // Indeed, there is an optimization in Light that binds the light uniforms only once per frame for a given light (if using ubo).\r\n // Doing this way assumes that all uses of this light are the same, meaning all parameters passed to Light._bindLlight\r\n // are the same, notably useSpecular. However, isReadyForSubMesh (see above) is passing false for this parameter, which may not be\r\n // the value the other materials may pass.\r\n light._renderId = -1;\r\n }\r\n }\r\n\r\n // View\r\n if ((scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) || defines[\"SHADOWCSM0\"]) {\r\n this._activeEffect.setMatrix(\"view\", scene.getViewMatrix());\r\n }\r\n\r\n // Fog\r\n MaterialHelper.BindFogParameters(scene, mesh, this._activeEffect);\r\n\r\n this._afterBind(mesh, this._activeEffect);\r\n }\r\n\r\n public clone(name: string): ShadowOnlyMaterial {\r\n return SerializationHelper.Clone<ShadowOnlyMaterial>(() => new ShadowOnlyMaterial(name, this.getScene()), this);\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.customType = \"BABYLON.ShadowOnlyMaterial\";\r\n return serializationObject;\r\n }\r\n\r\n public getClassName(): string {\r\n return \"ShadowOnlyMaterial\";\r\n }\r\n\r\n // Statics\r\n public static Parse(source: any, scene: Scene, rootUrl: string): ShadowOnlyMaterial {\r\n return SerializationHelper.Parse(() => new ShadowOnlyMaterial(source.name, scene), source, scene, rootUrl);\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ShadowOnlyMaterial\", ShadowOnlyMaterial);\r\n"]}
|
package/water/waterMaterial.js
CHANGED
@@ -495,7 +495,7 @@ export class WaterMaterial extends PushMaterial {
|
|
495
495
|
// Clip plane
|
496
496
|
if (!this.disableClipPlane) {
|
497
497
|
clipPlane = scene.clipPlane;
|
498
|
-
const positiony = this._mesh ? this._mesh.
|
498
|
+
const positiony = this._mesh ? this._mesh.absolutePosition.y : 0.0;
|
499
499
|
scene.clipPlane = Plane.FromPositionAndNormal(new Vector3(0, positiony + 0.05, 0), new Vector3(0, 1, 0));
|
500
500
|
}
|
501
501
|
};
|
@@ -516,7 +516,7 @@ export class WaterMaterial extends PushMaterial {
|
|
516
516
|
// Clip plane
|
517
517
|
if (!this.disableClipPlane) {
|
518
518
|
clipPlane = scene.clipPlane;
|
519
|
-
const positiony = this._mesh ? this._mesh.
|
519
|
+
const positiony = this._mesh ? this._mesh.absolutePosition.y : 0.0;
|
520
520
|
scene.clipPlane = Plane.FromPositionAndNormal(new Vector3(0, positiony - 0.05, 0), new Vector3(0, -1, 0));
|
521
521
|
Matrix.ReflectionToRef(scene.clipPlane, mirrorMatrix);
|
522
522
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"waterMaterial.js","sourceRoot":"","sources":["../../../../../lts/materials/generated/water/waterMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"core/types\";\r\nimport { serializeAsVector2, serializeAsTexture, serialize, expandToProperty, serializeAsColor3, SerializationHelper } from \"core/Misc/decorators\";\r\nimport { Matrix, Vector2, Vector3 } from \"core/Maths/math.vector\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { Plane } from \"core/Maths/math.plane\";\r\nimport type { IAnimatable } from \"core/Animations/animatable.interface\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { SmartArray } from \"core/Misc/smartArray\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { RenderTargetTexture } from \"core/Materials/Textures/renderTargetTexture\";\r\nimport type { IEffectCreationOptions } from \"core/Materials/effect\";\r\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport type { IImageProcessingConfigurationDefines } from \"core/Materials/imageProcessingConfiguration\";\r\nimport { ImageProcessingConfiguration } from \"core/Materials/imageProcessingConfiguration\";\r\nimport { MaterialHelper } from \"core/Materials/materialHelper\";\r\nimport { PushMaterial } from \"core/Materials/pushMaterial\";\r\nimport { MaterialFlags } from \"core/Materials/materialFlags\";\r\nimport { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { SubMesh } from \"core/Meshes/subMesh\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport type { Camera } from \"core/Cameras/camera\";\r\nimport { Scene } from \"core/scene\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\n\r\nimport \"./water.fragment\";\r\nimport \"./water.vertex\";\r\nimport { EffectFallbacks } from \"core/Materials/effectFallbacks\";\r\nimport { CreateGround } from \"core/Meshes/Builders/groundBuilder\";\r\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\r\n public IMAGEPROCESSING = false;\r\n public VIGNETTE = false;\r\n public VIGNETTEBLENDMODEMULTIPLY = false;\r\n public VIGNETTEBLENDMODEOPAQUE = false;\r\n public TONEMAPPING = false;\r\n public TONEMAPPING_ACES = false;\r\n public CONTRAST = false;\r\n public EXPOSURE = false;\r\n public COLORCURVES = false;\r\n public COLORGRADING = false;\r\n public COLORGRADING3D = false;\r\n public SAMPLER3DGREENDEPTH = false;\r\n public SAMPLER3DBGRMAP = false;\r\n public DITHER = false;\r\n public IMAGEPROCESSINGPOSTPROCESS = false;\r\n public SKIPFINALCOLORCLAMP = false;\r\n\r\n constructor() {\r\n super();\r\n this.rebuild();\r\n }\r\n}\r\n\r\nexport class WaterMaterial extends PushMaterial {\r\n /*\r\n * Public members\r\n */\r\n @serializeAsTexture(\"bumpTexture\")\r\n private _bumpTexture: BaseTexture;\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public bumpTexture: BaseTexture;\r\n\r\n @serializeAsColor3()\r\n public diffuseColor = new Color3(1, 1, 1);\r\n\r\n @serializeAsColor3()\r\n public specularColor = new Color3(0, 0, 0);\r\n\r\n @serialize()\r\n public specularPower = 64;\r\n\r\n @serialize(\"disableLighting\")\r\n private _disableLighting = false;\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public disableLighting: boolean;\r\n\r\n @serialize(\"maxSimultaneousLights\")\r\n private _maxSimultaneousLights = 4;\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public maxSimultaneousLights: number;\r\n\r\n /**\r\n * Defines the wind force.\r\n */\r\n @serialize()\r\n public windForce: number = 6;\r\n /**\r\n * Defines the direction of the wind in the plane (X, Z).\r\n */\r\n @serializeAsVector2()\r\n public windDirection: Vector2 = new Vector2(0, 1);\r\n /**\r\n * Defines the height of the waves.\r\n */\r\n @serialize()\r\n public waveHeight: number = 0.4;\r\n /**\r\n * Defines the bump height related to the bump map.\r\n */\r\n @serialize()\r\n public bumpHeight: number = 0.4;\r\n /**\r\n * Defines wether or not: to add a smaller moving bump to less steady waves.\r\n */\r\n @serialize(\"bumpSuperimpose\")\r\n private _bumpSuperimpose = false;\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public bumpSuperimpose: boolean;\r\n\r\n /**\r\n * Defines wether or not color refraction and reflection differently with .waterColor2 and .colorBlendFactor2. Non-linear (physically correct) fresnel.\r\n */\r\n @serialize(\"fresnelSeparate\")\r\n private _fresnelSeparate = false;\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public fresnelSeparate: boolean;\r\n\r\n /**\r\n * Defines wether or not bump Wwves modify the reflection.\r\n */\r\n @serialize(\"bumpAffectsReflection\")\r\n private _bumpAffectsReflection = false;\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public bumpAffectsReflection: boolean;\r\n\r\n /**\r\n * Defines the water color blended with the refraction (near).\r\n */\r\n @serializeAsColor3()\r\n public waterColor: Color3 = new Color3(0.1, 0.1, 0.6);\r\n /**\r\n * Defines the blend factor related to the water color.\r\n */\r\n @serialize()\r\n public colorBlendFactor: number = 0.2;\r\n /**\r\n * Defines the water color blended with the reflection (far).\r\n */\r\n @serializeAsColor3()\r\n public waterColor2: Color3 = new Color3(0.1, 0.1, 0.6);\r\n /**\r\n * Defines the blend factor related to the water color (reflection, far).\r\n */\r\n @serialize()\r\n public colorBlendFactor2: number = 0.2;\r\n /**\r\n * Defines the maximum length of a wave.\r\n */\r\n @serialize()\r\n public waveLength: number = 0.1;\r\n\r\n /**\r\n * Defines the waves speed.\r\n */\r\n @serialize()\r\n public waveSpeed: number = 1.0;\r\n\r\n /**\r\n * Defines the number of times waves are repeated. This is typically used to adjust waves count according to the ground's size where the material is applied on.\r\n */\r\n @serialize()\r\n public waveCount: number = 20;\r\n /**\r\n * Sets or gets whether or not automatic clipping should be enabled or not. Setting to true will save performances and\r\n * will avoid calculating useless pixels in the pixel shader of the water material.\r\n */\r\n @serialize()\r\n public disableClipPlane: boolean = false;\r\n\r\n 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 _useLogarithmicDepth: boolean;\r\n\r\n private _waitingRenderList: Nullable<string[]>;\r\n\r\n private _imageProcessingConfiguration: Nullable<ImageProcessingConfiguration>;\r\n private _imageProcessingObserver: Nullable<Observer<ImageProcessingConfiguration>>;\r\n\r\n /**\r\n * Gets a boolean indicating that current material needs to register RTT\r\n */\r\n public get hasRenderTargetTextures(): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Constructor\r\n * @param name\r\n * @param scene\r\n * @param renderTargetSize\r\n */\r\n constructor(name: string, scene?: Scene, public renderTargetSize: Vector2 = new Vector2(512, 512)) {\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 @serialize()\r\n public get useLogarithmicDepth(): boolean {\r\n return this._useLogarithmicDepth;\r\n }\r\n\r\n public set useLogarithmicDepth(value: boolean) {\r\n this._useLogarithmicDepth = value && this.getScene().getEngine().getCaps().fragmentDepthSupported;\r\n this._markAllSubMeshesAsMiscDirty();\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 enableRenderTargets(enable: boolean): void {\r\n const refreshRate = enable ? 1 : 0;\r\n\r\n if (this._refractionRTT) {\r\n this._refractionRTT.refreshRate = refreshRate;\r\n }\r\n\r\n if (this._reflectionRTT) {\r\n this._reflectionRTT.refreshRate = refreshRate;\r\n }\r\n }\r\n\r\n public getRenderList(): Nullable<AbstractMesh[]> {\r\n return this._refractionRTT ? this._refractionRTT.renderList : [];\r\n }\r\n\r\n public get renderTargetsEnabled(): boolean {\r\n return !(this._refractionRTT && this._refractionRTT.refreshRate === 0);\r\n }\r\n\r\n public needAlphaBlending(): boolean {\r\n return this.alpha < 1.0;\r\n }\r\n\r\n public needAlphaTesting(): boolean {\r\n return false;\r\n }\r\n\r\n public getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n public isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\r\n if (this.isFrozen) {\r\n if (subMesh.effect && subMesh.effect._wasPreviouslyReady && subMesh.effect._wasPreviouslyUsingInstances === useInstances) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n subMesh.materialDefines = new WaterMaterialDefines();\r\n }\r\n\r\n const defines = <WaterMaterialDefines>subMesh.materialDefines;\r\n const scene = this.getScene();\r\n\r\n if (this._isReadyForSubMesh(subMesh)) {\r\n return true;\r\n }\r\n\r\n const engine = scene.getEngine();\r\n\r\n // Textures\r\n if (defines._areTexturesDirty) {\r\n defines._needUVs = false;\r\n if (scene.texturesEnabled) {\r\n if (this.bumpTexture && MaterialFlags.BumpTextureEnabled) {\r\n if (!this.bumpTexture.isReady()) {\r\n return false;\r\n } else {\r\n defines._needUVs = true;\r\n defines.BUMP = true;\r\n }\r\n }\r\n\r\n if (MaterialFlags.ReflectionTextureEnabled) {\r\n defines.REFLECTION = true;\r\n }\r\n }\r\n }\r\n\r\n MaterialHelper.PrepareDefinesForFrameBoundValues(scene, engine, defines, useInstances ? true : false);\r\n\r\n MaterialHelper.PrepareDefinesForMisc(mesh, scene, this._useLogarithmicDepth, this.pointsCloud, this.fogEnabled, this._shouldTurnAlphaTestOn(mesh), defines);\r\n\r\n if (defines._areMiscDirty) {\r\n if (this._fresnelSeparate) {\r\n defines.FRESNELSEPARATE = true;\r\n }\r\n\r\n if (this._bumpSuperimpose) {\r\n defines.BUMPSUPERIMPOSE = true;\r\n }\r\n\r\n if (this._bumpAffectsReflection) {\r\n defines.BUMPAFFECTSREFLECTION = true;\r\n }\r\n }\r\n\r\n // Lights\r\n defines._needNormals = MaterialHelper.PrepareDefinesForLights(scene, mesh, defines, true, this._maxSimultaneousLights, this._disableLighting);\r\n\r\n // Image processing\r\n if (defines._areImageProcessingDirty && this._imageProcessingConfiguration) {\r\n if (!this._imageProcessingConfiguration.isReady()) {\r\n return false;\r\n }\r\n\r\n this._imageProcessingConfiguration.prepareDefines(defines);\r\n\r\n defines.IS_REFLECTION_LINEAR = this.reflectionTexture != null && !this.reflectionTexture.gammaSpace;\r\n defines.IS_REFRACTION_LINEAR = this.refractionTexture != null && !this.refractionTexture.gammaSpace;\r\n }\r\n\r\n // Attribs\r\n MaterialHelper.PrepareDefinesForAttributes(mesh, defines, true, true);\r\n\r\n // Configure this\r\n this._mesh = mesh;\r\n\r\n if (this._waitingRenderList) {\r\n for (let i = 0; i < this._waitingRenderList.length; i++) {\r\n this.addToRenderList(scene.getNodeById(this._waitingRenderList[i]));\r\n }\r\n\r\n this._waitingRenderList = null;\r\n }\r\n\r\n // Get correct effect\r\n if (defines.isDirty) {\r\n defines.markAsProcessed();\r\n scene.resetCachedMaterial();\r\n\r\n // Fallbacks\r\n const fallbacks = new EffectFallbacks();\r\n if (defines.FOG) {\r\n fallbacks.addFallback(1, \"FOG\");\r\n }\r\n\r\n if (defines.LOGARITHMICDEPTH) {\r\n fallbacks.addFallback(0, \"LOGARITHMICDEPTH\");\r\n }\r\n\r\n MaterialHelper.HandleFallbacksForShadows(defines, fallbacks, this.maxSimultaneousLights);\r\n\r\n if (defines.NUM_BONE_INFLUENCERS > 0) {\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n }\r\n\r\n //Attributes\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n if (defines.NORMAL) {\r\n attribs.push(VertexBuffer.NormalKind);\r\n }\r\n\r\n if (defines.UV1) {\r\n attribs.push(VertexBuffer.UVKind);\r\n }\r\n\r\n if (defines.UV2) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n }\r\n\r\n if (defines.VERTEXCOLOR) {\r\n attribs.push(VertexBuffer.ColorKind);\r\n }\r\n\r\n MaterialHelper.PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\r\n MaterialHelper.PrepareAttributesForInstances(attribs, defines);\r\n\r\n // Legacy browser patch\r\n const shaderName = \"water\";\r\n const join = defines.toString();\r\n const uniforms = [\r\n \"world\",\r\n \"view\",\r\n \"viewProjection\",\r\n \"vEyePosition\",\r\n \"vLightsType\",\r\n \"vDiffuseColor\",\r\n \"vSpecularColor\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"pointSize\",\r\n \"vNormalInfos\",\r\n \"mBones\",\r\n \"vClipPlane\",\r\n \"vClipPlane2\",\r\n \"vClipPlane3\",\r\n \"vClipPlane4\",\r\n \"vClipPlane5\",\r\n \"vClipPlane6\",\r\n \"normalMatrix\",\r\n \"logarithmicDepthConstant\",\r\n\r\n // Water\r\n \"worldReflectionViewProjection\",\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 = new Array<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 MaterialHelper.PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: defines,\r\n maxSimultaneousLights: this.maxSimultaneousLights,\r\n });\r\n subMesh.setEffect(\r\n scene.getEngine().createEffect(\r\n shaderName,\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: this.onCompiled,\r\n onError: this.onError,\r\n indexParameters: { maxSimultaneousLights: this._maxSimultaneousLights },\r\n },\r\n engine\r\n ),\r\n defines,\r\n this._materialContext\r\n );\r\n }\r\n if (!subMesh.effect || !subMesh.effect.isReady()) {\r\n return false;\r\n }\r\n\r\n defines._renderId = scene.getRenderId();\r\n subMesh.effect._wasPreviouslyReady = true;\r\n subMesh.effect._wasPreviouslyUsingInstances = !!useInstances;\r\n\r\n return true;\r\n }\r\n\r\n public bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const scene = this.getScene();\r\n\r\n const defines = <WaterMaterialDefines>subMesh.materialDefines;\r\n if (!defines) {\r\n return;\r\n }\r\n\r\n const effect = subMesh.effect;\r\n if (!effect || !this._mesh) {\r\n return;\r\n }\r\n this._activeEffect = effect;\r\n\r\n // Matrices\r\n this.bindOnlyWorldMatrix(world);\r\n this._activeEffect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n\r\n // Bones\r\n MaterialHelper.BindBonesParameters(mesh, this._activeEffect);\r\n\r\n if (this._mustRebind(scene, effect)) {\r\n // Textures\r\n if (this.bumpTexture && MaterialFlags.BumpTextureEnabled) {\r\n this._activeEffect.setTexture(\"normalSampler\", this.bumpTexture);\r\n\r\n this._activeEffect.setFloat2(\"vNormalInfos\", this.bumpTexture.coordinatesIndex, this.bumpTexture.level);\r\n this._activeEffect.setMatrix(\"normalMatrix\", this.bumpTexture.getTextureMatrix());\r\n }\r\n // Clip plane\r\n MaterialHelper.BindClipPlane(this._activeEffect, 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 scene.bindEyePosition(effect);\r\n }\r\n\r\n this._activeEffect.setColor4(\"vDiffuseColor\", this.diffuseColor, this.alpha * mesh.visibility);\r\n\r\n if (defines.SPECULARTERM) {\r\n this._activeEffect.setColor4(\"vSpecularColor\", this.specularColor, this.specularPower);\r\n }\r\n\r\n if (scene.lightsEnabled && !this.disableLighting) {\r\n MaterialHelper.BindLights(scene, mesh, this._activeEffect, defines, this.maxSimultaneousLights);\r\n }\r\n\r\n // View\r\n if (scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) {\r\n this._activeEffect.setMatrix(\"view\", scene.getViewMatrix());\r\n }\r\n\r\n // Fog\r\n MaterialHelper.BindFogParameters(scene, mesh, this._activeEffect);\r\n\r\n // Log. depth\r\n MaterialHelper.BindLogDepth(defines, this._activeEffect, scene);\r\n\r\n // Water\r\n if (MaterialFlags.ReflectionTextureEnabled) {\r\n this._activeEffect.setTexture(\"refractionSampler\", this._refractionRTT);\r\n this._activeEffect.setTexture(\"reflectionSampler\", this._reflectionRTT);\r\n }\r\n\r\n const wrvp = this._mesh.getWorldMatrix().multiply(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(\"worldReflectionViewProjection\", wrvp);\r\n this._activeEffect.setVector2(\"windDirection\", this.windDirection);\r\n this._activeEffect.setFloat(\"waveLength\", this.waveLength);\r\n this._activeEffect.setFloat(\"time\", this._lastTime / 100000);\r\n this._activeEffect.setFloat(\"windForce\", this.windForce);\r\n this._activeEffect.setFloat(\"waveHeight\", this.waveHeight);\r\n this._activeEffect.setFloat(\"bumpHeight\", this.bumpHeight);\r\n this._activeEffect.setColor4(\"waterColor\", this.waterColor, 1.0);\r\n this._activeEffect.setFloat(\"colorBlendFactor\", this.colorBlendFactor);\r\n this._activeEffect.setColor4(\"waterColor2\", this.waterColor2, 1.0);\r\n this._activeEffect.setFloat(\"colorBlendFactor2\", this.colorBlendFactor2);\r\n this._activeEffect.setFloat(\"waveSpeed\", this.waveSpeed);\r\n this._activeEffect.setFloat(\"waveCount\", this.waveCount);\r\n\r\n // image processing\r\n if (this._imageProcessingConfiguration && !this._imageProcessingConfiguration.applyByPostProcess) {\r\n this._imageProcessingConfiguration.bind(this._activeEffect);\r\n }\r\n\r\n this._afterBind(mesh, this._activeEffect);\r\n }\r\n\r\n private _createRenderTargets(scene: Scene, renderTargetSize: Vector2): void {\r\n // Render targets\r\n this._refractionRTT = new RenderTargetTexture(name + \"_refraction\", { width: renderTargetSize.x, height: renderTargetSize.y }, scene, false, true);\r\n this._refractionRTT.wrapU = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n this._refractionRTT.wrapV = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n this._refractionRTT.ignoreCameraViewport = true;\r\n\r\n this._reflectionRTT = new RenderTargetTexture(name + \"_reflection\", { width: renderTargetSize.x, height: renderTargetSize.y }, scene, false, true);\r\n this._reflectionRTT.wrapU = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n this._reflectionRTT.wrapV = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n this._reflectionRTT.ignoreCameraViewport = true;\r\n\r\n let isVisible: boolean;\r\n let clipPlane: Nullable<Plane> = null;\r\n let savedViewMatrix: Matrix;\r\n const mirrorMatrix = Matrix.Zero();\r\n\r\n this._refractionRTT.onBeforeRender = () => {\r\n if (this._mesh) {\r\n isVisible = this._mesh.isVisible;\r\n this._mesh.isVisible = false;\r\n }\r\n\r\n // Clip plane\r\n if (!this.disableClipPlane) {\r\n clipPlane = scene.clipPlane;\r\n\r\n const positiony = this._mesh ? this._mesh.position.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.position.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.getEngine().cullBackFaces = false;\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.getEngine().cullBackFaces = null;\r\n scene._mirroredCameraPosition = null;\r\n };\r\n }\r\n\r\n public getAnimatables(): IAnimatable[] {\r\n const results = [];\r\n\r\n if (this.bumpTexture && this.bumpTexture.animations && this.bumpTexture.animations.length > 0) {\r\n results.push(this.bumpTexture);\r\n }\r\n if (this._reflectionRTT && this._reflectionRTT.animations && this._reflectionRTT.animations.length > 0) {\r\n results.push(this._reflectionRTT);\r\n }\r\n if (this._refractionRTT && this._refractionRTT.animations && this._refractionRTT.animations.length > 0) {\r\n results.push(this._refractionRTT);\r\n }\r\n\r\n return results;\r\n }\r\n\r\n public getActiveTextures(): BaseTexture[] {\r\n const activeTextures = super.getActiveTextures();\r\n\r\n if (this._bumpTexture) {\r\n activeTextures.push(this._bumpTexture);\r\n }\r\n\r\n return activeTextures;\r\n }\r\n\r\n public hasTexture(texture: BaseTexture): boolean {\r\n if (super.hasTexture(texture)) {\r\n return true;\r\n }\r\n\r\n if (this._bumpTexture === texture) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public dispose(forceDisposeEffect?: boolean): void {\r\n if (this.bumpTexture) {\r\n this.bumpTexture.dispose();\r\n }\r\n\r\n let index = this.getScene().customRenderTargets.indexOf(<RenderTargetTexture>this._refractionRTT);\r\n if (index != -1) {\r\n this.getScene().customRenderTargets.splice(index, 1);\r\n }\r\n index = -1;\r\n index = this.getScene().customRenderTargets.indexOf(<RenderTargetTexture>this._reflectionRTT);\r\n if (index != -1) {\r\n this.getScene().customRenderTargets.splice(index, 1);\r\n }\r\n\r\n if (this._reflectionRTT) {\r\n this._reflectionRTT.dispose();\r\n }\r\n if (this._refractionRTT) {\r\n this._refractionRTT.dispose();\r\n }\r\n\r\n // Remove image-processing observer\r\n if (this._imageProcessingConfiguration && this._imageProcessingObserver) {\r\n this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver);\r\n }\r\n\r\n super.dispose(forceDisposeEffect);\r\n }\r\n\r\n public clone(name: string): WaterMaterial {\r\n return SerializationHelper.Clone(() => new WaterMaterial(name, this.getScene()), this);\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.customType = \"BABYLON.WaterMaterial\";\r\n\r\n serializationObject.renderList = [];\r\n if (this._refractionRTT && this._refractionRTT.renderList) {\r\n for (let i = 0; i < this._refractionRTT.renderList.length; i++) {\r\n serializationObject.renderList.push(this._refractionRTT.renderList[i].id);\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n public getClassName(): string {\r\n return \"WaterMaterial\";\r\n }\r\n\r\n // Statics\r\n public static Parse(source: any, scene: Scene, rootUrl: string): WaterMaterial {\r\n const mat = SerializationHelper.Parse(() => new WaterMaterial(source.name, scene), source, scene, rootUrl);\r\n mat._waitingRenderList = source.renderList;\r\n\r\n return mat;\r\n }\r\n\r\n public static CreateDefaultMesh(name: string, scene: Scene): Mesh {\r\n const mesh = CreateGround(name, { width: 512, height: 512, subdivisions: 32, updatable: false }, scene);\r\n return mesh;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.WaterMaterial\", WaterMaterial);\r\n"]}
|
1
|
+
{"version":3,"file":"waterMaterial.js","sourceRoot":"","sources":["../../../../../lts/materials/generated/water/waterMaterial.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"core/types\";\r\nimport { serializeAsVector2, serializeAsTexture, serialize, expandToProperty, serializeAsColor3, SerializationHelper } from \"core/Misc/decorators\";\r\nimport { Matrix, Vector2, Vector3 } from \"core/Maths/math.vector\";\r\nimport { Color3 } from \"core/Maths/math.color\";\r\nimport { Plane } from \"core/Maths/math.plane\";\r\nimport type { IAnimatable } from \"core/Animations/animatable.interface\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport { SmartArray } from \"core/Misc/smartArray\";\r\nimport type { Observer } from \"core/Misc/observable\";\r\nimport type { BaseTexture } from \"core/Materials/Textures/baseTexture\";\r\nimport { RenderTargetTexture } from \"core/Materials/Textures/renderTargetTexture\";\r\nimport type { IEffectCreationOptions } from \"core/Materials/effect\";\r\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport type { IImageProcessingConfigurationDefines } from \"core/Materials/imageProcessingConfiguration\";\r\nimport { ImageProcessingConfiguration } from \"core/Materials/imageProcessingConfiguration\";\r\nimport { MaterialHelper } from \"core/Materials/materialHelper\";\r\nimport { PushMaterial } from \"core/Materials/pushMaterial\";\r\nimport { MaterialFlags } from \"core/Materials/materialFlags\";\r\nimport { VertexBuffer } from \"core/Buffers/buffer\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport type { SubMesh } from \"core/Meshes/subMesh\";\r\nimport type { Mesh } from \"core/Meshes/mesh\";\r\nimport type { Camera } from \"core/Cameras/camera\";\r\nimport { Scene } from \"core/scene\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\n\r\nimport \"./water.fragment\";\r\nimport \"./water.vertex\";\r\nimport { EffectFallbacks } from \"core/Materials/effectFallbacks\";\r\nimport { CreateGround } from \"core/Meshes/Builders/groundBuilder\";\r\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\r\n public IMAGEPROCESSING = false;\r\n public VIGNETTE = false;\r\n public VIGNETTEBLENDMODEMULTIPLY = false;\r\n public VIGNETTEBLENDMODEOPAQUE = false;\r\n public TONEMAPPING = false;\r\n public TONEMAPPING_ACES = false;\r\n public CONTRAST = false;\r\n public EXPOSURE = false;\r\n public COLORCURVES = false;\r\n public COLORGRADING = false;\r\n public COLORGRADING3D = false;\r\n public SAMPLER3DGREENDEPTH = false;\r\n public SAMPLER3DBGRMAP = false;\r\n public DITHER = false;\r\n public IMAGEPROCESSINGPOSTPROCESS = false;\r\n public SKIPFINALCOLORCLAMP = false;\r\n\r\n constructor() {\r\n super();\r\n this.rebuild();\r\n }\r\n}\r\n\r\nexport class WaterMaterial extends PushMaterial {\r\n /*\r\n * Public members\r\n */\r\n @serializeAsTexture(\"bumpTexture\")\r\n private _bumpTexture: BaseTexture;\r\n @expandToProperty(\"_markAllSubMeshesAsTexturesDirty\")\r\n public bumpTexture: BaseTexture;\r\n\r\n @serializeAsColor3()\r\n public diffuseColor = new Color3(1, 1, 1);\r\n\r\n @serializeAsColor3()\r\n public specularColor = new Color3(0, 0, 0);\r\n\r\n @serialize()\r\n public specularPower = 64;\r\n\r\n @serialize(\"disableLighting\")\r\n private _disableLighting = false;\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public disableLighting: boolean;\r\n\r\n @serialize(\"maxSimultaneousLights\")\r\n private _maxSimultaneousLights = 4;\r\n @expandToProperty(\"_markAllSubMeshesAsLightsDirty\")\r\n public maxSimultaneousLights: number;\r\n\r\n /**\r\n * Defines the wind force.\r\n */\r\n @serialize()\r\n public windForce: number = 6;\r\n /**\r\n * Defines the direction of the wind in the plane (X, Z).\r\n */\r\n @serializeAsVector2()\r\n public windDirection: Vector2 = new Vector2(0, 1);\r\n /**\r\n * Defines the height of the waves.\r\n */\r\n @serialize()\r\n public waveHeight: number = 0.4;\r\n /**\r\n * Defines the bump height related to the bump map.\r\n */\r\n @serialize()\r\n public bumpHeight: number = 0.4;\r\n /**\r\n * Defines wether or not: to add a smaller moving bump to less steady waves.\r\n */\r\n @serialize(\"bumpSuperimpose\")\r\n private _bumpSuperimpose = false;\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public bumpSuperimpose: boolean;\r\n\r\n /**\r\n * Defines wether or not color refraction and reflection differently with .waterColor2 and .colorBlendFactor2. Non-linear (physically correct) fresnel.\r\n */\r\n @serialize(\"fresnelSeparate\")\r\n private _fresnelSeparate = false;\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public fresnelSeparate: boolean;\r\n\r\n /**\r\n * Defines wether or not bump Wwves modify the reflection.\r\n */\r\n @serialize(\"bumpAffectsReflection\")\r\n private _bumpAffectsReflection = false;\r\n @expandToProperty(\"_markAllSubMeshesAsMiscDirty\")\r\n public bumpAffectsReflection: boolean;\r\n\r\n /**\r\n * Defines the water color blended with the refraction (near).\r\n */\r\n @serializeAsColor3()\r\n public waterColor: Color3 = new Color3(0.1, 0.1, 0.6);\r\n /**\r\n * Defines the blend factor related to the water color.\r\n */\r\n @serialize()\r\n public colorBlendFactor: number = 0.2;\r\n /**\r\n * Defines the water color blended with the reflection (far).\r\n */\r\n @serializeAsColor3()\r\n public waterColor2: Color3 = new Color3(0.1, 0.1, 0.6);\r\n /**\r\n * Defines the blend factor related to the water color (reflection, far).\r\n */\r\n @serialize()\r\n public colorBlendFactor2: number = 0.2;\r\n /**\r\n * Defines the maximum length of a wave.\r\n */\r\n @serialize()\r\n public waveLength: number = 0.1;\r\n\r\n /**\r\n * Defines the waves speed.\r\n */\r\n @serialize()\r\n public waveSpeed: number = 1.0;\r\n\r\n /**\r\n * Defines the number of times waves are repeated. This is typically used to adjust waves count according to the ground's size where the material is applied on.\r\n */\r\n @serialize()\r\n public waveCount: number = 20;\r\n /**\r\n * Sets or gets whether or not automatic clipping should be enabled or not. Setting to true will save performances and\r\n * will avoid calculating useless pixels in the pixel shader of the water material.\r\n */\r\n @serialize()\r\n public disableClipPlane: boolean = false;\r\n\r\n 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 _useLogarithmicDepth: boolean;\r\n\r\n private _waitingRenderList: Nullable<string[]>;\r\n\r\n private _imageProcessingConfiguration: Nullable<ImageProcessingConfiguration>;\r\n private _imageProcessingObserver: Nullable<Observer<ImageProcessingConfiguration>>;\r\n\r\n /**\r\n * Gets a boolean indicating that current material needs to register RTT\r\n */\r\n public get hasRenderTargetTextures(): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Constructor\r\n * @param name\r\n * @param scene\r\n * @param renderTargetSize\r\n */\r\n constructor(name: string, scene?: Scene, public renderTargetSize: Vector2 = new Vector2(512, 512)) {\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 @serialize()\r\n public get useLogarithmicDepth(): boolean {\r\n return this._useLogarithmicDepth;\r\n }\r\n\r\n public set useLogarithmicDepth(value: boolean) {\r\n this._useLogarithmicDepth = value && this.getScene().getEngine().getCaps().fragmentDepthSupported;\r\n this._markAllSubMeshesAsMiscDirty();\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 enableRenderTargets(enable: boolean): void {\r\n const refreshRate = enable ? 1 : 0;\r\n\r\n if (this._refractionRTT) {\r\n this._refractionRTT.refreshRate = refreshRate;\r\n }\r\n\r\n if (this._reflectionRTT) {\r\n this._reflectionRTT.refreshRate = refreshRate;\r\n }\r\n }\r\n\r\n public getRenderList(): Nullable<AbstractMesh[]> {\r\n return this._refractionRTT ? this._refractionRTT.renderList : [];\r\n }\r\n\r\n public get renderTargetsEnabled(): boolean {\r\n return !(this._refractionRTT && this._refractionRTT.refreshRate === 0);\r\n }\r\n\r\n public needAlphaBlending(): boolean {\r\n return this.alpha < 1.0;\r\n }\r\n\r\n public needAlphaTesting(): boolean {\r\n return false;\r\n }\r\n\r\n public getAlphaTestTexture(): Nullable<BaseTexture> {\r\n return null;\r\n }\r\n\r\n public isReadyForSubMesh(mesh: AbstractMesh, subMesh: SubMesh, useInstances?: boolean): boolean {\r\n if (this.isFrozen) {\r\n if (subMesh.effect && subMesh.effect._wasPreviouslyReady && subMesh.effect._wasPreviouslyUsingInstances === useInstances) {\r\n return true;\r\n }\r\n }\r\n\r\n if (!subMesh.materialDefines) {\r\n subMesh.materialDefines = new WaterMaterialDefines();\r\n }\r\n\r\n const defines = <WaterMaterialDefines>subMesh.materialDefines;\r\n const scene = this.getScene();\r\n\r\n if (this._isReadyForSubMesh(subMesh)) {\r\n return true;\r\n }\r\n\r\n const engine = scene.getEngine();\r\n\r\n // Textures\r\n if (defines._areTexturesDirty) {\r\n defines._needUVs = false;\r\n if (scene.texturesEnabled) {\r\n if (this.bumpTexture && MaterialFlags.BumpTextureEnabled) {\r\n if (!this.bumpTexture.isReady()) {\r\n return false;\r\n } else {\r\n defines._needUVs = true;\r\n defines.BUMP = true;\r\n }\r\n }\r\n\r\n if (MaterialFlags.ReflectionTextureEnabled) {\r\n defines.REFLECTION = true;\r\n }\r\n }\r\n }\r\n\r\n MaterialHelper.PrepareDefinesForFrameBoundValues(scene, engine, defines, useInstances ? true : false);\r\n\r\n MaterialHelper.PrepareDefinesForMisc(mesh, scene, this._useLogarithmicDepth, this.pointsCloud, this.fogEnabled, this._shouldTurnAlphaTestOn(mesh), defines);\r\n\r\n if (defines._areMiscDirty) {\r\n if (this._fresnelSeparate) {\r\n defines.FRESNELSEPARATE = true;\r\n }\r\n\r\n if (this._bumpSuperimpose) {\r\n defines.BUMPSUPERIMPOSE = true;\r\n }\r\n\r\n if (this._bumpAffectsReflection) {\r\n defines.BUMPAFFECTSREFLECTION = true;\r\n }\r\n }\r\n\r\n // Lights\r\n defines._needNormals = MaterialHelper.PrepareDefinesForLights(scene, mesh, defines, true, this._maxSimultaneousLights, this._disableLighting);\r\n\r\n // Image processing\r\n if (defines._areImageProcessingDirty && this._imageProcessingConfiguration) {\r\n if (!this._imageProcessingConfiguration.isReady()) {\r\n return false;\r\n }\r\n\r\n this._imageProcessingConfiguration.prepareDefines(defines);\r\n\r\n defines.IS_REFLECTION_LINEAR = this.reflectionTexture != null && !this.reflectionTexture.gammaSpace;\r\n defines.IS_REFRACTION_LINEAR = this.refractionTexture != null && !this.refractionTexture.gammaSpace;\r\n }\r\n\r\n // Attribs\r\n MaterialHelper.PrepareDefinesForAttributes(mesh, defines, true, true);\r\n\r\n // Configure this\r\n this._mesh = mesh;\r\n\r\n if (this._waitingRenderList) {\r\n for (let i = 0; i < this._waitingRenderList.length; i++) {\r\n this.addToRenderList(scene.getNodeById(this._waitingRenderList[i]));\r\n }\r\n\r\n this._waitingRenderList = null;\r\n }\r\n\r\n // Get correct effect\r\n if (defines.isDirty) {\r\n defines.markAsProcessed();\r\n scene.resetCachedMaterial();\r\n\r\n // Fallbacks\r\n const fallbacks = new EffectFallbacks();\r\n if (defines.FOG) {\r\n fallbacks.addFallback(1, \"FOG\");\r\n }\r\n\r\n if (defines.LOGARITHMICDEPTH) {\r\n fallbacks.addFallback(0, \"LOGARITHMICDEPTH\");\r\n }\r\n\r\n MaterialHelper.HandleFallbacksForShadows(defines, fallbacks, this.maxSimultaneousLights);\r\n\r\n if (defines.NUM_BONE_INFLUENCERS > 0) {\r\n fallbacks.addCPUSkinningFallback(0, mesh);\r\n }\r\n\r\n //Attributes\r\n const attribs = [VertexBuffer.PositionKind];\r\n\r\n if (defines.NORMAL) {\r\n attribs.push(VertexBuffer.NormalKind);\r\n }\r\n\r\n if (defines.UV1) {\r\n attribs.push(VertexBuffer.UVKind);\r\n }\r\n\r\n if (defines.UV2) {\r\n attribs.push(VertexBuffer.UV2Kind);\r\n }\r\n\r\n if (defines.VERTEXCOLOR) {\r\n attribs.push(VertexBuffer.ColorKind);\r\n }\r\n\r\n MaterialHelper.PrepareAttributesForBones(attribs, mesh, defines, fallbacks);\r\n MaterialHelper.PrepareAttributesForInstances(attribs, defines);\r\n\r\n // Legacy browser patch\r\n const shaderName = \"water\";\r\n const join = defines.toString();\r\n const uniforms = [\r\n \"world\",\r\n \"view\",\r\n \"viewProjection\",\r\n \"vEyePosition\",\r\n \"vLightsType\",\r\n \"vDiffuseColor\",\r\n \"vSpecularColor\",\r\n \"vFogInfos\",\r\n \"vFogColor\",\r\n \"pointSize\",\r\n \"vNormalInfos\",\r\n \"mBones\",\r\n \"vClipPlane\",\r\n \"vClipPlane2\",\r\n \"vClipPlane3\",\r\n \"vClipPlane4\",\r\n \"vClipPlane5\",\r\n \"vClipPlane6\",\r\n \"normalMatrix\",\r\n \"logarithmicDepthConstant\",\r\n\r\n // Water\r\n \"worldReflectionViewProjection\",\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 = new Array<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 MaterialHelper.PrepareUniformsAndSamplersList(<IEffectCreationOptions>{\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: defines,\r\n maxSimultaneousLights: this.maxSimultaneousLights,\r\n });\r\n subMesh.setEffect(\r\n scene.getEngine().createEffect(\r\n shaderName,\r\n <IEffectCreationOptions>{\r\n attributes: attribs,\r\n uniformsNames: uniforms,\r\n uniformBuffersNames: uniformBuffers,\r\n samplers: samplers,\r\n defines: join,\r\n fallbacks: fallbacks,\r\n onCompiled: this.onCompiled,\r\n onError: this.onError,\r\n indexParameters: { maxSimultaneousLights: this._maxSimultaneousLights },\r\n },\r\n engine\r\n ),\r\n defines,\r\n this._materialContext\r\n );\r\n }\r\n if (!subMesh.effect || !subMesh.effect.isReady()) {\r\n return false;\r\n }\r\n\r\n defines._renderId = scene.getRenderId();\r\n subMesh.effect._wasPreviouslyReady = true;\r\n subMesh.effect._wasPreviouslyUsingInstances = !!useInstances;\r\n\r\n return true;\r\n }\r\n\r\n public bindForSubMesh(world: Matrix, mesh: Mesh, subMesh: SubMesh): void {\r\n const scene = this.getScene();\r\n\r\n const defines = <WaterMaterialDefines>subMesh.materialDefines;\r\n if (!defines) {\r\n return;\r\n }\r\n\r\n const effect = subMesh.effect;\r\n if (!effect || !this._mesh) {\r\n return;\r\n }\r\n this._activeEffect = effect;\r\n\r\n // Matrices\r\n this.bindOnlyWorldMatrix(world);\r\n this._activeEffect.setMatrix(\"viewProjection\", scene.getTransformMatrix());\r\n\r\n // Bones\r\n MaterialHelper.BindBonesParameters(mesh, this._activeEffect);\r\n\r\n if (this._mustRebind(scene, effect)) {\r\n // Textures\r\n if (this.bumpTexture && MaterialFlags.BumpTextureEnabled) {\r\n this._activeEffect.setTexture(\"normalSampler\", this.bumpTexture);\r\n\r\n this._activeEffect.setFloat2(\"vNormalInfos\", this.bumpTexture.coordinatesIndex, this.bumpTexture.level);\r\n this._activeEffect.setMatrix(\"normalMatrix\", this.bumpTexture.getTextureMatrix());\r\n }\r\n // Clip plane\r\n MaterialHelper.BindClipPlane(this._activeEffect, 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 scene.bindEyePosition(effect);\r\n }\r\n\r\n this._activeEffect.setColor4(\"vDiffuseColor\", this.diffuseColor, this.alpha * mesh.visibility);\r\n\r\n if (defines.SPECULARTERM) {\r\n this._activeEffect.setColor4(\"vSpecularColor\", this.specularColor, this.specularPower);\r\n }\r\n\r\n if (scene.lightsEnabled && !this.disableLighting) {\r\n MaterialHelper.BindLights(scene, mesh, this._activeEffect, defines, this.maxSimultaneousLights);\r\n }\r\n\r\n // View\r\n if (scene.fogEnabled && mesh.applyFog && scene.fogMode !== Scene.FOGMODE_NONE) {\r\n this._activeEffect.setMatrix(\"view\", scene.getViewMatrix());\r\n }\r\n\r\n // Fog\r\n MaterialHelper.BindFogParameters(scene, mesh, this._activeEffect);\r\n\r\n // Log. depth\r\n MaterialHelper.BindLogDepth(defines, this._activeEffect, scene);\r\n\r\n // Water\r\n if (MaterialFlags.ReflectionTextureEnabled) {\r\n this._activeEffect.setTexture(\"refractionSampler\", this._refractionRTT);\r\n this._activeEffect.setTexture(\"reflectionSampler\", this._reflectionRTT);\r\n }\r\n\r\n const wrvp = this._mesh.getWorldMatrix().multiply(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(\"worldReflectionViewProjection\", wrvp);\r\n this._activeEffect.setVector2(\"windDirection\", this.windDirection);\r\n this._activeEffect.setFloat(\"waveLength\", this.waveLength);\r\n this._activeEffect.setFloat(\"time\", this._lastTime / 100000);\r\n this._activeEffect.setFloat(\"windForce\", this.windForce);\r\n this._activeEffect.setFloat(\"waveHeight\", this.waveHeight);\r\n this._activeEffect.setFloat(\"bumpHeight\", this.bumpHeight);\r\n this._activeEffect.setColor4(\"waterColor\", this.waterColor, 1.0);\r\n this._activeEffect.setFloat(\"colorBlendFactor\", this.colorBlendFactor);\r\n this._activeEffect.setColor4(\"waterColor2\", this.waterColor2, 1.0);\r\n this._activeEffect.setFloat(\"colorBlendFactor2\", this.colorBlendFactor2);\r\n this._activeEffect.setFloat(\"waveSpeed\", this.waveSpeed);\r\n this._activeEffect.setFloat(\"waveCount\", this.waveCount);\r\n\r\n // image processing\r\n if (this._imageProcessingConfiguration && !this._imageProcessingConfiguration.applyByPostProcess) {\r\n this._imageProcessingConfiguration.bind(this._activeEffect);\r\n }\r\n\r\n this._afterBind(mesh, this._activeEffect);\r\n }\r\n\r\n private _createRenderTargets(scene: Scene, renderTargetSize: Vector2): void {\r\n // Render targets\r\n this._refractionRTT = new RenderTargetTexture(name + \"_refraction\", { width: renderTargetSize.x, height: renderTargetSize.y }, scene, false, true);\r\n this._refractionRTT.wrapU = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n this._refractionRTT.wrapV = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n this._refractionRTT.ignoreCameraViewport = true;\r\n\r\n this._reflectionRTT = new RenderTargetTexture(name + \"_reflection\", { width: renderTargetSize.x, height: renderTargetSize.y }, scene, false, true);\r\n this._reflectionRTT.wrapU = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n this._reflectionRTT.wrapV = Constants.TEXTURE_MIRROR_ADDRESSMODE;\r\n this._reflectionRTT.ignoreCameraViewport = true;\r\n\r\n let isVisible: boolean;\r\n let clipPlane: Nullable<Plane> = null;\r\n let savedViewMatrix: Matrix;\r\n const mirrorMatrix = Matrix.Zero();\r\n\r\n this._refractionRTT.onBeforeRender = () => {\r\n if (this._mesh) {\r\n isVisible = this._mesh.isVisible;\r\n this._mesh.isVisible = false;\r\n }\r\n\r\n // Clip plane\r\n if (!this.disableClipPlane) {\r\n clipPlane = scene.clipPlane;\r\n\r\n const positiony = this._mesh ? this._mesh.absolutePosition.y : 0.0;\r\n scene.clipPlane = Plane.FromPositionAndNormal(new Vector3(0, positiony + 0.05, 0), new Vector3(0, 1, 0));\r\n }\r\n };\r\n\r\n this._refractionRTT.onAfterRender = () => {\r\n if (this._mesh) {\r\n this._mesh.isVisible = isVisible;\r\n }\r\n\r\n // Clip plane\r\n if (!this.disableClipPlane) {\r\n scene.clipPlane = clipPlane;\r\n }\r\n };\r\n\r\n this._reflectionRTT.onBeforeRender = () => {\r\n if (this._mesh) {\r\n isVisible = this._mesh.isVisible;\r\n this._mesh.isVisible = false;\r\n }\r\n\r\n // Clip plane\r\n if (!this.disableClipPlane) {\r\n clipPlane = scene.clipPlane;\r\n\r\n const positiony = this._mesh ? this._mesh.absolutePosition.y : 0.0;\r\n scene.clipPlane = Plane.FromPositionAndNormal(new Vector3(0, positiony - 0.05, 0), new Vector3(0, -1, 0));\r\n\r\n Matrix.ReflectionToRef(scene.clipPlane, mirrorMatrix);\r\n }\r\n\r\n // Transform\r\n savedViewMatrix = scene.getViewMatrix();\r\n\r\n mirrorMatrix.multiplyToRef(savedViewMatrix, this._reflectionTransform);\r\n scene.setTransformMatrix(this._reflectionTransform, scene.getProjectionMatrix());\r\n scene.getEngine().cullBackFaces = false;\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.getEngine().cullBackFaces = null;\r\n scene._mirroredCameraPosition = null;\r\n };\r\n }\r\n\r\n public getAnimatables(): IAnimatable[] {\r\n const results = [];\r\n\r\n if (this.bumpTexture && this.bumpTexture.animations && this.bumpTexture.animations.length > 0) {\r\n results.push(this.bumpTexture);\r\n }\r\n if (this._reflectionRTT && this._reflectionRTT.animations && this._reflectionRTT.animations.length > 0) {\r\n results.push(this._reflectionRTT);\r\n }\r\n if (this._refractionRTT && this._refractionRTT.animations && this._refractionRTT.animations.length > 0) {\r\n results.push(this._refractionRTT);\r\n }\r\n\r\n return results;\r\n }\r\n\r\n public getActiveTextures(): BaseTexture[] {\r\n const activeTextures = super.getActiveTextures();\r\n\r\n if (this._bumpTexture) {\r\n activeTextures.push(this._bumpTexture);\r\n }\r\n\r\n return activeTextures;\r\n }\r\n\r\n public hasTexture(texture: BaseTexture): boolean {\r\n if (super.hasTexture(texture)) {\r\n return true;\r\n }\r\n\r\n if (this._bumpTexture === texture) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public dispose(forceDisposeEffect?: boolean): void {\r\n if (this.bumpTexture) {\r\n this.bumpTexture.dispose();\r\n }\r\n\r\n let index = this.getScene().customRenderTargets.indexOf(<RenderTargetTexture>this._refractionRTT);\r\n if (index != -1) {\r\n this.getScene().customRenderTargets.splice(index, 1);\r\n }\r\n index = -1;\r\n index = this.getScene().customRenderTargets.indexOf(<RenderTargetTexture>this._reflectionRTT);\r\n if (index != -1) {\r\n this.getScene().customRenderTargets.splice(index, 1);\r\n }\r\n\r\n if (this._reflectionRTT) {\r\n this._reflectionRTT.dispose();\r\n }\r\n if (this._refractionRTT) {\r\n this._refractionRTT.dispose();\r\n }\r\n\r\n // Remove image-processing observer\r\n if (this._imageProcessingConfiguration && this._imageProcessingObserver) {\r\n this._imageProcessingConfiguration.onUpdateParameters.remove(this._imageProcessingObserver);\r\n }\r\n\r\n super.dispose(forceDisposeEffect);\r\n }\r\n\r\n public clone(name: string): WaterMaterial {\r\n return SerializationHelper.Clone(() => new WaterMaterial(name, this.getScene()), this);\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n serializationObject.customType = \"BABYLON.WaterMaterial\";\r\n\r\n serializationObject.renderList = [];\r\n if (this._refractionRTT && this._refractionRTT.renderList) {\r\n for (let i = 0; i < this._refractionRTT.renderList.length; i++) {\r\n serializationObject.renderList.push(this._refractionRTT.renderList[i].id);\r\n }\r\n }\r\n\r\n return serializationObject;\r\n }\r\n\r\n public getClassName(): string {\r\n return \"WaterMaterial\";\r\n }\r\n\r\n // Statics\r\n public static Parse(source: any, scene: Scene, rootUrl: string): WaterMaterial {\r\n const mat = SerializationHelper.Parse(() => new WaterMaterial(source.name, scene), source, scene, rootUrl);\r\n mat._waitingRenderList = source.renderList;\r\n\r\n return mat;\r\n }\r\n\r\n public static CreateDefaultMesh(name: string, scene: Scene): Mesh {\r\n const mesh = CreateGround(name, { width: 512, height: 512, subdivisions: 32, updatable: false }, scene);\r\n return mesh;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.WaterMaterial\", WaterMaterial);\r\n"]}
|