import { type FBXNode } from "../types/fbxTypes.js"; import { type FBXObjectMap } from "./connections.js"; import { type FBXPropertyTemplate, type FBXPropertyTemplateMap, type FBXUserPropertyValue } from "./propertyTemplates.js"; import { type FBXMaterialModel } from "./materialModel.js"; /** Parsed material data */ export interface FBXMaterialData { id: number; name: string; type: "Lambert" | "Phong"; properties: FBXMaterialProperties; textures: FBXTextureRef[]; /** Unified classic + PBR parameter model resolved from whichever shader flavour the file uses */ model: FBXMaterialModel; /** User-defined properties */ userProperties?: Record; } export interface FBXMaterialProperties { diffuseColor?: [number, number, number]; diffuseFactor?: number; ambientColor?: [number, number, number]; ambientFactor?: number; specularColor?: [number, number, number]; specularFactor?: number; shininess?: number; emissiveColor?: [number, number, number]; emissiveFactor?: number; opacity?: number; transparencyFactor?: number; } export interface FBXTextureRef { /** Which material property this texture is connected to */ propertyName: string; /** Absolute file path from the FBX */ fileName: string; /** Relative file path from the FBX */ relativeFileName: string; /** Texture node ID */ id: number; /** Embedded texture data (from Video node Content), if available */ embeddedData: Uint8Array | null; /** UV translation [u, v] */ uvTranslation?: [number, number]; /** UV scaling [u, v] */ uvScaling?: [number, number]; /** UV rotation in degrees */ uvRotation?: number; /** Which UV set index this texture uses */ uvSetIndex?: number; /** Which named UV set this texture uses */ uvSetName?: string; /** WrapModeU: 0 = repeat, 1 = clamp */ wrapU?: number; /** WrapModeV: 0 = repeat, 1 = clamp */ wrapV?: number; /** Set when the texture came from a LayeredTexture (only the first layer is used) */ layeredTextureId?: number; } /** * Extract material data from an FBX Material node. */ export declare function extractMaterial(materialNode: FBXNode, materialId: number, objectMap: FBXObjectMap, templates?: FBXPropertyTemplateMap): FBXMaterialData; export declare function extractTextureRef(id: number, node: FBXNode, propertyName: string | undefined, objectMap: FBXObjectMap, template?: FBXPropertyTemplate): FBXTextureRef;