Display, edit, filter, render, convert, generate and export colored point cloud files.

Available at Blender Market


PCV

Key Features:

  • Display hundreds of millions of colored points in 3d viewport, limited only by system and gpu memory.
  • Any Blender object can be used as container for points, points are not part of Blender data (until converted to) for maximal performance.
  • Supported file formats - read: PLY, LAS/LAZ, E57, PCD, any text based file format such as PTS, XYZ, TXT, CSV etc., write: PLY, LAS/LAZ, E57 and PTS.
  • Custom PLY reader/writer optimized for point data and performance.
  • Supports loading/editing/writing of 3D Gaussian Splatting PLY files, can reconstruct points colors from spherical harmonics and convert to Blender mesh that can be rendered in Cycles engine approximating 3DGS effect.
  • Display points with many shading options that can be mixed together, display points with analytic shaders, display point normals, use clipping planes, display scalar values (value remapping in range, color schemes).
  • Fast Navigation option that draws subsampled points into 3d viewport while is being navigated for smooth working with very large datasets.
  • Cleanup points directly with modal selection tools or by using Blender edit mode with temporary mesh linked with points using Blender tools.
  • Mesh Retopology tools that utilize vertices snapping to points and mesh drawn with custom shaders over points.
  • Clip planes modal tool to interact with clipping planes visually, store/restore clip planes named states.
  • Abundance of editing filters: subsample/voxelize/slice points, crop, boolean, join, split, color adjustment, remove by color or value, project on mesh, remove duplicates, estimate normals, point set registration, surface reconstruction and many more.
  • Builtin gpu rendering to image or images sequence with viewport or transparent background.
  • Convert points to various Blender mesh (and vdb volume) data for use with Geometry Nodes and rendering with any render engine while preserving all loaded scalar fields and normals.
  • Generate point clouds from mesh surface, mesh volume, Geometry Nodes vertices with attributes and generate point clouds from whole scene by simulating lidar scanner or photogrametry.
  • Working with PLY sequences, playback, batch convert, filter and export. Sequence can also be generated from mesh or scene.
  • Can be used as debugging tool to display 3d location/normal/color data with easy to use python api.

Platform Compatibility

  • Windows, Linux and macOS

Blender Compatibility

  • Blender 3.6 LTS or later

Installation

  • download latest version point_cloud_visualizer-###.zip
  • install as regular Blender addon: docs.blender.org

Update

  • download latest version point_cloud_visualizer-###.zip
  • start Blender, go to Preferences > Add-ons and find PCV in list
  • expand by clicking left corner triangle
  • disable PCV unchecking checkbox next to addon name
  • click Remove button
  • click Save Preferences button at bottom (skip if you have Auto-Save Preferences enabled)
  • quit Blender
  • start Blender
  • install new PCV version and enable

About Optional Libraries

  • NONE of them is required for regular use, majority of PCV functionality has no dependencies
  • functionality that depends on any library is marked in PCV panel with plugin icon and library is imported in just executed operator, if not available, message is displayed
  • all of them are installed from The Python Package Index (PyPI) using pip command
  • libraries are not installed automatically, you need to open PCV preferences and click each install library button
  • they are installed to user site-packages directory as defined in site.getusersitepackages(), exact location differs for each platform, if you click Read Me First button in PCV preferences, it will print out path to user site-packages directory

Where are Optional Libraries used?

  • Open3D
    • Voxel Downsample
    • Normal Estimation
    • Point Set Registration
    • Surface Reconstruction
    • ...
  • laspy
    • LAS file import/export
  • lazrs
    • LAZ file import/export (requires laspy, recommended)
  • laszip
    • LAZ file import/export (requires laspy)
  • pye57
    • E57 file import/export (recommended)
  • PyMeshLab
    • E57 file import (alternative)
    • Curvature filter
    • Screened Poisson Surface Reconstruction
  • SciPy
    • Remove Duplicates
    • Poisson Disk Elimination
    • Blur Scalar
    • Calculate Density
    • Voxel Downsample
    • faster Transfer Colors
    • Tools > Retopology > Snap All/Selected
    • ...

Optional Libraries Compatibility

  • Windows

    • do NOT use Open3D and PyMeshLab together, Blender will crash when one and the other is used (see workarounds)
    • do NOT use Open3D and pye57 together, Blender will crash when one and the other is used (see workarounds)
    • do NOT use Open3D and laspy + laszip together, Blender will crash when one and the other is used (see workarounds)
    • PCV will prevent crashes by default by monitoring which library has been used in current Blender session and not allowing problematic operation to be run, this behavior can be turned off in PCV preferences
  • macOS

    • on Apple Silicon you need to use Blender Intel build to install and use PyMeshLab
    • pye57 have to be built from source, see step by step guide
  • Linux

    • no known limitations/problems

Libraries Installation

Please see compatibility notes for your platform first. It is not needed to install library unless you need functionality that depends on it.

  • go to Preferences > Add-ons and find PCV
  • expand to see PCV preferences
  • click Install LIBRARY_NAME button
  • wait until Blender is responsive again (if you start Blender from command line you can observe progress)
  • restart Blender after each installed library

Specific version of library that is tested that is compatible is always installed. If library with different version already exists in user site-packages directory, it will be overwritten with required version. So, if new PCV version requires newer library version, to update simply run install library operator.

Libraries Workarounds

  • Windows
    • E57 files reading libraries (pye57 or PyMeshLab) and Open3D will crash Blender if both are used in single Blender session. To use both, install Open3D and pye57 (better option for E57 files reading) and use following system: start Blender, add an empty, go to PCV panel, import E57 file, export as PLY with PCV, quit Blender, start Blender, add PCV instance again and load exported PLY, use filters using Open3D as needed. Blender will only crash is one of libraries is used and then the other.
    • the same with LAZ files, reading LAS files is not affected

⚠️ The only library that need to be built from source is pye57 for reading E57 files and only on macOS.

On other platforms it is installed from PyPI as other libraries, there is no need to build wheel manually. Guide is included only so macOS users can also benefit from better E57 reading library then PyMeshLab which sometimes does not preserve colors, uses scalar as colors even when colors are available and there is no way to prevent that.

Guide is for macOS 12 and Blender 3.6. For Blender 4.0+ you need to install and use python 3.11 and Blender 4.0 python, but steps are identical.

  • install homebrew
  • install correct python version (for Blender 3.6 it is python 3.10) with homebrew
$ brew install python@3.10
  • install wheel and pybind11 packages into python
$ /usr/local/opt/python@3.10/bin/pip3.10 install wheel
$ /usr/local/opt/python@3.10/bin/pip3.10 install pybind11
  • install xerces-c library with homebrew
$ brew install xerces-c
  • check path to xerces-c, we will use it later
$ brew info xerces-c
  • at the time of writing: /usr/local/Cellar/xerces-c/3.2.5

  • clone pye57 repository

$ cd ~/Desktop
$ git clone --recursive --depth 1 --branch v0.4.5 https://github.com/davidcaron/pye57.git
$ cd pye57/
  • open setup.py in your favorite source code editor..
  • after line libE57_cpp = sorted(map(str, (HERE / "libE57Format" / "src").glob("*.cpp"))) add following line:
libE57_cpp = [os.path.relpath(p, start=HERE, ) for p in libE57_cpp]
  • after line package_data.append("xerces-c_3_2.dll") add following lines so it creates another platform related block between windows and linux (some basic python skills are needed to understand, sorry) and use path to xerces-c we checked earlier
