@needle-tools/engine 4.6.2 → 4.7.0-next.4ec920e

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 (28) hide show
  1. package/dist/needle-engine.bundle-C00XXoql.min.js +1603 -0
  2. package/dist/{needle-engine.bundle-DmYMLdWP.umd.cjs → needle-engine.bundle-CaRf1SjI.umd.cjs} +212 -184
  3. package/dist/{needle-engine.bundle-DGcStTA7.js → needle-engine.bundle-DDM6UaI6.js} +8708 -8445
  4. package/dist/needle-engine.js +2 -2
  5. package/dist/needle-engine.min.js +1 -1
  6. package/dist/needle-engine.umd.cjs +1 -1
  7. package/lib/engine/engine_context.js +3 -2
  8. package/lib/engine/engine_context.js.map +1 -1
  9. package/lib/engine-components/export/usdz/ThreeUSDZExporter.d.ts +5 -3
  10. package/lib/engine-components/export/usdz/ThreeUSDZExporter.js +124 -117
  11. package/lib/engine-components/export/usdz/ThreeUSDZExporter.js.map +1 -1
  12. package/lib/engine-components/export/usdz/extensions/NodeMaterialConverter.d.ts +10 -0
  13. package/lib/engine-components/export/usdz/extensions/NodeMaterialConverter.js +452 -0
  14. package/lib/engine-components/export/usdz/extensions/NodeMaterialConverter.js.map +1 -0
  15. package/lib/engine-components/postprocessing/Effects/BloomEffect.js +0 -3
  16. package/lib/engine-components/postprocessing/Effects/BloomEffect.js.map +1 -1
  17. package/lib/engine-components/postprocessing/PostProcessingHandler.js +28 -10
  18. package/lib/engine-components/postprocessing/PostProcessingHandler.js.map +1 -1
  19. package/lib/engine-components/postprocessing/utils.d.ts +1 -0
  20. package/lib/engine-components/postprocessing/utils.js.map +1 -1
  21. package/package.json +2 -2
  22. package/src/engine/engine_context.ts +3 -2
  23. package/src/engine-components/export/usdz/ThreeUSDZExporter.ts +155 -142
  24. package/src/engine-components/export/usdz/extensions/NodeMaterialConverter.ts +532 -0
  25. package/src/engine-components/postprocessing/Effects/BloomEffect.ts +0 -2
  26. package/src/engine-components/postprocessing/PostProcessingHandler.ts +36 -11
  27. package/src/engine-components/postprocessing/utils.ts +1 -0
  28. package/dist/needle-engine.bundle-D0XWaCQs.min.js +0 -1575
