@needle-tools/materialx 1.3.2 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -70,7 +70,7 @@ export declare function useNeedleMaterialX(
|
|
|
70
70
|
|
|
71
71
|
export declare function createMaterialXMaterial(
|
|
72
72
|
mtlx: string,
|
|
73
|
-
materialNodeName: string,
|
|
73
|
+
materialNodeName: string | number,
|
|
74
74
|
loaders: Callbacks,
|
|
75
75
|
options?: MaterialXLoaderOptions,
|
|
76
76
|
context?: MaterialXContext
|
|
@@ -199,22 +199,22 @@ async function load(mtlx) {
|
|
|
199
199
|
|
|
200
200
|
/**
|
|
201
201
|
* @param {string} mtlx
|
|
202
|
-
* @param {string}
|
|
202
|
+
* @param {string | number} materialNodeNameOrIndex
|
|
203
203
|
* @param {import('../materialx.helper.js').Callbacks} loaders
|
|
204
204
|
* @param {MaterialXLoaderOptions} [options]
|
|
205
205
|
* @param {import('../materialx.js').MaterialXContext} [context]
|
|
206
206
|
* @returns {Promise<Material>}
|
|
207
207
|
*/
|
|
208
|
-
export async function createMaterialXMaterial(mtlx,
|
|
208
|
+
export async function createMaterialXMaterial(mtlx, materialNodeNameOrIndex, loaders, options, context) {
|
|
209
209
|
try {
|
|
210
|
-
if (debug) console.log(`Creating MaterialX material: ${
|
|
210
|
+
if (debug) console.log(`Creating MaterialX material: ${materialNodeNameOrIndex}`);
|
|
211
211
|
|
|
212
212
|
const doc = await load(mtlx);
|
|
213
213
|
|
|
214
214
|
if (!state.materialXModule || !state.materialXGenerator || !state.materialXGenContext) {
|
|
215
215
|
console.warn("[MaterialX] WASM module not ready, returning fallback material");
|
|
216
216
|
const fallbackMaterial = new MeshStandardMaterial();
|
|
217
|
-
fallbackMaterial.name = `MaterialX_Fallback_${
|
|
217
|
+
fallbackMaterial.name = `MaterialX_Fallback_${materialNodeNameOrIndex}`;
|
|
218
218
|
return fallbackMaterial;
|
|
219
219
|
}
|
|
220
220
|
|
|
@@ -236,8 +236,8 @@ export async function createMaterialXMaterial(mtlx, materialNodeName, loaders, o
|
|
|
236
236
|
if (debug) console.log(`[MaterialX] Scan material[${i}]: ${name}`);
|
|
237
237
|
|
|
238
238
|
// Find the matching material
|
|
239
|
-
if (materialNodes.length === 1 || name ==
|
|
240
|
-
|
|
239
|
+
if (materialNodes.length === 1 || name == materialNodeNameOrIndex || i === materialNodeNameOrIndex) {
|
|
240
|
+
materialNodeNameOrIndex = name;
|
|
241
241
|
renderableElement = materialNode;
|
|
242
242
|
foundRenderable = true;
|
|
243
243
|
if (debug) console.log(`[MaterialX] Use material node: '${name}'`);
|
|
@@ -294,10 +294,17 @@ export async function createMaterialXMaterial(mtlx, materialNodeName, loaders, o
|
|
|
294
294
|
*/
|
|
295
295
|
|
|
296
296
|
if (!renderableElement) {
|
|
297
|
-
console.warn(`[MaterialX] No renderable element found in MaterialX document (${
|
|
297
|
+
console.warn(`[MaterialX] No renderable element found in MaterialX document (${materialNodeNameOrIndex}) → Please provide a name or index. Options: ${materialNodes.map(n => n.getNamePath()).join(", ")}`);
|
|
298
298
|
const fallbackMaterial = new MeshStandardMaterial();
|
|
299
299
|
fallbackMaterial.color.set(0xff00ff);
|
|
300
|
-
fallbackMaterial.name = `MaterialX_NoRenderable_${
|
|
300
|
+
fallbackMaterial.name = `MaterialX_NoRenderable_${materialNodeNameOrIndex}`;
|
|
301
|
+
return fallbackMaterial;
|
|
302
|
+
}
|
|
303
|
+
else if(typeof materialNodeNameOrIndex === "number") {
|
|
304
|
+
console.warn(`[MaterialX] Material node not found by index (${materialNodeNameOrIndex}), using first renderable element: ${renderableElement.getNamePath()}`);
|
|
305
|
+
const fallbackMaterial = new MeshStandardMaterial();
|
|
306
|
+
fallbackMaterial.color.set(0xff00ff);
|
|
307
|
+
fallbackMaterial.name = `MaterialX_NodeNotFound_${materialNodeNameOrIndex}`;
|
|
301
308
|
return fallbackMaterial;
|
|
302
309
|
}
|
|
303
310
|
|
|
@@ -314,7 +321,7 @@ export async function createMaterialXMaterial(mtlx, materialNodeName, loaders, o
|
|
|
314
321
|
const shader = state.materialXGenerator.generate(elementName, renderableElement, state.materialXGenContext);
|
|
315
322
|
|
|
316
323
|
const shaderMaterial = new MaterialXMaterial({
|
|
317
|
-
name:
|
|
324
|
+
name: materialNodeNameOrIndex,
|
|
318
325
|
shaderName: null, //shaderInfo?.originalName || shaderInfo?.name || null,
|
|
319
326
|
shader,
|
|
320
327
|
context: context || {},
|
|
@@ -331,11 +338,11 @@ export async function createMaterialXMaterial(mtlx, materialNodeName, loaders, o
|
|
|
331
338
|
|
|
332
339
|
} catch (error) {
|
|
333
340
|
// This is a wasm error (an int) that we need to resolve
|
|
334
|
-
console.error(`[MaterialX] Error creating MaterialX material (${
|
|
341
|
+
console.error(`[MaterialX] Error creating MaterialX material (${materialNodeNameOrIndex}):`, error);
|
|
335
342
|
// Return a fallback material with stored MaterialX data
|
|
336
343
|
const fallbackMaterial = new MeshStandardMaterial();
|
|
337
344
|
fallbackMaterial.color.set(0xff00ff);
|
|
338
|
-
fallbackMaterial.name = `MaterialX_Error_${
|
|
345
|
+
fallbackMaterial.name = `MaterialX_Error_${materialNodeNameOrIndex}`;
|
|
339
346
|
return fallbackMaterial;
|
|
340
347
|
}
|
|
341
348
|
}
|