import { Effect, Resolution } from 'postprocessing';
import { Camera, Data3DTexture, EventDispatcher, Matrix4, Texture, Uniform, Vector2, Vector3, DepthPackingStrategies, TextureDataType, WebGLRenderer, WebGLRenderTarget } from 'three';
import { AtmosphereParameters, AtmosphereOverlay, AtmosphereShadow, AtmosphereShadowLength } from '@takram/three-atmosphere';
import { UniformMap, Ellipsoid, PropertyShorthand, UniformShorthand } from '@takram/three-geospatial';
import { CascadedShadowMaps } from './CascadedShadowMaps';
import { CloudLayers } from './CloudLayers';
import { CloudsMaterial } from './CloudsMaterial';
import { CloudsPass } from './CloudsPass';
import { Procedural3DTexture } from './Procedural3DTexture';
import { ProceduralTexture } from './ProceduralTexture';
import { QualityPreset } from './qualityPresets';
import { ShadowMaterial } from './ShadowMaterial';
import { ShadowPass } from './ShadowPass';
declare const cloudsUniformKeys: ["maxIterationCount", "minStepSize", "maxStepSize", "maxRayDistance", "perspectiveStepScale", "minDensity", "minExtinction", "minTransmittance", "maxIterationCountToSun", "maxIterationCountToGround", "minSecondaryStepSize", "secondaryStepScale", "maxShadowFilterRadius", "maxShadowLengthIterationCount", "minShadowLengthStepSize", "maxShadowLengthRayDistance", "hazeDensityScale", "hazeExponent", "hazeScatteringCoefficient", "hazeAbsorptionCoefficient"];
declare const cloudsMaterialParameterKeys: ["multiScatteringOctaves", "accurateSunSkyLight", "accuratePhaseFunction"];
declare const shadowUniformKeys: ["maxIterationCount", "minStepSize", "maxStepSize", "minDensity", "minExtinction", "minTransmittance", "opticalDepthTailScale"];
declare const shadowMaterialParameterKeys: ["temporalJitter"];
declare const shadowPassParameterKeys: ["temporalPass"];
declare const shadowMapsParameterKeys: ["cascadeCount", "mapSize", "maxFar", "farScale", "splitMode", "splitLambda"];
interface CloudsShorthand extends UniformShorthand<CloudsMaterial, (typeof cloudsUniformKeys)[number]>, PropertyShorthand<[CloudsMaterial, typeof cloudsMaterialParameterKeys]> {
}
interface ShadowShorthand extends UniformShorthand<ShadowMaterial, (typeof shadowUniformKeys)[number]>, PropertyShorthand<[
    ShadowMaterial,
    typeof shadowMaterialParameterKeys,
    ShadowPass,
    typeof shadowPassParameterKeys,
    CascadedShadowMaps,
    typeof shadowMapsParameterKeys
]> {
}
export interface CloudsEffectChangeEvent {
    type: 'change';
    target?: CloudsEffect;
    property?: 'atmosphereOverlay' | 'atmosphereShadow' | 'atmosphereShadowLength';
}
export interface CloudsEffectUniforms {
    cloudsBuffer: Uniform<Texture | null>;
}
export interface CloudsEffectOptions {
    resolutionScale?: number;
    width?: number;
    height?: number;
    resolutionX?: number;
    resolutionY?: number;
}
export declare const cloudsPassOptionsDefaults: {
    resolutionScale: number;
    width: number;
    height: number;
};
export declare class CloudsEffect extends Effect {
    private camera;
    private readonly atmosphere;
    uniforms: UniformMap<CloudsEffectUniforms>;
    readonly cloudLayers: CloudLayers;
    correctAltitude: boolean;
    readonly localWeatherRepeat: Vector2;
    readonly localWeatherOffset: Vector2;
    readonly shapeRepeat: Vector3;
    readonly shapeOffset: Vector3;
    readonly shapeDetailRepeat: Vector3;
    readonly shapeDetailOffset: Vector3;
    readonly turbulenceRepeat: Vector2;
    readonly worldToECEFMatrix: Matrix4;
    private readonly ecefToWorldMatrix;
    private readonly altitudeCorrection;
    readonly sunDirection: Vector3;
    private readonly parameterUniforms;
    private readonly layerUniforms;
    private readonly atmosphereUniforms;
    readonly localWeatherVelocity: Vector2;
    readonly shapeVelocity: Vector3;
    readonly shapeDetailVelocity: Vector3;
    private proceduralLocalWeather?;
    private proceduralShape?;
    private proceduralShapeDetail?;
    private proceduralTurbulence?;
    readonly shadowMaps: CascadedShadowMaps;
    readonly shadowPass: ShadowPass;
    readonly cloudsPass: CloudsPass;
    readonly clouds: CloudsShorthand;
    readonly shadow: ShadowShorthand;
    private _atmosphereOverlay;
    private _atmosphereShadow;
    private _atmosphereShadowLength;
    readonly resolution: Resolution;
    readonly events: EventDispatcher<{
        change: CloudsEffectChangeEvent;
    }>;
    private frame;
    private shadowCascadeCount;
    private readonly shadowMapSize;
    constructor(camera?: Camera, options?: CloudsEffectOptions, atmosphere?: AtmosphereParameters);
    private readonly onResolutionChange;
    get mainCamera(): Camera;
    set mainCamera(value: Camera);
    initialize(renderer: WebGLRenderer, alpha: boolean, frameBufferType: TextureDataType): void;
    private updateSharedUniforms;
    private updateWeatherTextureChannels;
    private updateAtmosphereComposition;
    update(renderer: WebGLRenderer, inputBuffer: WebGLRenderTarget, deltaTime?: number): void;
    setSize(baseWidth: number, baseHeight: number): void;
    setDepthTexture(depthTexture: Texture, depthPacking?: DepthPackingStrategies): void;
    skipRendering: boolean;
    set qualityPreset(value: QualityPreset);
    get localWeatherTexture(): Texture | ProceduralTexture | null;
    set localWeatherTexture(value: Texture | ProceduralTexture | null);
    get shapeTexture(): Data3DTexture | Procedural3DTexture | null;
    set shapeTexture(value: Data3DTexture | Procedural3DTexture | null);
    get shapeDetailTexture(): Data3DTexture | Procedural3DTexture | null;
    set shapeDetailTexture(value: Data3DTexture | Procedural3DTexture | null);
    get turbulenceTexture(): Texture | ProceduralTexture | null;
    set turbulenceTexture(value: Texture | ProceduralTexture | null);
    get stbnTexture(): Data3DTexture | null;
    set stbnTexture(value: Data3DTexture | null);
    get resolutionScale(): number;
    set resolutionScale(value: number);
    get temporalUpscale(): boolean;
    set temporalUpscale(value: boolean);
    get lightShafts(): boolean;
    set lightShafts(value: boolean);
    get shapeDetail(): boolean;
    set shapeDetail(value: boolean);
    get turbulence(): boolean;
    set turbulence(value: boolean);
    get haze(): boolean;
    set haze(value: boolean);
    get scatteringCoefficient(): number;
    set scatteringCoefficient(value: number);
    get absorptionCoefficient(): number;
    set absorptionCoefficient(value: number);
    get coverage(): number;
    set coverage(value: number);
    get turbulenceDisplacement(): number;
    set turbulenceDisplacement(value: number);
    get scatterAnisotropy1(): number;
    set scatterAnisotropy1(value: number);
    get scatterAnisotropy2(): number;
    set scatterAnisotropy2(value: number);
    get scatterAnisotropyMix(): number;
    set scatterAnisotropyMix(value: number);
    /** @deprecated Use skyLightScale instead. */
    get skyIrradianceScale(): number;
    /** @deprecated Use skyLightScale instead. */
    set skyIrradianceScale(value: number);
    get skyLightScale(): number;
    set skyLightScale(value: number);
    /** @deprecated Use groundBounceScale instead. */
    get groundIrradianceScale(): number;
    /** @deprecated Use groundBounceScale instead. */
    set groundIrradianceScale(value: number);
    get groundBounceScale(): number;
    set groundBounceScale(value: number);
    get powderScale(): number;
    set powderScale(value: number);
    get powderExponent(): number;
    set powderExponent(value: number);
    get atmosphereOverlay(): AtmosphereOverlay | null;
    get atmosphereShadow(): AtmosphereShadow | null;
    get atmosphereShadowLength(): AtmosphereShadowLength | null;
    get irradianceTexture(): Texture | null;
    set irradianceTexture(value: Texture | null);
    get scatteringTexture(): Data3DTexture | null;
    set scatteringTexture(value: Data3DTexture | null);
    get transmittanceTexture(): Texture | null;
    set transmittanceTexture(value: Texture | null);
    get singleMieScatteringTexture(): Data3DTexture | null;
    set singleMieScatteringTexture(value: Data3DTexture | null);
    get higherOrderScatteringTexture(): Data3DTexture | null;
    set higherOrderScatteringTexture(value: Data3DTexture | null);
    get ellipsoid(): Ellipsoid;
    set ellipsoid(value: Ellipsoid);
    get sunAngularRadius(): number;
    set sunAngularRadius(value: number);
}
export {};