@@ -0,0 +1,10 @@
1
+ import { Texture, Vector4 } from "three";
2
+ declare type TextureMap = {
3
+ [name: string]: {
4
+ texture: Texture;
5
+ scale?: Vector4;
6
+ };
7
+ };
8
+ type MeshPhysicalNodeMaterial = import("three/src/materials/nodes/MeshPhysicalNodeMaterial.js").default;
9
+ declare function buildNodeMaterial(nodeMaterial: MeshPhysicalNodeMaterial, materialName: string, textures: TextureMap): string;
10
+ export { buildNodeMaterial };
@@ -0,0 +1,452 @@
1
+ import { formatsWithAlphaChannel, makeNameSafeForUSD } from "../ThreeUSDZExporter.js";
2
+ const materialRoot = '</StageRoot/Materials';
3
+ function buildNodeMaterial(nodeMaterial, materialName, textures) {
4
+ const collectedNodeTypes = new Map();
5
+ const getUniqueNodeName = (node) => {
6
+ const type = node["type___needle"];
7
+ const typeMap = collectedNodeTypes.get(type) || new Map();
8
+ collectedNodeTypes.set(type, typeMap);
9
+ if (!typeMap.has(node)) {
10
+ const name = `${type}${typeMap.size ? `_${typeMap.size}` : ""}`;
11
+ typeMap.set(node, name);
12
+ }
13
+ return typeMap.get(node);
14
+ };
15
+ const colorNodesToBeExported = nodeMaterial.colorNode ? getNodesToExport(nodeMaterial.colorNode) : [];
16
+ const colorOutputString = nodeMaterial.colorNode
17
+ ? `color3f inputs:diffuseColor.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(colorNodesToBeExported.values().next().value)}.outputs:out>`
18
+ : "";
19
+ const roughnessNodesToBeExported = nodeMaterial.roughnessNode ? getNodesToExport(nodeMaterial.roughnessNode) : [];
20
+ const roughnessOutputString = nodeMaterial.roughnessNode
21
+ ? `float inputs:roughness.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(roughnessNodesToBeExported.values().next().value)}.outputs:out>`
22
+ : "";
23
+ const normalNodesToBeExported = nodeMaterial.normalNode ? getNodesToExport(nodeMaterial.normalNode) : [];
24
+ const normalOutputString = nodeMaterial.normalNode
25
+ ? `float3 inputs:normal.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(normalNodesToBeExported.values().next().value)}.outputs:out>`
26
+ : "";
27
+ const metallicNodesToBeExported = nodeMaterial.metalnessNode ? getNodesToExport(nodeMaterial.metalnessNode) : [];
28
+ const metallicOutputString = nodeMaterial.metalnessNode
29
+ ? `float inputs:metallic.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(metallicNodesToBeExported.values().next().value)}.outputs:out>`
30
+ : "";
31
+ const combinedSetOfAllNodesToExport = new Set([...colorNodesToBeExported, ...roughnessNodesToBeExported, ...normalNodesToBeExported, ...metallicNodesToBeExported]);
32
+ const shaderOutput = getShadersFromNodes(combinedSetOfAllNodesToExport, materialName, textures, getUniqueNodeName);
33
+ console.debug(shaderOutput);
34
+ return `
35
+
36
+ def Material "${materialName}" ${nodeMaterial.name ? `(
37
+ displayName = "${nodeMaterial.name}"
38
+ )` : ''}
39
+ {
40
+ token outputs:mtlx:surface.connect = ${materialRoot}/${materialName}/N_mtlxsurface.outputs:surface>
41
+
42
+ def Shader "N_mtlxsurface"
43
+ {
44
+ uniform token info:id = "ND_UsdPreviewSurface_surfaceshader"
45
+ ${colorOutputString}
46
+ ${roughnessOutputString}
47
+ ${normalOutputString}
48
+ ${metallicOutputString}
49
+ token outputs:surface
50
+ }
51
+
52
+ ${shaderOutput}
53
+
54
+ }`;
55
+ }
56
+ function getNodesToExport(rootNode) {
57
+ const getNodeType = (node) => {
58
+ if (node.nodeType)
59
+ return node.nodeType;
60
+ switch (node.type) {
61
+ case "TimerNode": return "float";
62
+ case "TextureNode": return undefined;
63
+ case "ConvertNode": return node.convertTo;
64
+ default: return undefined;
65
+ }
66
+ };
67
+ const getSetOfAllNodes = (rootNode) => {
68
+ const setOfAllNodes = new Set();
69
+ const collectNode = (node) => {
70
+ if (!node.isNode || setOfAllNodes.has(node))
71
+ return;
72
+ if (!node["nodeType___needle"]) {
73
+ node["nodeType___needle"] = getNodeType(node);
74
+ }
75
+ if (node.shaderNode) {
76
+ node["type___needle"] = "ShaderCallNodeInternal";
77
+ node["shaderNodeLayoutName___needle"] = node.shaderNode.layout.name.slice(3);
78
+ }
79
+ else {
80
+ node["type___needle"] = node.type;
81
+ }
82
+ setOfAllNodes.add(node);
83
+ for (const key in node) {
84
+ if (node[key]?.isNode) {
85
+ collectNode(node[key]);
86
+ node["nodeType___needle"] ||= node[key]["nodeType___needle"];
87
+ }
88
+ if (Array.isArray(node[key])) {
89
+ node[key].forEach(child => {
90
+ if (child.isNode) {
91
+ collectNode(child);
92
+ node["nodeType___needle"] ||= child["nodeType___needle"];
93
+ }
94
+ });
95
+ }
96
+ }
97
+ };
98
+ collectNode(rootNode);
99
+ return setOfAllNodes;
100
+ };
101
+ const isSelfConversionNode = (node) => {
102
+ if (node.type === "ConvertNode") {
103
+ if (node.convertTo === node.node["nodeType___needle"]) {
104
+ return true;
105
+ }
106
+ else if (node.node.type === "ConstNode") {
107
+ if (node.convertTo === "vec4" && node.node.value.isVector4) {
108
+ return true;
109
+ }
110
+ else if (node.convertTo === "vec3" && node.node.value.isVector3) {
111
+ return true;
112
+ }
113
+ else if (node.convertTo === "vec2" && node.node.value.isVector2) {
114
+ return true;
115
+ }
116
+ else if (node.convertTo === "color" && node.node.value.isColor) {
117
+ return true;
118
+ }
119
+ else if (node.convertTo === "float" && typeof node.node.value === 'number') {
120
+ return true;
121
+ }
122
+ }
123
+ else if (node.node.type == "SplitNode") {
124
+ if (node.convertTo == "float" && node.node.components.length === 1) {
125
+ return true;
126
+ }
127
+ }
128
+ }
129
+ return false;
130
+ };
131
+ const getNextValidNode = (node) => {
132
+ while (nodeShouldNotBeExported(node)) {
133
+ if (!node.node && node.shaderNode) {
134
+ node = node.inputNodes[0];
135
+ }
136
+ else {
137
+ node = node.node ?? node.aNode ?? node.bNode ?? node.cNode;
138
+ }
139
+ }
140
+ return node;
141
+ };
142
+ const nodeShouldNotBeExported = (node) => {
143
+ const ignorableNodeTypes = ["UniformNode", "UniformGroupNode", "ShaderNodeInternal"];
144
+ return !node || isSelfConversionNode(node) || ignorableNodeTypes.includes(node["type___needle"]) || node["type___needle"] === undefined;
145
+ };
146
+ const getParent = (currNode, nodeSet) => {
147
+ for (const node of nodeSet) {
148
+ for (const key in node) {
149
+ if (node[key]?.isNode && node[key] === currNode) {
150
+ return { parent: node, label: key };
151
+ }
152
+ if (Array.isArray(node[key])) {
153
+ const child = node[key].find(childNode => childNode.isNode && childNode === currNode);
154
+ if (child)
155
+ return { parent: node, label: key };
156
+ }
157
+ }
158
+ }
159
+ return null;
160
+ };
161
+ const updateNodeReferences = (node, refKeys) => {
162
+ if (node.shaderNode) {
163
+ node.inputNodes[0] = getNextValidNode(node.inputNodes[0]);
164
+ }
165
+ else if (Array.isArray(node.nodes)) {
166
+ for (let i = 0; i < node.nodes.length; i++) {
167
+ if (node.nodes[i] && nodeShouldNotBeExported(node.nodes[i])) {
168
+ node.nodes[i] = getNextValidNode(node.nodes[i]);
169
+ }
170
+ }
171
+ }
172
+ else {
173
+ refKeys.forEach(key => {
174
+ if (node[key] && nodeShouldNotBeExported(node[key])) {
175
+ node[key] = getNextValidNode(node[key]);
176
+ }
177
+ });
178
+ }
179
+ };
180
+ const setMixNodeMixToFloat = (node) => {
181
+ if (node.type === "MathNode" && node.method === "mix") {
182
+ node.cNode["nodeType___needle"] = "float";
183
+ if (node.cNode.type === "ConvertNode") {
184
+ node.cNode.convertTo = "float";
185
+ }
186
+ }
187
+ };
188
+ const setConstNodeTypeToParentType = (node, parentResponse) => {
189
+ if (!(parentResponse.label === 'cNode' && parentResponse.parent.type === "MathNode" && parentResponse.parent.method === "mix")) {
190
+ if (parentResponse.parent.type === "JoinNode") {
191
+ node["nodeType___needle"] = "float";
192
+ }
193
+ else {
194
+ node["nodeType___needle"] = parentResponse.parent["nodeType___needle"];
195
+ }
196
+ }
197
+ };
198
+ const isConvertVector4ToColorNode = (node) => (node?.type === "ConvertNode" && node["nodeType___needle"] === "color" && node.node["nodeType___needle"] === "vec4");
199
+ const createVec3ToColorConversionNode = (node, allNodes) => {
200
+ node.convertTo = "vec3";
201
+ node["nodeType___needle"] = "vec3";
202
+ const newNode = {
203
+ type: "ConvertNode",
204
+ convertTo: "color",
205
+ node: node,
206
+ isNode: true,
207
+ nodeType___needle: "color",
208
+ type___needle: "ConvertNode"
209
+ };
210
+ const parentInfo = getParent(node, allNodes);
211
+ if (parentInfo?.parent) {
212
+ parentInfo.parent[parentInfo.label] = newNode;
213
+ }
214
+ return newNode;
215
+ };
216
+ const isConvertFromTextureNode = (node) => (node?.type === "ConvertNode" && node.node.type === "TextureNode" && node["nodeType___needle"] !== node.node["nodeType___needle"]);
217
+ const pruneNodes = (allNodes) => {
218
+ const nodesToBeExported = new Set();
219
+ for (let node of allNodes) {
220
+ if (nodeShouldNotBeExported(node))
221
+ continue;
222
+ // Math mix nodes take a mix input that should always be a float, the typing gets messed up here because
223
+ // the other inputs that are being mixed can be anything and if we have a convert or a const that goes
224
+ // into the mix input, it gets set as whatever the output of the mix should be, not float. Here we make
225
+ // sure it will be float
226
+ setMixNodeMixToFloat(node);
227
+ if (node.type == "SplitNode") {
228
+ const parentResponse = getParent(node, allNodes);
229
+ if (node.components.length === 1) {
230
+ node["nodeType___needle"] = "float";
231
+ }
232
+ else if (parentResponse) {
233
+ // TODO: this may not be sufficient and it may be better to always count the component lengths
234
+ node["nodeType___needle"] = parentResponse.parent["nodeType___needle"];
235
+ }
236
+ else
237
+ throw new Error("SplitNode without parent found, this should not happen");
238
+ }
239
+ // Here we check child nodes to update the connections if they will be ignored later
240
+ updateNodeReferences(node, ["node", "aNode", "bNode", "cNode"]);
241
+ // Const nodes don't always have a type and sometimes they need to be converted from a value of 0 -> [0, 0, 0]
242
+ // this function does that conversion
243
+ if (node.type == "ConstNode" && node.nodeType == null) {
244
+ setConstNodeTypeToParentType(node, getParent(node, allNodes));
245
+ }
246
+ if (isConvertVector4ToColorNode(node)) {
247
+ nodesToBeExported.add(createVec3ToColorConversionNode(node, allNodes));
248
+ }
249
+ // We want Texture nodes to export the type they need, rather than something else and then convert
250
+ // here if we have a convert above a Texture that we missed on the first pass because there was
251
+ // some other node in between to prune, set the type on the Texture correctly and kill the convert
252
+ if (isConvertFromTextureNode(node)) {
253
+ node.node["nodeType___needle"] = node.convertTo;
254
+ const parentInfo = getParent(node, allNodes);
255
+ if (parentInfo?.parent) {
256
+ parentInfo.parent[parentInfo.label] = node.node;
257
+ }
258
+ node = node.node;
259
+ }
260
+ nodesToBeExported.add(node);
261
+ }
262
+ return nodesToBeExported;
263
+ };
264
+ const setOfAllNodes = getSetOfAllNodes(rootNode);
265
+ const prunedNodes = pruneNodes(setOfAllNodes);
266
+ return prunedNodes;
267
+ }
268
+ function getConstValueString(value, type) {
269
+ switch (type) {
270
+ case "float4":
271
+ return value.isVector4
272
+ ? `(${value.x}, ${value.y}, ${value.z}, ${value.w})`
273
+ : `(${value}, ${value}, ${value}, ${value})`;
274
+ case "float3":
275
+ return value.isVector3
276
+ ? `(${value.x}, ${value.y}, ${value.z})`
277
+ : `(${value}, ${value}, ${value})`;
278
+ case "float2":
279
+ return value.isVector2
280
+ ? `(${value.x}, ${value.y})`
281
+ : `(${value}, ${value})`;
282
+ case "color3f":
283
+ return value.isColor
284
+ ? `(${value.r}, ${value.g}, ${value.b})`
285
+ : `(${value}, ${value}, ${value})`;
286
+ default:
287
+ return (value.isVector4 || value.isVector3 || value.isVector2)
288
+ ? `${value.x}`
289
+ : value.isColor
290
+ ? `${value.r}`
291
+ : `${value}`;
292
+ }
293
+ }
294
+ function TSLNodeToUsdShadeString(node, materialName, getUniqueNodeName, textures) {
295
+ const pad = ' ';
296
+ const getType = (nodeType) => {
297
+ const types = {
298
+ float: "float",
299
+ vec2: "vector2",
300
+ vec3: "vector3",
301
+ vec4: "vector4",
302
+ color: "color3"
303
+ };
304
+ return types[nodeType] || "float";
305
+ };
306
+ const getUsdType = (nodeType) => {
307
+ const usdTypes = {
308
+ float: "float",
309
+ vec2: "float2",
310
+ vec3: "float3",
311
+ vec4: "float4",
312
+ color: "color3f"
313
+ };
314
+ return usdTypes[nodeType] || "float";
315
+ };
316
+ const type = node["type___needle"];
317
+ const ndType = node["nodeType___needle"];
318
+ const mtlxNdType = getType(ndType);
319
+ let usdNdType = getUsdType(ndType);
320
+ let usdShadeNodeName = "";
321
+ const inputs = new Array();
322
+ switch (type) {
323
+ case "UniformGroupNode":
324
+ case "UniformNode":
325
+ // break out of node loop
326
+ return "";
327
+ case "TimerNode":
328
+ usdShadeNodeName = "time_float";
329
+ break;
330
+ case "ConstNode":
331
+ usdShadeNodeName = "constant_" + mtlxNdType;
332
+ inputs.push(`${usdNdType} inputs:value = ${getConstValueString(node.value, usdNdType)}`);
333
+ break;
334
+ case "JoinNode":
335
+ usdShadeNodeName = "combine" + node.nodes.length + "_" + mtlxNdType;
336
+ let i = 1;
337
+ for (const childNode of node.nodes) {
338
+ inputs.push(`float inputs:in${i++}.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(childNode)}.outputs:out>`);
339
+ }
340
+ break;
341
+ case "ConvertNode":
342
+ const inputType = getType(node.node["nodeType___needle"]);
343
+ usdShadeNodeName = "convert_" + inputType + "_" + mtlxNdType;
344
+ if (node.node)
345
+ inputs.push(`${getUsdType(node.node["nodeType___needle"])} inputs:in.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(node.node)}.outputs:out>`);
346
+ break;
347
+ case "MathNode":
348
+ usdShadeNodeName = node.method + "_" + mtlxNdType;
349
+ if (node.aNode && !node.bNode)
350
+ inputs.push(`${getUsdType(node.aNode["nodeType___needle"])} inputs:in.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(node.aNode)}.outputs:out>`);
351
+ if (node.aNode && node.bNode && !node.cNode) {
352
+ inputs.push(`${getUsdType(node.aNode["nodeType___needle"])} inputs:in1.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(node.aNode)}.outputs:out>`);
353
+ inputs.push(`${getUsdType(node.bNode["nodeType___needle"])} inputs:in2.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(node.bNode)}.outputs:out>`);
354
+ }
355
+ if (node.aNode && node.bNode && node.cNode && node.method == "clamp") {
356
+ inputs.push(`${getUsdType(node.aNode["nodeType___needle"])} inputs:in.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(node.aNode)}.outputs:out>`);
357
+ inputs.push(`${getUsdType(node.bNode["nodeType___needle"])} inputs:low.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(node.bNode)}.outputs:out>`);
358
+ inputs.push(`${getUsdType(node.cNode["nodeType___needle"])} inputs:high.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(node.cNode)}.outputs:out>`);
359
+ }
360
+ if (node.aNode && node.bNode && node.cNode && node.method == "mix") {
361
+ inputs.push(`${getUsdType(node.aNode["nodeType___needle"])} inputs:fg.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(node.bNode)}.outputs:out>`);
362
+ inputs.push(`${getUsdType(node.bNode["nodeType___needle"])} inputs:bg.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(node.aNode)}.outputs:out>`);
363
+ inputs.push(`float inputs:mix.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(node.cNode)}.outputs:out>`);
364
+ }
365
+ break;
366
+ case "OperatorNode":
367
+ let opName = "";
368
+ switch (node.op) {
369
+ case "*":
370
+ opName = "multiply";
371
+ break;
372
+ case "/":
373
+ opName = "divide";
374
+ break;
375
+ case "+":
376
+ opName = "add";
377
+ break;
378
+ case "-":
379
+ opName = "subtract";
380
+ break;
381
+ }
382
+ usdShadeNodeName = opName + "_" + mtlxNdType;
383
+ if (node.aNode && !node.bNode)
384
+ inputs.push(`${getUsdType(node.aNode["nodeType___needle"])} inputs:in.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(node.aNode)}.outputs:out>`);
385
+ if (node.aNode && node.bNode) {
386
+ const aNodeType = getUsdType(node.aNode["nodeType___needle"]);
387
+ const bNodeType = getUsdType(node.bNode["nodeType___needle"]);
388
+ // todo: make this more generic / support all combinations
389
+ if (aNodeType === 'color3f' && bNodeType === 'float' || bNodeType === 'float' && bNodeType === 'color3f') {
390
+ usdShadeNodeName = opName + "_color3FA";
391
+ }
392
+ inputs.push(`${aNodeType} inputs:in1.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(node.aNode)}.outputs:out>`);
393
+ inputs.push(`${bNodeType} inputs:in2.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(node.bNode)}.outputs:out>`);
394
+ }
395
+ break;
396
+ case "TextureNode":
397
+ if (node.uvNode) {
398
+ usdShadeNodeName = "tiledimage_" + mtlxNdType;
399
+ inputs.push(`float2 inputs:texcoord.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(node.uvNode)}.outputs:out>`);
400
+ }
401
+ else {
402
+ usdShadeNodeName = "image_" + mtlxNdType;
403
+ }
404
+ const texture = node._value;
405
+ const isRGBA = formatsWithAlphaChannel.includes(texture.format);
406
+ const textureName = texName(texture);
407
+ inputs.push(`asset inputs:file = @textures/${textureName}.${isRGBA ? 'png' : 'jpg'}@`);
408
+ textures[textureName] = { texture, scale: undefined };
409
+ break;
410
+ case "NormalMapNode":
411
+ usdNdType = "float3";
412
+ usdShadeNodeName = "normalmap";
413
+ inputs.push(`${usdNdType} inputs:in.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(node.node)}.outputs:out>`);
414
+ break;
415
+ case "AttributeNode":
416
+ usdShadeNodeName = "geompropvalue_" + mtlxNdType;
417
+ inputs.push(`string inputs:geomprop = "st"`);
418
+ break;
419
+ case "ShaderCallNodeInternal":
420
+ usdShadeNodeName = node["shaderNodeLayoutName___needle"] + "_" + mtlxNdType;
421
+ inputs.push(`${usdNdType} inputs:in.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(node.inputNodes[0])}.outputs:out>`);
422
+ break;
423
+ case "SplitNode":
424
+ usdShadeNodeName = "swizzle_" + getType(node.node["nodeType___needle"]) + "_" + mtlxNdType;
425
+ inputs.push(`${getUsdType(node.node["nodeType___needle"])} inputs:in.connect = ${materialRoot}/${materialName}/${getUniqueNodeName(node.node)}.outputs:out>`);
426
+ inputs.push(`string inputs:channels = "${node.components}"`);
427
+ break;
428
+ }
429
+ // todo: better way to pad here for sure...
430
+ return `
431
+ ${pad}def Shader "${getUniqueNodeName(node)}"
432
+ ${pad}{
433
+ ${pad}uniform token info:id = "ND_${usdShadeNodeName}"
434
+ ${pad}${usdNdType} outputs:out
435
+ ${pad}${inputs.length > 0 ? inputs.join("\n ") : ""}
436
+ ${pad}}
437
+ `;
438
+ }
439
+ function getShadersFromNodes(nodes, materialName, textures, getUniqueNodeName) {
440
+ let shaderOutput = "";
441
+ for (const node of nodes) {
442
+ shaderOutput += TSLNodeToUsdShadeString(node, materialName, getUniqueNodeName, textures);
443
+ }
444
+ return shaderOutput;
445
+ }
446
+ function texName(tex) {
447
+ // If we have a source, we only want to use the source's id, not the texture's id
448
+ // to avoid exporting the same underlying data multiple times.
449
+ return makeNameSafeForUSD(tex.name) + '_' + (tex.source?.id ?? tex.id);
450
+ }
451
+ export { buildNodeMaterial };
452
+ //# sourceMappingURL=NodeMaterialConverter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeMaterialConverter.js","sourceRoot":"","sources":["../../../../../src/engine-components/export/usdz/extensions/NodeMaterialConverter.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { EffectAttribute } from "postprocessing";
8
7
  import { MathUtils } from "three";
