Assets
Assets are source files. They are authored by users, tools, or DCC applications and are not assumed to be in the best shape for runtime use.
Examples:
- PNG textures
- glTF or GLB models
- WAV and OGG audio
- LUT files
.bemamaterial and variant declarations- BESL shader source files referenced by materials
Asset IDs are written as resource-style paths. The file extension is part of the ID when selecting an asset handler, and a fragment can identify a sub-asset when a container format exposes many resources. For example, a glTF asset can produce a mesh resource, material resources, image resources, and generated shader resources.
Asset handlers
An AssetHandler knows how to bake one family of source files.
The asset manager keeps a list of handlers and selects one based on the asset type or extension.
The standard graphics setup installs handlers for common engine formats:
- PNG images
- glTF and GLB meshes and embedded images
.bemamaterials and variants- LUT assets
- WAV and OGG audio
Handlers return a ProcessedAsset plus binary payload bytes.
The processed asset is the typed metadata.
The payload is the byte buffer that consumers will later upload, stream, decode, or play.
Processing
Asset processing is where source data becomes engine data.
Image processing decodes pixels, infers semantics from names such as albedo, normal, roughness, or emissive, chooses gamma, and can convert to GPU-friendly formats. Mesh processing normalizes vertex layout, packs streams, creates meshlets, records bounding boxes, and associates primitives with material variants. Material processing compiles shader source and stores reflection metadata such as bindings and workgroup size.
The result is intentionally more explicit than the source asset. A renderer should not have to reopen a PNG to discover its dimensions, or parse a glTF again to find vertex streams.