Overview
Prerequisites and Preparation
First you need a dataset that is split to individual files in a single directory. If your dataset is one single big file, you need to split it first with PCV (Tiles mode) → Tools → Split - add an empty object to scene, then go to 3d Viewport sidebar N, go to Point Cloud Visualizer tab, on top switch Mode to Tiles, Tools panel becomes accessible. See Split for more details how to use Split tools. By default the empty object will become container for Tiles instance after splitting.
If dataset is already split to multiple files you can use it as it is, or split it even further to smaller parts if overall performance is not smooth enough. Large tiles in terms of total number of points in file are slower to work with. By large is meant ~20 million points and more per file. In this case same splitting tools can be used and run in batch on whole directory of files, see Batch Split for details.
General Use
Add an Empty type object to scene (or use any other Blender object type that exists in scene), then go to 3d Viewport sidebar N, go to Point Cloud Visualizer tab, on top switch Mode to Tiles and click Select Directory , file browser will open, navigate to directory with tiles (dataset split to a grid of
LAS/LAZ/E57 files) and click Select Directory button. Directory contents will be read, correct file types selected and list of tiles will be populated. Then click Draw button.
Add Menu Helper Operator
Faster and preferable way of adding PCV Tiles instance to scene is to use helper operator from Add menu: 3d Viewport header → Add or Shift+A anywhere in viewport and choose PCV: Tiles menu item. File browser will open, navigate to directory with tiles (dataset split to a grid of LAS/LAZ/E57 files), set options if needed (defaults will be set from preferences), and click Add PCV: Tiles button. Correct files will be selected from directory, tiles list populated and tiles drawn in viewport.

Main Panel and Tile List
When source directory is set and contents scanned for files, tile list is populated. Each row represent one file. To rescan directory for files, click at the end of directory row.
means tile is not loaded,
indicates that tile linked file has been loaded.
is selection status,
marks selected tile.
is tile show status, if enabled, tile contents will be drawn in viewport, if not
only preview data or lowest LOD level will be used.
means tile is enabled,
means tile is disabled and will not be loaded and processed.
Under list, there are two selection modal operators, Pointer select and Box select
, deselect operator
and
menu with utility operators.
If you select list item directly clicking it so it is highlighted, item is considered selected and active, if you click its button, it is considered selected. It makes difference in a few utility operators.
Draw and Erase are main tile set controls, one will start processing, other will stop it. Frame TileSet will move viewport camera to frame all tiles, set viewport clip start and end to preferable range and will adjust LOD Distance of tile set according to overall dimensions.

Pointer Select
Box Select
Tile List Menu
Collection of utility operators working with tile list. Some can be run at runtime when tile set is loaded, some cannot.
First section contains some more framing operators. Second selection manipulation and select by tile status flags. Third section will set flags on selected tiles. Fourth section operators remove tile list items by selection or flags. Fifth exports (copies) tile files to a another directory. And last will open source directory in system file browser.
TileSet
Tile set main settings, these have direct influence on performance.
Type switches between Sequential, Parallel and Threaded. Sequential loads files in Blender Main thread, this is option for safety and stability, it is still possible to use Blender while files are loading, but interface will be laggy until visible tiles files finish loading. Parallel will load and process files in parallel, Blender interface will be locked until all is finished, but it is the fastest way to load data. Threaded will load multiple files in other threads, interface interaction will be much smoother, files will be all loaded sooner, but Blender may become unstable, it is uncertain if you will run into problems or not. Blender is not built to be thread safe, see here for more info from Blender documentation or Troubleshooting section. The best is to leave at Sequential for first load, then if dataset fits fully in system memory when loaded, switch to Parallel so next time when blend file is opened all is loaded sooner. But you may also find that Threaded in your use case is perfectly stable.
Pause and Resume will pause or resume loading of new tile files, tiles that already started loading will finish first.
LOD enables generating of Level Of Detail levels upon loading, if disabled, only a preview level is generated at 1% of points to be used while navigating or when tile Show flag is disabled. LOD Distance controls how levels are distributed. Imagine line at the center of 3D viewport starting at camera location, pointing in camera direction of LOD Distance length, divided in LOD Levels segments with level number assigned starting at LOD Levels down to zero at far end. If tile is in camera view and bounding box center falls into any segment, til will draw assigned level, if it is further that that, zero level is used.
Unload Hidden can help managing memory by unloading tiles that are not in view, unloading can happen after some time is elapsed or immediately, depends on Preferences settings. But unless you running out of system memory (RAM) better to leave disabled.
Optimize Data controls what is loaded from source files, see next section.
Preset menu in panel header will save all settings in all subpanels into a preset.

