three-low-poly 0.9.25 → 0.9.27

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/index.d.ts CHANGED
@@ -8,6 +8,7 @@ import { ExtrudeGeometry } from 'three';
8
8
  import { Group } from 'three';
9
9
  import { InstancedMesh } from 'three';
10
10
  import { Material } from 'three';
11
+ import { MaterialEventMap } from 'three';
11
12
  import { Mesh } from 'three';
12
13
  import { MeshBasicMaterial } from 'three';
13
14
  import { MeshLambertMaterial } from 'three';
@@ -16,7 +17,7 @@ import { MeshPhysicalMaterial } from 'three';
16
17
  import { MeshStandardMaterial } from 'three';
17
18
  import { Object3D } from 'three';
18
19
  import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
19
- import { ParametricGeometry } from 'three-stdlib';
20
+ import { ParametricGeometry } from 'three/addons/geometries/ParametricGeometry.js';
20
21
  import { PerspectiveCamera } from 'three';
21
22
  import { Plane } from 'three';
22
23
  import { PlaneGeometry } from 'three';
@@ -25,6 +26,7 @@ import { Points } from 'three';
25
26
  import { Quaternion } from 'three';
26
27
  import { ShaderMaterial } from 'three';
27
28
  import { Shape } from 'three';
29
+ import { ShapeGeometry } from 'three';
28
30
  import { SphereGeometry } from 'three';
29
31
  import * as THREE from 'three';
30
32
  import { Uniform } from 'three';
@@ -68,7 +70,7 @@ import { Vector3 } from 'three';
68
70
  * instancedMesh.geometry.setAttribute("instanceColor", new THREE.InstancedBufferAttribute(colors, 3));
69
71
  * ```
70
72
  */
71
- export declare function addInstanceColor(material: Material): Material;
73
+ export declare function addInstanceColor(material: Material): Material< MaterialEventMap>;
72
74
 
73
75
  /**
74
76
  * Utility function to add noise-based vertex displacement to an existing Three.js material.
@@ -170,6 +172,122 @@ export declare function appendSphericalCurve(sphereRadiusX: number, sphereRadius
170
172
 
171
173
  export declare function applySnapshot(camera: PerspectiveCamera, controls: OrbitControls | undefined, snapshot: CameraSnapshot): void;
172
174
 
175
+ declare interface ArchedDiamondLatticePartOptions {
176
+ width: number;
177
+ rectHeight: number;
178
+ archHeight?: number;
179
+ centerY?: number;
180
+ grid: DiamondLatticeGrid;
181
+ leadThickness: number;
182
+ leadDepth: number;
183
+ /**
184
+ * Shrink the opening the cames are clipped to (positioning stays on the full
185
+ * grid). Set to the frame thickness so came ends tuck under the frame ring
186
+ * instead of poking past the outer silhouette. Defaults to `0`.
187
+ */
188
+ clipInset?: number;
189
+ }
190
+
191
+ /**
192
+ * Arched diamond lattice window — diagonal lead cames analytically clipped to a
193
+ * Tudor head opening, with an extruded frame ring. The lattice is real trimmed
194
+ * geometry (no stencil mask), so it casts a correct arch-shaped shadow and any
195
+ * collider derived from the mesh matches what's drawn.
196
+ *
197
+ * Local frame: centered on the opening, XY plane facing +Z. Lead is centered on
198
+ * `z = 0`; optional glass sits in the same plane (both faces).
199
+ */
200
+ export declare class ArchedDiamondLatticeWindow extends Group {
201
+ readonly lattice: Mesh<ArchedDiamondLatticeWindowGeometry, MeshStandardMaterial>;
202
+ readonly frame: Mesh;
203
+ readonly glass?: Mesh<ShapeGeometry, MeshPhysicalMaterial>;
204
+ readonly cellsX: number;
205
+ readonly cellsY: number;
206
+ readonly fittedGrid: DiamondLatticeGrid;
207
+ readonly opening: ArchedOpeningMetrics;
208
+ constructor({ leadColor, glass, glassColor, glassEmissive, glassEmissiveIntensity, width, rectHeight, archHeight, centerY, leadThickness, leadDepth, ...geometryOptions }?: ArchedDiamondLatticeWindowOptions);
209
+ }
210
+
211
+ /**
212
+ * Diamond cames analytically clipped to the arched (rect-plus-Tudor-head)
213
+ * opening — real trimmed geometry, no stencil, so it shadows and raycasts
214
+ * correctly. Frame is a separate extruded ring on {@link ArchedDiamondLatticeWindow}.
215
+ */
216
+ export declare class ArchedDiamondLatticeWindowGeometry extends BufferGeometry {
217
+ readonly cellsX: number;
218
+ readonly cellsY: number;
219
+ readonly fittedGrid: DiamondLatticeGrid;
220
+ readonly opening: ArchedOpeningMetrics;
221
+ constructor({ width, rectHeight, archHeight, leadThickness, leadDepth, cellsX, cellsY, centerY, }?: ArchedDiamondLatticeWindowGeometryOptions);
222
+ }
223
+
224
+ declare interface ArchedDiamondLatticeWindowGeometryOptions {
225
+ /** Opening width (world units). */
226
+ width?: number;
227
+ /** Height of the straight-sided lower section. */
228
+ rectHeight?: number;
229
+ /** Arch rise from the spring line to the apex. Defaults to `width / 2`. */
230
+ archHeight?: number;
231
+ /** Lead came thickness (cross-section). Defaults to `0.055`. */
232
+ leadThickness?: number;
233
+ /** Lead depth (Z extent). Defaults to `0.11`. */
234
+ leadDepth?: number;
235
+ /** Quarrels spanning east–west across the bounding opening. Defaults to `10`. */
236
+ cellsX?: number;
237
+ /** Quarrels spanning north–south across the bounding opening. Defaults to `12`. */
238
+ cellsY?: number;
239
+ /** Vertical center of the full opening. Defaults to `0`. */
240
+ centerY?: number;
241
+ }
242
+
243
+ declare interface ArchedDiamondLatticeWindowOptions extends ArchedDiamondLatticeWindowGeometryOptions {
244
+ /** Lead + outer frame tint. Defaults to `#0c0f14`. */
245
+ leadColor?: ColorRepresentation;
246
+ /** Optional glass pane centered in the lead depth (`z = 0`), visible from both sides. */
247
+ glass?: boolean;
248
+ glassColor?: ColorRepresentation;
249
+ glassEmissive?: ColorRepresentation;
250
+ glassEmissiveIntensity?: number;
251
+ }
252
+
253
+ /** Rectangular lower section plus circular arch head. */
254
+ export declare interface ArchedOpeningBounds {
255
+ width: number;
256
+ /** Height of the straight-sided lower section. */
257
+ rectHeight: number;
258
+ /** Arch rise from the spring line to the apex. Defaults to `width / 2` (semicircle). */
259
+ archHeight?: number;
260
+ /** Vertical center of the full opening. Defaults to `0`. */
261
+ centerY?: number;
262
+ }
263
+
264
+ export declare interface ArchedOpeningMetrics {
265
+ hw: number;
266
+ ymin: number;
267
+ ymax: number;
268
+ rectTopY: number;
269
+ /** Circle center Y — lies on or below the spring line. */
270
+ archCy: number;
271
+ /** Circular arc radius derived from `width` and `archHeight`. */
272
+ archRadius: number;
273
+ archHeight: number;
274
+ totalHeight: number;
275
+ centerY: number;
276
+ }
277
+
278
+ /**
279
+ * Circular arc through `(-width/2, springY)` and `(width/2, springY)` with rise
280
+ * `archHeight`. Frame, glass, and lattice clip all use this same arc.
281
+ */
282
+ export declare function archedOpeningMetrics({ width, rectHeight, archHeight, centerY, }: ArchedOpeningBounds): ArchedOpeningMetrics;
283
+
284
+ declare interface ArchedOutlineTarget {
285
+ moveTo(x: number, y: number): unknown;
286
+ lineTo(x: number, y: number): unknown;
287
+ absarc(x: number, y: number, radius: number, startAngle: number, endAngle: number, clockwise: boolean): unknown;
288
+ closePath(): unknown;
289
+ }
290
+
173
291
  /**
174
292
  * Atmospheric scattering shader.
175
293
  *
@@ -441,57 +559,93 @@ export declare class BoneGeometry extends BufferGeometry {
441
559
  }
442
560
 
443
561
  /**
444
- * Book prefab
562
+ * Book prefab — cover shell and page block with separate material groups.
445
563
  *
446
- * Material indices:
447
- * 0. cover
448
- * 1. page
564
+ * Local frame: spine at X=0, fore-edge at +X, sits on the Y=0 plane.
449
565
  */
450
566
  export declare class Book extends Mesh<BookGeometry, MeshStandardMaterial[]> {
451
- constructor({ width, height, depth, coverThickness, pageIndent, coverColor, pageColor, }?: {
452
- width?: number | undefined;
453
- height?: number | undefined;
454
- depth?: number | undefined;
455
- coverThickness?: number | undefined;
456
- pageIndent?: number | undefined;
457
- coverColor?: number | undefined;
458
- pageColor?: number | undefined;
459
- });
567
+ readonly width: number;
568
+ readonly height: number;
569
+ readonly depth: number;
570
+ readonly coverThickness: number;
571
+ readonly pageIndent: number;
572
+ constructor({ coverColor, pageColor, ...geometryOptions }?: BookOptions);
460
573
  }
461
574
 
462
575
  /**
463
- * Book
576
+ * Closed book — cover shell (group 0) and page block (group 1).
464
577
  *
465
- * Group indices:
466
- * 0. cover
467
- * 1. page
578
+ * Local frame: spine at X=0, fore-edge at +X, sits on the Y=0 plane.
468
579
  */
