@babylonjs/core 5.45.0 → 5.45.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.
Files changed (32) hide show
  1. package/Engines/thinEngine.js +2 -2
  2. package/Engines/thinEngine.js.map +1 -1
  3. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.d.ts +7 -0
  4. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +30 -1
  5. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  6. package/Materials/Textures/texture.d.ts +2 -2
  7. package/Materials/Textures/texture.js +2 -2
  8. package/Materials/Textures/texture.js.map +1 -1
  9. package/Materials/clipPlaneMaterialHelper.js +22 -19
  10. package/Materials/clipPlaneMaterialHelper.js.map +1 -1
  11. package/Misc/khronosTextureContainer2.js +3 -5
  12. package/Misc/khronosTextureContainer2.js.map +1 -1
  13. package/Physics/v2/IPhysicsEnginePlugin.d.ts +6 -0
  14. package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
  15. package/Physics/v2/physicsAggregate.d.ts +21 -19
  16. package/Physics/v2/physicsAggregate.js +18 -4
  17. package/Physics/v2/physicsAggregate.js.map +1 -1
  18. package/Physics/v2/physicsBody.d.ts +15 -0
  19. package/Physics/v2/physicsBody.js +17 -0
  20. package/Physics/v2/physicsBody.js.map +1 -1
  21. package/Physics/v2/physicsShape.d.ts +30 -44
  22. package/Physics/v2/physicsShape.js +30 -44
  23. package/Physics/v2/physicsShape.js.map +1 -1
  24. package/Shaders/ShadersInclude/bumpFragment.js +1 -0
  25. package/Shaders/ShadersInclude/bumpFragment.js.map +1 -1
  26. package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js +1 -1
  27. package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
  28. package/Shaders/sprites.fragment.js +1 -1
  29. package/Shaders/sprites.fragment.js.map +1 -1
  30. package/assetContainer.js +1 -1
  31. package/assetContainer.js.map +1 -1
  32. package/package.json +1 -1
