Skip to content

emperorofmars/stf_documentation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

STF: Documentation

Squirrel Transfer Format - Experimental Modular 3D Interchange Format [version 0.0.0]

Intended for (not only) game development use-cases.

In development for for:

Blender

Unity

This repository hosts the documentation for the core format and core modules.

Core Format Documentation

Modules Documentation

Roadmap


Similar to the concept of GLTF 2.0, this format consists of a Json definition and binary buffers. However, this format is firmly intended for interchange & integrity, not runtime loading optimization.
Game-engines are responsible for runtime optimization, not the 3d file format or 3d modeling tool!

STF doesn’t hard-code any specific resource types like GLTF. It consists of a structure of resources which get identified by a 'type' property. Support for any arbitrary type gets implemented by modules, which are pluggable and hot-loadable.

Core Principles
  • Highly modular and extensible

  • Doesn’t impose any descisions on artists and game-developers

  • Prioritizes developer-experience & user-experience over performance

  • Maximizes development speed for STF implementations and additional third party modules


Previously, a proof-of-concept for such a format has been made here: Repository Link


Partial example Json definition
{
	"stf": {
		"version_major": 0,
		"version_minor": 0,
		"root": "8a4019a2-ca1d-4f9b-a316-b118cd31dada",
		"profiles": [],
		"asset_info": {
			"asset_name": "Default Cube"
		},
		"generator": "stfblender",
		"timestamp": "2025-02-15T20:41:01.988159+00:00",
		"metric_multiplier": 1
	},
	"resources": {
		"ba0f6e23-cb13-4cd5-9f66-8184460befc4": {
			"type": "stf.material",
			"name": "Material",
			"properties": {
				"color": {
					"value_type": "color",
					"value": [
						1.0,
						1.0,
						1.0
					]
				}
			},
			"style_hints": [],
			"shader_targets": {}
		},
		"a72729cd-be7d-4b2c-a02e-cf8bfdc97e20": {
			"type": "stf.mesh",
			"name": "Cube",
			"material_slots": [
				"ba0f6e23-cb13-4cd5-9f66-8184460befc4"
			],
			"vertex_count": 8,
			"vertex_width": 4,
			"vertex_indices_width": 4,
			"vertices": "d8e72e40-9006-441b-a0c5-1315700f14ef",
			"vertex_color_width": 4,
			"colors": [],
			"split_count": 24,
			"split_indices_width": 4,
			"split_normal_width": 4,
			"split_tangent_width": 4,
			"split_color_width": 4,
			"split_uv_width": 4,
			"splits": "f36cb7a4-ffd9-48e7-87b3-321c91da6c5a",
			"split_normals": "2eb9be5e-b2ad-4df0-9163-942a506ddff8",
			"split_tangents": "d12eb259-c0f3-4b0a-bed1-6904e62f8a1b",
			"uvs": [
				{
					"name": "UVMap",
					"uv": "4d9ee4ba-a45c-4bba-8a96-1bd79d86eee6"
				}
			],
			"split_colors": [],
			"tris_count": 12,
			"face_count": 6,
			"face_indices_width": 4,
			"tris": "a66be574-6ed2-4607-9190-a1ed4e2331c3",
			"material_indices_width": 4,
			"faces": "cd1688fc-d100-4916-a0c2-dfa5899f010e",
			"material_indices": "0a0e9df2-e63e-47b5-acab-1435d5b3579f",
			"sharp_face_indices_len": 6,
			"sharp_face_indices": "950f09cc-f6e1-4173-bf9a-2054ae233717",
			"lines_len": 0,
			"lines": "85cc4f16-0934-45f0-9249-304a991ee78a",
			"sharp_edges_len": 0,
			"sharp_edges": "d86f7202-ad21-4e94-8659-9f17c2be827b",
			"armature": "a72729cd-be7d-4b2c-a02e-cf8bfdc97e20",
			"bones": [],
			"bone_weight_width": 4,
			"weights": [],
			"components": [
				"a72729cd-be7d-4b2c-a02e-cf8bfdc97e20"
			]
		},
		"a72729cd-be7d-4b2c-a02e-cf8bfdc97e20": {
			"type": "stf.mesh.seams",
			"seams_len": 0,
			"seams": "3f877195-7da8-41fc-be16-63833584fc97"
		},
		"4a76690a-8f1c-4a3c-9135-4bcac5c92831": {
			"type": "stf.instance.mesh",
			"name": "Cube",
			"children": [],
			"trs": [
				[
					0.0,
					0.0,
					-0.0
				],
				[
					0.0,
					0.0,
					-0.0,
					1.0
				],
				[
					1.0,
					1.0,
					1.0
				]
			],
			"instance": "0131108d-ea45-4ed7-a427-6c6f1a1a3f7e"
		},
		"0131108d-ea45-4ed7-a427-6c6f1a1a3f7e": {
			"mesh": "a72729cd-be7d-4b2c-a02e-cf8bfdc97e20",
			"material_slots": [
				{
					"name": "Material",
					"material": "ba0f6e23-cb13-4cd5-9f66-8184460befc4"
				}
			],
			"blendshape_values": []
		},
		"8a4019a2-ca1d-4f9b-a316-b118cd31dada": {
			"type": "stf.prefab",
			"name": "Scene Collection",
			"root_nodes": [
				"4a76690a-8f1c-4a3c-9135-4bcac5c92831"
			],
			"animations": []
		}
	},
	"buffers": {
		"d8e72e40-9006-441b-a0c5-1315700f14ef": {
			"type": "stf.buffer.included",
			"index": 0
		},
		...
	}
}

⭐ Star this repo if you would like to not loose half your work between export and import! ⭐

License

This repository is licensed under CC-BY-4.0 (https://creativecommons.org/licenses/by/4.0/)

About

Experimental Modular 3D Interchange Format for Games-Development

Topics

Resources

License

Stars

Watchers

Forks