STF - Squirrel Transfer Format¶
A modular file-format for 3D assets Intended for (not only) games-development use-cases.
Warning
Please note, STF is a work in progress and likely to change.
Install STF support for:
Try to import this example model!
Relevant future implementation targets include: 3dsMax, Unreal Engine, Maya, Bevy, BabylonJs, …
Advantages¶
Made Games-Development
STF files are meant to be imported into game-engine projects (Godot, Unity, Unreal, …), and are also usable for further editing in 3d modeling tools (Blender, 3dsMax, …). STF stores original information as well as baked results.
I.e. STF contains the original topology of meshes, including n-gons, but also the triangulation.
Animations store original unbaked keyframes, as well as baked tracks.Artist Friendly
Import & export times are short and artists don’t have to fiddle with unnecessary settings to avoid breakage.Easy to Develop
STF’s modular nature leads to very loose coupling in the source-code and easy collaboration in the development of STF implementations. A functioning implementation that handles some core resource-types can be usually developed in a day or two.
Third parties can easily develop and distribute custom resources.
Concept¶
STF is a binary format, consisting of a binary header, a Json definition and arbitrary binary buffers.
By itself it is merely a shell format. Its implementations provide a framework to parse and serialize arbitrary resources, which are defined separately.
Resources are stored as Json-objects, and can represent anything, nodes in a scene hierarchy, meshes, textures, animations, …
Every resource object is referenced by a unique ID, and contains type property.
Depending on the type, a “handler” class / function will be selected to handle import / export.
A few resources, including but not limited to stf.prefab, stf.mesh, stf.material or stf.image, are provided by default.
It should be possible to extend any STF implementation with custom resource-handlers, if at all possible.
resources object example
// ...
"resources": {
"0060c2b8-d856-4459-a88a-16e659792e6f": {
"type": "stf.material",
"name": "Body",
"properties": {
"albedo.texture": {
"type": "image",
"values": [
{
"image": 0
}
]
}
},
"style_hints": [
"realistic",
"pbr"
],
"shader_targets": {
"blender": [
"ShaderNodeBsdfPrincipled"
]
},
"referenced_resources": [
"f518a35d-d788-4692-a2dd-84d036d259e8"
]
},
{
// ...
}
},
// ...
Anatomy of an STF file