@@ -15,12 +15,15 @@ import "../../../../Shaders/ShadersInclude/bumpFragment";
15
15
  export declare class PerturbNormalBlock extends NodeMaterialBlock {
16
16
  private _tangentSpaceParameterName;
17
17
  private _tangentCorrectionFactorName;
18
+ private _worldMatrixName;
18
19
  /** Gets or sets a boolean indicating that normal should be inverted on X axis */
19
20
  invertX: boolean;
20
21
  /** Gets or sets a boolean indicating that normal should be inverted on Y axis */
21
22
  invertY: boolean;
22
23
  /** Gets or sets a boolean indicating that parallax occlusion should be enabled */
23
24
  useParallaxOcclusion: boolean;
25
+ /** Gets or sets a boolean indicating that sampling mode is in Object space */
26
+ useObjectSpaceNormalMap: boolean;
24
27
  /**
25
28
  * Create a new PerturbNormalBlock
26
29
  * @param name defines the block name
@@ -71,6 +74,10 @@ export declare class PerturbNormalBlock extends NodeMaterialBlock {
71
74
  * Gets the TBN input component
72
75
  */
73
76
  get TBN(): NodeMaterialConnectionPoint;
77
+ /**
78
+ * Gets the World input component
79
+ */
80
+ get world(): NodeMaterialConnectionPoint;
74
81
  /**
75
82
  * Gets the output component
76
83
  */
@@ -23,12 +23,15 @@ export class PerturbNormalBlock extends NodeMaterialBlock {
23
23
  super(name, NodeMaterialBlockTargets.Fragment);
24
24
  this._tangentSpaceParameterName = "";
25
25
  this._tangentCorrectionFactorName = "";
26
+ this._worldMatrixName = "";
26
27
  /** Gets or sets a boolean indicating that normal should be inverted on X axis */
27
28
  this.invertX = false;
28
29
  /** Gets or sets a boolean indicating that normal should be inverted on Y axis */
29
30
  this.invertY = false;
30
31
  /** Gets or sets a boolean indicating that parallax occlusion should be enabled */
31
32
  this.useParallaxOcclusion = false;
33
+ /** Gets or sets a boolean indicating that sampling mode is in Object space */
34
+ this.useObjectSpaceNormalMap = false;
32
35
  this._isUnique = true;
33
36
  // Vertex
34
37
  this.registerInput("worldPosition", NodeMaterialBlockConnectionPointTypes.Vector4, false);
@@ -41,6 +44,7 @@ export class PerturbNormalBlock extends NodeMaterialBlock {
41
44
  this.registerInput("parallaxScale", NodeMaterialBlockConnectionPointTypes.Float, true);
42
45
  this.registerInput("parallaxHeight", NodeMaterialBlockConnectionPointTypes.Float, true);
43
46
  this.registerInput("TBN", NodeMaterialBlockConnectionPointTypes.Object, true, NodeMaterialBlockTargets.VertexAndFragment, new NodeMaterialConnectionPointCustomObject("TBN", this, NodeMaterialConnectionPointDirection.Input, TBNBlock, "TBNBlock"));
47
+ this.registerInput("world", NodeMaterialBlockConnectionPointTypes.Matrix, true);
44
48
  // Fragment
45
49
  this.registerOutput("output", NodeMaterialBlockConnectionPointTypes.Vector4);
46
50
  this.registerOutput("uvOffset", NodeMaterialBlockConnectionPointTypes.Vector2);
@@ -113,6 +117,12 @@ export class PerturbNormalBlock extends NodeMaterialBlock {
113
117
  get TBN() {
114
118
  return this._inputs[9];
115
119
  }
120
+ /**
121
+ * Gets the World input component
122
+ */
123
+ get world() {
124
+ return this._inputs[10];
125
+ }
116
126
  /**
117
127
  * Gets the output component
118
128
  */
@@ -131,6 +141,7 @@ export class PerturbNormalBlock extends NodeMaterialBlock {
131
141
  defines.setValue("BUMP", true);
132
142
  defines.setValue("PARALLAX", useParallax, true);
133
143
  defines.setValue("PARALLAXOCCLUSION", this.useParallaxOcclusion, true);
144
+ defines.setValue("OBJECTSPACE_NORMALMAP", this.useObjectSpaceNormalMap, true);
134
145
  }
135
146
  bind(effect, nodeMaterial, mesh) {
136
147
  if (nodeMaterial.getScene()._mirroredCameraPosition) {
@@ -141,6 +152,10 @@ export class PerturbNormalBlock extends NodeMaterialBlock {
141
152
  }
142
153
  if (mesh) {
143
154
  effect.setFloat(this._tangentCorrectionFactorName, mesh.getWorldMatrix().determinant() < 0 ? -1 : 1);
155
+ if (this.useObjectSpaceNormalMap && !this.world.isConnected) {
156
+ // World default to the mesh world matrix
157
+ effect.setMatrix(this._worldMatrixName, mesh.getWorldMatrix());
158
+ }
144
159
  }
145
160
  }
146
161
  autoConfigure(material) {
@@ -171,6 +186,8 @@ export class PerturbNormalBlock extends NodeMaterialBlock {
171
186
  state._emitUniformFromString(this._tangentSpaceParameterName, "vec2");
172
187
  this._tangentCorrectionFactorName = state._getFreeDefineName("tangentCorrectionFactor");
173
188
  state._emitUniformFromString(this._tangentCorrectionFactorName, "float");
189
+ this._worldMatrixName = state._getFreeDefineName("perturbNormalWorldMatrix");
190
+ state._emitUniformFromString(this._worldMatrixName, "mat4");
174
191
  let normalSamplerName = null;
175
192
  if (this.normalMapColor.connectedPoint) {
176
193
  normalSamplerName = this.normalMapColor.connectedPoint._ownerBlock.samplerName;
@@ -187,6 +204,7 @@ export class PerturbNormalBlock extends NodeMaterialBlock {
187
204
  state._emitExtension("derivatives", "#extension GL_OES_standard_derivatives : enable");
188
205
  const tangentReplaceString = { search: /defined\(TANGENT\)/g, replace: worldTangent.isConnected ? "defined(TANGENT)" : "defined(IGNORE)" };
189
206
  const tbnVarying = { search: /varying mat3 vTBN/g, replace: "" };
207
+ const normalMatrixReplaceString = { search: /uniform mat4 normalMatrix;/g, replace: "" };
190
208
  const TBN = this.TBN;
191
209
  if (TBN.isConnected) {
192
210
  state.compilationString += `
@@ -202,7 +220,7 @@ export class PerturbNormalBlock extends NodeMaterialBlock {
202
220
  state.compilationString += `mat3 vTBN = mat3(tbnTangent, tbnBitangent, tbnNormal);\r\n`;
203
221
  }
204
222
  state._emitFunctionFromInclude("bumpFragmentMainFunctions", comments, {
205
- replaceStrings: [tangentReplaceString, tbnVarying],
223
+ replaceStrings: [tangentReplaceString, tbnVarying, normalMatrixReplaceString],
206
224
  });
207
225
  state._emitFunctionFromInclude("bumpFragmentFunctions", comments, {
208
226
  replaceStrings: [
@@ -220,6 +238,11 @@ export class PerturbNormalBlock extends NodeMaterialBlock {
220
238
  state.compilationString += this._declareOutput(this.output, state) + " = vec4(0.);\r\n";
221
239
  state.compilationString += state._emitCodeFromInclude("bumpFragment", comments, {
222
240
  replaceStrings: [
241
+ { search: /texture2D\(bumpSampler,vBumpUV\)/g, replace: `${uvForPerturbNormal}` },
242
+ {
243
+ search: /#define CUSTOM_FRAGMENT_BUMP_FRAGMENT/g,
244
+ replace: `mat4 normalMatrix = toNormalMatrix(${this.world.isConnected ? this.world.associatedVariableName : this._worldMatrixName});`,
245
+ },
223
246
  { search: /perturbNormal\(TBN,texture2D\(bumpSampler,vBumpUV\+uvOffset\).xyz,vBumpInfos.y\)/g, replace: `perturbNormal(TBN, ${uvForPerturbNormal}, vBumpInfos.y)` },
224
247
  {
225
248
  search: /parallaxOcclusion\(invTBN\*-viewDirectionW,invTBN\*normalW,vBumpUV,vBumpInfos.z\)/g,
@@ -247,6 +270,7 @@ export class PerturbNormalBlock extends NodeMaterialBlock {
247
270
  let codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.invertX = ${this.invertX};\r\n`;
248
271
  codeString += `${this._codeVariableName}.invertY = ${this.invertY};\r\n`;
249
272
  codeString += `${this._codeVariableName}.useParallaxOcclusion = ${this.useParallaxOcclusion};\r\n`;
273
+ codeString += `${this._codeVariableName}.useObjectSpaceNormalMap = ${this.useObjectSpaceNormalMap};\r\n`;
250
274
  return codeString;
251
275
  }
252
276
  serialize() {
@@ -254,6 +278,7 @@ export class PerturbNormalBlock extends NodeMaterialBlock {
254
278
  serializationObject.invertX = this.invertX;
255
279
  serializationObject.invertY = this.invertY;
256
280
  serializationObject.useParallaxOcclusion = this.useParallaxOcclusion;
281
+ serializationObject.useObjectSpaceNormalMap = this.useObjectSpaceNormalMap;
257
282
  return serializationObject;
258
283
  }
259
284
  _deserialize(serializationObject, scene, rootUrl) {
@@ -261,6 +286,7 @@ export class PerturbNormalBlock extends NodeMaterialBlock {
261
286
  this.invertX = serializationObject.invertX;
262
287
  this.invertY = serializationObject.invertY;
263
288
  this.useParallaxOcclusion = !!serializationObject.useParallaxOcclusion;
289
+ this.useObjectSpaceNormalMap = !!serializationObject.useObjectSpaceNormalMap;
264
290
  }
265
291
  }
266
292
  __decorate([
@@ -272,5 +298,8 @@ __decorate([
272
298
  __decorate([
273
299
  editableInPropertyPage("Use parallax occlusion", PropertyTypeForEdition.Boolean)
274
300
  ], PerturbNormalBlock.prototype, "useParallaxOcclusion", void 0);
301
+ __decorate([
302
+ editableInPropertyPage("Object Space Mode", PropertyTypeForEdition.Boolean, "PROPERTIES", { notifiers: { update: false } })
303
+ ], PerturbNormalBlock.prototype, "useObjectSpaceNormalMap", void 0);
275
304
  RegisterClass("BABYLON.PerturbNormalBlock", PerturbNormalBlock);
276
305
  //# sourceMappingURL=perturbNormalBlock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"perturbNormalBlock.js","sourceRoot":"","sources":["../../../../../../../lts/core/generated/Materials/Node/Blocks/Fragment/perturbNormalBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../nodeMaterialDecorator\";\r\nimport type { TextureBlock } from \"../Dual/textureBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { TBNBlock } from \"./TBNBlock\";\r\n\r\nimport \"../../../../Shaders/ShadersInclude/bumpFragmentMainFunctions\";\r\nimport \"../../../../Shaders/ShadersInclude/bumpFragmentFunctions\";\r\nimport \"../../../../Shaders/ShadersInclude/bumpFragment\";\r\n\r\n/**\r\n * Block used to perturb normals based on a normal map\r\n */\r\nexport class PerturbNormalBlock extends NodeMaterialBlock {\r\n private _tangentSpaceParameterName = \"\";\r\n private _tangentCorrectionFactorName = \"\";\r\n\r\n /** Gets or sets a boolean indicating that normal should be inverted on X axis */\r\n @editableInPropertyPage(\"Invert X axis\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: false } })\r\n public invertX = false;\r\n /** Gets or sets a boolean indicating that normal should be inverted on Y axis */\r\n @editableInPropertyPage(\"Invert Y axis\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: false } })\r\n public invertY = false;\r\n /** Gets or sets a boolean indicating that parallax occlusion should be enabled */\r\n @editableInPropertyPage(\"Use parallax occlusion\", PropertyTypeForEdition.Boolean)\r\n public useParallaxOcclusion = false;\r\n\r\n /**\r\n * Create a new PerturbNormalBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n // Vertex\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector4, false);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.Vector4, false);\r\n this.registerInput(\"worldTangent\", NodeMaterialBlockConnectionPointTypes.Vector4, true);\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.Vector2, false);\r\n this.registerInput(\"normalMapColor\", NodeMaterialBlockConnectionPointTypes.Color3, false);\r\n this.registerInput(\"strength\", NodeMaterialBlockConnectionPointTypes.Float, false);\r\n this.registerInput(\"viewDirection\", NodeMaterialBlockConnectionPointTypes.Vector3, true);\r\n this.registerInput(\"parallaxScale\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"parallaxHeight\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\r\n \"TBN\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"TBN\", this, NodeMaterialConnectionPointDirection.Input, TBNBlock, \"TBNBlock\")\r\n );\r\n\r\n // Fragment\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"uvOffset\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"PerturbNormalBlock\";\r\n }\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the world normal input component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the world tangent input component\r\n */\r\n public get worldTangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the uv input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the normal map color input component\r\n */\r\n public get normalMapColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the strength input component\r\n */\r\n public get strength(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the view direction input component\r\n */\r\n public get viewDirection(): NodeMaterialConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n /**\r\n * Gets the parallax scale input component\r\n */\r\n public get parallaxScale(): NodeMaterialConnectionPoint {\r\n return this._inputs[7];\r\n }\r\n\r\n /**\r\n * Gets the parallax height input component\r\n */\r\n public get parallaxHeight(): NodeMaterialConnectionPoint {\r\n return this._inputs[8];\r\n }\r\n\r\n /**\r\n * Gets the TBN input component\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public get TBN(): NodeMaterialConnectionPoint {\r\n return this._inputs[9];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the uv offset output component\r\n */\r\n public get uvOffset(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n public prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n const normalSamplerName = (this.normalMapColor.connectedPoint!._ownerBlock as TextureBlock).samplerName;\r\n const useParallax = this.viewDirection.isConnected && ((this.useParallaxOcclusion && normalSamplerName) || (!this.useParallaxOcclusion && this.parallaxHeight.isConnected));\r\n\r\n defines.setValue(\"BUMP\", true);\r\n defines.setValue(\"PARALLAX\", useParallax, true);\r\n defines.setValue(\"PARALLAXOCCLUSION\", this.useParallaxOcclusion, true);\r\n }\r\n\r\n public bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if (nodeMaterial.getScene()._mirroredCameraPosition) {\r\n effect.setFloat2(this._tangentSpaceParameterName, this.invertX ? 1.0 : -1.0, this.invertY ? 1.0 : -1.0);\r\n } else {\r\n effect.setFloat2(this._tangentSpaceParameterName, this.invertX ? -1.0 : 1.0, this.invertY ? -1.0 : 1.0);\r\n }\r\n if (mesh) {\r\n effect.setFloat(this._tangentCorrectionFactorName, mesh.getWorldMatrix().determinant() < 0 ? -1 : 1);\r\n }\r\n }\r\n\r\n public autoConfigure(material: NodeMaterial) {\r\n if (!this.uv.isConnected) {\r\n let uvInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"uv\");\r\n\r\n if (!uvInput) {\r\n uvInput = new InputBlock(\"uv\");\r\n uvInput.setAsAttribute();\r\n }\r\n uvInput.output.connectTo(this.uv);\r\n }\r\n\r\n if (!this.strength.isConnected) {\r\n const strengthInput = new InputBlock(\"strength\");\r\n strengthInput.value = 1.0;\r\n strengthInput.output.connectTo(this.strength);\r\n }\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const comments = `//${this.name}`;\r\n const uv = this.uv;\r\n const worldPosition = this.worldPosition;\r\n const worldNormal = this.worldNormal;\r\n const worldTangent = this.worldTangent;\r\n\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n this._tangentSpaceParameterName = state._getFreeDefineName(\"tangentSpaceParameter\");\r\n\r\n state._emitUniformFromString(this._tangentSpaceParameterName, \"vec2\");\r\n\r\n this._tangentCorrectionFactorName = state._getFreeDefineName(\"tangentCorrectionFactor\");\r\n\r\n state._emitUniformFromString(this._tangentCorrectionFactorName, \"float\");\r\n\r\n let normalSamplerName = null;\r\n if (this.normalMapColor.connectedPoint) {\r\n normalSamplerName = (this.normalMapColor.connectedPoint!._ownerBlock as TextureBlock).samplerName;\r\n }\r\n const useParallax = this.viewDirection.isConnected && ((this.useParallaxOcclusion && normalSamplerName) || (!this.useParallaxOcclusion && this.parallaxHeight.isConnected));\r\n\r\n const replaceForParallaxInfos = !this.parallaxScale.isConnectedToInputBlock\r\n ? \"0.05\"\r\n : this.parallaxScale.connectInputBlock!.isConstant\r\n ? state._emitFloat(this.parallaxScale.connectInputBlock!.value)\r\n : this.parallaxScale.associatedVariableName;\r\n\r\n const replaceForBumpInfos =\r\n this.strength.isConnectedToInputBlock && this.strength.connectInputBlock!.isConstant\r\n ? `\\r\\n#if !defined(NORMALXYSCALE)\\r\\n1.0/\\r\\n#endif\\r\\n${state._emitFloat(this.strength.connectInputBlock!.value)}`\r\n : `\\r\\n#if !defined(NORMALXYSCALE)\\r\\n1.0/\\r\\n#endif\\r\\n${this.strength.associatedVariableName}`;\r\n\r\n state._emitExtension(\"derivatives\", \"#extension GL_OES_standard_derivatives : enable\");\r\n\r\n const tangentReplaceString = { search: /defined\\(TANGENT\\)/g, replace: worldTangent.isConnected ? \"defined(TANGENT)\" : \"defined(IGNORE)\" };\r\n const tbnVarying = { search: /varying mat3 vTBN/g, replace: \"\" };\r\n\r\n const TBN = this.TBN;\r\n if (TBN.isConnected) {\r\n state.compilationString += `\r\n #ifdef TBNBLOCK\r\n mat3 vTBN = ${TBN.associatedVariableName};\r\n #endif\r\n `;\r\n } else if (worldTangent.isConnected) {\r\n state.compilationString += `vec3 tbnNormal = normalize(${worldNormal.associatedVariableName}.xyz);\\r\\n`;\r\n state.compilationString += `vec3 tbnTangent = normalize(${worldTangent.associatedVariableName}.xyz);\\r\\n`;\r\n state.compilationString += `vec3 tbnBitangent = cross(tbnNormal, tbnTangent) * ${this._tangentCorrectionFactorName};\\r\\n`;\r\n state.compilationString += `mat3 vTBN = mat3(tbnTangent, tbnBitangent, tbnNormal);\\r\\n`;\r\n }\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentMainFunctions\", comments, {\r\n replaceStrings: [tangentReplaceString, tbnVarying],\r\n });\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentFunctions\", comments, {\r\n replaceStrings: [\r\n { search: /#include<samplerFragmentDeclaration>\\(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_SAMPLERNAME_,bump\\)/g, replace: \"\" },\r\n { search: /uniform sampler2D bumpSampler;/g, replace: \"\" },\r\n {\r\n search: /vec2 parallaxOcclusion\\(vec3 vViewDirCoT,vec3 vNormalCoT,vec2 texCoord,float parallaxScale\\)/g,\r\n replace: \"#define inline\\r\\nvec2 parallaxOcclusion(vec3 vViewDirCoT, vec3 vNormalCoT, vec2 texCoord, float parallaxScale, sampler2D bumpSampler)\",\r\n },\r\n { search: /vec2 parallaxOffset\\(vec3 viewDir,float heightScale\\)/g, replace: \"vec2 parallaxOffset(vec3 viewDir, float heightScale, float height_)\" },\r\n { search: /texture2D\\(bumpSampler,vBumpUV\\)\\.w/g, replace: \"height_\" },\r\n ],\r\n });\r\n\r\n const uvForPerturbNormal =\r\n !useParallax || !normalSamplerName ? this.normalMapColor.associatedVariableName : `texture2D(${normalSamplerName}, ${uv.associatedVariableName} + uvOffset).xyz`;\r\n\r\n state.compilationString += this._declareOutput(this.output, state) + \" = vec4(0.);\\r\\n\";\r\n state.compilationString += state._emitCodeFromInclude(\"bumpFragment\", comments, {\r\n replaceStrings: [\r\n { search: /perturbNormal\\(TBN,texture2D\\(bumpSampler,vBumpUV\\+uvOffset\\).xyz,vBumpInfos.y\\)/g, replace: `perturbNormal(TBN, ${uvForPerturbNormal}, vBumpInfos.y)` },\r\n {\r\n search: /parallaxOcclusion\\(invTBN\\*-viewDirectionW,invTBN\\*normalW,vBumpUV,vBumpInfos.z\\)/g,\r\n replace: `parallaxOcclusion((invTBN * -viewDirectionW), (invTBN * normalW), vBumpUV, vBumpInfos.z, ${\r\n useParallax && this.useParallaxOcclusion ? normalSamplerName : \"bumpSampler\"\r\n })`,\r\n },\r\n {\r\n search: /parallaxOffset\\(invTBN\\*viewDirectionW,vBumpInfos\\.z\\)/g,\r\n replace: `parallaxOffset(invTBN * viewDirectionW, vBumpInfos.z, ${useParallax ? this.parallaxHeight.associatedVariableName : \"0.\"})`,\r\n },\r\n { search: /vTangentSpaceParams/g, replace: this._tangentSpaceParameterName },\r\n { search: /vBumpInfos.y/g, replace: replaceForBumpInfos },\r\n { search: /vBumpInfos.z/g, replace: replaceForParallaxInfos },\r\n { search: /vBumpUV/g, replace: uv.associatedVariableName },\r\n { search: /vPositionW/g, replace: worldPosition.associatedVariableName + \".xyz\" },\r\n { search: /normalW=/g, replace: this.output.associatedVariableName + \".xyz = \" },\r\n { search: /mat3\\(normalMatrix\\)\\*normalW/g, replace: \"mat3(normalMatrix) * \" + this.output.associatedVariableName + \".xyz\" },\r\n { search: /normalW/g, replace: worldNormal.associatedVariableName + \".xyz\" },\r\n { search: /viewDirectionW/g, replace: useParallax ? this.viewDirection.associatedVariableName : \"vec3(0.)\" },\r\n tangentReplaceString,\r\n ],\r\n });\r\n\r\n return this;\r\n }\r\n\r\n protected _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.invertX = ${this.invertX};\\r\\n`;\r\n\r\n codeString += `${this._codeVariableName}.invertY = ${this.invertY};\\r\\n`;\r\n codeString += `${this._codeVariableName}.useParallaxOcclusion = ${this.useParallaxOcclusion};\\r\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.invertX = this.invertX;\r\n serializationObject.invertY = this.invertY;\r\n serializationObject.useParallaxOcclusion = this.useParallaxOcclusion;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.invertX = serializationObject.invertX;\r\n this.invertY = serializationObject.invertY;\r\n this.useParallaxOcclusion = !!serializationObject.useParallaxOcclusion;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.PerturbNormalBlock\", PerturbNormalBlock);\r\n"]}
1
+ {"version":3,"file":"perturbNormalBlock.js","sourceRoot":"","sources":["../../../../../../../lts/core/generated/Materials/Node/Blocks/Fragment/perturbNormalBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport type { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport type { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { NodeMaterialConnectionPointDirection } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport type { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport type { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\nimport type { Mesh } from \"../../../../Meshes/mesh\";\r\nimport { InputBlock } from \"../Input/inputBlock\";\r\nimport type { Effect } from \"../../../effect\";\r\nimport type { Scene } from \"../../../../scene\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"../../nodeMaterialDecorator\";\r\nimport type { TextureBlock } from \"../Dual/textureBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../../nodeMaterialConnectionPointCustomObject\";\r\nimport { TBNBlock } from \"./TBNBlock\";\r\n\r\nimport \"../../../../Shaders/ShadersInclude/bumpFragmentMainFunctions\";\r\nimport \"../../../../Shaders/ShadersInclude/bumpFragmentFunctions\";\r\nimport \"../../../../Shaders/ShadersInclude/bumpFragment\";\r\n\r\n/**\r\n * Block used to perturb normals based on a normal map\r\n */\r\nexport class PerturbNormalBlock extends NodeMaterialBlock {\r\n private _tangentSpaceParameterName = \"\";\r\n private _tangentCorrectionFactorName = \"\";\r\n private _worldMatrixName = \"\";\r\n\r\n /** Gets or sets a boolean indicating that normal should be inverted on X axis */\r\n @editableInPropertyPage(\"Invert X axis\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: false } })\r\n public invertX = false;\r\n /** Gets or sets a boolean indicating that normal should be inverted on Y axis */\r\n @editableInPropertyPage(\"Invert Y axis\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: false } })\r\n public invertY = false;\r\n /** Gets or sets a boolean indicating that parallax occlusion should be enabled */\r\n @editableInPropertyPage(\"Use parallax occlusion\", PropertyTypeForEdition.Boolean)\r\n public useParallaxOcclusion = false;\r\n /** Gets or sets a boolean indicating that sampling mode is in Object space */\r\n @editableInPropertyPage(\"Object Space Mode\", PropertyTypeForEdition.Boolean, \"PROPERTIES\", { notifiers: { update: false } })\r\n public useObjectSpaceNormalMap = false;\r\n\r\n /**\r\n * Create a new PerturbNormalBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Fragment);\r\n\r\n this._isUnique = true;\r\n\r\n // Vertex\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector4, false);\r\n this.registerInput(\"worldNormal\", NodeMaterialBlockConnectionPointTypes.Vector4, false);\r\n this.registerInput(\"worldTangent\", NodeMaterialBlockConnectionPointTypes.Vector4, true);\r\n this.registerInput(\"uv\", NodeMaterialBlockConnectionPointTypes.Vector2, false);\r\n this.registerInput(\"normalMapColor\", NodeMaterialBlockConnectionPointTypes.Color3, false);\r\n this.registerInput(\"strength\", NodeMaterialBlockConnectionPointTypes.Float, false);\r\n this.registerInput(\"viewDirection\", NodeMaterialBlockConnectionPointTypes.Vector3, true);\r\n this.registerInput(\"parallaxScale\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\"parallaxHeight\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\r\n \"TBN\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"TBN\", this, NodeMaterialConnectionPointDirection.Input, TBNBlock, \"TBNBlock\")\r\n );\r\n this.registerInput(\"world\", NodeMaterialBlockConnectionPointTypes.Matrix, true);\r\n\r\n // Fragment\r\n this.registerOutput(\"output\", NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this.registerOutput(\"uvOffset\", NodeMaterialBlockConnectionPointTypes.Vector2);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"PerturbNormalBlock\";\r\n }\r\n\r\n /**\r\n * Gets the world position input component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the world normal input component\r\n */\r\n public get worldNormal(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the world tangent input component\r\n */\r\n public get worldTangent(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the uv input component\r\n */\r\n public get uv(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the normal map color input component\r\n */\r\n public get normalMapColor(): NodeMaterialConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the strength input component\r\n */\r\n public get strength(): NodeMaterialConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the view direction input component\r\n */\r\n public get viewDirection(): NodeMaterialConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n /**\r\n * Gets the parallax scale input component\r\n */\r\n public get parallaxScale(): NodeMaterialConnectionPoint {\r\n return this._inputs[7];\r\n }\r\n\r\n /**\r\n * Gets the parallax height input component\r\n */\r\n public get parallaxHeight(): NodeMaterialConnectionPoint {\r\n return this._inputs[8];\r\n }\r\n\r\n /**\r\n * Gets the TBN input component\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public get TBN(): NodeMaterialConnectionPoint {\r\n return this._inputs[9];\r\n }\r\n\r\n /**\r\n * Gets the World input component\r\n */\r\n public get world(): NodeMaterialConnectionPoint {\r\n return this._inputs[10];\r\n }\r\n\r\n /**\r\n * Gets the output component\r\n */\r\n public get output(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the uv offset output component\r\n */\r\n public get uvOffset(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n public prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n const normalSamplerName = (this.normalMapColor.connectedPoint!._ownerBlock as TextureBlock).samplerName;\r\n const useParallax = this.viewDirection.isConnected && ((this.useParallaxOcclusion && normalSamplerName) || (!this.useParallaxOcclusion && this.parallaxHeight.isConnected));\r\n\r\n defines.setValue(\"BUMP\", true);\r\n defines.setValue(\"PARALLAX\", useParallax, true);\r\n defines.setValue(\"PARALLAXOCCLUSION\", this.useParallaxOcclusion, true);\r\n defines.setValue(\"OBJECTSPACE_NORMALMAP\", this.useObjectSpaceNormalMap, true);\r\n }\r\n\r\n public bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if (nodeMaterial.getScene()._mirroredCameraPosition) {\r\n effect.setFloat2(this._tangentSpaceParameterName, this.invertX ? 1.0 : -1.0, this.invertY ? 1.0 : -1.0);\r\n } else {\r\n effect.setFloat2(this._tangentSpaceParameterName, this.invertX ? -1.0 : 1.0, this.invertY ? -1.0 : 1.0);\r\n }\r\n\r\n if (mesh) {\r\n effect.setFloat(this._tangentCorrectionFactorName, mesh.getWorldMatrix().determinant() < 0 ? -1 : 1);\r\n\r\n if (this.useObjectSpaceNormalMap && !this.world.isConnected) {\r\n // World default to the mesh world matrix\r\n effect.setMatrix(this._worldMatrixName, mesh.getWorldMatrix());\r\n }\r\n }\r\n }\r\n\r\n public autoConfigure(material: NodeMaterial) {\r\n if (!this.uv.isConnected) {\r\n let uvInput = material.getInputBlockByPredicate((b) => b.isAttribute && b.name === \"uv\");\r\n\r\n if (!uvInput) {\r\n uvInput = new InputBlock(\"uv\");\r\n uvInput.setAsAttribute();\r\n }\r\n uvInput.output.connectTo(this.uv);\r\n }\r\n\r\n if (!this.strength.isConnected) {\r\n const strengthInput = new InputBlock(\"strength\");\r\n strengthInput.value = 1.0;\r\n strengthInput.output.connectTo(this.strength);\r\n }\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n const comments = `//${this.name}`;\r\n const uv = this.uv;\r\n const worldPosition = this.worldPosition;\r\n const worldNormal = this.worldNormal;\r\n const worldTangent = this.worldTangent;\r\n\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n this._tangentSpaceParameterName = state._getFreeDefineName(\"tangentSpaceParameter\");\r\n\r\n state._emitUniformFromString(this._tangentSpaceParameterName, \"vec2\");\r\n\r\n this._tangentCorrectionFactorName = state._getFreeDefineName(\"tangentCorrectionFactor\");\r\n\r\n state._emitUniformFromString(this._tangentCorrectionFactorName, \"float\");\r\n\r\n this._worldMatrixName = state._getFreeDefineName(\"perturbNormalWorldMatrix\");\r\n\r\n state._emitUniformFromString(this._worldMatrixName, \"mat4\");\r\n\r\n let normalSamplerName = null;\r\n if (this.normalMapColor.connectedPoint) {\r\n normalSamplerName = (this.normalMapColor.connectedPoint!._ownerBlock as TextureBlock).samplerName;\r\n }\r\n const useParallax = this.viewDirection.isConnected && ((this.useParallaxOcclusion && normalSamplerName) || (!this.useParallaxOcclusion && this.parallaxHeight.isConnected));\r\n\r\n const replaceForParallaxInfos = !this.parallaxScale.isConnectedToInputBlock\r\n ? \"0.05\"\r\n : this.parallaxScale.connectInputBlock!.isConstant\r\n ? state._emitFloat(this.parallaxScale.connectInputBlock!.value)\r\n : this.parallaxScale.associatedVariableName;\r\n\r\n const replaceForBumpInfos =\r\n this.strength.isConnectedToInputBlock && this.strength.connectInputBlock!.isConstant\r\n ? `\\r\\n#if !defined(NORMALXYSCALE)\\r\\n1.0/\\r\\n#endif\\r\\n${state._emitFloat(this.strength.connectInputBlock!.value)}`\r\n : `\\r\\n#if !defined(NORMALXYSCALE)\\r\\n1.0/\\r\\n#endif\\r\\n${this.strength.associatedVariableName}`;\r\n\r\n state._emitExtension(\"derivatives\", \"#extension GL_OES_standard_derivatives : enable\");\r\n\r\n const tangentReplaceString = { search: /defined\\(TANGENT\\)/g, replace: worldTangent.isConnected ? \"defined(TANGENT)\" : \"defined(IGNORE)\" };\r\n const tbnVarying = { search: /varying mat3 vTBN/g, replace: \"\" };\r\n const normalMatrixReplaceString = { search: /uniform mat4 normalMatrix;/g, replace: \"\" };\r\n\r\n const TBN = this.TBN;\r\n if (TBN.isConnected) {\r\n state.compilationString += `\r\n #ifdef TBNBLOCK\r\n mat3 vTBN = ${TBN.associatedVariableName};\r\n #endif\r\n `;\r\n } else if (worldTangent.isConnected) {\r\n state.compilationString += `vec3 tbnNormal = normalize(${worldNormal.associatedVariableName}.xyz);\\r\\n`;\r\n state.compilationString += `vec3 tbnTangent = normalize(${worldTangent.associatedVariableName}.xyz);\\r\\n`;\r\n state.compilationString += `vec3 tbnBitangent = cross(tbnNormal, tbnTangent) * ${this._tangentCorrectionFactorName};\\r\\n`;\r\n state.compilationString += `mat3 vTBN = mat3(tbnTangent, tbnBitangent, tbnNormal);\\r\\n`;\r\n }\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentMainFunctions\", comments, {\r\n replaceStrings: [tangentReplaceString, tbnVarying, normalMatrixReplaceString],\r\n });\r\n\r\n state._emitFunctionFromInclude(\"bumpFragmentFunctions\", comments, {\r\n replaceStrings: [\r\n { search: /#include<samplerFragmentDeclaration>\\(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_SAMPLERNAME_,bump\\)/g, replace: \"\" },\r\n { search: /uniform sampler2D bumpSampler;/g, replace: \"\" },\r\n {\r\n search: /vec2 parallaxOcclusion\\(vec3 vViewDirCoT,vec3 vNormalCoT,vec2 texCoord,float parallaxScale\\)/g,\r\n replace: \"#define inline\\r\\nvec2 parallaxOcclusion(vec3 vViewDirCoT, vec3 vNormalCoT, vec2 texCoord, float parallaxScale, sampler2D bumpSampler)\",\r\n },\r\n { search: /vec2 parallaxOffset\\(vec3 viewDir,float heightScale\\)/g, replace: \"vec2 parallaxOffset(vec3 viewDir, float heightScale, float height_)\" },\r\n { search: /texture2D\\(bumpSampler,vBumpUV\\)\\.w/g, replace: \"height_\" },\r\n ],\r\n });\r\n\r\n const uvForPerturbNormal =\r\n !useParallax || !normalSamplerName ? this.normalMapColor.associatedVariableName : `texture2D(${normalSamplerName}, ${uv.associatedVariableName} + uvOffset).xyz`;\r\n\r\n state.compilationString += this._declareOutput(this.output, state) + \" = vec4(0.);\\r\\n\";\r\n state.compilationString += state._emitCodeFromInclude(\"bumpFragment\", comments, {\r\n replaceStrings: [\r\n { search: /texture2D\\(bumpSampler,vBumpUV\\)/g, replace: `${uvForPerturbNormal}` },\r\n {\r\n search: /#define CUSTOM_FRAGMENT_BUMP_FRAGMENT/g,\r\n replace: `mat4 normalMatrix = toNormalMatrix(${this.world.isConnected ? this.world.associatedVariableName : this._worldMatrixName});`,\r\n },\r\n { search: /perturbNormal\\(TBN,texture2D\\(bumpSampler,vBumpUV\\+uvOffset\\).xyz,vBumpInfos.y\\)/g, replace: `perturbNormal(TBN, ${uvForPerturbNormal}, vBumpInfos.y)` },\r\n {\r\n search: /parallaxOcclusion\\(invTBN\\*-viewDirectionW,invTBN\\*normalW,vBumpUV,vBumpInfos.z\\)/g,\r\n replace: `parallaxOcclusion((invTBN * -viewDirectionW), (invTBN * normalW), vBumpUV, vBumpInfos.z, ${\r\n useParallax && this.useParallaxOcclusion ? normalSamplerName : \"bumpSampler\"\r\n })`,\r\n },\r\n {\r\n search: /parallaxOffset\\(invTBN\\*viewDirectionW,vBumpInfos\\.z\\)/g,\r\n replace: `parallaxOffset(invTBN * viewDirectionW, vBumpInfos.z, ${useParallax ? this.parallaxHeight.associatedVariableName : \"0.\"})`,\r\n },\r\n { search: /vTangentSpaceParams/g, replace: this._tangentSpaceParameterName },\r\n { search: /vBumpInfos.y/g, replace: replaceForBumpInfos },\r\n { search: /vBumpInfos.z/g, replace: replaceForParallaxInfos },\r\n { search: /vBumpUV/g, replace: uv.associatedVariableName },\r\n { search: /vPositionW/g, replace: worldPosition.associatedVariableName + \".xyz\" },\r\n { search: /normalW=/g, replace: this.output.associatedVariableName + \".xyz = \" },\r\n { search: /mat3\\(normalMatrix\\)\\*normalW/g, replace: \"mat3(normalMatrix) * \" + this.output.associatedVariableName + \".xyz\" },\r\n { search: /normalW/g, replace: worldNormal.associatedVariableName + \".xyz\" },\r\n { search: /viewDirectionW/g, replace: useParallax ? this.viewDirection.associatedVariableName : \"vec3(0.)\" },\r\n tangentReplaceString,\r\n ],\r\n });\r\n\r\n return this;\r\n }\r\n\r\n protected _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode() + `${this._codeVariableName}.invertX = ${this.invertX};\\r\\n`;\r\n\r\n codeString += `${this._codeVariableName}.invertY = ${this.invertY};\\r\\n`;\r\n codeString += `${this._codeVariableName}.useParallaxOcclusion = ${this.useParallaxOcclusion};\\r\\n`;\r\n codeString += `${this._codeVariableName}.useObjectSpaceNormalMap = ${this.useObjectSpaceNormalMap};\\r\\n`;\r\n\r\n return codeString;\r\n }\r\n\r\n public serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.invertX = this.invertX;\r\n serializationObject.invertY = this.invertY;\r\n serializationObject.useParallaxOcclusion = this.useParallaxOcclusion;\r\n serializationObject.useObjectSpaceNormalMap = this.useObjectSpaceNormalMap;\r\n\r\n return serializationObject;\r\n }\r\n\r\n public _deserialize(serializationObject: any, scene: Scene, rootUrl: string) {\r\n super._deserialize(serializationObject, scene, rootUrl);\r\n\r\n this.invertX = serializationObject.invertX;\r\n this.invertY = serializationObject.invertY;\r\n this.useParallaxOcclusion = !!serializationObject.useParallaxOcclusion;\r\n this.useObjectSpaceNormalMap = !!serializationObject.useObjectSpaceNormalMap;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.PerturbNormalBlock\", PerturbNormalBlock);\r\n"]}
@@ -72,11 +72,11 @@ export declare class Texture extends BaseTexture {
72
72
  * @internal
73
73
  */
74
74
  static _CreateRenderTargetTexture: (name: string, renderTargetSize: number, scene: Scene, generateMipMaps: boolean, creationFlags?: number | undefined) => RenderTargetTexture;
75
- /** nearest is mag = nearest and min = nearest and mip = linear */
75
+ /** nearest is mag = nearest and min = nearest and no mip */
76
76
  static readonly NEAREST_SAMPLINGMODE = 1;
77
77
  /** nearest is mag = nearest and min = nearest and mip = linear */
78
78
  static readonly NEAREST_NEAREST_MIPLINEAR = 8;
79
- /** Bilinear is mag = linear and min = linear and mip = nearest */
79
+ /** Bilinear is mag = linear and min = linear and no mip */
80
80
  static readonly BILINEAR_SAMPLINGMODE = 2;
81
81
  /** Bilinear is mag = linear and min = linear and mip = nearest */
82
82
  static readonly LINEAR_LINEAR_MIPNEAREST = 11;
@@ -797,11 +797,11 @@ Texture._CreateMirror = (name, renderTargetSize, scene, generateMipMaps) => {
797
797
  Texture._CreateRenderTargetTexture = (name, renderTargetSize, scene, generateMipMaps, creationFlags) => {
798
798
  throw _WarnImport("RenderTargetTexture");
799
799
  };
800
- /** nearest is mag = nearest and min = nearest and mip = linear */
800
+ /** nearest is mag = nearest and min = nearest and no mip */
801
801
  Texture.NEAREST_SAMPLINGMODE = 1;
802
802
  /** nearest is mag = nearest and min = nearest and mip = linear */
803
803
  Texture.NEAREST_NEAREST_MIPLINEAR = 8; // nearest is mag = nearest and min = nearest and mip = linear
804
- /** Bilinear is mag = linear and min = linear and mip = nearest */
804
+ /** Bilinear is mag = linear and min = linear and no mip */
805
805
  Texture.BILINEAR_SAMPLINGMODE = 2;
806
806
  /** Bilinear is mag = linear and min = linear and mip = nearest */
807
807
  Texture.LINEAR_LINEAR_MIPNEAREST = 11; // Bilinear is mag = linear and min = linear and mip = nearest