← All guides
GUIDE · 8 MIN READ

PLY File Explained: What It Is and How to Open One

What a PLY file is, the mesh, point-cloud and Gaussian splat kinds, how to open a PLY file, converting PLY to OBJ, and compressed formats like SOG and SPZ.

01

What is a PLY file?

A PLY file is a container for 3D data. The name stands for Polygon File Format, and it is also known as the Stanford Triangle Format. A file ending in .ply can hold a triangle mesh, a cloud of loose points, or, more recently, a 3D Gaussian splatting scene.

The format came out of the Stanford Computer Graphics Laboratory in the mid-1990s. According to the US Library of Congress format description, Greg Turk wrote the specification in 1994 while he was at Stanford, in work directed by Marc Levoy, and it was used for models made with a 3D laser scanner. The Library of Congress also notes that it could not find any later update to that specification, so the PLY file of today follows the same rules as the original.

That age explains both its strength and its main source of confusion. PLY is simple and flexible enough that almost any 3D program can write one, but the extension alone tells you very little about what is inside.

02

Inside a PLY file: header, elements and properties

Every PLY file starts with a short text header, even when the rest of the file is binary. You can open the first lines in any text editor. A typical header looks like this, one item per line:

  • ply, the marker that identifies the format
  • format ascii 1.0, or binary_little_endian 1.0, or binary_big_endian 1.0
  • comment lines, which programs ignore
  • element vertex 8, meaning that 8 items called vertex follow
  • property float x, property float y, property float z, the values stored for each vertex
  • element face 6 and property list uchar int vertex_index, six faces, each a list of vertex numbers
  • end_header, after which the data begins

Two ideas carry the whole format. An element is a kind of thing, such as a vertex or a face, with a count. A property is one named number stored for every item of that element, with a type such as float, uchar or int.

The data after the header is either ASCII, which is readable text, or binary. Paul Bourke's widely used reference describes ASCII as the easy way to get started and binary as the choice for compact storage and fast loading.

The important detail is that a file may declare any properties it likes. The format was designed so that older programs do not break when they meet properties they do not know; they may simply discard them. That is what later allowed Gaussian splatting to reuse PLY.

03

Three kinds of PLY file you will meet

Looking at the header tells you which kind you have.

  • Mesh PLY. It has vertex and face elements. Faces connect vertices into triangles or polygons, forming a surface. Vertices often carry colour (red, green, blue) or normals. 3D scanners and photogrammetry software produce these; COLMAP, for example, writes its meshes as PLY.
  • Point-cloud PLY. It has vertices but no faces, usually with x, y, z and often red, green, blue. Each point is a coloured dot with no size. COLMAP's dense point cloud, fused.ply, is one example.
  • Gaussian splatting PLY. It also has only a vertex element, but each entry carries many more properties: scale, rotation, opacity and a long list of colour coefficients. Each entry is a small soft blob, not a dot.

A quick test: if the header mentions face, it is a mesh. If it lists names such as f_dc_0, scale_0, rot_0 and opacity, it is a Gaussian splat. Otherwise it is most likely a plain point cloud.

04

What a Gaussian splatting PLY stores

The layout most tools follow comes from the reference implementation published with the original 3D Gaussian Splatting paper (Kerbl, Kopanas, Leimkühler and Drettakis, SIGGRAPH 2023). Its save function writes these properties for every splat, all as 32-bit floats:

  • x, y, z: the centre of the splat.
  • nx, ny, nz: normals. The reference code fills these with zeros.
  • f_dc_0 to f_dc_2: the base colour, stored as the first spherical harmonics coefficients, not as ordinary red, green and blue values.
  • f_rest_0 to f_rest_44: 45 further spherical harmonics coefficients at the default setting (degree 3). They describe how the colour shifts as you look from different directions.
  • opacity: how see-through the splat is.
  • scale_0 to scale_2: its size along three axes.
  • rot_0 to rot_3: its orientation as a quaternion.

Some values are not stored in the form they are displayed in. In the reference code, opacity passes through a sigmoid function and scale through an exponential when the file is used, so the raw numbers in the file look odd if you read them directly.

At the default setting that is 62 floats, or 248 bytes, per splat. A scene with one million splats is therefore about 248 MB before any compression, which is why splat PLY files are large.

05

Why a splat PLY looks wrong or empty in a mesh viewer

Opening a Gaussian splat PLY in a general 3D program often gives a disappointing result: a sparse dusting of dots, a grey shape, or what looks like nothing. The file is fine. The program is reading only the parts it understands.

  • There are no faces, so there is no surface to shade.
  • There are no red, green and blue properties. Colour sits in the f_dc and f_rest coefficients, which a mesh or point-cloud tool does not interpret.
  • Scale, rotation and opacity are ignored, so each soft, stretched blob collapses into a single point.

Because PLY lets programs skip properties they do not recognise, you get no error message, just the bare point positions. To see the scene as intended, you need a viewer that actually renders Gaussian splats.

06

How to open a PLY file

Pick the tool by the kind of PLY you have.

Mesh and point-cloud PLY:

  • MeshLab is an open-source program for processing and editing 3D triangular meshes, released under GPL 3.0 for Windows, macOS and Linux.
  • Blender imports PLY through File > Import > Stanford (.ply). The manual says it reads both ASCII and binary files and can import vertex colours.
  • CloudCompare is a free GPL-licensed project that runs on Windows, macOS and Linux. Its documentation lists PLY as a format it reads and writes, for clouds or meshes.

