Skip to main content
Version: 3.4.20 (unreleased)

Supported 3D File Formats

The file formats VRGS reads for 3D data: point clouds, triangulated meshes, elevation grids and tiled models, with what each reader brings in and where it stops. Getting Data In and Out covers the other kinds of data — photographs, logs, waypoints, interpretation — and every export.

Two ways in​

  • From the project tree. Right-click the group the data belongs in — Point Clouds or Triangular Meshes in the Data tree, or Tiled Model — and choose Import → From File…. The file-type list in the dialog is that group's formats. Under All Files, the file's extension chooses the reader.
  • By drag and drop. Drop one or more files onto a 3D view or the project tree to import them without a dialog. The Drop column below says which formats this works for. A file that cannot be imported this way is named in the messages panel. Images are placed in the scene as billboards, so drop those onto a 3D view.

Extensions are matched whatever their case, so SCAN.LAS imports as scan.las does, and file and folder names may use any script.

Coordinates and memory
  • Point clouds, OBJ and PLY meshes keep full double-precision coordinates, so UTM-sized coordinates come in exactly. glTF, GLB, FBX and STL go through a single-precision reader: see their rows.
  • Most files' coordinates are taken to be in the project's coordinate system, so set that first — see Coordinate Systems. LAS, LAZ, E57, GeoTIFF elevation and scene layer packages are the exceptions: a file of these that names its coordinate system is moved into the project's. For LAS, LAZ and E57 only X and Y are transformed; heights are converted between units but not between vertical datums.
  • Every point cloud and mesh is read whole into memory. Only scene layer packages and the Cesium base layers are streamed. VRGS estimates the memory a file needs before reading it, and asks Load it anyway? when it will not fit; see Before a model loads.

Point clouds​

Data tree → Point Clouds → Import → From File…

FormatExtensionDropWhat comes inLimits
LAS.lasYesEvery point format of LAS 1.0–1.4, 0 to 10: position; intensity as written; classification, its flags, return number and count; scan angle in degrees; user data; point source; GPS time; colour for formats 2, 3, 5, 7, 8 and 10, and near-infrared for 8 and 10, each as an attribute. Colour stored as 0–255 in LAS's 16-bit fields is recognised. A cloud without colour is shaded by elevation. A file that names its coordinate system, by EPSG code or WKT, is moved into the project's coordinate system when the project has one.Waveform packets (formats 4, 5, 9 and 10) and extra bytes per point are not kept. A user-defined coordinate system is not read, and heights are not moved between vertical datums: only X and Y are transformed.
LAZ.lazYesCompressed LAS, read by the same reader: everything the LAS row lists.As for LAS.
E57.e57YesEvery scan in the file, each placed by its pose, so the scans of a registered survey come in on one another as one cloud; a ScanIndex attribute tells them apart. Cartesian or spherical coordinates in float, double or scaled-integer form. Intensity as written, colour scaled by the file's colour limits, and the time stamp, each as an attribute. Points the scanner marks as having no return are left out. A scan without colour is shaded by its intensity, or by elevation when it has neither. A file that names its coordinate system is moved into the project's, as for LAS.The 2D images an E57 can carry, and its row and column structure, are not kept.
Leica PTS.ptsYesPosition, intensity as written (−2048 to 2047 from Cyclone) and colour, from X Y Z, X Y Z I, X Y Z R G B or X Y Z I R G B lines. A file without the point-count line reads too. A cloud with no colour is shaded by its intensity, or by elevation when it has neither.Only the first scan of a file that holds several; the messages panel says when there are more.
Leica PTX.ptxYesPosition, registered by the scan's transformation matrix; intensity; colour. Cells with no return are left out. A scan with no colour is shaded by its intensity.Only the first scan of a file that holds several, as for PTS.
Stanford PLY.plyAs a meshASCII or binary in either byte order; every vertex property as an attribute, red/green/blue as colour.A dropped .ply always becomes a mesh: import a PLY point cloud from this group.
Gaussian splat.plyNoImport → Import Gaussian Splat: the standard 3D Gaussian splatting layout.For viewing: a splat is a soft blob, not a point on the rock, so picking tools reach through it to the surface behind.
ASCII points.txt, .csv, .xyz, .xyzrgb, or any other under All FilesYes (.txt, .csv, .xyz)The columns you assign in the import dialog, which previews the file and guesses them from a header line or the column count: X, Y and Z in any order, colour, intensity, any number of named attributes, and columns to ignore. Space/tab, comma, tab or semicolon separated. Lines before the first point can be skipped; blank, comment and other lines without numbers in the X, Y and Z columns are left out. An empty or text value in an attribute column is null.Coordinates are read with . as the decimal point.
OBJ, points only.objAs a meshVertex positions.Vertex colours are not read, and the cloud starts hidden.
COLMAP modelpoints3D.bin, images.binYespoints3D.bin: a sparse reconstruction's points with their colour. images.bin: its camera positions, as a point cloud.Only those two of COLMAP's binary files.
PIF (PolyWorks, Optech ILRIS).pif, .pfYesPositions.The scan's registration matrix is not applied, and cells with no return can appear at the origin.
VRGS point cloud.pclYesA cloud saved by an earlier VRGS. VRGS keeps its own clouds as PLY files in the data folder.Only from the project's own data folder. To bring models over from another project's data folder, use Recover from data folder.
Aarhus Workbench.xyzNo—Not working in this version. Only under its own filter: a .xyz chosen under All Files, or dropped, is read as ASCII points.
Riscan2VRGS batch.pclbReported—No longer supported.

Triangulated meshes​

Data tree → Triangular Meshes → Import → From File…