469
580
  export declare class BookGeometry extends BufferGeometry {
470
- constructor(width?: number, height?: number, depth?: number, coverThickness?: number, pageIndent?: number);
581
+ readonly width: number;
582
+ readonly height: number;
583
+ readonly depth: number;
584
+ readonly coverThickness: number;
585
+ readonly pageIndent: number;
586
+ constructor({ width, height, depth, coverThickness, pageIndent, }?: BookGeometryOptions);
587
+ }
588
+
589
+ export declare interface BookGeometryOptions {
590
+ /** Cover width (spine to fore-edge). Defaults to `1`. */
591
+ width?: number;
592
+ /** Cover height. Defaults to `1.5`. */
593
+ height?: number;
594
+ /** Spine depth (cover to cover). Defaults to `0.5`. */
595
+ depth?: number;
596
+ /** Cover board thickness. Defaults to `0.05`. */
597
+ coverThickness?: number;
598
+ /** Inset of the page block from the cover edges. Defaults to `0.05`. */
599
+ pageIndent?: number;
600
+ }
601
+
602
+ export declare interface BookOptions extends BookGeometryOptions {
603
+ /** Cover tint. Defaults to `#8b0000`. */
604
+ coverColor?: ColorRepresentation;
605
+ /** Page block tint. Defaults to `#ffffff`. */
606
+ pageColor?: ColorRepresentation;
471
607
  }
472
608
 
609
+ /**
610
+ * Bookshelf prefab — framed shelving unit.
611
+ */
473
612
  export declare class Bookshelf extends Mesh<BookshelfGeometry, MeshStandardMaterial> {
474
- constructor({ width, //
475
- height, depth, shelves, frameThickness, open, }?: {
476
- width?: number | undefined;
477
- height?: number | undefined;
478
- depth?: number | undefined;
479
- shelves?: number | undefined;
480
- frameThickness?: number | undefined;
481
- open?: boolean | undefined;
482
- });
613
+ readonly width: number;
614
+ readonly height: number;
615
+ constructor({ color, ...geometryOptions }?: BookshelfOptions);
483
616
  }
484
617
 
618
+ /**
619
+ * Bookshelf frame with optional back panel and evenly spaced shelves.
620
+ *
621
+ * Local frame: sits on the Y=0 plane, centered on X/Z.
622
+ */
485
623
  export declare class BookshelfGeometry extends BufferGeometry {
486
- constructor({ width, //
487
- height, depth, shelves, frameThickness, open, }?: {
488
- width?: number | undefined;
489
- height?: number | undefined;
490
- depth?: number | undefined;
491
- shelves?: number | undefined;
492
- frameThickness?: number | undefined;
493
- open?: boolean | undefined;
494
- });
624
+ readonly width: number;
625
+ readonly height: number;
626
+ readonly depth: number;
627
+ readonly shelves: number;
628
+ constructor({ width, height, depth, shelves, frameThickness, open, }?: BookshelfGeometryOptions);
629
+ }
630
+
631
+ export declare interface BookshelfGeometryOptions {
632
+ /** Overall width. Defaults to `5`. */
633
+ width?: number;
634
+ /** Overall height. Defaults to `8`. */
635
+ height?: number;
636
+ /** Shelf depth. Defaults to `1`. */
637
+ depth?: number;
638
+ /** Number of interior shelves. Defaults to `4`. */
639
+ shelves?: number;
640
+ /** Frame board thickness. Defaults to `0.1`. */
641
+ frameThickness?: number;
642
+ /** Omit the back panel when `true`. Defaults to `false`. */
643
+ open?: boolean;
644
+ }
645
+
646
+ export declare interface BookshelfOptions extends BookshelfGeometryOptions {
647
+ /** Frame tint. Defaults to `#8b4513`. */
648
+ color?: ColorRepresentation;
495
649
  }
496
650
 
