import * as THREE from 'three';
import { AtlasMap } from './atlas';
import { LightProbeSettings } from './lightProbe';
export interface Workbench {
    aoMode: boolean;
    aoDistance: number;
    emissiveMultiplier: number;
    bounceMultiplier: number;
    lightScene: THREE.Scene;
    atlasMap: AtlasMap;
    irradiance: THREE.Texture;
    irradianceData: Float32Array;
    settings: LightProbeSettings;
}
export declare const LIGHTMAP_IGNORE_FLAG: unique symbol;
export declare const LIGHTMAP_READONLY_FLAG: unique symbol;
export declare function objectHasFlag(object: THREE.Object3D, flag: symbol): boolean;
export declare let traversalStateIsReadOnly: boolean;
export declare function traverseSceneItems(root: THREE.Object3D, ignoreReadOnly?: boolean, onIgnored?: (object: THREE.Object3D) => void): Generator<THREE.Object3D, void, unknown>;
export declare type SamplerSettings = Partial<LightProbeSettings>;
export interface WorkbenchSettings {
    ao?: boolean;
    aoDistance?: number;
    emissiveMultiplier?: number;
    bounceMultiplier?: number;
    lightMapSize?: number | [number, number];
    textureFilter?: THREE.TextureFilter;
    texelsPerUnit?: number;
    samplerSettings?: SamplerSettings;
}
export declare function initializeWorkbench(scene: THREE.Scene, props: WorkbenchSettings, requestWork: () => Promise<THREE.WebGLRenderer>): Promise<{
    aoMode: boolean;
    aoDistance: number;
    emissiveMultiplier: number;
    bounceMultiplier: number;
    lightScene: THREE.Scene;
    atlasMap: {
        width: number;
        height: number;
        texture: THREE.DataTexture;
        data: Float32Array;
        items: {
            faceCount: number;
            originalMesh: THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>;
            originalBuffer: THREE.BufferGeometry;
        }[];
    };
    irradiance: THREE.Texture;
    irradianceData: Float32Array;
    settings: {
        targetSize: number;
        offset: number;
        near: number;
        far: number;
    } | {
        targetSize: number;
        offset: number;
        near: number;
        far: number;
    };
}>;
