@babylonjs/core 5.33.2 → 5.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +4 -3
  2. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  3. package/Engines/thinEngine.js +2 -2
  4. package/Engines/thinEngine.js.map +1 -1
  5. package/Lights/Shadows/shadowGenerator.js +1 -0
  6. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  7. package/Materials/Node/Blocks/Dual/lightBlock.d.ts +4 -0
  8. package/Materials/Node/Blocks/Dual/lightBlock.js +47 -3
  9. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  10. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.d.ts +6 -0
  11. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +36 -8
  12. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  13. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.d.ts +2 -0
  14. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +22 -0
  15. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  16. package/Materials/Node/Blocks/Fragment/fragDepthBlock.d.ts +31 -0
  17. package/Materials/Node/Blocks/Fragment/fragDepthBlock.js +67 -0
  18. package/Materials/Node/Blocks/Fragment/fragDepthBlock.js.map +1 -0
  19. package/Materials/Node/Blocks/Fragment/index.d.ts +2 -0
  20. package/Materials/Node/Blocks/Fragment/index.js +2 -0
  21. package/Materials/Node/Blocks/Fragment/index.js.map +1 -1
  22. package/Materials/Node/Blocks/Fragment/shadowMapBlock.d.ts +40 -0
  23. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js +111 -0
  24. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js.map +1 -0
  25. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.d.ts +4 -0
  26. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +50 -3
  27. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  28. package/Materials/Node/Blocks/PBR/reflectionBlock.d.ts +2 -0
  29. package/Materials/Node/Blocks/PBR/reflectionBlock.js +18 -1
  30. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  31. package/Materials/Node/Blocks/biPlanarBlock.d.ts +18 -0
  32. package/Materials/Node/Blocks/biPlanarBlock.js +70 -0
  33. package/Materials/Node/Blocks/biPlanarBlock.js.map +1 -0
  34. package/Materials/Node/Blocks/index.d.ts +2 -0
  35. package/Materials/Node/Blocks/index.js +2 -0
  36. package/Materials/Node/Blocks/index.js.map +1 -1
  37. package/Materials/Node/Blocks/triPlanarBlock.d.ts +116 -0
  38. package/Materials/Node/Blocks/triPlanarBlock.js +340 -0
  39. package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -0
  40. package/Materials/Node/nodeMaterial.d.ts +4 -1
  41. package/Materials/Node/nodeMaterial.js +8 -0
  42. package/Materials/Node/nodeMaterial.js.map +1 -1
  43. package/Materials/Node/nodeMaterialBlock.d.ts +2 -0
  44. package/Materials/Node/nodeMaterialBlock.js +5 -0
  45. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  46. package/Materials/Node/nodeMaterialBuildState.d.ts +2 -0
  47. package/Materials/Node/nodeMaterialBuildState.js +3 -3
  48. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  49. package/Materials/Node/nodeMaterialBuildStateSharedData.d.ts +2 -1
  50. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  51. package/Materials/Node/nodeMaterialDecorator.d.ts +4 -1
  52. package/Materials/Node/nodeMaterialDecorator.js.map +1 -1
  53. package/Materials/PBR/pbrBaseMaterial.d.ts +2 -0
  54. package/Materials/PBR/pbrBaseMaterial.js +11 -0
  55. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  56. package/Materials/Textures/videoTexture.js +8 -35
  57. package/Materials/Textures/videoTexture.js.map +1 -1
  58. package/Materials/materialHelper.d.ts +7 -0
  59. package/Materials/materialHelper.js +22 -1
  60. package/Materials/materialHelper.js.map +1 -1
  61. package/Materials/shadowDepthWrapper.d.ts +4 -0
  62. package/Materials/shadowDepthWrapper.js +46 -39
  63. package/Materials/shadowDepthWrapper.js.map +1 -1
  64. package/Materials/standardMaterial.d.ts +2 -0
  65. package/Materials/standardMaterial.js +2 -0
  66. package/Materials/standardMaterial.js.map +1 -1
  67. package/package.json +1 -1
  68. package/scene.d.ts +12 -8
  69. package/scene.js +32 -27
  70. package/scene.js.map +1 -1
