From Interchange Files to PyTorch Tensors

Zwe Wint Naing · 2026-08-06

From Interchange Files to PyTorch Tensors

Typically almost every 3D machine-learning project begins with the same few hours and days, writing the mesh importer. You need to bind the assimp or trimesh, juggle attribute layouts, convert to tensors, validate, all of this needed doing before a single experiment even runs. Worse, said code or procedure is rarely shared between the team members, not version-matched with the dataset, and every repository needed their own brand of fine-tuning and custom settings. This article talks about deleting that step using Metrixel.

The Importer Graveyard

Interchangeable formats optimize for portability between DCC tools, but it is not really good for training. As a result, every research codebase grows a load_mesh.py of their own. You will often come across handled ad hoc, attributes reordered to fit, and many edge cases. Multiply these quirks and quick fixes across a lot of other projects and teams, and you have yourself a large number of conversion logic that has dozens of incompatibility with each other. Though again, there is the same conversion logic underneath.

Tensors as a pipeline output

Metrixel puts the conversion itself into the preparation pipeline: All the processed asset exports their own geometries as PyTorch-consumable .pt files — so you have vertex positions, vertex normals, UV coordinates, and face indices, all as one file per attribute, all in a neat and consistent folder tree. Our rationale for Metrixel is that your training code starts at load, not at parse.

There are of course two properties which we believe matter quite a fair lot:

  • Determinism. The same asset with the same configuration produces byte-identical tensors. Dataset regeneration becomes verifiable with a checksum, which is often times a property that hand-rolled importers do not have.
  • Skinned-pose tracking. For animated assets, per-frame mesh exports follow the actual skinned pose rather than the bind pose. Thus, the motion datasets capture motion as well.

Another note, however: the .pt files use Metrixel's compact raw tensor layout (header + raw element bytes), which is in turn read with a documented ~10-line loader rather than torch.load. The loader is part of the docs itself, resulting in a stable, framework-agnostic on-disk format.

Limitations

Attributes are exported as imported: There is no further simplification, no repair, no re-topology, and nothing synthesized. Additionally, meshes without UVs yields no UV tensor rather than an invented one. Metrixel will also not add any semantic labels. Essentially, what the file contained is what the tensors contain in the end.

Plans

PyTorch `.pt` mesh export is included on every plan — Standard itself has it in full, and the free evaluation tier exports real tensors within its token quota.

Watch it happen!

This week's videos go from an FBX file to a matplotlib plot in about ten lines, on each platform — including the double-run checksum proof.

https://www.youtube.com/watch?v=SCX3iGYhiqU

Up next: animation frames — sampling rate, range, and stride, and the 1-fps surprise everyone hits once.