Point Cloud Toolkit
User guide — importing, filtering, and surfacing laser-scan point clouds in Blender
Overview
Point Cloud Toolkit adds an EDC Toolkits tab to the 3D View sidebar (N) with four tool sections that share one point-cloud selection:
| Section | What it does |
|---|---|
| Import Point Cloud | Multi-format import — PLY (ASCII or binary), PTX, E57, LAS/LAZ, and PCD — as a coloured mesh with a Geometry Nodes point display |
| Filter Point Cloud | Voxel subsampling and Statistical Outlier Removal, always to a new cloud (the original is never modified) |
| Create Ground Surface | Drape a regular grid over the cloud: per-cell ground-percentile height sampling, spike rejection, hole filling, clip-to-object, and a colour texture baked from the cloud |
| Create 3D Surface | Full 3D reconstruction via Open3D (Poisson / Ball Pivoting / Alpha Shape) for vertical and overhanging geometry, with automatic texture baking, tiling, and bulge trimming |
The add-on targets Blender 4.x and is numpy-vectorized throughout, so it stays fast on million-point clouds.
Installation
- In Blender, open Edit → Preferences → Add-ons → Install… and select the
PointCloudToolkit-<version>.zipfile. - Enable Point Cloud Toolkit in the add-ons list.
- Open the 3D View sidebar with N and select the EDC Toolkits tab.
Quick start
- In Import Point Cloud, click Import Point Cloud and load a scan. The imported cloud is selected automatically as the source for the other sections.
- (Optional) Set Clip To Object to restrict surfacing to a boundary mesh.
- (Optional) In Filter Point Cloud, enable Subsample (Voxel) and/or Remove Outliers (SOR), then click Filter → Create New Point Cloud.
- For drivable ground, use Create Ground Surface; save the
.blendfirst so the texture JPG can be written next to it. - For vertical or overhanging geometry, use Create 3D Surface (Poisson is the all-rounder). Afterwards, Trim Bulges (To Cloud) removes invented geometry and Rebake Texture re-fits the texture.
Import Point Cloud
Imports PLY (ASCII or binary), PTX, E57, LAS/LAZ, and PCD files as a coloured mesh point cloud displayed through a Geometry Nodes modifier (also available on File → Import). The imported cloud is automatically selected as the Point Cloud source used by the other sections.
- Points Visible % — a display-only control on the imported cloud that thins the viewport display to keep it responsive on dense clouds. It never touches the data; filtering and baking always use every point.
- PLY, PTX, uncompressed LAS, and ASCII/binary PCD are read natively. E57 needs the
pye57package and LAZ needslaspy[lazrs]— both install automatically the first time such a file is opened, or via the Install E57 / LAZ Support Now button. Compressed PCD uses Open3D.
Filter Point Cloud
Cleans a cloud before surfacing. Filtering always creates a new cloud object — the original is never modified. The same filters also run automatically when creating a surface, and textures always bake from the full, unfiltered cloud.
- Subsample (Voxel) — thins the cloud to one averaged point per voxel of the given Voxel Size. The single biggest speed-up for huge scans.
- Remove Outliers (SOR) — Statistical Outlier Removal: drops points whose average distance to their neighbours is unusually large. Tune with the neighbour count and the standard-deviation ratio (lower ratio = more aggressive).
- Filter → Create New Point Cloud — runs the enabled filters and adds the result as a new cloud.
Shared controls (Filter / Ground / 3D)
- Point Cloud — the source mesh whose vertices are the point cloud. Leave empty to use the active object.
- Clip To Object — only surface points inside a boundary object. Bounding Box (fast) uses the object's oriented box: a box/cube clips a true 3D volume, a flat plane clips just its XY footprint. Mesh Volume (exact) ray-casts against the actual, possibly concave, closed mesh — slower on very large clouds.
Create Ground Surface
Drapes a regular grid over the cloud to build a drivable ground surface.
- Resolution (Cell Size) — grid cell size in scene units; smaller cells mean more detail and more polygons.
- Ground Percentile — per-cell height is sampled at a low percentile ("from below"), which rejects overhead noise like trees, wires, and vehicles.
- Below-grade tolerance — rejects stray low returns beneath the true ground.
- Fill Holes / Max Fill Distance — fills sparse cells from their neighbours, bounded by a maximum distance.
- Texture Resolution — the colour texture is sampled directly from the point cloud, so it can be sharper than the surface grid. The JPG is saved next to the
.blend; save the.blendfirst. - Create Ground Surface — builds the surface, bakes the texture, and assigns UVs and an image-texture material.
- Rebake Texture (Selected Surface) — shown when a created surface is selected; re-bakes at the current Texture Resolution without rebuilding the mesh.
Create 3D Surface
Full 3D reconstruction via Open3D (installed automatically on first run) for vertical and overhanging geometry — walls, embankments, vehicles, structures. For drivable ground, Create Ground Surface remains the better tool.
- Method — Poisson (the all-rounder; watertight, can invent geometry), Ball Pivoting (interpolating; raise the radius multiplier to close holes in sparse areas), or Alpha Shape (concave hull; tune alpha).
- Poisson options — reconstruction depth and a density trim that removes low-support (invented) triangles.
- Normals — neighbour count for normal estimation and an orientation mode (the consistent-orientation option is single-threaded and slow on big clouds).
- Texture Resolution / Texture UV — the colour texture bakes automatically on create. Smart UV is the default; Planar suits pure top-down terrain.
- Texture Tiles — with N > 1, the surface is split into N×N tile objects, each with its own texture, for more total resolution.
Post-build tools (shown when a reconstructed surface is selected)
- Trim Bulges (To Cloud) — deletes surface farther than the Trim Distance from the source cloud, removing Poisson's invented geometry.
- Rebake Texture (Selected 3D Surface) — re-bakes at a new resolution, sampling the cloud directly.
- Split & Bake Tiles — re-splits the selected surface into Texture Tiles.
Optional dependencies
Optional Python packages install themselves into Blender's Python when first needed — no manual pip work is required. An internet connection is needed the first time each feature is used.
| Package | Needed for | When it installs |
|---|---|---|
open3d | 3D reconstruction, compressed PCD | First Reconstruct 3D Surface (large download; may need a Blender restart) |
pye57 | E57 import | First E57 file opened, or the install button in the panel |
laspy[lazrs] | LAZ import | First LAZ file opened, or the install button in the panel |
Tips & troubleshooting
- Texture stayed inside the .blend? The JPG is written next to the saved
.blend. If the file isn't saved yet, the texture is packed into the .blend instead — save the .blend and rebake (or re-create the surface) to write the JPG to disk. - Huge cloud is slow? Lower Points Visible % for display, and enable Subsample (Voxel) before surfacing. Textures still bake from the full cloud.
- Poisson surface balloons past the scan? That's Poisson inventing geometry where there are no points — raise the density trim, or run Trim Bulges (To Cloud) after the build.
- Progress seems stuck? Long operations print progress to the system console (the terminal Blender was launched from, or Window → Toggle System Console on Windows).
- Install of Open3D / pye57 / laspy fails? Check the internet connection and that Blender can write to its own Python; as a fallback, run
pip install <package>with Blender's Python and restart Blender.
License & support
Point Cloud Toolkit is © Engineering Dynamics Company, written by Anthony Cornetto, and is free software licensed under the GNU General Public License, version 2 or later — see the bundled LICENSE file.