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
| 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';