TileSet → Optimize Data
Controls what is loaded from source files, if disabled, all available is loaded, but this will have serious impact on system memory usage. For example on screenshot there are settings that will load all points, but only keep colors and intensity scalar. Other data are not stored and point coordinates will be stored as single precision floats.
Max Points- limit maximum number of points loaded, in millionsKeep Double Precision- keep point positions in float64 as loaded from files, for drawing on screen, single precision - float32 is used, there is not need to keep double precision in memory, takes twice as much spaceKeep Colors- disable if dataset has no colors or colors are stored, but all zerosKeep Normals- it is very probable your dataset has no normals anyway, and so far normals are not used for anything yetKeep Scalars- disable to not store scalar values at all, enable to keep all or select fields if its name matches any of comma separated strings in field next to it

TileSet → States
Define and store tile set states. State includes tile status and selection flags and you can quickly switch between stored states. Ideal for datasets that cannot fit into memory, or to improve performance of large dataset if you need to focus to just one section of it. Using selection modal tools and
select tiles and set flags on them as needed, click
to store state.
will update already stored state with current.
To switch between stored states, click button,
means current state of tiles is identical to stored state.

States list menu with several options
Apply Selected State- same function asbutton
Check State Identity- enable or disable identity indication withand
, disable if ui is not as responsive as it should be
Check Identity Including Selection- enable or disable selection comparisonApply Selection From State- restore selection flag on tiles when restoring state or notClear Stored States- remove all stored

TileSet → Advanced
TileSet Type: Sequential
Load Queue- Controls how many tiles at most are loaded at the same time, if set to zero, all tiles are loaded without a break, but interface will be locked until everything is loaded
TileSet Type: Parallel
CPU Count- Controls how many CPU cores are utilized during loading, leave at zero for maxmimum, set to lower value to leave some cores for other tasks (not exactly per core). If set to higher value than system offers, maximum is usedLoad Everything On Draw- Load all enabled tiles even those not in view, disabled when Unload Hidden is enabled
TileSet Type: Threaded
Use Multithreading- Start multiple background threads to load files concurrently, disable to use one background thread to load one file at a time. While you will get tiles loaded faster, Blender interface will be less responsive because more work need to be done in Main thread where Blender runs (e.g. passing data to gpu). It has positive effect only when individual tiles have mostly higher point count, 500k and more. Please note, this is not multithreading as in multiprocessing, multiple threads are started, but python is processing only one thread at a time, some operations will happen concurrently, like disk I/O, but point processing will not. Some deeper changes need to be made to Blender first to support multiprocessing so even data can be processed in parallel.Threads- How many threads will be running when Multithreading is enabled, value 0 will use number of logical CPUs
TileSet Type: Any
Custom Shift/Scale lets you set specific values for shift and scale, Reset will remove custom values and will use automatic. If this is used, loaded tileset will be reloaded.
LOD Level Percentages lets you change distribution of points in levels for current LOD Levels number.
- Set linear distribution
- Set cubic distribution
- Set exponential distribution
- Validate percentages, i.e. make sure they are sorted in correct order, this can shuffle your values
- Reset to default (cubic)
Preview Count - Force number of points for preview level, lowest LOD level if LOD is enabled, or for preview data
GPU Queue - Because "uploading" of data to GPU can happen only in Blender main thread, to minimize locking of interface, only a portion of tiles are "uploaded" at a time, this controls how many tiles are "uploaded" at once
Preferences
To open Tiles preferences, go to main Blender menu → Edit → Preferences.., choose Add-ons section from left, find Point Cloud Visualizer, expand with and scroll down to Tiles section
Engine

Budget (GB)- Total budget for all tile sets in scene in GB of gpu memory, different shaders has different requirements for point data that need to be uploaded in gpu memory, thus memory is used instead of point counts. Set it at least 25% less then available on gpu hardware to leave space for other processes, on macOS arm64 architecture with unified memory set it to 25% or less of total ram. Please note, memory is not checked from hardware, but estimated from data sent to gpuView Refresh- Tile visibility check rateContinuous Checking- Check for tile visibility only when idle (i.e. not navigating) (default, disabled state) or check continuously on every viewport change (enabled state). While continuous check will start tile loading earlier, it may also start tiles that will not be needed in the end and once file loading starts, it must complete, loading cannot be stopped from outside. Also enabling this is not recommended if Fast Navigation is disabled orSequentialorParallelTileSet type is usedUse Fast Navigation- Draw preview level resolution while navigating viewport, if disabled, current view is drawn while navigating, will refresh when you stop navigatingNavigation Delay- Delay drawing of high resolution point cloud to viewport after navigation endedUse Unload Timeout- Unload tile point data when tile is not visible (will have effect only if TileSet > Unload Hidden is enabled) after timeout has passed or if timeout is disabled, unload will happen immediately. This affects only automatic processes based on viewport, disabling or hiding tile has immediate effectUnload Timeout- Unload timeoutUnload On Hide- Unload tiles if container object is hidden from viewport (will have effect only if TileSet > Unload Hidden is enabled)Monitor System Memory- Monitor system memory while loading new data, pause loading when limit is reached to prevent freeze or crashMemory Limit- When memory is filled over limit, loading of new tiles will pause. Checks system total memory, not only portion used by tiles dataShow Statistics- Show statistics for all tile sets in viewport lower left corner
Memory Limit
If Memory Limit is reached, loading of new files is paused and message displayed in main panel and Stats. It checks total system memory minus total free memory, not just memory used by Tiles itself.


