@takram/three-clouds
Version:
A Three.js and R3F implementation of geospatial volumetric clouds
65 lines (64 loc) • 2.84 kB
TypeScript
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 {};