FormatExtensionDropWhat comes inLimits
Wavefront OBJ.obj with its .mtlYesPositions in double precision; faces of any size, triangulated; texture coordinates; one texture page for each map_Kd image; vertex colours.Normals, smoothing groups and object groups are not kept. Faces given by negative (relative) indices are left out.
Stanford PLY.plyYesASCII or binary in either byte order; faces of any size, triangulated; vertex colours; texture coordinates, each texture named by a comment TextureFile line and found beside the file, with MeshLab's texnumber choosing a face's texture; every vertex property as an attribute.Face colours and other face properties are read past, not kept. A face that names a vertex the file does not have is left out, and the messages panel says how many. A PLY with no faces becomes a mesh with no triangles: import it from the Point Clouds group instead.
glTF / GLB.gltf, .glbYesMeshes placed by the model's node tree, a mesh used by several nodes coming in at each; materials and textures, including textures embedded in a GLB; a material with no texture comes in its own colour. Draco-compressed meshes and KTX2 (Basis Universal) textures are read. Turned from glTF's Y up to Z up, the same for .gltf and .glb.glTF stores positions in single precision, so a model whose vertices are themselves UTM-sized snaps to steps of up to half a metre; one placed by a node offset keeps its shape. A texture that cannot be read leaves its faces in the material's colour, and the messages panel names the model. Animations, cameras and lights are not read.
FBX.fbxYesMeshes placed by the model's node tree, materials and textures. The up axis and unit the file declares are applied, so a Y-up model stands up and one in centimetres comes in in metres.Positions are read in single precision, as for glTF. A file that declares the wrong unit comes in at the wrong scale; the messages panel says when a model was scaled.
STL.stlYesBinary or ASCII triangles.Single precision. STL has no units, so a model in millimetres comes in 1000 times too large.
GeoTIFF elevation.tif, .tiffNoA mesh with a vertex for every cell, nodata cells left out, placed by its GeoTIFF georeferencing or a world file and moved into the project's coordinate system.Single-band rasters only. The vertical units and datum are not converted, and a large DEM makes a large mesh: it is not thinned.
NASA HiRISE DTM.imgNo32-bit PDS DTMs, placed by the label's projection offsets and map scale.No planetary coordinate system is attached.
ArcInfo ASCII grid.ascYesDropped onto the window, a mesh of the grid. The dialog does not list it.The .prj beside it is not read.
Aarhus Workbench.xyzNoA mesh from an Aarhus Workbench model export.Limited: check the result.
OpenSceneGraph.osgNoTriangles, through the OpenSceneGraph plugin's own command on this menu.ASCII .osg only, without textures or transforms. The plugin is not installed with VRGS.

Scan Folder (OBJ Files) on the same menu imports every OBJ in a folder and its subfolders, which is how most photogrammetry packages write a tiled model.

Elevation grids as points​

The Point Clouds dialog also reads gridded elevation data, one point per cell. For a surface, import a GeoTIFF, HiRISE DTM or ArcInfo ASCII grid as a mesh instead (above).

FormatExtensionDropLimits
TIFF elevation.tif, .tiffNoAs for the mesh.
NASA HiRISE DTM.imgNoAs for the mesh.
ArcInfo ASCII grid.ascAs a meshImport → Arc Info ASCII (.asc) Folder reads a folder of them.
USGS DEM.demYesCells with no data can appear as points at the origin.
ZMAP+ grid.datNo—
BIL (band interleaved by line).bilYesNot working in this version.
Seismic 2D ASCII, 5 columns.ascNoMakes a mesh and a point cloud of the section. Reading stops at the first value that is not a number.

A .tif, .dat or .img cannot be dropped, because each can hold more than one kind of data: use the dialog, which asks.

Tiled and streamed models​

Data tree → Tiled Model → Import

FormatExtensionDropWhat comes inLimits
Scene layer package (I3S).slpkYesIntegrated-mesh and 3D-object scene layers, I3S 1.6 to 1.9: node pages, Draco-compressed geometry, JPEG, PNG and DDS textures. Streamed by level of detail in both 3D views, and pickable. VRGS also writes them from a textured mesh (I3S 1.8 integrated mesh; see Exporting a tiled model).Unpacked into the project's TILEMODELS folder first, which needs about the package's size again on disk. Only WGS84 (EPSG:4326) layers are reprojected; a projected layer must already be in the project's coordinate system. Point-cloud scene layers are not supported.
ArcGIS scene serviceURL—Connect i3s Service, then the service's URL in the tiled model's properties.Experimental: older layers only (those without node pages), shown in the OpenGL view only, and the URL is not saved with the project.
GeoTIFF as tiles.tif——Not working in this version.
Cesium 3D Tilestileset.json, URL, Cesium ion asset—Cesium World Terrain and Google Photorealistic 3D Tiles stream from the Overlays gallery on the Home ribbon. A tileset of your own (an export from Metashape, Pix4D or RealityCapture, or a Cesium ion asset) streams from 3D Tiles from File… or 3D Tiles from URL… in the same gallery, placed by the project's coordinate system.Shown in place of the base layer, not as a project object: only one tileset shows at a time, and it is not saved with the project. The project needs a coordinate system: if it has none, the Coordinate System dialog opens on the UTM zone the tileset is in. The view moves to the tileset once its extent is known. A tileset with no transform onto the Earth (most of Cesium's 3d-tiles-samples) cannot be placed in a project's coordinates and is refused. 3D Tiles from URL… takes an https:// address, a full path to a tileset.json, or an ion asset number, followed by an access token for an asset of your own.

When an import fails​

The messages panel says what went wrong: a file that would not open, a format a reader does not handle, or a file that held nothing it could read. A mesh import that comes out empty is taken back out of the project, so no empty mesh is left in the tree. A point cloud that read nothing stays in the tree, empty: delete it. A file that runs out of memory part way is dropped and the model hidden, with the reason in the messages panel.

See also​