Add Helper Defaults
Lets you set defaults for Add Helper Operator, so each time it is run, these will be already set without doing anything

Tiles Theme
Here you can change colors and sizes of ui elements to fit your interface theme
Stats
Statistics for all tile sets in scene in viewport lower left corner. Shows how much of Budget and GPU memory (this is only a estimate based on what Tiles sends there) is used for current view, system memory usage, number of points displayed/loaded/total, tiles loaded/total and length of load queue and gpu queue.

Tips
3D Viewport performance tips
- make sure total point count is somewhere between 5-10 million points per file (this is just an estimate, maybe more or less on your system), if not, split further with Split tools using Batch Split to process all files in directory
- you can manually adjust
TileSet → LOD Distanceto be shorter, so only closest tiles are drawn with higher LOD level, with that you can disableto prevent it being changed back to automatic if Frame TileSet is used
- disable tiles you don't need to see in tiles list and use States to quickly change between stored states of tiles list
- let all tiles preload to system memory at start and have
Unload Hiddendisabled, so files are not loaded while navigating viewport, please note that by default files will be loaded until total system memory is 80% full (can be changed in preferences), then loading will pause - use Optimize Data to limit amount of data loaded, if dataset has colors but they are all zeros, disable colors, if dataset has scalars, but you don't need them, disable all, or keep select scalar fields you need, these options can have huge impact on system memory usage and overall performance
- have and use only one 3D Viewport, while it is possible to use multiple viewports and tiles LOD levels are calculated for all viewports merged, it will lead to more points being displayed then for just one and will slow down overall performance
Other tips
- add Pointer select
and Box select
operators to
Quick FavouritesQ menu, right click button and chooseAdd to Quick Favouritesto have quick access to tile selecting tools, both can also enable/disable tiles with a key shortcut while they are running, it is faster than usingTileSetmenu - automatic scalar range is set when first tile data is available, it may not be the same in all tiles, best to use selection and fit to selection
if dataset is merged from various sources and range differs from tile to tile or fit to all loaded with
when more tiles finished loading
Troubleshooting
Notes on "Threaded" TileSet type
If you experience rare random Blender crash while using TileSet → Type: Threaded, it may be caused by another installed and enabled addon that is using gpu module and custom shaders (i.e. addon that draws on screen anything with custom shaders or use shaders for gpu accelerated computing) and it does not clear GPUShader objects from memory properly once finished with them. This happens only if custom shaders are used, builtin shaders that comes with Blender, which are used the most by addon developers, are not affected by this since they are never cleared from memory.
Because Threaded Tiles are using threads to do memory heavy processing, Python may decide to run garbage collecting (clearing out no longer used objects from memory) while running other thread than main thread and when that happens, such shader object is cleared when Blender does not expect that and because shader object is not Python only object but interface to Blender internals, Blender will crash. In that case, disable all addons you don't absolutely need for work. If you want to report that to me, please include list of enabled addons.
PCV itself is immune to this, all its custom shaders are cleared immediately after no longer in use in main thread. TileSet → Type: Sequential is not using threads at all and Parallel is using them in Blender supported way, will not cause any problems of this sort.
Similar kind of a problem may also be with other parts of Blender Python API that are closer to Blender internals, but I don't know about that yet. If you encounter something like this, please let me know here, Message Creator button.
Notes on "E57" files
Some software writes E57 files incorrectly without bounding box (min/max positions) and/or scan pose (translation/rotation) in file header.
If you use E57 files and during loading engine alerts you with E57 element path well formed but not defined (E57_ERROR_PATH_UNDEFINED) library errors, you can try first enable Patch 'pye57' library from PCV preferences, that will fix missing pose information.
Missing bounding box is not yet handled (it would require reading full file and compute min and max instead of just values in header) and your only options are:
- Use LAS/LAZ files exported from source software or somehow force it to write full header info
- Open and save E57 files in software that will write correct header info, e.g. CloudCompare
- Use
Tools → Splitwith settingsAll At Once,Cuboid, set cuboid dimensions much larger than source file is so file is not split, output format E57 (or LAS/LAZ while at it) and ignore tool warnings that file has not been split