import type { LinearHdrEnvironmentMapSource } from "../../EnvironmentMapResources";
export type PMREMCubeFace = "px" | "nx" | "py" | "ny" | "pz" | "nz";
export interface PMREMLevel {
    readonly mip: number;
    readonly roughness: number;
    readonly faceSize: number;
}
export interface CubemapPMREMFace {
    readonly face: PMREMCubeFace;
    readonly width: number;
    readonly height: number;
    readonly data: Uint16Array;
}
export interface CubemapPMREMLevel extends PMREMLevel {
    readonly faces: readonly CubemapPMREMFace[];
}
export interface CubemapPMREMResources {
    readonly faceSize: number;
    readonly mipCount: number;
    readonly levels: readonly CubemapPMREMLevel[];
    readonly diagnostics: {
        readonly faceCount: 6;
        readonly sourceProjection: "equirectangular-to-cubemap";
        readonly filterModel: "ggx-importance-sampled-cubemap-prefilter";
        readonly shaderSampling: "webgl2-sampler-cube";
        readonly totalByteLength: number;
        readonly maxLinearValue: number;
    };
}
export interface CubemapPMREMAudit {
    readonly parity: "bounded-pmrem-audit-not-threejs-parity";
    readonly completeMipPyramid: boolean;
    readonly faceCount: number;
    readonly mipCount: number;
    readonly baseFaceSize: number;
    readonly totalByteLength: number;
    readonly maxEdgeMeanDelta: number;
    readonly luminanceVarianceByMip: readonly number[];
    readonly roughnessVarianceNonIncreasing: boolean;
    readonly roughestVarianceReduced: boolean;
}
export interface CubemapPMREMShaderContract {
    readonly sampling: "webgl2-sampler-cube";
    readonly mipSelection: "roughness-scaled-textureLod";
    readonly splitSumBRDF: true;
    readonly bindableTextureDimension: "cube";
    readonly requiredUniforms: readonly string[];
    readonly materialVariantCoverage: readonly string[];
    readonly faceCompleteness: boolean;
    readonly mipCount: number;
    readonly baseFaceSize: number;
    readonly lodRange: readonly [number, number];
    readonly fallback2DEnvironmentSpecularDisabled: true;
}
export interface CubemapPMREMOptions {
    readonly faceSize?: number;
    readonly mipCount?: number;
    readonly sampleCount?: number;
}
export interface PMREMTransmissionProbeOptions {
    readonly position: readonly [number, number, number];
    readonly normal: readonly [number, number, number];
    readonly viewDirection: readonly [number, number, number];
    readonly ior?: number;
    readonly roughness?: number;
    readonly thickness?: number;
    readonly attenuationDistance?: number;
    readonly attenuationColor?: readonly [number, number, number];
    readonly environmentBoxMin?: readonly [number, number, number];
    readonly environmentBoxMax?: readonly [number, number, number];
    readonly maxBounces?: number;
    readonly mipCount?: number;
}
export interface PMREMTransmissionProbeBounce {
    readonly bounce: number;
    readonly direction: readonly [number, number, number];
    readonly hitPosition: readonly [number, number, number];
    readonly hitNormal: readonly [number, number, number];
    readonly travelDistance: number;
    readonly lod: number;
    readonly attenuation: readonly [number, number, number];
    readonly causticEnergy: number;
}
export interface PMREMTransmissionProbe {
    readonly projection: "box-parallax-corrected-cubemap";
    readonly refractionModel: "ior-refract-with-reflection-fallback";
    readonly multiBounce: boolean;
    readonly bounces: readonly PMREMTransmissionProbeBounce[];
    readonly totalTravelDistance: number;
    readonly averageAttenuation: readonly [number, number, number];
    readonly causticEnergy: number;
    readonly recommendedLod: number;
}
export declare function generatePMREMLevels(faceSize?: number, mipCount?: number): readonly PMREMLevel[];
export declare function generateCubemapPMREMResources(source: LinearHdrEnvironmentMapSource, options?: CubemapPMREMOptions): CubemapPMREMResources;
export declare function auditCubemapPMREMResources(resources: CubemapPMREMResources): CubemapPMREMAudit;
export declare function createCubemapPMREMShaderContract(resources: CubemapPMREMResources): CubemapPMREMShaderContract;
export declare function createPMREMTransmissionProbe(options: PMREMTransmissionProbeOptions): PMREMTransmissionProbe;
//# sourceMappingURL=PMREMGenerator.d.ts.map