npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

three-low-poly

v1.2.6

Published

Low poly modeling for Three.js

Downloads

598

Readme

Three.js Low Poly

Procedural tooling and parametric modeling for Three.js

screen-capture Example Library scene

See the example gallery for the full catalog of geometry, factory, reference, and studies.

Getting started

npm i three-low-poly

Everything follows the same shape you already know from Three.js: construct with an options object, add it to the scene

Geometry

The primary intent of the library: parametric BufferGeometry subclasses you pair with your own material and mesh, exactly like Three.js's built-in primitives.

import { Mesh, MeshStandardMaterial } from "three";
import { StarGeometry } from "three-low-poly";

const geometry = new StarGeometry({ points: 5, innerRadius: 0.5, outerRadius: 1 });
const material = new MeshStandardMaterial({ color: "#ffcc33", flatShading: true });
const star = new Mesh(geometry, material);
scene.add(star);

Factory

this library favors merged geometry, material groups, and instancing so dense procedural scenes stay batch-friendly

import { scatterMossyRocks } from "three-low-poly";

const rocks = scatterMossyRocks({ count: 12, width: 8, depth: 8, seed: 1337 });
scene.add(rocks);

Effect

Atmospheric layers animate off elapsed seconds — add them to the scene and call update(dt) each frame.

import { RainEffect } from "three-low-poly";

const rain = new RainEffect({ area: 12, height: 16, intensity: 0.45 });
scene.add(rain);

function animate(dt) {
  rain.update(dt);
  renderer.render(scene, camera);
}

Vocabulary and Terminology

Spatial & Kinematic Offsets

  • Lean: Rotation relative to the resting vertical axis (pitch/roll). Represents tipping away from an upright rest state without requiring a fixed horizontal axis.
  • Twist: Rotation about the vertical axis (yaw/heading). Represents facing a direction or re-orienting in place rather than deforming.
  • Sink: Downward vertical displacement ($-Y$). A surface-aware offset that represents bedding or burying past a resting seat rather than an arbitrary raw translation.
  • Drift: Planar displacement across the horizontal plane ($XZ$). Represents wandering away from a designated home point rather than a pair of disconnected coordinates.

Directional & Relational Dimensions

  • Rise: Additive vertical dimension measured upward from a lower reference point. Total height is derived from this addition.
  • Drop: Subtractive vertical dimension measured downward from a top reference point. Inner clearance is derived by subtraction.
  • Gap: Edge-to-edge (clearance) distance between adjacent elements in a series.
  • Inset: Subtractive horizontal dimension measured inward from an outer boundary. Inner width is derived by subtraction.
  • Proud: Positioned forward of, or projecting outward from, a flush reference surface.
  • Pitch: Center-to-center distance between repeating elements or features in a series.

Architectural & Profile Geometry

  • Springing: The height or datum line on an arch where the curve departs from the vertical supports (jambs).
  • Sprung: An installation state where a profile (such as crown molding) sits tilted across an interior angle, leaving a void behind it.
  • Rake: An intentional incline, slope, or departure from the horizontal or vertical.
  • Sweep: The path, curve, or motion vector along which a cross-section profile is extruded or revolved.
  • Cyma: An S-shaped (ogee) architectural molding profile combining a convex and a concave curve.

Repetition & Progression

  • Rank: An ordered series of related elements treated as a single geometric arrangement, typically varying progressively in scale, form, or position.
  • Progression: The rule or function governing continuous variation across a rank, such as linear, geometric, logarithmic, or eased change.
  • Cadence: The discrete rhythm of a progression: the count, interval, or stepping by which successive members are sampled or placed.
  • Course: A single linear or horizontal pass of elements within a larger arrangement, borrowed from masonry and construction.
  • Pitch: Center-to-center distance between successive repeating elements.