elif platform.system() == "Darwin":
    libraries.append("xerces-c")
    library_dirs.append("/usr/local/Cellar/xerces-c/3.2.5/lib")
    include_dirs.append("/usr/local/Cellar/xerces-c/3.2.5/include")
  • save and close
  • build wheel
$ /usr/local/opt/python@3.10/bin/python3.10 setup.py bdist_wheel
  • if there is error: Error: setup script specifies an absolute path, delete ~/Desktop/pye57/src/pye57.egg-info directory and run again, that directory will be recreated

  • install wheel with Blender python

  • ensure pip is present Blender python (not a copy-paste command, adjust path to Blender.app)

$ /Applications/Blender/blender-3.6.4.app/Contents/Resources/3.6/python/bin/python3.10 -m ensurepip
  • macOS 11+ versioning is not that easy.. lets it turn off for a session, otherwise pip will fail with ERROR: pye57-0.4.5-cp310-cp310-macosx_12_0_x86_64.whl is not a supported wheel on this platform.
$ export SYSTEM_VERSION_COMPAT=0
  • use pip from Blender python to install just built wheel into user site-packages (~/.local/lib/python3.10/site-packages) (not a copy-paste command, adjust path to Blender.app and wheel filename)
$ /Applications/Blender/blender-3.6.4.app/Contents/Resources/3.6/python/bin/python3.10 -m pip install --user ~/Desktop/pye57/dist/pye57-0.4.5-cp310-cp310-macosx_12_0_x86_64.whl
  • library files will be installed to ~/.local/lib/python3.10/site-packages
  • start Blender and check if e57 file are being loaded
  • now you can archive or delete ~/Desktop/pye57

Integration

  • PCV uses any Blender object as a "point in space", that object origin serves as zero point. Point cloud will then draw in object local space. i.e. point cloud will be transformed in the same way as container object. The best is to use Empty object type as containers.
  • PCV by default does not store loaded points in blend file because there is no suitable data type available. Only PCV settings and path to data file is stored. when blend file is reopened, points need to loaded from linked file again by clicking Draw button. If you wish to store points in .blend file, see Packer in Preferences for more info.
  • Any changes to points made with PCV have to be saved using Export panel before quitting Blender or loading other blend file, otherwise will be lost.

UI Locations

  • main PCV panel is located in 3D Viewport Sidebar N under Point Cloud Visualizer tab
  • one more extra pop up panel in 3D Viewport header at the top right corner
  • helper operator in 3D Viewport > Add menu

General Use

To load and display point cloud from any supported file type, you can add an Empty type object to scene (or use any other Blender object type that exists in scene), then go to 3d Viewport sidebar > PCV tab and click Choose File , file browser will open, select your file and click Load. File will be loaded and contents displayed.

Add Menu Helper Operator

Faster and preferable way of adding PCV instance to scene is to use helper operator from Add menu: 3d Viewport header > Add or Shift+A anywhere in viewport and choose Point Cloud Visualizer menu item. File browser will open where you can choose single or multiple files, click Add PCV Instance(s) and for each selected file, new Empty object will be added, named after file name and file contents will be loaded and drawn.

Any file format that is readable by PCV can be loaded this way, only ASCII file types need to use preset that has been made and saved in advance and multiple files have to have the same format.

Large Datasets

  • currently, PCV needs to load all points from source file and keep them in system memory
  • during loading, system memory usage will peak quite high, 4 (and more in some cases) times the runtime usage
  • for display, PCV need to upload all points that are going to be displayed (you can control amount with PCV > Display > Percentage slider) to gpu memory
  • to determine approximate maximum number of points your gpu can display at once you can use calculator in PCV preferences (for example 8GB gpu can display ~300M points with default shader and disabled scalars), calculator formula is simple:
ram = 8192  # MB
b = (1024*1024) * ram  # bytes
# default shader uses 3x float32 for point location and 4x float32 for color (rgba)
# float32 takes 4 bytes, hence 3*4 + 4*4 bytes
n = int(b / (12 + 16))
print(n)  # 306783378
  • trying to display more points (i.e. uploading more data than gpu memory can contain) will result in Blender crash or freeze
  • when extremely big data need to be loaded and is not required to work with exactly all points, alternative loading methods Every Nth or Slice can be used to reduce number of points during loading

Fast Navigation

Draw low resolution point cloud during viewport navigation, it is enabled in PCV Preferences globally and will apply on all PCV instances in scene. During viewport navigation, normals and bounding box drawing is skipped, there rest of shading options is kept, selection is always drawn in full. Each PCV instance can be excluded by unchecking PCV > Display > Options > Use Fast Navigation.

Note: Blender API has no way to tell if user is navigating viewport (well, at least without using modal operator and that is not applicable in this case) so solution involves timers and because of that, when you are still navigating, but pause any movement a bit, high resolution will be drawn after delay and also first redraw when you just started navigating might lag a bit, API does not provide mouse events so i cannot react before view is really changed.

Panels

Main Panel

Main PCV panel is located in 3D Viewport Sidebar N under Point Cloud Visualizer tab. This panel shows active object properties and operators.

Main Panel

Main Controls

  • Choose file clicking browse icon and from now on, active object is considered a "PCV Instance".
  • and indicates Pack flag status. See Preferences for more info.
  • reloads linked file contents.
  • Linked file name and number of loaded / displayed points.
  • Draw and Erase operators. Draw operator will also load points if they are not loaded. Erase will only stop drawing in viewport, loaded points will remain in system memory.
  • Frame Points will center points in viewport camera and adjust its Clip End property if needed to show all points.

3D Viewport Panel

Pop up panel at the top right corner of 3D Viewport header contains actions that can run on multiple PCV instances at the same time, Packer operators that work with current blend file and Postprocess options.

3D Viewport Panel

Batch Operators

  • Run basic loading, drawing and export operators on every PCV instance that is found in scene and falls under Influence. It is the same like selecting object by object and clicking operator button.
  • Synchronize Shader Properties will copy display properties from active to influenced instance.

Packer

  • Packer is fully automated storing of loaded points directly in .blend file as hidden mesh datablocks on .blend file save and restoring points from stored meshes on .blend file load. See Preferences for more info.
  • Pack and Unpack operators are run automatically on .blend file events or can be run manually from here.
  • Optimize will remove stored meshes if PCV instance is no longer present in .blend file, this is also automated during packing or can be run manually from here.
  • Clear will remove all stored meshes.
  • Mark All Loaded and Unmark All will set Pack flag on all pcv instances in scene.
  • Packed Points are will show summary of stored mesh datablocks.

Postprocess

Viewport postprocessing. All draw calls from PCV goes to Offscreen first, then everything is drawn on top of viewport using selected shader. Because of that, points will be always on top above everything else. Currently there is: Quasi EDL, something very similar to Eye-Dome-Lighting. Points are shaded in screen space by their depth. No normals are required. The best use for it is when your points have no other data than point locations. And Image Ouput that will create image datablock with the same content as is drawn on screen, useful for quick screen renders without camera and setting anything.

Display

Display panel contains everything related to how points are displayed in viewport. Main shader for points is chosen with Shader dropdown menu. Default shader offers many options for shading that can be mixed together using Opacity and Mode, other shaders are more analytical (Position Colors, Normal Colors and Height Colors) and offers only a few properties for data they show.

Preset menu in panel header will save all settings in all subpanels into a preset.

Display Panel

Points

Points panel contains settings related to point visibility, shape and size.

  • Percentage - Adjust percentage of points displayed
  • Shuffle Points - Shuffle points if they are ordered so Percentage lower than 100% shows evenly distributed points
  • Use UI Scale - Multiply point size by UI Scale (Preferences > Interface > Resolution Scale)
  • Round Points - Draw rounded points
  • Size - Point size in pixels
  • Adaptive Size - Adjust point size by distance from viewport camera, this is only for perspective projection
  • Culling - Cull points facing backwards, requires point normals

