import { Material } from "./Material";
import { PBRMaterial, type PBRMaterialOptions } from "./PBRMaterial";
export type MaterialPresetKind = "unlit" | "pbr" | string;
export type PhysicalMaterialPresetName = "gold" | "silver" | "copper" | "iron" | "aluminum" | "plastic" | "rubber" | "wood" | "concrete" | "fabric" | "glass" | "water" | "skin" | "eye" | "hair" | "terrain" | "toon";
export type MaterialPresetOptions = Readonly<Record<string, unknown>>;
export type MaterialFactory<TOptions extends MaterialPresetOptions = MaterialPresetOptions> = (options?: TOptions) => Material;
export interface MaterialPresetDescriptor<TOptions extends MaterialPresetOptions = MaterialPresetOptions> {
    readonly kind: MaterialPresetKind;
    readonly description?: string;
    readonly create: MaterialFactory<TOptions>;
}
export interface PhysicalMaterialPresetDescriptor {
    readonly name: PhysicalMaterialPresetName;
    readonly category: "metal" | "dielectric" | "fabric" | "transmission" | "subsurface" | "anisotropic" | "terrain" | "npr";
    readonly source: "old-branch-material-presets";
    readonly options: PBRMaterialOptions;
    readonly knownLimits: readonly string[];
}
export declare class MaterialPresetRegistry {
    private readonly presets;
    constructor(descriptors?: readonly MaterialPresetDescriptor[]);
    register<TOptions extends MaterialPresetOptions>(descriptor: MaterialPresetDescriptor<TOptions>): void;
    create<TOptions extends MaterialPresetOptions = MaterialPresetOptions>(kind: MaterialPresetKind, options?: TOptions): Material;
    has(kind: MaterialPresetKind): boolean;
    list(): readonly MaterialPresetDescriptor[];
}
export declare function defaultMaterialPresets(): readonly MaterialPresetDescriptor[];
export declare function listPhysicalMaterialPresets(): readonly PhysicalMaterialPresetDescriptor[];
export declare function physicalMaterialPresetDescriptor(name: PhysicalMaterialPresetName): PhysicalMaterialPresetDescriptor;
export declare function createPhysicalMaterialPreset(name: PhysicalMaterialPresetName, overrides?: Partial<PBRMaterialOptions>): PBRMaterial;
//# sourceMappingURL=MaterialPresets.d.ts.map