Spatial Domain & Bounds

  • Envelope: The bounded 3D extent containing or constraining a geometric distribution, represented by a box, hull, sphere, or arbitrary volume.
  • Field: A continuous spatial domain in which a value or influence is evaluated as a function of position, such as distance, density, potential, or noise.
  • Footprint: The bounded 2D area occupied by, supporting, or constraining geometry when projected onto its reference plane.
  • Margin: A prescribed clearance measured inward or outward from a boundary.
  • Girth: The circumference or perimeter around a body or cross-section; a measure of extent rather than clearance.

Distribution & Aggregation

  • Gather: An attractive distribution in which elements converge toward one or more focal regions, producing localized concentrations and potentially overlapping mass.
  • Clump: A localized high-density grouping produced by attraction, proximity, or shared spatial influence.
  • Strew: A naturalistic, non-grid distribution of elements across a region without obvious alignment or regularity.
  • Scatter: A general distribution of discrete elements across a region according to random, stochastic, or procedural placement.
  • Repulsion: A spatial constraint or influence that drives neighboring elements apart to maintain separation.
  • Clearance: The minimum permitted edge-to-edge distance between neighboring elements.
  • Packing: The arrangement of elements within a bounded region subject to contact, clearance, density, or overlap constraints.

Extremities & Convergence

  • Apex: A terminal point or summit where edges, faces, or profiles converge opposite a base, as at the tip of a cone, pyramid, or pointed arch.
  • Base: The supporting face, edge, loop, or footprint opposite an apex or upper extremity.
  • Cusp: A singular point where a curve or surface converges sharply or changes direction; may form an inward or outward extremity.
  • Tip: The terminal or outermost point of a narrow, tapered, or projecting feature.
  • Peak: A localized maximum or summit, generally considered relative to surrounding geometry.

Ridges, Valleys & Surface Form

  • Crest: A narrow summit or line of maximum elevation along a profile, wave, thread, tooth, or surface.
  • Ridge: An elongated region of locally maximal elevation extending along a surface.
  • Root: The innermost or lowest region between adjacent projecting features, particularly teeth, threads, splines, and similar repeated profiles.
  • Trough: An elongated region of locally minimal elevation, opposite a crest or ridge.
  • Valley: A concave region lying between neighboring elevated regions or ridges.
  • Crown: A broad convex rise, camber, or domed summit region of a surface rather than a singular point or narrow ridge.

Usage

Nouns describe structure and spatial relationships, verbs describe operations on form.

  • gather a rank across a footprint
  • apply a progression with a given cadence and pitch
  • crown the profile
  • inset the footprint
  • sink the resulting geometry
  • rake the course

Geometry Symbols & Glyphs

Compact reference for geometric notation, diagram glyphs, computational geometry, and 2D / 3D graphics.


Visual Geometry Glyphs

| | Glyphs | | Glyphs | | ------------------- |---------------------| ----------------- | ------------------------------- | | Axis / Dashed | | Arc Quadrants | | | Lines | | Arcs | | | Rounded Corners | | Half Circles | | | Square Corners | | Wedges | | | Junctions | | Triangles | | | Diagonals | | Quadrants | | | Vector Turns | | Circles | | | Rotation | | Diamonds | | | Markers | | Polygons | | | Quads | | Directional | |


Geometric Relationships & Measurement

| Symbol | Glyph | Common Geometric / 3D Use | | -------------------------- |:-------:| -------------------------------------------------------- | | Angle | | General angle notation | | Measured Angle | | Angle with an indicated measurement | | Spherical Angle | | Spherical or spatial angle | | Right Angle | | Right angle, $90^\circ$ | | Perpendicular | | Perpendicular lines, orthogonal vectors, surface normals | | Parallel | | Parallel lines or vectors | | Not Parallel | | Non-parallel relationship | | Congruent | | Congruent geometric objects | | Similar | | Geometric similarity | | Identical / Equivalent | | Identity or equivalence | | Degree | ° | Angular measurement in degrees | | Prime | | Arcminutes; feet in dimensional notation | | Double Prime | | Arcseconds; inches in dimensional notation | | Diameter | | Diameter of a circle, cylinder, hole, etc. | | Radius | r R | Radius of a circle, sphere, arc, fillet, etc. |