Points Panel

Colors

Colors panel contains settings related to point color or color generation, shows for Default shader only

Colors Panel

Alpha

  • Global Alpha - Adjust overall alpha of points
  • Use Alpha Per Point - Use alpha per point if point colors contain alpha value

Alpha Panel

Depth

Colorize points by depth from viewport camera

Depth Panel

Depth Effects

Colorize points by depth from origin or another object

Depth Effects Panel

Matcap

Colorize points using matcap image, requires normals. Matcap images are listed from BLender > Preferences > Lights > MatCaps and Blender builtin.

Matcap Panel

Color Adjust

In shader color adjustments, to apply at point colors use Filter > Colors > Color Adjustment

  • Per Channel - Adjust Exposure, Gamma, Brightness and Contrast per color channel (R, G and B separate)

Color Adjust Panel

Shade

Shade panel contains settings related to point shading, shows for Default shader only and each requires normals.

Shade Panel

Illumination

Add up to 3 lights to illuminate points.

Illumination Panel

Phong

Use Phong shading

Phong Panel

Fresnel

Shade points by Fresnel value

Fresnel Panel

X-Ray

Draws points in additive mode and those with normal oriented closer to view normal with proportionally lower opacity. Because of additive mode, depth buffer is cleared before drawing.

X-Ray Panel

Effects

Effects panel contains settings that manipulate with point location directly in shader. Shows for Default shader only. To apply at points use Filter > Points > Apply Shader Effects

Effects Panel

Displace

Move points along their normals

Displace Panel

Noise

Move points randomly

Noise Panel

Position Colors Shader Properties

Properties for Position Colors shader contains location color grid scale and each grid cell offset.

Position Colors Shader Properties Panel

Height Colors Shader Properties

Properties for Height Colors shader contains axis selection, remapping options and custom colors.

Height Colors Shader Properties Panel

Scalar Field

Contains a list of available scalar fields, value remapping options and colorization schemes.

Scalar Field Panel

Clip

Clip displayed points by up to 6 planes. You can set plane values directly (first three values are plane normal, last value is distance from origin) or use any Blender Object bounding box to set planes from it. If Clip Planes Live Update is enabled, bounding box source object can be animated and clip planes will be updated on each redraw.

Or you can use interactive tool to set planes visually, see Tools for more info.

Clip Panel

Normals

Visualize point normals as lines.

Normals Panel

Bounding Box

Draw points Bounding Box.

Bounding Box Panel

Options

Other Display options

  • Use Fast Navigation - Include or exclude from Fast Navigation, see Preferences for more info
  • Name - Draw source file name in viewport at origin
  • In Front - Draw points above everything else

Options Panel

Load

Load panel contains everything related to how points are loaded from source file.

  • Reload File - Reload selected file using current settings.
  • Unload File - Unload file from memory.

Load

General

Contains settings how raw data is processed after loading.

  • Shift, Scale - Overview of determined (if any) shift/scale values used on points positions.
  • Custom Shift/Scale - Set custom values for shift/scale.
  • Sync Shift/Scale - Aplly shift/scale from active instance to selected.
  • Default Normal - If normals are not found in source file, this values is used instead.
  • Default Color - If colors are not found in source file, this values is used instead.
  • Gamma Correct Colors - Apply gamma correction on colors as color ** (1 / 2.2).
  • Shuffle Points - Shuffle points after loading.
  • Auto Draw - Draw points after loading.

General

Reader Options

Allows you to access specific file reader options that was set when source file has been chosen with Load or Add operators. To apply changes click Reload File.

Reader Options

ASCII Preset Builder

Build and save any ASCII file type loading preset.

Choose file with icon. If you don't know file structure, enabling File Contents Preview will show first 10 lines from file. Choose column sparator type and set number of line to skip if file contains any header info. Then use to add row in list (which is column in file) and set column type and its data type.

To check if recipe is working, click Load ASCII, if everything works without error and data are interpreted correctly, use in panel header to save current state as preset for later reuse.

ASCII Preset Builder

Example of typical PTS file preset

Standard PTS contains 7 columns in order x, y, z location, intensity and r, g, b color. In reality, PTS can contain any number of columns of any type.

PTS

Data

Contains overview of data loaded from source file. next to data name indicates availablity.

To remove Normals, Colors and all ( buttons) or individual Scalar Fields (select scalar from list and click ). and moves selected scalar field up or down in list. This order is kept when file is exported.

Clicking icon next to scalar field name will enable Display > Scalar Field ().

Data Panel

Edit

  • Center Origin - Moves points so center of points is at container origin.
  • Apply Transformation - Applies container transformation on points and resets container transformation.
  • Enable Edit Mode - Edit points using Blender Edit Mode.

Edit Panel

Edit Mode

  • When enabled, points are converted to mesh vertices and PCV draws original points over vertices.
  • You can use edit vertices with Blender tools.
  • To update edits in points, click Update.
  • To finish click End.
  • Edit mode includes subset of display options, selection operators that select mesh vertices based on points color or scalar value, operators that set color or value and operator to flip point normal (not mesh vertex normal, those are ignored).
  • While you can create new mesh vertices and they will be added to points, it is better to duplicate and move existing so all colors/normals/scalars are already set.

Edit Panel

Tools

Collection of modal operators for direct editing of points, points container object or mesh. If operator is running all panels but Tools are disabled. To switch tool, click its button on panel.

All Retopology and Transform tools and Place 3D Cursor (GPU) are GPU accelerated. They utilize GPU for point selection. Points are selected in Detection Radius around mouse pointer, point closest to screen space center is selected. Point selection works best if points are that dense so they cover points behind them. If your points are too sparse, there are several options how to prevent selection of points behind those on "surface". Increase point pixel size, or enable Display > Points > Adaptive Size and adjust point size so they cover space between them, or enable Use Depth (D key shortcut) at running tool panel to utilize gpu depth buffer to determine which points are closest in tool Detection Radius.

All tools when running shows help panel in viewport with all modal shortcuts. This help panel can be toggled with H key or disabled in preferences Show Help Panel At Tool Start.

3D Cursor

3D Cursor tools operate only on 3d Cursor.

3D Cursor Tools Panel

Place 3D Cursor

Place 3D Cursor on closest point in cloud under mouse cursor. CPU variant, faster on smaller datasets.

  • LMB: Place
  • Shift+LMB: Place and align with normal
  • LMB+drag: Continuous place
  • H: Toggle Help panel
  • ESC: Exit

Place 3D Cursor (GPU)

Place 3D Cursor on closest point in cloud under mouse cursor. GPU accelerated variant, faster on large datasets.

  • LMB: Place
  • Shift+LMB: Place and align with normal
  • LMB+drag: Continuous place
  • D: Toggle using depth buffer for point selection
  • H: Toggle Help panel
  • ESC: Exit

Clip Planes

Manipulate clip planes visually with gizmos, store/restore clip planes states (states are saved to blend file and can be restored without tool running).

Clip Planes Tools Panel

Clip Planes

Manipulate clip planes visually with gizmos.

  • LMB: Manipulate
  • RMB: Cancel current action
  • G: Move mode
  • SHIFT+LMB: Move facing planes together mode
  • CTRL+LMB: Move facing plane in opposite direction mode
  • A: Toggle move all gizmo
  • R: Rotation mode
  • SHIFT+LMB: Rotation precision mode
  • CTRL+LMB: Rotation snap to 5° mode
  • A: Toggle rotate along view axis gizmo
  • E: Frame clip box
  • F: Frame points
  • B: Fit to bounding box
  • [1-6]: Toggle plane enabled
  • CTRL+[1-6]: Align viewport with plane
  • V: Set all planes enabled
  • [ or ]: Plane size
  • S: Store current state
  • CTRL(+SHIFT)+Z: Undo(Redo)
  • H: Toggle Help panel
  • ESC: Exit

