@aura3d/addons 0.0.0-stage → 5.0.1
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/README.md +11 -2
- package/dist/effects/AsciiOutput.d.ts +60 -0
- package/dist/effects/AsciiOutput.d.ts.map +1 -0
- package/dist/effects/AsciiOutput.js +187 -0
- package/dist/effects/AsciiOutput.js.map +1 -0
- package/dist/effects/OutlineOutput.d.ts +58 -0
- package/dist/effects/OutlineOutput.d.ts.map +1 -0
- package/dist/effects/OutlineOutput.js +274 -0
- package/dist/effects/OutlineOutput.js.map +1 -0
- package/dist/effects/StereoOutputs.d.ts +106 -0
- package/dist/effects/StereoOutputs.d.ts.map +1 -0
- package/dist/effects/StereoOutputs.js +315 -0
- package/dist/effects/StereoOutputs.js.map +1 -0
- package/dist/generators/EnvironmentGenerators.d.ts +100 -0
- package/dist/generators/EnvironmentGenerators.d.ts.map +1 -0
- package/dist/generators/EnvironmentGenerators.js +477 -0
- package/dist/generators/EnvironmentGenerators.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/objects/MarchingCubes.d.ts +80 -0
- package/dist/objects/MarchingCubes.d.ts.map +1 -0
- package/dist/objects/MarchingCubes.js +289 -0
- package/dist/objects/MarchingCubes.js.map +1 -0
- package/dist/objects/SpecializedObjects.d.ts +150 -0
- package/dist/objects/SpecializedObjects.d.ts.map +1 -0
- package/dist/objects/SpecializedObjects.js +544 -0
- package/dist/objects/SpecializedObjects.js.map +1 -0
- package/dist/renderers/SpatialDOMRenderer.d.ts +76 -0
- package/dist/renderers/SpatialDOMRenderer.d.ts.map +1 -0
- package/dist/renderers/SpatialDOMRenderer.js +279 -0
- package/dist/renderers/SpatialDOMRenderer.js.map +1 -0
- package/dist/renderers/VectorRenderer.d.ts +98 -0
- package/dist/renderers/VectorRenderer.d.ts.map +1 -0
- package/dist/renderers/VectorRenderer.js +253 -0
- package/dist/renderers/VectorRenderer.js.map +1 -0
- package/dist/tools/Fracture.d.ts +87 -0
- package/dist/tools/Fracture.d.ts.map +1 -0
- package/dist/tools/Fracture.js +422 -0
- package/dist/tools/Fracture.js.map +1 -0
- package/dist/tools/Sculptor.d.ts +84 -0
- package/dist/tools/Sculptor.d.ts.map +1 -0
- package/dist/tools/Sculptor.js +207 -0
- package/dist/tools/Sculptor.js.map +1 -0
- package/dist/tools/TubePainter.d.ts +47 -0
- package/dist/tools/TubePainter.d.ts.map +1 -0
- package/dist/tools/TubePainter.js +170 -0
- package/dist/tools/TubePainter.js.map +1 -0
- package/dist/utils/WorkerPool.d.ts +93 -0
- package/dist/utils/WorkerPool.d.ts.map +1 -0
- package/dist/utils/WorkerPool.js +360 -0
- package/dist/utils/WorkerPool.js.map +1 -0
- package/package.json +114 -3
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editable scalar-field isosurfaces. Each cube is decomposed into six
|
|
3
|
+
* tetrahedra around a common diagonal, so adjacent cubes agree at their shared
|
|
4
|
+
* faces without a borrowed case table. Samples >= isoLevel are inside.
|
|
5
|
+
*
|
|
6
|
+
* The returned arrays are independent snapshots in the shape accepted by
|
|
7
|
+
* `geometry.custom` / `handle.setGeometry`; no GPU resources are owned here.
|
|
8
|
+
*/
|
|
9
|
+
export type IsosurfaceVec3 = readonly [number, number, number];
|
|
10
|
+
export type IsosurfaceColor = readonly [number, number, number, number];
|
|
11
|
+
export interface MarchingCubesOptions {
|
|
12
|
+
/** Number of grid samples along each axis (at least two). */
|
|
13
|
+
readonly resolution: readonly [number, number, number];
|
|
14
|
+
readonly bounds?: {
|
|
15
|
+
readonly min: IsosurfaceVec3;
|
|
16
|
+
readonly max: IsosurfaceVec3;
|
|
17
|
+
};
|
|
18
|
+
readonly isoLevel?: number;
|
|
19
|
+
/** Maximum emitted triangles; generation throws instead of truncating. */
|
|
20
|
+
readonly maxTriangles?: number;
|
|
21
|
+
/** X-fastest scalar samples. Values and colors are copied. */
|
|
22
|
+
readonly values?: ArrayLike<number>;
|
|
23
|
+
/** Optional X-fastest RGBA values in [0, 1], four per sample. */
|
|
24
|
+
readonly colors?: ArrayLike<number>;
|
|
25
|
+
/** Optional X-fastest material slots, one unsigned 16-bit integer per sample. */
|
|
26
|
+
readonly materialIndices?: ArrayLike<number>;
|
|
27
|
+
}
|
|
28
|
+
export interface IsosurfaceSample {
|
|
29
|
+
readonly value: number;
|
|
30
|
+
readonly color?: IsosurfaceColor;
|
|
31
|
+
readonly materialIndex?: number;
|
|
32
|
+
}
|
|
33
|
+
export interface IsosurfaceEdit {
|
|
34
|
+
readonly coordinate: readonly [number, number, number];
|
|
35
|
+
readonly before: IsosurfaceSample;
|
|
36
|
+
readonly after: IsosurfaceSample;
|
|
37
|
+
}
|
|
38
|
+
export interface IsosurfaceGeometry {
|
|
39
|
+
readonly kind: "aura-custom-geometry";
|
|
40
|
+
readonly positions: Float32Array;
|
|
41
|
+
readonly normals: Float32Array;
|
|
42
|
+
readonly indices: Uint32Array;
|
|
43
|
+
readonly colors?: Float32Array;
|
|
44
|
+
readonly groups?: readonly {
|
|
45
|
+
readonly start: number;
|
|
46
|
+
readonly count: number;
|
|
47
|
+
readonly materialIndex: number;
|
|
48
|
+
}[];
|
|
49
|
+
readonly dynamic: true;
|
|
50
|
+
}
|
|
51
|
+
export declare class MarchingCubes {
|
|
52
|
+
readonly resolution: readonly [number, number, number];
|
|
53
|
+
readonly bounds: {
|
|
54
|
+
readonly min: IsosurfaceVec3;
|
|
55
|
+
readonly max: IsosurfaceVec3;
|
|
56
|
+
};
|
|
57
|
+
readonly isoLevel: number;
|
|
58
|
+
readonly maxTriangles: number;
|
|
59
|
+
private values;
|
|
60
|
+
private colors;
|
|
61
|
+
private materialIndices;
|
|
62
|
+
private disposed;
|
|
63
|
+
constructor(options: MarchingCubesOptions);
|
|
64
|
+
getSample(x: number, y: number, z: number): IsosurfaceSample;
|
|
65
|
+
/** Returns an independent edit record that can be replayed or undone. */
|
|
66
|
+
setSample(x: number, y: number, z: number, value: number, color?: IsosurfaceColor, materialIndex?: number): IsosurfaceEdit;
|
|
67
|
+
/** Apply an edit in either direction. Colorless samples restore white if a color grid exists. */
|
|
68
|
+
applyEdit(edit: IsosurfaceEdit, direction?: "undo" | "redo"): void;
|
|
69
|
+
/** Fill is transactional: an invalid callback result leaves the old field unchanged. */
|
|
70
|
+
fill(sample: (position: IsosurfaceVec3, coordinate: readonly [number, number, number]) => number | IsosurfaceSample): void;
|
|
71
|
+
/** Null denotes an empty surface, which cannot be passed to geometry.custom. */
|
|
72
|
+
generate(isoLevel?: number): IsosurfaceGeometry | null;
|
|
73
|
+
dispose(): void;
|
|
74
|
+
private assertLive;
|
|
75
|
+
private index;
|
|
76
|
+
private position;
|
|
77
|
+
private readSample;
|
|
78
|
+
}
|
|
79
|
+
export declare function createMarchingCubes(options: MarchingCubesOptions): MarchingCubes;
|
|
80
|
+
//# sourceMappingURL=MarchingCubes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarchingCubes.d.ts","sourceRoot":"","sources":["../../src/objects/MarchingCubes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
const MAX_SAMPLES = 1_000_000;
|
|
2
|
+
const MAX_TRIANGLES = 250_000;
|
|
3
|
+
const DEFAULT_TRIANGLES = 100_000;
|
|
4
|
+
const CORNERS = [
|
|
5
|
+
[0, 0, 0], [1, 0, 0], [1, 1, 0], [0, 1, 0],
|
|
6
|
+
[0, 0, 1], [1, 0, 1], [1, 1, 1], [0, 1, 1]
|
|
7
|
+
];
|
|
8
|
+
// The chosen body diagonal also fixes the same diagonal on both sides of
|
|
9
|
+
// every shared cube face, avoiding the cracks caused by inconsistent cases.
|
|
10
|
+
const TETRAHEDRA = [
|
|
11
|
+
[0, 1, 2, 6], [0, 2, 3, 6], [0, 3, 7, 6],
|
|
12
|
+
[0, 7, 4, 6], [0, 4, 5, 6], [0, 5, 1, 6]
|
|
13
|
+
];
|
|
14
|
+
function finiteFloat(value, label) {
|
|
15
|
+
if (!Number.isFinite(value) || !Number.isFinite(Math.fround(value)))
|
|
16
|
+
throw new RangeError(`${label} must be a finite float32 value.`);
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
function checkedColor(color) {
|
|
20
|
+
if (color.length !== 4 || color.some((value) => !Number.isFinite(value) || value < 0 || value > 1)) {
|
|
21
|
+
throw new RangeError("Isosurface colors must have four finite channels in [0, 1].");
|
|
22
|
+
}
|
|
23
|
+
return [color[0], color[1], color[2], color[3]];
|
|
24
|
+
}
|
|
25
|
+
function checkedMaterialIndex(value) {
|
|
26
|
+
if (!Number.isInteger(value) || value < 0 || value > 65535)
|
|
27
|
+
throw new RangeError("Material index must be an integer from 0 to 65535.");
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
function normalized(v) {
|
|
31
|
+
const length = Math.hypot(v[0], v[1], v[2]);
|
|
32
|
+
return length > 0 && Number.isFinite(length) ? [v[0] / length, v[1] / length, v[2] / length] : [0, 0, 0];
|
|
33
|
+
}
|
|
34
|
+
export class MarchingCubes {
|
|
35
|
+
resolution;
|
|
36
|
+
bounds;
|
|
37
|
+
isoLevel;
|
|
38
|
+
maxTriangles;
|
|
39
|
+
values;
|
|
40
|
+
colors;
|
|
41
|
+
materialIndices;
|
|
42
|
+
disposed = false;
|
|
43
|
+
constructor(options) {
|
|
44
|
+
const resolution = options.resolution;
|
|
45
|
+
if (!resolution || resolution.length !== 3 || resolution.some((n) => !Number.isInteger(n) || n < 2)) {
|
|
46
|
+
throw new RangeError("MarchingCubes resolution must contain three integers >= 2.");
|
|
47
|
+
}
|
|
48
|
+
const samples = resolution[0] * resolution[1] * resolution[2];
|
|
49
|
+
if (!Number.isSafeInteger(samples) || samples > MAX_SAMPLES)
|
|
50
|
+
throw new RangeError(`MarchingCubes supports at most ${MAX_SAMPLES} samples.`);
|
|
51
|
+
const bounds = options.bounds ?? { min: [-1, -1, -1], max: [1, 1, 1] };
|
|
52
|
+
if (bounds.min.length !== 3 || bounds.max.length !== 3)
|
|
53
|
+
throw new RangeError("MarchingCubes bounds must contain two vec3s.");
|
|
54
|
+
for (let i = 0; i < 3; i += 1) {
|
|
55
|
+
finiteFloat(bounds.min[i], "Bounds minimum");
|
|
56
|
+
finiteFloat(bounds.max[i], "Bounds maximum");
|
|
57
|
+
if (Math.fround(bounds.min[i]) >= Math.fround(bounds.max[i]))
|
|
58
|
+
throw new RangeError("MarchingCubes bounds must have positive float32 extent on each axis.");
|
|
59
|
+
}
|
|
60
|
+
const maxTriangles = options.maxTriangles ?? DEFAULT_TRIANGLES;
|
|
61
|
+
if (!Number.isInteger(maxTriangles) || maxTriangles < 1 || maxTriangles > MAX_TRIANGLES) {
|
|
62
|
+
throw new RangeError(`maxTriangles must be an integer from 1 to ${MAX_TRIANGLES}.`);
|
|
63
|
+
}
|
|
64
|
+
this.resolution = [resolution[0], resolution[1], resolution[2]];
|
|
65
|
+
this.bounds = { min: [bounds.min[0], bounds.min[1], bounds.min[2]], max: [bounds.max[0], bounds.max[1], bounds.max[2]] };
|
|
66
|
+
this.isoLevel = finiteFloat(options.isoLevel ?? 0, "isoLevel");
|
|
67
|
+
this.maxTriangles = maxTriangles;
|
|
68
|
+
this.values = new Float32Array(samples);
|
|
69
|
+
if (options.values !== undefined) {
|
|
70
|
+
if (options.values.length !== samples)
|
|
71
|
+
throw new RangeError(`values must contain exactly ${samples} samples.`);
|
|
72
|
+
for (let i = 0; i < samples; i += 1)
|
|
73
|
+
this.values[i] = finiteFloat(options.values[i], `Sample ${i}`);
|
|
74
|
+
}
|
|
75
|
+
if (options.colors !== undefined) {
|
|
76
|
+
if (options.colors.length !== samples * 4)
|
|
77
|
+
throw new RangeError(`colors must contain exactly ${samples * 4} channels.`);
|
|
78
|
+
this.colors = new Float32Array(samples * 4);
|
|
79
|
+
for (let i = 0; i < samples; i += 1) {
|
|
80
|
+
const color = checkedColor([options.colors[i * 4], options.colors[i * 4 + 1], options.colors[i * 4 + 2], options.colors[i * 4 + 3]]);
|
|
81
|
+
this.colors.set(color, i * 4);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (options.materialIndices !== undefined) {
|
|
85
|
+
if (options.materialIndices.length !== samples)
|
|
86
|
+
throw new RangeError(`materialIndices must contain exactly ${samples} entries.`);
|
|
87
|
+
this.materialIndices = new Uint16Array(samples);
|
|
88
|
+
for (let i = 0; i < samples; i += 1)
|
|
89
|
+
this.materialIndices[i] = checkedMaterialIndex(options.materialIndices[i]);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
getSample(x, y, z) {
|
|
93
|
+
this.assertLive();
|
|
94
|
+
const index = this.index(x, y, z);
|
|
95
|
+
return this.readSample(index);
|
|
96
|
+
}
|
|
97
|
+
/** Returns an independent edit record that can be replayed or undone. */
|
|
98
|
+
setSample(x, y, z, value, color, materialIndex) {
|
|
99
|
+
this.assertLive();
|
|
100
|
+
const index = this.index(x, y, z);
|
|
101
|
+
const next = finiteFloat(value, "Sample value");
|
|
102
|
+
const nextColor = color === undefined ? undefined : checkedColor(color);
|
|
103
|
+
const nextMaterialIndex = materialIndex === undefined ? undefined : checkedMaterialIndex(materialIndex);
|
|
104
|
+
const before = this.readSample(index);
|
|
105
|
+
if (nextColor && !this.colors)
|
|
106
|
+
this.colors = new Float32Array(this.values.length * 4).fill(1);
|
|
107
|
+
if (nextMaterialIndex !== undefined && !this.materialIndices)
|
|
108
|
+
this.materialIndices = new Uint16Array(this.values.length);
|
|
109
|
+
this.values[index] = next;
|
|
110
|
+
if (nextColor)
|
|
111
|
+
this.colors.set(nextColor, index * 4);
|
|
112
|
+
if (nextMaterialIndex !== undefined)
|
|
113
|
+
this.materialIndices[index] = nextMaterialIndex;
|
|
114
|
+
return { coordinate: [x, y, z], before, after: this.readSample(index) };
|
|
115
|
+
}
|
|
116
|
+
/** Apply an edit in either direction. Colorless samples restore white if a color grid exists. */
|
|
117
|
+
applyEdit(edit, direction = "redo") {
|
|
118
|
+
if (direction !== "undo" && direction !== "redo")
|
|
119
|
+
throw new RangeError("Edit direction must be undo or redo.");
|
|
120
|
+
this.assertLive();
|
|
121
|
+
const target = direction === "undo" ? edit.before : edit.after;
|
|
122
|
+
this.setSample(...edit.coordinate, target.value, target.color ?? (this.colors ? [1, 1, 1, 1] : undefined), target.materialIndex ?? (this.materialIndices ? 0 : undefined));
|
|
123
|
+
}
|
|
124
|
+
/** Fill is transactional: an invalid callback result leaves the old field unchanged. */
|
|
125
|
+
fill(sample) {
|
|
126
|
+
this.assertLive();
|
|
127
|
+
const values = new Float32Array(this.values.length);
|
|
128
|
+
let colors = this.colors ? new Float32Array(this.colors) : undefined;
|
|
129
|
+
let materials = this.materialIndices ? new Uint16Array(this.materialIndices) : undefined;
|
|
130
|
+
const [nx, ny, nz] = this.resolution;
|
|
131
|
+
for (let z = 0; z < nz; z += 1)
|
|
132
|
+
for (let y = 0; y < ny; y += 1)
|
|
133
|
+
for (let x = 0; x < nx; x += 1) {
|
|
134
|
+
const index = this.index(x, y, z);
|
|
135
|
+
const result = sample(this.position(x, y, z), [x, y, z]);
|
|
136
|
+
const value = typeof result === "number" ? result : result.value;
|
|
137
|
+
values[index] = finiteFloat(value, `Sample ${index}`);
|
|
138
|
+
if (typeof result !== "number" && result.color !== undefined) {
|
|
139
|
+
const color = checkedColor(result.color);
|
|
140
|
+
if (!colors)
|
|
141
|
+
colors = new Float32Array(this.values.length * 4).fill(1);
|
|
142
|
+
colors.set(color, index * 4);
|
|
143
|
+
}
|
|
144
|
+
if (typeof result !== "number" && result.materialIndex !== undefined) {
|
|
145
|
+
const materialIndex = checkedMaterialIndex(result.materialIndex);
|
|
146
|
+
if (!materials)
|
|
147
|
+
materials = new Uint16Array(this.values.length);
|
|
148
|
+
materials[index] = materialIndex;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
this.values = values;
|
|
152
|
+
this.colors = colors;
|
|
153
|
+
this.materialIndices = materials;
|
|
154
|
+
}
|
|
155
|
+
/** Null denotes an empty surface, which cannot be passed to geometry.custom. */
|
|
156
|
+
generate(isoLevel = this.isoLevel) {
|
|
157
|
+
this.assertLive();
|
|
158
|
+
finiteFloat(isoLevel, "isoLevel");
|
|
159
|
+
const [nx, ny, nz] = this.resolution;
|
|
160
|
+
const gradients = new Float32Array(this.values.length * 3);
|
|
161
|
+
const spacing = [0, 1, 2].map((axis) => (this.bounds.max[axis] - this.bounds.min[axis]) / (this.resolution[axis] - 1));
|
|
162
|
+
for (let z = 0; z < nz; z += 1)
|
|
163
|
+
for (let y = 0; y < ny; y += 1)
|
|
164
|
+
for (let x = 0; x < nx; x += 1) {
|
|
165
|
+
const coords = [x, y, z];
|
|
166
|
+
const at = this.index(x, y, z) * 3;
|
|
167
|
+
for (let axis = 0; axis < 3; axis += 1) {
|
|
168
|
+
const lo = [...coords];
|
|
169
|
+
const hi = [...coords];
|
|
170
|
+
lo[axis] = Math.max(0, coords[axis] - 1);
|
|
171
|
+
hi[axis] = Math.min(this.resolution[axis] - 1, coords[axis] + 1);
|
|
172
|
+
const a = this.values[this.index(lo[0], lo[1], lo[2])];
|
|
173
|
+
const b = this.values[this.index(hi[0], hi[1], hi[2])];
|
|
174
|
+
// The negative gradient points from the inside to the outside.
|
|
175
|
+
const gradient = -(b - a) / ((hi[axis] - lo[axis]) * spacing[axis]);
|
|
176
|
+
// Normalize later; store a bounded value so float32 cannot overflow.
|
|
177
|
+
gradients[at + axis] = Math.max(-3.4e38, Math.min(3.4e38, gradient));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const positions = [];
|
|
181
|
+
const normals = [];
|
|
182
|
+
const colors = [];
|
|
183
|
+
const groups = [];
|
|
184
|
+
const emit = (a, b, c, outward, materialIndex) => {
|
|
185
|
+
const ab = [b.position[0] - a.position[0], b.position[1] - a.position[1], b.position[2] - a.position[2]];
|
|
186
|
+
const ac = [c.position[0] - a.position[0], c.position[1] - a.position[1], c.position[2] - a.position[2]];
|
|
187
|
+
const face = [ab[1] * ac[2] - ab[2] * ac[1], ab[2] * ac[0] - ab[0] * ac[2], ab[0] * ac[1] - ab[1] * ac[0]];
|
|
188
|
+
const faceLength = Math.hypot(...face);
|
|
189
|
+
if (!(faceLength > 0))
|
|
190
|
+
return;
|
|
191
|
+
if (positions.length / 9 >= this.maxTriangles)
|
|
192
|
+
throw new RangeError(`MarchingCubes exceeded maxTriangles (${this.maxTriangles}).`);
|
|
193
|
+
if (this.materialIndices) {
|
|
194
|
+
const last = groups[groups.length - 1];
|
|
195
|
+
if (last?.materialIndex === materialIndex)
|
|
196
|
+
last.count += 3;
|
|
197
|
+
else
|
|
198
|
+
groups.push({ start: positions.length / 3, count: 3, materialIndex });
|
|
199
|
+
}
|
|
200
|
+
const desired = normalized([a.normal[0] + b.normal[0] + c.normal[0], a.normal[1] + b.normal[1] + c.normal[1], a.normal[2] + b.normal[2] + c.normal[2]]);
|
|
201
|
+
const direction = Math.hypot(...desired) > 0 ? desired : outward;
|
|
202
|
+
const reverse = face[0] * direction[0] + face[1] * direction[1] + face[2] * direction[2] < 0;
|
|
203
|
+
const faceNormal = normalized(reverse ? [-face[0], -face[1], -face[2]] : face);
|
|
204
|
+
for (const v of reverse ? [a, c, b] : [a, b, c]) {
|
|
205
|
+
positions.push(...v.position);
|
|
206
|
+
const n = normalized(v.normal);
|
|
207
|
+
normals.push(...(Math.hypot(...n) > 0 ? n : faceNormal));
|
|
208
|
+
if (this.colors)
|
|
209
|
+
colors.push(...v.color);
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
for (let z = 0; z < nz - 1; z += 1)
|
|
213
|
+
for (let y = 0; y < ny - 1; y += 1)
|
|
214
|
+
for (let x = 0; x < nx - 1; x += 1) {
|
|
215
|
+
const ids = CORNERS.map(([dx, dy, dz]) => this.index(x + dx, y + dy, z + dz));
|
|
216
|
+
const edge = (a, b) => {
|
|
217
|
+
const ia = ids[a];
|
|
218
|
+
const ib = ids[b];
|
|
219
|
+
const t = Math.max(0, Math.min(1, (isoLevel - this.values[ia]) / (this.values[ib] - this.values[ia])));
|
|
220
|
+
const ca = CORNERS[a];
|
|
221
|
+
const cb = CORNERS[b];
|
|
222
|
+
const pa = this.position(x + ca[0], y + ca[1], z + ca[2]);
|
|
223
|
+
const pb = this.position(x + cb[0], y + cb[1], z + cb[2]);
|
|
224
|
+
const mix = (u, v) => u + (v - u) * t;
|
|
225
|
+
const vertex = {
|
|
226
|
+
position: [mix(pa[0], pb[0]), mix(pa[1], pb[1]), mix(pa[2], pb[2])],
|
|
227
|
+
normal: [0, 1, 2].map((axis) => mix(gradients[ia * 3 + axis], gradients[ib * 3 + axis])),
|
|
228
|
+
...(this.colors ? { color: [0, 1, 2, 3].map((axis) => mix(this.colors[ia * 4 + axis], this.colors[ib * 4 + axis])) } : {})
|
|
229
|
+
};
|
|
230
|
+
return vertex;
|
|
231
|
+
};
|
|
232
|
+
for (const tetra of TETRAHEDRA) {
|
|
233
|
+
const inside = tetra.filter((corner) => this.values[ids[corner]] >= isoLevel);
|
|
234
|
+
const outside = tetra.filter((corner) => this.values[ids[corner]] < isoLevel);
|
|
235
|
+
if (!inside.length || !outside.length)
|
|
236
|
+
continue;
|
|
237
|
+
const center = (corners) => [0, 1, 2].map((axis) => corners.reduce((sum, corner) => sum + CORNERS[corner][axis], 0) / corners.length * spacing[axis]);
|
|
238
|
+
const ci = center(inside);
|
|
239
|
+
const co = center(outside);
|
|
240
|
+
const outward = normalized([co[0] - ci[0], co[1] - ci[1], co[2] - ci[2]]);
|
|
241
|
+
// Choose the nearest interior sample; ties follow stable tetrahedron order.
|
|
242
|
+
const materialCorner = inside.reduce((best, corner) => this.values[ids[corner]] < this.values[ids[best]] ? corner : best);
|
|
243
|
+
const materialIndex = this.materialIndices?.[ids[materialCorner]] ?? 0;
|
|
244
|
+
if (inside.length === 1) {
|
|
245
|
+
emit(edge(inside[0], outside[0]), edge(inside[0], outside[1]), edge(inside[0], outside[2]), outward, materialIndex);
|
|
246
|
+
}
|
|
247
|
+
else if (outside.length === 1) {
|
|
248
|
+
emit(edge(outside[0], inside[0]), edge(outside[0], inside[1]), edge(outside[0], inside[2]), outward, materialIndex);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
const a = edge(inside[0], outside[0]);
|
|
252
|
+
const b = edge(inside[0], outside[1]);
|
|
253
|
+
const c = edge(inside[1], outside[1]);
|
|
254
|
+
const d = edge(inside[1], outside[0]);
|
|
255
|
+
emit(a, b, c, outward, materialIndex);
|
|
256
|
+
emit(a, c, d, outward, materialIndex);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
if (!positions.length)
|
|
261
|
+
return null;
|
|
262
|
+
const indices = Uint32Array.from({ length: positions.length / 3 }, (_, i) => i);
|
|
263
|
+
return { kind: "aura-custom-geometry", positions: Float32Array.from(positions), normals: Float32Array.from(normals), indices, ...(this.colors ? { colors: Float32Array.from(colors) } : {}), ...(this.materialIndices ? { groups } : {}), dynamic: true };
|
|
264
|
+
}
|
|
265
|
+
dispose() {
|
|
266
|
+
if (this.disposed)
|
|
267
|
+
return;
|
|
268
|
+
this.disposed = true;
|
|
269
|
+
this.values = new Float32Array(0);
|
|
270
|
+
this.colors = undefined;
|
|
271
|
+
this.materialIndices = undefined;
|
|
272
|
+
}
|
|
273
|
+
assertLive() { if (this.disposed)
|
|
274
|
+
throw new Error("MarchingCubes has been disposed."); }
|
|
275
|
+
index(x, y, z) {
|
|
276
|
+
const [nx, ny, nz] = this.resolution;
|
|
277
|
+
if (![x, y, z].every(Number.isInteger) || x < 0 || x >= nx || y < 0 || y >= ny || z < 0 || z >= nz)
|
|
278
|
+
throw new RangeError("Sample coordinate is outside the scalar field.");
|
|
279
|
+
return x + nx * (y + ny * z);
|
|
280
|
+
}
|
|
281
|
+
position(x, y, z) {
|
|
282
|
+
return [x, y, z].map((coordinate, axis) => this.bounds.min[axis] + (this.bounds.max[axis] - this.bounds.min[axis]) * coordinate / (this.resolution[axis] - 1));
|
|
283
|
+
}
|
|
284
|
+
readSample(index) {
|
|
285
|
+
return { value: this.values[index], ...(this.colors ? { color: [this.colors[index * 4], this.colors[index * 4 + 1], this.colors[index * 4 + 2], this.colors[index * 4 + 3]] } : {}), ...(this.materialIndices ? { materialIndex: this.materialIndices[index] } : {}) };
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
export function createMarchingCubes(options) { return new MarchingCubes(options); }
|
|
289
|
+
//# sourceMappingURL=MarchingCubes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarchingCubes.js","sourceRoot":"","sources":["../../src/objects/MarchingCubes.ts"],"names":[],"mappings":"AAgDA,MAAM,WAAW,GAAG,SAAS,CAAC;AAC9B,MAAM,aAAa,GAAG,OAAO,CAAC;AAC9B,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAClC,MAAM,OAAO,GAA8B;IACzC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAC3C,CAAC;AACF,yEAAyE;AACzE,4EAA4E;AAC5E,MAAM,UAAU,GAAG;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;CAChC,CAAC;AAQX,SAAS,WAAW,CAAC,KAAa,EAAE,KAAa;IAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,GAAG,KAAK,kCAAkC,CAAC,CAAC;IACtI,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,KAAsB;IAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QACnG,MAAM,IAAI,UAAU,CAAC,6DAA6D,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAa;IACzC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,KAAK;QAAE,MAAM,IAAI,UAAU,CAAC,oDAAoD,CAAC,CAAC;IACvI,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,CAAiB;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,OAAO,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3G,CAAC;AAED,MAAM,OAAO,aAAa;IACf,UAAU,CAAoC;IAC9C,MAAM,CAAiE;IACvE,QAAQ,CAAS;IACjB,YAAY,CAAS;IACtB,MAAM,CAAe;IACrB,MAAM,CAA2B;IACjC,eAAe,CAA0B;IACzC,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAAY,OAA6B;QACvC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACtC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACpG,MAAM,IAAI,UAAU,CAAC,4DAA4D,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,WAAW;YAAE,MAAM,IAAI,UAAU,CAAC,kCAAkC,WAAW,WAAW,CAAC,CAAC;QAC5I,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,EAAE,CAAC;QACzF,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,8CAA8C,CAAC,CAAC;QAC7H,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,gBAAgB,CAAC,CAAC;YAC9C,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAE,EAAE,gBAAgB,CAAC,CAAC;YAC9C,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;gBAAE,MAAM,IAAI,UAAU,CAAC,sEAAsE,CAAC,CAAC;QAC/J,CAAC;QACD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,iBAAiB,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC,IAAI,YAAY,GAAG,aAAa,EAAE,CAAC;YACxF,MAAM,IAAI,UAAU,CAAC,6CAA6C,aAAa,GAAG,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACzH,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;QAC/D,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO;gBAAE,MAAM,IAAI,UAAU,CAAC,+BAA+B,OAAO,WAAW,CAAC,CAAC;YAC/G,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;QACvG,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,GAAG,CAAC;gBAAE,MAAM,IAAI,UAAU,CAAC,+BAA+B,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC;YACxH,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpC,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC;gBACzI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YAC1C,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,KAAK,OAAO;gBAAE,MAAM,IAAI,UAAU,CAAC,wCAAwC,OAAO,WAAW,CAAC,CAAC;YACjI,IAAI,CAAC,eAAe,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;YAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC;gBAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAE,CAAC,CAAC;QACnH,CAAC;IACH,CAAC;IAED,SAAS,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,yEAAyE;IACzE,SAAS,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,KAAuB,EAAE,aAAsB;QACvG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACxE,MAAM,iBAAiB,GAAG,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;QACxG,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9F,IAAI,iBAAiB,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,IAAI,CAAC,eAAe,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QAC1B,IAAI,SAAS;YAAE,IAAI,CAAC,MAAO,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,iBAAiB,KAAK,SAAS;YAAE,IAAI,CAAC,eAAgB,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC;QACtF,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1E,CAAC;IAED,iGAAiG;IACjG,SAAS,CAAC,IAAoB,EAAE,YAA6B,MAAM;QACjE,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM;YAAE,MAAM,IAAI,UAAU,CAAC,sCAAsC,CAAC,CAAC;QAC/G,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/D,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7K,CAAC;IAED,wFAAwF;IACxF,IAAI,CAAC,MAA8G;QACjH,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,MAAM,GAA6B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/F,IAAI,SAAS,GAA4B,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClH,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC;YAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC;gBAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC/F,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBAClC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;oBACzD,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;oBACjE,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,EAAE,UAAU,KAAK,EAAE,CAAC,CAAC;oBACtD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;wBAC7D,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBACzC,IAAI,CAAC,MAAM;4BAAE,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACvE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBAC/B,CAAC;oBACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;wBACrE,MAAM,aAAa,GAAG,oBAAoB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;wBACjE,IAAI,CAAC,SAAS;4BAAE,SAAS,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;wBAChE,SAAS,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC;oBACnC,CAAC;gBACH,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;IACnC,CAAC;IAED,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;QAC/B,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAClC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC1H,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC;YAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC;gBAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC/F,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACzB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;oBACnC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;wBACvC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;wBAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;wBAC/C,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAE,GAAG,CAAC,CAAC,CAAC;wBAC1C,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAE,GAAG,CAAC,EAAE,MAAM,CAAC,IAAI,CAAE,GAAG,CAAC,CAAC,CAAC;wBACnE,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC;wBAC3D,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC;wBAC3D,+DAA+D;wBAC/D,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAE,GAAG,EAAE,CAAC,IAAI,CAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAE,CAAC,CAAC;wBACvE,qEAAqE;wBACrE,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;oBACvE,CAAC;gBACH,CAAC;QACD,MAAM,SAAS,GAAa,EAAE,CAAC;QAAC,MAAM,OAAO,GAAa,EAAE,CAAC;QAAC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC1F,MAAM,MAAM,GAA8D,EAAE,CAAC;QAC7E,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,OAAuB,EAAE,aAAqB,EAAQ,EAAE;YACrG,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACzG,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACzG,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC,CAAC,CAAE,GAAG,EAAE,CAAC,CAAC,CAAE,CAAU,CAAC;YAChI,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;gBAAE,OAAO;YAC9B,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY;gBAAE,MAAM,IAAI,UAAU,CAAC,wCAAwC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC;YACnI,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACvC,IAAI,IAAI,EAAE,aAAa,KAAK,aAAa;oBAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;;oBACtD,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;YAC7E,CAAC;YACD,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxJ,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YACjE,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7F,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC/E,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAChD,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;gBAC9B,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;gBACzD,IAAI,IAAI,CAAC,MAAM;oBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAM,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC,CAAC;QACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;YAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;gBAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3G,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBAC9E,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE;wBAC5C,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;wBAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;wBACvC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAE,CAAC,CAAC,CAAC,CAAC;wBAC1G,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;wBAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;wBAC/C,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC1D,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC1D,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;wBACtD,MAAM,MAAM,GAAW;4BACrB,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;4BACnE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAE,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAE,CAAC,CAA6B;4BACtH,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAO,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAE,EAAE,IAAI,CAAC,MAAO,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAE,CAAC,CAAqC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBACnK,CAAC;wBACF,OAAO,MAAM,CAAC;oBAChB,CAAC,CAAC;oBACF,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;wBAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAE,CAAE,IAAI,QAAQ,CAAC,CAAC;wBAChF,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAE,CAAE,GAAG,QAAQ,CAAC,CAAC;wBAChF,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM;4BAAE,SAAS;wBAChD,MAAM,MAAM,GAAG,CAAC,OAA0B,EAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAE,CAAC,IAAI,CAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAE,CAA8B,CAAC;wBACzN,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;wBAAC,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;wBACtD,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC1E,4EAA4E;wBAC5E,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAE,CAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,CAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;wBAC9H,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,cAAc,CAAE,CAAC,IAAI,CAAC,CAAC;wBACxE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BACxB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;wBAC5H,CAAC;6BAAM,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BAChC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,EAAE,MAAM,CAAC,CAAC,CAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,EAAE,MAAM,CAAC,CAAC,CAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,EAAE,MAAM,CAAC,CAAC,CAAE,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;wBAC5H,CAAC;6BAAM,CAAC;4BACN,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC;4BAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC;4BACjF,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC;4BAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,EAAE,OAAO,CAAC,CAAC,CAAE,CAAC,CAAC;4BACjF,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;4BAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;wBAC/E,CAAC;oBACH,CAAC;gBACH,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAChF,OAAO,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5P,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;IACnC,CAAC;IAEO,UAAU,KAAW,IAAI,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC;IAC9F,KAAK,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAC3C,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,MAAM,IAAI,UAAU,CAAC,gDAAgD,CAAC,CAAC;QAC3K,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/B,CAAC;IACO,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAC9C,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAE,GAAG,CAAC,CAAC,CAA8B,CAAC;IAClM,CAAC;IACO,UAAU,CAAC,KAAa;QAC9B,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAE,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAE,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAE,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAE,CAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAClS,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,OAA6B,IAAmB,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/** Optional scene objects built on Aura3D's existing sky, geometry and textures. */
|
|
2
|
+
import { geometry, sky, type AuraAssetRef, type AuraCustomGeometrySpec, type AuraSceneNode, type AuraTextureRef, type TextureHandle } from "@aura3d/engine";
|
|
3
|
+
export type ObjectVec3 = readonly [number, number, number];
|
|
4
|
+
export type ObjectColor = readonly [number, number, number];
|
|
5
|
+
type GeometryBuilder = ReturnType<typeof geometry.custom>;
|
|
6
|
+
export interface ObjectBounds {
|
|
7
|
+
readonly min: ObjectVec3;
|
|
8
|
+
readonly max: ObjectVec3;
|
|
9
|
+
}
|
|
10
|
+
export interface GroundedSkyOptions {
|
|
11
|
+
readonly name?: string;
|
|
12
|
+
readonly hour?: number;
|
|
13
|
+
readonly center?: ObjectVec3;
|
|
14
|
+
readonly radius?: number;
|
|
15
|
+
readonly segments?: number;
|
|
16
|
+
/** Linear RGB; the outer edge fades towards the day/night horizon. */
|
|
17
|
+
readonly groundColor?: ObjectColor;
|
|
18
|
+
/** Optional equirectangular environment to project onto the dome and ground. */
|
|
19
|
+
readonly panorama?: AuraTextureRef | AuraAssetRef<"texture">;
|
|
20
|
+
/** Capture-camera height above the ground; required to project a panorama. */
|
|
21
|
+
readonly cameraHeight?: number;
|
|
22
|
+
readonly rings?: number;
|
|
23
|
+
}
|
|
24
|
+
export interface GroundedSky {
|
|
25
|
+
readonly nodes: readonly AuraSceneNode[];
|
|
26
|
+
readonly sky: ReturnType<typeof sky.gradient>;
|
|
27
|
+
readonly ground: GeometryBuilder;
|
|
28
|
+
readonly dayFactor: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A gradient sky with a horizon-fading ground disc, or an equirectangular
|
|
32
|
+
* panorama projected onto an inward dome, skirt and horizontal ground. The
|
|
33
|
+
* panorama projection assumes a level capture camera at cameraHeight, is
|
|
34
|
+
* bounded by radius and is not physical terrain. Textures remain caller-owned.
|
|
35
|
+
* Ground materials supply both the GLSL and WGSL paths.
|
|
36
|
+
*/
|
|
37
|
+
export declare function createGroundedSky(options?: GroundedSkyOptions): GroundedSky;
|
|
38
|
+
interface ShadowProjectionCommonOptions {
|
|
39
|
+
readonly name?: string;
|
|
40
|
+
/** Direction of light travel, toward the horizontal receiver. */
|
|
41
|
+
readonly lightDirection: ObjectVec3;
|
|
42
|
+
readonly receiverY?: number;
|
|
43
|
+
readonly offset?: number;
|
|
44
|
+
readonly color?: ObjectColor;
|
|
45
|
+
readonly opacity?: number;
|
|
46
|
+
/** Limits extremely shallow light projections (default 10000 world units). */
|
|
47
|
+
readonly maxProjectionDistance?: number;
|
|
48
|
+
}
|
|
49
|
+
/** Legacy projected-bounds path. */
|
|
50
|
+
export interface ShadowProjectionObjectOptions extends ShadowProjectionCommonOptions {
|
|
51
|
+
readonly casterBounds: ObjectBounds;
|
|
52
|
+
readonly casterGeometry?: never;
|
|
53
|
+
}
|
|
54
|
+
/** Static triangle geometry is projected without filling its concavities or holes. */
|
|
55
|
+
export interface ShadowGeometryProjectionObjectOptions extends ShadowProjectionCommonOptions {
|
|
56
|
+
readonly casterGeometry: AuraCustomGeometrySpec;
|
|
57
|
+
readonly casterBounds?: never;
|
|
58
|
+
/** Optional column-major affine transform from caster-local to world coordinates. */
|
|
59
|
+
readonly casterMatrix?: readonly number[] | Float32Array;
|
|
60
|
+
/** Optional bounded work limits, passed to the projection builder. */
|
|
61
|
+
readonly maxTriangles?: number;
|
|
62
|
+
readonly maxOverlapChecks?: number;
|
|
63
|
+
}
|
|
64
|
+
export interface ShadowProjectionObject {
|
|
65
|
+
readonly node: GeometryBuilder;
|
|
66
|
+
readonly geometry: AuraCustomGeometrySpec;
|
|
67
|
+
/** Projected hull points for bounds input, or projected triangle vertices for geometry input. */
|
|
68
|
+
readonly points: readonly ObjectVec3[];
|
|
69
|
+
readonly bounds: ObjectBounds;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Project either caster bounds or static triangle geometry onto a horizontal
|
|
73
|
+
* receiver. Bounds input remains a planar hull approximation. Geometry input
|
|
74
|
+
* preserves triangle coverage, including concavities and holes, and rejects
|
|
75
|
+
* overlapping projected triangles instead of double-blending their alpha.
|
|
76
|
+
* Geometry is a snapshot: update it explicitly after changing the caster or
|
|
77
|
+
* its transform. Morphing, partial draw ranges and grouped materials are not
|
|
78
|
+
* supported by the geometry path. Neither path replaces shadow maps.
|
|
79
|
+
*/
|
|
80
|
+
export declare function createShadowProjection(options: ShadowProjectionObjectOptions | ShadowGeometryProjectionObjectOptions): ShadowProjectionObject;
|
|
81
|
+
export type SliceAxis = "x" | "y" | "z";
|
|
82
|
+
export interface VolumeSliceOptions {
|
|
83
|
+
readonly name?: string;
|
|
84
|
+
/** X-fastest scalar values, copied at construction. */
|
|
85
|
+
readonly dimensions: readonly [number, number, number];
|
|
86
|
+
readonly values: ArrayLike<number>;
|
|
87
|
+
readonly axis?: SliceAxis;
|
|
88
|
+
readonly index?: number;
|
|
89
|
+
readonly bounds?: ObjectBounds;
|
|
90
|
+
/** Scalar window mapped linearly to grayscale. */
|
|
91
|
+
readonly window?: readonly [number, number];
|
|
92
|
+
readonly opacity?: number;
|
|
93
|
+
}
|
|
94
|
+
/** Compatible with a mounted Aura runtime handle's setGeometry method. */
|
|
95
|
+
export interface VolumeSliceGeometry {
|
|
96
|
+
readonly kind: "aura-custom-geometry";
|
|
97
|
+
readonly positions: Float32Array;
|
|
98
|
+
readonly normals: Float32Array;
|
|
99
|
+
readonly uvs: Float32Array;
|
|
100
|
+
readonly indices: Uint32Array;
|
|
101
|
+
readonly dynamic: true;
|
|
102
|
+
}
|
|
103
|
+
export interface VolumeSliceHandle {
|
|
104
|
+
setGeometry?(spec: VolumeSliceGeometry): unknown;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* An editable 2D slice of a bounded scalar volume. A live data texture is owned
|
|
108
|
+
* by the object, while the scene and any runtime handle remain caller-owned.
|
|
109
|
+
* `setSlice` updates bound runtime geometry and uploads new pixels on the next
|
|
110
|
+
* render; without a bound handle, use its returned geometry with setGeometry.
|
|
111
|
+
*/
|
|
112
|
+
export declare class VolumeSlice {
|
|
113
|
+
readonly dimensions: readonly [number, number, number];
|
|
114
|
+
readonly axis: SliceAxis;
|
|
115
|
+
readonly bounds: ObjectBounds;
|
|
116
|
+
private ownedTexture;
|
|
117
|
+
private ownedNode;
|
|
118
|
+
readonly width: number;
|
|
119
|
+
readonly height: number;
|
|
120
|
+
private values;
|
|
121
|
+
private pixels;
|
|
122
|
+
private sliceIndex;
|
|
123
|
+
private window;
|
|
124
|
+
private opacity;
|
|
125
|
+
private handle;
|
|
126
|
+
private disposed;
|
|
127
|
+
constructor(options: VolumeSliceOptions);
|
|
128
|
+
/** Owned references become unavailable after disposal. */
|
|
129
|
+
get texture(): TextureHandle;
|
|
130
|
+
get node(): GeometryBuilder;
|
|
131
|
+
get index(): number;
|
|
132
|
+
/** A copy, suitable for diagnostics without mutating the uploaded texture. */
|
|
133
|
+
getPixels(): Uint8Array;
|
|
134
|
+
bind(handle: VolumeSliceHandle): void;
|
|
135
|
+
unbind(): void;
|
|
136
|
+
setSlice(index: number): VolumeSliceGeometry;
|
|
137
|
+
setWindow(window: readonly [number, number]): void;
|
|
138
|
+
setOpacity(opacity: number): void;
|
|
139
|
+
setValues(values: ArrayLike<number>): void;
|
|
140
|
+
dispose(): void;
|
|
141
|
+
private assertLive;
|
|
142
|
+
private checkedIndex;
|
|
143
|
+
private checkedWindow;
|
|
144
|
+
private checkedValues;
|
|
145
|
+
private fillPixels;
|
|
146
|
+
private geometry;
|
|
147
|
+
}
|
|
148
|
+
export declare function createVolumeSlice(options: VolumeSliceOptions): VolumeSlice;
|
|
149
|
+
export {};
|
|
150
|
+
//# sourceMappingURL=SpecializedObjects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpecializedObjects.d.ts","sourceRoot":"","sources":["../../src/objects/SpecializedObjects.ts"],"names":[],"mappings":"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"}
|