497
651
  export declare enum BoxSide {
@@ -503,6 +657,22 @@ export declare enum BoxSide {
503
657
  BACK = "back"
504
658
  }
505
659
 
660
+ /**
661
+ * Diagonal cames only, each segment analytically clipped to the rect-plus-arch
662
+ * opening — no outer frame, no stencil. Bar ends land as real vertices on the
663
+ * arc, so the merged geometry casts a correct shadow and matches any collider.
664
+ */
665
+ export declare function buildArchedDiamondLatticeCameParts({ width, rectHeight, archHeight, centerY, grid, leadThickness: barT, leadDepth: barD, clipInset, }: ArchedDiamondLatticePartOptions): BoxGeometry[];
666
+
667
+ /** Extruded frame ring following the arched opening perimeter. */
668
+ export declare function buildArchedDiamondLatticeFrameGeometry(metrics: ArchedOpeningMetrics, barThickness: number, barDepth: number): ExtrudeGeometry;
669
+
670
+ /** Outer frame (rect sides + circular arch head) and clipped diagonal cames. */
671
+ export declare function buildArchedDiamondLatticeParts(options: ArchedDiamondLatticePartOptions): BoxGeometry[];
672
+
673
+ /** Diagonal cames only — no outer frame (for stencil-masked openings). */
674
+ export declare function buildDiamondLatticeCameParts(options: DiamondLatticePartOptions): BoxGeometry[];
675
+
506
676
  /**
507
677
  * Build merged box geometries for the outer frame and diagonal lead cames.
508
678
  * Diagonal bars are trimmed to the rectangular opening (segment clip, not stencil).
@@ -522,20 +692,38 @@ export declare class BunsenBurner extends Group {
522
692
  constructor();
523
693
  }
524
694
 
525
- export declare class Burst extends Mesh {
526
- constructor({ sides, innerRadius, outerRadius, depth }?: {
527
- sides?: number | undefined;
528
- innerRadius?: number | undefined;
529
- outerRadius?: number | undefined;
530
- depth?: number | undefined;
531
- });
695
+ /**
696
+ * Burst shape prefab.
697
+ */
698
+ export declare class Burst extends Mesh<BurstGeometry, MeshStandardMaterial> {
699
+ constructor({ color, emissive, emissiveIntensity, ...geometryOptions }?: BurstOptions);
532
700
  }
533
701
 
534
702
  /**
535
- * Extrude geometry of Burst Shape.
703
+ * Extruded burst / starburst prism.
536
704
  */
537
705
  export declare class BurstGeometry extends ExtrudeGeometry {
538
- constructor(sides?: number, innerRadius?: number, outerRadius?: number, depth?: number);
706
+ constructor({ sides, innerRadius, outerRadius, depth, }?: BurstGeometryOptions);
707
+ }
708
+
709
+ export declare interface BurstGeometryOptions {
710
+ /** Number of burst rays. Defaults to `5`. */
711
+ sides?: number;
712
+ /** Inner vertex radius. Defaults to `0.5`. */
713
+ innerRadius?: number;
714
+ /** Outer vertex radius. Defaults to `1`. */
715
+ outerRadius?: number;
716
+ /** Extrusion depth. Defaults to `0.25`. */
717
+ depth?: number;
718
+ }
719
+
720
+ export declare interface BurstOptions extends BurstGeometryOptions {
721
+ /** Surface tint. Defaults to `#ffff00`. */
722
+ color?: ColorRepresentation;
723
+ /** Emissive tint. Defaults to `#ffd700`. */
724
+ emissive?: ColorRepresentation;
725
+ /** Emissive strength. Defaults to `0.25`. */
726
+ emissiveIntensity?: number;
539
727
  }
540
728
 
541
729
  export declare class BurstShape extends Shape {
@@ -755,37 +943,52 @@ export declare interface CameraTransitionOptions {
755
943
  }
756
944
 
757
945
  /**
758
- * Material indices
759
- * 0: Stick
760
- * 1: Flame
946
+ * Candle prefab — wax stick and emissive flame (separate material groups).
761
947
  */
762
948
  export declare class Candle extends Mesh<CandleGeometry, MeshStandardMaterial[]> {
763
- constructor({ radiusTop, //
764
- radiusBottom, height, flameHeight, flameRadius, segments, }?: {
765
- radiusTop?: number | undefined;
766
- radiusBottom?: number | undefined;
767
- height?: number | undefined;
768
- flameHeight?: number | undefined;
769
- flameRadius?: number | undefined;
770
- segments?: number | undefined;
771
- });
949
+ readonly height: number;
950
+ constructor({ stickColor, flameColor, flameEmissive, flameEmissiveIntensity, ...geometryOptions }?: CandleOptions);
772
951
  }
773
952
 
774
953
  /**
775
- * Group indices
776
- * 0: Stick
777
- * 1: Flame
954
+ * Candle stick and flame — group 0 stick, group 1 flame.
955
+ *
956
+ * Local frame: base at Y=0.
778
957
  */
779
958
  export declare class CandleGeometry extends BufferGeometry {
780
- constructor({ radiusTop, //
781
- radiusBottom, height, flameHeight, flameRadius, segments, }?: {
782
- radiusTop?: number | undefined;
783
- radiusBottom?: number | undefined;
784
- height?: number | undefined;
785
- flameHeight?: number | undefined;
786
- flameRadius?: number | undefined;
787
- segments?: number | undefined;
788
- });
959
+ readonly radiusTop: number;
960
+ readonly radiusBottom: number;
961
+ readonly height: number;
962
+ readonly flameHeight: number;
963
+ readonly flameRadius: number;
964
+ readonly segments: number;
965
+ constructor({ radiusTop, radiusBottom, height, flameHeight, flameRadius, segments, }?: CandleGeometryOptions);
966
+ }
967
+
968
+ export declare interface CandleGeometryOptions {
969
+ /** Stick top radius. Defaults to `0.2`. */
970
+ radiusTop?: number;
971
+ /** Stick bottom radius. Defaults to `0.2`. */
972
+ radiusBottom?: number;
973
+ /** Stick height. Defaults to `1`. */
974
+ height?: number;
975
+ /** Flame tip height. Defaults to `0.25`. */
976
+ flameHeight?: number;
977
+ /** Flame base radius. Defaults to `0.05`. */
978
+ flameRadius?: number;
979
+ /** Circumference segments. Defaults to `16`. */
980
+ segments?: number;
981
+ }
982
+
983
+ export declare interface CandleOptions extends CandleGeometryOptions {
984
+ /** Wax stick tint. Defaults to `#ffffff`. */
985
+ stickColor?: ColorRepresentation;
986
+ /** Flame surface tint. Defaults to `#ffd700`. */
987
+ flameColor?: ColorRepresentation;
988
+ /** Flame emissive tint. Defaults to `#ffa500`. */
989
+ flameEmissive?: ColorRepresentation;
990
+ /** Flame emissive strength. Defaults to `0.35`. */
991
+ flameEmissiveIntensity?: number;
789
992
  }
790
993
 
791
994
  /**
@@ -879,6 +1082,12 @@ export declare interface ClipRuntime {
879
1082
  /** Clip a segment to an axis-aligned rectangle; returns endpoints inside the opening. */
880
1083
  export declare function clipSegmentToAabb(x1: number, y1: number, x2: number, y2: number, minX: number, minY: number, maxX: number, maxY: number): [number, number, number, number] | null;
881
1084
 
1085
+ /**
1086
+ * Clip a segment to a rect-plus-semicircle opening (analytic, same family as
1087
+ * {@link clipSegmentToAabb}).
1088
+ */
1089
+ export declare function clipSegmentToArchedOpening(x1: number, y1: number, x2: number, y2: number, bounds: ArchedOpeningBounds): [number, number, number, number] | null;
1090
+
882
1091
  export declare const ColorPalette: {
883
1092
  CADMIUM_RED: number;
884
1093
  CARDINAL_RED: number;
@@ -1230,20 +1439,43 @@ export declare const crossfadeShader: {
1230
1439
  fragmentShader: string;
1231
1440
  };
1232
1441
 
1442
+ /**
1443
+ * Cross headstone prefab.
1444
+ */
1233
1445
  export declare class CrossHeadstone extends Mesh<CrossHeadstoneGeometry, MeshStandardMaterial> {
1234
- constructor({ width, height, depth, }?: CrossHeadstoneOptions);
1446
+ readonly width: number;
1447
+ readonly height: number;
1448
+ constructor({ color, roughness, ...geometryOptions }?: CrossHeadstoneOptions);
1235
1449
  }
1236
1450
 
1451
+ /**
1452
+ * Cross headstone — vertical shaft and horizontal arm.
1453
+ *
1454
+ * Local frame: base on Y=0, centered on X/Z.
1455
+ */
1237
1456
  export declare class CrossHeadstoneGeometry extends BufferGeometry {
1238
- constructor(width?: number, height?: number, depth?: number);
1457
+ readonly width: number;
1458
+ readonly height: number;
1459
+ readonly depth: number;
1460
+ constructor({ width, height, depth }?: CrossHeadstoneGeometryOptions);
1239
1461
  }
1240
1462
 
1241
- declare interface CrossHeadstoneOptions {
1463
+ export declare interface CrossHeadstoneGeometryOptions {
1464
+ /** Overall cross width (arm span). Defaults to `0.4`. */
1242
1465
  width?: number;
1466
+ /** Total height. Defaults to `1.2`. */
1243
1467
  height?: number;
1468
+ /** Slab depth. Defaults to `0.2`. */
1244
1469
  depth?: number;
1245
1470
  }
1246
1471
 
1472
+ export declare interface CrossHeadstoneOptions extends CrossHeadstoneGeometryOptions {
1473
+ /** Stone tint. Defaults to `#777777`. */
1474
+ color?: ColorRepresentation;
1475
+ /** Surface roughness. Defaults to `0.8`. */
1476
+ roughness?: number;
1477
+ }
1478
+
1247
1479
  /**
1248
1480
  * Cubic UV Mapping
1249
1481
  * Applies a texture by projecting UVs along each face of a cube.
@@ -1366,8 +1598,7 @@ export declare function diamondLatticeCellFromCount(width: number, height: numbe
1366
1598
  export declare function diamondLatticeCornerSpan(width: number, height: number): number;
1367
1599
 
1368
1600
  /**
1369
- * Axis-aligned diamond lattice — north/south vertices share a vertical axis,
1370
- * east/west share a horizontal axis (`<>` not `><`).
1601
+ * Axis-aligned diamond lattice
1371
1602
  */
1372
1603
  export declare interface DiamondLatticeGrid {
1373
1604
  /** Horizontal half-diagonal of each quarrel (east–west point spacing). */
@@ -1402,17 +1633,15 @@ declare interface DiamondLatticePartOptions {
1402
1633
  leadDepth: number;
1403
1634
  }
1404
1635
 
1405
- /** @deprecated Use {@link diamondLatticeGridFromCells}. */
1406
- export declare function diamondLatticeSpacingFromGrid(width: number, height: number, cellsX: number, cellsY: number): {
1407
- plus45: number;
1408
- minus45: number;
1409
- };
1636
+ /** Spring-to-apex Y shift that snaps the lattice phase to the rect/arch junction. */
1637
+ export declare function diamondLatticeSpringPhaseShift(ymin: number, rectTopY: number, grid: DiamondLatticeGrid): number;
1410
1638
 
1411
1639
  /**
1412
1640
  * Diamond lattice window — diagonal lead cames with axis-aligned quarrels (`<>`).
1413
1641
  *
1414
- * Local frame: centered on the opening, XY plane facing +Z. Lead and optional
1415
- * glass share `z = 0`. Pair with a scene-owned backing plane behind the wall.
1642
+ * Local frame: centered on the opening, XY plane facing +Z. Lead is centered on
1643
+ * `z = 0`; optional glass sits in the same plane (both faces). Pair with
1644
+ * a scene-owned backing plane behind the wall.
1416
1645
  */
1417
1646
  export declare class DiamondLatticeWindow extends Group {
1418
1647
  readonly lattice: Mesh<DiamondLatticeWindowGeometry, MeshStandardMaterial>;
@@ -1420,7 +1649,7 @@ export declare class DiamondLatticeWindow extends Group {
1420
1649
  readonly cellsX: number;
1421
1650
  readonly cellsY: number;
1422
1651
  readonly fittedGrid: DiamondLatticeGrid;
1423
- constructor({ leadColor, glass, glassColor, glassEmissive, glassEmissiveIntensity, ...geometryOptions }?: DiamondLatticeWindowOptions);
1652
+ constructor({ leadColor, glass, glassColor, glassEmissive, glassEmissiveIntensity, centerY, leadDepth, ...geometryOptions }?: DiamondLatticeWindowOptions);
1424
1653
  }
1425
1654
 
1426
1655
  /**
@@ -1459,7 +1688,7 @@ declare interface DiamondLatticeWindowOptions extends DiamondLatticeWindowGeomet
1459
1688
  /** Lead + outer frame tint. Defaults to `#0c0f14`. */
1460
1689
  leadColor?: ColorRepresentation;
1461
1690
  /**
1462
- * Optional glass pane coplanar with the lattice (same Z center).
1691
+ * Optional glass pane centered in the lead depth (`z = 0`), visible from both sides.
1463
1692
  * Mad-science uses an emissive sky mesh in the scene instead.
1464
1693
  */
1465
1694
  glass?: boolean;
@@ -1760,26 +1989,42 @@ export declare interface EmissivePulseEffectOptions {
1760
1989
 
1761
1990
  export declare type EmissivePulseMaterial = MeshStandardMaterial | MeshPhysicalMaterial | MeshLambertMaterial | MeshPhongMaterial;
1762
1991
 
1992
+ /**
1993
+ * Erlenmeyer flask prefab — translucent glass vessel.
1994
+ */
1763
1995
  export declare class ErlenmeyerFlask extends Mesh<ErlenmeyerFlaskGeometry, MeshPhysicalMaterial> {
1764
- constructor({ flaskRadius, //
1765
- neckRadius, height, neckHeight, radialSegments, }?: {
1766
- flaskRadius?: number | undefined;
1767
- neckRadius?: number | undefined;
1768
- height?: number | undefined;
1769
- neckHeight?: number | undefined;
1770
- radialSegments?: number | undefined;
1771
- });
1996
+ constructor({ color, opacity, ...geometryOptions }?: ErlenmeyerFlaskOptions);
1772
1997
  }
1773
1998
 
1999
+ /**
2000
+ * Erlenmeyer flask profile — conical body with straight neck and lip.
2001
+ *
2002
+ * Local frame: base at Y=0.
2003
+ */
1774
2004
  export declare class ErlenmeyerFlaskGeometry extends BufferGeometry {
1775
- constructor({ flaskRadius, //
1776
- neckRadius, height, neckHeight, radialSegments, }?: {
1777
- flaskRadius?: number | undefined;
1778
- neckRadius?: number | undefined;
1779
- height?: number | undefined;
1780
- neckHeight?: number | undefined;
1781
- radialSegments?: number | undefined;
1782
- });
2005
+ readonly flaskRadius: number;
2006
+ readonly height: number;
2007
+ constructor({ flaskRadius, neckRadius, height, neckHeight, radialSegments, }?: ErlenmeyerFlaskGeometryOptions);
2008
+ }
2009
+
2010
+ export declare interface ErlenmeyerFlaskGeometryOptions {
2011
+ /** Flask body radius. Defaults to `1`. */
2012
+ flaskRadius?: number;
2013
+ /** Neck radius. Defaults to `0.3`. */
2014
+ neckRadius?: number;
2015
+ /** Body height before the neck. Defaults to `2.5`. */
2016
+ height?: number;
2017
+ /** Neck height. Defaults to `1`. */
2018
+ neckHeight?: number;
2019
+ /** Lathe segments. Defaults to `16`. */
2020
+ radialSegments?: number;
2021
+ }
2022
+
2023
+ export declare interface ErlenmeyerFlaskOptions extends ErlenmeyerFlaskGeometryOptions {
2024
+ /** Glass tint. Defaults to `#88ccff`. */
2025
+ color?: ColorRepresentation;
2026
+ /** Glass opacity. Defaults to `0.4`. */
2027
+ opacity?: number;
1783
2028
  }
1784
2029
 
1785
2030
  export declare const fadeShader: {
@@ -1861,13 +2106,17 @@ export declare function findClosestPoint(point: Vector3, mesh: Mesh): Vector3;
1861
2106
  */
1862
2107
  export declare function fitDiamondLatticeCell(width: number, height: number, preferredCell: number): number;
1863
2108
 
2109
+ /**
2110
+ * Emissive flame prefab — parametric teardrop volume for candles and lanterns.
2111
+ *
2112
+ * Local frame: base at Y=0, tip at Y=`height`.
2113
+ */
1864
2114
  export declare class Flame extends Mesh<FlameGeometry, MeshStandardMaterial> {
1865
- constructor({ height, radius, segmentsU, segmentsV }?: {
1866
- height?: number | undefined;
1867
- radius?: number | undefined;
1868
- segmentsU?: number | undefined;
1869
- segmentsV?: number | undefined;
1870
- });
2115
+ readonly height: number;
2116
+ readonly radius: number;
2117
+ readonly segmentsU: number;
2118
+ readonly segmentsV: number;
2119
+ constructor({ color, emissive, emissiveIntensity, ...geometryOptions }?: FlameOptions);
1871
2120
  }
1872
2121
 
1873
2122
  /**
@@ -1917,13 +2166,37 @@ export declare interface FlameFlickerEffectOptions {
1917
2166
  haloOpacity?: number;
1918
2167
  }
1919
2168
 
2169
+ /**
2170
+ * Teardrop flame volume — parametric surface tapering to a point at the top.
2171
+ *
2172
+ * Local frame: base at Y=0, tip at Y=`height`.
2173
+ */
1920
2174
  export declare class FlameGeometry extends ParametricGeometry {
1921
- constructor({ height, radius, segmentsU, segmentsV }?: {
1922
- height?: number | undefined;
1923
- radius?: number | undefined;
1924
- segmentsU?: number | undefined;
1925
- segmentsV?: number | undefined;
1926
- });
2175
+ readonly height: number;
2176
+ readonly radius: number;
2177
+ readonly segmentsU: number;
2178
+ readonly segmentsV: number;
2179
+ constructor({ height, radius, segmentsU, segmentsV, }?: FlameGeometryOptions);
2180
+ }
2181
+
2182
+ export declare interface FlameGeometryOptions {
2183
+ /** Flame tip height. Defaults to `0.25`. */
2184
+ height?: number;
2185
+ /** Base radius at the widest point. Defaults to `0.05`. */
2186
+ radius?: number;
2187
+ /** Parametric segments around the circumference. Defaults to `16`. */
2188
+ segmentsU?: number;
2189
+ /** Parametric segments along the height. Defaults to `16`. */
2190
+ segmentsV?: number;
2191
+ }
2192
+
2193
+ export declare interface FlameOptions extends FlameGeometryOptions {
2194
+ /** Surface tint. Defaults to `#ffd700`. */
2195
+ color?: ColorRepresentation;
2196
+ /** Emissive tint. Defaults to `#ffa500`. */
2197
+ emissive?: ColorRepresentation;
2198
+ /** Emissive strength. Defaults to `0.35`. */
2199
+ emissiveIntensity?: number;
1927
2200
  }
1928
2201
 
1929
2202
  /**
@@ -1946,22 +2219,38 @@ export declare interface FlythroughClipOptions extends CameraClipTiming {
1946
2219
  ease?: EasingFunction;
1947
2220
  }
1948
2221
 
1949
- export declare class Gear extends Mesh {
1950
- constructor({ sides, innerRadius, outerRadius, holeSides, holeRadius, depth }?: {
1951
- sides?: number | undefined;
1952
- innerRadius?: number | undefined;
1953
- outerRadius?: number | undefined;
1954
- holeSides?: number | undefined;
1955
- holeRadius?: number | undefined;
1956
- depth?: number | undefined;
1957
- });
2222
+ /**
2223
+ * Gear shape prefab.
2224
+ */
2225
+ export declare class Gear extends Mesh<GearGeometry, MeshStandardMaterial> {
2226
+ constructor({ color, ...geometryOptions }?: GearOptions);
1958
2227
  }
1959
2228
 
1960
2229
  /**
1961
- * Extrude geometry of Gear Shape.
2230
+ * Extruded gear profile with center hole.
1962
2231
  */
1963
2232
  export declare class GearGeometry extends ExtrudeGeometry {
1964
- constructor(sides?: number, innerRadius?: number, outerRadius?: number, holeSides?: number, holeRadius?: number, depth?: number);
2233
+ constructor({ sides, innerRadius, outerRadius, holeSides, holeRadius, depth, }?: GearGeometryOptions);
2234
+ }
2235
+
2236
+ export declare interface GearGeometryOptions {
2237
+ /** Number of gear teeth. Defaults to `5`. */
2238
+ sides?: number;
2239
+ /** Inner tooth valley radius. Defaults to `0.5`. */
2240
+ innerRadius?: number;
2241
+ /** Outer tooth tip radius. Defaults to `1`. */
2242
+ outerRadius?: number;
2243
+ /** Center hole sides. Defaults to `5`. */
2244
+ holeSides?: number;
2245
+ /** Center hole radius. Defaults to `0.25`. */
2246
+ holeRadius?: number;
2247
+ /** Extrusion depth. Defaults to `0.25`. */
2248
+ depth?: number;
2249
+ }
2250
+
2251
+ export declare interface GearOptions extends GearGeometryOptions {
2252
+ /** Metal tint. Defaults to `#aaaaaa`. */
2253
+ color?: ColorRepresentation;
1965
2254
  }
1966
2255
 
1967
2256
  export declare class GearShape extends Shape {
@@ -2227,32 +2516,51 @@ export declare interface HangingLanternOptions extends HangingLanternGeometryOpt
2227
2516
  lampOpacity?: number;
2228
2517
  }
2229
2518
 
2230
- export declare class Heart extends Mesh {
2231
- constructor({ size, width, height, tipDepth, depth }?: {
2232
- size?: number | undefined;
2233
- width?: number | undefined;
2234
- height?: number | undefined;
2235
- tipDepth?: number | undefined;
2236
- depth?: number | undefined;
2237
- });
2519
+ /**
2520
+ * Heart shape prefab.
2521
+ */
2522
+ export declare class Heart extends Mesh<HeartGeometry, MeshStandardMaterial> {
2523
+ constructor({ color, emissive, emissiveIntensity, ...geometryOptions }?: HeartOptions);
2238
2524
  }
2239
2525
 
2240
2526
  /**
2241
- * Extrude geometry of Heart Shape.
2527
+ * Extruded heart prism.
2242
2528
  */
2243
2529
  export declare class HeartGeometry extends ExtrudeGeometry {
2244
- constructor(size?: number, width?: number, height?: number, tipDepth?: number, depth?: number);
2530
+ constructor({ size, width, height, tipDepth, depth, }?: HeartGeometryOptions);
2531
+ }
2532
+
2533
+ export declare interface HeartGeometryOptions {
2534
+ /** Overall scale factor. Defaults to `1`. */
2535
+ size?: number;
2536
+ /** Heart width. Defaults to `2.1`. */
2537
+ width?: number;
2538
+ /** Heart height. Defaults to `1.4`. */
2539
+ height?: number;
2540
+ /** Tip depth. Defaults to `1.6`. */
2541
+ tipDepth?: number;
2542
+ /** Extrusion depth. Defaults to `0.25`. */
2543
+ depth?: number;
2544
+ }
2545
+
2546
+ export declare interface HeartOptions extends HeartGeometryOptions {
2547
+ /** Surface tint. Defaults to `#c62828`. */
2548
+ color?: ColorRepresentation;
2549
+ /** Emissive tint. Defaults to `#c61416`. */
2550
+ emissive?: ColorRepresentation;
2551
+ /** Emissive strength. Defaults to `0.25`. */
2552
+ emissiveIntensity?: number;
2245
2553
  }
2246
2554
 
2247
2555
  export declare class HeartShape extends Shape {
2248
2556
  constructor(size?: number, width?: number, height?: number, tipDepth?: number);
2249
2557
  }
2250
2558
 
2251
- export declare class Hexagon extends Mesh {
2252
- constructor({ radius, depth }?: {
2253
- radius?: number | undefined;
2254
- depth?: number | undefined;
2255
- });
2559
+ /**
2560
+ * Hexagon tile prefab.
2561
+ */
2562
+ export declare class Hexagon extends Mesh<HexagonGeometry, MeshStandardMaterial> {
2563
+ constructor({ color, emissive, emissiveIntensity, ...geometryOptions }?: HexagonOptions);
2256
2564
  }
2257
2565
 
2258
2566
  export declare interface HexagonalTileCountOptions {
@@ -2274,10 +2582,28 @@ export declare interface HexagonalTileRadiusOptions {
2274
2582
  }
2275
2583
 
2276
2584
  /**
2277
- * Extrude geometry of Hexagon Shape.
2585
+ * Extruded regular hexagon prism.
2278
2586
  */
2279
2587
  export declare class HexagonGeometry extends ExtrudeGeometry {
2280
- constructor(radius?: number, depth?: number);
2588
+ readonly radius: number;
2589
+ readonly depth: number;
2590
+ constructor({ radius, depth }?: HexagonGeometryOptions);
2591
+ }
2592
+
2593
+ export declare interface HexagonGeometryOptions {
2594
+ /** Hex circumradius. Defaults to `1`. */
2595
+ radius?: number;
2596
+ /** Extrusion depth. Defaults to `0.01`. */
2597
+ depth?: number;
2598
+ }
2599
+
2600
+ export declare interface HexagonOptions extends HexagonGeometryOptions {
2601
+ /** Surface tint. Defaults to `#ffffff`. */
2602
+ color?: ColorRepresentation;
2603
+ /** Emissive tint. Defaults to `#ffffff`. */
2604
+ emissive?: ColorRepresentation;
2605
+ /** Emissive strength. Defaults to `0.1`. */
2606
+ emissiveIntensity?: number;
2281
2607
  }
2282
2608
 
2283
2609
  export declare class HexagonShape extends Shape {
@@ -2292,28 +2618,42 @@ export declare function hexToHsl(hex: number): [number, number, number];
2292
2618
  */
2293
2619
  export declare function hexToRgb(hex: number): [number, number, number];
2294
2620
 
2621
+ /**
2622
+ * Hill prefab — hemispherical terrain mound.
2623
+ */
2295
2624
  export declare class Hill extends Mesh<HillGeometry, MeshStandardMaterial> {
2296
- constructor({ radius, //
2297
- height, widthSegments, heightSegments, phiStart, phiLength, }?: {
2298
- radius?: number | undefined;
2299
- height?: number | undefined;
2300
- widthSegments?: number | undefined;
2301
- heightSegments?: number | undefined;
2302
- phiStart?: number | undefined;
2303
- phiLength?: number | undefined;
2304
- });
2625
+ readonly radius: number;
2626
+ readonly height: number;
2627
+ constructor({ color, ...geometryOptions }?: HillOptions);
2305
2628
  }
2306
2629
 
2630
+ /**
2631
+ * Hemispherical hill — a sphere cap scaled on Y, base on the Y=0 plane.
2632
+ */
2307
2633
  export declare class HillGeometry extends BufferGeometry {
2308
- constructor({ radius, //
2309
- height, widthSegments, heightSegments, phiStart, phiLength, }?: {
2310
- radius?: number | undefined;
2311
- height?: number | undefined;
2312
- widthSegments?: number | undefined;
2313
- heightSegments?: number | undefined;
2314
- phiStart?: number | undefined;
2315
- phiLength?: number | undefined;
2316
- });
2634
+ readonly radius: number;
2635
+ readonly height: number;
2636
+ constructor({ radius, height, widthSegments, heightSegments, phiStart, phiLength, }?: HillGeometryOptions);
2637
+ }
2638
+
2639
+ export declare interface HillGeometryOptions {
2640
+ /** Base sphere radius before vertical squash. Defaults to `3`. */
2641
+ radius?: number;
2642
+ /** Peak height. Defaults to `0.6`. */
2643
+ height?: number;
2644
+ /** Horizontal segments. Defaults to `64`. */
2645
+ widthSegments?: number;
2646
+ /** Vertical segments. Defaults to `16`. */
2647
+ heightSegments?: number;
2648
+ /** Azimuth start angle (radians). Defaults to `0`. */
2649
+ phiStart?: number;
2650
+ /** Azimuth sweep (radians). Defaults to `2π`. */
2651
+ phiLength?: number;
2652
+ }
2653
+
2654
+ export declare interface HillOptions extends HillGeometryOptions {
2655
+ /** Surface tint. Defaults to `#00ff00`. */
2656
+ color?: ColorRepresentation;
2317
2657
  }
2318
2658
 
2319
2659
  /**
@@ -2330,6 +2670,9 @@ export declare function hslToHex(h: number, s: number, l: number): [number, numb
2330
2670
 
2331
2671
  export declare function hslToRgb(h: number, s: number, l: number): [number, number, number];
2332
2672
 
2673
+ /** Inset opening for frame ring inner edge (uniform `inset` wall thickness). */
2674
+ export declare function insetArchedOpeningMetrics(outer: ArchedOpeningMetrics, inset: number): ArchedOpeningMetrics;
2675
+
2333
2676
  /**
2334
2677
  * Generates an array of interpolated 2D points using an easing function.
2335
2678
  * @param curveFunction - The easing function to apply to the normalized value.
@@ -2371,7 +2714,7 @@ export declare class JarGeometry extends BufferGeometry {
2371
2714
  */
2372
2715
  export declare class Lantern extends Mesh<LanternGeometry, MeshStandardMaterial[]> {
2373
2716
  readonly lampCenterY: number;
2374
- constructor(heightOrOptions?: number | LanternOptions, baseWidth?: number);
2717
+ constructor({ color, lampColor, lampEmissiveIntensity, lampOpacity, inner, ...geometryOptions }?: LanternOptions);
2375
2718
  }
2376
2719
 
2377
2720
  /**
@@ -2645,79 +2988,84 @@ export declare class MortarGeometry extends BufferGeometry {
2645
2988
  }
2646
2989
 
2647
2990
  /**
2648
- * Material indices:
2649
- * 0. Rocks
2650
- * 1. Moss
2991
+ * Mossy rock prefab — grey stone with a translucent green moss shell.
2992
+ *
2993
+ * Material groups: `0` rock, `1` moss.
2651
2994
  */
2652
- export declare class MossyRocks extends Mesh<MossyRocksGeometry, MeshStandardMaterial[]> {
2653
- constructor();
2995
+ export declare class MossyRock extends Mesh<MossyRockGeometry, MeshStandardMaterial[]> {
2996
+ constructor({ rockColor, mossColor, mossOpacity, ...geometryOptions }?: MossyRockOptions);
2654
2997
  }
2655
2998
 
2656
2999
  /**
2657
- * Group indices:
2658
- * 0. Rocks
2659
- * 1. Moss
3000
+ * Mossy rock — dodecahedron body with a smaller, flatter moss shell (group 1).
3001
+ *
3002
+ * Material groups: `0` rock, `1` moss.
3003
+ *
3004
+ * Local frame: centered on the rock body.
2660
3005
  */
2661
- export declare class MossyRocksGeometry extends BufferGeometry {
2662
- constructor();
3006
+ export declare class MossyRockGeometry extends BufferGeometry {
3007
+ readonly radius: number;
3008
+ readonly detail: number;
3009
+ constructor({ radius, detail, mossScaleXZ, mossScaleY, mossOffsetY, }?: MossyRockGeometryOptions);
3010
+ }
3011
+
3012
+ export declare interface MossyRockGeometryOptions {
3013
+ /** Rock dodecahedron radius. Defaults to `1`. */
3014
+ radius?: number;
3015
+ /** Dodecahedron detail level. Defaults to `0`. */
3016
+ detail?: number;
3017
+ /** Moss horizontal scale relative to the rock. Defaults to `0.9`. */
3018
+ mossScaleXZ?: number;
3019
+ /** Moss vertical scale relative to the rock. Defaults to `0.5`. */
3020
+ mossScaleY?: number;
3021
+ /** Moss center offset above the rock origin. Defaults to `0.3`. */
3022
+ mossOffsetY?: number;
3023
+ }
3024
+
3025
+ export declare interface MossyRockOptions extends MossyRockGeometryOptions {
3026
+ /** Rock tint. Defaults to `#808080`. */
3027
+ rockColor?: ColorRepresentation;
3028
+ /** Moss tint. Defaults to `#4b8b3b`. */
3029
+ mossColor?: ColorRepresentation;
3030
+ /** Moss opacity. Defaults to `0.8`. */
3031
+ mossOpacity?: number;
2663
3032
  }
2664
3033
 
2665
3034
  /**
2666
- * Mound-like mesh with a flat top.
2667
- *
2668
- * To create a radius based on a desired width:
2669
- * ```
2670
- * const mound = new Mound({
2671
- * radius: radiusFromCapWidth(5, Math.PI / 10),
2672
- * }
2673
- * ```
2674
- *
2675
- * To create a radius based on a desired height:
2676
- * ```
2677
- * const mound = new Mound({
2678
- * radius: radiusFromCapHeight(5, Math.PI / 10),
2679
- * }
2680
- * ```
3035
+ * Mound prefab flat-topped terrain cap.
2681
3036
  */
2682
3037
  export declare class Mound extends Mesh<MoundGeometry, MeshStandardMaterial> {
2683
- constructor({ radius, //
2684
- widthSegments, heightSegments, phiStart, phiLength, thetaLength, }?: {
2685
- radius?: number | undefined;
2686
- widthSegments?: number | undefined;
2687
- heightSegments?: number | undefined;
2688
- phiStart?: number | undefined;
2689
- phiLength?: number | undefined;
2690
- thetaLength?: number | undefined;
2691
- });
3038
+ readonly radius: number;
3039
+ constructor({ color, radius, ...geometryOptions }?: MoundOptions);
2692
3040
  }
2693
3041
 
2694
3042
  /**
2695
- * Mound-like geometry with a flat top.
2696
- *
2697
- * To create a radius based on a desired width:
2698
- * ```
2699
- * const moundGeometry = new MoundGeometry({
2700
- * radius: radiusFromCapWidth(5, Math.PI / 10),
2701
- * }
2702
- * ```
2703
- *
2704
- * To create a radius based on a desired height:
2705
- * ```
2706
- * const moundGeometry = new MoundGeometry({
2707
- * radius: radiusFromCapHeight(5, Math.PI / 10),
2708
- * }
2709
- * ```
3043
+ * Mound-like geometry with a flat top — sphere cap, base on Y=0.
2710
3044
  */
2711
3045
  export declare class MoundGeometry extends BufferGeometry {
2712
- constructor({ radius, //
2713
- widthSegments, heightSegments, phiStart, phiLength, thetaLength, }?: {
2714
- radius?: number | undefined;
2715
- widthSegments?: number | undefined;
2716
- heightSegments?: number | undefined;
2717
- phiStart?: number | undefined;
2718
- phiLength?: number | undefined;
2719
- thetaLength?: number | undefined;
2720
- });
3046
+ readonly radius: number;
3047
+ readonly thetaLength: number;
3048
+ constructor({ radius, widthSegments, heightSegments, phiStart, phiLength, thetaLength, }?: MoundGeometryOptions);
3049
+ }
3050
+
3051
+ export declare interface MoundGeometryOptions {
3052
+ /** Sphere radius. Defaults to a cap width of `5` at `thetaLength`. */
3053
+ radius?: number;
3054
+ /** Horizontal segments. Defaults to `64`. */
3055
+ widthSegments?: number;
3056
+ /** Vertical segments. Defaults to `32`. */
3057
+ heightSegments?: number;
3058
+ /** Azimuth start angle (radians). Defaults to `0`. */
3059
+ phiStart?: number;
3060
+ /** Azimuth sweep (radians). Defaults to `2π`. */
3061
+ phiLength?: number;
3062
+ /** Polar sweep from the north pole (radians). Defaults to `π/10`. */
3063
+ thetaLength?: number;
3064
+ }
3065
+
3066
+ export declare interface MoundOptions extends MoundGeometryOptions {
3067
+ /** Surface tint. Defaults to `#00ff00`. */
3068
+ color?: ColorRepresentation;
2721
3069
  }
2722
3070
 
2723
3071
  /**
@@ -2812,17 +3160,37 @@ export declare function normalizeUV(uv: [number, number], minU: number, maxU: nu
2812
3160
  */
2813
3161
  export declare function normalizeUVBatch(uvs: [number, number][], minBounds: [number, number], maxBounds: [number, number]): [number, number][];
2814
3162
 
3163
+ /**
3164
+ * Obelisk headstone prefab.
3165
+ */
2815
3166
  export declare class ObeliskHeadstone extends Mesh<ObeliskHeadstoneGeometry, MeshStandardMaterial> {
2816
- constructor({ totalHeight, baseWidth }?: ObeliskHeadstoneOptions);
3167
+ readonly totalHeight: number;
3168
+ constructor({ color, roughness, ...geometryOptions }?: ObeliskHeadstoneOptions);
2817
3169
  }
2818
3170
 
3171
+ /**
3172
+ * Tiered obelisk headstone with pyramid cap.
3173
+ *
3174
+ * Local frame: base on Y=0, centered on X/Z.
3175
+ */
2819
3176
  export declare class ObeliskHeadstoneGeometry extends BufferGeometry {
2820
- constructor(totalHeight?: number, baseWidth?: number);
3177
+ readonly totalHeight: number;
3178
+ readonly baseWidth: number;
3179
+ constructor({ totalHeight, baseWidth }?: ObeliskHeadstoneGeometryOptions);
2821
3180
  }
2822
3181
 
2823
- declare interface ObeliskHeadstoneOptions {
2824
- baseWidth?: number;
3182
+ export declare interface ObeliskHeadstoneGeometryOptions {
3183
+ /** Total monument height. Defaults to `1.75`. */
2825
3184
  totalHeight?: number;
3185
+ /** Base platform width. Defaults to `0.75`. */
3186
+ baseWidth?: number;
3187
+ }
3188
+
3189
+ export declare interface ObeliskHeadstoneOptions extends ObeliskHeadstoneGeometryOptions {
3190
+ /** Stone tint. Defaults to `#777777`. */
3191
+ color?: ColorRepresentation;
3192
+ /** Surface roughness. Defaults to `0.8`. */
3193
+ roughness?: number;
2826
3194
  }
2827
3195
 
2828
3196
  export declare interface OrbitClipOptions extends CameraClipTiming {
@@ -3379,20 +3747,55 @@ declare interface RingLatticeWindowOptions {
3379
3747
  glassEmissiveIntensity?: number;
3380
3748
  }
3381
3749
 
3750
+ /**
3751
+ * Single rock prefab — noisy sphere mesh.
3752
+ */
3382
3753
  export declare class Rock extends Mesh<RockGeometry, MeshStandardMaterial> {
3383
- constructor(radius?: number, widthSegments?: number, heightSegments?: number);
3754
+ constructor({ color, ...geometryOptions }?: RockOptions);
3384
3755
  }
3385
3756
 
3757
+ /**
3758
+ * Low-poly rock — sphere with randomized vertex offsets, then centered.
3759
+ */
3386
3760
  export declare class RockGeometry extends BufferGeometry {
3387
- constructor(radius?: number, widthSegments?: number, heightSegments?: number);
3761
+ readonly radius: number;
3762
+ readonly widthSegments: number;
3763
+ readonly heightSegments: number;
3764
+ constructor({ radius, widthSegments, heightSegments, }?: RockGeometryOptions);
3388
3765
  }
3389
3766
 
3390
- export declare class Rocks extends Mesh<RocksGeometry, MeshStandardMaterial> {
3391
- constructor();
3767
+ export declare interface RockGeometryOptions {
3768
+ /** Base sphere radius before vertex noise. Defaults to `1`. */
3769
+ radius?: number;
3770
+ /** Horizontal segments. Defaults to `4`. */
3771
+ widthSegments?: number;
3772
+ /** Vertical segments. Defaults to `4`. */
3773
+ heightSegments?: number;
3392
3774
  }
3393
3775
 
3394
- export declare class RocksGeometry extends BufferGeometry {
3395
- constructor();
3776
+ export declare interface RockOptions extends RockGeometryOptions {
3777
+ /** Stone tint. Defaults to `#808080`. */
3778
+ color?: ColorRepresentation;
3779
+ }
3780
+
3781
+ export declare interface RockScatterBounds {
3782
+ /** Scatter extent along X (centered on origin). Defaults to `4`. */
3783
+ width?: number;
3784
+ /** Scatter extent along Z (centered on origin). Defaults to `4`. */
3785
+ depth?: number;
3786
+ /** Max random Y offset above the ground plane. Defaults to `0`. */
3787
+ heightJitter?: number;
3788
+ }
3789
+
3790
+ export declare interface RockScatterPlacementOptions extends RockScatterBounds {
3791
+ /** Number of instances. Defaults to `5`. */
3792
+ count?: number;
3793
+ /** Min per-axis instance scale. Defaults to `0.8`. */
3794
+ scaleMin?: number;
3795
+ /** Max per-axis instance scale. Defaults to `1.2`. */
3796
+ scaleMax?: number;
3797
+ /** Optional seed for reproducible scatter. Omit for unique runtime. */
3798
+ seed?: number;
3396
3799
  }
3397
3800
 
3398
3801
  export declare class RoundedHeadstone extends Mesh<RoundedHeadstoneGeometry, MeshStandardMaterial> {
@@ -3426,7 +3829,7 @@ declare interface RowOfBooksByScalesOptions<T extends Material = Material> {
3426
3829
  source: RandomSource;
3427
3830
  }
3428
3831
 
3429
- declare interface RowOfBooksOptions<T extends Material = Material> {
3832
+ export declare interface RowOfBooksOptions<T extends Material = Material> {
3430
3833
  coverMaterial: T;
3431
3834
  pagesMaterial: T;
3432
3835
  count?: number;
@@ -3441,6 +3844,51 @@ declare interface RowOfBooksOptions<T extends Material = Material> {
3441
3844
  seed?: number;
3442
3845
  }
3443
3846
 
3847
+ /**
3848
+ * Scatter instanced mossy rocks inside a horizontal bounds region.
3849
+ *
3850
+ * Uses two material groups (rock + moss) on a shared {@link InstancedMesh}.
3851
+ */
3852
+ export declare function scatterMossyRocks({ count, width, depth, heightJitter, scaleMin, scaleMax, seed, radius, detail, mossScaleXZ, mossScaleY, mossOffsetY, rockMaterial, mossMaterial, rockColor, mossColor, mossOpacity, }?: ScatterMossyRocksOptions): InstancedMesh;
3853
+
3854
+ export declare interface ScatterMossyRocksOptions extends RockScatterPlacementOptions {
3855
+ /** Dodecahedron radius for each instance geometry. Defaults to `1`. */
3856
+ radius?: number;
3857
+ detail?: number;
3858
+ mossScaleXZ?: number;
3859
+ mossScaleY?: number;
3860
+ mossOffsetY?: number;
3861
+ rockMaterial?: Material;
3862
+ mossMaterial?: Material;
3863
+ /** Rock tint when `rockMaterial` is omitted. Defaults to `#808080`. */
3864
+ rockColor?: ColorRepresentation;
3865
+ /** Moss tint when `mossMaterial` is omitted. Defaults to `#4b8b3b`. */
3866
+ mossColor?: ColorRepresentation;
3867
+ /** Moss opacity when `mossMaterial` is omitted. Defaults to `0.8`. */
3868
+ mossOpacity?: number;
3869
+ }
3870
+
3871
+ /**
3872
+ * Scatter instanced rocks inside a horizontal bounds region.
3873
+ *
3874
+ * @example
3875
+ * ```ts
3876
+ * const rocks = scatterRocks({ count: 12, width: 8, depth: 8, seed: 1337 });
3877
+ * scene.add(rocks);
3878
+ * ```
3879
+ */
3880
+ export declare function scatterRocks({ count, width, depth, heightJitter, scaleMin, scaleMax, seed, radius, widthSegments, heightSegments, material, color, }?: ScatterRocksOptions): InstancedMesh;
3881
+
3882
+ export declare interface ScatterRocksOptions extends RockScatterPlacementOptions {
3883
+ /** Base sphere radius for each instance geometry. Defaults to `1`. */
3884
+ radius?: number;
3885
+ widthSegments?: number;
3886
+ heightSegments?: number;
3887
+ material?: Material;
3888
+ /** Stone tint when `material` is omitted. Defaults to `#808080`. */
3889
+ color?: ColorRepresentation;
3890
+ }
3891
+
3444
3892
  /**
3445
3893
  * SceneTransition provides smooth animated transitions between Three.js scenes.
3446
3894
  *
@@ -3846,6 +4294,49 @@ export declare class SquareHeadstoneGeometry extends BufferGeometry {
3846
4294
  constructor(width?: number, height?: number, depth?: number);
3847
4295
  }
3848
4296
 
4297
+ /**
4298
+ * Stack of books on the floor — each book lays flat on its cover; count sets stack height.
4299
+ * Each layer is laid flat (+90° X), then given a small in-plane spin (world Y)
4300
+ * around the book's geometric center — not the spine corner.
4301
+ *
4302
+ * Local frame: bottom of the stack at Y=0, centered on X/Z.
4303
+ *
4304
+ * @example
4305
+ * ```ts
4306
+ * const stack = stackOfBooks({
4307
+ * coverMaterial,
4308
+ * pagesMaterial,
4309
+ * count: 8,
4310
+ * yawMax: 0.6,
4311
+ * seed: 1337,
4312
+ * });
4313
+ * scene.add(stack);
4314
+ * ```
4315
+ */
4316
+ export declare function stackOfBooks<T extends Material>({ coverMaterial, pagesMaterial, count, scaleXMin, scaleXMax, scaleYMin, scaleYMax, scaleZMin, scaleZMax, yawMax, offsetMax, seed, }: StackOfBooksOptions<T>): InstancedMesh;
4317
+
4318
+ export declare interface StackOfBooksOptions<T extends Material = Material> {
4319
+ coverMaterial: T;
4320
+ pagesMaterial: T;
4321
+ /** Number of books in the stack. Defaults to `6`. */
4322
+ count?: number;
4323
+ scaleXMin?: number;
4324
+ scaleXMax?: number;
4325
+ scaleYMin?: number;
4326
+ scaleYMax?: number;
4327
+ scaleZMin?: number;
4328
+ scaleZMax?: number;
4329
+ /**
4330
+ * Max in-plane spin (world Y, radians) once the book is laid flat — a lazy
4331
+ * turn on the floor, not a tilt. Defaults to `0.55` (~31°).
4332
+ */
4333
+ yawMax?: number;
4334
+ /** Max horizontal drift per layer on X/Z. Defaults to `0.06`. */
4335
+ offsetMax?: number;
4336
+ /** Optional seed for reproducible layout. Omit for unique runtime. */
4337
+ seed?: number;
4338
+ }
4339
+
3849
4340
  /**
3850
4341
  * Straight run staircase prefab — {@link StaircaseGeometry} with a wood-tone
3851
4342
  * default material.
@@ -3895,35 +4386,48 @@ export declare interface StaircaseOptions extends StaircaseGeometryOptions {
3895
4386
  color?: ColorRepresentation;
3896
4387
  }
3897
4388
 
4389
+ /**
4390
+ * Laboratory stand prefab — ring and legs.
4391
+ */
3898
4392
  export declare class Stand extends Mesh<StandGeometry, MeshStandardMaterial> {
3899
- constructor({ radius, //
3900
- height, count, thickness, radialSegments, }?: {
3901
- radius?: number | undefined;
3902
- height?: number | undefined;
3903
- count?: number | undefined;
3904
- thickness?: number | undefined;
3905
- radialSegments?: number | undefined;
3906
- });
4393
+ constructor({ color, ...geometryOptions }?: StandOptions);
3907
4394
  }
3908
4395
 
4396
+ /**
4397
+ * Tripod-style stand — torus ring with radial legs.
4398
+ *
4399
+ * Local frame: legs on Y=0.
4400
+ */
3909
4401
  export declare class StandGeometry extends BufferGeometry {
3910
- constructor({ radius, //
3911
- height, count, thickness, radialSegments, }?: {
3912
- radius?: number | undefined;
3913
- height?: number | undefined;
3914
- count?: number | undefined;
3915
- thickness?: number | undefined;
3916
- radialSegments?: number | undefined;
3917
- });
4402
+ readonly radius: number;
4403
+ readonly height: number;
4404
+ readonly count: number;
4405
+ constructor({ radius, height, count, thickness, radialSegments, }?: StandGeometryOptions);
3918
4406
  }
3919
4407
 
3920
- export declare class Star extends Mesh {
3921
- constructor({ points, innerRadius, outerRadius, depth }?: {
3922
- points?: number | undefined;
3923
- innerRadius?: number | undefined;
3924
- outerRadius?: number | undefined;
3925
- depth?: number | undefined;
3926
- });
4408
+ export declare interface StandGeometryOptions {
4409
+ /** Ring radius. Defaults to `0.3`. */
4410
+ radius?: number;
4411
+ /** Leg height. Defaults to `0.4`. */
4412
+ height?: number;
4413
+ /** Number of legs. Defaults to `3`. */
4414
+ count?: number;
4415
+ /** Ring tube thickness. Defaults to `0.03`. */
4416
+ thickness?: number;
4417
+ /** Circumference segments. Defaults to `16`. */
4418
+ radialSegments?: number;
4419
+ }
4420
+
4421
+ export declare interface StandOptions extends StandGeometryOptions {
4422
+ /** Metal tint. Defaults to `#888888`. */
4423
+ color?: ColorRepresentation;
4424
+ }
4425
+
4426
+ /**
4427
+ * Star shape prefab.
4428
+ */
4429
+ export declare class Star extends Mesh<StarGeometry, MeshStandardMaterial> {
4430
+ constructor({ color, emissive, emissiveIntensity, ...geometryOptions }?: StarOptions);
3927
4431
  }
3928
4432
 
3929
4433
  export declare interface StarBurstShapeOptions {
@@ -4042,29 +4546,62 @@ export declare interface StarFieldEffectOptions {
4042
4546
  }
4043
4547
 
4044
4548
  /**
4045
- * Extrude geometry of Star Shape.
4549
+ * Extruded star prism.
4046
4550
  */
4047
4551
  export declare class StarGeometry extends ExtrudeGeometry {
4048
- constructor(points?: number, innerRadius?: number, outerRadius?: number, depth?: number);
4552
+ constructor({ points, innerRadius, outerRadius, depth, }?: StarGeometryOptions);
4553
+ }
4554
+
4555
+ export declare interface StarGeometryOptions {
4556
+ /** Number of star points. Defaults to `5`. */
4557
+ points?: number;
4558
+ /** Inner vertex radius. Defaults to `0.5`. */
4559
+ innerRadius?: number;
4560
+ /** Outer vertex radius. Defaults to `1`. */
4561
+ outerRadius?: number;
4562
+ /** Extrusion depth. Defaults to `0.25`. */
4563
+ depth?: number;
4564
+ }
4565
+
4566
+ export declare interface StarOptions extends StarGeometryOptions {
4567
+ /** Surface tint. Defaults to `#ffff00`. */
4568
+ color?: ColorRepresentation;
4569
+ /** Emissive tint. Defaults to `#ffd700`. */
4570
+ emissive?: ColorRepresentation;
4571
+ /** Emissive strength. Defaults to `0.25`. */
4572
+ emissiveIntensity?: number;
4049
4573
  }
4050
4574
 
4051
4575
  export declare class StarShape extends Shape {
4052
4576
  constructor(points?: number, innerRadius?: number, outerRadius?: number);
4053
4577
  }
4054
4578
 
4579
+ /**
4580
+ * Stone fence post prefab.
4581
+ */
4055
4582
  export declare class StoneFencePost extends Mesh<StoneFencePostGeometry, MeshStandardMaterial> {
4056
- constructor({ height }?: {
4057
- height?: number | undefined;
4058
- });
4583
+ readonly height: number;
4584
+ constructor({ color, ...geometryOptions }?: StoneFencePostOptions);
4059
4585
  }
4060
4586
 
4061
4587
  /**
4062
- * Fence Column Geometry, a stone slab fence column shape
4588
+ * Stone fence post wide base, column, and cap.
4589
+ *
4590
+ * Local frame: base on Y=0.
4063
4591
  */
4064
4592
  export declare class StoneFencePostGeometry extends BufferGeometry {
4065
- constructor({ height }?: {
4066
- height?: number | undefined;
4067
- });
4593
+ readonly height: number;
4594
+ constructor({ height }?: StoneFencePostGeometryOptions);
4595
+ }
4596
+
4597
+ export declare interface StoneFencePostGeometryOptions {
4598
+ /** Main column height (excluding base and cap). Defaults to `2.25`. */
4599
+ height?: number;
4600
+ }
4601
+
4602
+ export declare interface StoneFencePostOptions extends StoneFencePostGeometryOptions {
4603
+ /** Stone tint. Defaults to `#8b7d7b`. */
4604
+ color?: ColorRepresentation;
4068
4605
  }
4069
4606
 
4070
4607
  /**
@@ -4094,14 +4631,15 @@ export declare class TestTubeGeometry extends BufferGeometry {
4094
4631
  }
4095
4632
 
4096
4633
  /**
4097
- * Wooden rack with instanced test tubes and emissive liquid fills.
4634
+ * Wooden rack with test tubes and emissive liquid fills.
4098
4635
  *
4099
4636
  * Glass shells use `DoubleSide` and `depthWrite: false`; liquid draws first
4100
4637
  * (`renderOrder` 1), glass second (`renderOrder` 2) so fills stay visible at
4101
4638
  * most camera angles.
4102
4639
  */
4103
4640
  export declare class TestTubeRack extends Group {
4104
- constructor(count?: number, colors?: ColorRepresentation[]);
4641
+ readonly count: number;
4642
+ constructor({ count, colors, }?: TestTubeRackOptions);
4105
4643
  }
4106
4644
 
4107
4645
  export declare interface TestTubeRackOptions {
@@ -4126,60 +4664,60 @@ export declare interface TestTubeRackOptions {
4126
4664
  */
4127
4665
  export declare const thetaLengthForRadius: (sphereRadius: number, holeRadius: number) => number;
4128
4666
 
4667
+ /** Trace the shared rect-plus-arch outline (glass, stencil mask, frame outer edge). */
4668
+ export declare function traceArchedOpeningOutline(target: ArchedOutlineTarget, metrics: ArchedOpeningMetrics, { hole }?: {
4669
+ hole?: boolean;
4670
+ }): void;
4671
+
4129
4672
  /**
4130
- * Material indices:
4131
- * 0. Trunk
4132
- * 1. leafSize
4133
- *
4134
- * Example usage:
4135
- * ```
4136
- * const tree = new Tree({
4137
- * trunkRadiusTop: 0.25,
4138
- * trunkRadiusBottom: 0.4,
4139
- * trunkHeight: 2.5,
4140
- * trunkSegments: 14,
4141
- * trunkColor: 0x8b4513,
4142
- * leafSize: 0.8,
4143
- * leafCount: 6,
4144
- * leafDetail: 0,
4145
- * leafSpreadRadius: 1.5,
4146
- * leafColor: 0x228b22,
4147
- * });
4148
- * ```
4673
+ * Low-poly tree prefab — trunk and leaf clusters with separate material groups.
4149
4674
  */
4150
4675
  export declare class Tree extends Mesh<TreeGeometry, MeshStandardMaterial[]> {
4151
- constructor({ trunkRadiusTop, trunkRadiusBottom, trunkHeight, trunkSegments, trunkColor, leafSize, leafCount, leafDetail, leafSpreadRadius, leafColor, }?: {
4152
- trunkRadiusTop?: number | undefined;
4153
- trunkRadiusBottom?: number | undefined;
4154
- trunkHeight?: number | undefined;
4155
- trunkSegments?: number | undefined;
4156
- trunkColor?: number | undefined;
4157
- leafSize?: number | undefined;
4158
- leafCount?: number | undefined;
4159
- leafDetail?: number | undefined;
4160
- leafSpreadRadius?: number | undefined;
4161
- leafColor?: number | undefined;
4162
- });
4676
+ readonly trunkHeight: number;
4677
+ constructor({ trunkColor, leafColor, ...geometryOptions }?: TreeOptions);
4163
4678
  }
4164
4679
 
4165
4680
  /**
4166
- * Tree geometry, consisting of a trunk and leaves.
4681
+ * Low-poly tree trunk (group 0) and leaf clusters (group 1).
4167
4682
  *
4168
- * Group order:
4169
- * - Trunk Material
4170
- * - Leaf Material
4683
+ * Local frame: trunk base at Y=0. Leaf positions use `Math.random()` each build.
4171
4684
  */
4172
4685
  export declare class TreeGeometry extends BufferGeometry {
4173
- constructor({ trunkRadiusTop, trunkRadiusBottom, trunkHeight, trunkSegments, leafSize, leafCount, leafDetail, leafSpreadRadius, }?: {
4174
- trunkRadiusTop?: number | undefined;
4175
- trunkRadiusBottom?: number | undefined;
4176
- trunkHeight?: number | undefined;
4177
- trunkSegments?: number | undefined;
4178
- leafSize?: number | undefined;
4179
- leafCount?: number | undefined;
4180
- leafDetail?: number | undefined;
4181
- leafSpreadRadius?: number | undefined;
4182
- });
4686
+ readonly trunkRadiusTop: number;
4687
+ readonly trunkRadiusBottom: number;
4688
+ readonly trunkHeight: number;
4689
+ readonly trunkSegments: number;
4690
+ readonly leafSize: number;
4691
+ readonly leafCount: number;
4692
+ readonly leafDetail: number;
4693
+ readonly leafSpreadRadius: number;
4694
+ constructor({ trunkRadiusTop, trunkRadiusBottom, trunkHeight, trunkSegments, leafSize, leafCount, leafDetail, leafSpreadRadius, }?: TreeGeometryOptions);
4695
+ }
4696
+
4697
+ export declare interface TreeGeometryOptions {
4698
+ /** Trunk top radius. Defaults to `0.25`. */
4699
+ trunkRadiusTop?: number;
4700
+ /** Trunk bottom radius. Defaults to `0.4`. */
4701
+ trunkRadiusBottom?: number;
4702
+ /** Trunk height. Defaults to `2.5`. */
4703
+ trunkHeight?: number;
4704
+ /** Trunk circumference segments. Defaults to `14`. */
4705
+ trunkSegments?: number;
4706
+ /** Leaf dodecahedron radius. Defaults to `0.8`. */
4707
+ leafSize?: number;
4708
+ /** Number of leaf clusters. Defaults to `6`. */
4709
+ leafCount?: number;
4710
+ /** Leaf dodecahedron detail level. Defaults to `0`. */
4711
+ leafDetail?: number;
4712
+ /** Horizontal spread of leaf placement. Defaults to `1.5`. */
4713
+ leafSpreadRadius?: number;
4714
+ }
4715
+
4716
+ export declare interface TreeOptions extends TreeGeometryOptions {
4717
+ /** Trunk tint. Defaults to `#8b4513`. */
4718
+ trunkColor?: ColorRepresentation;
4719
+ /** Leaf tint. Defaults to `#228b22`. */
4720
+ leafColor?: ColorRepresentation;
4183
4721
  }
4184
4722
 
4185
4723
  /**
@@ -4302,18 +4840,40 @@ export declare interface WallSconceOptions extends WallSconceGeometryOptions {
4302
4840
  lampOpacity?: number;
4303
4841
  }
4304
4842
 
4843
+ /**
4844
+ * Wine bottle prefab — translucent green glass.
4845
+ */
4305
4846
  export declare class WineBottle extends Mesh<WineBottleGeometry, MeshPhysicalMaterial> {
4306
- constructor();
4847
+ constructor({ color, ...geometryOptions }?: WineBottleOptions);
4307
4848
  }
4308
4849
 
4850
+ /**
4851
+ * Wine bottle — cylindrical body, shoulder taper, and neck.
4852
+ *
4853
+ * Local frame: base at Y=0.
4854
+ */
4309
4855
  export declare class WineBottleGeometry extends BufferGeometry {
4310
- constructor({ radius, neckRadius, height, neckHeight, segments }?: {
4311
- radius?: number | undefined;
4312
- neckRadius?: number | undefined;
4313
- height?: number | undefined;
4314
- neckHeight?: number | undefined;
4315
- segments?: number | undefined;
4316
- });
4856
+ readonly radius: number;
4857
+ readonly height: number;
4858
+ constructor({ radius, neckRadius, height, neckHeight, segments, }?: WineBottleGeometryOptions);
4859
+ }
4860
+
4861
+ export declare interface WineBottleGeometryOptions {
4862
+ /** Body radius. Defaults to `0.5`. */
4863
+ radius?: number;
4864
+ /** Neck radius. Defaults to `0.2`. */
4865
+ neckRadius?: number;
4866
+ /** Total height including neck. Defaults to `3`. */
4867
+ height?: number;
4868
+ /** Neck height. Defaults to `1`. */
4869
+ neckHeight?: number;
4870
+ /** Circumference segments. Defaults to `16`. */
4871
+ segments?: number;
4872
+ }
4873
+
4874
+ export declare interface WineBottleOptions extends WineBottleGeometryOptions {
4875
+ /** Glass tint. Defaults to `#556b2f`. */
4876
+ color?: ColorRepresentation;
4317
4877
  }
4318
4878
 
4319
4879
  /**
@@ -4404,65 +4964,91 @@ export declare interface WobbleClipOptions extends CameraClipTiming {
4404
4964
  ease?: EasingFunction;
4405
4965
  }
4406
4966
 
4967
+ /**
4968
+ * Wrought-iron fence post prefab.
4969
+ */
4407
4970
  export declare class WroughtIronBar extends Mesh<WroughtIronBarGeometry, MeshStandardMaterial> {
4408
- constructor({ barHeight, //
4409
- barRadius, spikeHeight, spikeRadius, spikeScaleZ, radialSegments, }?: {
4410
- barHeight?: number | undefined;
4411
- barRadius?: number | undefined;
4412
- spikeHeight?: number | undefined;
4413
- spikeRadius?: number | undefined;
4414
- spikeScaleZ?: number | undefined;
4415
- radialSegments?: number | undefined;
4416
- });
4971
+ readonly barHeight: number;
4972
+ constructor({ color, ...geometryOptions }?: WroughtIronBarOptions);
4417
4973
  }
4418
4974
 
4419
4975
  /**
4420
- * Wrought Iron Bar Geometry, a simple wrought iron bar shape
4976
+ * Wrought-iron fence post cylinder bar with a decorative spike.
4977
+ *
4978
+ * Local frame: base at Y=0.
4421
4979
  */
4422
4980
  export declare class WroughtIronBarGeometry extends BufferGeometry {
4423
- constructor({ barHeight, //
4424
- barRadius, spikeHeight, spikeRadius, spikeScaleZ, radialSegments, }?: {
4425
- barHeight?: number | undefined;
4426
- barRadius?: number | undefined;
4427
- spikeHeight?: number | undefined;
4428
- spikeRadius?: number | undefined;
4429
- spikeScaleZ?: number | undefined;
4430
- radialSegments?: number | undefined;
4431
- });
4981
+ readonly barHeight: number;
4982
+ constructor({ barHeight, barRadius, spikeHeight, spikeRadius, spikeScaleZ, radialSegments, }?: WroughtIronBarGeometryOptions);
4983
+ }
4984
+
4985
+ export declare interface WroughtIronBarGeometryOptions {
4986
+ /** Vertical bar height. Defaults to `2`. */
4987
+ barHeight?: number;
4988
+ /** Bar cylinder radius. Defaults to `0.05`. */
4989
+ barRadius?: number;
4990
+ /** Spike cone height. Defaults to `0.3`. */
4991
+ spikeHeight?: number;
4992
+ /** Spike base radius. Defaults to `0.075`. */
4993
+ spikeRadius?: number;
4994
+ /** Spike depth scale on Z. Defaults to `1`. */
4995
+ spikeScaleZ?: number;
4996
+ /** Circumference segments. Defaults to `8`. */
4997
+ radialSegments?: number;
4998
+ }
4999
+
5000
+ export declare interface WroughtIronBarOptions extends WroughtIronBarGeometryOptions {
5001
+ /** Iron tint. Defaults to `#333333`. */
5002
+ color?: ColorRepresentation;
4432
5003
  }
4433
5004
 
5005
+ /**
5006
+ * Wrought-iron fence run prefab.
5007
+ */
4434
5008
  export declare class WroughtIronFence extends Mesh<WroughtIronFenceGeometry, MeshStandardMaterial> {
4435
- constructor({ count, //
4436
- spacing, barHeight, barRadius, spikeHeight, spikeRadius, spikeScaleZ, railHeight, railDepth, railOffset, radialSegments, }?: {
4437
- count?: number | undefined;
4438
- spacing?: number | undefined;
4439
- barHeight?: number | undefined;
4440
- barRadius?: number | undefined;
4441
- spikeHeight?: number | undefined;
4442
- spikeRadius?: number | undefined;
4443
- spikeScaleZ?: number | undefined;
4444
- railHeight?: number | undefined;
4445
- railDepth?: number | undefined;
4446
- railOffset?: number | undefined;
4447
- radialSegments?: number | undefined;
4448
- });
5009
+ readonly count: number;
5010
+ constructor({ color, ...geometryOptions }?: WroughtIronFenceOptions);
4449
5011
  }
4450
5012
 
5013
+ /**
5014
+ * Wrought-iron fence run — repeated posts with top and bottom rails.
5015
+ *
5016
+ * Local frame: first post at the origin, extending along +X.
5017
+ */
4451
5018
  export declare class WroughtIronFenceGeometry extends BufferGeometry {
4452
- constructor({ count, //
4453
- spacing, barHeight, barRadius, spikeHeight, spikeRadius, spikeScaleZ, railHeight, railDepth, railOffset, radialSegments, }?: {
4454
- count?: number | undefined;
4455
- spacing?: number | undefined;
4456
- barHeight?: number | undefined;
4457
- barRadius?: number | undefined;
4458
- spikeHeight?: number | undefined;
4459
- spikeRadius?: number | undefined;
4460
- spikeScaleZ?: number | undefined;
4461
- railHeight?: number | undefined;
4462
- railDepth?: number | undefined;
4463
- railOffset?: number | undefined;
4464
- radialSegments?: number | undefined;
4465
- });
5019
+ readonly count: number;
5020
+ readonly spacing: number;
5021
+ constructor({ count, spacing, barHeight, barRadius, spikeHeight, spikeRadius, spikeScaleZ, railHeight, railDepth, railOffset, radialSegments, }?: WroughtIronFenceGeometryOptions);
5022
+ }
5023
+
5024
+ export declare interface WroughtIronFenceGeometryOptions {
5025
+ /** Number of posts. Defaults to `20`. */
5026
+ count?: number;
5027
+ /** Center-to-center post spacing. Defaults to `0.4`. */
5028
+ spacing?: number;
5029
+ /** Post bar height. Defaults to `2`. */
5030
+ barHeight?: number;
5031
+ /** Post bar radius. Defaults to `0.05`. */
5032
+ barRadius?: number;
5033
+ /** Post spike height. Defaults to `0.3`. */
5034
+ spikeHeight?: number;
5035
+ /** Post spike radius. Defaults to `0.075`. */
5036
+ spikeRadius?: number;
5037
+ /** Post spike Z scale. Defaults to `1`. */
5038
+ spikeScaleZ?: number;
5039
+ /** Horizontal rail thickness. Defaults to `0.1`. */
5040
+ railHeight?: number;
5041
+ /** Horizontal rail depth. Defaults to `0.05`. */
5042
+ railDepth?: number;
5043
+ /** Top rail offset below the spike tip. Defaults to `0`. */
5044
+ railOffset?: number;
5045
+ /** Post circumference segments. Defaults to `8`. */
5046
+ radialSegments?: number;
5047
+ }
5048
+
5049
+ export declare interface WroughtIronFenceOptions extends WroughtIronFenceGeometryOptions {
5050
+ /** Iron tint. Defaults to `#333333`. */
5051
+ color?: ColorRepresentation;
4466
5052
  }
4467
5053
 
4468
5054
  export declare interface ZoomClipOptions extends CameraClipTiming {