Gaussian splatting PLY:

  • SuperSplat, from PlayCanvas, is a free and open-source editor for inspecting, editing, optimizing and publishing 3D Gaussian splats. It runs in the browser, so there is nothing to install.
  • The free viewer at splatloom.com/ply-viewer opens Gaussian splat .ply and .sog files in the browser. The file is read locally and nothing is uploaded. It does not display plain point-cloud or mesh PLY files; use the tools above for those.
07

PLY to OBJ: when it works and when it cannot

OBJ is a widely supported mesh format, so people often want to convert PLY to OBJ.

For a mesh PLY this is straightforward. MeshLab lists both PLY and OBJ among the formats it can open and save, and CloudCompare's documentation lists both as formats it reads and writes. Open the PLY, then export or save it as OBJ.

For a point-cloud PLY, there is nothing to convert until you build a surface. Points have no faces, so you first need a meshing step that builds a surface from the points.

For a Gaussian splat PLY, a simple conversion does not exist. An OBJ describes a surface made of faces. A splat scene has no surface at all: it is made of overlapping, semi-transparent blobs whose colour changes with the viewing direction. You could keep only the centre points, but that throws away what makes the scene look right. Getting a mesh from a splat is a reconstruction problem, not a file conversion. If a printable or editable mesh is what you actually need, start from a photogrammetry pipeline that produces meshes. COLMAP's dense pipeline, for instance, ends in Poisson or Delaunay meshing.

08

Compressed splat formats: SOG and SPZ

Because splat PLY files are large, smaller formats have appeared for sharing and web use. Two are worth knowing.

  • SOG stands for Spatially Ordered Gaussians and is documented by PlayCanvas. It stores the splat data as a set of WebP images plus a meta.json file, optionally bundled into one ZIP-based .sog file. The specification says it is lossy by design, because values are quantized, and typically yields files around 15 to 20 times smaller than the equivalent PLY.
  • SPZ is a compressed splat format released as open source by Niantic Labs under the MIT licence. Its documentation says SPZ files are typically around 10 times smaller than the corresponding PLY, with minimal visual difference.

Both save space by storing each value with fewer bits. PlayCanvas describes PLY as the source format of a splat workflow, in the way a project file is the source for an edited image, and its SplatTransform command-line tool converts between PLY, SOG and SPZ. A sensible habit is to keep the original PLY as your master copy and make compressed versions from it when you need to share.

09

Making your own Gaussian splat PLY

If you want to produce a splat PLY from your own photos or video without setting up research code, SplatLoom is built for that. It is a desktop app for Mac (Apple Silicon, macOS 15 or later) and Windows 10/11 that generates the scene on your own computer, lets you tidy it up with crop and selection tools, and exports a Gaussian PLY alongside a PNG still, an MP4 orbit video and a self-contained offline HTML viewer.

One limit to be clear about: SplatLoom does not export meshes and is not a measuring or CAD tool. For OBJ files, 3D printing or precise dimensions, a photogrammetry program that outputs meshes is the better choice. And if you only need to look at a splat PLY someone sent you, the free browser viewer at splatloom.com/ply-viewer is enough.

Frequently asked questions

How do I open a PLY file?

It depends on what is inside. Open mesh and point-cloud PLY files with MeshLab, Blender or CloudCompare. Open Gaussian splatting PLY files with a splat viewer such as SuperSplat or the free browser viewer at splatloom.com/ply-viewer.

Can I read a PLY file in a text editor?

You can always read the header, which is plain text and lists the elements and properties. The data after end_header is readable only if the file was saved in ASCII; binary files show unreadable characters.

Can I convert a Gaussian splat PLY to OBJ?

Not directly. OBJ stores surfaces made of faces, and a Gaussian splat has no faces, only soft, semi-transparent blobs. Producing a mesh from one requires a separate surface reconstruction step, so if you need a mesh it is usually better to use photogrammetry software that outputs meshes.

Why is my Gaussian splat PLY so large?

The reference format stores 62 floating-point numbers per splat at the default setting, about 248 bytes each, with no compression. A million splats come to roughly 248 MB. Formats such as SOG and SPZ reduce this considerably by quantizing the values.

Is PLY the same as OBJ or STL?

No. They are different formats. PLY can describe meshes, point clouds and custom per-point data, which is why Gaussian splatting uses it. Tools such as MeshLab can open and save PLY, OBJ and STL, so mesh files can be converted between them.

Sources: https://www.loc.gov/preservation/digital/formats/fdd/fdd000501.shtml · https://paulbourke.net/dataformats/ply/ · https://github.com/graphdeco-inria/gaussian-splatting · https://raw.githubusercontent.com/graphdeco-inria/gaussian-splatting/main/scene/gaussian_model.py · https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/ · https://developer.playcanvas.com/user-manual/gaussian-splatting/formats/ply/ · https://developer.playcanvas.com/user-manual/gaussian-splatting/formats/sog/ · https://github.com/playcanvas/splat-transform · https://github.com/playcanvas/supersplat · https://github.com/nianticlabs/spz · https://www.meshlab.net/ · https://github.com/cnr-isti-vclab/meshlab · https://docs.blender.org/manual/en/latest/files/import_export/ply.html · https://www.cloudcompare.org/main.html · https://www.cloudcompare.org/doc/wiki/index.php/FILE_I/O · https://colmap.github.io/tutorial.html

Try it in SplatLoom