@takram/three-atmosphere
Version:
A Three.js and R3F implementation of Precomputed Atmospheric Scattering
70 lines (69 loc) • 3.15 kB
TypeScript
import { Matrix4, RawShaderMaterial, Uniform, Vector3, BufferGeometry, Camera, Data3DTexture, DataTexture, Group, Object3D, Scene, ShaderMaterialParameters, WebGLProgramParametersWithUniforms, WebGLRenderer } from 'three';
import { Ellipsoid } from '@takram/three-geospatial';
import { AtmosphereParameters } from './AtmosphereParameters';
export interface AtmosphereMaterialProps {
irradianceTexture?: DataTexture | null;
scatteringTexture?: Data3DTexture | null;
transmittanceTexture?: DataTexture | null;
ellipsoid?: Ellipsoid;
correctAltitude?: boolean;
photometric?: boolean;
sunDirection?: Vector3;
sunAngularRadius?: number;
renderTargetCount?: number;
}
export interface AtmosphereMaterialBaseParameters extends Partial<ShaderMaterialParameters>, AtmosphereMaterialProps {
}
export declare const atmosphereMaterialParametersBaseDefaults: {
ellipsoid: Ellipsoid;
correctAltitude: true;
photometric: true;
renderTargetCount: number;
};
export interface AtmosphereMaterialBaseUniforms {
[key: string]: Uniform<unknown>;
cameraPosition: Uniform<Vector3>;
ellipsoidCenter: Uniform<Vector3>;
inverseEllipsoidMatrix: Uniform<Matrix4>;
altitudeCorrection: Uniform<Vector3>;
sunDirection: Uniform<Vector3>;
u_solar_irradiance: Uniform<Vector3>;
u_sun_angular_radius: Uniform<number>;
u_bottom_radius: Uniform<number>;
u_top_radius: Uniform<number>;
u_rayleigh_scattering: Uniform<Vector3>;
u_mie_scattering: Uniform<Vector3>;
u_mie_phase_function_g: Uniform<number>;
u_mu_s_min: Uniform<number>;
u_irradiance_texture: Uniform<DataTexture | null>;
u_scattering_texture: Uniform<Data3DTexture | null>;
u_single_mie_scattering_texture: Uniform<Data3DTexture | null>;
u_transmittance_texture: Uniform<DataTexture | null>;
}
export declare abstract class AtmosphereMaterialBase extends RawShaderMaterial {
protected readonly atmosphere: AtmosphereParameters;
uniforms: AtmosphereMaterialBaseUniforms;
ellipsoid: Ellipsoid;
readonly ellipsoidMatrix: Matrix4;
correctAltitude: boolean;
private _renderTargetCount;
constructor(params?: AtmosphereMaterialBaseParameters, atmosphere?: AtmosphereParameters);
copyCameraSettings(camera: Camera): void;
onBeforeCompile(parameters: WebGLProgramParametersWithUniforms, renderer: WebGLRenderer): void;
onBeforeRender(renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, object: Object3D, group: Group): void;
get irradianceTexture(): DataTexture | null;
set irradianceTexture(value: DataTexture | null);
get scatteringTexture(): Data3DTexture | null;
set scatteringTexture(value: Data3DTexture | null);
get transmittanceTexture(): DataTexture | null;
set transmittanceTexture(value: DataTexture | null);
get ellipsoidCenter(): Vector3;
photometric: boolean;
get sunDirection(): Vector3;
get sunAngularRadius(): number;
set sunAngularRadius(value: number);
/** @package */
get renderTargetCount(): number;
/** @package */
set renderTargetCount(value: number);
}