configureNormalLayer
Configure normal map properties for 3D materials in Spline scenes by setting intensity, tiling, and applying normal map images to enhance surface detail and texture appearance.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| sceneId | Yes | Scene ID | |
| materialId | Yes | Material ID | |
| layerId | Yes | Layer ID | |
| normalMapUrl | Yes | URL to normal map image | |
| intensity | No | Normal map intensity | |
| tiling | No | Normal map tiling |
Implementation Reference
- The asynchronous handler function that implements the core logic of the 'configureNormalLayer' tool. It constructs layer parameters from the input (normalMapUrl, intensity, tiling) and sends a PUT request to the Spline API to update the specified material layer.async ({ sceneId, materialId, layerId, normalMapUrl, intensity, tiling }) => { try { const layerParams = { normalMapUrl, ...(intensity !== undefined && { intensity }), ...(tiling && { tiling }), }; await apiClient.request('PUT', `/scenes/${sceneId}/materials/${materialId}/layers/${layerId}`, { params: layerParams }); return { content: [ { type: 'text', text: `Normal layer ${layerId} configured successfully` } ] }; } catch (error) { return { content: [ { type: 'text', text: `Error configuring normal layer: ${error.message}` } ], isError: true }; } }
- Zod-based input schema defining the parameters for the 'configureNormalLayer' tool: sceneId, materialId, layerId (required strings), normalMapUrl (URL), intensity (optional number default 1), and tiling (optional object with x/y).sceneId: z.string().min(1).describe('Scene ID'), materialId: z.string().min(1).describe('Material ID'), layerId: z.string().min(1).describe('Layer ID'), normalMapUrl: z.string().url().describe('URL to normal map image'), intensity: z.number().min(0).optional().default(1).describe('Normal map intensity'), tiling: z.object({ x: z.number().min(0).default(1).describe('X tiling'), y: z.number().min(0).default(1).describe('Y tiling'), }).optional().describe('Normal map tiling'), },
- src/tools/advanced-material-tools.js:300-345 (registration)The complete registration of the 'configureNormalLayer' tool via server.tool(), including schema definition and inline handler function, within the registerAdvancedMaterialTools module.server.tool( 'configureNormalLayer', { sceneId: z.string().min(1).describe('Scene ID'), materialId: z.string().min(1).describe('Material ID'), layerId: z.string().min(1).describe('Layer ID'), normalMapUrl: z.string().url().describe('URL to normal map image'), intensity: z.number().min(0).optional().default(1).describe('Normal map intensity'), tiling: z.object({ x: z.number().min(0).default(1).describe('X tiling'), y: z.number().min(0).default(1).describe('Y tiling'), }).optional().describe('Normal map tiling'), }, async ({ sceneId, materialId, layerId, normalMapUrl, intensity, tiling }) => { try { const layerParams = { normalMapUrl, ...(intensity !== undefined && { intensity }), ...(tiling && { tiling }), }; await apiClient.request('PUT', `/scenes/${sceneId}/materials/${materialId}/layers/${layerId}`, { params: layerParams }); return { content: [ { type: 'text', text: `Normal layer ${layerId} configured successfully` } ] }; } catch (error) { return { content: [ { type: 'text', text: `Error configuring normal layer: ${error.message}` } ], isError: true }; } } );
- src/index.js:97-97 (registration)Top-level registration call in the main server setup that invokes registerAdvancedMaterialTools(server), thereby registering the 'configureNormalLayer' tool along with other advanced material tools.registerAdvancedMaterialTools(server);
- src/index.js:22-22 (registration)Import statement for the registerAdvancedMaterialTools function, which contains the 'configureNormalLayer' tool registration.import { registerAdvancedMaterialTools } from './tools/advanced-material-tools.js';