three-low-poly 0.9.25 → 0.9.26

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