# Supported File Formats

F3D supports the following file formats:

| Name                                      | File Extension(s)                              | Full scene | Animation Support | Streaming Support | Plugin    | Reader Name             |
| ----------------------------------------- | ---------------------------------------------- | ---------- | ----------------- | ----------------- | --------- | ----------------------- |
| Legacy VTK                                | `.vtk`                                         | No         | NONE              | YES (VTK 9.7)     | `native`  | `VTKLegacy`             |
| VTK XML                                   | `.vtp`, `.vtu`, `.vtr`, `.vti`, `.vts`, `.vtm` | No         | NONE              | YES (VTK 9.7)     | `native`  | `VTKXMLVT<P,U,R,I,S,M>` |
| VTKHDF                                    | `.vtkhdf`                                      | No         | UNIQUE            | YES (VTK 9.6)     | `hdf`     | `VTKHDF`                |
| EXODUS II                                 | `.e`, `.ex2`, `.exo`, `.g`                     | No         | UNIQUE            | NO                | `hdf`     | `ExodusII`              |
| NetCDF                                    | `.nc`, `.cdf`, `.ncdf`                         | No         | UNIQUE            | NO                | `hdf`     | `NetCDF`                |
| Polygon File Format                       | `.ply`                                         | No         | NONE              | YES (VTK 9.5)     | `native`  | `PLYReader`             |
| Standard Triangle Language                | `.stl`                                         | No         | NONE              | YES (VTK 9.6)     | `native`  | `STL`                   |
| DICOM                                     | `.dcm`                                         | No         | NONE              | YES (VTK 9.6)     | `native`  | `DICOM`                 |
| NRRD ("nearly raw raster data")           | `.nrrd`, `.nhdr`                               | No         | NONE              | NO                | `native`  | `Nrrd`                  |
| MetaHeader MetaIO                         | `.mhd`, `.mha`                                 | No         | NONE              | NO                | `native`  | `MetaImage`             |
| Tag Image File Format 2D/3D               | `.tif`, `.tiff`                                | No         | NONE              | NO                | `native`  | `TIFF`                  |
| PNG Image                                 | `.png`                                         | Yes        | NONE              | YES (VTK 9.6)     | `native`  | `PNG`                   |
| JPEG Image                                | `.jpg`, `.jpeg`                                | Yes        | NONE              | YES (VTK 9.6)     | `native`  | `JPEG`                  |
| BMP Image                                 | `.bmp`                                         | Yes        | NONE              | YES (VTK 9.6)     | `native`  | `BMP`                   |
| TGA Image                                 | `.tga`                                         | Yes        | NONE              | YES (VTK 9.6)     | `native`  | `TGA`                   |
| HDR Radiance Image                        | `.hdr`                                         | Yes        | NONE              | YES (VTK 9.6)     | `native`  | `HDR`                   |
| WebP Image                                | `.webp`                                        | Yes        | NONE              | YES (VTK 9.6)     | `native`  | `WebP`                  |
| OpenEXR Image                             | `.exr`                                         | Yes        | NONE              | YES (VTK 9.6)     | `native`  | `EXR`                   |
| QuakeMDL                                  | `.mdl`                                         | Yes        | SINGLE            | YES (VTK 9.5)     | `native`  | `QuakeMDL`              |
| CityGML                                   | `.gml`                                         | No         | NONE              | YES (VTK 9.6)     | `native`  | `CityGML`               |
| Point Cloud                               | `.pts`                                         | No         | NONE              | YES (VTK 9.6)     | `native`  | `PTS`                   |
| Standard for the Exchange of Product Data | `.step`, `.stp`, `.stpnc`, `.p21`, `.210`      | No         | NONE              | YES (VTK 9.6)     | `occt`    | `STEP`                  |
| Initial Graphics Exchange Specification   | `.iges`, `.igs`                                | No         | NONE              | NO                | `occt`    | `IGES`                  |
| Open CASCADE Technology BRep format       | `.brep`                                        | No         | NONE              | YES (VTK 9.6)     | `occt`    | `BREP`                  |
| Open CASCADE Technology XBF format        | `.xbf`                                         | No         | NONE              | YES (VTK 9.6)     | `occt`    | `XBF`                   |
| Alembic                                   | `.abc`                                         | No         | UNIQUE            | YES (VTK 9.6)     | `alembic` | `Alembic`               |
| Wavefront OBJ                             | `.obj`                                         | Yes        | NONE              | PARTIAL (VTK 9.7) | `native`  | `OBJ`                   |
| GL Transmission Format                    | `.gltf`                                        | Yes        | MULTI             | PARTIAL (VTK 9.6) | `native`  | `GLTF`, `GLTFDraco`     |
| GL Transmission Format (binary)           | `.glb`                                         | Yes        | MULTI             | YES (VTK 9.6)     | `native`  | `GLB`, `GLBDraco`       |
| Draco                                     | `.drc`                                         | No         | NONE              | YES               | `draco`   | `Draco`                 |
| Autodesk 3D Studio                        | `.3ds`                                         | Yes        | NONE              | YES (VTK 9.6)     | `native`  | `3DS`                   |
| Virtual Reality Modeling Language         | `.wrl`, `.vrml`                                | Yes        | NONE              | NO                | `native`  | `VRMLReader`            |
| Autodesk Filmbox                          | `.fbx`                                         | Yes        | SINGLE            | YES (VTK 9.6)     | `assimp`  | `FBX`                   |
| COLLADA                                   | `.dae`                                         | Yes        | SINGLE            | PARTIAL (VTK 9.6) | `assimp`  | `COLLADA`               |
| Object File Format                        | `.off`                                         | Yes        | NONE              | YES (VTK 9.6)     | `assimp`  | `OFF`                   |
| Drawing Exchange Format                   | `.dxf`                                         | Yes        | NONE              | YES (VTK 9.6)     | `assimp`  | `DXF`                   |
| DirectX                                   | `.x`                                           | Yes        | SINGLE            | YES (VTK 9.6)     | `assimp`  | `DirectX`               |
| 3D Manufacturing Format                   | `.3mf`                                         | Yes        | NONE              | YES (VTK 9.6)     | `assimp`  | `3MF`                   |
| Universal Scene Description               | `.usd`, `.usda`, `.usdc`, `.usdz`              | Yes        | SINGLE            | NO                | `usd`     | `USD`                   |
| VDB                                       | `.vdb`                                         | No         | NONE              | YES (VTK 9.6)     | `vdb`     | `VDB`                   |
| Industry Foundation Classes               | `.ifc`                                         | No         | NONE              | YES               | `webifc`  | `IFC`                   |
| 3D Gaussian splatting                     | `.splat`                                       | No         | NONE              | YES (VTK 9.5)     | `native`  | `Splat`                 |
| Compressed 3D Gaussian splatting          | `.spz`                                         | No         | NONE              | YES (VTK 9.5)     | `native`  | `SPZ`                   |
| LASer format for lidar point cloud        | `.las`, `.laz`                                 | No         | NONE              | NO                | `pdal`    | `LAS`                   |
| Binary Point File                         | `.bpf`                                         | No         | NONE              | NO                | `pdal`    | `BinaryPointFile`       |
| TerraScan binary files                    | `.bin`                                         | No         | NONE              | NO                | `pdal`    | `TerraScanBIN`          |
| Optech Corrected Sensor Data              | `.csd`                                         | No         | NONE              | NO                | `pdal`    | `OptechCSD`             |
| Point Cloud Data                          | `.pcd`                                         | No         | NONE              | NO                | `pdal`    | `PCD`                   |
| Leica Cyclone                             | `.ptx`                                         | No         | NONE              | NO                | `pdal`    | `LeicaCyclonePTX`       |
| Airborne Topographic Mapper QFIT          | `.qi`                                          | No         | NONE              | NO                | `pdal`    | `QFIT`                  |
| Smoothed Best Estimate of Trajectory      | `.sbet`                                        | No         | NONE              | NO                | `pdal`    | `SBET`                  |
| Esri Scene Layer Package                  | `.slpk`                                        | No         | NONE              | NO                | `pdal`    | `SLPK`                  |

