import { Uniform, Vector3, Vector4, Data3DTexture, Matrix4, Texture, Vector2 } from 'three';
import { Primitive } from 'type-fest';
import { AtmosphereParameters } from '@takram/three-atmosphere';
import { CloudLayers } from './CloudLayers';
export interface CloudParameterUniforms {
    scatteringCoefficient: Uniform<number>;
    absorptionCoefficient: Uniform<number>;
    coverage: Uniform<number>;
    localWeatherTexture: Uniform<Texture | null>;
    localWeatherRepeat: Uniform<Vector2>;
    localWeatherOffset: Uniform<Vector2>;
    shapeTexture: Uniform<Data3DTexture | null>;
    shapeRepeat: Uniform<Vector3>;
    shapeOffset: Uniform<Vector3>;
    shapeDetailTexture: Uniform<Data3DTexture | null>;
    shapeDetailRepeat: Uniform<Vector3>;
    shapeDetailOffset: Uniform<Vector3>;
    turbulenceTexture: Uniform<Texture | null>;
    turbulenceRepeat: Uniform<Vector2>;
    turbulenceDisplacement: Uniform<number>;
}
export type CloudParameterUniformInstances = {
    [K in keyof CloudParameterUniforms as CloudParameterUniforms[K]['value'] extends Primitive ? never : K]: CloudParameterUniforms[K]['value'];
};
export declare function createCloudParameterUniforms(instances: CloudParameterUniformInstances): CloudParameterUniforms;
interface DensityProfileVectors {
    expTerms: Vector4;
    exponents: Vector4;
    linearTerms: Vector4;
    constantTerms: Vector4;
}
export interface CloudLayerUniforms {
    minLayerHeights: Uniform<Vector4>;
    maxLayerHeights: Uniform<Vector4>;
    minIntervalHeights: Uniform<Vector3>;
    maxIntervalHeights: Uniform<Vector3>;
    densityScales: Uniform<Vector4>;
    shapeAmounts: Uniform<Vector4>;
    shapeDetailAmounts: Uniform<Vector4>;
    weatherExponents: Uniform<Vector4>;
    shapeAlteringBiases: Uniform<Vector4>;
    coverageFilterWidths: Uniform<Vector4>;
    minHeight: Uniform<number>;
    maxHeight: Uniform<number>;
    shadowTopHeight: Uniform<number>;
    shadowBottomHeight: Uniform<number>;
    shadowLayerMask: Uniform<Vector4>;
    densityProfile: Uniform<DensityProfileVectors>;
}
export declare function createCloudLayerUniforms(): CloudLayerUniforms;
export declare function updateCloudLayerUniforms(uniforms: CloudLayerUniforms, layers: CloudLayers): void;
export interface AtmosphereUniforms {
    bottomRadius: Uniform<number>;
    topRadius: Uniform<number>;
    worldToECEFMatrix: Uniform<Matrix4>;
    ecefToWorldMatrix: Uniform<Matrix4>;
    altitudeCorrection: Uniform<Vector3>;
    sunDirection: Uniform<Vector3>;
}
export type AtmosphereUniformInstances = {
    [K in keyof AtmosphereUniforms as AtmosphereUniforms[K]['value'] extends Primitive ? never : K]: AtmosphereUniforms[K]['value'];
};
export declare function createAtmosphereUniforms(atmosphere: AtmosphereParameters, instances: AtmosphereUniformInstances): AtmosphereUniforms;
export {};
