Distill
Distill is an asset pipeline for games, reading artist-friendly formats from disk, processing them into your engine-ready formats, and delivering them to your game runtime. Distill handles dependencies between assets, import & build caching, cross-device hot reloading during development, packing assets for a shippable game build, and more.
Vision
To create an open-source go-to solution for asset processing in games.
Features
The project contains a number of different components, and some can be used independently of others. You can combine them in different ways to tailor them to your workflow. Checkmarks indicate feature support - some features are dreamed up but not implemented.
Daemon
The daemon watches for filesystem events, imports source files to produce assets, manages metadata and serves asset load requests. It is primarily intended for use during development, but can also be used in a distributed game if appropriate. The daemon is very resource efficient and only does work when either a file changes or work is requested. Other components interact with the daemon through a transport-agnostic RPC protocol.
Type definition:
custom_asset.ron
:
{
"fab4249b-f95d-411d-a017-7549df090a4f":
(
cool_string: "thanks",
// This references an asset from a file in the same directory called "amethyst.png"
handle_from_path: "amethyst.png",
// This references an asset with a UUID (see associated .meta file for an asset's UUID)
handle_from_uuid: "6c5ae1ad-ae30-471b-985b-7d017265f19f"
)
}
Loader
The Loader module loads assets and their dependencies for a user-implemented AssetStorage
trait to handle. Loader supports a pluggable LoaderIO
trait for customizing where assets and their metadata are loaded from.
TODO
Cross-Platform Support
The project aims to support as many platforms as possible with the Loader
module, while the Daemon
may never be able to run on platforms without solid filesystem support such as WASM.
Current known supported platforms:
Examples
To run:
cd examples/handle_integration
cargo run
- The example includes an image asset type, so try to put some images (png, jpg, tga) in the
assets
folder!
Have a look at the generated .meta
files in the assets
folder!
Get involved
This project is primarily used by Amethyst and casual communication around development happens in the #engine-general channel of the Amethyst Discord server. Feel free to drop by for a chat. Contributions or questions are very welcome!
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
See LICENSE-APACHE and LICENSE-MIT.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
PLEASE NOTE that some dependencies may be licensed under other terms. These are listed in deny.toml under licenses.exceptions on a best-effort basis, and are validated in every CI run using cargo-deny.