Skip to content

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.