Angles, Rotation & Trigonometry

| Symbol | Glyph | Common Geometric / 3D Use | | --------- | :---------: | ---------------------------------------------------------------------------------- | | Theta | θ Θ | Primary planar or polar angle; rotation about an axis | | Phi | φ ϕ Φ | Azimuth or polar angle in spherical coordinates; convention varies | | Alpha | α | Triangle angle; generic angular parameter | | Beta | β | Triangle angle; generic angular parameter | | Gamma | γ | Triangle angle; Euler rotation | | Delta | δ Δ | Change or difference; $\Delta x$, $\Delta y$, $\Delta\theta$ | | Omega | ω Ω | Angular velocity; solid angle | | Psi | ψ | Angular parameter; sometimes yaw or orientation | | Rho | ρ | Radial distance in polar or spherical coordinates | | Pi | π | Half turn, $180^\circ$; radians and circular geometry | | Tau | τ | Full turn, $360^\circ = 2\pi$; also commonly torque | | Sigma | σ | Surface/area-related quantities; stress or standard deviation depending on context |


Circular Geometry

| Symbol | Glyph | Common Geometric / 3D Use | | --------------------- | :-------------: | -------------------------------------- | | Radius | r R | Distance from center to circumference | | Diameter | d D | Full width through the center | | Circumference | C | Circumference of a circle | | Arc Length | s | Length along a circular or curved path | | Angle | θ | Central or swept angle | | Pi | π | $\pi$ radians = half turn | | Tau | τ | $\tau = 2\pi$ radians = full turn | | Arc | | Visual arc / circular segment notation | | Upper / Lower Arc | | Diagrammatic convex / concave arc | | Half Circle | | Semicircular regions | | Quadrant Arc | | Quarter-circle curves |


Mesh & Topology

| Symbol | Glyph / Notation | Common Geometric / 3D Use | | ------------------ | :----------------: | ----------------------------------------- | | Vertex | v v₀ v₁ v₂ | Point belonging to a mesh | | Vertex Set | V | Set of all mesh vertices | | Edge | e e₀₁ | Connection between two vertices | | Edge Set | E | Set of all mesh edges | | Face | f f₀ | Polygonal mesh face | | Face Set | F | Set of all mesh faces | | Triangle | △ABC ΔABC | Triangle defined by three vertices | | Mesh | M | Polygonal or triangular mesh | | Boundary | ∂M | Boundary of a mesh, surface, or region | | Element Of | | Membership, e.g. $v \in V$ | | Not Element Of | | Non-membership | | Union | | Combination of sets or geometric regions | | Intersection | | Intersection of sets or geometric regions |


Vectors & Coordinate Frames

| Symbol | Glyph / Notation | Common Geometric / 3D Use | | ----------------- | :--------------: | ------------------------------------------------ | | Position | p p | Point or position vector | | Direction | d d | Direction vector | | Normal | n n | Surface or vertex normal | | Tangent | t t | Tangent direction along a curve or surface | | Bitangent | b b | Secondary tangent direction; tangent-space basis | | Up | u u | Local or world up direction | | Right | r r | Local right direction | | Forward | f f | Local forward/view direction | | Vector | v⃗ | Generic directed quantity | | Unit Vector | | Normalized vector | | Magnitude | ‖v‖ | Vector length | | Dot Product | a · b | Projection, angle, orthogonality | | Cross Product | a × b | Perpendicular vector; normals and orientation |


Coordinates & Parametric Geometry

