@navaramap/three-csm 0.0.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/LICENSE +8 -0
- package/README.md +5 -0
- package/dist/index.d.ts +197 -0
- package/dist/index.js +483 -0
- package/dist/index.umd.cjs +306 -0
- package/package.json +38 -0
- package/src/CSMHelper.ts +199 -0
- package/src/CascadedDirectionalLights.ts +80 -0
- package/src/CascadedShadowMaps.ts +475 -0
- package/src/FrustumCorners.ts +111 -0
- package/src/MaterialStates.ts +154 -0
- package/src/createFragmentShader.ts +92 -0
- package/src/index.ts +5 -0
- package/src/shaders/cascadedFadedLights.glsl +102 -0
- package/src/shaders/cascadedLights.glsl +81 -0
- package/src/shaders/cascadedLightsWithoutShadows.glsl +35 -0
- package/src/shaders/defaultLights.glsl +36 -0
- package/src/shaders/nonShadowCastingLights.glsl +18 -0
- package/src/splitFrustum.ts +59 -0
- package/src/vite-env.d.ts +1 -0
package/LICENSE
ADDED
package/README.md
ADDED
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { Camera } from 'three';
|
|
2
|
+
import { Color } from 'three';
|
|
3
|
+
import { ColorRepresentation } from 'three';
|
|
4
|
+
import { DirectionalLight } from 'three';
|
|
5
|
+
import { Group } from 'three';
|
|
6
|
+
import { Material } from 'three';
|
|
7
|
+
import { Matrix4 } from 'three';
|
|
8
|
+
import { Object3D } from 'three';
|
|
9
|
+
import { OrthographicCamera } from 'three';
|
|
10
|
+
import { PerspectiveCamera } from 'three';
|
|
11
|
+
import { Vector2 } from 'three';
|
|
12
|
+
import { Vector3 } from 'three';
|
|
13
|
+
|
|
14
|
+
export declare class CascadedDirectionalLights extends Object3D {
|
|
15
|
+
readonly mainLight: DirectionalLight;
|
|
16
|
+
readonly cascadedLights: DirectionalLight[];
|
|
17
|
+
direction: Vector3;
|
|
18
|
+
constructor(color?: ColorRepresentation, intensity?: number);
|
|
19
|
+
setCount(value: number): this;
|
|
20
|
+
dispose(): void;
|
|
21
|
+
copy(source: this, _recursive?: boolean): this;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export declare class CascadedShadowMaps {
|
|
25
|
+
readonly mainCamera: PerspectiveCamera | OrthographicCamera;
|
|
26
|
+
needsUpdateFrusta: boolean;
|
|
27
|
+
readonly directionalLights: CascadedDirectionalLights;
|
|
28
|
+
readonly materialStates: MaterialStates;
|
|
29
|
+
readonly mainFrustum: FrustumCorners;
|
|
30
|
+
readonly cascadedFrusta: FrustumCorners[];
|
|
31
|
+
readonly splits: number[];
|
|
32
|
+
readonly cascades: Vector2[];
|
|
33
|
+
private _far;
|
|
34
|
+
private _mode;
|
|
35
|
+
private _lambda;
|
|
36
|
+
private _margin;
|
|
37
|
+
private _fade;
|
|
38
|
+
private _disableLastCascadeCutoff;
|
|
39
|
+
constructor(mainCamera: PerspectiveCamera | OrthographicCamera, params?: CascadedShadowMapsOptions);
|
|
40
|
+
dispose(): void;
|
|
41
|
+
setupMaterial<T extends Material>(material: T): T;
|
|
42
|
+
rollbackMaterial<T extends Material>(material: T): T;
|
|
43
|
+
setupMaterials<T extends readonly Material[]>(materials: T): () => void;
|
|
44
|
+
private updateCascades;
|
|
45
|
+
private getFrustumRadius;
|
|
46
|
+
private updateShadowBounds;
|
|
47
|
+
updateFrusta(): void;
|
|
48
|
+
update(): void;
|
|
49
|
+
get cascadeCount(): number;
|
|
50
|
+
set cascadeCount(value: number);
|
|
51
|
+
get mapSize(): number;
|
|
52
|
+
set mapSize(value: number);
|
|
53
|
+
get far(): number;
|
|
54
|
+
set far(value: number);
|
|
55
|
+
get mode(): FrustumSplitMode;
|
|
56
|
+
set mode(value: FrustumSplitMode);
|
|
57
|
+
get lambda(): number;
|
|
58
|
+
set lambda(value: number);
|
|
59
|
+
get margin(): number;
|
|
60
|
+
set margin(value: number);
|
|
61
|
+
get fade(): boolean;
|
|
62
|
+
set fade(value: boolean);
|
|
63
|
+
get disableLastCascadeCutoff(): boolean;
|
|
64
|
+
set disableLastCascadeCutoff(value: boolean);
|
|
65
|
+
get intensity(): number;
|
|
66
|
+
set intensity(value: number);
|
|
67
|
+
get shadowIntensity(): number;
|
|
68
|
+
set shadowIntensity(value: number);
|
|
69
|
+
get color(): Color;
|
|
70
|
+
set color(value: Color);
|
|
71
|
+
get bias(): number;
|
|
72
|
+
set bias(value: number);
|
|
73
|
+
get normalBias(): number;
|
|
74
|
+
set normalBias(value: number);
|
|
75
|
+
get radius(): number;
|
|
76
|
+
set radius(value: number);
|
|
77
|
+
get blurSamples(): number;
|
|
78
|
+
set blurSamples(value: number);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export declare type CascadedShadowMapsOptions = {
|
|
82
|
+
/**
|
|
83
|
+
* Number of shadow cascades. More cascades provide better shadow quality
|
|
84
|
+
* distribution but require more GPU resources.
|
|
85
|
+
* @default 4
|
|
86
|
+
*/
|
|
87
|
+
cascadeCount?: number;
|
|
88
|
+
/**
|
|
89
|
+
* Resolution of shadow maps (one per cascade). Higher values provide better
|
|
90
|
+
* shadow quality but require more GPU memory.
|
|
91
|
+
* @default 2048
|
|
92
|
+
*/
|
|
93
|
+
mapSize?: number;
|
|
94
|
+
/**
|
|
95
|
+
* Frustum far plane distance. Shadows will not be visible farther than this
|
|
96
|
+
* distance from the camera.
|
|
97
|
+
* @default 5000
|
|
98
|
+
*/
|
|
99
|
+
far?: number;
|
|
100
|
+
/**
|
|
101
|
+
* Defines the split scheme for the camera frustum:
|
|
102
|
+
* - "uniform": Linear split distribution
|
|
103
|
+
* - "logarithmic": Logarithmic split distribution (better for large scenes)
|
|
104
|
+
* - "practical": Hybrid approach balancing quality and performance (recommended)
|
|
105
|
+
* @default "practical"
|
|
106
|
+
*/
|
|
107
|
+
mode?: FrustumSplitMode;
|
|
108
|
+
/**
|
|
109
|
+
* Lambda parameter for "practical" split mode. Controls the blend between
|
|
110
|
+
* uniform (0.0) and logarithmic (1.0) split schemes.
|
|
111
|
+
* @default 0.5
|
|
112
|
+
*/
|
|
113
|
+
lambda?: number;
|
|
114
|
+
/**
|
|
115
|
+
* Defines how far the shadow camera is positioned behind the cascade frustum.
|
|
116
|
+
* Larger values help prevent shadow clipping but may reduce precision.
|
|
117
|
+
* @default 200
|
|
118
|
+
*/
|
|
119
|
+
margin?: number;
|
|
120
|
+
/**
|
|
121
|
+
* Enables smooth transitions between shadow cascades to reduce visible seams.
|
|
122
|
+
* @default true
|
|
123
|
+
*/
|
|
124
|
+
fade?: boolean;
|
|
125
|
+
/**
|
|
126
|
+
* Disables cutting off the last cascade at the far plane, providing better
|
|
127
|
+
* shadow coverage for distant objects.
|
|
128
|
+
* @default false
|
|
129
|
+
*/
|
|
130
|
+
disableLastCascadeCutoff?: boolean;
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
export declare const cascadedShadowMapsOptionsDefaults: {
|
|
134
|
+
cascadeCount: number;
|
|
135
|
+
mapSize: number;
|
|
136
|
+
far: number;
|
|
137
|
+
mode: "practical";
|
|
138
|
+
lambda: number;
|
|
139
|
+
margin: number;
|
|
140
|
+
fade: true;
|
|
141
|
+
disableLastCascadeCutoff: false;
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
export declare class CSMHelper extends Group {
|
|
145
|
+
private readonly csm;
|
|
146
|
+
displayFrustum: boolean;
|
|
147
|
+
displayPlanes: boolean;
|
|
148
|
+
displayShadowBounds: boolean;
|
|
149
|
+
private frustumLines;
|
|
150
|
+
private cascadeLines;
|
|
151
|
+
private cascadePlanes;
|
|
152
|
+
private shadowLines;
|
|
153
|
+
constructor(csm: CascadedShadowMaps);
|
|
154
|
+
updateVisibility(): void;
|
|
155
|
+
update(): void;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
declare class FrustumCorners {
|
|
159
|
+
readonly near: Vector3[];
|
|
160
|
+
readonly far: Vector3[];
|
|
161
|
+
constructor();
|
|
162
|
+
constructor(camera: Camera, far: number);
|
|
163
|
+
clone(): FrustumCorners;
|
|
164
|
+
copy(other: FrustumCorners): this;
|
|
165
|
+
setFromCamera(camera: Camera & {
|
|
166
|
+
isOrthographicCamera?: boolean;
|
|
167
|
+
}, far: number): this;
|
|
168
|
+
split(clipDepths: readonly number[], result?: FrustumCorners[]): FrustumCorners[];
|
|
169
|
+
applyMatrix4(matrix: Matrix4): this;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export declare type FrustumSplitFunction = (length: number, near: number, far: number, lambda?: number, result?: number[]) => number[];
|
|
173
|
+
|
|
174
|
+
export declare type FrustumSplitFunctions = {
|
|
175
|
+
uniform: FrustumSplitFunction;
|
|
176
|
+
logarithmic: FrustumSplitFunction;
|
|
177
|
+
practical: FrustumSplitFunction;
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
export declare const frustumSplitFunctions: FrustumSplitFunctions;
|
|
181
|
+
|
|
182
|
+
export declare type FrustumSplitMode = keyof FrustumSplitFunctions;
|
|
183
|
+
|
|
184
|
+
declare class MaterialStates {
|
|
185
|
+
private readonly map;
|
|
186
|
+
setup<T extends Material>(material: T, csm: CascadedShadowMaps): T;
|
|
187
|
+
update(csm: CascadedShadowMaps): void;
|
|
188
|
+
rollback<T extends Material>(material: T): T;
|
|
189
|
+
private rollbackToState;
|
|
190
|
+
dispose(): void;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export declare function overrideFragmentShaderForCSM(fragmentShader: string): string;
|
|
194
|
+
|
|
195
|
+
export declare function splitFrustum(mode: FrustumSplitMode, count: number, near: number, far: number, lambda?: number, result?: number[]): number[];
|
|
196
|
+
|
|
197
|
+
export { }
|