3.2 KiB
3.2 KiB
Asset Specification, Raw Assets, and Virtual Asset Contract Agenda
Status
Open
Purpose
Define the contract of asset.json, including the split between raw assets, virtual assets, and format-specific output specs.
Context
The draft already proposes:
asset.jsonas the anchor spec,- common fields for all assets,
- explicit pipeline declaration for virtual assets,
- future format families such as
TILES/indexed_v1andSOUNDS/pcm16le_v1.
This needs decomposition into a stable common contract plus future format-specific specs.
This agenda assumes the managed asset is the asset root described by one asset.json.
That root may aggregate multiple source inputs.
Important example:
- an atlas or image bank asset may contain many source sprites plus one or more palettes;
- one
asset.jsondescribes the whole managed asset and its final packed output; - the internal source files are inputs of that asset, not separate assets unless explicitly modeled that way.
Source Sections
5.3 Asset Types (Bank Targets)5.4 Raw vs Virtual Assets7. Asset Specification: asset.json14. Virtual Assets (Deep Explanation)
Key Questions
- Which fields belong to every
asset.jsonregardless of type? - Which parts of the file are common packer contract versus format-specific contract?
- How explicit must virtual build steps be?
- Where should defaults live, and when must they be materialized?
- Is
typethe bank target, the user-facing kind, or both? - How should packer version output formats independently from registry and descriptor schemas?
- How should one
asset.jsondeclare many internal inputs that together form one virtual asset, such as an atlas plus palettes?
Options
Option A
Keep a small common asset.json contract and push all output-specific rules into dedicated format specs.
Option B
Keep a richer monolithic asset.json contract in one central spec.
Tradeoffs
- Option A scales better as new asset formats are added.
- Option A keeps the core packer spec smaller and more stable.
- Option B looks simpler initially but becomes harder to evolve without coupling unrelated formats together.
Recommendation
Adopt Option A:
- a compact common
asset.jsoncontract, - format-specific normative specs for each output family,
- explicit virtual asset declarations with deterministic materialization rules.
Also adopt this modeling direction:
asset.jsondescribes the managed output unit;- many internal source files may feed that single managed output;
- atlas/image-bank style assets should be modeled as one asset with many inputs rather than many implicit sibling assets.
Expected Decisions to Produce
- Common
asset.jsonschema boundary. - Raw versus virtual asset contract.
- Versioning strategy for asset format specs.
- Rules for defaults and explicit materialization.
- Multi-input asset declaration model for atlas, bank, and similar grouped assets.
Expected Spec Follow-up
- Common asset specification spec.
- Virtual asset contract spec.
- Format-specific specs such as
TILES/indexed_v1.
Non-Goals
- Final CLI UX for authoring these files.
- Incremental build internals.
- Cartridge builder consumption details.