@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.
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +4 -3
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/thinEngine.js +2 -2
- package/Engines/thinEngine.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +1 -0
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Materials/Node/Blocks/Dual/lightBlock.d.ts +4 -0
- package/Materials/Node/Blocks/Dual/lightBlock.js +47 -3
- package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.d.ts +6 -0
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +36 -8
- package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
- package/Materials/Node/Blocks/Dual/reflectionTextureBlock.d.ts +2 -0
- package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +22 -0
- package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/fragDepthBlock.d.ts +31 -0
- package/Materials/Node/Blocks/Fragment/fragDepthBlock.js +67 -0
- package/Materials/Node/Blocks/Fragment/fragDepthBlock.js.map +1 -0
- package/Materials/Node/Blocks/Fragment/index.d.ts +2 -0
- package/Materials/Node/Blocks/Fragment/index.js +2 -0
- package/Materials/Node/Blocks/Fragment/index.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/shadowMapBlock.d.ts +40 -0
- package/Materials/Node/Blocks/Fragment/shadowMapBlock.js +111 -0
- package/Materials/Node/Blocks/Fragment/shadowMapBlock.js.map +1 -0
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.d.ts +4 -0
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +50 -3
- package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.d.ts +2 -0
- package/Materials/Node/Blocks/PBR/reflectionBlock.js +18 -1
- package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
- package/Materials/Node/Blocks/biPlanarBlock.d.ts +18 -0
- package/Materials/Node/Blocks/biPlanarBlock.js +70 -0
- package/Materials/Node/Blocks/biPlanarBlock.js.map +1 -0
- package/Materials/Node/Blocks/index.d.ts +2 -0
- package/Materials/Node/Blocks/index.js +2 -0
- package/Materials/Node/Blocks/index.js.map +1 -1
- package/Materials/Node/Blocks/triPlanarBlock.d.ts +116 -0
- package/Materials/Node/Blocks/triPlanarBlock.js +340 -0
- package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -0
- package/Materials/Node/nodeMaterial.d.ts +4 -1
- package/Materials/Node/nodeMaterial.js +8 -0
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterialBlock.d.ts +2 -0
- package/Materials/Node/nodeMaterialBlock.js +5 -0
- package/Materials/Node/nodeMaterialBlock.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildState.d.ts +2 -0
- package/Materials/Node/nodeMaterialBuildState.js +3 -3
- package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
- package/Materials/Node/nodeMaterialBuildStateSharedData.d.ts +2 -1
- package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
- package/Materials/Node/nodeMaterialDecorator.d.ts +4 -1
- package/Materials/Node/nodeMaterialDecorator.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.d.ts +2 -0
- package/Materials/PBR/pbrBaseMaterial.js +11 -0
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/videoTexture.js +8 -35
- package/Materials/Textures/videoTexture.js.map +1 -1
- package/Materials/materialHelper.d.ts +7 -0
- package/Materials/materialHelper.js +22 -1
- package/Materials/materialHelper.js.map +1 -1
- package/Materials/shadowDepthWrapper.d.ts +4 -0
- package/Materials/shadowDepthWrapper.js +46 -39
- package/Materials/shadowDepthWrapper.js.map +1 -1
- package/Materials/standardMaterial.d.ts +2 -0
- package/Materials/standardMaterial.js +2 -0
- package/Materials/standardMaterial.js.map +1 -1
- package/package.json +1 -1
- package/scene.d.ts +12 -8
- package/scene.js +32 -27
- 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":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,qCAAqC,EAAE,MAAM,gDAAgD,CAAC;AAEvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAE7E,OAAO,EAAE,oCAAoC,EAAE,MAAM,qCAAqC,CAAC;AAG3F,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,iDAAiD,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,uCAAuC,EAAE,MAAM,4CAA4C,CAAC;AACrG,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,iBAAiB;IAyGjD;;;OAGG;IACH,YAAmB,IAAY;QAC3B,KAAK,CAAC,IAAI,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QApD1C,yBAAoB,GAAG,KAAK,CAAC;QAqB7B,0BAAqB,GAAG,KAAK,CAAC;QAqBtC;;WAEG;QACI,+BAA0B,GAAG,KAAK,CAAC;QAStC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,qCAAqC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACrF,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,qCAAqC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACnF,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,qCAAqC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACnF,IAAI,CAAC,aAAa,CACd,QAAQ,EACR,qCAAqC,CAAC,MAAM,EAC5C,IAAI,EACJ,wBAAwB,CAAC,iBAAiB,EAC1C,IAAI,uCAAuC,CAAC,QAAQ,EAAE,IAAI,EAAE,oCAAoC,CAAC,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CAChJ,CAAC;QAEF,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,qCAAqC,CAAC,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAC5G,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,qCAAqC,CAAC,MAAM,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAC3G,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,qCAAqC,CAAC,KAAK,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACxG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,qCAAqC,CAAC,KAAK,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACxG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,qCAAqC,CAAC,KAAK,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QACxG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,qCAAqC,CAAC,KAAK,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAExG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,qCAAqC,CAAC,KAAK,EAAE,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAE5G,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,IAAI,CAAC,qCAAqC,CAAC,OAAO,CAAC,CAAC;QACjG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,4BAA4B,CAAC,IAAI,CAAC,qCAAqC,CAAC,OAAO,CAAC,CAAC;IACrG,CAAC;IA7HD;;OAEG;IACH,IAAW,OAAO;;QACd,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YACzB,OAAO,CAAC,MAAA,IAAI,CAAC,MAAM,CAAC,cAAc,0CAAE,UAA+B,CAAA,CAAC,OAAO,CAAC;SAC/E;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,IAAW,OAAO,CAAC,OAA0B;;QACzC,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE;YAC3B,OAAO;SACV;QAED,MAAM,KAAK,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,EAAE,mCAAI,WAAW,CAAC,gBAAgB,CAAC;QAElE,IAAI,CAAC,OAAO,IAAI,KAAK,EAAE;YACnB,KAAK,CAAC,uBAAuB,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC,GAAG,EAAE,EAAE;gBACvE,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,QAAS,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;SACN;QAED,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,IAAI,OAAO,IAAI,KAAK,EAAE;YAClB,KAAK,CAAC,uBAAuB,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC,GAAG,EAAE,EAAE;gBACvE,OAAO,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IAED;;OAEG;IACH,IAAW,WAAW;QAClB,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;SACxC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,IAAW,cAAc;QACrB,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;IAC/B,CAAC;IAGD;;OAEG;IACH,IAAW,mBAAmB,CAAC,KAAc;;QACzC,IAAI,KAAK,KAAK,IAAI,CAAC,oBAAoB,EAAE;YACrC,OAAO;SACV;QAED,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAClC,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,MAAM,KAAK,GAAG,MAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,mCAAI,WAAW,CAAC,gBAAgB,CAAC;YACtE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,uBAAuB,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxE,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,OAAQ,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IACD,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAGD;;OAEG;IACH,IAAW,oBAAoB,CAAC,KAAc;;QAC1C,IAAI,KAAK,KAAK,IAAI,CAAC,qBAAqB,EAAE;YACtC,OAAO;SACV;QAED,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;QACnC,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,MAAM,KAAK,GAAG,MAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,mCAAI,WAAW,CAAC,gBAAgB,CAAC;YACtE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,uBAAuB,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC,GAAG,EAAE,EAAE;gBACxE,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,OAAQ,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;SACN;IACL,CAAC;IACD,IAAW,oBAAoB;QAC3B,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACtC,CAAC;IAsCD;;;OAGG;IACI,YAAY;QACf,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,GAAG;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,CAAC;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,CAAC;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,CAAC;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,CAAC;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAEM,cAAc,CAAC,IAAkB,EAAE,YAA0B,EAAE,OAA4B;QAC9F,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE;YAC5B,OAAO;SACV;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QAEtF,0EAA0E;QAC1E,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACxD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAEM,OAAO;QACV,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE;YACtD,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,IAAI,CAAC,MAAc;QACtB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,OAAO;SACV;QAED,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE3D,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;SACtD;IACL,CAAC;IAES,sBAAsB,CAAC,KAA6B;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAErC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC,CAAC,KAAK,CAAC;QAE7F,MAAM,CAAC,GAAG,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,CAAC,GAAG,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAE1C,KAAK,CAAC,iBAAiB,IAAI;mBAChB,CAAC,gBAAgB,WAAW,KAAK,IAAI,CAAC,QAAQ,CAAC,sBAAsB;mBACrE,CAAC,gBAAgB,WAAW,KAAK,IAAI,CAAC,QAAQ,CAAC,sBAAsB;mBACrE,CAAC,gBAAgB,WAAW,KAAK,IAAI,CAAC,QAAQ,CAAC,sBAAsB;;;mBAGrE,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,sBAAsB,eAAe,SAAS;;;mBAGzE,IAAI,CAAC,gBAAgB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;SACrG,CAAC;IACN,CAAC;IAEO,uBAAuB,CAAC,KAA6B,EAAE,MAAmC,EAAE,OAAe;QAC/G,IAAI,OAAO,KAAK,GAAG,EAAE;YACjB,6CAA6C;YAC7C,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;gBAC3C,KAAK,CAAC,iBAAiB,IAAI,UAAU,IAAI,CAAC,iBAAiB;sBACrD,MAAM,CAAC,sBAAsB,mBAAmB,MAAM,CAAC,sBAAsB;;iBAElF,CAAC;aACL;YAED,KAAK,CAAC,iBAAiB,IAAI,UAAU,IAAI,CAAC,gBAAgB;kBACpD,MAAM,CAAC,sBAAsB,oBAAoB,MAAM,CAAC,sBAAsB;;aAEnF,CAAC;SACL;IACL,CAAC;IAEO,YAAY,CAAC,KAA6B,EAAE,MAAmC,EAAE,OAAe;QACpG,IAAI,UAAU,GAAG,EAAE,CAAC;QAEpB,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE;YAClC,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC9C;QAED,KAAK,CAAC,iBAAiB,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,gBAAgB,IAAI,OAAO,GAAG,UAAU,OAAO,CAAC;QAC3H,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAES,WAAW,CAAC,KAA6B;QAC/C,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEzB,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,cAAe,CAAC,UAA8B,CAAC;SAClF;aAAM;YACH,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC5B;QAED,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;QAEtE,IAAI,CAAC,KAAK,CAAC,sBAAsB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAE1D,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;QACtE,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC9D,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAE5D,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACpB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;YAEtE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;SAC3C;QAED,eAAe;QACf,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9C,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3C,MAAM,QAAQ,GAAG,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QAClC,KAAK,CAAC,wBAAwB,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAE5D,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;QAE7D,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QAEnC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;YAChC,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;gBAChD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;aACjD;SACJ;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAES,mBAAmB;QACzB,IAAI,UAAU,GAAG,KAAK,CAAC,mBAAmB,EAAE,CAAC;QAE7C,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,0BAA0B,IAAI,CAAC,mBAAmB,OAAO,CAAC;QACjG,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,2BAA2B,IAAI,CAAC,oBAAoB,OAAO,CAAC;QACnG,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,iCAAiC,IAAI,CAAC,0BAA0B,OAAO,CAAC;QAE/G,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,OAAO,UAAU,CAAC;SACrB;QAED,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,mCAAmC,IAAI,CAAC,OAAO,CAAC,IAAI,YAAY,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,YAAY,QAAQ,CAAC;QAC5L,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,oBAAoB,IAAI,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;QACrF,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,oBAAoB,IAAI,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC;QACrF,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,mBAAmB,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC;QACnF,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,mBAAmB,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC;QACnF,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,mBAAmB,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC;QACnF,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,sBAAsB,IAAI,CAAC,OAAO,CAAC,OAAO,OAAO,CAAC;QACzF,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,sBAAsB,IAAI,CAAC,OAAO,CAAC,OAAO,OAAO,CAAC;QACzF,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,qBAAqB,IAAI,CAAC,OAAO,CAAC,MAAM,OAAO,CAAC;QACvF,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,qBAAqB,IAAI,CAAC,OAAO,CAAC,MAAM,OAAO,CAAC;QACvF,UAAU,IAAI,GAAG,IAAI,CAAC,iBAAiB,8BAA8B,IAAI,CAAC,OAAO,CAAC,eAAe,OAAO,CAAC;QAEzG,OAAO,UAAU,CAAC;IACtB,CAAC;IAEM,SAAS;QACZ,MAAM,mBAAmB,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QAE9C,mBAAmB,CAAC,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QACnE,mBAAmB,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACrE,mBAAmB,CAAC,0BAA0B,GAAG,IAAI,CAAC,0BAA0B,CAAC;QACjF,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,cAAc,EAAE;YACxH,mBAAmB,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;SAC1D;QAED,OAAO,mBAAmB,CAAC;IAC/B,CAAC;IAEM,YAAY,CAAC,mBAAwB,EAAE,KAAY,EAAE,OAAe;QACvE,KAAK,CAAC,YAAY,CAAC,mBAAmB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAExD,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,mBAAmB,CAAC;QACnE,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC,mBAAmB,CAAC,oBAAoB,CAAC;QACvE,IAAI,CAAC,0BAA0B,GAAG,CAAC,CAAC,mBAAmB,CAAC,0BAA0B,CAAC;QAEnF,IAAI,mBAAmB,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,wBAAwB,IAAI,mBAAmB,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE;YACxH,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAChF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAY,CAAC;SACxF;IACL,CAAC;CACJ;AAED,aAAa,CAAC,wBAAwB,EAAE,cAAc,CAAC,CAAC","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);
|