@@ -0,0 +1,340 @@
1
+ import { NodeMaterialBlock } from "../nodeMaterialBlock.js";
2
+ import { NodeMaterialBlockConnectionPointTypes } from "../Enums/nodeMaterialBlockConnectionPointTypes.js";
3
+ import { NodeMaterialBlockTargets } from "../Enums/nodeMaterialBlockTargets.js";
4
+ import { NodeMaterialConnectionPointDirection } from "../nodeMaterialBlockConnectionPoint.js";
5
+ import { NodeMaterial } from "../nodeMaterial.js";
6
+ import { RegisterClass } from "../../../Misc/typeStore.js";
7
+ import { Texture } from "../../Textures/texture.js";
8
+
9
+ import "../../../Shaders/ShadersInclude/helperFunctions.js";
10
+ import { ImageSourceBlock } from "./Dual/imageSourceBlock.js";
11
+ import { NodeMaterialConnectionPointCustomObject } from "../nodeMaterialConnectionPointCustomObject.js";
12
+ import { EngineStore } from "../../../Engines/engineStore.js";
13
+ /**
14
+ * Block used to read a texture with triplanar mapping (see "boxmap" in https://iquilezles.org/articles/biplanar/)
15
+ */
16
+ export class TriPlanarBlock extends NodeMaterialBlock {
17
+ /**
18
+ * Create a new TriPlanarBlock
19
+ * @param name defines the block name
20
+ */
21
+ constructor(name) {
22
+ super(name, NodeMaterialBlockTargets.Neutral);
23
+ this._convertToGammaSpace = false;
24
+ this._convertToLinearSpace = false;
25
+ /**
26
+ * Gets or sets a boolean indicating if multiplication of texture with level should be disabled
27
+ */
28
+ this.disableLevelMultiplication = false;
29
+ this.registerInput("position", NodeMaterialBlockConnectionPointTypes.Vector3, false);
30
+ this.registerInput("normal", NodeMaterialBlockConnectionPointTypes.Vector3, false);
31
+ this.registerInput("sharpness", NodeMaterialBlockConnectionPointTypes.Float, true);
32
+ this.registerInput("source", NodeMaterialBlockConnectionPointTypes.Object, true, NodeMaterialBlockTargets.VertexAndFragment, new NodeMaterialConnectionPointCustomObject("source", this, NodeMaterialConnectionPointDirection.Input, ImageSourceBlock, "ImageSourceBlock"));
33
+ this.registerOutput("rgba", NodeMaterialBlockConnectionPointTypes.Color4, NodeMaterialBlockTargets.Neutral);
34
+ this.registerOutput("rgb", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Neutral);
35
+ this.registerOutput("r", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);
36
+ this.registerOutput("g", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);
37
+ this.registerOutput("b", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);
38
+ this.registerOutput("a", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);
39
+ this.registerOutput("level", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);
40
+ this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector4);
41
+ this._inputs[1].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector4);
42
+ }
43
+ /**
44
+ * Gets or sets the texture associated with the node
45
+ */
46
+ get texture() {
47
+ var _a;
48
+ if (this.source.isConnected) {
49
+ return ((_a = this.source.connectedPoint) === null || _a === void 0 ? void 0 : _a.ownerBlock).texture;
50
+ }
51
+ return this._texture;
52
+ }
53
+ set texture(texture) {
54
+ var _a;
55
+ if (this._texture === texture) {
56
+ return;
57
+ }
58
+ const scene = (_a = texture === null || texture === void 0 ? void 0 : texture.getScene()) !== null && _a !== void 0 ? _a : EngineStore.LastCreatedScene;
59
+ if (!texture && scene) {
60
+ scene.markAllMaterialsAsDirty(1, (mat) => {
61
+ return mat.hasTexture(this._texture);
62
+ });
63
+ }
64
+ this._texture = texture;
65
+ if (texture && scene) {
66
+ scene.markAllMaterialsAsDirty(1, (mat) => {
67
+ return mat.hasTexture(texture);
68
+ });
69
+ }
70
+ }
71
+ /**
72
+ * Gets the sampler name associated with this texture
73
+ */
74
+ get samplerName() {
75
+ if (this._imageSource) {
76
+ return this._imageSource.samplerName;
77
+ }
78
+ return this._samplerName;
79
+ }
80
+ /**
81
+ * Gets a boolean indicating that this block is linked to an ImageSourceBlock
82
+ */
83
+ get hasImageSource() {
84
+ return !!this._imageSource;
85
+ }
86
+ /**
87
+ * Gets or sets a boolean indicating if content needs to be converted to gamma space
88
+ */
89
+ set convertToGammaSpace(value) {
90
+ var _a;
91
+ if (value === this._convertToGammaSpace) {
92
+ return;
93
+ }
94
+ this._convertToGammaSpace = value;
95
+ if (this.texture) {
96
+ const scene = (_a = this.texture.getScene()) !== null && _a !== void 0 ? _a : EngineStore.LastCreatedScene;
97
+ scene === null || scene === void 0 ? void 0 : scene.markAllMaterialsAsDirty(1, (mat) => {
98
+ return mat.hasTexture(this.texture);
99
+ });
100
+ }
101
+ }
102
+ get convertToGammaSpace() {
103
+ return this._convertToGammaSpace;
104
+ }
105
+ /**
106
+ * Gets or sets a boolean indicating if content needs to be converted to linear space
107
+ */
108
+ set convertToLinearSpace(value) {
109
+ var _a;
110
+ if (value === this._convertToLinearSpace) {
111
+ return;
112
+ }
113
+ this._convertToLinearSpace = value;
114
+ if (this.texture) {
115
+ const scene = (_a = this.texture.getScene()) !== null && _a !== void 0 ? _a : EngineStore.LastCreatedScene;
116
+ scene === null || scene === void 0 ? void 0 : scene.markAllMaterialsAsDirty(1, (mat) => {
117
+ return mat.hasTexture(this.texture);
118
+ });
119
+ }
120
+ }
121
+ get convertToLinearSpace() {
122
+ return this._convertToLinearSpace;
123
+ }
124
+ /**
125
+ * Gets the current class name
126
+ * @returns the class name
127
+ */
128
+ getClassName() {
129
+ return "TriPlanarBlock";
130
+ }
131
+ /**
132
+ * Gets the position input component
133
+ */
134
+ get position() {
135
+ return this._inputs[0];
136
+ }
137
+ /**
138
+ * Gets the normal input component
139
+ */
140
+ get normal() {
141
+ return this._inputs[1];
142
+ }
143
+ /**
144
+ * Gets the sharpness input component
145
+ */
146
+ get sharpness() {
147
+ return this._inputs[2];
148
+ }
149
+ /**
150
+ * Gets the source input component
151
+ */
152
+ get source() {
153
+ return this._inputs[3];
154
+ }
155
+ /**
156
+ * Gets the rgba output component
157
+ */
158
+ get rgba() {
159
+ return this._outputs[0];
160
+ }
161
+ /**
162
+ * Gets the rgb output component
163
+ */
164
+ get rgb() {
165
+ return this._outputs[1];
166
+ }
167
+ /**
168
+ * Gets the r output component
169
+ */
170
+ get r() {
171
+ return this._outputs[2];
172
+ }
173
+ /**
174
+ * Gets the g output component
175
+ */
176
+ get g() {
177
+ return this._outputs[3];
178
+ }
179
+ /**
180
+ * Gets the b output component
181
+ */
182
+ get b() {
183
+ return this._outputs[4];
184
+ }
185
+ /**
186
+ * Gets the a output component
187
+ */
188
+ get a() {
189
+ return this._outputs[5];
190
+ }
191
+ /**
192
+ * Gets the level output component
193
+ */
194
+ get level() {
195
+ return this._outputs[6];
196
+ }
197
+ prepareDefines(mesh, nodeMaterial, defines) {
198
+ if (!defines._areTexturesDirty) {
199
+ return;
200
+ }
201
+ const toGamma = this.convertToGammaSpace && this.texture && !this.texture.gammaSpace;
202
+ const toLinear = this.convertToLinearSpace && this.texture && this.texture.gammaSpace;
203
+ // Not a bug... Name defines the texture space not the required conversion
204
+ defines.setValue(this._linearDefineName, toGamma, true);
205
+ defines.setValue(this._gammaDefineName, toLinear, true);
206
+ }
207
+ isReady() {
208
+ if (this.texture && !this.texture.isReadyOrNotBlocking()) {
209
+ return false;
210
+ }
211
+ return true;
212
+ }
213
+ bind(effect) {
214
+ if (!this.texture) {
215
+ return;
216
+ }
217
+ effect.setFloat(this._textureInfoName, this.texture.level);
218
+ if (!this._imageSource) {
219
+ effect.setTexture(this._samplerName, this.texture);
220
+ }
221
+ }
222
+ _generateTextureLookup(state) {
223
+ const samplerName = this.samplerName;
224
+ const sharpness = this.sharpness.isConnected ? this.sharpness.associatedVariableName : "1.0";
225
+ const x = state._getFreeVariableName("x");
226
+ const y = state._getFreeVariableName("y");
227
+ const z = state._getFreeVariableName("z");
228
+ const w = state._getFreeVariableName("z");
229
+ state.compilationString += `
230
+ vec4 ${x} = texture2D(${samplerName}, ${this.position.associatedVariableName}.yz);
231
+ vec4 ${y} = texture2D(${samplerName}, ${this.position.associatedVariableName}.zx);
232
+ vec4 ${z} = texture2D(${samplerName}, ${this.position.associatedVariableName}.xy);
233
+
234
+ // blend weights
235
+ vec3 ${w} = pow(abs(${this.normal.associatedVariableName}.xyz), vec3(${sharpness}));
236
+
237
+ // blend and return
238
+ vec4 ${this._tempTextureRead} = (${x}*${w}.x + ${y}*${w}.y + ${z}*${w}.z) / (${w}.x + ${w}.y + ${w}.z);
239
+ `;
240
+ }
241
+ _generateConversionCode(state, output, swizzle) {
242
+ if (swizzle !== "a") {
243
+ // no conversion if the output is "a" (alpha)
244
+ if (!this.texture || !this.texture.gammaSpace) {
245
+ state.compilationString += `#ifdef ${this._linearDefineName}
246
+ ${output.associatedVariableName} = toGammaSpace(${output.associatedVariableName});
247
+ #endif
248
+ `;
249
+ }
250
+ state.compilationString += `#ifdef ${this._gammaDefineName}
251
+ ${output.associatedVariableName} = toLinearSpace(${output.associatedVariableName});
252
+ #endif
253
+ `;
254
+ }
255
+ }
256
+ _writeOutput(state, output, swizzle) {
257
+ let complement = "";
258
+ if (!this.disableLevelMultiplication) {
259
+ complement = ` * ${this._textureInfoName}`;
260
+ }
261
+ state.compilationString += `${this._declareOutput(output, state)} = ${this._tempTextureRead}.${swizzle}${complement};\r\n`;
262
+ this._generateConversionCode(state, output, swizzle);
263
+ }
264
+ _buildBlock(state) {
265
+ super._buildBlock(state);
266
+ if (this.source.isConnected) {
267
+ this._imageSource = this.source.connectedPoint.ownerBlock;
268
+ }
269
+ else {
270
+ this._imageSource = null;
271
+ }
272
+ this._textureInfoName = state._getFreeVariableName("textureInfoName");
273
+ this.level.associatedVariableName = this._textureInfoName;
274
+ this._tempTextureRead = state._getFreeVariableName("tempTextureRead");
275
+ this._linearDefineName = state._getFreeDefineName("ISLINEAR");
276
+ this._gammaDefineName = state._getFreeDefineName("ISGAMMA");
277
+ if (!this._imageSource) {
278
+ this._samplerName = state._getFreeVariableName(this.name + "Sampler");
279
+ state._emit2DSampler(this._samplerName);
280
+ }
281
+ // Declarations
282
+ state.sharedData.blockingBlocks.push(this);
283
+ state.sharedData.textureBlocks.push(this);
284
+ state.sharedData.blocksWithDefines.push(this);
285
+ state.sharedData.bindableBlocks.push(this);
286
+ const comments = `//${this.name}`;
287
+ state._emitFunctionFromInclude("helperFunctions", comments);
288
+ state._emitUniformFromString(this._textureInfoName, "float");
289
+ this._generateTextureLookup(state);
290
+ for (const output of this._outputs) {
291
+ if (output.hasEndpoints && output.name !== "level") {
292
+ this._writeOutput(state, output, output.name);
293
+ }
294
+ }
295
+ return this;
296
+ }
297
+ _dumpPropertiesCode() {
298
+ let codeString = super._dumpPropertiesCode();
299
+ codeString += `${this._codeVariableName}.convertToGammaSpace = ${this.convertToGammaSpace};\r\n`;
300
+ codeString += `${this._codeVariableName}.convertToLinearSpace = ${this.convertToLinearSpace};\r\n`;
301
+ codeString += `${this._codeVariableName}.disableLevelMultiplication = ${this.disableLevelMultiplication};\r\n`;
302
+ if (!this.texture) {
303
+ return codeString;
304
+ }
305
+ codeString += `${this._codeVariableName}.texture = new BABYLON.Texture("${this.texture.name}", null, ${this.texture.noMipmap}, ${this.texture.invertY}, ${this.texture.samplingMode});\r\n`;
306
+ codeString += `${this._codeVariableName}.texture.wrapU = ${this.texture.wrapU};\r\n`;
307
+ codeString += `${this._codeVariableName}.texture.wrapV = ${this.texture.wrapV};\r\n`;
308
+ codeString += `${this._codeVariableName}.texture.uAng = ${this.texture.uAng};\r\n`;
309
+ codeString += `${this._codeVariableName}.texture.vAng = ${this.texture.vAng};\r\n`;
310
+ codeString += `${this._codeVariableName}.texture.wAng = ${this.texture.wAng};\r\n`;
311
+ codeString += `${this._codeVariableName}.texture.uOffset = ${this.texture.uOffset};\r\n`;
312
+ codeString += `${this._codeVariableName}.texture.vOffset = ${this.texture.vOffset};\r\n`;
313
+ codeString += `${this._codeVariableName}.texture.uScale = ${this.texture.uScale};\r\n`;
314
+ codeString += `${this._codeVariableName}.texture.vScale = ${this.texture.vScale};\r\n`;
315
+ codeString += `${this._codeVariableName}.texture.coordinatesMode = ${this.texture.coordinatesMode};\r\n`;
316
+ return codeString;
317
+ }
318
+ serialize() {
319
+ const serializationObject = super.serialize();
320
+ serializationObject.convertToGammaSpace = this.convertToGammaSpace;
321
+ serializationObject.convertToLinearSpace = this.convertToLinearSpace;
322
+ serializationObject.disableLevelMultiplication = this.disableLevelMultiplication;
323
+ if (!this.hasImageSource && this.texture && !this.texture.isRenderTarget && this.texture.getClassName() !== "VideoTexture") {
324
+ serializationObject.texture = this.texture.serialize();
325
+ }
326
+ return serializationObject;
327
+ }
328
+ _deserialize(serializationObject, scene, rootUrl) {
329
+ super._deserialize(serializationObject, scene, rootUrl);
330
+ this.convertToGammaSpace = serializationObject.convertToGammaSpace;
331
+ this.convertToLinearSpace = !!serializationObject.convertToLinearSpace;
332
+ this.disableLevelMultiplication = !!serializationObject.disableLevelMultiplication;
333
+ if (serializationObject.texture && !NodeMaterial.IgnoreTexturesAtLoadTime && serializationObject.texture.url !== undefined) {
334
+ rootUrl = serializationObject.texture.url.indexOf("data:") === 0 ? "" : rootUrl;
335
+ this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl);
336
+ }
337
+ }
338
+ }
339
+ RegisterClass("BABYLON.TriPlanarBlock", TriPlanarBlock);
340
+ //# sourceMappingURL=triPlanarBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triPlanarBlock.js","sourceRoot":"","sources":["../../../../../../../lts/core/generated/Materials/Node/Blocks/triPlanarBlock.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 type { AbstractMesh } from \"../../../Meshes/abstractMesh\";\r\nimport type { NodeMaterialDefines } from \"../nodeMaterial\";\r\nimport { NodeMaterial } from \"../nodeMaterial\";\r\nimport type { Effect } from \"../../effect\";\r\nimport type { Nullable } from \"../../../types\";\r\nimport { RegisterClass } from \"../../../Misc/typeStore\";\r\nimport { Texture } from \"../../Textures/texture\";\r\nimport type { Scene } from \"../../../scene\";\r\nimport { Constants } from \"../../../Engines/constants\";\r\nimport \"../../../Shaders/ShadersInclude/helperFunctions\";\r\nimport { ImageSourceBlock } from \"./Dual/imageSourceBlock\";\r\nimport { NodeMaterialConnectionPointCustomObject } from \"../nodeMaterialConnectionPointCustomObject\";\r\nimport { EngineStore } from \"../../../Engines/engineStore\";\r\n\r\n/**\r\n * Block used to read a texture with triplanar mapping (see \"boxmap\" in https://iquilezles.org/articles/biplanar/)\r\n */\r\nexport class TriPlanarBlock extends NodeMaterialBlock {\r\n private _linearDefineName: string;\r\n private _gammaDefineName: string;\r\n protected _tempTextureRead: string;\r\n private _samplerName: string;\r\n private _textureInfoName: string;\r\n private _imageSource: Nullable<ImageSourceBlock>;\r\n\r\n protected _texture: Nullable<Texture>;\r\n /**\r\n * Gets or sets the texture associated with the node\r\n */\r\n public get texture(): Nullable<Texture> {\r\n if (this.source.isConnected) {\r\n return (this.source.connectedPoint?.ownerBlock as ImageSourceBlock).texture;\r\n }\r\n return this._texture;\r\n }\r\n\r\n public set texture(texture: Nullable<Texture>) {\r\n if (this._texture === texture) {\r\n return;\r\n }\r\n\r\n const scene = texture?.getScene() ?? EngineStore.LastCreatedScene;\r\n\r\n if (!texture && scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(this._texture!);\r\n });\r\n }\r\n\r\n this._texture = texture;\r\n\r\n if (texture && scene) {\r\n scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(texture);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Gets the sampler name associated with this texture\r\n */\r\n public get samplerName(): string {\r\n if (this._imageSource) {\r\n return this._imageSource.samplerName;\r\n }\r\n return this._samplerName;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that this block is linked to an ImageSourceBlock\r\n */\r\n public get hasImageSource(): boolean {\r\n return !!this._imageSource;\r\n }\r\n\r\n private _convertToGammaSpace = false;\r\n /**\r\n * Gets or sets a boolean indicating if content needs to be converted to gamma space\r\n */\r\n public set convertToGammaSpace(value: boolean) {\r\n if (value === this._convertToGammaSpace) {\r\n return;\r\n }\r\n\r\n this._convertToGammaSpace = value;\r\n if (this.texture) {\r\n const scene = this.texture.getScene() ?? EngineStore.LastCreatedScene;\r\n scene?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(this.texture!);\r\n });\r\n }\r\n }\r\n public get convertToGammaSpace(): boolean {\r\n return this._convertToGammaSpace;\r\n }\r\n\r\n private _convertToLinearSpace = false;\r\n /**\r\n * Gets or sets a boolean indicating if content needs to be converted to linear space\r\n */\r\n public set convertToLinearSpace(value: boolean) {\r\n if (value === this._convertToLinearSpace) {\r\n return;\r\n }\r\n\r\n this._convertToLinearSpace = value;\r\n if (this.texture) {\r\n const scene = this.texture.getScene() ?? EngineStore.LastCreatedScene;\r\n scene?.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag, (mat) => {\r\n return mat.hasTexture(this.texture!);\r\n });\r\n }\r\n }\r\n public get convertToLinearSpace(): boolean {\r\n return this._convertToLinearSpace;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if multiplication of texture with level should be disabled\r\n */\r\n public disableLevelMultiplication = false;\r\n\r\n /**\r\n * Create a new TriPlanarBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerInput(\"position\", NodeMaterialBlockConnectionPointTypes.Vector3, false);\r\n this.registerInput(\"normal\", NodeMaterialBlockConnectionPointTypes.Vector3, false);\r\n this.registerInput(\"sharpness\", NodeMaterialBlockConnectionPointTypes.Float, true);\r\n this.registerInput(\r\n \"source\",\r\n NodeMaterialBlockConnectionPointTypes.Object,\r\n true,\r\n NodeMaterialBlockTargets.VertexAndFragment,\r\n new NodeMaterialConnectionPointCustomObject(\"source\", this, NodeMaterialConnectionPointDirection.Input, ImageSourceBlock, \"ImageSourceBlock\")\r\n );\r\n\r\n this.registerOutput(\"rgba\", NodeMaterialBlockConnectionPointTypes.Color4, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"rgb\", NodeMaterialBlockConnectionPointTypes.Color3, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"r\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"g\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"b\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n this.registerOutput(\"a\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n\r\n this.registerOutput(\"level\", NodeMaterialBlockConnectionPointTypes.Float, NodeMaterialBlockTargets.Neutral);\r\n\r\n this._inputs[0].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector4);\r\n this._inputs[1].acceptedConnectionPointTypes.push(NodeMaterialBlockConnectionPointTypes.Vector4);\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 \"TriPlanarBlock\";\r\n }\r\n\r\n /**\r\n * Gets the position input component\r\n */\r\n public get position(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the normal input component\r\n */\r\n public get normal(): NodeMaterialConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the sharpness input component\r\n */\r\n public get sharpness(): NodeMaterialConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the source input component\r\n */\r\n public get source(): NodeMaterialConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the rgba output component\r\n */\r\n public get rgba(): NodeMaterialConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Gets the rgb output component\r\n */\r\n public get rgb(): NodeMaterialConnectionPoint {\r\n return this._outputs[1];\r\n }\r\n\r\n /**\r\n * Gets the r output component\r\n */\r\n public get r(): NodeMaterialConnectionPoint {\r\n return this._outputs[2];\r\n }\r\n\r\n /**\r\n * Gets the g output component\r\n */\r\n public get g(): NodeMaterialConnectionPoint {\r\n return this._outputs[3];\r\n }\r\n\r\n /**\r\n * Gets the b output component\r\n */\r\n public get b(): NodeMaterialConnectionPoint {\r\n return this._outputs[4];\r\n }\r\n\r\n /**\r\n * Gets the a output component\r\n */\r\n public get a(): NodeMaterialConnectionPoint {\r\n return this._outputs[5];\r\n }\r\n\r\n /**\r\n * Gets the level output component\r\n */\r\n public get level(): NodeMaterialConnectionPoint {\r\n return this._outputs[6];\r\n }\r\n\r\n public prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n if (!defines._areTexturesDirty) {\r\n return;\r\n }\r\n\r\n const toGamma = this.convertToGammaSpace && this.texture && !this.texture.gammaSpace;\r\n const toLinear = this.convertToLinearSpace && this.texture && this.texture.gammaSpace;\r\n\r\n // Not a bug... Name defines the texture space not the required conversion\r\n defines.setValue(this._linearDefineName, toGamma, true);\r\n defines.setValue(this._gammaDefineName, toLinear, true);\r\n }\r\n\r\n public isReady() {\r\n if (this.texture && !this.texture.isReadyOrNotBlocking()) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public bind(effect: Effect) {\r\n if (!this.texture) {\r\n return;\r\n }\r\n\r\n effect.setFloat(this._textureInfoName, this.texture.level);\r\n\r\n if (!this._imageSource) {\r\n effect.setTexture(this._samplerName, this.texture);\r\n }\r\n }\r\n\r\n protected _generateTextureLookup(state: NodeMaterialBuildState): void {\r\n const samplerName = this.samplerName;\r\n\r\n const sharpness = this.sharpness.isConnected ? this.sharpness.associatedVariableName : \"1.0\";\r\n\r\n const x = state._getFreeVariableName(\"x\");\r\n const y = state._getFreeVariableName(\"y\");\r\n const z = state._getFreeVariableName(\"z\");\r\n const w = state._getFreeVariableName(\"z\");\r\n\r\n state.compilationString += `\r\n vec4 ${x} = texture2D(${samplerName}, ${this.position.associatedVariableName}.yz);\r\n vec4 ${y} = texture2D(${samplerName}, ${this.position.associatedVariableName}.zx);\r\n vec4 ${z} = texture2D(${samplerName}, ${this.position.associatedVariableName}.xy);\r\n \r\n // blend weights\r\n vec3 ${w} = pow(abs(${this.normal.associatedVariableName}.xyz), vec3(${sharpness}));\r\n\r\n // blend and return\r\n vec4 ${this._tempTextureRead} = (${x}*${w}.x + ${y}*${w}.y + ${z}*${w}.z) / (${w}.x + ${w}.y + ${w}.z); \r\n `;\r\n }\r\n\r\n private _generateConversionCode(state: NodeMaterialBuildState, output: NodeMaterialConnectionPoint, swizzle: string): void {\r\n if (swizzle !== \"a\") {\r\n // no conversion if the output is \"a\" (alpha)\r\n if (!this.texture || !this.texture.gammaSpace) {\r\n state.compilationString += `#ifdef ${this._linearDefineName}\r\n ${output.associatedVariableName} = toGammaSpace(${output.associatedVariableName});\r\n #endif\r\n `;\r\n }\r\n\r\n state.compilationString += `#ifdef ${this._gammaDefineName}\r\n ${output.associatedVariableName} = toLinearSpace(${output.associatedVariableName});\r\n #endif\r\n `;\r\n }\r\n }\r\n\r\n private _writeOutput(state: NodeMaterialBuildState, output: NodeMaterialConnectionPoint, swizzle: string) {\r\n let complement = \"\";\r\n\r\n if (!this.disableLevelMultiplication) {\r\n complement = ` * ${this._textureInfoName}`;\r\n }\r\n\r\n state.compilationString += `${this._declareOutput(output, state)} = ${this._tempTextureRead}.${swizzle}${complement};\\r\\n`;\r\n this._generateConversionCode(state, output, swizzle);\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n if (this.source.isConnected) {\r\n this._imageSource = this.source.connectedPoint!.ownerBlock as ImageSourceBlock;\r\n } else {\r\n this._imageSource = null;\r\n }\r\n\r\n this._textureInfoName = state._getFreeVariableName(\"textureInfoName\");\r\n\r\n this.level.associatedVariableName = this._textureInfoName;\r\n\r\n this._tempTextureRead = state._getFreeVariableName(\"tempTextureRead\");\r\n this._linearDefineName = state._getFreeDefineName(\"ISLINEAR\");\r\n this._gammaDefineName = state._getFreeDefineName(\"ISGAMMA\");\r\n\r\n if (!this._imageSource) {\r\n this._samplerName = state._getFreeVariableName(this.name + \"Sampler\");\r\n\r\n state._emit2DSampler(this._samplerName);\r\n }\r\n\r\n // Declarations\r\n state.sharedData.blockingBlocks.push(this);\r\n state.sharedData.textureBlocks.push(this);\r\n state.sharedData.blocksWithDefines.push(this);\r\n state.sharedData.bindableBlocks.push(this);\r\n\r\n const comments = `//${this.name}`;\r\n state._emitFunctionFromInclude(\"helperFunctions\", comments);\r\n\r\n state._emitUniformFromString(this._textureInfoName, \"float\");\r\n\r\n this._generateTextureLookup(state);\r\n\r\n for (const output of this._outputs) {\r\n if (output.hasEndpoints && output.name !== \"level\") {\r\n this._writeOutput(state, output, output.name);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n protected _dumpPropertiesCode() {\r\n let codeString = super._dumpPropertiesCode();\r\n\r\n codeString += `${this._codeVariableName}.convertToGammaSpace = ${this.convertToGammaSpace};\\r\\n`;\r\n codeString += `${this._codeVariableName}.convertToLinearSpace = ${this.convertToLinearSpace};\\r\\n`;\r\n codeString += `${this._codeVariableName}.disableLevelMultiplication = ${this.disableLevelMultiplication};\\r\\n`;\r\n\r\n if (!this.texture) {\r\n return codeString;\r\n }\r\n\r\n codeString += `${this._codeVariableName}.texture = new BABYLON.Texture(\"${this.texture.name}\", null, ${this.texture.noMipmap}, ${this.texture.invertY}, ${this.texture.samplingMode});\\r\\n`;\r\n codeString += `${this._codeVariableName}.texture.wrapU = ${this.texture.wrapU};\\r\\n`;\r\n codeString += `${this._codeVariableName}.texture.wrapV = ${this.texture.wrapV};\\r\\n`;\r\n codeString += `${this._codeVariableName}.texture.uAng = ${this.texture.uAng};\\r\\n`;\r\n codeString += `${this._codeVariableName}.texture.vAng = ${this.texture.vAng};\\r\\n`;\r\n codeString += `${this._codeVariableName}.texture.wAng = ${this.texture.wAng};\\r\\n`;\r\n codeString += `${this._codeVariableName}.texture.uOffset = ${this.texture.uOffset};\\r\\n`;\r\n codeString += `${this._codeVariableName}.texture.vOffset = ${this.texture.vOffset};\\r\\n`;\r\n codeString += `${this._codeVariableName}.texture.uScale = ${this.texture.uScale};\\r\\n`;\r\n codeString += `${this._codeVariableName}.texture.vScale = ${this.texture.vScale};\\r\\n`;\r\n codeString += `${this._codeVariableName}.texture.coordinatesMode = ${this.texture.coordinatesMode};\\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.convertToGammaSpace = this.convertToGammaSpace;\r\n serializationObject.convertToLinearSpace = this.convertToLinearSpace;\r\n serializationObject.disableLevelMultiplication = this.disableLevelMultiplication;\r\n if (!this.hasImageSource && this.texture && !this.texture.isRenderTarget && this.texture.getClassName() !== \"VideoTexture\") {\r\n serializationObject.texture = this.texture.serialize();\r\n }\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.convertToGammaSpace = serializationObject.convertToGammaSpace;\r\n this.convertToLinearSpace = !!serializationObject.convertToLinearSpace;\r\n this.disableLevelMultiplication = !!serializationObject.disableLevelMultiplication;\r\n\r\n if (serializationObject.texture && !NodeMaterial.IgnoreTexturesAtLoadTime && serializationObject.texture.url !== undefined) {\r\n rootUrl = serializationObject.texture.url.indexOf(\"data:\") === 0 ? \"\" : rootUrl;\r\n this.texture = Texture.Parse(serializationObject.texture, scene, rootUrl) as Texture;\r\n }\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.TriPlanarBlock\", TriPlanarBlock);\r\n"]}
@@ -27,6 +27,7 @@ import type { IParticleSystem } from "../../Particles/IParticleSystem";
27
27
  import { ProceduralTexture } from "../Textures/Procedurals/proceduralTexture";