| Symbol | Glyph / Notation | Common Geometric / 3D Use | | --------------------------------- | :--------------: | ------------------------------------------- | | Cartesian Coordinates | x y z | Position along coordinate axes | | Texture / Surface Coordinates | u v | 2D parameterization of a surface | | Parameter | t | Position along a curve or interpolation | | Interval | t ∈ [0,1] | Normalized interpolation or parameter range | | Curve | C(t) | Parametric curve | | Surface | S(u,v) | Parametric surface | | Derivative | C′(t) | Curve derivative / tangent | | Partial Derivative | ∂S/∂u ∂S/∂v | Surface tangent directions | | Gradient | ∇f | Direction of greatest scalar-field increase | | Nabla | | Gradient and other differential operators |


Transform & Rotation

| Symbol | Glyph / Notation | Common Geometric / 3D Use | | -------------------- | :--------------: | ---------------------------------------- | | Translation | T | Translation transform or matrix | | Rotation | R | Rotation transform or matrix | | Scale | S | Scale transform or matrix | | Transform | M | General transformation matrix | | Identity | I | Identity matrix / transform | | Inverse | M⁻¹ | Inverse transformation | | Transpose | Mᵀ | Matrix transpose; normal transformations | | Quaternion | q | 3D orientation / rotation | | Angle | θ | Rotation angle | | Axis | â | Unit rotation axis | | Clockwise | | Clockwise rotation | | Counterclockwise | | Counterclockwise rotation |


Operators & Relations

| Symbol | Glyph | Common Geometric / Computational Use | | --------------------------- | :-----: | --------------------------------------- | | Approximately Equal | | Floating-point or approximate equality | | Not Equal | | Inequality | | Less / Greater | < > | Ordering, bounds, winding tests | | Less / Greater or Equal | | Bounds and constraints | | Plus / Minus | ± | Positive/negative offset or tolerance | | Proportional To | | Proportional geometric relationship | | Infinity | | Unbounded distance, limits | | Element Of | | Set membership | | Maps To | | Mapping one coordinate/value to another | | Arrow | | Direction, transformation, mapping | | Therefore | | Logical consequence | | Because | | Logical justification |


Compact Glyph Palette

For quick copying while constructing diagrams:

  • Lines─ │ ━ ┃ ╎ ┆ ┊
  • Corners╭ ╮ ╰ ╯ ┏ ┓ ┗ ┛
  • Junctions┼ ├ ┤ ┬ ┴
  • Diagonals╱ ╲ ⟋ ⟍╳
  • Arcs⌒ ⌓ ◠ ◡ ◜ ◝ ◞ ◟
  • Circular◖ ◗ ◔ ◑ ◕ ◴ ◵ ◶ ◷
  • Triangles▲ ▼ ◀ ▶ ◬ ◭ ◮ ◢ ◣ ◤ ◥
  • Shapes● ○ ◆ ◇ ◊ ⬟ ⬢ ⬠ ⬡ ▰ ▱ ⏢
  • Turns↳ ↵ ↱ ⤢ ⤡
  • Rotation↻ ↺ ↷ ↶ ⤸
  • Direction↖ ↑ ↗ ← → ↙ ↓ ↘
  • Markers⌖ ✛
  • Angles∠ ∡ ∢ ∟
  • Relations⟂ ⊥ ∥ ∦ ≅ ∼ ≃ ≡
  • Circular Measuresr R d D ⌀ π τ θ °
  • Greek / Angularθ Θ φ ϕ Φ α β γ δ Δ ω Ω ψ ρ σ τ π
  • Vector / Math· × ‖ ‖ ∇ ∂ ∈ ∉ ∪ ∩ ≈ ≠ ≤ ≥ ± ∝ ∞

Symbology

Coordinate Axes

  Local Space       Basic Axes       Labeled Axes                Negative Directions

      +Y                Y                Y (up)                         +Y
       |                |                |                               |
       |   +X           |                |                               |
       o----->          +---- X          o------- X (right)        -X ---+--- +X
      /                /                /                               /|
    +Z                /                /                               / |
                     Z                Z (forward)                    +Z  |
                                                                        -Y

