@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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@needle-tools/materialx",
3
- "version": "1.3.2",
3
+ "version": "1.3.3",
4
4
  "type": "module",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -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} materialNodeName
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, materialNodeName, loaders, options, context) {
208
+ export async function createMaterialXMaterial(mtlx, materialNodeNameOrIndex, loaders, options, context) {
209
209
  try {
210
- if (debug) console.log(`Creating MaterialX material: ${materialNodeName}`);
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_${materialNodeName}`;
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 == materialNodeName) {
240
- materialNodeName = name;
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 (${materialNodeName})`);
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_${materialNodeName}`;
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: materialNodeName,
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 (${materialNodeName}):`, error);
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_${materialNodeName}`;
345
+ fallbackMaterial.name = `MaterialX_Error_${materialNodeNameOrIndex}`;
339
346
  return fallbackMaterial;
340
347
  }
341
348
  }