Transform

Transform tools operate on points container object. They will not modify points only container transformation in world coordinates.

Transform Tools Panel

Translate

Translate points container so selected point is at chosen location.

  • LMB(+drag): Set point
  • F: Translate
  • D: Toggle using depth buffer for point selection
  • RMB: Cancel current transform
  • CTRL(+SHIFT)+Z: Undo(Redo)
  • H: Toggle Help panel
  • ESC: Exit

Rotate XY

Rotate points container to align AB and BC lines between chosen 3 points and world Y and X axes.

  • LMB(+drag): Set 3 points
  • F: Rotate
  • C: Toggle Use Corner
  • D: Toggle using depth buffer for point selection
  • RMB: Cancel current transform
  • CTRL(+SHIFT)+Z: Undo(Redo)
  • H: Toggle Help panel
  • ESC: Exit

Align Z

Rotate points container to align tow selected points with world Z axis.

  • LMB(+drag): Set 2 points
  • F: Align
  • C: Toggle Use First
  • D: Toggle using depth buffer for point selection
  • RMB: Cancel current transform
  • CTRL(+SHIFT)+Z: Undo(Redo)
  • H: Toggle Help panel
  • ESC: Exit

Scale

Scale points container to make length between two selected points equal chosen value.

  • LMB(+drag): Set points
  • F: Scale
  • C: Toggle Use Center
  • D: Toggle using depth buffer for point selection
  • RMB: Cancel current transform
  • CTRL(+SHIFT)+Z: Undo(Redo)
  • H: Toggle Help panel
  • ESC: Exit

Cleanup

Cleanup tools will remove selected points from memory. If you need to save edits, export as ply after you are finished with cleanup.

Cleanup Tools Panel

Box Select

Select points using box selection.

  • LMB+drag: Draw selection
  • SHIFT+LMB+drag: Add to selection
  • CTRL+LMB+drag: Subtract from selection
  • A: (De)Select all
  • RMB: Deselect all
  • I: Invert selection
  • X: Remove selected
  • H: Toggle Help panel
  • ESC: Exit

Lasso Select

Select points using lasso selection.

  • LMB+drag: Draw selection
  • SHIFT+LMB+drag: Add to selection
  • CTRL+LMB+drag: Subtract from selection
  • A: (De)Select all
  • RMB: Deselect all
  • I: Invert selection
  • X: Remove selected
  • H: Toggle Help panel
  • ESC: Exit

Circle Select

Select points using circle selection.

  • LMB+drag: Draw selection
  • SHIFT+LMB+drag: Add to selection
  • CTRL+LMB+drag: Subtract from selection
  • [ and ]: Adjust radius
  • A: (De)Select all
  • RMB: Deselect all
  • I: Invert selection
  • X: Remove selected points
  • H: Toggle Help panel
  • ESC: Exit

Gradient Select

Select points using gradient selection.

  • LMB+drag: Draw selection
  • SHIFT+LMB+drag: Add to selection
  • CTRL+LMB+drag: Subtract from selection
  • C: toggle constrain to vertical and horizontal axes
  • A: (De)Select all
  • RMB: Deselect all
  • I: Invert selection
  • X: Remove selected points
  • H: Toggle Help panel
  • ESC: Exit

Retopology

Retopology tools operate on separate mesh object. You can create one before running tool or create new at any time while tool is running.

For better mesh visibility while any Retopology tool is running, target mesh is hidden from viewport and drawn on top of points with custom shaders.

All Retopology tools allow switching to Blender Mesh Edit mode at any time for using Blender tools. When edit mode is exited, initial Retopology tool will be restored. In short, TAB into mesh edit mode, do what is needed, TAB back to initial Retopology tool to continue.

Retopology Tools Panel

Polygon

Draw polygons while snapping vertices on points or existing vertices in target mesh.

  • LMB: Place (on points) / Select (vertex in mesh)
  • LMB+drag: Continuous place (on points) / Select more (vertices in mesh)
  • CTRL+LMB+drag: Tweak placed point (while snapping on points and vertices) / Tweak mesh vertex (while snapping on points and vertices)
  • D: Toggle using depth buffer for point selection
  • B: Toggle Ignore Backfacing (for mesh vertices selection)
  • M: Toggle Merge Mesh Vertices (disabled if selection exists)
  • RMB: Cancel current polygon / Cancel tweak if active
  • F: Make polygon from placed and/or selected / Make quad from single selected mesh vertex in corner and mouse location
  • X: Delete selected mesh vertices
  • TAB: Toggle Mesh Edit mode
  • CTRL(+SHIFT)+Z: Undo(Redo) mesh edits only (Toggle Mesh Edit mode resets history)
  • CTRL+S: Save the current Blender file
  • H: Toggle Help panel
  • ESC: Exit

Plane

Make quad plane rotated to fit selected points.

  • LMB(+drag): Select points
  • CTRL+LMB(+drag): Deselect points
  • CTRL+SHIFT+LMB(+drag): Rotate plane
  • RMB: Cancel current plane
  • F: Make plane
  • N: Make plane as new mesh object
  • D: Toggle using depth buffer for point selection
  • TAB: Toggle Mesh Edit mode
  • CTRL(+SHIFT)+Z: Undo(Redo) (Mesh Edit mode resets history)
  • CTRL+S: Save the current Blender file
  • H: Toggle Help panel
  • ESC: Exit

Cube

Draw Cube alias Rectangular Cuboid snapped to points by setting three initial corners and arbitrary height.

  • 3x LMB(+drag): Place Cube Corners (drag moves last placed)
  • After 3rd corner, set cube height
  • 4th LMB: Make cube
  • CTRL+LMB: Tweak last cube vertices freely
  • CTRL+SHIFT+LMB: Tweak last cube vertices and snap to points
  • RMB: Cancel current cube
  • D: Toggle using depth buffer for point selection
  • TAB: Toggle Mesh Edit mode
  • CTRL(+SHIFT)+Z: Undo(Redo) (Mesh Edit mode resets history)
  • CTRL+S: Save the current Blender file
  • H: Toggle Help panel
  • ESC: Exit

Filter

Collection of filters sorted to categories Points, Colors, Normals, Scalars and Mesh. General rule is, filters removing something are on top, then modifying and lastly adding filters, order from probably most used to less.

Undo/Redo

Filters operate on loaded points directly and since loaded points are not part of Blender data system, Blender undo system cannot be utilized. Because of that, very simple undo system is available. It is mainly meant for filters, but it is working also with tools etc, everything that change loaded point data directly.

Store state of point data with a button, then Restore if you want to go back to that stored state at any time, only one state is stored, it is cleared when new point cloud file is loaded, current unloaded, container object is deleted and renamed, when new blend file is loaded or when Clear button is pressed.

Filter Panel

Points

Filter > Points panel contains filters operating on points or points positions.

Filters are directly applied on loaded points, Blender undo system does not work. To have single history state to return to, see Store/Restore state operators

Points

Simplify