9
8
  import { MODULES } from "../../../engine/engine_modules.js";
10
9
  import { serializable } from "../../../engine/engine_serialization.js";
@@ -84,8 +83,6 @@ export class BloomEffect extends PostProcessingEffect {
84
83
  radius: 0.85,
85
84
  intensity: this.intensity.value,
86
85
  });
87
- // @ts-ignore Well... it's protected but bloom needs this :(
88
- bloom.setAttributes(EffectAttribute.CONVOLUTION);
89
86
  }
90
87
  this.intensity.onValueChanged = newValue => {
91
88
  bloom.intensity = newValue;
@@ -1 +1 @@
1
- {"version":3,"file":"BloomEffect.js","sourceRoot":"","sources":["../../../../src/engine-components/postprocessing/Effects/BloomEffect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BloomEffect.js","sourceRoot":"","sources":["../../../../src/engine-components/postprocessing/Effects/BloomEffect.ts"],"names":[],"mappings":"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"}
@@ -138,6 +138,7 @@ export class PostProcessingHandler {
138
138
  for (const effect of res) {
139
139
  this._effects.push({
140
140
  effect,
141
+ typeName: component.typeName,
141
142
  priority: component.order
142
143
  });
143
144
  }
@@ -145,6 +146,7 @@ export class PostProcessingHandler {
145
146
  else {
146
147
  this._effects.push({
147
148
  effect: res,
149
+ typeName: component.typeName,
148
150
  priority: component.order
149
151
  });
150
152
  }
@@ -203,7 +205,11 @@ export class PostProcessingHandler {
203
205
  const tonemapping = new MODULES.POSTPROCESSING.MODULE.ToneMappingEffect();
204
206
  tonemapping.name = `ToneMapping (${renderer.toneMapping})`;
205
207
  tonemapping.mode = threeToneMappingToEffectMode(renderer.toneMapping);
206
- this._effects.push({ effect: tonemapping, priority: PostProcessingEffectOrder.ToneMapping });
208
+ this._effects.push({
209
+ typeName: "ToneMapping",
210
+ effect: tonemapping,
211
+ priority: PostProcessingEffectOrder.ToneMapping
212
+ });
207
213
  }
208
214
  }
209
215
  // create composer and set active on context
@@ -308,7 +314,8 @@ export class PostProcessingHandler {
308
314
  }
309
315
  const effectsToMerge = [];
310
316
  let hasConvolutionEffectInArray = false;
311
- for (const entry of this._effects) {
317
+ for (let i = 0; i < this._effects.length; i++) {
318
+ const entry = this._effects[i];
312
319
  const ef = entry.effect;
313
320
  if (ef instanceof MODULES.POSTPROCESSING.MODULE.SMAAEffect) {
314
321
  this._hasSmaaEffect = true;
@@ -316,7 +323,7 @@ export class PostProcessingHandler {
316
323
  else if (ef instanceof MODULES.POSTPROCESSING.MODULE.NormalPass) {
317
324
  this._anyPassHasNormal = true;
318
325
  }
319
- // There can be only one tonemapping effect in the scene, so we can skip all others
326
+ // There can be only one tonemapping effect in the scene, so we skip all others
320
327
  if (ef instanceof MODULES.POSTPROCESSING.MODULE.ToneMappingEffect && activeTonemappingEffect !== ef) {
321
328
  // If we already have a tonemapping effect, we can skip this one
322
329
  continue;
@@ -324,9 +331,9 @@ export class PostProcessingHandler {
324
331
  // We can also not merge multiple effects of the same type in one pass
325
332
  // So we first need to create a new pass with whatever effects we have so far
326
333
  // TODO: this seems to work fine for some effects (like ColorAdjustments) and only caused issues with multiple Tonemapping effects so far which is handled above
327
- // const constructor = ef.constructor as Constructor<Effect | Pass>;
328
- // if(effectsToMerge.find(e => e.constructor === constructor)) {
329
- // // this.createPassForMergeableEffects(effectsToMerge, composer, cam, scene);
334
+ // const constructor = ef.constructor;
335
+ // if (effectsToMerge.find(e => e.constructor === constructor)) {
336
+ // this.createPassForMergeableEffects(effectsToMerge, composer, cam, scene);
330
337
  // }
331
338
  if (ef instanceof MODULES.POSTPROCESSING.MODULE.Effect) {
332
339
  const attributes = ef.getAttributes();
@@ -362,18 +369,29 @@ export class PostProcessingHandler {
362
369
  }
363
370
  catch (e) {
364
371
  console.error("Error while applying postprocessing effects", e);
372
+ composer.passes.forEach(p => p.dispose());
365
373
  composer.removeAllPasses();
366
374
  }
367
375
  // The last pass is the one that renders to the screen, so we need to set the gamma correction for it (and enable it for all others)
368
- for (let i = 0; i < composer.passes.length; i++) {
376
+ let foundEnabled = false;
377
+ for (let i = composer.passes.length - 1; i >= 0; i--) {
369
378
  const pass = composer.passes[i];
370
- const isLast = i === composer.passes.length - 1;
379
+ let gammaCorrect = false;
380
+ let renderToScreen = false;
381
+ if (pass.enabled) {
382
+ if (!foundEnabled) {
383
+ gammaCorrect = true;
384
+ renderToScreen = true;
385
+ }
386
+ foundEnabled = true;
387
+ }
388
+ pass.renderToScreen = renderToScreen;
371
389
  if (pass?.configuration !== undefined) {
372
- pass.configuration.gammaCorrection = isLast;
390
+ pass.configuration.gammaCorrection = gammaCorrect;
373
391
  }
374
392
  else if ("autosetGamma" in pass) {
375
393
  // Some effects have a autosetGamma property that we can use to set the gamma correction
376
- pass.autosetGamma = isLast;
394
+ pass.autosetGamma = gammaCorrect;
377
395
  }
378
396
  this._anyPassHasDepth ||= pass.needsDepthTexture;
379
397
  }