Mesh Topology

   Vertex           Edge                Face           UV Space          Triangle Shape     Center Division

     v0         v0 ------- v1            v1            (0,1)                   ^                   .
                                        /  \             +                    / \                 /|\
                                       /    \            |\                  /   \               / | \
                                      /      \           | \                /     \             /  |  \
                                    v0 ------ v2         |  \              /       \           /   |   \
                                                         +---+            +---------+         +----+----+
                                                       (0,0) (1,0)


   Standard Quad        Subdivided Quad       Triangle Strip       Quad Strip       Indexed Mesh

   v0 -------- v1        v0 -------- v1        ●───●───●            ●───●───●           0────1
   |         / |         | \       / |          ╲ ╱ ╲ ╱             │   │   │           │  ╱ │
   |       /   |         |   \   /   |           ●───●              ●───●───●           │ ╱  │
   |     /     |         |     C     |                                                  3────2
   |   /       |         |   /   \   |
   | /         |         | /       \ |
   v3 -------- v2        v3 -------- v2
                                                            Cube            Labeled Vertices

  Plane                      Plane Subdivisions           +-------+           4 -------- 7
                                                         /|      /|          /|         /|
  v0 ----------- v1          0 --- 1 --- 2 --- 3        + +-----+ |         5 -------- 6 |
   |              |          |     |     |     |        | |     | |         | |        | |
   |              |          4 --- 5 --- 6 --- 7        | +-----|-+         | 0 -------|-3
   |              |          |     |     |     |        |/      |/          |/         |/
  v3 ----------- v2          8 --- 9 -- 10 -- 11        +-------+           1 -------- 2

Plots

      Sweep           Parametric Curve           Mapping              Parameter Space       Parametric Surface

                                                                    v ↑                        v ↑
   ●───╮                ●──╮                      (u,v)               | +---+                    │   ╱────╱
       ╰──╮                ╰──╮                     │                 | |   |                    │  ╱────╱
          ╰──→                ╰──●           ───────┼───────→         | +---+                    │ ╱────╱
                                                    │                 +------→ u                 └──────→ u


       Cartesian                 Vector Field                 Screen Space / UV Coordinate           Cartesian
                                 (● = Singularity)
    +Y ▲                                                    (0,0) ┌─────────────────► +U            ▲ +Y
   100 ┼      ● (x2,y2)       Y ▲                                 │                                 │
       │     ╱                  │  ↗   ↑   ↑   ↖   ←              │   (u, v)                        │    (x, y)
    50 ┼    ● (x1,y1)           │  →   ↗   ↑   ↖   ←              │     ●────────┐                  │      ┌────────┐
       │   ╱                    │  →   →   ●   ←   ←              │     │ Bounds │                  │      │ Bounds │
     0 └───┼───┼──► +X          │  →   ↘   ↓   ↙   ←              │     └────────┘                  │      ●────────┘
       0  50  100               │  ↘   ↓   ↓   ↙   ←              │                                 │
                              0 └───────────────────► X           ▼ +V                        (0,0) └──────────────────► +X

Structure

This repository contains three-low-poly, a Three.js npm SDK.

  • src/ contains the distributable library;
  • app/ is a separate Vite host for examples, references, galleries, and studies.

Conventions

tbd.

Units

  • Localization: EN-US
  • Radians
  • Metric: meters and millimeters

Approach

Separation of shape, geometric intent, and construction of cohesive entities.

  • Geometry: intrinsic renderable shape
  • Profiles: reusable computational shape or boundary
  • Factories: spatial or relational composition, variation, batching
  • Assemblies: relationships between independent parts
  • Options: local definitions composed through ownership
  • Variation:

This separation keeps individual geometry APIs small while allowing complex assets and large procedural assemblies to remain cohesive from the caller's perspective.

Geometry

Geometry classes describe independently meaningful shape.

They follow the conventions of Three.js built-ins such as BoxGeometry, LatheGeometry, and ExtrudeGeometry which are immutable after construction. Parameters are for initialization only.