Contains several methods to reduce number of points.

  • Distant Samples - Start from random point, select number of candidates, accept the most distant from already accepted, repeat. This is very slow process on large datasets. See Poisson Disk Elimination for much faster algorithm with similar result.
  • Voxel Grid - Split points to grid, remove extra points, average normals, colors and scalars per grid cell. Slower than Voxel Downsample, but has more options.
  • Slice - Slice by percentage. Optionally shuffle points before slicing. Similar effect as Display > Points > Percentage, but modifies points directly.
  • Reduce - Reduce point cloud to exact number points. Same as Slice, but allows you to set target number of points.

Simplify

Remove Duplicates

Remove points by minimal distance between them. Operates on transformed point locations in world coordinates.

Remove Duplicates

Poisson Disk Elimination

Downsample points by removing points that are within set radius from other points.

Poisson Disk Elimination

Voxel Downsample

Voxel downsampling uses a regular voxel grid to create a uniformly downsampled point cloud from an input point cloud.

It is faster than Simplify > Voxel Grid, but have less options and requires Open3D to be installed.

Voxel Downsample

Crop

Remove points outside or inside of bounding box of a mesh object.

Crop

Boolean

Boolean intersect or exclude points with a mesh object.

Boolean

Outlier Removal

Remove points that are further away from their neighbors compared to the average for the point cloud. Useful for removal misaligned single points.

Outlier Removal

Hidden Point Removal

Estimates visible points from view or object location and removes hidden.

Choose from Open3D or SciPy implementation by what library you have installed.

Hidden Point Removal

Project

Projects points along their normals (backwards, forwards or both) on mesh surface. Points can be moved to hit location, their normal can be replaced with surface normal (optionally interpolated) and points can be colorized by mesh uv texture, color attribute or vertex group, all of these properties can be enabled individually. Can also discard points that can't be projected. Use Open3D option can be used to speed up ray casting.

Project

Split

Split points to multiple PCV instances. Points can be split to Grid, or by point Count per instance or to several Pieces with roughly same point count.

Split

Split By Scalar Value

Split points by integer scalar field. Useful to split classified points separate PCV instance per class.

Split By Scalar Value

Point Set Registration

Align multiple PCV instances, selected are always aligned to active. There are several Method types to choose from.

For details on each method see Open3D documentation. Generally Fast Global is good enough, if more precision is required, use Global with Local Refinement.

Point Set Registration

Join

Join selected PCV instances to one.

Join

Apply Shader Effects

Apply shader Display > Effects to points.

Apply Shader Effects

Transfer Data

Transfer normals, colors and scalars from active to single selected other PCV instance by proximity, there is no interpolation, values is taken from closest point in active instance.

Transfer Data

Add Noise

Apply Random or Turbulence noise to point positions.

Add Noise

Histogram 3D

Calculate 3d histogram of points, split points to 3d cells of equal sizes and calculate number of points they contain or cell density, put result to a new PCV instance, counts or densities as a scalar field.

Histogram 3D

DBSCAN Clustering

Group local point cloud clusters together and add group indices as a scalar field.

DBSCAN Clustering

Normals

Filter > Normals panel contains filters operating on point normals.

Filters are directly applied on loaded points, Blender undo system does not work. To have single history state to return to, see Store/Restore state operators

Normals

Estimate Normals

Compute normals of point cloud. Normals are oriented with respect to the existing point cloud normals if exists and provided. If not, there are several methods to determine orientation: Direction, Camera Location and Tangent Planes.

Estimate Normals

Add Normals

Add normals from three scalar fields.

Some file formats does not store normals, but allows adding of custom scalar fields. Normals x, y, z values are added, but there is no standard for field names. Most common are NormalX, nx, normal_x, normalx or normal x.

Add Normals

Colors

Filter > Colors panel contains filters operating on point colors.

Filters are directly applied on loaded points, Blender undo system does not work. To have single history state to return to, see Store/Restore state operators

Colors

Remove Color

Select points by color sampled from viewport or by numeric values. Selected points can be removed or split to new PCV instance.

Remove Colors

Color Adjustment

Adjust points colors with Exposure, Gamma, Brightness, Contrast, Hue, Saturation, Value and Invert controls. For fast viewport preview uses Color Adjustment shader, need to be applied with Apply button to point data.

Color Adjustment

Clip Colors

Clip color values to be between 0.0-1.0.

Clip Colors

Add Colors

Recreate point colors from three (or four) scalar values. Handy when loaded data does not define known colors format and their values are read as regular scalar values.

Add Colors

Add Alphas

Add alpha from scalar value or constant.

Add Alphas

Add Colors From Spherical Harmonics

Compute colors from first level of Spherical Harmonics in 3D Gaussian Splatting files.

Add Colors From Spherical Harmonics

Transfer Colors

Transfer colors from points to mesh object color attribute or uv texture. By default, color is taken from closest point, optionally you can average point colors in some radius. Transfer colors to UV texture requires non-overlapping UV layout fully contained in unit square on target mesh. Extending margins on UV texture uses Blender baking system.

Transfer Colors

Project Image From Camera

Project colors from image on points. Perspective and Ortho cameras are supported.

Project Image From Camera

Scalars

Filter > Scalars panel contains filters operating on point scalar fields.

Filters are directly applied on loaded points, Blender undo system does not work. To have single history state to return to, see Store/Restore state operators

Scalars

Remove Value

Select points by scalar value. Selected points can be removed or split to new PCV instance. Points can be selected by range or exact value, both integers or floating point values.

Remove Value

Blur Scalar

"Blur" scalar field.

Blur Scalar

Posterize Scalar

Posterize scalar field. The result is the same like using Display > Scalar Field > Posterize, but it is aplied directly on values.

Posterize Scalar

Convert Scalar

Convert scalar field data type to another, optionally remap values From to To value ranges. Result can be added as new scalar field or replace source field.

Convert Scalar

Distance To Mesh

Add scalar field from point shortest distance to a mesh.

Distance To Mesh

Colorize Scalar

Colorize points by scalar value, grayscale or heat map colors.

Colorize Scalar

Scalar From Mesh Vertex Group

Create scalar field from mesh vertex group by point proximity.

Scalar From Mesh Vertex Group

Scalars From Mesh UV Map

Create scalar fields from mesh UV by point proximity.

Scalar From Mesh UV Map

Density

Create scalar field from points density.

  • Neighbours - Density from point distance to closest neighbour.
  • Surface - Density from number of other points in circle radius, in 2D, along world Z axis.
  • Volume - Density from number of other points in sphere radius.

Density

Curvature

Compute curvature on points from underlying surface and output to colors or scalar.

Curvature

Add Scalar

Create scalar value on points from other point properties.

Add Scalar

Mesh

Filter > Mesh panel contains filters for mesh surface reconstruction from points.

Mesh

Surface Reconstruction

Uses Open3D - Poisson Surface Reconstruction

For correct results, points must have correct normals.

Surface Reconstruction

Screened Poisson

Uses MeshLab - Surface Reconstruction: Screened Poisson

For correct results, points must have correct normals.

Screened Poisson

Render

Render with active GPU backend single or multiple PCV instances to image or sequence of images with transparent or 3d viewport background (as looks in Solid viewport shading). Points are always rendered with active shader used for drawing in viewport. Scalars, normals and bounding box is rendered if enabled and drawn in viewport. Clipping planes are used during rendering as well.

Other blender objects can be rendered together with points if Type is Viewport. They will look as in viewport.

Preset menu in panel header will save all panel settings into a preset.

Render Panel

Output

Images are rendered in Properties > Output Properties > Format Resolution X,Y and % dimensions and saved as set in Properties > Output Properties > Output (image file formats only) at path at the same panel. If Save As Render is enabled, Properties > Output Properties > Output > Color Management is used. Rendered images are directly saved to output directory, they are not opened in image editor area as regular Blender renders, unless Create Image Datablock is enabled, then will render to image datablock (single render, animation is always saved to disk), consecutive renders will create new image datablock each, images have to be saved manualy or packed to blend file.

