User Rating 0.0 β˜…β˜…β˜…β˜…β˜…
Total Usage 0 times
1K2M
214
5010K
1px6px
AllFinest
Presets
Configure parameters and click Generate
Drag to rotate · Scroll to zoom
Is this tool helpful?

Your feedback helps us improve.

β˜… β˜… β˜… β˜… β˜…

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.

point cloud octree LOD poisson disk sampling 3D visualization potree point cloud generator level of detail

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:

idx = (px β‰₯ cx ? 1 : 0) + (py β‰₯ cy ? 2 : 0) + (pz β‰₯ cz ? 4 : 0)

Subdivision halts when point count n ≀ T or depth l = Dmax.

For Poisson-disk sampling at level l, the minimum radius is:

rl = rbase β‹… 2(Dmax βˆ’ l)

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:

xscreen = x β‹… fz + w2

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

ParameterSymbolTypical RangeDescription
Total PointsN1,000 - 5,000,000Number of 3D points generated
Max Octree DepthD4 - 15Maximum recursion depth of the octree
Node Point ThresholdT100 - 50,000Max points per leaf before subdivision
Poisson Radiusr0.001 - 0.1Minimum distance between sampled points (normalized)
Bounding Box SizeL1.0 - 1000.0Side length of the root octree cube
Point Size (Render) - 1 - 6 pxVisual size of each rendered point
LOD Levels Produced - 1 - 15Number of distinct resolution layers
Output Files (Potree 2.0) - 3metadata.json, octree.bin, hierarchy.bin
Output Files (Potree 1.7) - 1 per nodeOne binary file per octree node
LAS Point Record Format - 0 - 10ASPRS LAS standard record types
Coordinate Precision - 32-bit floatSingle-precision floating point per axis
Color Depth - 8 bit/channelRGB per point, 0 - 255
Typical SSD Throughput - 500 - 3,500 MB/sNVMe read speeds for production converters
Memory per Point - 28 bytes3Γ—4 (xyz) + 3Γ—4 (rgb) + 4 (intensity)
Octree Node Count - 8D maxTheoretical maximum, practically much fewer
Sampling: Poisson - Uniform distributionBlue-noise spatial distribution, visually superior
Sampling: Random - Non-uniformFaster but may produce clusters and gaps

Frequently Asked Questions

Each additional depth level can multiply node count by up to 8. A depth of 10 theoretically allows 8^10 β‰ˆ 1 billion nodes, though in practice most are empty. Deeper trees produce finer LOD but consume more memory for the hierarchy structure. For browser-based generation, depths beyond 12 risk exceeding available memory on typical devices with point counts above 1 million.
Poisson-disk sampling produces blue-noise distributions where points are evenly spaced with a guaranteed minimum distance r between them. This eliminates visual clumping artifacts that random sampling creates. Use Poisson-disk when visual quality matters (architectural scans, cultural heritage). Use random sampling when speed is the priority or when the source data already has uniform density.
Potree 2.0 concatenates all node data into a single octree.bin file and stores the hierarchy index in hierarchy.bin, with metadata.json describing the structure. Previous formats stored one file per node, which could mean millions of files for large datasets. File system operations (copy, delete, upload) scale with file count, so reducing to 3 files cuts transfer times from hours to seconds.
Non-uniform density causes some octree branches to be much deeper than others. The node threshold T controls this: lower values force more subdivision in dense regions, producing better LOD transitions but more nodes. If density varies by orders of magnitude (e.g., dense building scan with sparse ground), consider preprocessing to normalize density or increasing T to prevent excessive subdivision in dense areas.
Points are stored as 32-bit floats, providing approximately 7 significant digits. For geographic-scale data (coordinates in the millions), this yields centimeter-level precision. Production converters like PotreeConverter 2.0 use 64-bit offsets with local 32-bit coordinates relative to chunk centers. This browser tool normalizes all coordinates to a unit cube internally, so precision loss is minimal for the generated procedural shapes.
The exported JSON metadata follows a simplified Potree 2.0 schema but is not byte-compatible with the native binary format. The CSV export can be converted to LAS using tools like CloudCompare or las2peer, then processed through the actual PotreeConverter binary. The tool is designed for understanding and visualizing the octree construction process, not as a replacement for production converters.