What a PLY file actually holds
PLY — the Stanford polygon format — is the simplest container in common use for 3D geometry. A plain-text header names a sequence of elements, each a fixed count of records made of named properties, and the records follow verbatim: as text, or as raw little- or big-endian binary. There is no compression, no spatial index and no checksum.
That simplicity is why it is everywhere. It is what photogrammetry pipelines write, what handheld and structured-light scanners export, what CloudCompare reaches for when it needs a lossless intermediate, and what 3D Gaussian splatting settled on as its distribution format. If you have been handed a 3D capture and it is not LAS, E57 or OBJ, it is very often PLY.
The thing PLY leaves out, and what it costs
The specification defines the header grammar and then stops. It never says what a property means. There is no registry of names, no units, no declared ranges and no coordinate system. x, y and z are universal by convention alone — and nothing else is.
So colour arrives as red, green and blue from most tools, as r, g and b from some, and as diffuse_red from anything descended from the original Stanford code. CloudCompare prefixes every attribute it imports with scalar_, so a LAS file round-tripped through it arrives with its intensity under scalar_Intensity. All of those are matched here.
Ranges are unstated too, and that is the one that renders a file wrong rather than merely uncoloured. A red property may be a uchar running 0–255, a ushort running 0–65535, or a float running 0–1 — and the header says only which type it is. Guess the scale wrong and the file comes out almost black or completely white, with no error anywhere. This viewer measures the range the file actually uses instead of trusting the type, which is the only way to get all three right.
Because every one of those is a guess, the viewer shows its work. The "What is in this file" panel lists every element, every vertex property, its storage type, and what the viewer mapped it to — including the properties it ignored. When a cloud looks wrong, that table is usually the answer.
Gaussian splats
.ply has become the de-facto container for 3D Gaussian splatting, and a splat file is not an ordinary point cloud wearing the same extension. Colour is stored as the degree-0 term of a spherical-harmonic expansion, in f_dc_0, f_dc_1 and f_dc_2, with coefficients centred on zero and running negative. A general PLY viewer reads those as float colour channels, clamps the negatives away, and shows you a mostly black cloud.
This one recognises the layout and converts the DC term back to a colour the way the training convention defines it, so a splat opens looking like the scene it was trained on. The panel reports how many harmonic bands the file carries — which is the main thing separating a 200 MB export from a gigabyte one — alongside the opacity, scale and rotation properties it found.
What you get is the splat's centres drawn as points, not the splatted render. That is the right tool for checking coverage, extent, alignment and whether the colour survived a conversion; it shows where the splat sits and what it covers, not how it renders.
Meshes
PLY began as a mesh format — the Stanford bunny is a PLY file — and a great many .ply files in the wild carry a face element as well as vertices. Those open here, drawn as their vertices: the corners of the surface rather than the shaded surface itself. The panel says plainly that this is what you are seeing, and reports the face count.
For a scanned mesh that is usually the question you had anyway — did the capture cover the whole object, is the scale right, did the vertex colours survive the export, where are the holes. Drawing vertices also means a 40-million-triangle scan opens in a browser tab in seconds, which a shaded surface at that size would not.
What this viewer does not do
- No editing, cropping, decimation or filtering.
- No shaded surface rendering, and no normals-based lighting.
- No measurement between points — that lives in the E57 viewer.
- No PLY export — this reads PLY, it does not write it.
That list is deliberate. Reading and drawing is what lets this open a multi-gigabyte file in a browser tab in seconds, with no install and no upload. This is for the moment you have a file, a browser, and one question about it.
Once a point cloud is in LAS or LAZ, the rest of the toolbox applies: view it in 3D with full statistics, label ground, vegetation and buildings automatically, turn it into a DSM or DTM, or read its header and coordinate system.
Reading a large PLY without running out of memory
A binary PLY whose vertex properties are all scalar has a fixed record size, which makes the body an array: record N sits at a computable offset. That is what lets this read a 3 GB file in four-megabyte slices, keeping an even sample across the whole file rather than the first two million points, without ever holding more than a few megabytes of it at once.
ASCII PLY has no such structure — there is no way to find the tenth record except by reading the nine before it — so those are streamed through from the start. They are slower for the same point count, which is the price of a format you can open in a text editor.