Performance

Cache Buffers speeds up animation rendering by creating buffers once and reusing for the rest of frames. Works only on static point data (no sequences) and Display properties cannot be animated, Depth Sorting and HPR cannot be used. Only container transformation can be animated.

Anti-aliasing

For anti-aliased images, use Supersampling 2 or larger. At value 2 renders image at 200% size (3 at 300% etc.) and then downsamples to output resolution. This is limited by maximal gpu image (texture) resolution so be careful with value, use the smallest acceptable, usually at 2, amount of anti-aliasing is sufficient.

Look

  • If you render points with alpha per point and Alpha shader, or if you use other Global Alpha then 1.0, for best result enable Depth Sort Points Each Frame for correct alpha blending. On the other hand, rendering will be slower because sorting is performed in python and not in gpu.
  • Hidden Point Removal runs Hidden Point Removal filter (requires Open3D or SciPy (depends on selected implementetion) to be installed) on points on each frame using render camera location.
  • Postprocess applies postprocesing on renders as in viewport, but adjust setting first for rendering in Render panel. Because of different resolution, result may look different then in viewport.

Other Notes

  • Mask Pass and Depth Pass saves separate files with mask and depth buffer.
  • If you start Blender from command line you can observe animation rendering progress in terminal.
  • If you want to render points with Blender render engine (Cycles, Eevee or any other), points need to be converted to regular Blender object, see Convert section.

Convert

Conversion Blender object/data type is set at panel top with Target enum.

Preset menu in panel header will save all panel settings into a preset.

Mesh

Convert points to native Blender Mesh datablock type. Converted points are then part of blend file and can be used like any other native Blender data. Colors, normals and scalars are always preserved. Conversion results are renderable with Cycles, Eevee and other render engines.

Added new Mesh object will have Geometry Nodes modifier that will instance selected primitive (Point, Equilateral Triangle, Quad, Tetrahedron, Cube, Ico Sphere and Custom Mesh) on mesh vertices. Simple material using color attribute from point colors will ba added to mesh.

Instance size and instance type can be later changed on Geometry Nodes modifier. To use scalar field as colors, edit material to use different attribute.

Convert Panel

Volume

Convert points to VDB file. Set path where VDB will be saved. Operator will then add volume using exported file to scene.

Convert Panel

3D Gaussian Splatting

Experimental

Converts result PLY files from 3D Gaussian Splatting for Real-Time Radiance Field Rendering to something Blender renderable, keep in mind that this training software has its own terms of use. License of the original paper implementation says the official training software for the 3D Gaussian Splatting may be used "non-commercially", i.e., for research and/or evaluation purposes only. Commercial usage requires getting license from INRIA. PCV only reads user supplied 3D Gaussian Splatting PLY files and interpret their data in Blender context. You need to consider how did you get your 3D Gaussian Splatting PLY files.

Please, take it as a very experimental feature, more like exploring what blender can do or not.

Spherical harmonics formulas used in material nodetree are taken from UnityGaussianSplatting.

There are 4 approaches so far: points, octagons, spheres and sphere instances with volume. each have some advantages and each has problems, none is ideal.

  • Point - Point primitive, splat rotation and scale does not apply
  • Octagon - Flat polygon primitive, lighter meshes, texture gradient falloff, lack of third dimension makes result look too sparse, by default has doubled size to counter that
  • Sphere - UV sphere primitive, better shape representation, bad gradient falloff due to available surface material possibilities
  • Volumetric Sphere - Instanced UV sphere primitive, volumetric material, very slow to render, volume density does not translate that well

Increasing Properties > Render Properties > Light Paths > Transparent will get rid of weird opaque patches in render.

Convert Panel

Pointcloud

Experimental

Convert to native Blender Pointcloud object. Pointcloud object is unfinished Blender feature. It is only available in official alpha builds.

Convert Panel

Generate

Generation source Blender object/data type is set at panel top with Source enum.

Preset menu in panel header will save all panel settings into a preset.

Remove Generated operator will remove generated points and Move Points operator will move generated points from source object to a new Empty object.

Colors

Generation methods that use single object as source can generate point colors from various source found on mesh set with Colors enum.

  • Constant Color - Use constant color value
  • Color Attribute - Use active color attribute
  • UV Texture - Generate colors from active image texture node in active material using active UV layout
  • Vertex Group Monochromatic - Use active vertex group, result will be shades of grey
  • Vertex Group Colorized - Use active vertex group, result will be colored from red (1.0) to blue (0.0) like in weight paint viewport

Other methods that use whole scene use rendered image that is rendered automatically in background. Generation from rendered image uses image itself.

Mesh Vertices

Generate points from single Mesh object using existing mesh vertices. Each mesh vertex will became single point.

Generate Panel

Mesh Surface > Random

Generate points from single Mesh object using random sampling of mesh surface.

Uses Geometry Nodes in background for best performance.

Generate Panel

Mesh Surface > Poisson

Generate points from single Mesh object using poisson sampling of mesh surface.

Uses Geometry Nodes in background for best performance.

Generate Panel

Mesh Surface > Project

Project square grid on mesh surface from view. Incremental mode is available, so consecutive runs append new points to existing. This can simulate real scanning process.

Generate Panel

Mesh Volume

Generate points from single Mesh object using random sampling of mesh volume.

Uses Geometry Nodes in background for best performance.

Generate Panel

Native Point Cloud

Experimental

Generate points from native Blender Pointcloud object. There are no options, Pointcloud object contains all available data.

Pointcloud object is unfinished Blender feature. It is only available in official alpha builds.

Generate Panel

Geometry Nodes Vertices

Generate points from single Mesh object with Geometry Nodes modifier and its output.

Fill Attributes operator will help with indentifying exported attributes from modifier and setting their names them to fields.

Generate Panel

Scene > Lidar Simulation

Project points on whole scene in spherical coords around active object origin, colorize with Cycles equirectangular render rendered from origin.

Generate Panel

Scene > Project

Project square grid on scene surface from view, colorize with Cycles render rendered from view. Incremental mode is available, so consecutive runs append new points to existing. This can simulate real scanning process.

Generate Panel

Render

Generate points from existing rendered multilayer EXR, Camera used for render and position pass or depth pass present in multilayer EXR.

Generate Panel

Export

File type is set at panel top with Type enum.

Preset menu in panel header will save all panel settings into a preset.

PLY

  • Apply Transformation - Apply container object transformation to points.
  • Convert Axes - Convert from blender (y forward, z up) to forward -z, up y axes.
  • Apply Inverse Shift And Scale - If point positions have Shift/Scale aplied, unapply that before exporting and use double precision in binary and 16 decimal places in ascii formats.
  • Colors - Color data type per channel, uint8 (0-255) (typical format), uint16 (0-65535) or float32 (0.0-1.0).
  • Ignore Color Alpha - Do not export color alpha.
  • Ignore Zero Scalars - Do not export scalars with zero sum.
  • Binary PLY Format - Write points as Binary PLY file, otherwise write ASCII PLY. ASCII PLY uses 16 decimal places for doubles and 6 for floats (applies for point positions, normals, colors and scalars as well).
  • Reload Exported File - Write points to file, set as source file on instance, then load points from it.

Export PLY

LAS/LAZ

Depends on laspy + lazrs (recommended) or laszip.

