Multi-Resolution Point Cloud Generator
Generate multi-resolution point clouds with octree LOD structure online. Poisson-disk and random sampling, real-time 3D preview, and exportable octree data.
About
Streaming massive point clouds in real time requires a hierarchical spatial index. This tool constructs an octree-based Level of Detail (LOD) structure from procedurally generated or user-configured point sets. Each octree node subdivides space into 8 children when a point threshold T is exceeded, producing progressively coarser representations at higher tree levels. Two sampling strategies are implemented: Poisson-disk sampling enforces a minimum inter-point distance r at each level, yielding visually uniform distributions; random sampling uses Fisher-Yates shuffling for speed at the cost of spatial uniformity. The generator approximates the pipeline described in SchΓΌtz et al. (2020) for fast out-of-core octree generation. Note: browser memory limits constrain practical point counts to roughly 2 - 5 million points depending on device. Results are an approximation of production converters like PotreeConverter 2.0, which operate on raw LAS/LAZ files with disk-backed I/O.
Formulas
The octree recursively subdivides a cubic bounding box. At each level l, a node with center c and half-size h produces 8 children with half-size h2. A point p falls into child index:
Subdivision halts when point count n β€ T or depth l = Dmax.
For Poisson-disk sampling at level l, the minimum radius is:
where rbase is the finest-level radius. Points are accepted only if their distance to all previously accepted points exceeds rl. A spatial hash grid with cell size rl accelerates neighbor lookups to O(1) expected time.
Perspective projection maps 3D point (x, y, z) to screen coordinates:
where f = focal length, w = canvas width. p = (x, y, z) is the point position. c = (cx, cy, cz) is the octree node center. h = half-size of the node bounding box. T = node point threshold before subdivision. Dmax = maximum octree depth. N = total number of input points.
Reference Data
| Parameter | Symbol | Typical Range | Description |
|---|---|---|---|
| Total Points | N | 1,000 - 5,000,000 | Number of 3D points generated |
| Max Octree Depth | D | 4 - 15 | Maximum recursion depth of the octree |
| Node Point Threshold | T | 100 - 50,000 | Max points per leaf before subdivision |
| Poisson Radius | r | 0.001 - 0.1 | Minimum distance between sampled points (normalized) |
| Bounding Box Size | L | 1.0 - 1000.0 | Side length of the root octree cube |
| Point Size (Render) | - | 1 - 6 px | Visual size of each rendered point |
| LOD Levels Produced | - | 1 - 15 | Number of distinct resolution layers |
| Output Files (Potree 2.0) | - | 3 | metadata.json, octree.bin, hierarchy.bin |
| Output Files (Potree 1.7) | - | 1 per node | One binary file per octree node |
| LAS Point Record Format | - | 0 - 10 | ASPRS LAS standard record types |
| Coordinate Precision | - | 32-bit float | Single-precision floating point per axis |
| Color Depth | - | 8 bit/channel | RGB per point, 0 - 255 |
| Typical SSD Throughput | - | 500 - 3,500 MB/s | NVMe read speeds for production converters |
| Memory per Point | - | 28 bytes | 3Γ4 (xyz) + 3Γ4 (rgb) + 4 (intensity) |
| Octree Node Count | - | 8D max | Theoretical maximum, practically much fewer |
| Sampling: Poisson | - | Uniform distribution | Blue-noise spatial distribution, visually superior |
| Sampling: Random | - | Non-uniform | Faster but may produce clusters and gaps |