Assets are classified as either Primitive or Aggregate. Primitive assets MUST contain only information about themselves, while aggregate assets MAY contain references to other assets.
Planned primitives:
Image
Mesh
Audio
Input action map
Shader
Planned aggregates:
Material
(shader + images)Model
(mesh + materials)Construct
(fixed-length transform hierarchy)Level
File format
This section is a work in progress. I plan to use Concise Binary Object Representation (CBOR) for serialization, as it provides some desired attributes to the asset files:
- Named fields to avoid data loss when struct definitions change
- Small file size
- Existing Odin core library
File loading
Inspiration from Timothy Cain’s video, Arcanum “dat” files, development builds use a raw OS file system, release builds use packed bundles.
- data locality on the disk
- “seek” is much faster than “open”
- avoid file descriptor limits
- less overhead for many tiny assets (block alignment, OS file nodes)
- easy patches/modding with sequential overriding of the asset database
- more efficient compression