@firecms/neat 0.8.0 → 0.9.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/dist/math.d.ts CHANGED
@@ -1,8 +1,11 @@
1
1
  export declare class Matrix4 {
2
2
  elements: Float32Array;
3
3
  constructor();
4
+ identity(): this;
4
5
  translate(tx: number, ty: number, tz: number): this;
5
6
  rotateX(angle: number): this;
7
+ rotateY(angle: number): this;
8
+ rotateZ(angle: number): this;
6
9
  }
7
10
  export declare class OrthographicCamera {
8
11
  left: number;
@@ -13,10 +16,11 @@ export declare class OrthographicCamera {
13
16
  far: number;
14
17
  position: [number, number, number];
15
18
  projectionMatrix: Matrix4;
19
+ zoom: number;
16
20
  constructor(left: number, right: number, top: number, bottom: number, near: number, far: number);
17
21
  updateProjectionMatrix(): void;
18
22
  }
19
- export declare function updateCamera(camera: OrthographicCamera, width: number, height: number, planeWidth?: number, planeHeight?: number): void;
23
+ export declare function updateCamera(camera: OrthographicCamera, width: number, height: number, planeWidth?: number, planeHeight?: number, shapeType?: string, zoom?: number): void;
20
24
  export declare function generatePlaneGeometry(width: number, height: number, widthSegments: number, heightSegments: number): {
21
25
  position: Float32Array;
22
26
  normal: Float32Array;
@@ -24,3 +28,31 @@ export declare function generatePlaneGeometry(width: number, height: number, wid
24
28
  index: Uint32Array | Uint16Array;
25
29
  wireframeIndex: Uint32Array | Uint16Array;
26
30
  };
31
+ export declare function generateSphereGeometry(radius: number, widthSegments: number, heightSegments: number): {
32
+ position: Float32Array;
33
+ normal: Float32Array;
34
+ uv: Float32Array;
35
+ index: Uint32Array | Uint16Array;
36
+ wireframeIndex: Uint32Array | Uint16Array;
37
+ };
38
+ export declare function generateTorusGeometry(radius: number, tube: number, radialSegments: number, tubularSegments: number): {
39
+ position: Float32Array;
40
+ normal: Float32Array;
41
+ uv: Float32Array;
42
+ index: Uint32Array | Uint16Array;
43
+ wireframeIndex: Uint32Array | Uint16Array;
44
+ };
45
+ export declare function generateCylinderGeometry(radiusTop: number, radiusBottom: number, height: number, radialSegments: number, heightSegments: number): {
46
+ position: Float32Array;
47
+ normal: Float32Array;
48
+ uv: Float32Array;
49
+ index: Uint32Array | Uint16Array;
50
+ wireframeIndex: Uint32Array | Uint16Array;
51
+ };
52
+ export declare function generateRibbonGeometry(width: number, height: number, widthSegments: number, heightSegments: number, bend: number, twist: number): {
53
+ position: Float32Array;
54
+ normal: Float32Array;
55
+ uv: Float32Array;
56
+ index: Uint32Array | Uint16Array;
57
+ wireframeIndex: Uint32Array | Uint16Array;
58
+ };
package/dist/math.js CHANGED
@@ -8,6 +8,26 @@ export class Matrix4 {
8
8
  0, 0, 0, 1
9
9
  ]);
10
10
  }
11
+ identity() {
12
+ const e = this.elements;
13
+ e[0] = 1;
14
+ e[1] = 0;
15
+ e[2] = 0;
16
+ e[3] = 0;
17
+ e[4] = 0;
18
+ e[5] = 1;
19
+ e[6] = 0;
20
+ e[7] = 0;
21
+ e[8] = 0;
22
+ e[9] = 0;
23
+ e[10] = 1;
24
+ e[11] = 0;
25
+ e[12] = 0;
26
+ e[13] = 0;
27
+ e[14] = 0;
28
+ e[15] = 1;
29
+ return this;
30
+ }
11
31
  translate(tx, ty, tz) {
12
32
  this.elements[12] += this.elements[0] * tx + this.elements[4] * ty + this.elements[8] * tz;
13
33
  this.elements[13] += this.elements[1] * tx + this.elements[5] * ty + this.elements[9] * tz;
@@ -30,6 +50,36 @@ export class Matrix4 {
30
50
  this.elements[11] = c * m43 - s * m42;
31
51
  return this;
32
52
  }
53
+ rotateY(angle) {
54
+ const c = Math.cos(angle);
55
+ const s = Math.sin(angle);
56
+ const m11 = this.elements[0], m21 = this.elements[1], m31 = this.elements[2], m41 = this.elements[3];
57
+ const m13 = this.elements[8], m23 = this.elements[9], m33 = this.elements[10], m43 = this.elements[11];
58
+ this.elements[0] = c * m11 - s * m13;
59
+ this.elements[1] = c * m21 - s * m23;
60
+ this.elements[2] = c * m31 - s * m33;
61
+ this.elements[3] = c * m41 - s * m43;
62
+ this.elements[8] = s * m11 + c * m13;
63
+ this.elements[9] = s * m21 + c * m23;
64
+ this.elements[10] = s * m31 + c * m33;
65
+ this.elements[11] = s * m41 + c * m43;
66
+ return this;
67
+ }
68
+ rotateZ(angle) {
69
+ const c = Math.cos(angle);
70
+ const s = Math.sin(angle);
71
+ const m11 = this.elements[0], m21 = this.elements[1], m31 = this.elements[2], m41 = this.elements[3];
72
+ const m12 = this.elements[4], m22 = this.elements[5], m32 = this.elements[6], m42 = this.elements[7];
73
+ this.elements[0] = c * m11 + s * m12;
74
+ this.elements[1] = c * m21 + s * m22;
75
+ this.elements[2] = c * m31 + s * m32;
76
+ this.elements[3] = c * m41 + s * m42;
77
+ this.elements[4] = -s * m11 + c * m12;
78
+ this.elements[5] = -s * m21 + c * m22;
79
+ this.elements[6] = -s * m31 + c * m32;
80
+ this.elements[7] = -s * m41 + c * m42;
81
+ return this;
82
+ }
33
83
  }
34
84
  export class OrthographicCamera {
35
85
  left;
@@ -40,6 +90,7 @@ export class OrthographicCamera {
40
90
  far;
41
91
  position;
42
92
  projectionMatrix;
93
+ zoom;
43
94
  constructor(left, right, top, bottom, near, far) {
44
95
  this.left = left;
45
96
  this.right = right;
@@ -48,6 +99,7 @@ export class OrthographicCamera {
48
99
  this.near = near;
49
100
  this.far = far;
50
101
  this.position = [0, 0, 0];
102
+ this.zoom = 1.0;
51
103
  this.projectionMatrix = new Matrix4();
52
104
  this.updateProjectionMatrix();
53
105
  }
@@ -66,31 +118,71 @@ export class OrthographicCamera {
66
118
  ]);
67
119
  }
68
120
  }
