I’ve been coding a crate (or at least an API) to read/write a proprietary 3D file format. The problem is finding a crate, if one exists, that I could plug that into, so that it will convert between other formats similar to what Assimp does, but preferrably more modular. I did find a crate called mash, but it seems not only inactive, but only has a Wavefront OBJ backend that seems tied in to the crate itself as opposed to being an addon, despite being marked as a ‘feature’ (like Serde JSON is to Serde, for example).
I would have written an addon for Assimp in C++ but Rust seems easier for the job as far as coding goes (Cargo seems easier to use than CMake, plus I prefer Rust enums over std::variant or unions and Rust’s lightweightedness.). Additionally, Assimp lacks a plugin API. In order to add support for a new format, you need to build it as part of the Assimp library itself.
I don’t know of any crates like what you are asking, but there are of course an assortment of crates that parse and load various 3D formats:
… And of course many more. They each have their own APIs and quirks. But if this is an itch you need to scratch, I think creating a new crate that ties together the formats you need would probably be a very nice contribution to the Rust 3d gaming community.
As with any complex conversion strategy, you will probably want to define a new Intermediate Representation which can describe any/all features of each 3D format you intend to support. The lack of an existing De Facto 3D format is perhaps the reason a crate like this doesn’t exist. Such a De Facto format would probably make a good starting point for defining an IR. IMHO, anyway.
Well, glTF is supposed to be a kind of interchange format, at least for game engines.
Version 2 is quite recent, you could take a look at that.
There is also the alembic format, which is becoming the standard interchange format in use in VFX.
I know about these 3D formats and all. I’m writing a crate to read the .ism2 file format used by Idea Factory games. I was just wondering if I could find a crate that can take the read data and output it to another format. All these crates do though is load their respective formats, not write them.