@yali-engine/water 0.0.0-stage → 0.12.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.
@@ -0,0 +1,50 @@
1
+ import type { PipelineCache } from '@yali-engine/render';
2
+ import { type SeaState } from './spectrum.ts';
3
+ /** What `WaterWaves` takes. */
4
+ export interface WaterWavesOptions extends SeaState {
5
+ /** Texels a side of every cascade (a power of two, 32–256; default 128: the Medium tier's). */
6
+ readonly size?: number;
7
+ /** Each cascade's tile, metres (default [250, 37, 7]: the research's three disjoint bands). */
8
+ readonly tiles?: readonly number[];
9
+ /** How far the horizontal displacement goes, 0–1 (choppy waves; default 0.8). */
10
+ readonly choppiness?: number;
11
+ }
12
+ /**
13
+ * The FFT cascades of one sea. `encode` each frame (any compute pass); read `displacement` and `slopes` (texture arrays, a
14
+ * layer per cascade) after it.
15
+ *
16
+ * @example
17
+ * const waves = new WaterWaves(device, { wind: 12, direction: 0.3 });
18
+ * await waves.init();
19
+ * // each frame:
20
+ * waves.encode(pass, timeSeconds);
21
+ */
22
+ export declare class WaterWaves {
23
+ #private;
24
+ readonly device: GPUDevice;
25
+ readonly size: number;
26
+ readonly tiles: readonly number[];
27
+ choppiness: number;
28
+ /** The Jacobian below which the surface makes foam (ADR-0218; the water sets it from its `foamThreshold`). */
29
+ foamThreshold: number;
30
+ /**
31
+ * Each cascade's slope variance (per axis, its expected ∂h/∂x²): what the surface folds into roughness where a pixel
32
+ * cannot resolve the cascade.
33
+ */
34
+ readonly slopeVariance: number[];
35
+ readonly displacement: GPUTexture;
36
+ readonly slopes: GPUTexture;
37
+ constructor(device: GPUDevice, o?: WaterWavesOptions);
38
+ /**
39
+ * A new sea on the same cascades (ADR-0198): the spectra rebuilt for `sea`'s wind, fetch and direction and uploaded;
40
+ * the waves change at the next `encode` (no pipeline or texture is remade).
41
+ */
42
+ reseed(sea: SeaState): void;
43
+ /** Builds the pipelines, through the render plugin's cache when given (`size` sets their override constants). */
44
+ init(cache?: PipelineCache): Promise<void>;
45
+ /** Every cascade at time `seconds`: evolve, the FFT along rows then columns, pack into its layer. */
46
+ encode(pass: GPUComputePassEncoder, seconds: number): void;
47
+ /** The bytes this sea holds on the GPU: spectra, the FFT's two buffers, and the two texture arrays. */
48
+ get gpuBytes(): number;
49
+ destroy(): void;
50
+ }
package/dist/waves.js ADDED
@@ -0,0 +1,173 @@
1
+ import { cascadeBands, h0Table } from "./spectrum.js";
2
+ import { waterWaves } from "./water-shaders.gen.js";
3
+ /** Fields the FFT carries (eight real ones, two to a complex field). */
4
+ const FIELDS = 4;
5
+ /** STORAGE | COPY_DST | COPY_SRC (to read a cascade back for checking). */
6
+ const STORAGE = 0x80 | 0x08 | 0x04;
7
+ /** UNIFORM | COPY_DST. */
8
+ const UNIFORM = 0x40 | 0x08;
9
+ /** STORAGE_BINDING | TEXTURE_BINDING | COPY_SRC. */
10
+ const TEXTURE = 0x08 | 0x04 | 0x01;
11
+ /** One pass's parameters in their own 256-byte slot: per cascade, rows and columns. */
12
+ const SLOT = 256;
13
+ /**
14
+ * The FFT cascades of one sea. `encode` each frame (any compute pass); read `displacement` and `slopes` (texture arrays, a
15
+ * layer per cascade) after it.
16
+ *
17
+ * @example
18
+ * const waves = new WaterWaves(device, { wind: 12, direction: 0.3 });
19
+ * await waves.init();
20
+ * // each frame:
21
+ * waves.encode(pass, timeSeconds);
22
+ */
23
+ export class WaterWaves {
24
+ device;
25
+ size;
26
+ tiles;
27
+ choppiness;
28
+ /** The Jacobian below which the surface makes foam (ADR-0218; the water sets it from its `foamThreshold`). */
29
+ foamThreshold = 0.6;
30
+ /** The persistent foam per texel of every cascade (ADR-0218). */
31
+ #foam;
32
+ #lastSeconds = null;
33
+ /**
34
+ * Each cascade's slope variance (per axis, its expected ∂h/∂x²): what the surface folds into roughness where a pixel
35
+ * cannot resolve the cascade.
36
+ */
37
+ slopeVariance = [];
38
+ displacement;
39
+ slopes;
40
+ #cascades;
41
+ #bands = [];
42
+ #params;
43
+ #data = new ArrayBuffer(SLOT);
44
+ #evolve;
45
+ #fft;
46
+ #pack;
47
+ #groups = [];
48
+ constructor(device, o = {}) {
49
+ const size = o.size ?? 128;
50
+ if (!(size >= 32 && size <= 256 && (size & (size - 1)) === 0)) {
51
+ throw Object.assign(new Error(`WATER_SIZE: ${size} texels a side is not a power of two from 32 to 256.`), { code: 'WATER_SIZE', path: 'size' });
52
+ }
53
+ const tiles = o.tiles ?? [250, 37, 7];
54
+ if (tiles.length < 1 || tiles.some((t) => !(t > 0)))
55
+ throw Object.assign(new Error('WATER_TILES: every cascade needs a tile size above 0 m.'), { code: 'WATER_TILES', path: 'tiles' });
56
+ this.device = device;
57
+ this.size = size;
58
+ this.tiles = tiles;
59
+ this.choppiness = o.choppiness ?? 0.8;
60
+ const bands = cascadeBands(tiles, size);
61
+ this.#cascades = tiles.map((tile, c) => {
62
+ const h0 = device.createBuffer({ label: `yali:water:h0-${c}`, size: size * size * 16, usage: STORAGE });
63
+ return {
64
+ tile,
65
+ h0,
66
+ a: device.createBuffer({ label: `yali:water:a-${c}`, size: FIELDS * size * size * 8, usage: STORAGE }),
67
+ b: device.createBuffer({ label: `yali:water:b-${c}`, size: FIELDS * size * size * 8, usage: STORAGE }),
68
+ };
69
+ });
70
+ this.#bands = bands;
71
+ this.reseed(o);
72
+ // Per cascade three slots: evolve and rows (axis 0), columns (axis 1), pack (axis 0).
73
+ this.#params = device.createBuffer({ label: 'yali:water:params', size: SLOT * 3 * tiles.length, usage: UNIFORM });
74
+ const layers = { width: size, height: size, depthOrArrayLayers: tiles.length };
75
+ this.#foam = device.createBuffer({ label: 'yali:water:foam', size: size * size * tiles.length * 4, usage: STORAGE });
76
+ this.displacement = device.createTexture({ label: 'yali:water:displacement', size: layers, format: 'rgba16float', usage: TEXTURE });
77
+ this.slopes = device.createTexture({ label: 'yali:water:slopes', size: layers, format: 'rgba16float', usage: TEXTURE });
78
+ }
79
+ /**
80
+ * A new sea on the same cascades (ADR-0198): the spectra rebuilt for `sea`'s wind, fetch and direction and uploaded;
81
+ * the waves change at the next `encode` (no pipeline or texture is remade).
82
+ */
83
+ reseed(sea) {
84
+ const size = this.size;
85
+ this.slopeVariance.length = 0;
86
+ this.#cascades.forEach((c, ci) => {
87
+ const table = h0Table(size, c.tile, this.#bands[ci], sea, ci);
88
+ this.device.queue.writeBuffer(c.h0, 0, table);
89
+ // Σ k² |h(k)|² / 2: the variance of one axis's slope (h(k) carries h0(k) and h0(−k)).
90
+ const dk = (2 * Math.PI) / c.tile;
91
+ let v = 0;
92
+ for (let z = 0; z < size; z++) {
93
+ for (let x = 0; x < size; x++) {
94
+ const i = (z * size + x) * 4;
95
+ const k2 = ((x - size / 2) * dk) ** 2 + ((z - size / 2) * dk) ** 2;
96
+ v += k2 * (table[i] ** 2 + table[i + 1] ** 2 + table[i + 2] ** 2 + table[i + 3] ** 2);
97
+ }
98
+ }
99
+ this.slopeVariance.push(v / 2);
100
+ });
101
+ }
102
+ /** Builds the pipelines, through the render plugin's cache when given (`size` sets their override constants). */
103
+ async init(cache) {
104
+ const d = this.device;
105
+ const constants = { N: this.size, HALF: this.size / 2 };
106
+ const module = cache ? null : d.createShaderModule({ label: 'yali:water:waves', code: waterWaves.wgsl });
107
+ [this.#evolve, this.#fft, this.#pack] = await Promise.all(['evolve', 'fft', 'pack'].map((entryPoint) => cache ? cache.compute({ label: `yali:water:${entryPoint}`, compute: { shader: waterWaves, entryPoint, constants } }) : d.createComputePipelineAsync({ label: `yali:water:${entryPoint}`, layout: 'auto', compute: { module: module, entryPoint, constants } })));
108
+ const dv = this.displacement.createView({ dimension: '2d-array' });
109
+ const sv = this.slopes.createView({ dimension: '2d-array' });
110
+ this.#groups = this.#cascades.map((c, ci) => {
111
+ const slot = (k) => ({ binding: 3, resource: { buffer: this.#params, offset: (ci * 3 + k) * SLOT, size: 32 } });
112
+ return [
113
+ d.createBindGroup({ label: `yali:water:evolve-${ci}`, layout: this.#evolve.getBindGroupLayout(0), entries: [{ binding: 0, resource: { buffer: c.h0 } }, { binding: 1, resource: { buffer: c.a } }, slot(0)] }),
114
+ d.createBindGroup({ label: `yali:water:rows-${ci}`, layout: this.#fft.getBindGroupLayout(0), entries: [{ binding: 1, resource: { buffer: c.a } }, { binding: 2, resource: { buffer: c.b } }, slot(0)] }),
115
+ d.createBindGroup({ label: `yali:water:columns-${ci}`, layout: this.#fft.getBindGroupLayout(0), entries: [{ binding: 1, resource: { buffer: c.a } }, { binding: 2, resource: { buffer: c.b } }, slot(1)] }),
116
+ d.createBindGroup({ label: `yali:water:pack-${ci}`, layout: this.#pack.getBindGroupLayout(0), entries: [{ binding: 1, resource: { buffer: c.a } }, slot(2), { binding: 4, resource: dv }, { binding: 5, resource: sv }, { binding: 6, resource: { buffer: this.#foam } }] }),
117
+ ];
118
+ });
119
+ }
120
+ /** Every cascade at time `seconds`: evolve, the FFT along rows then columns, pack into its layer. */
121
+ encode(pass, seconds) {
122
+ if (this.#groups.length === 0)
123
+ return;
124
+ const f = new Float32Array(this.#data);
125
+ const u = new Uint32Array(this.#data);
126
+ // The foam decays by the time since the last frame's waves (none while they are held still or jump back).
127
+ const dt = this.#lastSeconds === null ? 0 : Math.min(0.1, Math.max(0, seconds - this.#lastSeconds));
128
+ this.#lastSeconds = seconds;
129
+ this.#cascades.forEach((c, ci) => {
130
+ for (let k = 0; k < 3; k++) {
131
+ f[0] = seconds;
132
+ f[1] = c.tile;
133
+ f[2] = this.choppiness;
134
+ f[3] = 0;
135
+ u[4] = k === 1 ? 1 : 0;
136
+ u[5] = ci;
137
+ f[6] = dt;
138
+ f[7] = this.foamThreshold;
139
+ this.device.queue.writeBuffer(this.#params, (ci * 3 + k) * SLOT, this.#data, 0, 32);
140
+ }
141
+ });
142
+ const n = this.size;
143
+ this.#cascades.forEach((_, ci) => {
144
+ const [evolve, rows, columns, pack] = this.#groups[ci];
145
+ pass.setPipeline(this.#evolve);
146
+ pass.setBindGroup(0, evolve);
147
+ pass.dispatchWorkgroups(n / 8, n / 8);
148
+ pass.setPipeline(this.#fft);
149
+ pass.setBindGroup(0, rows);
150
+ pass.dispatchWorkgroups(n, FIELDS);
151
+ pass.setBindGroup(0, columns);
152
+ pass.dispatchWorkgroups(n, FIELDS);
153
+ pass.setPipeline(this.#pack);
154
+ pass.setBindGroup(0, pack);
155
+ pass.dispatchWorkgroups(n / 8, n / 8);
156
+ });
157
+ }
158
+ /** The bytes this sea holds on the GPU: spectra, the FFT's two buffers, and the two texture arrays. */
159
+ get gpuBytes() {
160
+ const n = this.size * this.size;
161
+ return this.tiles.length * (n * 16 + 2 * FIELDS * n * 8 + 2 * n * 8 + n * 4);
162
+ }
163
+ destroy() {
164
+ for (const c of this.#cascades)
165
+ for (const b of [c.h0, c.a, c.b])
166
+ b.destroy();
167
+ this.#params.destroy();
168
+ this.#foam.destroy();
169
+ this.displacement.destroy();
170
+ this.slopes.destroy();
171
+ }
172
+ }
173
+ //# sourceMappingURL=waves.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waves.js","sourceRoot":"","sources":["../src/waves.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,27 @@
1
1
  {
2
2
  "name": "@yali-engine/water",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.12.0",
4
+ "description": "Yali water: an ocean's FFT cascades (JONSWAP, Donelan–Banner) and its surface, a render feature (ADR-0198).",
5
+ "license": "MIT OR Apache-2.0",
6
+ "type": "module",
7
+ "sideEffects": false,
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ }
13
+ },
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "dependencies": {
21
+ "@yali-engine/render": "0.12.0"
22
+ },
23
+ "scripts": {
24
+ "typecheck": "tsc -p tsconfig.json",
25
+ "test": "node --experimental-strip-types --no-warnings --test \"test/*.test.ts\""
26
+ }
6
27
  }
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.