69
- export function updateCamera(camera, width, height, planeWidth = 50, planeHeight = 50) {
70
- const viewPortAreaRatio = 1000000;
71
- const areaViewPort = width * height;
72
- const targetPlaneArea = areaViewPort / viewPortAreaRatio * planeWidth * planeHeight / 1.5;
121
+ export function updateCamera(camera, width, height, planeWidth = 50, planeHeight = 50, shapeType = "plane", zoom = 1.0) {
122
+ camera.zoom = zoom;
73
123
  const ratio = width / height;
74
- const targetWidth = Math.sqrt(targetPlaneArea * ratio);
75
- const targetHeight = targetPlaneArea / targetWidth;
76
- let left = -planeWidth / 2;
77
- let right = Math.min((left + targetWidth) / 1.5, planeWidth / 2);
78
- let top = planeHeight / 4;
79
- let bottom = Math.max((top - targetHeight) / 2, -planeHeight / 4);
80
- if (ratio < 1) {
81
- const horizontalScale = ratio;
82
- left = left * horizontalScale;
83
- right = right * horizontalScale;
84
- const mobileZoomFactor = 1.05;
85
- left = left * mobileZoomFactor;
86
- right = right * mobileZoomFactor;
87
- top = top * mobileZoomFactor;
88
- bottom = bottom * mobileZoomFactor;
89
- }
90
- camera.left = left;
91
- camera.right = right;
92
- camera.top = top;
93
- camera.bottom = bottom;
124
+ if (shapeType === "plane") {
125
+ const viewPortAreaRatio = 1000000;
126
+ const areaViewPort = width * height;
127
+ const targetPlaneArea = areaViewPort / viewPortAreaRatio * planeWidth * planeHeight / 1.5;
128
+ const targetWidth = Math.sqrt(targetPlaneArea * ratio);
129
+ const targetHeight = targetPlaneArea / targetWidth;
130
+ let left = -planeWidth / 2;
131
+ let right = Math.min((left + targetWidth) / 1.5, planeWidth / 2);
132
+ let top = planeHeight / 4;
133
+ let bottom = Math.max((top - targetHeight) / 2, -planeHeight / 4);
134
+ if (ratio < 1) {
135
+ const horizontalScale = ratio;
136
+ left = left * horizontalScale;
137
+ right = right * horizontalScale;
138
+ const mobileZoomFactor = 1.05;
139
+ left = left * mobileZoomFactor;
140
+ right = right * mobileZoomFactor;
141
+ top = top * mobileZoomFactor;
142
+ bottom = bottom * mobileZoomFactor;
143
+ }
144
+ camera.left = left;
145
+ camera.right = right;
146
+ camera.top = top;
147
+ camera.bottom = bottom;
148
+ }
149
+ else {
150
+ // Localized 3D shapes: Sphere, Torus, Cylinder, Ribbon.
151
+ // Use a symmetrical, non-stretching camera frustum.
152
+ let halfSize = 25.0; // Default for Ribbon / others
153
+ if (shapeType === "sphere") {
154
+ halfSize = 30.0;
155
+ }
156
+ else if (shapeType === "torus") {
157
+ halfSize = 35.0;
158
+ }
159
+ else if (shapeType === "cylinder") {
160
+ halfSize = 30.0;
161
+ }
162
+ if (ratio >= 1.0) {
163
+ camera.left = -halfSize * ratio;
164
+ camera.right = halfSize * ratio;
165
+ camera.top = halfSize;
166
+ camera.bottom = -halfSize;
167
+ }
168
+ else {
169
+ camera.left = -halfSize;
170
+ camera.right = halfSize;
171
+ camera.top = halfSize / ratio;
172
+ camera.bottom = -halfSize / ratio;
173
+ // Zoom out slightly on mobile (1.05 = 5% zoom out)
174
+ const mobileZoomFactor = 1.05;
175
+ camera.left *= mobileZoomFactor;
176
+ camera.right *= mobileZoomFactor;
177
+ camera.top *= mobileZoomFactor;
178
+ camera.bottom *= mobileZoomFactor;
179
+ }
180
+ }
181
+ // Apply camera zoom to the boundary coordinates
182
+ camera.left /= zoom;
183
+ camera.right /= zoom;
184
+ camera.top /= zoom;
185
+ camera.bottom /= zoom;
94
186
  camera.near = -100;
95
187
  camera.far = 1000;
96
188
  camera.updateProjectionMatrix();
@@ -145,4 +237,227 @@ export function generatePlaneGeometry(width, height, widthSegments, heightSegmen
145
237
  wireframeIndex: isLarge ? new Uint32Array(wireframeIndices) : new Uint16Array(wireframeIndices)
146
238
  };
147
239
  }
240
+ export function generateSphereGeometry(radius, widthSegments, heightSegments) {
241
+ const vertices = [];
242
+ const normals = [];
243
+ const uvs = [];
244
+ const indices = [];
245
+ const widthSegmentsFloor = Math.floor(widthSegments);
246
+ const heightSegmentsFloor = Math.floor(heightSegments);
247
+ for (let iy = 0; iy <= heightSegmentsFloor; iy++) {
248
+ const v = iy / heightSegmentsFloor;
249
+ const theta = v * Math.PI;
250
+ for (let ix = 0; ix <= widthSegmentsFloor; ix++) {
251
+ const u = ix / widthSegmentsFloor;
252
+ const phi = u * Math.PI * 2;
253
+ const x = -radius * Math.sin(theta) * Math.cos(phi);
254
+ const y = radius * Math.cos(theta);
255
+ const z = radius * Math.sin(theta) * Math.sin(phi);
256
+ vertices.push(x, y, z);
257
+ const len = Math.sqrt(x * x + y * y + z * z);
258
+ normals.push(x / len, y / len, z / len);
259
+ uvs.push(u, 1 - v);
260
+ }
261
+ }
262
+ for (let iy = 0; iy < heightSegmentsFloor; iy++) {
263
+ for (let ix = 0; ix < widthSegmentsFloor; ix++) {
264
+ const a = ix + (widthSegmentsFloor + 1) * iy;
265
+ const b = ix + (widthSegmentsFloor + 1) * (iy + 1);
266
+ const c = (ix + 1) + (widthSegmentsFloor + 1) * (iy + 1);
267
+ const d = (ix + 1) + (widthSegmentsFloor + 1) * iy;
268
+ indices.push(a, b, d);
269
+ indices.push(b, c, d);
270
+ }
271
+ }
272
+ const isLarge = vertices.length / 3 > 65535;
273
+ const wireframeIndices = [];
274
+ for (let i = 0; i < indices.length; i += 3) {
275
+ const a = indices[i];
276
+ const b = indices[i + 1];
277
+ const c = indices[i + 2];
278
+ wireframeIndices.push(a, b, b, c, c, a);
279
+ }
280
+ return {
281
+ position: new Float32Array(vertices),
282
+ normal: new Float32Array(normals),
283
+ uv: new Float32Array(uvs),
284
+ index: isLarge ? new Uint32Array(indices) : new Uint16Array(indices),
285
+ wireframeIndex: isLarge ? new Uint32Array(wireframeIndices) : new Uint16Array(wireframeIndices)
286
+ };
287
+ }
288
+ export function generateTorusGeometry(radius, tube, radialSegments, tubularSegments) {
289
+ const vertices = [];
290
+ const normals = [];
291
+ const uvs = [];
292
+ const indices = [];
293
+ const radialSegmentsFloor = Math.floor(radialSegments);
294
+ const tubularSegmentsFloor = Math.floor(tubularSegments);
295
+ for (let j = 0; j <= radialSegmentsFloor; j++) {
296
+ const v = j / radialSegmentsFloor * Math.PI * 2;
297
+ for (let i = 0; i <= tubularSegmentsFloor; i++) {
298
+ const u = i / tubularSegmentsFloor * Math.PI * 2;
299
+ const x = (radius + tube * Math.cos(v)) * Math.cos(u);
300
+ const y = (radius + tube * Math.cos(v)) * Math.sin(u);
301
+ const z = tube * Math.sin(v);
302
+ vertices.push(x, y, z);
303
+ const cx = radius * Math.cos(u);
304
+ const cy = radius * Math.sin(u);
305
+ const nx = x - cx;
306
+ const ny = y - cy;
307
+ const nz = z;
308
+ const len = Math.sqrt(nx * nx + ny * ny + nz * nz);
309
+ normals.push(nx / len, ny / len, nz / len);
310
+ uvs.push(i / tubularSegmentsFloor, j / radialSegmentsFloor);
311
+ }
312
+ }
313
+ for (let j = 1; j <= radialSegmentsFloor; j++) {
314
+ for (let i = 1; i <= tubularSegmentsFloor; i++) {
315
+ const a = (tubularSegmentsFloor + 1) * j + i - 1;
316
+ const b = (tubularSegmentsFloor + 1) * (j - 1) + i - 1;
317
+ const c = (tubularSegmentsFloor + 1) * (j - 1) + i;
318
+ const d = (tubularSegmentsFloor + 1) * j + i;
319
+ indices.push(a, b, d);
320
+ indices.push(b, c, d);
321
+ }
322
+ }
323
+ const isLarge = vertices.length / 3 > 65535;
324
+ const wireframeIndices = [];
325
+ for (let i = 0; i < indices.length; i += 3) {
326
+ const a = indices[i];
327
+ const b = indices[i + 1];
328
+ const c = indices[i + 2];
329
+ wireframeIndices.push(a, b, b, c, c, a);
330
+ }
331
+ return {
332
+ position: new Float32Array(vertices),
333
+ normal: new Float32Array(normals),
334
+ uv: new Float32Array(uvs),
335
+ index: isLarge ? new Uint32Array(indices) : new Uint16Array(indices),
336
+ wireframeIndex: isLarge ? new Uint32Array(wireframeIndices) : new Uint16Array(wireframeIndices)
337
+ };
338
+ }
339
+ export function generateCylinderGeometry(radiusTop, radiusBottom, height, radialSegments, heightSegments) {
340
+ const vertices = [];
341
+ const normals = [];
342
+ const uvs = [];
343
+ const indices = [];
344
+ const radialSegmentsFloor = Math.floor(radialSegments);
345
+ const heightSegmentsFloor = Math.floor(heightSegments);
346
+ const halfHeight = height / 2;
347
+ for (let y = 0; y <= heightSegmentsFloor; y++) {
348
+ const v = y / heightSegmentsFloor;
349
+ const h = v * height - halfHeight;
350
+ const radius = v * (radiusBottom - radiusTop) + radiusTop;
351
+ for (let x = 0; x <= radialSegmentsFloor; x++) {
352
+ const u = x / radialSegmentsFloor;
353
+ const theta = u * Math.PI * 2;
354
+ const sinTheta = Math.sin(theta);
355
+ const cosTheta = Math.cos(theta);
356
+ vertices.push(radius * sinTheta, -h, radius * cosTheta);
357
+ normals.push(sinTheta, 0, cosTheta);
358
+ uvs.push(u, 1 - v);
359
+ }
360
+ }
361
+ for (let y = 0; y < heightSegmentsFloor; y++) {
362
+ for (let x = 0; x < radialSegmentsFloor; x++) {
363
+ const a = x + (radialSegmentsFloor + 1) * y;
364
+ const b = x + (radialSegmentsFloor + 1) * (y + 1);
365
+ const c = (x + 1) + (radialSegmentsFloor + 1) * (y + 1);
366
+ const d = (x + 1) + (radialSegmentsFloor + 1) * y;
367
+ indices.push(a, b, d);
368
+ indices.push(b, c, d);
369
+ }
370
+ }
371
+ const isLarge = vertices.length / 3 > 65535;
372
+ const wireframeIndices = [];
373
+ for (let i = 0; i < indices.length; i += 3) {
374
+ const a = indices[i];
375
+ const b = indices[i + 1];
376
+ const c = indices[i + 2];
377
+ wireframeIndices.push(a, b, b, c, c, a);
378
+ }
379
+ return {
380
+ position: new Float32Array(vertices),
381
+ normal: new Float32Array(normals),
382
+ uv: new Float32Array(uvs),
383
+ index: isLarge ? new Uint32Array(indices) : new Uint16Array(indices),
384
+ wireframeIndex: isLarge ? new Uint32Array(wireframeIndices) : new Uint16Array(wireframeIndices)
385
+ };
386
+ }
387
+ export function generateRibbonGeometry(width, height, widthSegments, heightSegments, bend, twist) {
388
+ const width_half = width / 2;
389
+ const height_half = height / 2;
390
+ const gridX = Math.floor(widthSegments);
391
+ const gridY = Math.floor(heightSegments);
392
+ const gridX1 = gridX + 1;
393
+ const gridY1 = gridY + 1;
394
+ const segment_width = width / gridX;
395
+ const segment_height = height / gridY;
396
+ const vertices = [];
397
+ const normals = [];
398
+ const uvs = [];
399
+ const indices = [];
400
+ for (let iy = 0; iy < gridY1; iy++) {
401
+ const y = iy * segment_height - height_half;
402
+ for (let ix = 0; ix < gridX1; ix++) {
403
+ const x = ix * segment_width - width_half;
404
+ let xp = x;
405
+ let yp = y;
406
+ let zp = 0;
407
+ let nx = 0;
408
+ let ny = 0;
409
+ let nz = 1;
410
+ if (Math.abs(bend) > 0.001) {
411
+ const r = width / bend;
412
+ const angle = x / r;
413
+ xp = r * Math.sin(angle);
414
+ zp = r * (1 - Math.cos(angle));
415
+ nx = Math.sin(angle);
416
+ nz = Math.cos(angle);
417
+ }
418
+ if (Math.abs(twist) > 0.001) {
419
+ const angle = (y / height) * twist;
420
+ const cosA = Math.cos(angle);
421
+ const sinA = Math.sin(angle);
422
+ const rx = xp * cosA - zp * sinA;
423
+ const rz = xp * sinA + zp * cosA;
424
+ xp = rx;
425
+ zp = rz;
426
+ const rnx = nx * cosA - nz * sinA;
427
+ const rnz = nx * sinA + nz * cosA;
428
+ nx = rnx;
429
+ nz = rnz;
430
+ }
431
+ vertices.push(xp, -yp, zp);
432
+ normals.push(nx, ny, nz);
433
+ uvs.push(ix / gridX);
434
+ uvs.push(1 - (iy / gridY));
435
+ }
436
+ }
437
+ for (let iy = 0; iy < gridY; iy++) {
438
+ for (let ix = 0; ix < gridX; ix++) {
439
+ const a = ix + gridX1 * iy;
440
+ const b = ix + gridX1 * (iy + 1);
441
+ const c = (ix + 1) + gridX1 * (iy + 1);
442
+ const d = (ix + 1) + gridX1 * iy;
443
+ indices.push(a, b, d);
444
+ indices.push(b, c, d);
445
+ }
446
+ }
447
+ const isLarge = vertices.length / 3 > 65535;
448
+ const wireframeIndices = [];
449
+ for (let i = 0; i < indices.length; i += 3) {
450
+ const a = indices[i];
451
+ const b = indices[i + 1];
452
+ const c = indices[i + 2];
453
+ wireframeIndices.push(a, b, b, c, c, a);
454
+ }
455
+ return {
456
+ position: new Float32Array(vertices),
457
+ normal: new Float32Array(normals),
458
+ uv: new Float32Array(uvs),
459
+ index: isLarge ? new Uint32Array(indices) : new Uint16Array(indices),
460
+ wireframeIndex: isLarge ? new Uint32Array(wireframeIndices) : new Uint16Array(wireframeIndices)
461
+ };
462
+ }
148
463
  //# sourceMappingURL=math.js.map
package/dist/math.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,OAAO;IAChB,QAAQ,CAAe;IACvB;QACI,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC;YAC7B,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;SACb,CAAC,CAAC;IACP,CAAC;IACD,SAAS,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU;QACxC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC3F,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QAC3F,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;QAC5F,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;QAC5F,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,OAAO,CAAC,KAAa;QACjB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACrG,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QACtC,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,MAAM,OAAO,kBAAkB;IAC3B,IAAI,CAAS;IACb,KAAK,CAAS;IACd,GAAG,CAAS;IACZ,MAAM,CAAS;IACf,IAAI,CAAS;IACb,GAAG,CAAS;IACZ,QAAQ,CAA2B;IACnC,gBAAgB,CAAU;IAE1B,YAAY,IAAY,EAAE,KAAa,EAAE,GAAW,EAAE,MAAc,EAAE,IAAY,EAAE,GAAW;QAC3F,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,IAAI,OAAO,EAAE,CAAC;QACtC,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAClC,CAAC;IAED,sBAAsB;QAClB,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC;YAC9C,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACd,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACd,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACf,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;SAChB,CAAC,CAAC;IACP,CAAC;CACJ;AAED,MAAM,UAAU,YAAY,CAAC,MAA0B,EAAE,KAAa,EAAE,MAAc,EAAE,aAAqB,EAAE,EAAE,cAAsB,EAAE;IACrI,MAAM,iBAAiB,GAAG,OAAO,CAAC;IAClC,MAAM,YAAY,GAAG,KAAK,GAAG,MAAM,CAAC;IACpC,MAAM,eAAe,GAAG,YAAY,GAAG,iBAAiB,GAAG,UAAU,GAAG,WAAW,GAAG,GAAG,CAAC;IAE1F,MAAM,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC;IACvD,MAAM,YAAY,GAAG,eAAe,GAAG,WAAW,CAAC;IAEnD,IAAI,IAAI,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;IAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,WAAW,CAAC,GAAG,GAAG,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;IACjE,IAAI,GAAG,GAAG,WAAW,GAAG,CAAC,CAAC;IAC1B,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IAElE,IAAI,KAAK,GAAG,CAAC,EAAE;QACX,MAAM,eAAe,GAAG,KAAK,CAAC;QAC9B,IAAI,GAAG,IAAI,GAAG,eAAe,CAAC;QAC9B,KAAK,GAAG,KAAK,GAAG,eAAe,CAAC;QAChC,MAAM,gBAAgB,GAAG,IAAI,CAAC;QAC9B,IAAI,GAAG,IAAI,GAAG,gBAAgB,CAAC;QAC/B,KAAK,GAAG,KAAK,GAAG,gBAAgB,CAAC;QACjC,GAAG,GAAG,GAAG,GAAG,gBAAgB,CAAC;QAC7B,MAAM,GAAG,MAAM,GAAG,gBAAgB,CAAC;KACtC;IAED,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC;IACnB,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC;IAClB,MAAM,CAAC,sBAAsB,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAa,EAAE,MAAc,EAAE,aAAqB,EAAE,cAAsB;IAC9G,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;IAC7B,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;IACzB,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;IACzB,MAAM,aAAa,GAAG,KAAK,GAAG,KAAK,CAAC;IACpC,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,CAAC;IAEtC,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,MAAM,GAAG,GAAG,EAAE,CAAC;IAEf,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE;QAChC,MAAM,CAAC,GAAG,EAAE,GAAG,cAAc,GAAG,WAAW,CAAC;QAC5C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE;YAChC,MAAM,CAAC,GAAG,EAAE,GAAG,aAAa,GAAG,UAAU,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;YACrB,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;SAC9B;KACJ;IAED,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE;QAC/B,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE;YAC/B,MAAM,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SACzB;KACJ;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC;IAE5C,kFAAkF;IAClF,MAAM,gBAAgB,GAAG,EAAE,CAAC;IAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QACxC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KAC3C;IAED,OAAO;QACH,QAAQ,EAAE,IAAI,YAAY,CAAC,QAAQ,CAAC;QACpC,MAAM,EAAE,IAAI,YAAY,CAAC,OAAO,CAAC;QACjC,EAAE,EAAE,IAAI,YAAY,CAAC,GAAG,CAAC;QACzB,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC;QACpE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,gBAAgB,CAAC;KAClG,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"math.js","sourceRoot":"","sources":["../src/math.ts"],"names":[],"mappings":"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"}
package/dist/shaders.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export declare const vertexShaderSource = "void main() {\n vUv = uv;\n\n // SCROLLING LOGIC\n // Separate multipliers for wave, color, and flow offsets\n float waveOffset = -u_y_offset * u_y_offset_wave_multiplier;\n float colorOffset = -u_y_offset * u_y_offset_color_multiplier;\n float flowOffset = -u_y_offset * u_y_offset_flow_multiplier;\n\n // 1. DISPLACEMENT (WAVES)\n // We add waveOffset to Y to scroll the wave pattern\n v_displacement_amount = cnoise( vec3(\n u_wave_frequency_x * position.x + u_time,\n u_wave_frequency_y * (position.y + waveOffset) + u_time,\n u_time\n ));\n\n // 2. FLOW FIELD\n // Apply flow offset to scroll the flow field mask\n vec2 baseUv = vUv;\n baseUv.y += flowOffset / u_plane_height; // Scale to match wave speed\n vec2 flowUv = baseUv;\n\n if (u_flow_enabled > 0.5) {\n if (u_flow_ease > 0.0 || u_flow_distortion_a > 0.0) {\n vec2 ppp = -1.0 + 2.0 * baseUv;\n ppp += 0.1 * cos((1.5 * u_flow_scale) * ppp.yx + 1.1 * u_time + vec2(0.1, 1.1));\n ppp += 0.1 * cos((2.3 * u_flow_scale) * ppp.yx + 1.3 * u_time + vec2(3.2, 3.4));\n ppp += 0.1 * cos((2.2 * u_flow_scale) * ppp.yx + 1.7 * u_time + vec2(1.8, 5.2));\n ppp += u_flow_distortion_a * cos((u_flow_distortion_b * u_flow_scale) * ppp.yx + 1.4 * u_time + vec2(6.3, 3.9));\n\n float r = length(ppp);\n flowUv = mix(baseUv, vec2(baseUv.x * (1.0 - u_flow_ease) + r * u_flow_ease, baseUv.y), u_flow_ease);\n }\n }\n\n // Pass the standard flow UV to fragment shader (for texture)\n vFlowUv = flowUv;\n\n // 3. COLOR MIXING\n // We take the computed flow UVs and apply the color offset\n // Scale by plane height to match wave offset speed (world space vs UV space)\n vec3 color = u_colors[0].color;\n // ...\n vec2 adjustedUv = flowUv;\n adjustedUv.y += colorOffset / u_plane_height; // Scroll the color mixing pattern\n\n vec2 noise_cord = adjustedUv * u_color_pressure;\n const float minNoise = .0;\n const float maxNoise = .9;\n\n for (int i = 1; i < 6; i++) {\n if (i < u_colors_count) {\n if (u_colors[i].is_active > 0.5) {\n float noiseFlow = (1. + float(i)) / 30.;\n float noiseSpeed = (1. + float(i)) * 0.11;\n float noiseSeed = 13. + float(i) * 7.;\n\n float noise = snoise(\n vec3(\n noise_cord.x * u_color_pressure.x + u_time * noiseFlow * 2.,\n noise_cord.y * u_color_pressure.y,\n u_time * noiseSpeed\n ) + noiseSeed\n ) - (.1 * float(i)) + (.5 * u_color_blending);\n\n noise = clamp(noise, minNoise, maxNoise + float(i) * 0.02);\n color = mix(color, u_colors[i].color, smoothstep(0.0, u_color_blending, noise));\n }\n }\n }\n\n v_color = color;\n\n // 4. FRESNEL (rim glow)\n // (Calculated in fragment shader using displacement slope approximation)\n\n // 5. VERTEX POSITION\n vec3 newPosition = position + normal * v_displacement_amount * u_wave_amplitude;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0);\n v_new_position = gl_Position;\n}\n";
2
- export declare const fragmentShaderSource = "float random(vec2 p) {\n return fract(sin(dot(p, vec2(12.9898,78.233))) * 43758.5453);\n}\n\nfloat fbm(vec3 x) {\n float value = 0.0;\n float amplitude = 0.5;\n float frequency = 1.0;\n for (int i = 0; i < 4; i++) {\n value += amplitude * snoise(x * frequency);\n frequency *= 2.0;\n amplitude *= 0.5;\n }\n return value;\n}\n\n// Branchless HSL to RGB for iridescence\nvec3 hsl2rgb(float h, float s, float l) {\n vec3 rgb = clamp(abs(mod(h * 6.0 + vec3(0.0, 4.0, 2.0), 6.0) - 3.0) - 1.0, 0.0, 1.0);\n return l + s * (rgb - 0.5) * (1.0 - abs(2.0 * l - 1.0));\n}\n\nvoid main() {\n vec2 finalUv = vFlowUv;\n \n vec3 baseColor;\n\n if (u_enable_procedural_texture > 0.5) {\n vec2 ppp = -1.0 + 2.0 * finalUv;\n ppp += 0.1 * cos((1.5 * u_flow_scale) * ppp.yx + 1.1 * u_time + vec2(0.1, 1.1));\n ppp += 0.1 * cos((2.3 * u_flow_scale) * ppp.yx + 1.3 * u_time + vec2(3.2, 3.4));\n ppp += 0.1 * cos((2.2 * u_flow_scale) * ppp.yx + 1.7 * u_time + vec2(1.8, 5.2));\n ppp += u_flow_distortion_a * cos((u_flow_distortion_b * u_flow_scale) * ppp.yx + 1.4 * u_time + vec2(6.3, 3.9));\n float r = length(ppp);\n \n float vx = (finalUv.x * u_texture_ease) + (r * (1.0 - u_texture_ease));\n float vy = (finalUv.y * u_texture_ease) + (0.0 * (1.0 - u_texture_ease));\n vec2 texUv = vec2(vx, vy);\n\n float parallaxFactor = 0.25;\n texUv.y -= (u_y_offset * u_y_offset_color_multiplier / u_plane_height) * parallaxFactor;\n texUv *= 1.5;\n\n vec4 texSample = texture2D(u_procedural_texture, texUv);\n baseColor = texSample.rgb;\n } else {\n baseColor = v_color;\n }\n\n vec3 color = baseColor;\n\n // === DOMAIN WARPING (simplified: 3 fbm calls instead of 5) ===\n if (u_domain_warp_enabled > 0.5) {\n vec3 p = vec3(finalUv * u_domain_warp_scale, u_time * 0.15);\n vec2 q = vec2(fbm(p), fbm(p + vec3(5.2, 1.3, 0.0)));\n float f = fbm(p + vec3(4.0 * q, 0.0));\n vec3 warpColor = color * (1.0 + f * 0.8 * u_domain_warp_intensity);\n float pattern = clamp(f * f * f + 0.6 * f * f + 0.5 * f, 0.0, 1.0);\n color = mix(color, warpColor * (0.6 + pattern * 0.8), u_domain_warp_intensity * 0.7);\n }\n\n // Post-processing\n color += v_displacement_amount * u_highlights;\n float shadowFactor = 1.0 - v_displacement_amount;\n color -= shadowFactor * shadowFactor * u_shadows;\n color = saturation(color, 1.0 + u_saturation);\n color = color * u_brightness;\n\n // === IRIDESCENCE ===\n if (u_iridescence_enabled > 0.5) {\n float hue = fract(v_displacement_amount * 0.5 + 0.5 + u_time * u_iridescence_speed * 0.05);\n vec3 iriColor = hsl2rgb(hue, 0.8, 0.6);\n color = mix(color, iriColor, u_iridescence_intensity * abs(v_displacement_amount) * 0.6);\n }\n\n // === FRESNEL (Rim glow) ===\n if (u_fresnel_enabled > 0.5) {\n float slope = 1.0 - abs(v_displacement_amount);\n float fresnel = pow(max(slope, 0.0), u_fresnel_power);\n color += u_fresnel_color * fresnel * u_fresnel_intensity;\n }\n\n // === VIGNETTE ===\n if (u_vignette_intensity > 0.0) {\n float dist = length(vUv - vec2(0.5));\n float vig = smoothstep(u_vignette_radius, u_vignette_radius * 0.3, dist);\n color *= mix(1.0, vig, u_vignette_intensity);\n }\n\n // === FAKE BLOOM ===\n if (u_bloom_intensity > 0.0) {\n float luma = dot(color, vec3(0.2126, 0.7152, 0.0722));\n float bloomMask = smoothstep(u_bloom_threshold, 1.0, luma);\n color += color * bloomMask * u_bloom_intensity;\n }\n\n // === CHROMATIC ABERRATION ===\n if (u_chromatic_aberration > 0.0) {\n float caAmount = u_chromatic_aberration * 0.008;\n float dist = length(vUv - vec2(0.5));\n float rShift = v_displacement_amount + caAmount * dist;\n float bShift = v_displacement_amount - caAmount * dist;\n color.r *= 1.0 + rShift * caAmount * 10.0;\n color.b *= 1.0 - bShift * caAmount * 10.0;\n }\n\n // Grain (use cheap hash noise instead of expensive fbm when static)\n float grain = 0.0;\n if (u_grain_intensity > 0.0) {\n vec2 noiseCoords = gl_FragCoord.xy / u_grain_scale;\n if (u_grain_speed != 0.0) {\n grain = fbm(vec3(noiseCoords, u_time * u_grain_speed));\n } else {\n // Static grain: use cheap hash instead of fbm\n grain = random(noiseCoords) - 0.5;\n }\n\n grain = grain * 0.5 + 0.5;\n grain -= 0.5;\n grain = (grain > u_grain_sparsity) ? grain : 0.0;\n grain *= u_grain_intensity;\n }\n\n color += vec3(grain);\n\n gl_FragColor = vec4(color, 1.0);\n}\n";
1
+ export declare const vertexShaderSource = "void main() {\n vUv = uv;\n vPosition = position;\n\n // SCROLLING LOGIC\n // Separate multipliers for wave, color, and flow offsets\n float waveOffset = -u_y_offset * u_y_offset_wave_multiplier;\n float colorOffset = -u_y_offset * u_y_offset_color_multiplier;\n float flowOffset = -u_y_offset * u_y_offset_flow_multiplier;\n\n // 1. DISPLACEMENT (WAVES)\n // We add waveOffset to Y to scroll the wave pattern\n v_displacement_amount = cnoise( vec3(\n u_wave_frequency_x * position.x + u_time,\n u_wave_frequency_y * (position.y + waveOffset) + u_time,\n u_time\n ));\n\n // 2. FLOW FIELD\n // Apply flow offset to scroll the flow field mask\n vec2 baseUv = vUv;\n baseUv.y += flowOffset / u_plane_height; // Scale to match wave speed\n vec2 flowUv = baseUv;\n\n if (u_flow_enabled > 0.5) {\n if (u_flow_ease > 0.0 || u_flow_distortion_a > 0.0) {\n vec2 ppp = -1.0 + 2.0 * baseUv;\n ppp += 0.1 * cos((1.5 * u_flow_scale) * ppp.yx + 1.1 * u_time + vec2(0.1, 1.1));\n ppp += 0.1 * cos((2.3 * u_flow_scale) * ppp.yx + 1.3 * u_time + vec2(3.2, 3.4));\n ppp += 0.1 * cos((2.2 * u_flow_scale) * ppp.yx + 1.7 * u_time + vec2(1.8, 5.2));\n ppp += u_flow_distortion_a * cos((u_flow_distortion_b * u_flow_scale) * ppp.yx + 1.4 * u_time + vec2(6.3, 3.9));\n\n float r = length(ppp);\n flowUv = mix(baseUv, vec2(baseUv.x * (1.0 - u_flow_ease) + r * u_flow_ease, baseUv.y), u_flow_ease);\n }\n }\n\n // Pass the standard flow UV to fragment shader (for texture)\n vFlowUv = flowUv;\n\n // 3. COLOR MIXING\n // We take the computed flow UVs and apply the color offset\n // Scale by plane height to match wave offset speed (world space vs UV space)\n vec3 color = u_colors[0].color;\n\n vec3 distortedPos = position;\n if (u_flat_shading < 0.5) {\n if (u_flow_enabled > 0.5) {\n if (u_flow_ease > 0.0 || u_flow_distortion_a > 0.0) {\n vec3 ppp = position / 25.0;\n ppp.xyz += 0.1 * cos((1.5 * u_flow_scale) * ppp.yxz + 1.1 * u_time + vec3(0.1, 1.1, 2.1));\n ppp.xyz += 0.1 * cos((2.3 * u_flow_scale) * ppp.zxy + 1.3 * u_time + vec3(3.2, 3.4, 1.2));\n ppp.xyz += 0.1 * cos((2.2 * u_flow_scale) * ppp.yxz + 1.7 * u_time + vec3(1.8, 5.2, 3.1));\n ppp.xyz += u_flow_distortion_a * cos((u_flow_distortion_b * u_flow_scale) * ppp.zxy + 1.4 * u_time + vec3(6.3, 3.9, 4.5));\n\n float r = length(ppp);\n distortedPos = mix(position, vec3(\n position.x * (1.0 - u_flow_ease) + r * u_flow_ease * 25.0,\n position.y,\n position.z * (1.0 - u_flow_ease) + r * u_flow_ease * 25.0\n ), u_flow_ease);\n }\n }\n }\n\n vec3 noise_cord;\n if (u_flat_shading < 0.5) {\n noise_cord = vec3(distortedPos.x / 50.0, (distortedPos.y + colorOffset) / 50.0, distortedPos.z / 50.0);\n } else {\n vec2 adjustedUv = flowUv;\n adjustedUv.y += colorOffset / u_plane_height;\n noise_cord = vec3(adjustedUv, 0.0);\n }\n\n const float minNoise = .0;\n const float maxNoise = .9;\n\n for (int i = 1; i < 6; i++) {\n if (i < u_colors_count) {\n if (u_colors[i].is_active > 0.5) {\n float noiseFlow = (1. + float(i)) / 30.;\n float noiseSpeed = (1. + float(i)) * 0.11;\n float noiseSeed = 13. + float(i) * 7.;\n\n float noise_z = u_time * noiseSpeed;\n if (u_flat_shading < 0.5) {\n noise_z = noise_cord.z * u_color_pressure.x * u_color_pressure.x + u_time * noiseSpeed;\n }\n\n float noise = snoise(\n vec3(\n noise_cord.x * u_color_pressure.x * u_color_pressure.x + u_time * noiseFlow * 2.,\n noise_cord.y * u_color_pressure.y * u_color_pressure.y,\n noise_z\n ) + noiseSeed\n ) - (.1 * float(i)) + (.5 * u_color_blending);\n\n noise = clamp(noise, minNoise, maxNoise + float(i) * 0.02);\n color = mix(color, u_colors[i].color, smoothstep(0.0, u_color_blending, noise));\n }\n }\n }\n\n v_color = color;\n\n // 4. FRESNEL (rim glow)\n // (Calculated in fragment shader using displacement slope approximation)\n\n // 5. VERTEX POSITION\n vec3 newPosition = position + normal * v_displacement_amount * u_wave_amplitude;\n vec4 mvPosition = modelViewMatrix * vec4(newPosition, 1.0);\n vViewPosition = mvPosition.xyz;\n vNormal = normalize((modelViewMatrix * vec4(normal, 0.0)).xyz);\n gl_Position = projectionMatrix * mvPosition;\n v_new_position = gl_Position;\n}\n";
2
+ export declare const fragmentShaderSource = "float random(vec2 p) {\n return fract(sin(dot(p, vec2(12.9898,78.233))) * 43758.5453);\n}\n\nfloat fbm(vec3 x) {\n float value = 0.0;\n float amplitude = 0.5;\n float frequency = 1.0;\n for (int i = 0; i < 2; i++) {\n value += amplitude * snoise(x * frequency);\n frequency *= 2.0;\n amplitude *= 0.5;\n }\n return value;\n}\n\n// Branchless HSL to RGB for iridescence\nvec3 hsl2rgb(float h, float s, float l) {\n vec3 rgb = clamp(abs(mod(h * 6.0 + vec3(0.0, 4.0, 2.0), 6.0) - 3.0) - 1.0, 0.0, 1.0);\n return l + s * (rgb - 0.5) * (1.0 - abs(2.0 * l - 1.0));\n}\n\nvoid main() {\n vec2 finalUv = vFlowUv;\n \n vec3 baseColor;\n float texAlpha = 1.0;\n\n if (u_enable_procedural_texture > 0.5) {\n if (u_flat_shading < 0.5) {\n float parallaxFactor = 0.25;\n float scrollOffset = (u_y_offset * u_y_offset_color_multiplier) * parallaxFactor;\n vec3 scrolledPos = vPosition;\n scrolledPos.y -= scrollOffset;\n \n vec3 p = (scrolledPos * 1.5) / 50.0;\n vec2 uvX = p.yz + vec2(0.5);\n vec2 uvY = p.zx + vec2(0.5);\n vec2 uvZ = p.xy + vec2(0.5);\n \n vec4 colX = texture2D(u_procedural_texture, uvX);\n vec4 colY = texture2D(u_procedural_texture, uvY);\n vec4 colZ = texture2D(u_procedural_texture, uvZ);\n \n vec3 n = normalize(vNormal);\n vec3 blendWeights = abs(n);\n blendWeights = blendWeights / (blendWeights.x + blendWeights.y + blendWeights.z + 0.0001);\n \n vec4 texSample = colX * blendWeights.x + colY * blendWeights.y + colZ * blendWeights.z;\n baseColor = texSample.rgb;\n if (u_transparent_texture_void > 0.5) {\n texAlpha = texSample.a;\n }\n } else {\n vec2 ppp = -1.0 + 2.0 * finalUv;\n ppp += 0.1 * cos((1.5 * u_flow_scale) * ppp.yx + 1.1 * u_time + vec2(0.1, 1.1));\n ppp += 0.1 * cos((2.3 * u_flow_scale) * ppp.yx + 1.3 * u_time + vec2(3.2, 3.4));\n ppp += 0.1 * cos((2.2 * u_flow_scale) * ppp.yx + 1.7 * u_time + vec2(1.8, 5.2));\n ppp += u_flow_distortion_a * cos((u_flow_distortion_b * u_flow_scale) * ppp.yx + 1.4 * u_time + vec2(6.3, 3.9));\n float r = length(ppp);\n \n float vx = (finalUv.x * u_texture_ease) + (r * (1.0 - u_texture_ease));\n float vy = (finalUv.y * u_texture_ease) + (0.0 * (1.0 - u_texture_ease));\n vec2 texUv = vec2(vx, vy);\n\n float parallaxFactor = 0.25;\n texUv.y -= (u_y_offset * u_y_offset_color_multiplier / u_plane_height) * parallaxFactor;\n texUv *= 1.5;\n\n vec4 texSample = texture2D(u_procedural_texture, texUv);\n baseColor = texSample.rgb;\n if (u_transparent_texture_void > 0.5) {\n texAlpha = texSample.a;\n }\n }\n } else {\n baseColor = v_color;\n }\n\n vec3 color = baseColor;\n\n // === DOMAIN WARPING (simplified: 3 fbm calls instead of 5) ===\n if (u_domain_warp_enabled > 0.5) {\n vec3 p;\n if (u_flat_shading < 0.5) {\n p = vec3((vPosition / 50.0 + vec3(0.5)) * u_domain_warp_scale);\n p.z += u_time * 0.15;\n } else {\n p = vec3(finalUv * u_domain_warp_scale, u_time * 0.15);\n }\n vec2 q = vec2(fbm(p), fbm(p + vec3(5.2, 1.3, 0.0)));\n float f = fbm(p + vec3(4.0 * q, 0.0));\n vec3 warpColor = color * (1.0 + f * 0.8 * u_domain_warp_intensity);\n float pattern = clamp(f * f * f + 0.6 * f * f + 0.5 * f, 0.0, 1.0);\n color = mix(color, warpColor * (0.6 + pattern * 0.8), u_domain_warp_intensity * 0.7);\n }\n\n // Post-processing\n // Compute dynamic pixel-perfect normal using smooth normal\n vec3 normal = normalize(vNormal);\n vec3 viewDir = vec3(0.0, 0.0, 1.0);\n float ndotv = dot(normal, viewDir);\n \n // Cull back-faces for closed 3D shapes (Sphere=1, Torus=2, Cylinder=3)\n if (u_shape_type > 0.5 && u_shape_type < 3.5) {\n if (ndotv < 0.0) {\n discard;\n }\n } else {\n // Double-sided shapes (Plane, Ribbon): flip normal if back-facing\n if (ndotv < 0.0) {\n normal = -normal;\n ndotv = -ndotv;\n }\n }\n vec3 lightDir = normalize(vec3(1.0, 1.0, 1.0));\n float diffuse = max(dot(normal, lightDir), 0.0);\n vec3 halfDir = normalize(lightDir + viewDir);\n float specular = pow(max(dot(normal, halfDir), 0.0), 32.0);\n\n // Blend smooth 3D shading with smooth height-based wave shading\n if (u_flat_shading > 0.5) {\n // Flat / height-based wave shading (plane style)\n color += v_displacement_amount * u_highlights;\n float heightShadow = 1.0 - v_displacement_amount;\n color -= heightShadow * heightShadow * u_shadows;\n } else {\n // 3D shading\n color += specular * u_highlights;\n color += v_displacement_amount * u_highlights * 0.5;\n float heightShadow = 1.0 - v_displacement_amount;\n color -= heightShadow * heightShadow * u_shadows * 0.5;\n color -= (1.0 - diffuse) * u_shadows * 0.5;\n }\n color = saturation(color, 1.0 + u_saturation);\n color = color * u_brightness;\n\n // === IRIDESCENCE ===\n if (u_iridescence_enabled > 0.5) {\n float hue = fract(v_displacement_amount * 0.5 + 0.5 + u_time * u_iridescence_speed * 0.05);\n vec3 iriColor = hsl2rgb(hue, 0.8, 0.6);\n color = mix(color, iriColor, u_iridescence_intensity * abs(v_displacement_amount) * 0.6);\n }\n\n // === FRESNEL (Rim glow) ===\n if (u_fresnel_enabled > 0.5) {\n float slope = 1.0 - abs(v_displacement_amount);\n float fresnel = pow(max(slope, 0.0), u_fresnel_power);\n color += u_fresnel_color * fresnel * u_fresnel_intensity;\n }\n\n // === VIGNETTE ===\n if (u_vignette_intensity > 0.0) {\n vec2 vigUv = vUv;\n if (u_flat_shading < 0.5) {\n vigUv = (v_new_position.xy / v_new_position.w) * 0.5 + vec2(0.5);\n }\n float dist = length(vigUv - vec2(0.5));\n float vig = smoothstep(u_vignette_radius, u_vignette_radius * 0.3, dist);\n color *= mix(1.0, vig, u_vignette_intensity);\n }\n\n // === FAKE BLOOM ===\n if (u_bloom_intensity > 0.0) {\n float luma = dot(color, vec3(0.2126, 0.7152, 0.0722));\n float bloomMask = smoothstep(u_bloom_threshold, 1.0, luma);\n color += color * bloomMask * u_bloom_intensity;\n }\n\n // === CHROMATIC ABERRATION ===\n if (u_chromatic_aberration > 0.0) {\n float caAmount = u_chromatic_aberration * 0.008;\n vec2 caUv = vUv;\n if (u_flat_shading < 0.5) {\n caUv = (v_new_position.xy / v_new_position.w) * 0.5 + vec2(0.5);\n }\n float dist = length(caUv - vec2(0.5));\n float rShift = v_displacement_amount + caAmount * dist;\n float bShift = v_displacement_amount - caAmount * dist;\n color.r *= 1.0 + rShift * caAmount * 10.0;\n color.b *= 1.0 - bShift * caAmount * 10.0;\n }\n\n // Grain (use cheap hash noise instead of expensive fbm when static)\n float grain = 0.0;\n if (u_grain_intensity > 0.0) {\n vec2 noiseCoords = gl_FragCoord.xy / u_grain_scale;\n if (u_grain_speed != 0.0 || u_flat_shading > 0.5) {\n grain = fbm(vec3(noiseCoords, u_time * u_grain_speed));\n } else {\n // Static grain: use cheap hash instead of fbm\n grain = random(noiseCoords) - 0.5;\n }\n\n grain = grain * 0.5 + 0.5;\n grain -= 0.5;\n grain = (grain > u_grain_sparsity) ? grain : 0.0;\n grain *= u_grain_intensity;\n }\n\n color += vec3(grain);\n\n float edgeAlpha = 1.0;\n \n // Silhouette falloff for 3D shapes (skip when flat shading or fade is zero)\n if (u_silhouette_fade > 0.0 && u_flat_shading < 0.5) {\n edgeAlpha = smoothstep(0.0, u_silhouette_fade, ndotv);\n }\n \n // UV boundary falloff for open shapes\n if (u_shape_type == 3.0) { // Cylinder: fade top/bottom ends\n float vFade = smoothstep(0.0, u_cylinder_fade, vUv.y) * smoothstep(1.0, 1.0 - u_cylinder_fade, vUv.y);\n edgeAlpha *= vFade;\n } else if (u_shape_type == 4.0) { // Ribbon: fade all 4 borders\n float uFade = smoothstep(0.0, u_ribbon_fade, vUv.x) * smoothstep(1.0, 1.0 - u_ribbon_fade, vUv.x);\n float vFade = smoothstep(0.0, u_ribbon_fade, vUv.y) * smoothstep(1.0, 1.0 - u_ribbon_fade, vUv.y);\n edgeAlpha *= uFade * vFade;\n }\n\n edgeAlpha *= texAlpha;\n gl_FragColor = vec4(color, edgeAlpha);\n}\n";
3
3
  export declare function buildVertUniforms(): string;
4
4
  export declare function buildFragUniforms(): string;
5
5
  export declare function buildNoise(): string;