0+00Platform · PGC Core

One engine under every app.

Surveyor, Collector, CAD, Puck and Pg-GPS are built on PGC Core, the native C++ engine we write ourselves. Each app takes the parts it needs, so a coordinate system, a drawing and the record of your work mean the same thing in every one of them.

SurveyorLāna'i City · 13,060,946,265 points · real time
Native core
C++3,035 source files and 197 GPU shaders
Graphics
Vulkan 1.3No CUDA, no vendor toolkit
Coordinate systems
7,329With GEOID18 and the exact US survey foot
Streaming
16threadsLoading what the view needs, in priority order

1+00One core, five apps

What each app takes from the engine.

The apps share one engine rather than five, so a scan, a drawing and a coordinate system are handled the same way everywhere, and an improvement to the engine reaches every app that uses that part.

  • Surveyor

    The whole engine, with the CAD kernel inside, so traced linework lands in a real drawing as one undoable step.

  • Collector

    The whole engine and its scanner interface, writing the same project and scan files Surveyor opens.

  • CAD

    The CAD kernel: drawing, COGO, surfaces, coordinate systems, the journal and the numerics, with the engine's Vulkan viewport and plugin runtime.

  • Puck

    The CAD kernel without the GPU, for the drawing kept with each sheet, with PDFium reading the PDF itself.

  • Pg-GPS

    The engine's Vulkan device for its own GNSS solver, with a CPU fallback.

PGC Core

  • Formats and I/O
  • Octree and streaming
  • GPU renderer
  • Compute
  • CAD kernel and COGO
  • Coordinates and numerics
  • Journal and projects
  • Commands and plugins

CAD and Puck use the CAD kernel, not the point-cloud renderer; point clouds live in Surveyor and Collector. The Launcher installs, licenses and opens the apps and needs no engine of its own.

2+00Out of core

Point clouds bigger than your graphics card.

A scan opens by its index, not its points. As you move, the parts in view stream from disk; the graphics card keeps the most useful parts in its memory, and the parts it lets go wait in RAM to come back without another disk read.

  • Loaded in priority order

    Sixteen loader threads fetch the nodes the view needs first, on a dedicated transfer queue when the graphics card has one.

  • Memory used deliberately

    The engine fills up to 75 % of the card's memory budget, and frees space from 85 % until it is back under 80 %, at most 64 tiles a frame.

  • Uploads that wait their turn

    Each frame uploads at most 512 tiles or 512 MB; the rest queue for the next frame instead of piling into this one.

  • A point budget per frame

    Surveyor draws within a budget of 24 million points a frame by default, in a range from 0.25 to 80 million.

2+50Measured

Thirteen billion points, in one sitting.

USGS 3DEP lidar of Lāna'i is public, so anyone can repeat this: 1,569 LAZ tiles holding 13,060,946,265 points, converted by the same converter Surveyor uses into a single .pgc2, without a single GPU error.

ConversionPointsTimeRate
Lāna'i, USGS 3DEP: 1,569 LAZ tiles into one .pgc2, without normals 13,060,946,265 84 min 2.58 M/s
The same, with normals, planarity and linearity computed on the GPU 13,060,946,265 4 h 31 min 0.80 M/s
Trimble X9 airfield scan, LAS to .pgc2 with normals, four runs 317,660,485 5:21 – 5:49 0.91 – 0.99 M/s
Trimble X9 main area, LAS to .pgc2 with normals, four runs 392,986,076 6:33 – 7:00 0.94 – 1.00 M/s

Measured on a Dell PowerEdge R740xd: two Intel Xeon Gold 6132 processors (56 threads), 766 GiB of RAM, an NVIDIA RTX A4000 with 16 GB, and NVMe storage. Lāna'i in July 2026, the X9 scans in August 2026; times from the converter's own timing log.

3+00GPU-driven

The graphics card makes the drawing decisions.

On the GPU, a compute pass culls the octree against the view and writes its own draw commands. Points are rasterised by a compute shader rather than the fixed graphics pipeline, and tile data is addressed directly on the GPU.

  • Plain Vulkan 1.3, no CUDA

    The engine needs Vulkan 1.3 with buffer device addresses and 64-bit shader floats. There is no CUDA anywhere in it. We test on NVIDIA RTX graphics.

  • Compute alongside drawing

    Compute work runs on its own GPU queue when the graphics card offers one, and the scheduler gives it a time budget each frame, 2 ms by default, so drawing carries on beside it.

  • One renderer, every scan

    Surveyor and Collector draw with the same renderer, so a scan looks the same in the field as it does in the office.

4+00Survey-grade numbers

Built around survey coordinates.

Precision is kept where the record is, and the graphics card gets only what it needs to draw.

  • Double precision where it counts

    Survey coordinates stay in 64-bit doubles. The graphics card only sees small offsets from a local origin, and every export rebuilds each point in double precision.

  • The exact US survey foot

    1200/3937 m, carried exactly, with the units stored inside every scan file.

  • 7,329 coordinate systems

    The EPSG catalog installs with Surveyor, with PROJ and NOAA's GEOID18 grid for orthometric heights.

  • Our own math for linework and COGO

    Linework and COGO run on our own math library: accurate to within one unit in the last place, checked against a 106-bit reference, and free of fused multiply-add shortcuts.

5+00The journal

A record of every step.

Every processing decision in a project is an entry in an append-only journal: classification, corrections, traces, surfaces, survey points, layers, registration, exports and CAD's saves. The entries link into a provenance graph, so "what produced this deliverable?" has an answer.

  • Undo that survives a crash

    Undo works over the same crash-safe record, so a restart doesn't take your history with it.

  • Recovery when a project opens

    Interrupted operations are marked abandoned, stray files are set aside and completed work is replayed.

  • AI on the record

    When AI helps in CAD or in Surveyor's drawing, the journal records the model, a fingerprint of the prompt, its confidence and who approved the change.

6+00By the numbers

Built in-house, top to bottom.

Engine source files
3,035C and C++, in 68 modules
GPU shaders
197143 of them compute
Test files
556Contract tests on the engine's behaviour
Surveyor commands
684Every action addressable by name

Counted in the source tree on 17 October 2026.