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:

Blender

Version 4.5+

Installation

User Guide

Unity

Version 2022.3+

Installation

User Guide

Godot

Version 4.6+

Installation

User Guide

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.

See also

Read the STF Format Reference

Learn how STF compares to other 3d file-formats: Comparisons

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 Description of the layout of an STF file. You can this information in the STF Format Reference!