A geometry:

  • produces BufferGeometry
  • is complete after construction
  • contains no scene placement or runtime behavior
  • translates to set its anchor origin point
  • knows only about its own shape
  • may expose parameters needed by higher-level construction
  • may use geometry groups when one cohesive shape requires multiple materials

The relationship between independently valid geometries belongs to construction.

Composite Geometry

Some domain objects are naturally represented as one BufferGeometry even when they contain several distinct parts.

  • A book combines cover and pages geometry
  • A pumpkin combines rind and stem geometry
  • A tree combines trunk and leaf geometry

The parts can be authored independently, transformed into their assembled positions, and merged using geometry groups.

The result remains one cohesive geometry:

const geometry = new PumpkinGeometry(options);

const mesh = new Mesh(geometry, [
  rindMaterial,
  stemMaterial,
]);

This is appropriate when the finished object is fundamentally geometric and does not require independently addressable scene objects.


Profiles

Profiles are computational geometry rather than renderable geometry.

They describe reusable boundaries, silhouettes, sections, paths, or other mathematical forms that can participate in multiple construction operations.

A profile may be used to derive:

  • shape
  • path
  • extrusion
  • sweep
  • loft
  • cut

Profiles are especially useful when several parts must agree on the same geometric definition.

For example, an arched window may derive all of the following from one profile:

                         ArchProfile
                              │
             ┌────────────────┼────────────────┐
             │                │                │
             ▼                ▼                ▼
        wall opening       glass pane        frame
                                               │
                                  ┌────────────┼────────────┐
                                  ▼            ▼            ▼
                                jamb        lattice        sill

The profile is not merely an implementation helper, it is the shared geometric intent from which related geometry can be constructed consistently.


Factories

Factories resolve construction or one or many entities.

A factory is used when producing an entity requires knowledge beyond the responsibility of a single geometry.

Construction may include:

  • combining independent geometries
  • resolving contact or seating relationships
  • deriving several geometries from a shared profile
  • producing cuts or boundaries for external geometry
  • creating meshes and material assignments
  • creating Group or InstancedMesh structures
  • generating stochastic variation
  • batching repeated geometry
  • baking transforms into unique geometry
  • attaching lights, sprites, effects, or other scene resources
  • coordinating behavior intrinsic to the constructed entity

Each call expresses domain intent. The factory chooses the scene representation required to implement it.


Assembly

Assembly describes how independently valid parts relate to one another.

This knowledge belongs to neither component.

For example, placing a Florence flask onto a ring stand requires knowing both:

  • the flask's spherical body radius
  • the stand's ring radius

The factory can solve the contact relationship and position the flask so the sphere rests correctly on the ring.

Geometry                    Assembly
───────────────────────     ─────────────────

FlorenceFlaskGeometry ─┐
                       ├──► FlaskStandFactory ──► Assembled Entity
RingStandGeometry ─────┘

The same principle applies to:

  • seating a pumpkin stem on a rind
  • positioning a candle within a lantern
  • fitting a liquid volume inside a vessel
  • matching a jamb to wall thickness
  • placing decorative geometry against a generated boundary

Where possible, relational placement should remain expressible as transforms rather than being permanently embedded into the source geometry.


Examples

Every feature has a matching example in the host gallery,

Text

The Vite app host provides canvas-based text utilities with shared sizing and rendering:

  • createTextSprite() creates billboard labels that always face the camera.
  • createTextPlane() creates fixed-orientation labels that rotate with their geometry or parent.

Studies

Advanced experimentation belongs in studies.

Studies are durable, isolated explorations. They can prototype an idea, investigate a problem, compare approaches, or demonstrate a particular application. They may call SDK functions, but keep the code essential to the investigation inline when that preserves the idea independently of future SDK changes.

A study may remain an exploration, contribute selected pieces to the SDK while remaining intact, or move into production when the whole study becomes the product. Overlap with production code is not, by itself, a reason to remove or refactor a study.

References primarily explain established behavior; galleries compare named forms or profiles. These boundaries are flexible — a study can also become a useful reference.

Author

Jason Sturges