Color modes¶
Point-cloud color mode is global — it applies to every loaded cloud at once. Change it from the Color by dropdown in the Display panel (lower-right corner of the viewer).
Per-cloud color modes¶
| Mode | What it shows | When to use |
|---|---|---|
| Per-scan color | Each cloud drawn flat in its identifier swatch color (click a scan's color dot in the Scans panel to change it) | Default. Best at-a-glance read of which points came from which scanner. |
| Z Axis (Height) | Color by Z-axis position via colormap | Good for any vertical structure — plant scans, terrain. |
| X Axis | Color by X position | Inspecting horizontal stripes or registration along X. Not offered for octree-streamed clouds. |
| Y Axis | Color by Y position | Same, for Y. Not offered for octree-streamed clouds. |
| Intensity | Color by LiDAR intensity scalar | Distinguishing reflective leaves from less reflective wood (species-dependent). |
| RGB | Original per-point color from the file | Scans co-registered with photography. |
| Solid Color | A single flat color applied to every cloud | When you want the data out of the way to focus on a mesh or skeleton overlay. |
| Scalar Field | Color by any custom per-point scalar carried in the source file | Imported clouds with extra columns — reflectance, deviation, timestamp, target index, custom metrics. |
When a scalar mode is active, a colormap selector becomes available in the right panel: viridis (default), plasma, inferno, magma, turbo, jet, coolwarm, grayscale.
The color mode is global — it applies to every cloud at once, not per scan. (Per-scan color is the exception: it draws each cloud in its own swatch color.)
Scalar fields on imported clouds¶
Any extra numeric columns in an imported XYZ/TXT/CSV file — beyond the
X/Y/Z, RGB, and intensity that Phytograph maps to dedicated channels —
are carried through as scalar fields and listed under a Scalar
fields group in the Color by dropdown. This works for both small
clouds and large octree-streamed clouds (the columns travel into the
octree as extra attributes), so a terrestrial-scanner export with
Reflectance[dB], Deviation[], Target Index[], etc. exposes each as
a selectable, color-mappable field.
For LAS/LAZ imports this covers two kinds of column:
- The file's extra dimensions (e.g.
Amplitude,Reflectance,Deviation), carried under their native names. - The standard LAS per-point fields that hold real data —
classification,point_source_id,scan_angle,user_data,scanner_channel, and the per-pulse return fields. A standard field is only listed when it actually varies across the cloud; an all-zero or constant column (common for fields a scanner never populated) is skipped so the picker stays uncluttered. X/Y/Z, RGB, and intensity are always excluded here because they already have dedicated color modes.
Field names come from the file's header row when present (so
Reflectance[dB] shows as Reflectance [dB]); files without a header
fall back to positional names. The selected field's value range drives
the colorbar, and the Min/Max inputs let you window it.
Note
Clouds imported before their attributes were carried (XYZ/CSV extras: v0.3.4; LAS/LAZ standard fields: v0.16.0) won't show those columns until re-imported — cached octrees built earlier don't carry the extra attributes.
Scalar fields on synthetic-scan clouds¶
A synthetic scan generates per-hit scalars (distance, timestamp, return index/count, pulse deviation, sub-rays hit, reflectance, organ type) the same way an imported cloud carries its columns. Which of these end up in the Color by list is governed by Retained per-hit fields in the Synthetic Scan Options dialog — only the fields you check are kept. Unlike imported clouds (where a constant column is hidden), a retained field is listed even when it's constant across the cloud, so a single-static-sweep timestamp or a single-return scan's return index/count still appears. Intensity always has its own dedicated Intensity mode and isn't part of this selection.
Categorical (classification) attributes¶
Some scalar attributes are categorical — integer class labels rather than a continuous measurement. The Ground Class attribute produced by Segment ground points (1 = ground, 2 = non-ground) is the first of these. These render with discrete per-class colours and a small class legend (ground in brown, non-ground in green) instead of a continuous colormap and colorbar, so each class reads as a distinct category rather than a position along a ramp.
The Wood Class attribute produced by Separate leaf and wood (1 = wood, 2 = leaf) is categorical the same way: wood renders in dark brown and leaf in green, each with its own legend entry.
The tree_instance attribute produced by
Segment individual trees (0 = unassigned,
1..N = individual trees) is also categorical, but its class count isn't fixed:
each tree's colour is generated on the fly (a perceptually-spaced hue rotation)
and the legend lists Tree 1, Tree 2, …, with unassigned points in grey.
The Organ Type attribute carried by a synthetic scan of a generated plant (when organ type is checked under Retained per-hit fields) is categorical too: each hit is labelled with the organ it struck — Leaf, Petiole, Shoot, Peduncle, or Fruit — and renders with a distinct colour per organ and a legend. Hits on imported (non-plant) geometry carry no organ data and read as Unknown (grey).
You can also mark a column as categorical yourself in the import wizard — set its role to Label (rather than Scalar) for a column that holds class labels (a custom classification, a region id, …). It then colours with the same discrete per-class scheme (Class 0, Class 1, …) and legend instead of a continuous gradient.
Per-mesh color modes¶
| Mode | What it shows | When to use |
|---|---|---|
| Solid Color | Flat color | Default. |
| Inclination | Per-triangle zenith of the face normal, folded to 0–90° | Reading surface tilt — flat vs. steep facets on a reconstruction. |
| Azimuth | Per-triangle compass bearing of the face normal, 0–360° | Seeing which way facets face. |
| Triangle Area | Per-triangle surface area | Spotting over-large bridging triangles or uneven tessellation. |
| Source Scan | Each triangle in the color of the scan it came from (Helios multi-scan meshes) | Seeing scan coverage / overlap on a Helios reconstruction. |
| Layers | One of a DEM surface's stored scalar layers — elevation, density, intensity, hillshade, slope, or aspect | Reading a generated DTM/DSM/CHM. |
Meshes render per-vertex colors when the file carries them, but that is automatic — it isn't a selectable mode.
These modes are set from the Color by control that expands from a mesh's row in the Meshes panel (click the row's chevron). The control appears for triangulated meshes and DEM surfaces; fitted crowns don't have it. They share the scalar colormap selector and bottom-right colorbar. Source Scan is offered there too for Helios meshes built from more than one scan; it uses each scan's swatch color and shows a per-scan legend instead of a colorbar.
Skeleton coloring¶
Skeletons have a single toggle rather than a mode list: Color by branch order, in the Skeletons panel.
| State | What it shows |
|---|---|
| On | Branch order, as an 8-step ramp indexed from the tips: order 1 red → orange → yellow → green → cyan → blue → violet → order 8+ (trunk) pink. Orders above 8 clamp to pink. |
| Off (default) | The skeleton's flat color (amber by default), which you can change per skeleton. |
QSM color modes¶
A QSM is colored from the Color by dropdown at the bottom of the QSM results panel. It applies to every QSM in the scene.
| Mode | What it shows | When to use |
|---|---|---|
| Shoot rank | Color by branching order (trunk = 0, scaffolds = 1, …) | Default. Reading structure — which axis is the trunk vs. a scaffold. |
| Shoot id | A distinct color per shoot, so each continuous axis reads as one object | Seeing the shoots themselves, independent of rank. |
The Shoot rank palette is fixed and chosen so adjacent ranks stay clearly distinguishable:
| Rank | Color |
|---|---|
| 0 (trunk) | Wood tan |
| 1 (scaffolds) | Red-orange |
| 2 | Blue |
| 3 | Green |
| 4 | Violet |
| 5+ | Pink |
In Shoot id mode each shoot's color comes from a perceptually-spaced hue rotation, so neighbouring shoots don't collide. In either mode, clicking a shoot in the results list highlights that whole axis and dims the rest.
Leaf area density voxels¶
A leaf area density result is a grid of voxel cells, each colored by its LAD value (m²/m³) through the shared scalar colormap. A colorbar labelled LAD [m²/m³] shows the range.
| Control | What it does |
|---|---|
| Colormap | Same palette set as scalar fields (viridis default). Shared with the other scalar colorbars. |
| Opacity | Cell translucency, so you can see through the grid into the canopy. |
| Hide empty voxels | On by default — voxels with no returns (LAD ≤ 0) are hidden so only foliage-bearing cells draw. Turn off to see the full grid faintly. |
Hover a voxel to read its exact LAD, G(θ), and hit count.
Reading scalar colormaps¶
The default colormap (viridis) goes:
- Deep purple / forest — lowest value
- Teal / blue-green — mid-low
- Lime / yellow-green — mid-high
- Bright yellow — highest
Other colormaps preserve order but use different palettes. Viridis is the project default because it's perceptually uniform and prints well in greyscale — useful for figures.