Streaming support refers to the ability to read from stdin and requires specifying the reader name, see [the examples](03-OPTIONS.md#piping).

If a format supports streaming, then its header content will be checked before trying to open it. Use `--force-reader` to ignore the header content check.

To get accurate information for your own build of F3D, using the [dedicated option](03-OPTIONS.md), `--list-readers`.

## Reader options

Readers can provide option that can be set using the `-D/--define` [command line option](03-OPTIONS.md).
eg: `-DVDB.downsampling_factor=0.5` or using the `set_reader_option` [command](07-COMMANDS.md).

For booleans, 0 means false, not 0 means true. Unsigned int will interpret anything that is not a non-negative integer as the default value.

| Plugin   | Option Name                | Argument Type  | Description                                                                          |
| -------- | -------------------------- | -------------- | ------------------------------------------------------------------------------------ |
| `vdb`    | `VDB.downsampling_factor`  | `double`       | Control the level of downsampling when reading a volume, default is 0.1.             |
| `occt`   | `STEP.linear_deflection`   | `double`       | Control the distance between a curve and the resulting tessellation, default is 0.1. |
| `occt`   | `STEP.angular_deflection`  | `double`       | Control the angle between two subsequent segments, default is 0.5.                   |
| `occt`   | `STEP.relative_deflection` | `bool`         | Control if the deflection values are relative to object size, default is false.      |
| `occt`   | `STEP.read_wire`           | `bool`         | Control if lines should be read, default is true.                                    |
| `occt`   | `IGES.linear_deflection`   | `double`       | Control the distance between a curve and the resulting tessellation, default is 0.1. |
| `occt`   | `IGES.angular_deflection`  | `double`       | Control the angle between two subsequent segments, default is 0.5.                   |
| `occt`   | `IGES.relative_deflection` | `bool`         | Control if the deflection values are relative to object size, default is false.      |
| `occt`   | `IGES.read_wire`           | `bool`         | Control if lines should be read, default is true.                                    |
| `occt`   | `BREP.linear_deflection`   | `double`       | Control the distance between a curve and the resulting tessellation, default is 0.1. |
| `occt`   | `BREP.angular_deflection`  | `double`       | Control the angle between two subsequent segments, default is 0.5.                   |
| `occt`   | `BREP.relative_deflection` | `bool`         | Control if the deflection values are relative to object size, default is false.      |
| `occt`   | `BREP.read_wire`           | `bool`         | Control if lines should be read, default is true.                                    |
| `occt`   | `XBF.linear_deflection`    | `double`       | Control the distance between a curve and the resulting tessellation, default is 0.1. |
| `occt`   | `XBF.angular_deflection`   | `double`       | Control the angle between two subsequent segments, default is 0.5.                   |
| `occt`   | `XBF.relative_deflection`  | `bool`         | Control if the deflection values are relative to object size, default is false.      |
| `occt`   | `XBF.read_wire`            | `bool`         | Control if lines should be read, default is true.                                    |
| `mdl`    | `QuakeMDL.skin_index`      | `unsigned int` | Select a particular skin from a `mdl` file. Uses 0-indexing, default is 0.           |
| `webifc` | `IFC.circle_segments`      | `int`          | Number of segments for circular geometry, default is 12.                             |
| `webifc` | `IFC.read_openings`        | `bool`         | Read IfcOpeningElement entities (doors/windows cutouts), default is false.           |
| `webifc` | `IFC.read_spaces`          | `bool`         | Read IfcSpace entities (room volumes), default is false.                             |

## Format details

### QuakeMDL

- Models texture are loaded with a simple PBR lighting (diffuse color only, no specular, index of refraction set to 1.0).
- Selecting `skin` is not supported.
- Animation frames are split based on their names, eg: `stand1`, `stand2`, `stand3`, `run1`, `run2`, `run3`.

### 3D Gaussian splatting

Currently, 3 different formats are supported by F3D:

- `.ply`: Original 3DGS format
- `.splat`: Format specified by https://github.com/antimatter15/splat. Does not support spherical harmonics.
- `.spz`: Niantic's format specified by https://github.com/nianticlabs/spz (v2 and v3)

Note that no config files come with the `.ply` format because this format isn't dedicated to 3DGS only so we cannot generalize.
If you are using `.ply` for 3DGS only, you can set up a config file similar to what is done for `.splat` or `.spz`.
See configuration file [documentation](./06-CONFIGURATION_FILE.md)
