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