LAS version 1.2, point format 3 and extra dimensions (normals and scalars other than standard fields https://laspy.readthedocs.io/en/latest/intro.html#point-records).

LAS/LAZ is always exported unshifted/unscaled because file format allows it.

It is always a new file, original header data (if source is LAS/LAZ) is not copied.

  • Apply Transformation - Apply container object transformation to points.
  • LAZ - Write as compressed LAZ file.
  • Colors - Write colors.
  • Normals - Write normals if exist, extra dimensions will be used with NormalX, NormalY and NormalZ names.
  • Scalars - Write scalar values from LAS specification version 1.2 format 3 if scalar with matching name exists.
  • Extra Dimensions - Write other scalars as extra dimensions, any scalar with name not in specification will be written.
  • Reload Exported File - Write points to file, set as source file on instance, then load points from it.

Export LAS

E57

Depends on pye57.

Only positions, intensity (if exists) and colors (pye57 does not support normals) are exported. It is always a new file, original header data (if source is E57) is not copied.

E57 is always exported unshifted/unscaled because file format allows it.

  • Apply Transformation - Apply container object transformation to points.
  • Reload Exported File - Write points to file, set as source file on instance, then load points from it.

Export E57

PTS

If point data has shift/scale and it is requested to be unapplied, 16 decimal places for doubles will be used, else 6 for regular floats.

  • Apply Transformation - Apply container object transformation to points.
  • Convert Axes - Convert from blender (y forward, z up) to forward -z, up y axes.
  • Apply Inverse Shift And Scale - If point positions have Shift/Scale aplied, unapply that before exporting and use double precision in binary and 16 decimal places in ascii formats.
  • Intensity - Choose how intensity scalar is handled. Automatic uses following in order what matches: scalar field name contains intensity, active scalar field, constant value 1.

Export PTS

Sequence

Display sequence of point cloud files. Every file format is supported except non PTS ASCII format files.

Add new PCV instance, load first file of sequence. Then use Sequence panel to load the rest of sequence. Points from files can be Preloaded to memory for smooth playback, or loaded On The Fly. Preloaded sequence displays only current frame that need to fit in gpu memory, but the rest of loaded files is in system memory. If you run out of system memory it is better to use on the fly loading type.

If you start Blender from command line you can observe batch processing progress in terminal.

Sequence

Batch Filter

Apply select filter on all loaded sequence frames. Settings for filter is taken from its panel in Filter section. Filter settings can also be animated.

Batch Filter

Batch Operations

Place for other operations on sequences of character that does not fall under filter category.

  • Batch Join: Join points per frame from multiple sequences into single sequence, sequences will be joined over whole timeline, empty frames will be skipped. If Shuffle Joined Points is enabled, points will be shuffled per frame.

Batch Operations

Batch Convert

Convert each frame to Blender data type as set in Convert panel. Animation hiding/unhiding frame object is created automatically so playback is preserved.

Batch Convert

Batch Generate

Generate points for each frame in timeline with settings set in Generate panel.

Batch Generate

Batch Export

Export each frame to file using setting from Export panel.

Batch Export

Preferences

Addon

Tab Name

Tab Name Panel

  • Tab Name - if Point Cloud Visualizer is too long for your tabs, you can change to shorter PCV.
  • Custom Tab Name - if set to existing tan name, PCV panel is moved there.

GPU Memory To Max. Points Calculator

Calculator Panel

Calculate theoretical maximum of displayable points for given gpu memory, floored to nearest tens of millions. Result is valid only when Default shader is used and nothing else displayed, i.e. location and color per point only. See Large Datasets for more info.

Optional Libraries

Optional Libraries Panel

Install optional libraries by clicking Install NAME. Restart Blender after each installed library. To uninstall library, click its button.

  • Check - Check each library if it is reported as available and show results. This check is executed without importing to prevent crashes, results may not be accurate.
  • Prevent Library Conflicts - See Optional Libraries Compatibility and Libraries Workarounds for more info.

Defaults when using "PCV > Load" operator

Load Operator Panel

Default options for load operator: 3d Viewport sidebar > PCV tab and click Choose File .

Defaults when using "Add > Point Cloud Visualizer" helper operator

Add Operator Panel

Default options for helper operator (adds empty object to scene and loads points for each selected file): 3D Viewport > Add > Point Cloud Visualizer Shift+A

Fast Navigation

Fast Navigation Panel

Draw low resolution point cloud during viewport navigation. See Fast Navigation for more info.

  • Delay - Delay drawing of high resolution point cloud to viewport after navigation ended
  • Percentage - Low resolution point cloud percentage, used until point count exceeds Maximum
  • Maximum (Millions) - Low resolution point cloud maximum number of points, used when point count exceeds Percentage
  • Auto Exclude (Millions) - Skip Fast Navigation if instance point count is lower, set to zero to disable and use on all instances, will not apply on points if low resolution is already generated in current session, reload files to update

UI

UI Panel

Tools

Tools Panel

  • Show Help Panel At Tool Start - Disable to hide help panel for each tool.
  • Show Tools Color Theme - Edit color theme of Tools to fit your Blender theme.

Packer

Packer Panel

Store loaded points as hidden mesh datablock with attributes in blend file. Automatically restore and draw points from datablock at blend file load, save points to datablock on blend file save.

This operation is meant to be fully automatic (if Auto Pack and Auto Optimize options in preferences are enabled, they are by default) once loaded point data are marked for packing clicking Pack icon next to file path on main PCV panel (this will work for any file formats, even those loaded using Import panel).

If Packer is enabled, main operators (Draw, Erase, Reload etc.) will prioritize packed data (if available) over loading from ply file.

Packer adds utility operators to 3D Viewport Panel as well as list of packed datablocks in blend file. See Packer for more info.

  • Auto Pack: pack all points that are loaded and/or displayed when blend file is being saved
  • Auto Optimize: remove packed datablocks on blend file save if container object is not found in scene

Utilities

Utilities Panel

  • Reset PCV On Active Object - Reset all PCV properties stored on active object
  • Reset PCV Preferences - Reset all PCV Preferences

Experimental

Experimental Panel

Patch 'pye57' library

Patch pye57 reader class at runtime to read files with scans without translation and rotation elements in its header.

Helps when reading e57 file ends in error E57 element path well formed but not defined (E57_ERROR_PATH_UNDEFINED) and in console with lines similar to this:

  File "/Users/redacted/.local/lib/python3.10/site-packages/pye57/e57.py", line 214, in read_scan
    xyz = self.to_global(xyz, header.rotation, header.translation)
  File "/Users/redacted/.local/lib/python3.10/site-packages/pye57/scan_header.py", line 32, in rotation
    q = Quaternion([e.value() for e in self.node["pose"]["rotation"]])
pye57.libe57.E57Exception: E57 element path well formed but not defined (E57_ERROR_PATH_UNDEFINED)

Viewer

Load and display very large datasets that does not fit into gpu memmory. Octree, Level of Detail, Camera Frustum, Threading, everything..

  • Viewer is indirectly connected with 3d viewport where it has been started, if you change viewport to some other editor type, viewer will stop, if you maximalize viewport area, it will stop, if you open non-popup file select dialog, it will stop. If by any way original viewport is not found, Viewer will stop and reset (this behavior might change in future for some cases, if viewport connection is resumed in some given timeout). Other 3d viewports then initial will draw points, but they will not react on camera view changes (may be changed in future, but because of performance it is now omitted and most likely it will stay like that).
  • Loading, octree preprocessing, sorting octree nodes according to camera view and their distance from camera, all of it runs in separate threads, so it does not block Blender, however processing data for gpu just before drawing cannot be done in background (Blender will crash instantly) so Blender will freeze a bit if a lot of octree nodes have to be updated at once (this might improve in future by processing it in smaller batches, but will not be eliminated).

Advanced

Debug Mode

Is enabled when Blender is started from command line with --debug-value 1 argument (or any non zero value) or you can set this at runtime by searching for Debug Menu and setting value in popup menu.

If Debug Mode is enabled, PCV will log more info to a console (terminal window, not Blender Info panel). In some cases even operation progress. PCV panels will also get several extra buttons to force shader rebuilding, debug options, some more panels with runtime info etc.

PCV preferences will also show more utility operators for pip command, listing installed packages, install package prompt, uninstall all packages from user site-packages directory etc. These operators are hidden from Blender Search Function to prevent accidental running. Can be only run from button in preferences.

API

A few utility functions are re-exported at PCV module level to aid with general script or addon development. If there is problem with function input, error will be logged to console, but all exceptions will be handled to not interrupt main script from running.

API Lorenz
Display results of a simple script executed from Text Editor
draw(data=None, *, name=None, matrix=None, is_debug=False, )
  • Draw data with pcv
    • data: dict with vs, ns, cs and scalars keys (all optional except vs) with numpy arrays as values, all of them must have the same length, shapes of arrays must be: vs and ns (n, 3), cs (n, 4) or (n, 3) and scalars must be a structured array (n, ). if None is passed instead of a dict, empty arrays will be used, nothing will be drawn, but pcv will be initialized
    • name: string, assumes object is in scene, if not raises error, if None is passed, pcv_debug object will be created if needed and drawing mode is set to debug (is_debug=True) (i.e. bigger points, drawn on top, normals visible if exists, fast nav disabled..)
    • matrix: if not None, target object will get assigned this matrix to matrix_world, if not instance of Matrix, it will be converted (if possible, if not, will be ignored)
    • is_debug: if True, some for-better-visibility properties will be adjusted, see source for details, also set to True when no object name is passed (and pcv_debug is used instead)
properties(*, name=None, )
  • Get property group with pcv properties
    • it is the same as bpy.context.scene.objects[name].point_cloud_visualizer
    • name: string, assumes object is in scene, if not raises error. if None is passed, pcv_debug name will be used
erase(*, name=None, )
  • Stop drawing and unload data
    • if name is None, pcv_debug name will be used, if such object is found and is EMPTY type, will be removed
    • name: string, assumes object is in scene, if not raises error. if None is passed, pcv_debug name will be used

Basic Example

import numpy as np
import point_cloud_visualizer as pcv
# will create `pcv_debug` empty object in scene, to use existing object pass `name="OBJECT_NAME"`
pcv.draw(data={
    'vs': np.array([(0, 0, 0), (0.1, 0, 0), (0.2, 0, 0)], dtype=np.float32, ),
}, )

Full Example

import bpy
import numpy as np
import point_cloud_visualizer as pcv
from mathutils import Matrix
# add an empty object
o = bpy.data.objects.new("points", None)
bpy.context.view_layer.active_layer_collection.collection.objects.link(o)
# craft some object level transformation
m = Matrix.LocRotScale((0.1, 0.2, 0.3), Matrix.Rotation(np.pi / 4, 3, 'X'), (1, 1, 1))
# scalars got to be a structured array with named fields
sc = np.empty(3, dtype=[('intensity', np.float32, ), ])
sc['intensity'] = np.linspace(0, 1.0, 3)
pcv.draw(name='points', data={
    'vs': np.array([(0, 0, 0), (0.1, 0, 0), (0.2, 0, 0)], dtype=np.float32, ),
    'ns': np.array([(-1, 0, 0), (0, 1, 0), (0, 0, 1)], dtype=np.float32, ),
    'cs': np.array([(1, 0, 0, 1), (0, 1, 0, 1), (0, 0, 1, 1)], dtype=np.float32, ),
    'scalars': sc,
}, matrix=m, is_debug=True, )
API Frustum
Interactive drawing of results from running modal operator

Context Manager

Context manager for running PCV operators from custom scripts

Will make sure that name object exists, has loaded points in cache and drawn on screen (if not, tries to load linked file if possible), object is selected and active and operators are called with proper context.temp_override (i.e. 3d viewport exists, if not it will swap area, this is especially important when running render operator). On exit it will restore selection and original area (if has been swapped before).

Example (assuming there is an object named points in scene with linked file and (maybe) loaded points):

import bpy
import point_cloud_visualizer as pcv
with pcv.common.PCVOperatorContextManager('points'):
    bpy.ops.point_cloud_visualizer.render()

FAQ

I got warning icons and Missing vertex normals, Missing vertex colors and Missing scalars messages in Display panel

Loaded data does not have normals, colors or scalar fields so affected shading options cannot work properly, missing values are substitued by default normal or colors (exact values are in PCV > Load > General).

Points are missing when blend file is saved and reopened?

  • PCV does not store loaded points in blend file because there is no suitable data type available. only PCV settings and path to data file is stored. when blend file is reopened, points need to loaded or imported from linked file again by clicking Draw button.
  • If you are working with multiple PLY clouds at once, you can use PCV 3d viewport panel (viewport header top right corner: cloud icon) to Draw all PCV instances in scene at once.
  • Any changes to points made with PCV have to be saved using Export panel to PLY before quiting Blender or loading blend file otherwise will be lost.
  • Other option is to use Pack option that will automatically convert points to hidden mesh datablock on blend file save and restore on blend file load, but since blender uses only single precision floating point numbers for vertex positions, geolocated point data will lost its precision and cannot be moved exactly back. If you don't need to export points back to "world" locations (i.e. LAS/LAZ or E57 files) you can ignore this limitation.

How to render points in Cycles or Eeveee (with colors)?

  • Points need to be converted to Blender native data type that can be rendered in engine. Conversion target is mesh vertices with Geometry Nodes to turn them to instances or points, see PCV > Convert panel.
  • Converting points will create suitable color data and adds basic material using it so colors are preserved and available for render engine.
  • Mesh instances can be rendered in Cycles and Eevee, points are supported only by Cycles.

Platform Compatibility

  • Windows, Linux and macOS
  • see Optional Libraries Compatibility for more details on 3rd party libraries

Blender Compatibility

  • PCV 3.0 is for Blender 3.6 LTS and later

Large Datasets

  • currently, PCV needs to load all points from source file and keep them in system memory
  • during loading, system memory usage will peak quite high, 4 (and more in some cases) times the runtime usage
  • for display, PCV need to upload all points that are going to be displayed (you can control amount with PCV > Display > Percentage slider) to gpu memory
  • to determine approximate maximum number of points your gpu can display at once you can use calculator in PCV preferences (for example 8GB gpu can display ~300M points with default shader and disabled scalars), calculator formula is simple:
ram = 8192  # MB
b = (1024*1024) * ram  # bytes
# default shader uses 3x float32 for point location and 4x float32 for color (rgba)
# float32 takes 4 bytes, hence 3*4 + 4*4 bytes
n = int(b / (12 + 16))
print(n)  # 306783378
  • trying to display more points (i.e. uploading more data than gpu memory can contain) will result in Blender crash or freeze
  • when extremely big data need to be loaded and is not required to work with exactly all points, alternative loading methods Every Nth or Slice can be used to reduce number of points during loading

Is there a trial version?

No, sorry. it is not possible.

I got an error..

Please let me know "Ask a Question" sidebar button.

Ideal for any bug report would be starting Blender from command line and repeating error situation. Then copy messages from console window, add steps to reproduce it. If it is related to loading a point cloud file include it in report if it is possible.

I'd like to have X feature implemented..

Please let me know "Ask a Question" sidebar button. I am always open to suggestions.