Display, edit, filter, render, convert, generate and export colored point cloud files.
Available at Blender Market
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
- LTS releses are recommended, so currently 3.6 or 4.2
Installation for Blender < 4.2
- download latest version
point_cloud_visualizer-###.zip
- install as regular Blender addon: docs.blender.org
Installation for Blender 4.2 and later
Please note that PCV will be updated to Extension in future, but because of optional libraries and their incompatibilities it requires larger changes through whole addon, it is not a trivial task of just adding a blender manifest file. As Legacy addon, PCV will work perfectly fine.
- download latest version
point_cloud_visualizer-###.zip
- install as Legacy 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 haveAuto-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 insite.getusersitepackages()
, exact location differs for each platform, if you clickRead 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)
- LAZ file import/export (requires
laszip
- LAZ file import/export (requires
laspy
)
- LAZ file import/export (requires
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
andPyMeshLab
together, Blender will crash when one and the other is used (see workarounds) - do NOT use
Open3D
andpye57
together, Blender will crash when one and the other is used (see workarounds) - do NOT use
Open3D
andlaspy
+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
- do NOT use
-
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
- on Apple Silicon you need to use Blender Intel build to install and use
-
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
orPyMeshLab
) andOpen3D
will crash Blender if both are used in single Blender session. To use both, installOpen3D
andpye57
(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 usingOpen3D
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
- E57 files reading libraries (
⚠️ 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
andpybind11
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 toxerces-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, seePacker
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
orSlice
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 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
andErase
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 itsClip 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.
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
andUnpack
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
andUnmark All
will setPack
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.
Points
Points
panel contains settings related to point visibility, shape and size.
Percentage
- Adjust percentage of points displayedShuffle Points
- Shuffle points if they are ordered soPercentage
lower than 100% shows evenly distributed pointsUse UI Scale
- Multiply point size by UI Scale (Preferences > Interface > Resolution Scale)Round Points
- Draw rounded pointsSize
- Point size in pixelsAdaptive Size
- Adjust point size by distance from viewport camera, this is only for perspective projectionCulling
- Cull points facing backwards, requires point normals
Colors
Colors
panel contains settings related to point color or color generation, shows for Default
shader only
Alpha
Global Alpha
- Adjust overall alpha of pointsUse Alpha Per Point
- Use alpha per point if point colors contain alpha value
Depth
Colorize points by depth from viewport camera
Depth Effects
Colorize points by depth from origin or another object
Matcap
Colorize points using matcap image, requires normals. Matcap images are listed from BLender > Preferences > Lights > MatCaps
and Blender builtin.
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)
Shade
Shade
panel contains settings related to point shading, shows for Default
shader only and each requires normals.
Illumination
Add up to 3 lights to illuminate points.
Phong
Use Phong shading
Fresnel
Shade points by Fresnel value
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.
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
Displace
Move points along their normals
Noise
Move points randomly
Position Colors Shader Properties
Properties for Position Colors
shader contains location color grid scale and each grid cell offset.
Height Colors Shader Properties
Properties for Height Colors
shader contains axis selection, remapping options and custom colors.
Scalar Field
Contains a list of available scalar fields, value remapping options and colorization schemes.
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.
Normals
Visualize point normals as lines.
Bounding Box
Draw points Bounding Box.
Options
Other Display options
Use Fast Navigation
- Include or exclude fromFast Navigation
, see Preferences for more infoName
- Draw source file name in viewport at originIn Front
- Draw points above everything else
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.
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 ascolor ** (1 / 2.2)
.Shuffle Points
- Shuffle points after loading.Auto Draw
- Draw points after loading.
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
.
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.
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.
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 ().
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 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.
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.
Place 3D Cursor
Place 3D Cursor on closest point in cloud under mouse cursor. CPU variant, faster on smaller datasets.
LMB
: PlaceShift+LMB
: Place and align with normalLMB+drag
: Continuous placeH
: Toggle Help panelESC
: Exit
Place 3D Cursor (GPU)
Place 3D Cursor on closest point in cloud under mouse cursor. GPU accelerated variant, faster on large datasets.
LMB
: PlaceShift+LMB
: Place and align with normalLMB+drag
: Continuous placeD
: Toggle using depth buffer for point selectionH
: Toggle Help panelESC
: 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
Manipulate clip planes visually with gizmos.
LMB
: ManipulateRMB
: Cancel current actionG
: Move modeSHIFT+LMB
: Move facing planes together modeCTRL+LMB
: Move facing plane in opposite direction modeA
: Toggle move all gizmoR
: Rotation modeSHIFT+LMB
: Rotation precision modeCTRL+LMB
: Rotation snap to 5° modeA
: Toggle rotate along view axis gizmoE
: Frame clip boxF
: Frame pointsB
: Fit to bounding box[1-6]
: Toggle plane enabledCTRL+[1-6]
: Align viewport with planeV
: Set all planes enabled[
or]
: Plane sizeS
: Store current stateCTRL(+SHIFT)+Z
: Undo(Redo)H
: Toggle Help panelESC
: Exit
Transform
Transform tools operate on points container object. They will not modify points only container transformation in world coordinates.
Translate
Translate points container so selected point is at chosen location.
LMB(+drag)
: Set pointF
: TranslateD
: Toggle using depth buffer for point selectionRMB
: Cancel current transformCTRL(+SHIFT)+Z
: Undo(Redo)H
: Toggle Help panelESC
: 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 pointsF
: RotateC
: Toggle Use CornerD
: Toggle using depth buffer for point selectionRMB
: Cancel current transformCTRL(+SHIFT)+Z
: Undo(Redo)H
: Toggle Help panelESC
: Exit
Align Z
Rotate points container to align tow selected points with world Z axis.
LMB(+drag)
: Set 2 pointsF
: AlignC
: Toggle Use FirstD
: Toggle using depth buffer for point selectionRMB
: Cancel current transformCTRL(+SHIFT)+Z
: Undo(Redo)H
: Toggle Help panelESC
: Exit
Scale
Scale points container to make length between two selected points equal chosen value.
LMB(+drag)
: Set pointsF
: ScaleC
: Toggle Use CenterD
: Toggle using depth buffer for point selectionRMB
: Cancel current transformCTRL(+SHIFT)+Z
: Undo(Redo)H
: Toggle Help panelESC
: 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.
Box Select
Select points using box selection.
LMB+drag
: Draw selectionSHIFT+LMB+drag
: Add to selectionCTRL+LMB+drag
: Subtract from selectionA
: (De)Select allRMB
: Deselect allI
: Invert selectionX
: Remove selectedH
: Toggle Help panelESC
: Exit
Lasso Select
Select points using lasso selection.
LMB+drag
: Draw selectionSHIFT+LMB+drag
: Add to selectionCTRL+LMB+drag
: Subtract from selectionA
: (De)Select allRMB
: Deselect allI
: Invert selectionX
: Remove selectedH
: Toggle Help panelESC
: Exit
Circle Select
Select points using circle selection.
LMB+drag
: Draw selectionSHIFT+LMB+drag
: Add to selectionCTRL+LMB+drag
: Subtract from selection[
and]
: Adjust radiusA
: (De)Select allRMB
: Deselect allI
: Invert selectionX
: Remove selected pointsH
: Toggle Help panelESC
: Exit
Gradient Select
Select points using gradient selection.
LMB+drag
: Draw selectionSHIFT+LMB+drag
: Add to selectionCTRL+LMB+drag
: Subtract from selectionC
: toggle constrain to vertical and horizontal axesA
: (De)Select allRMB
: Deselect allI
: Invert selectionX
: Remove selected pointsH
: Toggle Help panelESC
: 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.
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 selectionB
: Toggle Ignore Backfacing (for mesh vertices selection)M
: Toggle Merge Mesh Vertices (disabled if selection exists)RMB
: Cancel current polygon / Cancel tweak if activeF
: Make polygon from placed and/or selected / Make quad from single selected mesh vertex in corner and mouse locationX
: Delete selected mesh verticesTAB
: Toggle Mesh Edit modeCTRL(+SHIFT)+Z
: Undo(Redo) mesh edits only (Toggle Mesh Edit mode resets history)CTRL+S
: Save the current Blender fileH
: Toggle Help panelESC
: Exit
Plane
Make quad plane rotated to fit selected points.
LMB(+drag)
: Select pointsCTRL+LMB(+drag)
: Deselect pointsCTRL+SHIFT+LMB(+drag)
: Rotate planeRMB
: Cancel current planeF
: Make planeN
: Make plane as new mesh objectD
: Toggle using depth buffer for point selectionTAB
: Toggle Mesh Edit modeCTRL(+SHIFT)+Z
: Undo(Redo) (Mesh Edit mode resets history)CTRL+S
: Save the current Blender fileH
: Toggle Help panelESC
: 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 freelyCTRL+SHIFT+LMB
: Tweak last cube vertices and snap to pointsRMB
: Cancel current cubeD
: Toggle using depth buffer for point selectionTAB
: Toggle Mesh Edit modeCTRL(+SHIFT)+Z
: Undo(Redo) (Mesh Edit mode resets history)CTRL+S
: Save the current Blender fileH
: Toggle Help panelESC
: 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.
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
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 asDisplay > Points > Percentage
, but modifies points directly.Reduce
- Reduce point cloud to exact number points. Same asSlice
, but allows you to set target number of points.
Remove Duplicates
Remove points by minimal distance between them. Operates on transformed point locations in world coordinates.
Poisson Disk Elimination
Downsample points by removing points that are within set radius from other points.
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.
Crop
Remove points outside or inside of bounding box of a mesh object.
Boolean
Boolean intersect or exclude points with a mesh object.
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.
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.
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.
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 By Scalar Value
Split points by integer scalar field. Useful to split classified points separate PCV instance per class.
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
.
Join
Join selected PCV instances to one.
Apply Shader Effects
Apply shader Display > Effects
to points.
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.
Add Noise
Apply Random
or Turbulence
noise to point positions.
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.
DBSCAN Clustering
Group local point cloud clusters together and add group indices as a scalar field.
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
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
.
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
.
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
Remove Color
Select points by color sampled from viewport or by numeric values. Selected points can be removed or split to new PCV instance.
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.
Clip Colors
Clip color values to be between 0.0-1.0.
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 Alphas
Add alpha from scalar value or constant.
Add Colors From Spherical Harmonics
Compute colors from first level of Spherical Harmonics in 3D Gaussian Splatting files.
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.
Project Image From Camera
Project colors from image on points. Perspective and Ortho cameras are supported.
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
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.
Blur Scalar
"Blur" scalar field.
Posterize Scalar
Posterize scalar field. The result is the same like using Display > Scalar Field > Posterize
, but it is aplied directly on values.
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.
Distance To Mesh
Add scalar field from point shortest distance to a mesh.
Colorize Scalar
Colorize points by scalar value, grayscale or heat map colors.
Scalar From Mesh Vertex Group
Create scalar field from mesh vertex group by point proximity.
Scalars From Mesh UV Map
Create scalar fields from mesh UV by point proximity.
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.
Curvature
Compute curvature on points from underlying surface and output to colors or scalar.
Add Scalar
Create scalar value on points from other point properties.
Mesh
Filter > Mesh
panel contains filters for mesh surface reconstruction from points.
Surface Reconstruction
Uses Open3D
- Poisson Surface Reconstruction
For correct results, points must have correct normals.
Screened Poisson
Uses MeshLab
- Surface Reconstruction: Screened Poisson
For correct results, points must have correct normals.
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.
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 otherGlobal Alpha
then 1.0, for best result enableDepth 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
runsHidden Point Removal
filter (requiresOpen3D
orSciPy
(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
andDepth 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.
Volume
Convert points to VDB file. Set path where VDB will be saved. Operator will then add volume using exported file to scene.
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 applyOctagon
- Flat polygon primitive, lighter meshes, texture gradient falloff, lack of third dimension makes result look too sparse, by default has doubled size to counter thatSphere
- UV sphere primitive, better shape representation, bad gradient falloff due to available surface material possibilitiesVolumetric 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.
Pointcloud
Experimental
Convert to native Blender Pointcloud object. Pointcloud object is unfinished Blender feature. It is only available in official alpha builds.
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 valueColor Attribute
- Use active color attributeUV Texture
- Generate colors from active image texture node in active material using active UV layoutVertex Group Monochromatic
- Use active vertex group, result will be shades of greyVertex 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.
Mesh Surface > Random
Generate points from single Mesh object using random sampling of mesh surface.
Uses Geometry Nodes in background for best performance.
Mesh Surface > Poisson
Generate points from single Mesh object using poisson sampling of mesh surface.
Uses Geometry Nodes in background for best performance.
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.
Mesh Volume
Generate points from single Mesh object using random sampling of mesh volume.
Uses Geometry Nodes in background for best performance.
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.
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.
Scene > Lidar Simulation
Project points on whole scene in spherical coords around active object origin, colorize with Cycles equirectangular render rendered from origin.
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.
Render
Generate points from existing rendered multilayer EXR, Camera used for render and position
pass or depth
pass present in multilayer EXR.
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)
orfloat32 (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.
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 withNormalX
,NormalY
andNormalZ
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.
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.
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 containsintensity
, active scalar field, constant value 1.
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.
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 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. IfShuffle Joined Points
is enabled, points will be shuffled per frame.
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 Generate
Generate points for each frame in timeline with settings set in Generate
panel.
Batch Export
Export each frame to file using setting from Export
panel.
Preferences
Tab Name
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
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
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
Default options for load operator: 3d Viewport sidebar > PCV tab
and click Choose File .
Defaults when using "Add > Point Cloud Visualizer" helper operator
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
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 endedPercentage
- Low resolution point cloud percentage, used until point count exceeds MaximumMaximum (Millions)
- Low resolution point cloud maximum number of points, used when point count exceeds PercentageAuto 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
Tools
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
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 savedAuto Optimize
: remove packed datablocks on blend file save if container object is not found in scene
Utilities
Reset PCV On Active Object
- Reset all PCV properties stored on active objectReset PCV Preferences
- Reset all PCV Preferences
Experimental
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.
draw(data=None, *, name=None, matrix=None, is_debug=False, )
- Draw data with pcv
- data: dict with
vs
,ns
,cs
andscalars
keys (all optional exceptvs
) with numpy arrays as values, all of them must have the same length, shapes of arrays must be:vs
andns
(n, 3),cs
(n, 4) or (n, 3) andscalars
must be a structured array (n, ). ifNone
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 tomatrix_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)
- data: dict with
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
- it is the same as
erase(*, name=None, )
- Stop drawing and unload data
- if name is
None
,pcv_debug
name will be used, if such object is found and isEMPTY
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
- if name is
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, )
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, LTS releses are recommended, so currently 3.6 or 4.2
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
orSlice
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.