@takram/three-clouds 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/README.md +1130 -0
- package/assets/local_weather.png +0 -0
- package/assets/shape.bin +1 -0
- package/assets/shape_detail.bin +1 -0
- package/assets/turbulence.png +0 -0
- package/build/index.cjs +583 -0
- package/build/index.cjs.map +1 -0
- package/build/index.js +728 -0
- package/build/index.js.map +1 -0
- package/build/r3f.cjs +2 -0
- package/build/r3f.cjs.map +1 -0
- package/build/r3f.js +205 -0
- package/build/r3f.js.map +1 -0
- package/build/shared.cjs +2189 -0
- package/build/shared.cjs.map +1 -0
- package/build/shared.js +3825 -0
- package/build/shared.js.map +1 -0
- package/package.json +77 -0
- package/src/CascadedShadowMaps.ts +288 -0
- package/src/CloudLayer.ts +85 -0
- package/src/CloudLayers.test.ts +61 -0
- package/src/CloudLayers.ts +181 -0
- package/src/CloudShape.ts +22 -0
- package/src/CloudShapeDetail.ts +22 -0
- package/src/CloudsEffect.ts +810 -0
- package/src/CloudsMaterial.ts +467 -0
- package/src/CloudsPass.ts +285 -0
- package/src/CloudsResolveMaterial.ts +108 -0
- package/src/DensityProfile.ts +38 -0
- package/src/LocalWeather.ts +21 -0
- package/src/PassBase.ts +28 -0
- package/src/Procedural3DTexture.ts +94 -0
- package/src/ProceduralTexture.ts +94 -0
- package/src/ShaderArrayPass.ts +32 -0
- package/src/ShadowMaterial.ts +141 -0
- package/src/ShadowPass.ts +185 -0
- package/src/ShadowResolveMaterial.ts +72 -0
- package/src/Turbulence.ts +21 -0
- package/src/bayer.ts +23 -0
- package/src/constants.ts +8 -0
- package/src/helpers/FrustumCorners.ts +138 -0
- package/src/helpers/setArrayRenderTargetLayers.ts +32 -0
- package/src/helpers/splitFrustum.ts +59 -0
- package/src/index.ts +14 -0
- package/src/qualityPresets.ts +117 -0
- package/src/r3f/CloudLayer.tsx +95 -0
- package/src/r3f/CloudLayers.tsx +54 -0
- package/src/r3f/Clouds.tsx +278 -0
- package/src/r3f/index.ts +2 -0
- package/src/shaders/catmullRomSampling.glsl +113 -0
- package/src/shaders/cloudShape.frag +78 -0
- package/src/shaders/cloudShapeDetail.frag +56 -0
- package/src/shaders/clouds.frag +996 -0
- package/src/shaders/clouds.glsl +190 -0
- package/src/shaders/clouds.vert +69 -0
- package/src/shaders/cloudsEffect.frag +11 -0
- package/src/shaders/cloudsResolve.frag +202 -0
- package/src/shaders/cloudsResolve.vert +10 -0
- package/src/shaders/localWeather.frag +83 -0
- package/src/shaders/parameters.glsl +64 -0
- package/src/shaders/perlin.glsl +211 -0
- package/src/shaders/shadow.frag +197 -0
- package/src/shaders/shadow.vert +16 -0
- package/src/shaders/shadowResolve.frag +76 -0
- package/src/shaders/shadowResolve.vert +10 -0
- package/src/shaders/structuredSampling.glsl +101 -0
- package/src/shaders/tileableNoise.glsl +88 -0
- package/src/shaders/turbulence.frag +51 -0
- package/src/shaders/types.glsl +18 -0
- package/src/shaders/varianceClipping.glsl +114 -0
- package/src/uniforms.ts +218 -0
- package/types/CascadedShadowMaps.d.ts +52 -0
- package/types/CloudLayer.d.ts +26 -0
- package/types/CloudLayers.d.ts +21 -0
- package/types/CloudShape.d.ts +5 -0
- package/types/CloudShapeDetail.d.ts +5 -0
- package/types/CloudsEffect.d.ts +170 -0
- package/types/CloudsMaterial.d.ts +86 -0
- package/types/CloudsPass.d.ts +44 -0
- package/types/CloudsResolveMaterial.d.ts +30 -0
- package/types/DensityProfile.d.ts +12 -0
- package/types/LocalWeather.d.ts +5 -0
- package/types/PassBase.d.ts +14 -0
- package/types/Procedural3DTexture.d.ts +20 -0
- package/types/ProceduralTexture.d.ts +24 -0
- package/types/ShaderArrayPass.d.ts +7 -0
- package/types/ShadowMaterial.d.ts +34 -0
- package/types/ShadowPass.d.ts +34 -0
- package/types/ShadowResolveMaterial.d.ts +20 -0
- package/types/Turbulence.d.ts +5 -0
- package/types/bayer.d.ts +4 -0
- package/types/constants.d.ts +6 -0
- package/types/helpers/FrustumCorners.d.ts +18 -0
- package/types/helpers/setArrayRenderTargetLayers.d.ts +3 -0
- package/types/helpers/splitFrustum.d.ts +9 -0
- package/types/index.d.ts +13 -0
- package/types/qualityPresets.d.ts +46 -0
- package/types/r3f/CloudLayer.d.ts +7 -0
- package/types/r3f/CloudLayers.d.ts +15 -0
- package/types/r3f/Clouds.d.ts +16 -0
- package/types/r3f/index.d.ts +2 -0
- package/types/uniforms.d.ts +66 -0
@@ -0,0 +1,86 @@
|
|
1
|
+
import { AtmosphereUniforms, CloudLayerUniforms, CloudParameterUniforms } from './uniforms';
|
2
|
+
import { AtmosphereMaterialBase, AtmosphereParameters, AtmosphereMaterialBaseUniforms } from '@takram/three-atmosphere';
|
3
|
+
import { Matrix4, Uniform, Vector2, Vector3, BufferGeometry, Camera, Data3DTexture, DataArrayTexture, Group, Object3D, Scene, Texture, WebGLRenderer } from 'three';
|
4
|
+
|
5
|
+
declare module 'three' {
|
6
|
+
interface Camera {
|
7
|
+
isPerspectiveCamera?: boolean;
|
8
|
+
}
|
9
|
+
}
|
10
|
+
export interface CloudsMaterialParameters {
|
11
|
+
parameterUniforms: CloudParameterUniforms;
|
12
|
+
layerUniforms: CloudLayerUniforms;
|
13
|
+
atmosphereUniforms: AtmosphereUniforms;
|
14
|
+
}
|
15
|
+
export interface CloudsMaterialUniforms extends CloudParameterUniforms, CloudLayerUniforms, AtmosphereUniforms {
|
16
|
+
depthBuffer: Uniform<Texture | null>;
|
17
|
+
viewMatrix: Uniform<Matrix4>;
|
18
|
+
inverseProjectionMatrix: Uniform<Matrix4>;
|
19
|
+
inverseViewMatrix: Uniform<Matrix4>;
|
20
|
+
reprojectionMatrix: Uniform<Matrix4>;
|
21
|
+
resolution: Uniform<Vector2>;
|
22
|
+
cameraNear: Uniform<number>;
|
23
|
+
cameraFar: Uniform<number>;
|
24
|
+
cameraHeight: Uniform<number>;
|
25
|
+
frame: Uniform<number>;
|
26
|
+
temporalJitter: Uniform<Vector2>;
|
27
|
+
targetUvScale: Uniform<Vector2>;
|
28
|
+
mipLevelScale: Uniform<number>;
|
29
|
+
stbnTexture: Uniform<Data3DTexture | null>;
|
30
|
+
albedo: Uniform<Vector3>;
|
31
|
+
skyIrradianceScale: Uniform<number>;
|
32
|
+
groundIrradianceScale: Uniform<number>;
|
33
|
+
powderScale: Uniform<number>;
|
34
|
+
powderExponent: Uniform<number>;
|
35
|
+
maxIterationCount: Uniform<number>;
|
36
|
+
minStepSize: Uniform<number>;
|
37
|
+
maxStepSize: Uniform<number>;
|
38
|
+
maxRayDistance: Uniform<number>;
|
39
|
+
perspectiveStepScale: Uniform<number>;
|
40
|
+
minDensity: Uniform<number>;
|
41
|
+
minExtinction: Uniform<number>;
|
42
|
+
minTransmittance: Uniform<number>;
|
43
|
+
maxIterationCountToSun: Uniform<number>;
|
44
|
+
maxIterationCountToGround: Uniform<number>;
|
45
|
+
minSecondaryStepSize: Uniform<number>;
|
46
|
+
secondaryStepScale: Uniform<number>;
|
47
|
+
shadowBuffer: Uniform<DataArrayTexture | null>;
|
48
|
+
shadowTexelSize: Uniform<Vector2>;
|
49
|
+
shadowIntervals: Uniform<Vector2[]>;
|
50
|
+
shadowMatrices: Uniform<Matrix4[]>;
|
51
|
+
shadowFar: Uniform<number>;
|
52
|
+
maxShadowFilterRadius: Uniform<number>;
|
53
|
+
maxShadowLengthIterationCount: Uniform<number>;
|
54
|
+
minShadowLengthStepSize: Uniform<number>;
|
55
|
+
maxShadowLengthRayDistance: Uniform<number>;
|
56
|
+
hazeDensityScale: Uniform<number>;
|
57
|
+
hazeExponent: Uniform<number>;
|
58
|
+
}
|
59
|
+
export declare class CloudsMaterial extends AtmosphereMaterialBase {
|
60
|
+
uniforms: AtmosphereMaterialBaseUniforms & CloudsMaterialUniforms;
|
61
|
+
temporalUpscale: boolean;
|
62
|
+
private previousProjectionMatrix?;
|
63
|
+
private previousViewMatrix?;
|
64
|
+
constructor({ parameterUniforms, layerUniforms, atmosphereUniforms }: CloudsMaterialParameters, atmosphere?: AtmosphereParameters);
|
65
|
+
onBeforeRender(renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, object: Object3D, group: Group): void;
|
66
|
+
copyCameraSettings(camera: Camera): void;
|
67
|
+
copyReprojectionMatrix(camera: Camera): void;
|
68
|
+
setSize(width: number, height: number, targetWidth?: number, targetHeight?: number): void;
|
69
|
+
setShadowSize(width: number, height: number): void;
|
70
|
+
get depthBuffer(): Texture | null;
|
71
|
+
set depthBuffer(value: Texture | null);
|
72
|
+
depthPacking: number;
|
73
|
+
localWeatherChannels: string;
|
74
|
+
shapeDetail: boolean;
|
75
|
+
turbulence: boolean;
|
76
|
+
shadowLength: boolean;
|
77
|
+
haze: boolean;
|
78
|
+
multiScatteringOctaves: number;
|
79
|
+
accurateSunSkyIrradiance: boolean;
|
80
|
+
accuratePhaseFunction: boolean;
|
81
|
+
shadowCascadeCount: number;
|
82
|
+
shadowSampleCount: number;
|
83
|
+
scatterAnisotropy1: number;
|
84
|
+
scatterAnisotropy2: number;
|
85
|
+
scatterAnisotropyMix: number;
|
86
|
+
}
|
@@ -0,0 +1,44 @@
|
|
1
|
+
import { AtmosphereUniforms, CloudLayerUniforms, CloudParameterUniforms } from './uniforms';
|
2
|
+
import { PassBase, PassBaseOptions } from './PassBase';
|
3
|
+
import { CloudsResolveMaterial } from './CloudsResolveMaterial';
|
4
|
+
import { CloudsMaterial } from './CloudsMaterial';
|
5
|
+
import { AtmosphereParameters } from '@takram/three-atmosphere';
|
6
|
+
import { Camera, DataArrayTexture, DepthPackingStrategies, Texture, TextureDataType, WebGLRenderer } from 'three';
|
7
|
+
import { ShaderPass } from 'postprocessing';
|
8
|
+
|
9
|
+
export interface CloudsPassOptions extends PassBaseOptions {
|
10
|
+
parameterUniforms: CloudParameterUniforms;
|
11
|
+
layerUniforms: CloudLayerUniforms;
|
12
|
+
atmosphereUniforms: AtmosphereUniforms;
|
13
|
+
}
|
14
|
+
export declare class CloudsPass extends PassBase {
|
15
|
+
private readonly atmosphere;
|
16
|
+
private currentRenderTarget;
|
17
|
+
readonly currentMaterial: CloudsMaterial;
|
18
|
+
readonly currentPass: ShaderPass;
|
19
|
+
private resolveRenderTarget;
|
20
|
+
readonly resolveMaterial: CloudsResolveMaterial;
|
21
|
+
readonly resolvePass: ShaderPass;
|
22
|
+
private historyRenderTarget;
|
23
|
+
private width;
|
24
|
+
private height;
|
25
|
+
constructor({ parameterUniforms, layerUniforms, atmosphereUniforms, ...options }: CloudsPassOptions, atmosphere: AtmosphereParameters);
|
26
|
+
copyCameraSettings(camera: Camera): void;
|
27
|
+
initialize(renderer: WebGLRenderer, alpha: boolean, frameBufferType: TextureDataType): void;
|
28
|
+
private initRenderTargets;
|
29
|
+
private copyShadow;
|
30
|
+
private copyReprojection;
|
31
|
+
private swapBuffers;
|
32
|
+
update(renderer: WebGLRenderer, frame: number, deltaTime: number): void;
|
33
|
+
setSize(width: number, height: number): void;
|
34
|
+
setShadowSize(width: number, height: number, depth: number): void;
|
35
|
+
setDepthTexture(depthTexture: Texture, depthPacking?: DepthPackingStrategies): void;
|
36
|
+
get outputBuffer(): Texture;
|
37
|
+
get shadowBuffer(): DataArrayTexture | null;
|
38
|
+
set shadowBuffer(value: DataArrayTexture | null);
|
39
|
+
get shadowLengthBuffer(): Texture | null;
|
40
|
+
get temporalUpscale(): boolean;
|
41
|
+
set temporalUpscale(value: boolean);
|
42
|
+
get lightShafts(): boolean;
|
43
|
+
set lightShafts(value: boolean);
|
44
|
+
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import { RawShaderMaterial, Uniform, Vector2, BufferGeometry, Camera, Group, Object3D, Scene, Texture, WebGLRenderer } from 'three';
|
2
|
+
|
3
|
+
export interface CloudsResolveMaterialParameters {
|
4
|
+
colorBuffer?: Texture | null;
|
5
|
+
depthVelocityBuffer?: Texture | null;
|
6
|
+
shadowLengthBuffer?: Texture | null;
|
7
|
+
colorHistoryBuffer?: Texture | null;
|
8
|
+
shadowLengthHistoryBuffer?: Texture | null;
|
9
|
+
}
|
10
|
+
export interface CloudsResolveMaterialUniforms {
|
11
|
+
[key: string]: Uniform<unknown>;
|
12
|
+
colorBuffer: Uniform<Texture | null>;
|
13
|
+
depthVelocityBuffer: Uniform<Texture | null>;
|
14
|
+
shadowLengthBuffer: Uniform<Texture | null>;
|
15
|
+
colorHistoryBuffer: Uniform<Texture | null>;
|
16
|
+
shadowLengthHistoryBuffer: Uniform<Texture | null>;
|
17
|
+
texelSize: Uniform<Vector2>;
|
18
|
+
frame: Uniform<number>;
|
19
|
+
jitterOffset: Uniform<Vector2>;
|
20
|
+
varianceGamma: Uniform<number>;
|
21
|
+
temporalAlpha: Uniform<number>;
|
22
|
+
}
|
23
|
+
export declare class CloudsResolveMaterial extends RawShaderMaterial {
|
24
|
+
uniforms: CloudsResolveMaterialUniforms;
|
25
|
+
constructor({ colorBuffer, depthVelocityBuffer, shadowLengthBuffer, colorHistoryBuffer, shadowLengthHistoryBuffer }?: CloudsResolveMaterialParameters);
|
26
|
+
setSize(width: number, height: number): void;
|
27
|
+
onBeforeRender(renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, object: Object3D, group: Group): void;
|
28
|
+
temporalUpscale: boolean;
|
29
|
+
shadowLength: boolean;
|
30
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
export interface DensityProfileLike extends Partial<Pick<DensityProfile, 'expTerm' | 'exponent' | 'linearTerm' | 'constantTerm'>> {
|
2
|
+
}
|
3
|
+
export declare class DensityProfile {
|
4
|
+
expTerm: number;
|
5
|
+
exponent: number;
|
6
|
+
linearTerm: number;
|
7
|
+
constantTerm: number;
|
8
|
+
constructor(expTerm?: number, exponent?: number, linearTerm?: number, constantTerm?: number);
|
9
|
+
set(expTerm?: number, exponent?: number, linearTerm?: number, constantTerm?: number): this;
|
10
|
+
clone(): DensityProfile;
|
11
|
+
copy(other: DensityProfile): this;
|
12
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import { CascadedShadowMaps } from './CascadedShadowMaps';
|
2
|
+
import { Camera } from 'three';
|
3
|
+
import { Pass } from 'postprocessing';
|
4
|
+
|
5
|
+
export interface PassBaseOptions {
|
6
|
+
shadow: CascadedShadowMaps;
|
7
|
+
}
|
8
|
+
export declare abstract class PassBase extends Pass {
|
9
|
+
shadow: CascadedShadowMaps;
|
10
|
+
private _mainCamera;
|
11
|
+
constructor(name: string, options: PassBaseOptions);
|
12
|
+
get mainCamera(): Camera;
|
13
|
+
set mainCamera(value: Camera);
|
14
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import { ProceduralTexture } from './ProceduralTexture';
|
2
|
+
import { Data3DTexture, WebGLRenderer } from 'three';
|
3
|
+
|
4
|
+
export type Procedural3DTexture = ProceduralTexture<Data3DTexture>;
|
5
|
+
export interface Procedural3DTextureBaseParameters {
|
6
|
+
size: number;
|
7
|
+
fragmentShader: string;
|
8
|
+
}
|
9
|
+
export declare class Procedural3DTextureBase implements Procedural3DTexture {
|
10
|
+
readonly size: number;
|
11
|
+
needsRender: boolean;
|
12
|
+
private readonly material;
|
13
|
+
private readonly mesh;
|
14
|
+
private readonly renderTarget;
|
15
|
+
private readonly camera;
|
16
|
+
constructor({ size, fragmentShader }: Procedural3DTextureBaseParameters);
|
17
|
+
dispose(): void;
|
18
|
+
render(renderer: WebGLRenderer, deltaTime?: number): void;
|
19
|
+
get texture(): Data3DTexture;
|
20
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import { Texture, WebGLRenderer } from 'three';
|
2
|
+
|
3
|
+
export interface ProceduralTexture<T extends Texture = Texture> {
|
4
|
+
readonly size: number;
|
5
|
+
readonly texture: T;
|
6
|
+
dispose: () => void;
|
7
|
+
render: (renderer: WebGLRenderer, deltaTime?: number) => void;
|
8
|
+
}
|
9
|
+
export interface ProceduralTextureBaseParameters {
|
10
|
+
size: number;
|
11
|
+
fragmentShader: string;
|
12
|
+
}
|
13
|
+
export declare class ProceduralTextureBase implements ProceduralTexture {
|
14
|
+
readonly size: number;
|
15
|
+
needsRender: boolean;
|
16
|
+
private readonly material;
|
17
|
+
private readonly mesh;
|
18
|
+
private readonly renderTarget;
|
19
|
+
private readonly camera;
|
20
|
+
constructor({ size, fragmentShader }: ProceduralTextureBaseParameters);
|
21
|
+
dispose(): void;
|
22
|
+
render(renderer: WebGLRenderer, deltaTime?: number): void;
|
23
|
+
get texture(): Texture;
|
24
|
+
}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { WebGLArrayRenderTarget, WebGLRenderer, WebGLRenderTarget } from 'three';
|
2
|
+
import { ShaderPass } from 'postprocessing';
|
3
|
+
|
4
|
+
export declare class ShaderArrayPass extends ShaderPass {
|
5
|
+
input: string;
|
6
|
+
render(renderer: WebGLRenderer, inputBuffer: WebGLRenderTarget | null, outputBuffer: WebGLArrayRenderTarget, deltaTime?: number, stencilTest?: boolean): void;
|
7
|
+
}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import { AtmosphereUniforms, CloudLayerUniforms, CloudParameterUniforms } from './uniforms';
|
2
|
+
import { Matrix4, RawShaderMaterial, Uniform, Vector2, Data3DTexture } from 'three';
|
3
|
+
|
4
|
+
export interface ShadowMaterialParameters {
|
5
|
+
parameterUniforms: CloudParameterUniforms;
|
6
|
+
layerUniforms: CloudLayerUniforms;
|
7
|
+
atmosphereUniforms: AtmosphereUniforms;
|
8
|
+
}
|
9
|
+
export interface ShadowMaterialUniforms extends CloudParameterUniforms, CloudLayerUniforms, AtmosphereUniforms {
|
10
|
+
[key: string]: Uniform<unknown>;
|
11
|
+
inverseShadowMatrices: Uniform<Matrix4[]>;
|
12
|
+
reprojectionMatrices: Uniform<Matrix4[]>;
|
13
|
+
resolution: Uniform<Vector2>;
|
14
|
+
frame: Uniform<number>;
|
15
|
+
stbnTexture: Uniform<Data3DTexture | null>;
|
16
|
+
maxIterationCount: Uniform<number>;
|
17
|
+
minStepSize: Uniform<number>;
|
18
|
+
maxStepSize: Uniform<number>;
|
19
|
+
minDensity: Uniform<number>;
|
20
|
+
minExtinction: Uniform<number>;
|
21
|
+
minTransmittance: Uniform<number>;
|
22
|
+
opticalDepthTailScale: Uniform<number>;
|
23
|
+
}
|
24
|
+
export declare class ShadowMaterial extends RawShaderMaterial {
|
25
|
+
uniforms: ShadowMaterialUniforms;
|
26
|
+
constructor({ parameterUniforms, layerUniforms, atmosphereUniforms }: ShadowMaterialParameters);
|
27
|
+
setSize(width: number, height: number): void;
|
28
|
+
localWeatherChannels: string;
|
29
|
+
cascadeCount: number;
|
30
|
+
temporalPass: boolean;
|
31
|
+
temporalJitter: boolean;
|
32
|
+
shapeDetail: boolean;
|
33
|
+
turbulence: boolean;
|
34
|
+
}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import { AtmosphereUniforms, CloudLayerUniforms, CloudParameterUniforms } from './uniforms';
|
2
|
+
import { ShadowResolveMaterial } from './ShadowResolveMaterial';
|
3
|
+
import { ShadowMaterial } from './ShadowMaterial';
|
4
|
+
import { ShaderArrayPass } from './ShaderArrayPass';
|
5
|
+
import { PassBase, PassBaseOptions } from './PassBase';
|
6
|
+
import { DataArrayTexture, TextureDataType, WebGLRenderer } from 'three';
|
7
|
+
|
8
|
+
export interface ShadowPassOptions extends PassBaseOptions {
|
9
|
+
parameterUniforms: CloudParameterUniforms;
|
10
|
+
layerUniforms: CloudLayerUniforms;
|
11
|
+
atmosphereUniforms: AtmosphereUniforms;
|
12
|
+
}
|
13
|
+
export declare class ShadowPass extends PassBase {
|
14
|
+
private currentRenderTarget;
|
15
|
+
readonly currentMaterial: ShadowMaterial;
|
16
|
+
readonly currentPass: ShaderArrayPass;
|
17
|
+
private resolveRenderTarget;
|
18
|
+
readonly resolveMaterial: ShadowResolveMaterial;
|
19
|
+
readonly resolvePass: ShaderArrayPass;
|
20
|
+
private historyRenderTarget;
|
21
|
+
private width;
|
22
|
+
private height;
|
23
|
+
constructor({ parameterUniforms, layerUniforms, atmosphereUniforms, ...options }: ShadowPassOptions);
|
24
|
+
initialize(renderer: WebGLRenderer, alpha: boolean, frameBufferType: TextureDataType): void;
|
25
|
+
private initRenderTargets;
|
26
|
+
private copyShadow;
|
27
|
+
private copyReprojection;
|
28
|
+
private swapBuffers;
|
29
|
+
update(renderer: WebGLRenderer, frame: number, deltaTime: number): void;
|
30
|
+
setSize(width: number, height: number, depth?: number): void;
|
31
|
+
get outputBuffer(): DataArrayTexture;
|
32
|
+
get temporalPass(): boolean;
|
33
|
+
set temporalPass(value: boolean);
|
34
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import { RawShaderMaterial, Uniform, Vector2, DataArrayTexture } from 'three';
|
2
|
+
|
3
|
+
export interface ShadowResolveMaterialParameters {
|
4
|
+
inputBuffer?: DataArrayTexture | null;
|
5
|
+
historyBuffer?: DataArrayTexture | null;
|
6
|
+
}
|
7
|
+
export interface ShadowResolveMaterialUniforms {
|
8
|
+
[key: string]: Uniform<unknown>;
|
9
|
+
inputBuffer: Uniform<DataArrayTexture | null>;
|
10
|
+
historyBuffer: Uniform<DataArrayTexture | null>;
|
11
|
+
texelSize: Uniform<Vector2>;
|
12
|
+
varianceGamma: Uniform<number>;
|
13
|
+
temporalAlpha: Uniform<number>;
|
14
|
+
}
|
15
|
+
export declare class ShadowResolveMaterial extends RawShaderMaterial {
|
16
|
+
uniforms: ShadowResolveMaterialUniforms;
|
17
|
+
constructor({ inputBuffer, historyBuffer }?: ShadowResolveMaterialParameters);
|
18
|
+
setSize(width: number, height: number): void;
|
19
|
+
cascadeCount: number;
|
20
|
+
}
|
package/types/bayer.d.ts
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
export declare const CLOUD_SHAPE_TEXTURE_SIZE = 128;
|
2
|
+
export declare const CLOUD_SHAPE_DETAIL_TEXTURE_SIZE = 32;
|
3
|
+
export declare const DEFAULT_LOCAL_WEATHER_URL = "https://media.githubusercontent.com/media/takram-design-engineering/three-geospatial/45a1c6c1bb9fd38b3680fd120795ff4c32df68ff/packages/clouds/assets/local_weather.png";
|
4
|
+
export declare const DEFAULT_SHAPE_URL = "https://media.githubusercontent.com/media/takram-design-engineering/three-geospatial/45a1c6c1bb9fd38b3680fd120795ff4c32df68ff/packages/clouds/assets/shape.bin";
|
5
|
+
export declare const DEFAULT_SHAPE_DETAIL_URL = "https://media.githubusercontent.com/media/takram-design-engineering/three-geospatial/45a1c6c1bb9fd38b3680fd120795ff4c32df68ff/packages/clouds/assets/shape_detail.bin";
|
6
|
+
export declare const DEFAULT_TURBULENCE_URL = "https://media.githubusercontent.com/media/takram-design-engineering/three-geospatial/45a1c6c1bb9fd38b3680fd120795ff4c32df68ff/packages/clouds/assets/turbulence.png";
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import { Vector3, Camera, Matrix4 } from 'three';
|
2
|
+
|
3
|
+
declare module 'three' {
|
4
|
+
interface Camera {
|
5
|
+
isOrthographicCamera?: boolean;
|
6
|
+
}
|
7
|
+
}
|
8
|
+
export declare class FrustumCorners {
|
9
|
+
readonly near: Vector3[];
|
10
|
+
readonly far: Vector3[];
|
11
|
+
constructor();
|
12
|
+
constructor(camera: Camera, far: number);
|
13
|
+
clone(): FrustumCorners;
|
14
|
+
copy(other: FrustumCorners): this;
|
15
|
+
setFromCamera(camera: Camera, far: number): this;
|
16
|
+
split(clipDepths: readonly number[], result?: FrustumCorners[]): FrustumCorners[];
|
17
|
+
applyMatrix4(matrix: Matrix4): this;
|
18
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
export type FrustumSplitFunction = (length: number, near: number, far: number, lambda?: number, result?: number[]) => number[];
|
2
|
+
export interface FrustumSplitFunctions {
|
3
|
+
uniform: FrustumSplitFunction;
|
4
|
+
logarithmic: FrustumSplitFunction;
|
5
|
+
practical: FrustumSplitFunction;
|
6
|
+
}
|
7
|
+
export type FrustumSplitMode = keyof FrustumSplitFunctions;
|
8
|
+
export declare const frustumSplitFunctions: FrustumSplitFunctions;
|
9
|
+
export declare function splitFrustum(mode: FrustumSplitMode, count: number, near: number, far: number, lambda?: number, result?: number[]): number[];
|
package/types/index.d.ts
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
export type { QualityPreset as CloudsQualityPreset } from './qualityPresets';
|
2
|
+
export type { FrustumSplitMode } from './helpers/splitFrustum';
|
3
|
+
export * from './CloudLayer';
|
4
|
+
export * from './CloudLayers';
|
5
|
+
export * from './CloudsEffect';
|
6
|
+
export * from './CloudShape';
|
7
|
+
export * from './CloudShapeDetail';
|
8
|
+
export * from './constants';
|
9
|
+
export * from './DensityProfile';
|
10
|
+
export * from './LocalWeather';
|
11
|
+
export * from './Procedural3DTexture';
|
12
|
+
export * from './ProceduralTexture';
|
13
|
+
export * from './Turbulence';
|
@@ -0,0 +1,46 @@
|
|
1
|
+
import { CloudsEffect } from './CloudsEffect';
|
2
|
+
import { SharedUnionFieldsDeep } from 'type-fest';
|
3
|
+
import { Vector2 } from 'three';
|
4
|
+
|
5
|
+
export type QualityPreset = 'low' | 'medium' | 'high' | 'ultra';
|
6
|
+
declare const values: {
|
7
|
+
resolutionScale: number;
|
8
|
+
lightShafts: true;
|
9
|
+
shapeDetail: true;
|
10
|
+
turbulence: true;
|
11
|
+
haze: true;
|
12
|
+
clouds: {
|
13
|
+
multiScatteringOctaves: number;
|
14
|
+
accurateSunSkyIrradiance: true;
|
15
|
+
accuratePhaseFunction: false;
|
16
|
+
maxIterationCount: number;
|
17
|
+
minStepSize: number;
|
18
|
+
maxStepSize: number;
|
19
|
+
maxRayDistance: number;
|
20
|
+
perspectiveStepScale: number;
|
21
|
+
minDensity: number;
|
22
|
+
minExtinction: number;
|
23
|
+
minTransmittance: number;
|
24
|
+
maxIterationCountToGround: number;
|
25
|
+
maxIterationCountToSun: number;
|
26
|
+
minSecondaryStepSize: number;
|
27
|
+
secondaryStepScale: number;
|
28
|
+
maxShadowLengthIterationCount: number;
|
29
|
+
minShadowLengthStepSize: number;
|
30
|
+
maxShadowLengthRayDistance: number;
|
31
|
+
};
|
32
|
+
shadow: {
|
33
|
+
cascadeCount: number;
|
34
|
+
mapSize: Vector2;
|
35
|
+
maxIterationCount: number;
|
36
|
+
minStepSize: number;
|
37
|
+
maxStepSize: number;
|
38
|
+
minDensity: number;
|
39
|
+
minExtinction: number;
|
40
|
+
minTransmittance: number;
|
41
|
+
};
|
42
|
+
};
|
43
|
+
type Schema = SharedUnionFieldsDeep<typeof values | CloudsEffect>;
|
44
|
+
export declare const defaults: Schema;
|
45
|
+
export declare const qualityPresets: Record<QualityPreset, Schema>;
|
46
|
+
export {};
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { CloudLayer as CloudLayerImpl, CloudLayerLike } from '../CloudLayer';
|
2
|
+
import { ExpandNestedProps } from '@takram/three-geospatial/r3f';
|
3
|
+
|
4
|
+
export interface CloudLayerProps extends CloudLayerLike, ExpandNestedProps<CloudLayerLike, 'densityProfile'> {
|
5
|
+
index?: number;
|
6
|
+
}
|
7
|
+
export declare const CloudLayer: import('react').ForwardRefExoticComponent<CloudLayerProps & import('react').RefAttributes<CloudLayerImpl>>;
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { CloudLayers as CloudLayersImpl } from '../CloudLayers';
|
2
|
+
import { FC, ReactNode } from 'react';
|
3
|
+
|
4
|
+
export interface CloudLayersContextValue {
|
5
|
+
layers: CloudLayersImpl;
|
6
|
+
indexPool: number[];
|
7
|
+
disableDefault: boolean;
|
8
|
+
}
|
9
|
+
export declare const CloudLayersContext: import('react').Context<CloudLayersContextValue | null>;
|
10
|
+
export interface CloudLayersProps {
|
11
|
+
layers: CloudLayersImpl;
|
12
|
+
disableDefault?: boolean;
|
13
|
+
children?: ReactNode;
|
14
|
+
}
|
15
|
+
export declare const CloudLayers: FC<CloudLayersProps>;
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import { ProceduralTexture } from '../ProceduralTexture';
|
2
|
+
import { Procedural3DTexture } from '../Procedural3DTexture';
|
3
|
+
import { CloudsEffect } from '../CloudsEffect';
|
4
|
+
import { ExpandNestedProps, PassThoughInstanceProps } from '@takram/three-geospatial/r3f';
|
5
|
+
import { Data3DTexture, Texture } from 'three';
|
6
|
+
|
7
|
+
export interface CloudsProps extends Omit<PassThoughInstanceProps<CloudsEffect, [
|
8
|
+
], Partial<CloudsEffect & ExpandNestedProps<CloudsEffect, 'clouds'> & ExpandNestedProps<CloudsEffect, 'shadow'>>>, 'localWeatherTexture' | 'shapeTexture' | 'shapeDetailTexture' | 'turbulenceTexture' | 'stbnTexture'> {
|
9
|
+
disableDefaultLayers?: boolean;
|
10
|
+
localWeatherTexture?: Texture | ProceduralTexture | string;
|
11
|
+
shapeTexture?: Data3DTexture | Procedural3DTexture | string;
|
12
|
+
shapeDetailTexture?: Data3DTexture | Procedural3DTexture | string;
|
13
|
+
turbulenceTexture?: Texture | ProceduralTexture | string;
|
14
|
+
stbnTexture?: Data3DTexture | string;
|
15
|
+
}
|
16
|
+
export declare const Clouds: import('react').ForwardRefExoticComponent<Omit<CloudsProps, "ref"> & import('react').RefAttributes<CloudsEffect>>;
|
@@ -0,0 +1,66 @@
|
|
1
|
+
import { CloudLayers } from './CloudLayers';
|
2
|
+
import { AtmosphereParameters } from '@takram/three-atmosphere';
|
3
|
+
import { Primitive } from 'type-fest';
|
4
|
+
import { Uniform, Vector3, Vector4, Data3DTexture, Matrix4, Texture, Vector2 } from 'three';
|
5
|
+
|
6
|
+
export interface CloudParameterUniforms {
|
7
|
+
scatteringCoefficient: Uniform<number>;
|
8
|
+
absorptionCoefficient: Uniform<number>;
|
9
|
+
coverage: Uniform<number>;
|
10
|
+
localWeatherTexture: Uniform<Texture | null>;
|
11
|
+
localWeatherRepeat: Uniform<Vector2>;
|
12
|
+
localWeatherOffset: Uniform<Vector2>;
|
13
|
+
shapeTexture: Uniform<Data3DTexture | null>;
|
14
|
+
shapeRepeat: Uniform<Vector3>;
|
15
|
+
shapeOffset: Uniform<Vector3>;
|
16
|
+
shapeDetailTexture: Uniform<Data3DTexture | null>;
|
17
|
+
shapeDetailRepeat: Uniform<Vector3>;
|
18
|
+
shapeDetailOffset: Uniform<Vector3>;
|
19
|
+
turbulenceTexture: Uniform<Texture | null>;
|
20
|
+
turbulenceRepeat: Uniform<Vector2>;
|
21
|
+
turbulenceDisplacement: Uniform<number>;
|
22
|
+
}
|
23
|
+
export type CloudParameterUniformInstances = {
|
24
|
+
[K in keyof CloudParameterUniforms as CloudParameterUniforms[K]['value'] extends Primitive ? never : K]: CloudParameterUniforms[K]['value'];
|
25
|
+
};
|
26
|
+
export declare function createCloudParameterUniforms(instances: CloudParameterUniformInstances): CloudParameterUniforms;
|
27
|
+
interface DensityProfileVectors {
|
28
|
+
expTerms: Vector4;
|
29
|
+
exponents: Vector4;
|
30
|
+
linearTerms: Vector4;
|
31
|
+
constantTerms: Vector4;
|
32
|
+
}
|
33
|
+
export interface CloudLayerUniforms {
|
34
|
+
minLayerHeights: Uniform<Vector4>;
|
35
|
+
maxLayerHeights: Uniform<Vector4>;
|
36
|
+
minIntervalHeights: Uniform<Vector3>;
|
37
|
+
maxIntervalHeights: Uniform<Vector3>;
|
38
|
+
densityScales: Uniform<Vector4>;
|
39
|
+
shapeAmounts: Uniform<Vector4>;
|
40
|
+
shapeDetailAmounts: Uniform<Vector4>;
|
41
|
+
weatherExponents: Uniform<Vector4>;
|
42
|
+
shapeAlteringBiases: Uniform<Vector4>;
|
43
|
+
coverageFilterWidths: Uniform<Vector4>;
|
44
|
+
minHeight: Uniform<number>;
|
45
|
+
maxHeight: Uniform<number>;
|
46
|
+
shadowTopHeight: Uniform<number>;
|
47
|
+
shadowBottomHeight: Uniform<number>;
|
48
|
+
shadowLayerMask: Uniform<Vector4>;
|
49
|
+
densityProfile: Uniform<DensityProfileVectors>;
|
50
|
+
}
|
51
|
+
export declare function createCloudLayerUniforms(): CloudLayerUniforms;
|
52
|
+
export declare function updateCloudLayerUniforms(uniforms: CloudLayerUniforms, layers: CloudLayers): void;
|
53
|
+
export interface AtmosphereUniforms {
|
54
|
+
bottomRadius: Uniform<number>;
|
55
|
+
topRadius: Uniform<number>;
|
56
|
+
ellipsoidCenter: Uniform<Vector3>;
|
57
|
+
ellipsoidMatrix: Uniform<Matrix4>;
|
58
|
+
inverseEllipsoidMatrix: Uniform<Matrix4>;
|
59
|
+
altitudeCorrection: Uniform<Vector3>;
|
60
|
+
sunDirection: Uniform<Vector3>;
|
61
|
+
}
|
62
|
+
export type AtmosphereUniformInstances = {
|
63
|
+
[K in keyof AtmosphereUniforms as AtmosphereUniforms[K]['value'] extends Primitive ? never : K]: AtmosphereUniforms[K]['value'];
|
64
|
+
};
|
65
|
+
export declare function createAtmosphereUniforms(atmosphere: AtmosphereParameters, instances: AtmosphereUniformInstances): AtmosphereUniforms;
|
66
|
+
export {};
|