28
28
  import type { ImageSourceBlock } from "./Blocks/Dual/imageSourceBlock";
29
29
  import type { Material } from "../material";
30
+ import type { TriPlanarBlock } from "./Blocks/triPlanarBlock";
30
31
  /**
31
32
  * Interface used to configure the node material editor
32
33
  */
@@ -74,6 +75,8 @@ export declare class NodeMaterialDefines extends MaterialDefines implements IIma
74
75
  SKIPFINALCOLORCLAMP: boolean;
75
76
  /** MISC. */
76
77
  BUMPDIRECTUV: number;
78
+ CAMERA_ORTHOGRAPHIC: boolean;
79
+ CAMERA_PERSPECTIVE: boolean;
77
80
  constructor();
78
81
  setValue(name: string, value: any, markAsUnprocessedIfDirty?: boolean): void;
79
82
  }
@@ -360,7 +363,7 @@ export declare class NodeMaterial extends PushMaterial {
360
363
  * Gets the list of texture blocks
361
364
  * @returns an array of texture blocks
362
365
  */
363
- getTextureBlocks(): (TextureBlock | ReflectionTextureBaseBlock | RefractionBlock | CurrentScreenBlock | ParticleTextureBlock | ImageSourceBlock)[];
366
+ getTextureBlocks(): (TextureBlock | ReflectionTextureBaseBlock | RefractionBlock | CurrentScreenBlock | ParticleTextureBlock | ImageSourceBlock | TriPlanarBlock)[];
364
367
  /**
365
368
  * Specifies if the material uses a texture
366
369
  * @param texture defines the texture to check against the material
@@ -40,6 +40,7 @@ import { AnimatedInputBlockTypes } from "./Blocks/Input/animatedInputBlockTypes.
40
40
  import { TrigonometryBlock, TrigonometryBlockOperations } from "./Blocks/trigonometryBlock.js";
41
41
  import { NodeMaterialSystemValues } from "./Enums/nodeMaterialSystemValues.js";
42
42
  import { EngineStore } from "../../Engines/engineStore.js";
43
+ import { MaterialHelper } from "../materialHelper.js";
43
44
  const onCreatedEffectParameters = { effect: null, subMesh: null };
44
45
  /** @internal */
45
46
  export class NodeMaterialDefines extends MaterialDefines {
@@ -83,6 +84,8 @@ export class NodeMaterialDefines extends MaterialDefines {
83
84
  this.SKIPFINALCOLORCLAMP = false;
84
85
  /** MISC. */
85
86
  this.BUMPDIRECTUV = 0;
87
+ this.CAMERA_ORTHOGRAPHIC = false;
88
+ this.CAMERA_PERSPECTIVE = false;
86
89
  this.rebuild();
87
90
  }
88
91
  setValue(name, value, markAsUnprocessedIfDirty = false) {
@@ -802,6 +805,11 @@ export class NodeMaterial extends PushMaterial {
802
805
  }
803
806
  _processDefines(mesh, defines, useInstances = false, subMesh) {
804
807
  let result = null;
808
+ // Global defines
809
+ const scene = this.getScene();
810
+ if (MaterialHelper.PrepareDefinesForCamera(scene, defines)) {
811
+ defines.markAsMiscDirty();
812
+ }
805
813
  // Shared defines
806
814
  this._sharedData.blocksWithDefines.forEach((b) => {
807
815
  b.initializeDefines(mesh, this, defines, useInstances);